@api-client/ui 0.0.5 → 0.0.7

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 (323) hide show
  1. package/demo/elements/http/http-assertions.html +3 -0
  2. package/demo/elements/http/http-assertions.ts +1 -1
  3. package/demo/elements/http/http-flows.html +23 -0
  4. package/demo/elements/http/http-flows.ts +92 -0
  5. package/demo/elements/http/index.html +3 -0
  6. package/demo/pages/http-project/main.ts +5 -6
  7. package/dist/define/dialog/delete-cookie-action-dialog.d.ts +10 -0
  8. package/dist/define/dialog/delete-cookie-action-dialog.d.ts.map +1 -0
  9. package/dist/define/dialog/delete-cookie-action-dialog.js +14 -0
  10. package/dist/define/dialog/delete-cookie-action-dialog.js.map +1 -0
  11. package/dist/define/dialog/set-cookie-action-dialog.d.ts +10 -0
  12. package/dist/define/dialog/set-cookie-action-dialog.d.ts.map +1 -0
  13. package/dist/define/dialog/set-cookie-action-dialog.js +14 -0
  14. package/dist/define/dialog/set-cookie-action-dialog.js.map +1 -0
  15. package/dist/define/http/http-assertions.d.ts +1 -1
  16. package/dist/define/http/http-assertions.d.ts.map +1 -1
  17. package/dist/define/http/http-assertions.js +3 -3
  18. package/dist/define/http/http-assertions.js.map +1 -1
  19. package/dist/define/http/http-flows.d.ts +10 -0
  20. package/dist/define/http/http-flows.d.ts.map +1 -0
  21. package/dist/define/http/http-flows.js +13 -0
  22. package/dist/define/http/http-flows.js.map +1 -0
  23. package/dist/define/ui/ui-divider.d.ts +4 -1
  24. package/dist/define/ui/ui-divider.d.ts.map +1 -1
  25. package/dist/define/ui/ui-divider.js +11 -2
  26. package/dist/define/ui/ui-divider.js.map +1 -1
  27. package/dist/elements/ApiElement.d.ts +4 -0
  28. package/dist/elements/ApiElement.d.ts.map +1 -1
  29. package/dist/elements/ApiElement.js +6 -0
  30. package/dist/elements/ApiElement.js.map +1 -1
  31. package/dist/elements/amf/ApiAuthorizationEditor.element.js +1 -1
  32. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  33. package/dist/elements/amf/ApiOperationDocument.element.d.ts.map +1 -1
  34. package/dist/elements/amf/ApiOperationDocument.element.js +2 -1
  35. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  36. package/dist/elements/amf/ApiRequest.element.js +1 -1
  37. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  38. package/dist/elements/amf/ApiRequestEditor.element.d.ts +0 -1
  39. package/dist/elements/amf/ApiRequestEditor.element.d.ts.map +1 -1
  40. package/dist/elements/amf/ApiRequestEditor.element.js +0 -3
  41. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  42. package/dist/elements/authorization/ui/Authorization.d.ts +2 -1
  43. package/dist/elements/authorization/ui/Authorization.d.ts.map +1 -1
  44. package/dist/elements/authorization/ui/Authorization.js +0 -3
  45. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  46. package/dist/elements/dialog/DeleteCookieAction.element.d.ts +20 -0
  47. package/dist/elements/dialog/DeleteCookieAction.element.d.ts.map +1 -0
  48. package/dist/elements/dialog/DeleteCookieAction.element.js +93 -0
  49. package/dist/elements/dialog/DeleteCookieAction.element.js.map +1 -0
  50. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts +3 -0
  51. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts.map +1 -0
  52. package/dist/elements/dialog/DeleteCookieAction.styles.js +13 -0
  53. package/dist/elements/dialog/DeleteCookieAction.styles.js.map +1 -0
  54. package/dist/elements/dialog/Rename.d.ts +7 -6
  55. package/dist/elements/dialog/Rename.d.ts.map +1 -1
  56. package/dist/elements/dialog/Rename.js +7 -6
  57. package/dist/elements/dialog/Rename.js.map +1 -1
  58. package/dist/elements/dialog/SetCookieAction.element.d.ts +22 -0
  59. package/dist/elements/dialog/SetCookieAction.element.d.ts.map +1 -0
  60. package/dist/elements/dialog/SetCookieAction.element.js +173 -0
  61. package/dist/elements/dialog/SetCookieAction.element.js.map +1 -0
  62. package/dist/elements/environment/EnvironmentEditor.d.ts +24 -3
  63. package/dist/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  64. package/dist/elements/environment/EnvironmentEditor.js +69 -23
  65. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  66. package/dist/elements/environment/EnvironmentEditor.styles.d.ts.map +1 -1
  67. package/dist/elements/environment/EnvironmentEditor.styles.js +5 -0
  68. package/dist/elements/environment/EnvironmentEditor.styles.js.map +1 -1
  69. package/dist/elements/environment/ServerEditor.d.ts +3 -3
  70. package/dist/elements/environment/ServerEditor.d.ts.map +1 -1
  71. package/dist/elements/environment/ServerEditor.js +3 -6
  72. package/dist/elements/environment/ServerEditor.js.map +1 -1
  73. package/dist/elements/environment/VariablesEditor.d.ts +0 -1
  74. package/dist/elements/environment/VariablesEditor.d.ts.map +1 -1
  75. package/dist/elements/environment/VariablesEditor.js +3 -6
  76. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  77. package/dist/elements/highlight/Prism.styles.d.ts.map +1 -1
  78. package/dist/elements/highlight/Prism.styles.js +12 -5
  79. package/dist/elements/highlight/Prism.styles.js.map +1 -1
  80. package/dist/elements/http/BodyEditor.d.ts +0 -4
  81. package/dist/elements/http/BodyEditor.d.ts.map +1 -1
  82. package/dist/elements/http/BodyEditor.js +10 -16
  83. package/dist/elements/http/BodyEditor.js.map +1 -1
  84. package/dist/elements/http/BodyMultipartEditor.d.ts +3 -16
  85. package/dist/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  86. package/dist/elements/http/BodyMultipartEditor.js +3 -19
  87. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  88. package/dist/elements/http/BodyTextEditor.d.ts +0 -1
  89. package/dist/elements/http/BodyTextEditor.d.ts.map +1 -1
  90. package/dist/elements/http/BodyTextEditor.js +0 -3
  91. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  92. package/dist/elements/http/BodyUrlEncodedEditor.d.ts +3 -3
  93. package/dist/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
  94. package/dist/elements/http/BodyUrlEncodedEditor.js +3 -5
  95. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  96. package/dist/elements/http/HeadersForm.d.ts +0 -4
  97. package/dist/elements/http/HeadersForm.d.ts.map +1 -1
  98. package/dist/elements/http/HeadersForm.js +0 -6
  99. package/dist/elements/http/HeadersForm.js.map +1 -1
  100. package/dist/elements/http/HttpAssertions.element.d.ts +55 -0
  101. package/dist/elements/http/HttpAssertions.element.d.ts.map +1 -0
  102. package/dist/elements/http/HttpAssertions.element.js +264 -0
  103. package/dist/elements/http/HttpAssertions.element.js.map +1 -0
  104. package/dist/elements/http/HttpAssertions.styles.d.ts.map +1 -1
  105. package/dist/elements/http/HttpAssertions.styles.js +7 -156
  106. package/dist/elements/http/HttpAssertions.styles.js.map +1 -1
  107. package/dist/elements/http/HttpFlows.common.d.ts +3 -0
  108. package/dist/elements/http/HttpFlows.common.d.ts.map +1 -0
  109. package/dist/elements/http/HttpFlows.common.js +181 -0
  110. package/dist/elements/http/HttpFlows.common.js.map +1 -0
  111. package/dist/elements/http/HttpFlows.element.d.ts +97 -0
  112. package/dist/elements/http/HttpFlows.element.d.ts.map +1 -0
  113. package/dist/elements/http/HttpFlows.element.js +684 -0
  114. package/dist/elements/http/HttpFlows.element.js.map +1 -0
  115. package/dist/elements/http/HttpFlows.styles.d.ts +3 -0
  116. package/dist/elements/http/HttpFlows.styles.d.ts.map +1 -0
  117. package/dist/elements/http/HttpFlows.styles.js +28 -0
  118. package/dist/elements/http/HttpFlows.styles.js.map +1 -0
  119. package/dist/elements/http/HttpFlowsUi.d.ts +172 -0
  120. package/dist/elements/http/HttpFlowsUi.d.ts.map +1 -0
  121. package/dist/elements/http/HttpFlowsUi.js +1256 -0
  122. package/dist/elements/http/HttpFlowsUi.js.map +1 -0
  123. package/dist/elements/http/RequestConfigElement.d.ts +0 -1
  124. package/dist/elements/http/RequestConfigElement.d.ts.map +1 -1
  125. package/dist/elements/http/RequestConfigElement.js +8 -11
  126. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  127. package/dist/elements/http/RequestEditor.d.ts +10 -10
  128. package/dist/elements/http/RequestEditor.d.ts.map +1 -1
  129. package/dist/elements/http/RequestEditor.js +62 -23
  130. package/dist/elements/http/RequestEditor.js.map +1 -1
  131. package/dist/elements/http/UrlInput.d.ts +3 -3
  132. package/dist/elements/http/UrlInput.d.ts.map +1 -1
  133. package/dist/elements/http/UrlInput.js +2 -2
  134. package/dist/elements/http/UrlInput.js.map +1 -1
  135. package/dist/elements/http/UrlParamsForm.d.ts +0 -1
  136. package/dist/elements/http/UrlParamsForm.d.ts.map +1 -1
  137. package/dist/elements/http/UrlParamsForm.js +0 -3
  138. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  139. package/dist/elements/layout/SplitView.styles.d.ts.map +1 -1
  140. package/dist/elements/layout/SplitView.styles.js +1 -0
  141. package/dist/elements/layout/SplitView.styles.js.map +1 -1
  142. package/dist/elements/navigation/AppNavigationItem.styles.d.ts.map +1 -1
  143. package/dist/elements/navigation/AppNavigationItem.styles.js +2 -0
  144. package/dist/elements/navigation/AppNavigationItem.styles.js.map +1 -1
  145. package/dist/elements/project/HttpProjectRequest.d.ts +2 -1
  146. package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
  147. package/dist/elements/project/HttpProjectRequest.js +14 -5
  148. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  149. package/dist/elements/project/ProjectRunner.d.ts +0 -1
  150. package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
  151. package/dist/elements/project/ProjectRunner.js +1 -4
  152. package/dist/elements/project/ProjectRunner.js.map +1 -1
  153. package/dist/elements/schema-design/AssociationFormElement.d.ts +0 -1
  154. package/dist/elements/schema-design/AssociationFormElement.d.ts.map +1 -1
  155. package/dist/elements/schema-design/AssociationFormElement.js +2 -5
  156. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  157. package/dist/elements/schema-design/DataEntityEditorElement.d.ts +2 -2
  158. package/dist/elements/schema-design/DataEntityEditorElement.d.ts.map +1 -1
  159. package/dist/elements/schema-design/DataEntityEditorElement.js +5 -5
  160. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  161. package/dist/elements/schema-design/DataSchemaDocument.d.ts +0 -1
  162. package/dist/elements/schema-design/DataSchemaDocument.d.ts.map +1 -1
  163. package/dist/elements/schema-design/DataSchemaDocument.js +4 -7
  164. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  165. package/dist/elements/schema-design/EntityFormElement.d.ts +0 -1
  166. package/dist/elements/schema-design/EntityFormElement.d.ts.map +1 -1
  167. package/dist/elements/schema-design/EntityFormElement.js +4 -7
  168. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  169. package/dist/elements/schema-design/PropertyFormElement.d.ts +1 -2
  170. package/dist/elements/schema-design/PropertyFormElement.d.ts.map +1 -1
  171. package/dist/elements/schema-design/PropertyFormElement.js +8 -11
  172. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  173. package/dist/pages/ApplicationScreen.d.ts +1 -1
  174. package/dist/pages/ApplicationScreen.d.ts.map +1 -1
  175. package/dist/pages/ApplicationScreen.js +1 -1
  176. package/dist/pages/ApplicationScreen.js.map +1 -1
  177. package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
  178. package/dist/pages/api-client/ApiClient.styles.js +22 -3
  179. package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
  180. package/dist/pages/api-client/Authenticate.screen.d.ts +2 -0
  181. package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
  182. package/dist/pages/api-client/Authenticate.screen.js +19 -3
  183. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  184. package/dist/pages/api-client/StoreConfig.screen.d.ts.map +1 -1
  185. package/dist/pages/api-client/StoreConfig.screen.js +4 -2
  186. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  187. package/dist/pages/api-client/StoreConfig.styles.d.ts.map +1 -1
  188. package/dist/pages/api-client/StoreConfig.styles.js +5 -0
  189. package/dist/pages/api-client/StoreConfig.styles.js.map +1 -1
  190. package/dist/pages/api-client/pages/Files.page.d.ts +1 -0
  191. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  192. package/dist/pages/api-client/pages/Files.page.js +2 -1
  193. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  194. package/dist/pages/http-project/HttpProject.screen.d.ts +0 -8
  195. package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
  196. package/dist/pages/http-project/HttpProject.screen.js +14 -15
  197. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  198. package/dist/pages/http-project/types.d.ts +8 -6
  199. package/dist/pages/http-project/types.d.ts.map +1 -1
  200. package/dist/pages/http-project/types.js.map +1 -1
  201. package/dist/styles/m3/surface.module.d.ts.map +1 -1
  202. package/dist/styles/m3/surface.module.js +11 -27
  203. package/dist/styles/m3/surface.module.js.map +1 -1
  204. package/dist/ui/UiElement.d.ts +4 -0
  205. package/dist/ui/UiElement.d.ts.map +1 -1
  206. package/dist/ui/UiElement.js +6 -0
  207. package/dist/ui/UiElement.js.map +1 -1
  208. package/dist/ui/button/SegmentedButton.styles.d.ts.map +1 -1
  209. package/dist/ui/button/SegmentedButton.styles.js +3 -1
  210. package/dist/ui/button/SegmentedButton.styles.js.map +1 -1
  211. package/dist/ui/dialog/UiDialog.d.ts +3 -0
  212. package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
  213. package/dist/ui/dialog/UiDialog.js +3 -0
  214. package/dist/ui/dialog/UiDialog.js.map +1 -1
  215. package/dist/ui/effects/ripple.d.ts.map +1 -1
  216. package/dist/ui/effects/ripple.js +5 -1
  217. package/dist/ui/effects/ripple.js.map +1 -1
  218. package/dist/ui/icons/Icons.d.ts +3 -2
  219. package/dist/ui/icons/Icons.d.ts.map +1 -1
  220. package/dist/ui/icons/Icons.js +2 -1
  221. package/dist/ui/icons/Icons.js.map +1 -1
  222. package/dist/ui/input/CheckedElement.d.ts +1 -1
  223. package/dist/ui/input/CheckedElement.d.ts.map +1 -1
  224. package/dist/ui/input/CheckedElement.js +3 -3
  225. package/dist/ui/input/CheckedElement.js.map +1 -1
  226. package/dist/ui/input/Input.js +1 -1
  227. package/dist/ui/input/Input.js.map +1 -1
  228. package/dist/ui/list/{DividerElement.d.ts → UiDivider.element.d.ts} +6 -6
  229. package/dist/ui/list/UiDivider.element.d.ts.map +1 -0
  230. package/dist/ui/list/UiDivider.element.js +39 -0
  231. package/dist/ui/list/UiDivider.element.js.map +1 -0
  232. package/dist/ui/list/UiDivider.styles.d.ts +3 -0
  233. package/dist/ui/list/UiDivider.styles.d.ts.map +1 -0
  234. package/dist/ui/list/UiDivider.styles.js +49 -0
  235. package/dist/ui/list/UiDivider.styles.js.map +1 -0
  236. package/dist/ui/tabs/UiTabs.d.ts +13 -1
  237. package/dist/ui/tabs/UiTabs.d.ts.map +1 -1
  238. package/dist/ui/tabs/UiTabs.js +42 -13
  239. package/dist/ui/tabs/UiTabs.js.map +1 -1
  240. package/package.json +1 -1
  241. package/src/define/dialog/delete-cookie-action-dialog.ts +16 -0
  242. package/src/define/dialog/set-cookie-action-dialog.ts +16 -0
  243. package/src/define/http/http-assertions.ts +3 -3
  244. package/src/define/http/http-flows.ts +15 -0
  245. package/src/define/ui/ui-divider.ts +7 -2
  246. package/src/elements/ApiElement.ts +7 -0
  247. package/src/elements/amf/ApiAuthorizationEditor.element.ts +1 -1
  248. package/src/elements/amf/ApiOperationDocument.element.ts +2 -1
  249. package/src/elements/amf/ApiRequest.element.ts +1 -1
  250. package/src/elements/amf/ApiRequestEditor.element.ts +0 -4
  251. package/src/elements/authorization/ui/Authorization.ts +3 -5
  252. package/src/elements/dialog/DeleteCookieAction.element.ts +100 -0
  253. package/src/elements/dialog/DeleteCookieAction.styles.ts +14 -0
  254. package/src/elements/dialog/Rename.ts +8 -7
  255. package/src/elements/dialog/SetCookieAction.element.ts +183 -0
  256. package/src/elements/environment/EnvironmentEditor.styles.ts +5 -0
  257. package/src/elements/environment/EnvironmentEditor.ts +81 -22
  258. package/src/elements/environment/ServerEditor.ts +4 -8
  259. package/src/elements/environment/VariablesEditor.ts +3 -7
  260. package/src/elements/highlight/Prism.styles.ts +12 -5
  261. package/src/elements/http/BodyEditor.ts +10 -17
  262. package/src/elements/http/BodyMultipartEditor.ts +3 -20
  263. package/src/elements/http/BodyTextEditor.ts +0 -4
  264. package/src/elements/http/BodyUrlEncodedEditor.ts +5 -8
  265. package/src/elements/http/HeadersForm.ts +2 -9
  266. package/src/elements/http/HttpAssertions.element.ts +286 -0
  267. package/src/elements/http/HttpAssertions.styles.ts +7 -156
  268. package/src/elements/http/HttpFlows.common.ts +181 -0
  269. package/src/elements/http/HttpFlows.element.ts +722 -0
  270. package/src/elements/http/HttpFlows.styles.ts +29 -0
  271. package/src/elements/http/HttpFlowsUi.ts +1327 -0
  272. package/src/elements/http/RequestConfigElement.ts +10 -14
  273. package/src/elements/http/RequestEditor.ts +77 -35
  274. package/src/elements/http/UrlInput.ts +6 -6
  275. package/src/elements/http/UrlParamsForm.ts +2 -6
  276. package/src/elements/layout/SplitView.styles.ts +1 -0
  277. package/src/elements/navigation/AppNavigationItem.styles.ts +2 -0
  278. package/src/elements/project/HttpProjectRequest.ts +16 -5
  279. package/src/elements/project/ProjectRunner.ts +3 -7
  280. package/src/elements/schema-design/AssociationFormElement.ts +4 -8
  281. package/src/elements/schema-design/DataEntityEditorElement.ts +8 -8
  282. package/src/elements/schema-design/DataSchemaDocument.ts +5 -9
  283. package/src/elements/schema-design/EntityFormElement.ts +6 -10
  284. package/src/elements/schema-design/PropertyFormElement.ts +11 -15
  285. package/src/pages/ApplicationScreen.ts +1 -1
  286. package/src/pages/api-client/ApiClient.styles.ts +22 -3
  287. package/src/pages/api-client/Authenticate.screen.ts +19 -3
  288. package/src/pages/api-client/StoreConfig.screen.ts +4 -2
  289. package/src/pages/api-client/StoreConfig.styles.ts +5 -0
  290. package/src/pages/api-client/pages/Files.page.ts +2 -1
  291. package/src/pages/http-project/HttpProject.screen.ts +14 -26
  292. package/src/pages/http-project/types.ts +8 -6
  293. package/src/styles/m3/surface.module.ts +11 -27
  294. package/src/styles/m3/theme.css +36 -0
  295. package/src/styles/m3/tokens.css +11 -0
  296. package/src/ui/UiElement.ts +7 -0
  297. package/src/ui/button/SegmentedButton.styles.ts +3 -1
  298. package/src/ui/dialog/UiDialog.ts +3 -0
  299. package/src/ui/effects/ripple.ts +6 -1
  300. package/src/ui/icons/Icons.ts +3 -2
  301. package/src/ui/input/CheckedElement.ts +3 -3
  302. package/src/ui/input/Input.ts +1 -1
  303. package/src/ui/list/UiDivider.element.ts +41 -0
  304. package/src/ui/list/UiDivider.styles.ts +49 -0
  305. package/src/ui/tabs/UiTabs.ts +55 -13
  306. package/test/amf/authorization/OAuth2Method.test.ts +1 -1
  307. package/test/elements/http/HttpAssertions.test.ts +5 -6
  308. package/test/elements/http/HttpFlows.test.ts +485 -0
  309. package/dist/elements/http/HttpAssertions.d.ts +0 -114
  310. package/dist/elements/http/HttpAssertions.d.ts.map +0 -1
  311. package/dist/elements/http/HttpAssertions.js +0 -1146
  312. package/dist/elements/http/HttpAssertions.js.map +0 -1
  313. package/dist/elements/http/internals.d.ts +0 -150
  314. package/dist/elements/http/internals.d.ts.map +0 -1
  315. package/dist/elements/http/internals.js +0 -150
  316. package/dist/elements/http/internals.js.map +0 -1
  317. package/dist/ui/list/DividerElement.d.ts.map +0 -1
  318. package/dist/ui/list/DividerElement.js +0 -82
  319. package/dist/ui/list/DividerElement.js.map +0 -1
  320. package/src/elements/http/HttpAssertions.ts +0 -1187
  321. package/src/elements/http/internals.ts +0 -151
  322. package/src/http-client/docs/Files.md +0 -28
  323. package/src/ui/list/DividerElement.ts +0 -84
@@ -0,0 +1,684 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, nothing } from "lit";
3
+ import { property, query } from "lit/decorators.js";
4
+ import { SnackNotifications } from "../../ui/notification/SnackNotifications.js";
5
+ import { HttpFlowsUi } from "./HttpFlowsUi.js";
6
+ import '../../define/ui/ui-list.js';
7
+ import '../../define/ui/ui-list-item.js';
8
+ import '../../define/ui/ui-dropdown-list.js';
9
+ import '../../define/ui/ui-button.js';
10
+ import '../../define/ui/ui-divider.js';
11
+ import '../../define/ui/ui-dialog.js';
12
+ import '../../define/dialog/rename-dialog.js';
13
+ export default class HttpFlows extends HttpFlowsUi {
14
+ constructor() {
15
+ super(...arguments);
16
+ /**
17
+ * The list of HTTP flows.
18
+ * This is a live list. All changes are propagated in the model.
19
+ */
20
+ this.model = [];
21
+ /**
22
+ * The setting that renders flows for the given trigger (request or response).
23
+ */
24
+ this.trigger = 'response';
25
+ }
26
+ /**
27
+ * The currently selected flow definition.
28
+ *
29
+ * If there's no selection it returns the first flow.
30
+ */
31
+ get currentFlow() {
32
+ const { model = [], selectedFlow, trigger = 'response' } = this;
33
+ if (selectedFlow === undefined) {
34
+ return undefined;
35
+ }
36
+ const item = model[selectedFlow];
37
+ if (!item || item.trigger !== trigger) {
38
+ return undefined;
39
+ }
40
+ return item;
41
+ }
42
+ connectedCallback() {
43
+ super.connectedCallback();
44
+ this.preSelectFlow();
45
+ }
46
+ willUpdate(cp) {
47
+ if (cp.has('trigger')) {
48
+ this.selectedFlow = undefined;
49
+ this.preSelectFlow();
50
+ }
51
+ super.willUpdate(cp);
52
+ }
53
+ preSelectFlow() {
54
+ const { model = [], trigger = 'response', selectedFlow } = this;
55
+ if (Number.isInteger(selectedFlow)) {
56
+ return;
57
+ }
58
+ const index = model.findIndex(i => i.trigger === trigger);
59
+ if (index >= 0) {
60
+ this.selectedFlow = index;
61
+ }
62
+ }
63
+ addFlow(description) {
64
+ const flow = {
65
+ trigger: this.trigger,
66
+ actions: [],
67
+ };
68
+ if (description) {
69
+ flow.description = description;
70
+ }
71
+ const len = this.model.push(flow);
72
+ this.selectedFlow = len - 1;
73
+ this.notifyChange();
74
+ this.requestUpdate();
75
+ }
76
+ removeFlow(index) {
77
+ const { model } = this;
78
+ if (index >= model.length || index < 0) {
79
+ throw RangeError(`Invalid index: ${index}. Expected an index in range from 0 to ${model.length - 1}`);
80
+ }
81
+ const removed = model[index];
82
+ model.splice(index, 1);
83
+ this.requestUpdate();
84
+ this.notifyChange();
85
+ if (!model[index]) {
86
+ this.selectedFlow = 0;
87
+ }
88
+ SnackNotifications.notify(`Flow was deleted.`, {
89
+ actionLabel: 'Redo',
90
+ actionCallback: () => {
91
+ model.splice(index, 0, removed);
92
+ this.selectedFlow = index;
93
+ this.requestUpdate();
94
+ this.notifyChange();
95
+ },
96
+ cancellable: true,
97
+ });
98
+ }
99
+ removeFlowAction(actionIndex) {
100
+ const { currentFlow } = this;
101
+ if (!currentFlow) {
102
+ return;
103
+ }
104
+ currentFlow.actions.splice(actionIndex, 1);
105
+ this.notifyChange();
106
+ this.requestUpdate();
107
+ }
108
+ renameFlowAction(actionIndex) {
109
+ const { currentFlow } = this;
110
+ if (!currentFlow) {
111
+ return;
112
+ }
113
+ const action = currentFlow.actions[actionIndex];
114
+ if (!action) {
115
+ return;
116
+ }
117
+ const dialog = document.createElement('rename-dialog');
118
+ dialog.name = action.description;
119
+ dialog.modal = true;
120
+ document.body.appendChild(dialog);
121
+ dialog.open = true;
122
+ dialog.addEventListener('close', (ev) => {
123
+ document.parentElement?.removeChild(dialog);
124
+ const event = ev;
125
+ const { cancelled, value } = event.detail;
126
+ if (!cancelled && value) {
127
+ action.description = value;
128
+ this.notifyChange();
129
+ this.requestUpdate();
130
+ }
131
+ });
132
+ }
133
+ handleAdd() {
134
+ const { flowAddDialog } = this;
135
+ if (!flowAddDialog) {
136
+ return;
137
+ }
138
+ flowAddDialog.open = true;
139
+ }
140
+ handleTriggerSelect(e) {
141
+ const target = e.detail.item;
142
+ if (!target) {
143
+ return;
144
+ }
145
+ const { trigger } = target.dataset;
146
+ if (!trigger) {
147
+ return;
148
+ }
149
+ this.trigger = trigger;
150
+ }
151
+ handleFlowSelect(e) {
152
+ const target = e.detail.item;
153
+ if (!target) {
154
+ return;
155
+ }
156
+ const { trigger = 'response', model = [] } = this;
157
+ const option = target.dataset.option;
158
+ if (option === 'create') {
159
+ this.handleAdd();
160
+ }
161
+ else if (option === 'delete') {
162
+ const { currentFlow } = this;
163
+ if (!currentFlow) {
164
+ return;
165
+ }
166
+ const index = model.indexOf(currentFlow);
167
+ if (index >= 0) {
168
+ this.removeFlow(index);
169
+ }
170
+ }
171
+ else if (option === 'select') {
172
+ const index = Number(target.dataset.index);
173
+ if (Number.isNaN(index)) {
174
+ return;
175
+ }
176
+ let current = -1;
177
+ for (let i = 0, len = model.length; i < len; i++) {
178
+ const item = model[i];
179
+ if (item.trigger !== trigger) {
180
+ continue;
181
+ }
182
+ current += 1;
183
+ if (current === index) {
184
+ this.selectedFlow = i;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ handleFlowCreateDialogResult(e) {
191
+ if (e.detail.cancelled) {
192
+ return;
193
+ }
194
+ const dialog = e.target;
195
+ const input = dialog.querySelector('ui-text-field');
196
+ if (!input) {
197
+ return;
198
+ }
199
+ const { value } = input;
200
+ input.value = '';
201
+ this.addFlow(value);
202
+ }
203
+ /**
204
+ * On the editor element we only allow "flow blocks" items (conditions and actions).
205
+ * Only one condition can be added so once a condition is set we do not allow to add another condition.
206
+ */
207
+ handleEditorDragOver(e) {
208
+ const { dataTransfer } = e;
209
+ if (e.defaultPrevented || !dataTransfer || !this.isValidDropTarget(dataTransfer)) {
210
+ return;
211
+ }
212
+ e.preventDefault();
213
+ dataTransfer.dropEffect = 'copy';
214
+ const target = e.currentTarget;
215
+ target.classList.add('dragover');
216
+ }
217
+ handleEditorDragLeave(e) {
218
+ if (e.defaultPrevented || !this.isValidDropTarget(e.dataTransfer)) {
219
+ return;
220
+ }
221
+ const target = e.currentTarget;
222
+ target.classList.remove('dragover');
223
+ }
224
+ handleEditorDrop(e) {
225
+ const { dataTransfer } = e;
226
+ if (!dataTransfer || e.defaultPrevented || !this.isValidDropTarget(dataTransfer)) {
227
+ return;
228
+ }
229
+ e.preventDefault();
230
+ this.resetDragIndices();
231
+ const group = dataTransfer.getData('flow/group');
232
+ if (group !== 'flow-block') {
233
+ SnackNotifications.notify('Only blocks from the "Flow blocks" group can be dropped here.', 2000);
234
+ return;
235
+ }
236
+ const kind = dataTransfer.getData('flow/kind');
237
+ if (kind === 'Core#Condition') {
238
+ this.setCondition();
239
+ }
240
+ else if (kind === 'Core#Action') {
241
+ this.addAction();
242
+ }
243
+ }
244
+ /**
245
+ * Adds a condition to the current flow.
246
+ * Note, when the condition already exists this does nothing.
247
+ */
248
+ setCondition() {
249
+ const { currentFlow } = this;
250
+ if (!currentFlow) {
251
+ SnackNotifications.notify('Select a flow first.', 2000);
252
+ return;
253
+ }
254
+ if (currentFlow.condition) {
255
+ SnackNotifications.notify('This flow already have a condition.', 2000);
256
+ return;
257
+ }
258
+ currentFlow.condition = {
259
+ steps: [],
260
+ };
261
+ this.requestUpdate();
262
+ this.notifyChange();
263
+ }
264
+ addAction() {
265
+ const { currentFlow } = this;
266
+ if (!currentFlow) {
267
+ SnackNotifications.notify('Select a flow first.', 2000);
268
+ return;
269
+ }
270
+ if (!Array.isArray(currentFlow.actions)) {
271
+ currentFlow.actions = [];
272
+ }
273
+ currentFlow.actions.push({
274
+ steps: [],
275
+ });
276
+ this.requestUpdate();
277
+ this.notifyChange();
278
+ }
279
+ stepFromChangeEvent(e) {
280
+ const input = e.target;
281
+ input.checkValidity();
282
+ const { actionIndex: aci, assertionIndex: asi } = input.dataset;
283
+ const actionIndex = Number(aci || asi);
284
+ const action = this.getStepsTarget(actionIndex);
285
+ if (!action) {
286
+ return undefined;
287
+ }
288
+ const stepIndex = Number(input.dataset.stepIndex);
289
+ if (Number.isNaN(stepIndex)) {
290
+ return undefined;
291
+ }
292
+ return action.steps[stepIndex];
293
+ }
294
+ getStepsTarget(assertionOrActionIndex) {
295
+ if (Number.isNaN(assertionOrActionIndex)) {
296
+ return undefined;
297
+ }
298
+ const { currentFlow } = this;
299
+ if (!currentFlow) {
300
+ return undefined;
301
+ }
302
+ if (assertionOrActionIndex === -1) {
303
+ return currentFlow.condition;
304
+ }
305
+ return currentFlow.actions[assertionOrActionIndex];
306
+ }
307
+ handleConditionOption(e) {
308
+ const { currentFlow } = this;
309
+ if (!currentFlow) {
310
+ return;
311
+ }
312
+ const { item } = e.detail;
313
+ const { option } = item.dataset;
314
+ if (option === 'delete') {
315
+ delete currentFlow.condition;
316
+ this.notifyChange();
317
+ this.requestUpdate();
318
+ }
319
+ }
320
+ handleActionOption(e) {
321
+ const list = e.target;
322
+ const actionIndex = Number(list.dataset.actionIndex);
323
+ if (Number.isNaN(actionIndex)) {
324
+ return;
325
+ }
326
+ const { item } = e.detail;
327
+ const { option } = item.dataset;
328
+ switch (option) {
329
+ case 'delete':
330
+ this.removeFlowAction(actionIndex);
331
+ break;
332
+ case 'rename':
333
+ this.renameFlowAction(actionIndex);
334
+ break;
335
+ default:
336
+ }
337
+ }
338
+ isConditionTarget(e) {
339
+ const path = e.composedPath();
340
+ return path.some(i => {
341
+ const element = i;
342
+ return !!element.classList && element.classList.contains('condition-row');
343
+ });
344
+ }
345
+ /**
346
+ * We override this method tpo handle conditions which can only accept certain
347
+ * blocks and have index of `-1`
348
+ */
349
+ handleTargetDragOver(e) {
350
+ if (e.defaultPrevented) {
351
+ return;
352
+ }
353
+ const dt = e.dataTransfer;
354
+ if (!this.isConditionTarget(e)) {
355
+ if (dt.types.includes('flow/assertion')) {
356
+ // we do not allow assertions in actions.
357
+ e.preventDefault();
358
+ return;
359
+ }
360
+ super.handleTargetDragOver(e);
361
+ return;
362
+ }
363
+ if (dt.types.includes('flow/action')) {
364
+ e.preventDefault();
365
+ dt.dropEffect = 'none';
366
+ return;
367
+ }
368
+ super.handleTargetDragOver(e);
369
+ }
370
+ /**
371
+ * Overrides the method to support conditions.
372
+ */
373
+ handleDrop(e) {
374
+ if (e.defaultPrevented) {
375
+ return;
376
+ }
377
+ const dt = e.dataTransfer;
378
+ if (!this.isConditionTarget(e)) {
379
+ if (dt.types.includes('flow/assertion')) {
380
+ // we do not allow assertions in actions.
381
+ e.preventDefault();
382
+ SnackNotifications.notify(`Assertions cannot be a part of a flow action.`, 3000);
383
+ return;
384
+ }
385
+ super.handleDrop(e);
386
+ return;
387
+ }
388
+ if (dt.types.includes('flow/action')) {
389
+ e.preventDefault();
390
+ SnackNotifications.notify(`Flow actions cannot be a part of a condition.`, 3000);
391
+ return;
392
+ }
393
+ super.handleDrop(e);
394
+ }
395
+ render() {
396
+ return html `
397
+ ${this.renderActionButtons()}
398
+ <div class="container">
399
+ ${this.renderEditor()}
400
+ <ui-divider vertical></ui-divider>
401
+ ${this.renderBuildingBlocks()}
402
+ </div>
403
+ ${this.renderCreateFlowDialog()}
404
+ `;
405
+ }
406
+ renderActionButtons() {
407
+ return html `
408
+ <div class="editor-actions">
409
+ ${this.renderTriggerSelector()}
410
+ ${this.renderFlowSelector()}
411
+ </div>
412
+ `;
413
+ }
414
+ renderTriggerSelector() {
415
+ const { trigger = 'response' } = this;
416
+ const label = trigger === 'request' ? 'Pre-request' : 'Post-request';
417
+ return html `
418
+ <ui-dropdown-list
419
+ @select="${this.handleTriggerSelect}"
420
+ horizontalAlign="right"
421
+ closeOnOutsideClick
422
+ >
423
+ <ui-button type="outlined" class="new-button">
424
+ <ui-icon icon="arrowDropDown" slot="icon"></ui-icon>
425
+ ${label}
426
+ </ui-button>
427
+ <ui-list slot="dropdown" role="menu">
428
+ <ui-list-item data-trigger="request" role="menuitem" title="Select pre-request flows">Pre-request</ui-list-item>
429
+ <ui-list-item data-trigger="response" role="menuitem" title="Select post-request flows">Post-request</ui-list-item>
430
+ </ui-list>
431
+ </ui-dropdown-list>
432
+ `;
433
+ }
434
+ renderFlowSelector() {
435
+ const { trigger = 'response', currentFlow, model } = this;
436
+ const label = currentFlow ? currentFlow.description || 'Unnamed flow' : 'Select a flow';
437
+ const items = model.filter(i => i.trigger === trigger);
438
+ const hasItems = !!items.length;
439
+ return html `
440
+ <ui-dropdown-list
441
+ @select="${this.handleFlowSelect}"
442
+ horizontalAlign="right"
443
+ closeOnOutsideClick
444
+ >
445
+ <ui-button type="outlined" class="new-button">
446
+ <ui-icon icon="arrowDropDown" slot="icon"></ui-icon>
447
+ ${label}
448
+ </ui-button>
449
+ <ui-list slot="dropdown" role="menu">
450
+ ${hasItems ? html `
451
+ ${items.map((item, index) => html `<ui-list-item data-option="select" data-index="${index}" role="menuitem" title="Select this flow">${item.description || `Flow # ${index}`}</ui-list-item>`)}
452
+ <ui-divider></ui-divider>
453
+ ` : nothing}
454
+
455
+ ${currentFlow ? html `
456
+ <ui-list-item image="icon" data-option="delete" role="menuitem" title="Deletes the current flow">
457
+ <ui-icon icon="deleteOutline" slot="start"></ui-icon>
458
+ Delete
459
+ </ui-list-item>` : nothing}
460
+ <ui-list-item image="icon" data-option="create" role="menuitem" title="Adds a new flow">
461
+ <ui-icon icon="add" slot="start"></ui-icon>
462
+ Create
463
+ </ui-list-item>
464
+ </ui-list>
465
+ </ui-dropdown-list>
466
+ `;
467
+ }
468
+ renderCreateFlowDialog() {
469
+ return html `
470
+ <ui-dialog modal id="createFlowDialog" class="add-dialog" @close="${this.handleFlowCreateDialogResult}" dismissLabel="Cancel" confirmLabel="Add">
471
+ <span slot="title">New Flow</span>
472
+
473
+ <ui-text-field class="input" label="Flow name" name="name" required invalidText="Flow name is required"></ui-text-field>
474
+ </ui-dialog>
475
+ `;
476
+ }
477
+ renderEditor() {
478
+ const { currentFlow, model = [], trigger } = this;
479
+ const content = [];
480
+ if (!currentFlow && !model.filter(i => i.trigger === trigger).length) {
481
+ content.push(this.renderEmptyFlowMessage());
482
+ }
483
+ else if (!currentFlow) {
484
+ content.push(this.renderSelectFlowMessage());
485
+ }
486
+ else {
487
+ const { condition, actions } = currentFlow;
488
+ if (!condition && (!actions || !actions.length)) {
489
+ content.push(this.renderEmptyActionsMessage());
490
+ }
491
+ else {
492
+ if (condition) {
493
+ content.push(this.renderCondition(condition));
494
+ }
495
+ if (actions && actions.length) {
496
+ content.push(this.renderList(currentFlow.actions));
497
+ }
498
+ }
499
+ }
500
+ return html `
501
+ <section
502
+ aria-label="Flows editor"
503
+ class="editor surface1"
504
+ @dragover="${this.handleEditorDragOver}"
505
+ @dragleave="${this.handleEditorDragLeave}"
506
+ @drop="${this.handleEditorDrop}"
507
+ >${content}</section>
508
+ `;
509
+ }
510
+ renderEmptyFlowMessage() {
511
+ return html `
512
+ <div class="empty-message">
513
+ Create a flow to get started.
514
+ </div>
515
+ <div class="empty-message">
516
+ <ui-button type="outlined" @click="${this.handleAdd}">Create</ui-button>
517
+ </div>
518
+ `;
519
+ }
520
+ renderSelectFlowMessage() {
521
+ return html `
522
+ <div class="empty-message">Select a flow to get started.</div>
523
+ `;
524
+ }
525
+ renderEmptyActionsMessage() {
526
+ return html `
527
+ <div class="empty-message">Drop a condition or an action here</div>
528
+ `;
529
+ }
530
+ renderCondition(condition) {
531
+ return html `
532
+ <div class="step-row condition">
533
+ <div class="action-tab">
534
+ <span class="body-small">Condition</span>
535
+ ${this.renderConditionTabActions()}
536
+ </div>
537
+ <div class="param-row condition-row">
538
+ ${this.renderSteps(condition, -1)}
539
+ </div>
540
+ </div>
541
+ `;
542
+ }
543
+ renderList(model) {
544
+ return html `
545
+ ${model.map((item, index) => this.renderAction(item, index))}
546
+ `;
547
+ }
548
+ renderAction(item, index) {
549
+ const { description } = item;
550
+ const label = description || `Action ${index + 1}`;
551
+ return html `
552
+ <div class="step-row action">
553
+ <div class="action-tab">
554
+ <span class="body-small">${label}</span>
555
+ ${this.renderStepTabActions(index)}
556
+ </div>
557
+ <div class="param-row action-row">
558
+ ${this.renderSteps(item, index)}
559
+ </div>
560
+ </div>
561
+ `;
562
+ }
563
+ renderBuildingBlocks() {
564
+ const { currentFlow } = this;
565
+ return html `
566
+ <section aria-label="Flow building block" class="options">
567
+ ${this.renderFlowBlocksOptions(currentFlow)}
568
+ ${this.renderDataSourceOptions(currentFlow)}
569
+ ${this.renderTransformationOptions(currentFlow)}
570
+ ${this.renderActions(currentFlow)}
571
+ ${this.renderAssertionOptions(currentFlow)}
572
+ </section>
573
+ `;
574
+ }
575
+ renderFlowBlocksOptions(currentFlow) {
576
+ const allDisabled = !currentFlow;
577
+ const conditionDisabled = allDisabled || (!!currentFlow && !!currentFlow.condition);
578
+ return html `
579
+ <details class="action-group" open>
580
+ <summary>Flow Blocks</summary>
581
+ <div class="group-content">
582
+ ${this.renderBlockChip('Condition', 'flow-block', 'Core#Condition', {
583
+ disabled: conditionDisabled,
584
+ title: 'Adds a condition that is checked before the flow is executed. Only one condition per flow.',
585
+ })}
586
+ ${this.renderBlockChip('Action', 'flow-block', 'Core#Action', {
587
+ disabled: allDisabled,
588
+ title: 'Adds an action to this flow.',
589
+ })}
590
+ </div>
591
+ </details>
592
+ `;
593
+ }
594
+ renderDataSourceOptions(currentFlow) {
595
+ let allDisabled = !currentFlow;
596
+ if (currentFlow) {
597
+ const { condition, actions = [] } = currentFlow;
598
+ if (!condition && !actions.length) {
599
+ allDisabled = true;
600
+ }
601
+ }
602
+ const { trigger = 'response' } = this;
603
+ if (trigger === 'request') {
604
+ return this.renderRequestDataSourceSuggestions(allDisabled);
605
+ }
606
+ return this.renderResponseDataSourceSuggestions(allDisabled);
607
+ }
608
+ renderTransformationOptions(currentFlow) {
609
+ let allDisabled = !currentFlow;
610
+ if (currentFlow) {
611
+ const { condition, actions = [] } = currentFlow;
612
+ if (!condition && !actions.length) {
613
+ allDisabled = true;
614
+ }
615
+ }
616
+ return this.renderTransformationSuggestions(allDisabled);
617
+ }
618
+ renderActions(currentFlow) {
619
+ let allDisabled = !currentFlow;
620
+ if (currentFlow) {
621
+ const { condition, actions = [] } = currentFlow;
622
+ if (!condition && !actions.length) {
623
+ allDisabled = true;
624
+ }
625
+ }
626
+ return this.renderActionSuggestions(allDisabled);
627
+ }
628
+ renderAssertionOptions(currentFlow) {
629
+ let allDisabled = !currentFlow;
630
+ if (currentFlow) {
631
+ const { condition, actions = [] } = currentFlow;
632
+ if (!condition && !actions.length) {
633
+ allDisabled = true;
634
+ }
635
+ }
636
+ return this.renderAssertionSuggestions(allDisabled);
637
+ }
638
+ renderConditionTabActions() {
639
+ return html `
640
+ <ui-dropdown-list
641
+ @select="${this.handleConditionOption}"
642
+ closeOnOutsideClick
643
+ >
644
+ <ui-icon-button class="condition-options-trigger">
645
+ <ui-icon icon="moreVert"></ui-icon>
646
+ </ui-icon-button>
647
+ <ui-list slot="dropdown" role="menu">
648
+ <ui-list-item data-option="delete" role="menuitem">Remove</ui-list-item>
649
+ </ui-list>
650
+ </ui-dropdown-list>
651
+ `;
652
+ }
653
+ renderStepTabActions(actionIndex) {
654
+ return html `
655
+ <ui-dropdown-list
656
+ @select="${this.handleActionOption}"
657
+ closeOnOutsideClick
658
+ data-action-index="${actionIndex}"
659
+ >
660
+ <ui-icon-button class="action-options-trigger">
661
+ <ui-icon icon="moreVert"></ui-icon>
662
+ </ui-icon-button>
663
+ <ui-list slot="dropdown" role="menu">
664
+ <ui-list-item data-option="rename" role="menuitem">Rename</ui-list-item>
665
+ <ui-divider></ui-divider>
666
+ <ui-list-item data-option="delete" role="menuitem">Remove</ui-list-item>
667
+ </ui-list>
668
+ </ui-dropdown-list>
669
+ `;
670
+ }
671
+ }
672
+ __decorate([
673
+ property({ type: Array })
674
+ ], HttpFlows.prototype, "model", void 0);
675
+ __decorate([
676
+ property({ type: String })
677
+ ], HttpFlows.prototype, "trigger", void 0);
678
+ __decorate([
679
+ property({ type: Number })
680
+ ], HttpFlows.prototype, "selectedFlow", void 0);
681
+ __decorate([
682
+ query('#createFlowDialog')
683
+ ], HttpFlows.prototype, "flowAddDialog", void 0);
684
+ //# sourceMappingURL=HttpFlows.element.js.map