@api-client/ui 0.0.4 → 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 (756) 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/amf/lib/AmfParameters.js +0 -4
  8. package/dist/amf/lib/AmfParameters.js.map +1 -1
  9. package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
  10. package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
  11. package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
  12. package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
  13. package/dist/amf/store/AmfGraphStore.js +0 -2
  14. package/dist/amf/store/AmfGraphStore.js.map +1 -1
  15. package/dist/amf/store/AmfStore.js +0 -7
  16. package/dist/amf/store/AmfStore.js.map +1 -1
  17. package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
  18. package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
  19. package/dist/bindings/base/PlatformBindings.js +6 -10
  20. package/dist/bindings/base/PlatformBindings.js.map +1 -1
  21. package/dist/bindings/base/ProxyBindings.js +9 -6
  22. package/dist/bindings/base/ProxyBindings.js.map +1 -1
  23. package/dist/bindings/base/SharedWorkerThread.js +4 -1
  24. package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
  25. package/dist/bindings/base/StoreBindings.js +162 -170
  26. package/dist/bindings/base/StoreBindings.js.map +1 -1
  27. package/dist/bindings/web/WebConfigurationBindings.js +22 -24
  28. package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
  29. package/dist/bindings/web/WebFileBindings.js +7 -4
  30. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  31. package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
  32. package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
  33. package/dist/bindings/web/WebNavigationBindings.js +4 -1
  34. package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
  35. package/dist/bindings/web/WebProxyBindings.js +5 -6
  36. package/dist/bindings/web/WebProxyBindings.js.map +1 -1
  37. package/dist/bindings/web/WebStoreBindings.js +39 -44
  38. package/dist/bindings/web/WebStoreBindings.js.map +1 -1
  39. package/dist/contextual-menu/ContextualMenu.js +10 -19
  40. package/dist/contextual-menu/ContextualMenu.js.map +1 -1
  41. package/dist/contextual-menu/ContextualMenuElement.js +4 -32
  42. package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
  43. package/dist/contextual-menu/MenuItem.js +0 -12
  44. package/dist/contextual-menu/MenuItem.js.map +1 -1
  45. package/dist/define/amf/api-annotation-document.js +1 -1
  46. package/dist/define/amf/api-annotation-document.js.map +1 -1
  47. package/dist/define/amf/api-authorization-editor.js +1 -1
  48. package/dist/define/amf/api-authorization-editor.js.map +1 -1
  49. package/dist/define/amf/api-channel-document.js +1 -1
  50. package/dist/define/amf/api-channel-document.js.map +1 -1
  51. package/dist/define/amf/api-documentation-document.js +1 -1
  52. package/dist/define/amf/api-documentation-document.js.map +1 -1
  53. package/dist/define/amf/api-documentation.js +1 -1
  54. package/dist/define/amf/api-documentation.js.map +1 -1
  55. package/dist/define/amf/api-navigation.js +1 -1
  56. package/dist/define/amf/api-navigation.js.map +1 -1
  57. package/dist/define/amf/api-operation-document.js +1 -1
  58. package/dist/define/amf/api-operation-document.js.map +1 -1
  59. package/dist/define/amf/api-parameter-document.js +1 -1
  60. package/dist/define/amf/api-parameter-document.js.map +1 -1
  61. package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
  62. package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
  63. package/dist/define/amf/api-payload-document.js +1 -1
  64. package/dist/define/amf/api-payload-document.js.map +1 -1
  65. package/dist/define/amf/api-request-document.js +1 -1
  66. package/dist/define/amf/api-request-document.js.map +1 -1
  67. package/dist/define/amf/api-request-editor.js +1 -1
  68. package/dist/define/amf/api-request-editor.js.map +1 -1
  69. package/dist/define/amf/api-request.js +1 -1
  70. package/dist/define/amf/api-request.js.map +1 -1
  71. package/dist/define/amf/api-resource-document.js +1 -1
  72. package/dist/define/amf/api-resource-document.js.map +1 -1
  73. package/dist/define/amf/api-response-document.js +1 -1
  74. package/dist/define/amf/api-response-document.js.map +1 -1
  75. package/dist/define/amf/api-schema-document.js +1 -1
  76. package/dist/define/amf/api-schema-document.js.map +1 -1
  77. package/dist/define/amf/api-security-document.js +1 -1
  78. package/dist/define/amf/api-security-document.js.map +1 -1
  79. package/dist/define/amf/api-security-requirement-document.js +1 -1
  80. package/dist/define/amf/api-security-requirement-document.js.map +1 -1
  81. package/dist/define/amf/api-server-picker.js +1 -1
  82. package/dist/define/amf/api-server-picker.js.map +1 -1
  83. package/dist/define/amf/api-summary.js +1 -1
  84. package/dist/define/amf/api-summary.js.map +1 -1
  85. package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
  86. package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
  87. package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
  88. package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
  89. package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
  90. package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
  91. package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
  92. package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
  93. package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
  94. package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
  95. package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
  96. package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
  97. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
  98. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
  99. package/dist/define/authorization/apikey-authorization.js +1 -1
  100. package/dist/define/authorization/apikey-authorization.js.map +1 -1
  101. package/dist/define/authorization/basic-authorization.js +1 -1
  102. package/dist/define/authorization/basic-authorization.js.map +1 -1
  103. package/dist/define/authorization/bearer-authorization.js +1 -1
  104. package/dist/define/authorization/bearer-authorization.js.map +1 -1
  105. package/dist/define/authorization/cc-authorization.js +1 -1
  106. package/dist/define/authorization/cc-authorization.js.map +1 -1
  107. package/dist/define/authorization/ntlm-authorization.js +1 -1
  108. package/dist/define/authorization/ntlm-authorization.js.map +1 -1
  109. package/dist/define/authorization/oauth2-authorization.js +1 -1
  110. package/dist/define/authorization/oauth2-authorization.js.map +1 -1
  111. package/dist/define/authorization/oidc-authorization.js +1 -1
  112. package/dist/define/authorization/oidc-authorization.js.map +1 -1
  113. package/dist/define/contextual-menu/contextual-menu.js +1 -1
  114. package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
  115. package/dist/define/dialog/confirm-delete-dialog.js +1 -1
  116. package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
  117. package/dist/define/dialog/delete-cookie-action-dialog.d.ts +10 -0
  118. package/dist/define/dialog/delete-cookie-action-dialog.d.ts.map +1 -0
  119. package/dist/define/dialog/delete-cookie-action-dialog.js +14 -0
  120. package/dist/define/dialog/delete-cookie-action-dialog.js.map +1 -0
  121. package/dist/define/dialog/rename-dialog.js +1 -1
  122. package/dist/define/dialog/rename-dialog.js.map +1 -1
  123. package/dist/define/dialog/set-cookie-action-dialog.d.ts +10 -0
  124. package/dist/define/dialog/set-cookie-action-dialog.d.ts.map +1 -0
  125. package/dist/define/dialog/set-cookie-action-dialog.js +14 -0
  126. package/dist/define/dialog/set-cookie-action-dialog.js.map +1 -0
  127. package/dist/define/files/share-file.js +1 -1
  128. package/dist/define/files/share-file.js.map +1 -1
  129. package/dist/define/har/har-viewer.js +1 -1
  130. package/dist/define/har/har-viewer.js.map +1 -1
  131. package/dist/define/highlight/marked-highlight.js +1 -1
  132. package/dist/define/highlight/marked-highlight.js.map +1 -1
  133. package/dist/define/highlight/prism-highlight.js +1 -1
  134. package/dist/define/highlight/prism-highlight.js.map +1 -1
  135. package/dist/define/http/http-assertions.d.ts +1 -1
  136. package/dist/define/http/http-assertions.d.ts.map +1 -1
  137. package/dist/define/http/http-assertions.js +3 -3
  138. package/dist/define/http/http-assertions.js.map +1 -1
  139. package/dist/define/http/http-body-editor.js +1 -1
  140. package/dist/define/http/http-body-editor.js.map +1 -1
  141. package/dist/define/http/http-body-multipart-editor.js +1 -1
  142. package/dist/define/http/http-body-multipart-editor.js.map +1 -1
  143. package/dist/define/http/http-body-text-editor.js +1 -1
  144. package/dist/define/http/http-body-text-editor.js.map +1 -1
  145. package/dist/define/http/http-body-urlencoded-editor.js +1 -1
  146. package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
  147. package/dist/define/http/http-flows.d.ts +10 -0
  148. package/dist/define/http/http-flows.d.ts.map +1 -0
  149. package/dist/define/http/http-flows.js +13 -0
  150. package/dist/define/http/http-flows.js.map +1 -0
  151. package/dist/define/http/http-headers-form.js +1 -1
  152. package/dist/define/http/http-headers-form.js.map +1 -1
  153. package/dist/define/http/http-log-body.js +1 -1
  154. package/dist/define/http/http-log-body.js.map +1 -1
  155. package/dist/define/http/http-log-headers.js +1 -1
  156. package/dist/define/http/http-log-headers.js.map +1 -1
  157. package/dist/define/http/http-log-timings.js +1 -1
  158. package/dist/define/http/http-log-timings.js.map +1 -1
  159. package/dist/define/http/http-request-config.js +1 -1
  160. package/dist/define/http/http-request-config.js.map +1 -1
  161. package/dist/define/http/http-request-editor.js +1 -1
  162. package/dist/define/http/http-request-editor.js.map +1 -1
  163. package/dist/define/http/http-request-log.js +1 -1
  164. package/dist/define/http/http-request-log.js.map +1 -1
  165. package/dist/define/http/http-snippets.js +1 -1
  166. package/dist/define/http/http-snippets.js.map +1 -1
  167. package/dist/define/http/http-url-input.js +1 -1
  168. package/dist/define/http/http-url-input.js.map +1 -1
  169. package/dist/define/http/http-url-params-form.js +1 -1
  170. package/dist/define/http/http-url-params-form.js.map +1 -1
  171. package/dist/define/http-project/http-project-request-history.js +1 -1
  172. package/dist/define/http-project/http-project-request-history.js.map +1 -1
  173. package/dist/define/http-project/http-project-request.js +2 -2
  174. package/dist/define/http-project/http-project-request.js.map +1 -1
  175. package/dist/define/http-project/project-navigation.js +1 -1
  176. package/dist/define/http-project/project-navigation.js.map +1 -1
  177. package/dist/define/http-project/project-run-report.js +1 -1
  178. package/dist/define/http-project/project-run-report.js.map +1 -1
  179. package/dist/define/http-project/project-runner.js +2 -2
  180. package/dist/define/http-project/project-runner.js.map +1 -1
  181. package/dist/define/layout/split-view.js +1 -1
  182. package/dist/define/layout/split-view.js.map +1 -1
  183. package/dist/define/schema-design/schema-design-navigation.js +1 -1
  184. package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
  185. package/dist/define/schema-design/schema-namespace-selector.js +1 -1
  186. package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
  187. package/dist/define/ui/ui-button.js +1 -1
  188. package/dist/define/ui/ui-button.js.map +1 -1
  189. package/dist/define/ui/ui-chip.js +1 -1
  190. package/dist/define/ui/ui-chip.js.map +1 -1
  191. package/dist/define/ui/ui-collapse.js +1 -1
  192. package/dist/define/ui/ui-collapse.js.map +1 -1
  193. package/dist/define/ui/ui-dialog.js +1 -1
  194. package/dist/define/ui/ui-dialog.js.map +1 -1
  195. package/dist/define/ui/ui-divider.d.ts +4 -1
  196. package/dist/define/ui/ui-divider.d.ts.map +1 -1
  197. package/dist/define/ui/ui-divider.js +11 -2
  198. package/dist/define/ui/ui-divider.js.map +1 -1
  199. package/dist/define/ui/ui-dropdown-list.js +1 -1
  200. package/dist/define/ui/ui-dropdown-list.js.map +1 -1
  201. package/dist/define/ui/ui-icon-button.js +1 -1
  202. package/dist/define/ui/ui-icon-button.js.map +1 -1
  203. package/dist/define/ui/ui-icon.js +1 -1
  204. package/dist/define/ui/ui-icon.js.map +1 -1
  205. package/dist/define/ui/ui-list-item.js +1 -1
  206. package/dist/define/ui/ui-list-item.js.map +1 -1
  207. package/dist/define/ui/ui-list.js +1 -1
  208. package/dist/define/ui/ui-list.js.map +1 -1
  209. package/dist/define/ui/ui-listbox.js +1 -1
  210. package/dist/define/ui/ui-listbox.js.map +1 -1
  211. package/dist/define/ui/ui-progress.js +1 -1
  212. package/dist/define/ui/ui-progress.js.map +1 -1
  213. package/dist/define/ui/ui-segmented-button-set.js +1 -1
  214. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  215. package/dist/define/ui/ui-segmented-button.js +1 -1
  216. package/dist/define/ui/ui-segmented-button.js.map +1 -1
  217. package/dist/define/ui/ui-snackbar.js +1 -1
  218. package/dist/define/ui/ui-snackbar.js.map +1 -1
  219. package/dist/define/ui/ui-tab.js +1 -1
  220. package/dist/define/ui/ui-tab.js.map +1 -1
  221. package/dist/define/ui/ui-tabs.js +1 -1
  222. package/dist/define/ui/ui-tabs.js.map +1 -1
  223. package/dist/directives/data-attr.js +0 -1
  224. package/dist/directives/data-attr.js.map +1 -1
  225. package/dist/elements/ApiElement.d.ts +4 -0
  226. package/dist/elements/ApiElement.d.ts.map +1 -1
  227. package/dist/elements/ApiElement.js +6 -7
  228. package/dist/elements/ApiElement.js.map +1 -1
  229. package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
  230. package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
  231. package/dist/elements/amf/ApiAuthorizationEditor.element.js +1 -33
  232. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  233. package/dist/elements/amf/ApiDocumentation.element.js +0 -91
  234. package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
  235. package/dist/elements/amf/ApiDocumentationBase.js +0 -9
  236. package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
  237. package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
  238. package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
  239. package/dist/elements/amf/ApiNavigation.element.js +0 -97
  240. package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
  241. package/dist/elements/amf/ApiOperationDocument.element.d.ts.map +1 -1
  242. package/dist/elements/amf/ApiOperationDocument.element.js +2 -77
  243. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  244. package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
  245. package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
  246. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
  247. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
  248. package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
  249. package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
  250. package/dist/elements/amf/ApiRequest.element.js +1 -79
  251. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  252. package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
  253. package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
  254. package/dist/elements/amf/ApiRequestEditor.element.d.ts +0 -1
  255. package/dist/elements/amf/ApiRequestEditor.element.d.ts.map +1 -1
  256. package/dist/elements/amf/ApiRequestEditor.element.js +0 -121
  257. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  258. package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
  259. package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
  260. package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
  261. package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
  262. package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
  263. package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
  264. package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
  265. package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
  266. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
  267. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
  268. package/dist/elements/amf/ApiServerPicker.element.js +2 -65
  269. package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
  270. package/dist/elements/amf/ApiSummary.element.js +0 -26
  271. package/dist/elements/amf/ApiSummary.element.js.map +1 -1
  272. package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
  273. package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
  274. package/dist/elements/amf/authorization/AmfBasic.js +0 -4
  275. package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
  276. package/dist/elements/amf/authorization/AmfBearer.js +0 -4
  277. package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
  278. package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
  279. package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
  280. package/dist/elements/amf/authorization/AmfOidc.js +0 -4
  281. package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
  282. package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
  283. package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
  284. package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
  285. package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
  286. package/dist/elements/authorization/OAuth2Authorize.js +0 -14
  287. package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
  288. package/dist/elements/authorization/OidcAuthorize.js +0 -14
  289. package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
  290. package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
  291. package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  292. package/dist/elements/authorization/ui/Authorization.d.ts +2 -1
  293. package/dist/elements/authorization/ui/Authorization.d.ts.map +1 -1
  294. package/dist/elements/authorization/ui/Authorization.js +18 -35
  295. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  296. package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
  297. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  298. package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
  299. package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  300. package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
  301. package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  302. package/dist/elements/code/HttpSnippets.js +9 -8
  303. package/dist/elements/code/HttpSnippets.js.map +1 -1
  304. package/dist/elements/dialog/ConfirmDelete.js +0 -12
  305. package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
  306. package/dist/elements/dialog/DeleteCookieAction.element.d.ts +20 -0
  307. package/dist/elements/dialog/DeleteCookieAction.element.d.ts.map +1 -0
  308. package/dist/elements/dialog/DeleteCookieAction.element.js +93 -0
  309. package/dist/elements/dialog/DeleteCookieAction.element.js.map +1 -0
  310. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts +3 -0
  311. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts.map +1 -0
  312. package/dist/elements/dialog/DeleteCookieAction.styles.js +13 -0
  313. package/dist/elements/dialog/DeleteCookieAction.styles.js.map +1 -0
  314. package/dist/elements/dialog/Rename.d.ts +7 -6
  315. package/dist/elements/dialog/Rename.d.ts.map +1 -1
  316. package/dist/elements/dialog/Rename.js +7 -12
  317. package/dist/elements/dialog/Rename.js.map +1 -1
  318. package/dist/elements/dialog/SetCookieAction.element.d.ts +22 -0
  319. package/dist/elements/dialog/SetCookieAction.element.d.ts.map +1 -0
  320. package/dist/elements/dialog/SetCookieAction.element.js +173 -0
  321. package/dist/elements/dialog/SetCookieAction.element.js.map +1 -0
  322. package/dist/elements/environment/EnvironmentEditor.d.ts +24 -3
  323. package/dist/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  324. package/dist/elements/environment/EnvironmentEditor.js +73 -30
  325. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  326. package/dist/elements/environment/EnvironmentEditor.styles.d.ts.map +1 -1
  327. package/dist/elements/environment/EnvironmentEditor.styles.js +5 -0
  328. package/dist/elements/environment/EnvironmentEditor.styles.js.map +1 -1
  329. package/dist/elements/environment/ServerEditor.d.ts +3 -3
  330. package/dist/elements/environment/ServerEditor.d.ts.map +1 -1
  331. package/dist/elements/environment/ServerEditor.js +10 -51
  332. package/dist/elements/environment/ServerEditor.js.map +1 -1
  333. package/dist/elements/environment/VariablesEditor.d.ts +0 -1
  334. package/dist/elements/environment/VariablesEditor.d.ts.map +1 -1
  335. package/dist/elements/environment/VariablesEditor.js +10 -18
  336. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  337. package/dist/elements/files/ShareFile.js +19 -57
  338. package/dist/elements/files/ShareFile.js.map +1 -1
  339. package/dist/elements/har/HarViewer.js +6 -7
  340. package/dist/elements/har/HarViewer.js.map +1 -1
  341. package/dist/elements/highlight/MarkedHighlight.js +4 -56
  342. package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
  343. package/dist/elements/highlight/Prism.styles.d.ts.map +1 -1
  344. package/dist/elements/highlight/Prism.styles.js +12 -5
  345. package/dist/elements/highlight/Prism.styles.js.map +1 -1
  346. package/dist/elements/highlight/PrismHighlight.js +9 -18
  347. package/dist/elements/highlight/PrismHighlight.js.map +1 -1
  348. package/dist/elements/highlight/PrismHighlighter.js +4 -6
  349. package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
  350. package/dist/elements/http/BodyEditor.d.ts +0 -4
  351. package/dist/elements/http/BodyEditor.d.ts.map +1 -1
  352. package/dist/elements/http/BodyEditor.js +31 -49
  353. package/dist/elements/http/BodyEditor.js.map +1 -1
  354. package/dist/elements/http/BodyMultipartEditor.d.ts +3 -16
  355. package/dist/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  356. package/dist/elements/http/BodyMultipartEditor.js +20 -37
  357. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  358. package/dist/elements/http/BodyTextEditor.d.ts +0 -1
  359. package/dist/elements/http/BodyTextEditor.d.ts.map +1 -1
  360. package/dist/elements/http/BodyTextEditor.js +2 -18
  361. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  362. package/dist/elements/http/BodyUrlEncodedEditor.d.ts +3 -3
  363. package/dist/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
  364. package/dist/elements/http/BodyUrlEncodedEditor.js +23 -26
  365. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  366. package/dist/elements/http/HeadersForm.d.ts +0 -4
  367. package/dist/elements/http/HeadersForm.d.ts.map +1 -1
  368. package/dist/elements/http/HeadersForm.js +16 -23
  369. package/dist/elements/http/HeadersForm.js.map +1 -1
  370. package/dist/elements/http/HttpAssertions.element.d.ts +55 -0
  371. package/dist/elements/http/HttpAssertions.element.d.ts.map +1 -0
  372. package/dist/elements/http/HttpAssertions.element.js +264 -0
  373. package/dist/elements/http/HttpAssertions.element.js.map +1 -0
  374. package/dist/elements/http/HttpAssertions.styles.d.ts.map +1 -1
  375. package/dist/elements/http/HttpAssertions.styles.js +7 -156
  376. package/dist/elements/http/HttpAssertions.styles.js.map +1 -1
  377. package/dist/elements/http/HttpFlows.common.d.ts +3 -0
  378. package/dist/elements/http/HttpFlows.common.d.ts.map +1 -0
  379. package/dist/elements/http/HttpFlows.common.js +181 -0
  380. package/dist/elements/http/HttpFlows.common.js.map +1 -0
  381. package/dist/elements/http/HttpFlows.element.d.ts +97 -0
  382. package/dist/elements/http/HttpFlows.element.d.ts.map +1 -0
  383. package/dist/elements/http/HttpFlows.element.js +684 -0
  384. package/dist/elements/http/HttpFlows.element.js.map +1 -0
  385. package/dist/elements/http/HttpFlows.styles.d.ts +3 -0
  386. package/dist/elements/http/HttpFlows.styles.d.ts.map +1 -0
  387. package/dist/elements/http/HttpFlows.styles.js +28 -0
  388. package/dist/elements/http/HttpFlows.styles.js.map +1 -0
  389. package/dist/elements/http/HttpFlowsUi.d.ts +172 -0
  390. package/dist/elements/http/HttpFlowsUi.d.ts.map +1 -0
  391. package/dist/elements/http/HttpFlowsUi.js +1256 -0
  392. package/dist/elements/http/HttpFlowsUi.js.map +1 -0
  393. package/dist/elements/http/LogBody.js +10 -21
  394. package/dist/elements/http/LogBody.js.map +1 -1
  395. package/dist/elements/http/LogHeaders.js +4 -23
  396. package/dist/elements/http/LogHeaders.js.map +1 -1
  397. package/dist/elements/http/LogTimings.js +11 -13
  398. package/dist/elements/http/LogTimings.js.map +1 -1
  399. package/dist/elements/http/RequestConfigElement.d.ts +0 -1
  400. package/dist/elements/http/RequestConfigElement.d.ts.map +1 -1
  401. package/dist/elements/http/RequestConfigElement.js +15 -15
  402. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  403. package/dist/elements/http/RequestEditor.d.ts +10 -10
  404. package/dist/elements/http/RequestEditor.d.ts.map +1 -1
  405. package/dist/elements/http/RequestEditor.js +116 -111
  406. package/dist/elements/http/RequestEditor.js.map +1 -1
  407. package/dist/elements/http/RequestLog.js +9 -14
  408. package/dist/elements/http/RequestLog.js.map +1 -1
  409. package/dist/elements/http/UrlInput.d.ts +3 -3
  410. package/dist/elements/http/UrlInput.d.ts.map +1 -1
  411. package/dist/elements/http/UrlInput.js +17 -27
  412. package/dist/elements/http/UrlInput.js.map +1 -1
  413. package/dist/elements/http/UrlParamsForm.d.ts +0 -1
  414. package/dist/elements/http/UrlParamsForm.d.ts.map +1 -1
  415. package/dist/elements/http/UrlParamsForm.js +16 -16
  416. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  417. package/dist/elements/layout/LayoutManager.js +16 -24
  418. package/dist/elements/layout/LayoutManager.js.map +1 -1
  419. package/dist/elements/layout/LayoutPanelElement.js +17 -23
  420. package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
  421. package/dist/elements/layout/SplitItem.js +4 -12
  422. package/dist/elements/layout/SplitItem.js.map +1 -1
  423. package/dist/elements/layout/SplitLayout.js +18 -24
  424. package/dist/elements/layout/SplitLayout.js.map +1 -1
  425. package/dist/elements/layout/SplitPanel.js +10 -16
  426. package/dist/elements/layout/SplitPanel.js.map +1 -1
  427. package/dist/elements/layout/SplitView.js +17 -26
  428. package/dist/elements/layout/SplitView.js.map +1 -1
  429. package/dist/elements/layout/SplitView.styles.d.ts.map +1 -1
  430. package/dist/elements/layout/SplitView.styles.js +1 -0
  431. package/dist/elements/layout/SplitView.styles.js.map +1 -1
  432. package/dist/elements/navigation/AppNavigationElement.js +8 -47
  433. package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
  434. package/dist/elements/navigation/AppNavigationItem.styles.d.ts.map +1 -1
  435. package/dist/elements/navigation/AppNavigationItem.styles.js +2 -0
  436. package/dist/elements/navigation/AppNavigationItem.styles.js.map +1 -1
  437. package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
  438. package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
  439. package/dist/elements/project/HttpProjectRequest.d.ts +2 -1
  440. package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
  441. package/dist/elements/project/HttpProjectRequest.js +14 -43
  442. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  443. package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
  444. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  445. package/dist/elements/project/ProjectNavigation.js +0 -4
  446. package/dist/elements/project/ProjectNavigation.js.map +1 -1
  447. package/dist/elements/project/ProjectRunReport.js +4 -15
  448. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  449. package/dist/elements/project/ProjectRunner.d.ts +0 -1
  450. package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
  451. package/dist/elements/project/ProjectRunner.js +3 -51
  452. package/dist/elements/project/ProjectRunner.js.map +1 -1
  453. package/dist/elements/schema-design/AssociationFormElement.d.ts +0 -1
  454. package/dist/elements/schema-design/AssociationFormElement.d.ts.map +1 -1
  455. package/dist/elements/schema-design/AssociationFormElement.js +2 -18
  456. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  457. package/dist/elements/schema-design/DataEntityEditorElement.d.ts +2 -2
  458. package/dist/elements/schema-design/DataEntityEditorElement.d.ts.map +1 -1
  459. package/dist/elements/schema-design/DataEntityEditorElement.js +5 -27
  460. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  461. package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
  462. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  463. package/dist/elements/schema-design/DataSchemaDocument.d.ts +0 -1
  464. package/dist/elements/schema-design/DataSchemaDocument.d.ts.map +1 -1
  465. package/dist/elements/schema-design/DataSchemaDocument.js +4 -43
  466. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  467. package/dist/elements/schema-design/EntityFormElement.d.ts +0 -1
  468. package/dist/elements/schema-design/EntityFormElement.d.ts.map +1 -1
  469. package/dist/elements/schema-design/EntityFormElement.js +4 -25
  470. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  471. package/dist/elements/schema-design/PropertyFormElement.d.ts +1 -2
  472. package/dist/elements/schema-design/PropertyFormElement.d.ts.map +1 -1
  473. package/dist/elements/schema-design/PropertyFormElement.js +8 -23
  474. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  475. package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
  476. package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
  477. package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
  478. package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
  479. package/dist/elements/user/UserAvatarElement.js +0 -9
  480. package/dist/elements/user/UserAvatarElement.js.map +1 -1
  481. package/dist/events/http-client/models/CertificatesEvents.js +2 -2
  482. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  483. package/dist/http-client/idb/Base.js +5 -10
  484. package/dist/http-client/idb/Base.js.map +1 -1
  485. package/dist/http-client/idb/LegacyMockedStore.js +0 -1
  486. package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
  487. package/dist/http-client/idb/MockedStore.js +3 -1
  488. package/dist/http-client/idb/MockedStore.js.map +1 -1
  489. package/dist/http-client/store/DataImportProcessor.js +0 -3
  490. package/dist/http-client/store/DataImportProcessor.js.map +1 -1
  491. package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
  492. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  493. package/dist/http-client/store/IdbThread.js +23 -20
  494. package/dist/http-client/store/IdbThread.js.map +1 -1
  495. package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
  496. package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
  497. package/dist/http-client/store/idb/IdbStore.js +0 -2
  498. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  499. package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
  500. package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
  501. package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
  502. package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
  503. package/dist/lib/chart/HttpHistoryChart.js +7 -8
  504. package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
  505. package/dist/mixins/FileDropMixin.js +0 -1
  506. package/dist/mixins/FileDropMixin.js.map +1 -1
  507. package/dist/mixins/RenderableMixin.js +11 -15
  508. package/dist/mixins/RenderableMixin.js.map +1 -1
  509. package/dist/pages/ApplicationScreen.d.ts +1 -1
  510. package/dist/pages/ApplicationScreen.d.ts.map +1 -1
  511. package/dist/pages/ApplicationScreen.js +35 -56
  512. package/dist/pages/ApplicationScreen.js.map +1 -1
  513. package/dist/pages/api-client/ApiClient.screen.js +11 -20
  514. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  515. package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
  516. package/dist/pages/api-client/ApiClient.styles.js +22 -3
  517. package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
  518. package/dist/pages/api-client/Authenticate.screen.d.ts +2 -0
  519. package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
  520. package/dist/pages/api-client/Authenticate.screen.js +23 -9
  521. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  522. package/dist/pages/api-client/StoreConfig.screen.d.ts.map +1 -1
  523. package/dist/pages/api-client/StoreConfig.screen.js +25 -39
  524. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  525. package/dist/pages/api-client/StoreConfig.styles.d.ts.map +1 -1
  526. package/dist/pages/api-client/StoreConfig.styles.js +5 -0
  527. package/dist/pages/api-client/StoreConfig.styles.js.map +1 -1
  528. package/dist/pages/api-client/Telemetry.screen.js +1 -2
  529. package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
  530. package/dist/pages/api-client/pages/Files.page.d.ts +1 -0
  531. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  532. package/dist/pages/api-client/pages/Files.page.js +8 -28
  533. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  534. package/dist/pages/api-client/pages/Settings.page.js +2 -4
  535. package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
  536. package/dist/pages/api-client/pages/Trash.page.js +2 -13
  537. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  538. package/dist/pages/demo/DemoPage.js +13 -13
  539. package/dist/pages/demo/DemoPage.js.map +1 -1
  540. package/dist/pages/http-project/HttpProject.screen.d.ts +0 -8
  541. package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
  542. package/dist/pages/http-project/HttpProject.screen.js +39 -50
  543. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  544. package/dist/pages/http-project/types.d.ts +8 -6
  545. package/dist/pages/http-project/types.d.ts.map +1 -1
  546. package/dist/pages/http-project/types.js.map +1 -1
  547. package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
  548. package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
  549. package/dist/store/HttpStore.js +0 -3
  550. package/dist/store/HttpStore.js.map +1 -1
  551. package/dist/store/UserCache.js +5 -5
  552. package/dist/store/UserCache.js.map +1 -1
  553. package/dist/styles/m3/surface.module.d.ts.map +1 -1
  554. package/dist/styles/m3/surface.module.js +11 -27
  555. package/dist/styles/m3/surface.module.js.map +1 -1
  556. package/dist/ui/UiElement.d.ts +4 -0
  557. package/dist/ui/UiElement.d.ts.map +1 -1
  558. package/dist/ui/UiElement.js +10 -5
  559. package/dist/ui/UiElement.js.map +1 -1
  560. package/dist/ui/button/SegmentedButton.js +9 -11
  561. package/dist/ui/button/SegmentedButton.js.map +1 -1
  562. package/dist/ui/button/SegmentedButton.styles.d.ts.map +1 -1
  563. package/dist/ui/button/SegmentedButton.styles.js +3 -1
  564. package/dist/ui/button/SegmentedButton.styles.js.map +1 -1
  565. package/dist/ui/button/SegmentedButtonsSet.js +6 -7
  566. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  567. package/dist/ui/button/UiButton.js +17 -39
  568. package/dist/ui/button/UiButton.js.map +1 -1
  569. package/dist/ui/button/UiIconButton.js +9 -35
  570. package/dist/ui/button/UiIconButton.js.map +1 -1
  571. package/dist/ui/chip/UiChip.js +9 -49
  572. package/dist/ui/chip/UiChip.js.map +1 -1
  573. package/dist/ui/collapse/UiCollapse.js +15 -20
  574. package/dist/ui/collapse/UiCollapse.js.map +1 -1
  575. package/dist/ui/controllers/ActionController.js +143 -144
  576. package/dist/ui/controllers/ActionController.js.map +1 -1
  577. package/dist/ui/controllers/RadioSelectionController.js +0 -1
  578. package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
  579. package/dist/ui/date/DateTime.js +3 -3
  580. package/dist/ui/date/DateTime.js.map +1 -1
  581. package/dist/ui/dialog/UiDialog.d.ts +3 -0
  582. package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
  583. package/dist/ui/dialog/UiDialog.js +17 -38
  584. package/dist/ui/dialog/UiDialog.js.map +1 -1
  585. package/dist/ui/effects/ripple.d.ts.map +1 -1
  586. package/dist/ui/effects/ripple.js +25 -19
  587. package/dist/ui/effects/ripple.js.map +1 -1
  588. package/dist/ui/effects/rippleDirective.js +6 -7
  589. package/dist/ui/effects/rippleDirective.js.map +1 -1
  590. package/dist/ui/icons/Icons.d.ts +3 -2
  591. package/dist/ui/icons/Icons.d.ts.map +1 -1
  592. package/dist/ui/icons/Icons.js +2 -1
  593. package/dist/ui/icons/Icons.js.map +1 -1
  594. package/dist/ui/icons/UiIcon.js +4 -3
  595. package/dist/ui/icons/UiIcon.js.map +1 -1
  596. package/dist/ui/input/CheckboxElement.js +12 -10
  597. package/dist/ui/input/CheckboxElement.js.map +1 -1
  598. package/dist/ui/input/CheckedElement.d.ts +1 -1
  599. package/dist/ui/input/CheckedElement.d.ts.map +1 -1
  600. package/dist/ui/input/CheckedElement.js +5 -16
  601. package/dist/ui/input/CheckedElement.js.map +1 -1
  602. package/dist/ui/input/Input.js +170 -235
  603. package/dist/ui/input/Input.js.map +1 -1
  604. package/dist/ui/input/RadioElement.js +13 -11
  605. package/dist/ui/input/RadioElement.js.map +1 -1
  606. package/dist/ui/input/SwitchElement.js +0 -18
  607. package/dist/ui/input/SwitchElement.js.map +1 -1
  608. package/dist/ui/input/TextAreaElement.js +0 -15
  609. package/dist/ui/input/TextAreaElement.js.map +1 -1
  610. package/dist/ui/list/{DividerElement.d.ts → UiDivider.element.d.ts} +6 -6
  611. package/dist/ui/list/UiDivider.element.d.ts.map +1 -0
  612. package/dist/ui/list/UiDivider.element.js +39 -0
  613. package/dist/ui/list/UiDivider.element.js.map +1 -0
  614. package/dist/ui/list/UiDivider.styles.d.ts +3 -0
  615. package/dist/ui/list/UiDivider.styles.d.ts.map +1 -0
  616. package/dist/ui/list/UiDivider.styles.js +49 -0
  617. package/dist/ui/list/UiDivider.styles.js.map +1 -0
  618. package/dist/ui/list/UiDropdownList.js +7 -48
  619. package/dist/ui/list/UiDropdownList.js.map +1 -1
  620. package/dist/ui/list/UiList.js +3 -15
  621. package/dist/ui/list/UiList.js.map +1 -1
  622. package/dist/ui/list/UiListItem.js +4 -17
  623. package/dist/ui/list/UiListItem.js.map +1 -1
  624. package/dist/ui/list/UiListbox.js +0 -1
  625. package/dist/ui/list/UiListbox.js.map +1 -1
  626. package/dist/ui/notification/SnackNotifications.js +1 -2
  627. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  628. package/dist/ui/notification/Snackbar.js +27 -51
  629. package/dist/ui/notification/Snackbar.js.map +1 -1
  630. package/dist/ui/progress/Range.js +24 -23
  631. package/dist/ui/progress/Range.js.map +1 -1
  632. package/dist/ui/progress/UiProgress.js +0 -11
  633. package/dist/ui/progress/UiProgress.js.map +1 -1
  634. package/dist/ui/table/DataTable.js +7 -12
  635. package/dist/ui/table/DataTable.js.map +1 -1
  636. package/dist/ui/tabs/UiTab.js +24 -25
  637. package/dist/ui/tabs/UiTab.js.map +1 -1
  638. package/dist/ui/tabs/UiTabs.d.ts +13 -1
  639. package/dist/ui/tabs/UiTabs.d.ts.map +1 -1
  640. package/dist/ui/tabs/UiTabs.js +62 -47
  641. package/dist/ui/tabs/UiTabs.js.map +1 -1
  642. package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
  643. package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
  644. package/dist/visualization/lib/AssociationAnchors.js +16 -28
  645. package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
  646. package/dist/visualization/lib/Point.js +0 -2
  647. package/dist/visualization/lib/Point.js.map +1 -1
  648. package/dist/visualization/lib/SelectionManager.js +10 -11
  649. package/dist/visualization/lib/SelectionManager.js.map +1 -1
  650. package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
  651. package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
  652. package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
  653. package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
  654. package/dist/visualization/lib/WorkspaceEdges.js +17 -19
  655. package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
  656. package/dist/visualization/lib/WorkspaceGestures.js +0 -3
  657. package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
  658. package/dist/visualization/lib/WorkspaceSizing.js +4 -6
  659. package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
  660. package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
  661. package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
  662. package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
  663. package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
  664. package/dist/visualization/lib/tips/TipArtist.js +0 -3
  665. package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
  666. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
  667. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
  668. package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
  669. package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
  670. package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
  671. package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
  672. package/package.json +3 -2
  673. package/src/define/dialog/delete-cookie-action-dialog.ts +16 -0
  674. package/src/define/dialog/set-cookie-action-dialog.ts +16 -0
  675. package/src/define/http/http-assertions.ts +3 -3
  676. package/src/define/http/http-flows.ts +15 -0
  677. package/src/define/ui/ui-divider.ts +7 -2
  678. package/src/elements/ApiElement.ts +7 -0
  679. package/src/elements/amf/ApiAuthorizationEditor.element.ts +1 -1
  680. package/src/elements/amf/ApiOperationDocument.element.ts +2 -1
  681. package/src/elements/amf/ApiRequest.element.ts +1 -1
  682. package/src/elements/amf/ApiRequestEditor.element.ts +0 -4
  683. package/src/elements/authorization/ui/Authorization.ts +3 -5
  684. package/src/elements/dialog/DeleteCookieAction.element.ts +100 -0
  685. package/src/elements/dialog/DeleteCookieAction.styles.ts +14 -0
  686. package/src/elements/dialog/Rename.ts +8 -7
  687. package/src/elements/dialog/SetCookieAction.element.ts +183 -0
  688. package/src/elements/environment/EnvironmentEditor.styles.ts +5 -0
  689. package/src/elements/environment/EnvironmentEditor.ts +81 -22
  690. package/src/elements/environment/ServerEditor.ts +4 -8
  691. package/src/elements/environment/VariablesEditor.ts +3 -7
  692. package/src/elements/highlight/Prism.styles.ts +12 -5
  693. package/src/elements/http/BodyEditor.ts +10 -17
  694. package/src/elements/http/BodyMultipartEditor.ts +3 -20
  695. package/src/elements/http/BodyTextEditor.ts +0 -4
  696. package/src/elements/http/BodyUrlEncodedEditor.ts +5 -8
  697. package/src/elements/http/HeadersForm.ts +2 -9
  698. package/src/elements/http/HttpAssertions.element.ts +286 -0
  699. package/src/elements/http/HttpAssertions.styles.ts +7 -156
  700. package/src/elements/http/HttpFlows.common.ts +181 -0
  701. package/src/elements/http/HttpFlows.element.ts +722 -0
  702. package/src/elements/http/HttpFlows.styles.ts +29 -0
  703. package/src/elements/http/HttpFlowsUi.ts +1327 -0
  704. package/src/elements/http/RequestConfigElement.ts +10 -14
  705. package/src/elements/http/RequestEditor.ts +77 -35
  706. package/src/elements/http/UrlInput.ts +6 -6
  707. package/src/elements/http/UrlParamsForm.ts +2 -6
  708. package/src/elements/layout/SplitView.styles.ts +1 -0
  709. package/src/elements/navigation/AppNavigationItem.styles.ts +2 -0
  710. package/src/elements/project/HttpProjectRequest.ts +16 -5
  711. package/src/elements/project/ProjectRunner.ts +3 -7
  712. package/src/elements/schema-design/AssociationFormElement.ts +4 -8
  713. package/src/elements/schema-design/DataEntityEditorElement.ts +8 -8
  714. package/src/elements/schema-design/DataSchemaDocument.ts +5 -9
  715. package/src/elements/schema-design/EntityFormElement.ts +6 -10
  716. package/src/elements/schema-design/PropertyFormElement.ts +11 -15
  717. package/src/pages/ApplicationScreen.ts +1 -1
  718. package/src/pages/api-client/ApiClient.styles.ts +22 -3
  719. package/src/pages/api-client/Authenticate.screen.ts +19 -3
  720. package/src/pages/api-client/StoreConfig.screen.ts +4 -2
  721. package/src/pages/api-client/StoreConfig.styles.ts +5 -0
  722. package/src/pages/api-client/pages/Files.page.ts +2 -1
  723. package/src/pages/http-project/HttpProject.screen.ts +14 -26
  724. package/src/pages/http-project/types.ts +8 -6
  725. package/src/styles/m3/surface.module.ts +11 -27
  726. package/src/styles/m3/theme.css +36 -0
  727. package/src/styles/m3/tokens.css +11 -0
  728. package/src/ui/UiElement.ts +7 -0
  729. package/src/ui/button/SegmentedButton.styles.ts +3 -1
  730. package/src/ui/dialog/UiDialog.ts +3 -0
  731. package/src/ui/effects/ripple.ts +6 -1
  732. package/src/ui/icons/Icons.ts +3 -2
  733. package/src/ui/input/CheckedElement.ts +3 -3
  734. package/src/ui/input/Input.ts +1 -1
  735. package/src/ui/list/UiDivider.element.ts +41 -0
  736. package/src/ui/list/UiDivider.styles.ts +49 -0
  737. package/src/ui/tabs/UiTabs.ts +55 -13
  738. package/test/amf/authorization/OAuth2Method.test.ts +1 -1
  739. package/test/elements/http/HttpAssertions.test.ts +5 -6
  740. package/test/elements/http/HttpFlows.test.ts +485 -0
  741. package/tsconfig.json +2 -2
  742. package/dist/elements/http/HttpAssertions.d.ts +0 -114
  743. package/dist/elements/http/HttpAssertions.d.ts.map +0 -1
  744. package/dist/elements/http/HttpAssertions.js +0 -1144
  745. package/dist/elements/http/HttpAssertions.js.map +0 -1
  746. package/dist/elements/http/internals.d.ts +0 -150
  747. package/dist/elements/http/internals.d.ts.map +0 -1
  748. package/dist/elements/http/internals.js +0 -150
  749. package/dist/elements/http/internals.js.map +0 -1
  750. package/dist/ui/list/DividerElement.d.ts.map +0 -1
  751. package/dist/ui/list/DividerElement.js +0 -87
  752. package/dist/ui/list/DividerElement.js.map +0 -1
  753. package/src/elements/http/HttpAssertions.ts +0 -1187
  754. package/src/elements/http/internals.ts +0 -151
  755. package/src/http-client/docs/Files.md +0 -28
  756. package/src/ui/list/DividerElement.ts +0 -84
@@ -1 +1 @@
1
- {"version":3,"file":"ServerEditor.js","sourceRoot":"","sources":["../../../src/elements/environment/ServerEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { LitElement, html, TemplateResult, CSSResult, PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\nimport { IServer, Server, IProperty } from '@api-client/core/build/browser.js';\nimport elementStyles from './ServerEditor.styles.js';\nimport Input from '../../ui/input/Input.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-icon-button.js';\n\nexport const DefaultProtocols = ['http:', 'https:'];\n\n/**\n * An element to render a view for a server definition with a form to edit it.\n * \n * @fires change - When a value change.\n * @fires delete - When the user requested server definition delete.\n */\nexport default class ServerEditor extends LitElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n /**\n * The base URI of the server.\n * \n * Note, the URL can contain URI templates (e.g. `http://{host}.api.com/v1`)\n * In this case the variable is replaced with the system or project variables.\n * \n * For simplicity, the `uri` can be the full base URI with protocol, host, and the `basePath`\n * \n * @attribute\n */\n @property({ type: String }) uri?: string;\n\n /**\n * Usually included in the `uri`. When the `uri` is missing a protocol \n * this is then used.\n * \n * @attribute\n */\n @property({ type: String }) protocol?: string;\n\n /**\n * The base path for the server. It starts with the `/`.\n * When set, it is appended to the `uri` value.\n * \n * @attribute\n */\n @property({ type: String }) basePath?: string;\n\n /**\n * Optional description of the server.\n * \n * @attribute\n */\n @property({ type: String }) description?: string;\n\n /**\n * Optional list of variables to set on the environment.\n * When set it evaluates the final URI value against these properties.\n */\n @property({ type: Array }) variables?: IProperty[];\n\n /**\n * The computed value of the full URI from the values.\n */\n protected valueInternal?: string;\n\n /**\n * The server logic used with computations.\n */\n protected serverInternal = new Server();\n\n @query('#protocolInput', false) protected protocolInput?: HTMLInputElement;\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('uri') || cp.has('protocol') || cp.has('basePath') || cp.has('description')) {\n this.setupValue();\n }\n super.willUpdate(cp);\n }\n\n /**\n * Updates the value of the generated base URI.\n * This can be called from the outside of the component to force computation.\n * This is helpful when deep-updating variables.\n */\n generateValue(): void {\n this.setupValue();\n this.requestUpdate();\n }\n\n protected setupValue(): void {\n const { serverInternal } = this;\n this.updateServer();\n this.valueInternal = serverInternal.readUri(this.variables);\n }\n\n protected updateServer(): void {\n const { serverInternal, uri = '', protocol, basePath, description } = this;\n serverInternal.uri = uri;\n serverInternal.protocol = protocol;\n serverInternal.basePath = basePath;\n serverInternal.description = description;\n }\n\n /**\n * Creates a schema for the current values.\n */\n getSchema(): IServer {\n this.updateServer();\n return this.serverInternal.toJSON();\n }\n\n /**\n * Updates name/value of a parameter on a specific index.\n */\n updateProperty(field: 'uri' | 'basePath' | 'protocol', value: string): void {\n this[field] = value;\n this.notifyChange();\n }\n\n protected handleUriChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('uri', input.value);\n input.checkValidity();\n }\n\n protected handleBasePathChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('basePath', input.value);\n input.checkValidity();\n }\n\n protected handleProtocolChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('protocol', input.value);\n input.checkValidity();\n }\n\n protected notifyChange(): void {\n this.dispatchEvent(new Event('change'));\n }\n\n protected handleDelete(): void {\n this.dispatchEvent(new Event('delete'));\n }\n\n override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n <form>\n ${this.renderUriInput()}\n ${this.renderProtocolInput()}\n ${this.renderBasePathInput()}\n </form>\n ${this.renderValue()}\n `;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n <div class=\"section-title\">Server</div>\n ${this.renderDeleteButton()}\n </div>\n `;\n }\n\n protected renderUriInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n required\n name=\"uri\" \n .value=\"${live(this.uri || '')}\"\n label=\"URI\"\n @change=\"${this.handleUriChange}\"\n ></ui-text-field>\n </div>\n `;\n }\n\n protected renderProtocolInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n name=\"protocol\"\n .value=\"${live(this.protocol || '')}\"\n .list=\"${DefaultProtocols}\"\n label=\"Protocol (optional)\"\n @change=\"${this.handleProtocolChange}\"\n ></ui-text-field>\n </div>`;\n }\n\n protected renderBasePathInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n name=\"basePath\"\n .value=\"${live(this.basePath || '')}\"\n label=\"Base path (optional)\"\n @change=\"${this.handleBasePathChange}\"\n ></ui-text-field>\n </div>`;\n }\n\n protected renderValue(): TemplateResult | string {\n const { valueInternal } = this;\n if (!valueInternal) {\n return '';\n }\n return html`\n <div class=\"uri-label\">Server URI</div>\n <div class=\"value-preview\">\n ${valueInternal}\n </div>\n `;\n }\n\n protected renderDeleteButton(): TemplateResult {\n return html`\n <ui-icon-button aria-label=\"Remove this server\" @click=\"${this.handleDelete}\">\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ServerEditor.js","sourceRoot":"","sources":["../../../src/elements/environment/ServerEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult, PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\nimport { IServer, Server, IProperty } from '@api-client/core/build/browser.js';\nimport elementStyles from './ServerEditor.styles.js';\nimport Input from '../../ui/input/Input.js';\nimport ApiElement from '../ApiElement.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-icon-button.js';\n\nexport const DefaultProtocols = ['http:', 'https:'];\n\n/**\n * An element to render a view for a server definition with a form to edit it.\n * \n * @fires change - When a value change.\n * @fires delete - When the user requested server definition delete.\n */\nexport default class ServerEditor extends ApiElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n /**\n * The base URI of the server.\n * \n * Note, the URL can contain URI templates (e.g. `http://{host}.api.com/v1`)\n * In this case the variable is replaced with the system or project variables.\n * \n * For simplicity, the `uri` can be the full base URI with protocol, host, and the `basePath`\n * \n * @attribute\n */\n @property({ type: String }) uri?: string;\n\n /**\n * Usually included in the `uri`. When the `uri` is missing a protocol \n * this is then used.\n * \n * @attribute\n */\n @property({ type: String }) protocol?: string;\n\n /**\n * The base path for the server. It starts with the `/`.\n * When set, it is appended to the `uri` value.\n * \n * @attribute\n */\n @property({ type: String }) basePath?: string;\n\n /**\n * Optional description of the server.\n * \n * @attribute\n */\n @property({ type: String }) description?: string;\n\n /**\n * Optional list of variables to set on the environment.\n * When set it evaluates the final URI value against these properties.\n */\n @property({ type: Array }) variables?: IProperty[];\n\n /**\n * The computed value of the full URI from the values.\n */\n protected valueInternal?: string;\n\n /**\n * The server logic used with computations.\n */\n protected serverInternal = new Server();\n\n @query('#protocolInput', false) protected protocolInput?: HTMLInputElement;\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('uri') || cp.has('protocol') || cp.has('basePath') || cp.has('description')) {\n this.setupValue();\n }\n super.willUpdate(cp);\n }\n\n /**\n * Updates the value of the generated base URI.\n * This can be called from the outside of the component to force computation.\n * This is helpful when deep-updating variables.\n */\n generateValue(): void {\n this.setupValue();\n this.requestUpdate();\n }\n\n protected setupValue(): void {\n const { serverInternal } = this;\n this.updateServer();\n this.valueInternal = serverInternal.readUri(this.variables);\n }\n\n protected updateServer(): void {\n const { serverInternal, uri = '', protocol, basePath, description } = this;\n serverInternal.uri = uri;\n serverInternal.protocol = protocol;\n serverInternal.basePath = basePath;\n serverInternal.description = description;\n }\n\n /**\n * Creates a schema for the current values.\n */\n getSchema(): IServer {\n this.updateServer();\n return this.serverInternal.toJSON();\n }\n\n /**\n * Updates name/value of a parameter on a specific index.\n */\n updateProperty(field: 'uri' | 'basePath' | 'protocol', value: string): void {\n this[field] = value;\n this.notifyChange();\n }\n\n protected handleUriChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('uri', input.value);\n input.checkValidity();\n }\n\n protected handleBasePathChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('basePath', input.value);\n input.checkValidity();\n }\n\n protected handleProtocolChange(e: Event): void {\n const input = e.target as Input;\n this.updateProperty('protocol', input.value);\n input.checkValidity();\n }\n \n protected handleDelete(): void {\n this.dispatchEvent(new Event('delete'));\n }\n\n override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n <form>\n ${this.renderUriInput()}\n ${this.renderProtocolInput()}\n ${this.renderBasePathInput()}\n </form>\n ${this.renderValue()}\n `;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n <div class=\"section-title\">Server</div>\n ${this.renderDeleteButton()}\n </div>\n `;\n }\n\n protected renderUriInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n required\n name=\"uri\" \n .value=\"${live(this.uri || '')}\"\n label=\"URI\"\n @change=\"${this.handleUriChange}\"\n ></ui-text-field>\n </div>\n `;\n }\n\n protected renderProtocolInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n name=\"protocol\"\n .value=\"${live(this.protocol || '')}\"\n .list=\"${DefaultProtocols}\"\n label=\"Protocol (optional)\"\n @change=\"${this.handleProtocolChange}\"\n ></ui-text-field>\n </div>`;\n }\n\n protected renderBasePathInput(): TemplateResult {\n return html`\n <div class=\"form-item\">\n <ui-text-field\n name=\"basePath\"\n .value=\"${live(this.basePath || '')}\"\n label=\"Base path (optional)\"\n @change=\"${this.handleBasePathChange}\"\n ></ui-text-field>\n </div>`;\n }\n\n protected renderValue(): TemplateResult | string {\n const { valueInternal } = this;\n if (!valueInternal) {\n return '';\n }\n return html`\n <div class=\"uri-label\">Server URI</div>\n <div class=\"value-preview\">\n ${valueInternal}\n </div>\n `;\n }\n\n protected renderDeleteButton(): TemplateResult {\n return html`\n <ui-icon-button aria-label=\"Remove this server\" @click=\"${this.handleDelete}\">\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n}\n"]}
@@ -35,7 +35,6 @@ export default class VariablesEditor extends ApiElement {
35
35
  * Toggles enabled state of a parameter.
36
36
  */
37
37
  toggleProperty(index: number, enabled: boolean): void;
38
- protected notifyChanged(): void;
39
38
  protected handleAddVariable(): void;
40
39
  protected ensureEditorInView(): Promise<void>;
41
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesEditor.d.ts","sourceRoot":"","sources":["../../../src/elements/environment/VariablesEditor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VariablesEditor.d.ts","sourceRoot":"","sources":["../../../src/elements/environment/VariablesEditor.ts"],"names":[],"mappings":"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"}
@@ -17,21 +17,16 @@ import '../../define/ui/ui-icon-button.js';
17
17
  * An element to render a list of variables with an ability to edit them.
18
18
  */
19
19
  export default class VariablesEditor extends ApiElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ /**
23
+ * By default all values are masked. When this is set it renders all values visible.
24
+ */
25
+ this.renderValues = false;
26
+ }
20
27
  static get styles() {
21
28
  return [elementStyles];
22
29
  }
23
- /**
24
- * The list of variables to render or edit.
25
- * This list is mutated. If you don't want this to mutate changes
26
- * make a copy first.
27
- */
28
- variables;
29
- /**
30
- * By default all values are masked. When this is set it renders all values visible.
31
- */
32
- renderValues = false;
33
- editedVariable;
34
- editor;
35
30
  /**
36
31
  * Updates name/value of a parameter on a specific index.
37
32
  */
@@ -41,7 +36,7 @@ export default class VariablesEditor extends ApiElement {
41
36
  return;
42
37
  }
43
38
  variables[index][field] = value;
44
- this.notifyChanged();
39
+ this.notifyChange();
45
40
  }
46
41
  /**
47
42
  * Removes a parameter from an index.
@@ -52,7 +47,7 @@ export default class VariablesEditor extends ApiElement {
52
47
  return;
53
48
  }
54
49
  variables.splice(index, 1);
55
- this.notifyChanged();
50
+ this.notifyChange();
56
51
  this.requestUpdate();
57
52
  }
58
53
  /**
@@ -68,10 +63,7 @@ export default class VariablesEditor extends ApiElement {
68
63
  return;
69
64
  }
70
65
  variable.enabled = enabled;
71
- this.notifyChanged();
72
- }
73
- notifyChanged() {
74
- this.dispatchEvent(new Event('change'));
66
+ this.notifyChange();
75
67
  }
76
68
  handleAddVariable() {
77
69
  if (!this.variables) {
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesEditor.js","sourceRoot":"","sources":["../../../src/elements/environment/VariablesEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult, CSSResult } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { IProperty, Property } from '@api-client/core/build/browser.js';\nimport { property, query, state } from 'lit/decorators.js';\nimport { variableValueLabel } from '../../lib/environments/Utils.js';\nimport { IconType } from '../../ui/icons/Icons.js';\nimport ApiElement from '../ApiElement.js';\nimport elementStyles from './VariablesEditor.styles.js';\nimport Input from '../../ui/input/Input.js';\nimport SwitchElement from '../../ui/input/SwitchElement.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-switch.js';\nimport '../../define/ui/ui-icon-button.js';\n\n/**\n * An element to render a list of variables with an ability to edit them.\n */\nexport default class VariablesEditor extends ApiElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n /**\n * The list of variables to render or edit.\n * This list is mutated. If you don't want this to mutate changes \n * make a copy first. \n */\n @property({ type: Array }) variables?: IProperty[];\n\n /**\n * By default all values are masked. When this is set it renders all values visible.\n */\n @property({ type: Boolean }) renderValues = false;\n\n @state() protected editedVariable?: number;\n\n @query('.editor') protected editor?: HTMLElement;\n\n /**\n * Updates name/value of a parameter on a specific index.\n */\n updateProperty(index: number, field: 'name' | 'value', value: string): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n variables[index][field] = value;\n this.notifyChanged();\n }\n\n /**\n * Removes a parameter from an index.\n */\n removeProperty(index: number): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n variables.splice(index, 1);\n this.notifyChanged();\n this.requestUpdate();\n }\n\n /**\n * Toggles enabled state of a parameter.\n */\n toggleProperty(index: number, enabled: boolean): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n const variable = variables[index];\n if (variable.enabled === enabled) {\n return;\n }\n variable.enabled = enabled;\n this.notifyChanged();\n }\n \n protected notifyChanged(): void {\n this.dispatchEvent(new Event('change'));\n }\n\n protected handleAddVariable(): void {\n if (!this.variables) {\n this.variables = [];\n }\n const item = Property.String();\n const index = this.variables.push(item.toJSON());\n this.editedVariable = index - 1;\n this.requestUpdate();\n this.ensureEditorInView();\n }\n\n protected async ensureEditorInView(): Promise<void> {\n await this.updateComplete;\n const { editor } = this;\n if (editor) {\n editor.scrollIntoView();\n }\n }\n\n /**\n * Toggles visibility of the variable values.\n */\n protected handleVisibilityToggle(): void {\n this.renderValues = !this.renderValues;\n }\n\n /**\n * A handler for the click event on the variable edit icon.\n * Sets state to edit this variable\n */\n protected handleEditVariable(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.editedVariable = index;\n }\n\n protected handleNameChange(e: Event): void {\n const input = e.target as Input;\n const index = Number(input.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.updateProperty(index, 'name', input.value);\n input.checkValidity();\n }\n\n protected handleValueChange(e: Event): void {\n const input = e.target as Input;\n const index = Number(input.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.updateProperty(index, 'value', input.value);\n input.checkValidity();\n }\n\n /**\n * Removes the variable from the environment\n */\n protected handleVariableDelete(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.removeProperty(index);\n }\n\n protected handleRemove(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.removeProperty(index);\n }\n\n protected handleToggle(e: Event): void {\n const node = e.currentTarget as SwitchElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.toggleProperty(index, node.checked);\n }\n\n /**\n * A handler for the variable editor close button click.\n */\n protected handleEditorClose(): void {\n this.editedVariable = undefined;\n this.requestUpdate();\n }\n\n protected override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n ${this.renderList()}\n `;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n <div class=\"section-title\">Variables</div>\n ${this.renderAddButton()}\n ${this.renderToggleVisibilityButton()}\n </div>\n `;\n }\n\n protected renderAddButton(): TemplateResult {\n return html`\n <ui-icon-button\n title=\"Add a variable\"\n aria-label=\"Activate to add a new variable\"\n @click=\"${this.handleAddVariable}\"\n data-action=\"add-variables\"\n ><ui-icon icon=\"add\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderToggleVisibilityButton(): TemplateResult {\n const icon = (this.renderValues ? 'visibilityOff' : 'visibility') as IconType;\n return html`\n <ui-icon-button\n title=\"Toggle values visibility\"\n aria-label=\"Activate to toggle variables visibility\"\n @click=\"${this.handleVisibilityToggle}\"\n data-action=\"toggle-visibility\"\n ><ui-icon icon=\"${icon}\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderList(): TemplateResult {\n const { variables } = this;\n if (!Array.isArray(variables) || !variables.length) {\n return this.renderEmptyInfo();\n }\n\n return html`\n <ul class=\"variables-list\">\n ${variables.map((item, index) => this.renderListItem(item, index))}\n </ul>\n `;\n }\n\n protected renderEmptyInfo(): TemplateResult {\n return html`<p class=\"empty-message\">This environment has no variables.</p>`;\n }\n\n /**\n * @param item The variable to render.\n * @returns The template for the variable line or variable editor\n */\n protected renderListItem(item: IProperty | Property, index: number): TemplateResult {\n if (this.editedVariable === index) {\n return this.renderEditor(item, index);\n }\n const classes = {\n disabled: !item.enabled,\n 'variable-item': true,\n };\n return html`\n <li class=${classMap(classes)}>\n <span class=\"variable-name\">${item.name}</span>\n <span class=\"variable-value\">${variableValueLabel(item.value as string || '', !this.renderValues)}</span>\n ${this.renderListActions(index)}\n </li>`;\n }\n\n /**\n * @param index The index of the property on the list\n * @returns The template for list item actions\n */\n protected renderListActions(index: number): TemplateResult {\n return html`\n <div class=\"list-actions\">\n ${this.renderEditButton(index)}\n ${this.renderDeleteButton(index)}\n </div>`;\n }\n\n /**\n * @param item The variable to render.\n * @returns The template for the variables editor\n */\n protected renderEditor(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <li class=\"editor\">\n <div class=\"param-row\">\n ${this.renderToggleButton(item, index)}\n ${this.renderNameField(item, index)}\n ${this.renderValueField(item, index)}\n ${this.renderCloseEditor(index)}\n </div>\n </li>\n `;\n }\n\n protected renderToggleButton(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <ui-switch \n .checked=\"${!!item.enabled}\" \n @change=\"${this.handleToggle}\" \n title=\"Toggle variable enabled\"\n aria-label=\"Toggle variable enabled state\"\n data-index=\"${index}\"\n ></ui-switch>\n `;\n }\n\n protected renderDeleteButton(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Deletes this variable\" \n title=\"Deletes this variable\" \n data-index=\"${index}\" \n @click=\"${this.handleRemove}\"\n data-action=\"delete-editor\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderEditButton(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Edits this variable\" \n title=\"Edits this variable\" \n data-index=\"${index}\" \n @click=\"${this.handleEditVariable}\"\n data-action=\"edit\"\n >\n <ui-icon icon=\"edit\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCloseEditor(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Closes the editor\" \n title=\"Closes the editor\" \n data-index=\"${index}\" \n @click=\"${this.handleEditorClose}\"\n data-action=\"close-editor\"\n >\n <ui-icon icon=\"close\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderNameField(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <div class=\"input-wrapper name-input\">\n <div class=\"error\" role=\"presentation\">Invalid character</div>\n <div class=\"state\"></div>\n <input\n type=\"text\"\n name=\"name\"\n autocomplete=\"off\"\n .value=\"${live(item.name)}\" \n data-index=\"${index}\"\n pattern=\"[a-zA-Z0-9_]+\" \n required\n aria-label=\"Variable name\"\n @change=\"${this.handleNameChange}\"\n />\n </div>\n `;\n }\n\n protected renderValueField(item: IProperty | Property, index: number): TemplateResult {\n const type = this.renderValues ? 'text' : 'password';\n return html`\n <div class=\"input-wrapper value-input\">\n <div class=\"error\" role=\"presentation\">Invalid character</div>\n <div class=\"state\"></div>\n <input\n type=\"${type}\"\n name=\"value\"\n .value=\"${live(item.value as string)}\" \n data-index=\"${index}\"\n aria-label=\"Variable value\"\n @change=\"${this.handleValueChange}\"\n />\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"VariablesEditor.js","sourceRoot":"","sources":["../../../src/elements/environment/VariablesEditor.ts"],"names":[],"mappings":";AAAA,2CAA2C;AAC3C,OAAO,EAAE,IAAI,EAA6B,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAa,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAGxD,OAAO,4BAA4B,CAAC;AACpC,OAAO,4BAA4B,CAAC;AACpC,OAAO,iCAAiC,CAAC;AACzC,OAAO,8BAA8B,CAAC;AACtC,OAAO,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IAAvD;;QAYE;;WAEG;QAC0B,iBAAY,GAAG,KAAK,CAAC;IAqVpD,CAAC;IAnWC,MAAM,KAAc,MAAM;QACxB,OAAO,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAkBD;;OAEG;IACH,cAAc,CAAC,KAAa,EAAE,KAAuB,EAAE,KAAa;QAClE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO;SACR;QACD,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa;QAC1B,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO;SACR;QACD,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa,EAAE,OAAgB;QAC5C,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE;YAChC,OAAO;SACR;QACD,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAES,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,cAAc,EAAE,CAAC;SACzB;IACH,CAAC;IAED;;OAEG;IACO,sBAAsB;QAC9B,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC,CAAC;IAED;;;OAGG;IACO,kBAAkB,CAAC,CAAQ;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,aAA4B,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAES,gBAAgB,CAAC,CAAQ;QACjC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAe,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,KAAK,CAAC,aAAa,EAAE,CAAC;IACxB,CAAC;IAES,iBAAiB,CAAC,CAAQ;QAClC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAe,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,CAAC,aAAa,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACO,oBAAoB,CAAC,CAAQ;QACrC,MAAM,IAAI,GAAG,CAAC,CAAC,aAA4B,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAES,YAAY,CAAC,CAAQ;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,aAA4B,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAES,YAAY,CAAC,CAAQ;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,aAA8B,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA;MACT,IAAI,CAAC,YAAY,EAAE;MACnB,IAAI,CAAC,UAAU,EAAE;KAClB,CAAC;IACJ,CAAC;IAES,YAAY;QACpB,OAAO,IAAI,CAAA;;;QAGP,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,4BAA4B,EAAE;;KAEtC,CAAC;IACJ,CAAC;IAES,eAAe;QACvB,OAAO,IAAI,CAAA;;;;gBAIC,IAAI,CAAC,iBAAiB;;;KAGjC,CAAC;IACJ,CAAC;IAES,4BAA4B;QACpC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAa,CAAC;QAC9E,OAAO,IAAI,CAAA;;;;gBAIC,IAAI,CAAC,sBAAsB;;sBAErB,IAAI;KACrB,CAAC;IACJ,CAAC;IAES,UAAU;QAClB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAClD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;SAC/B;QAED,OAAO,IAAI,CAAA;;MAET,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;KAEjE,CAAC;IACJ,CAAC;IAES,eAAe;QACvB,OAAO,IAAI,CAAA,iEAAiE,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACO,cAAc,CAAC,IAA0B,EAAE,KAAa;QAChE,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE;YACjC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACvC;QACD,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO;YACvB,eAAe,EAAE,IAAI;SACtB,CAAC;QACF,OAAO,IAAI,CAAA;gBACC,QAAQ,CAAC,OAAO,CAAC;oCACG,IAAI,CAAC,IAAI;qCACR,kBAAkB,CAAC,IAAI,CAAC,KAAe,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/F,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;UAC3B,CAAC;IACT,CAAC;IAED;;;OAGG;IACO,iBAAiB,CAAC,KAAa;QACvC,OAAO,IAAI,CAAA;;QAEP,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;WAC3B,CAAC;IACV,CAAC;IAED;;;OAGG;IACO,YAAY,CAAC,IAA0B,EAAE,KAAa;QAC9D,OAAO,IAAI,CAAA;;;UAGL,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;UACpC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;UACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;UAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;;KAGlC,CAAC;IACJ,CAAC;IAES,kBAAkB,CAAC,IAA0B,EAAE,KAAa;QACpE,OAAO,IAAI,CAAA;;kBAEG,CAAC,CAAC,IAAI,CAAC,OAAO;iBACf,IAAI,CAAC,YAAY;;;oBAGd,KAAK;;KAEpB,CAAC;IACJ,CAAC;IAES,kBAAkB,CAAC,KAAa;QACxC,OAAO,IAAI,CAAA;;;;oBAIK,KAAK;gBACT,IAAI,CAAC,YAAY;;;;;KAK5B,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,KAAa;QACtC,OAAO,IAAI,CAAA;;;;oBAIK,KAAK;gBACT,IAAI,CAAC,kBAAkB;;;;;KAKlC,CAAC;IACJ,CAAC;IAES,iBAAiB,CAAC,KAAa;QACvC,OAAO,IAAI,CAAA;;;;oBAIK,KAAK;gBACT,IAAI,CAAC,iBAAiB;;;;;KAKjC,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,IAA0B,EAAE,KAAa;QACjE,OAAO,IAAI,CAAA;;;;;;;;kBAQG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;sBACX,KAAK;;;;mBAIR,IAAI,CAAC,gBAAgB;;;KAGnC,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,IAA0B,EAAE,KAAa;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QACrD,OAAO,IAAI,CAAA;;;;;gBAKC,IAAI;;kBAEF,IAAI,CAAC,IAAI,CAAC,KAAe,CAAC;sBACtB,KAAK;;mBAER,IAAI,CAAC,iBAAiB;;;KAGpC,CAAC;IACJ,CAAC;CACF;AA1V4B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;kDAAyB;AAKtB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qDAAsB;AAEzC;IAAR,KAAK,EAAE;uDAAmC;AAEzB;IAAjB,KAAK,CAAC,SAAS,CAAC;+CAAgC","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult, CSSResult } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { IProperty, Property } from '@api-client/core/build/browser.js';\nimport { property, query, state } from 'lit/decorators.js';\nimport { variableValueLabel } from '../../lib/environments/Utils.js';\nimport { IconType } from '../../ui/icons/Icons.js';\nimport ApiElement from '../ApiElement.js';\nimport elementStyles from './VariablesEditor.styles.js';\nimport Input from '../../ui/input/Input.js';\nimport SwitchElement from '../../ui/input/SwitchElement.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-switch.js';\nimport '../../define/ui/ui-icon-button.js';\n\n/**\n * An element to render a list of variables with an ability to edit them.\n */\nexport default class VariablesEditor extends ApiElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n /**\n * The list of variables to render or edit.\n * This list is mutated. If you don't want this to mutate changes \n * make a copy first. \n */\n @property({ type: Array }) variables?: IProperty[];\n\n /**\n * By default all values are masked. When this is set it renders all values visible.\n */\n @property({ type: Boolean }) renderValues = false;\n\n @state() protected editedVariable?: number;\n\n @query('.editor') protected editor?: HTMLElement;\n\n /**\n * Updates name/value of a parameter on a specific index.\n */\n updateProperty(index: number, field: 'name' | 'value', value: string): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n variables[index][field] = value;\n this.notifyChange();\n }\n\n /**\n * Removes a parameter from an index.\n */\n removeProperty(index: number): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n variables.splice(index, 1);\n this.notifyChange();\n this.requestUpdate();\n }\n\n /**\n * Toggles enabled state of a parameter.\n */\n toggleProperty(index: number, enabled: boolean): void {\n const { variables = [] } = this;\n if (!variables[index]) {\n return;\n }\n const variable = variables[index];\n if (variable.enabled === enabled) {\n return;\n }\n variable.enabled = enabled;\n this.notifyChange();\n }\n\n protected handleAddVariable(): void {\n if (!this.variables) {\n this.variables = [];\n }\n const item = Property.String();\n const index = this.variables.push(item.toJSON());\n this.editedVariable = index - 1;\n this.requestUpdate();\n this.ensureEditorInView();\n }\n\n protected async ensureEditorInView(): Promise<void> {\n await this.updateComplete;\n const { editor } = this;\n if (editor) {\n editor.scrollIntoView();\n }\n }\n\n /**\n * Toggles visibility of the variable values.\n */\n protected handleVisibilityToggle(): void {\n this.renderValues = !this.renderValues;\n }\n\n /**\n * A handler for the click event on the variable edit icon.\n * Sets state to edit this variable\n */\n protected handleEditVariable(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.editedVariable = index;\n }\n\n protected handleNameChange(e: Event): void {\n const input = e.target as Input;\n const index = Number(input.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.updateProperty(index, 'name', input.value);\n input.checkValidity();\n }\n\n protected handleValueChange(e: Event): void {\n const input = e.target as Input;\n const index = Number(input.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.updateProperty(index, 'value', input.value);\n input.checkValidity();\n }\n\n /**\n * Removes the variable from the environment\n */\n protected handleVariableDelete(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.removeProperty(index);\n }\n\n protected handleRemove(e: Event): void {\n const node = e.currentTarget as HTMLElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.removeProperty(index);\n }\n\n protected handleToggle(e: Event): void {\n const node = e.currentTarget as SwitchElement;\n const index = Number(node.dataset.index);\n if (Number.isNaN(index)) {\n return;\n }\n this.toggleProperty(index, node.checked);\n }\n\n /**\n * A handler for the variable editor close button click.\n */\n protected handleEditorClose(): void {\n this.editedVariable = undefined;\n this.requestUpdate();\n }\n\n protected override render(): TemplateResult {\n return html`\n ${this.renderHeader()}\n ${this.renderList()}\n `;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n <div class=\"section-title\">Variables</div>\n ${this.renderAddButton()}\n ${this.renderToggleVisibilityButton()}\n </div>\n `;\n }\n\n protected renderAddButton(): TemplateResult {\n return html`\n <ui-icon-button\n title=\"Add a variable\"\n aria-label=\"Activate to add a new variable\"\n @click=\"${this.handleAddVariable}\"\n data-action=\"add-variables\"\n ><ui-icon icon=\"add\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderToggleVisibilityButton(): TemplateResult {\n const icon = (this.renderValues ? 'visibilityOff' : 'visibility') as IconType;\n return html`\n <ui-icon-button\n title=\"Toggle values visibility\"\n aria-label=\"Activate to toggle variables visibility\"\n @click=\"${this.handleVisibilityToggle}\"\n data-action=\"toggle-visibility\"\n ><ui-icon icon=\"${icon}\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderList(): TemplateResult {\n const { variables } = this;\n if (!Array.isArray(variables) || !variables.length) {\n return this.renderEmptyInfo();\n }\n\n return html`\n <ul class=\"variables-list\">\n ${variables.map((item, index) => this.renderListItem(item, index))}\n </ul>\n `;\n }\n\n protected renderEmptyInfo(): TemplateResult {\n return html`<p class=\"empty-message\">This environment has no variables.</p>`;\n }\n\n /**\n * @param item The variable to render.\n * @returns The template for the variable line or variable editor\n */\n protected renderListItem(item: IProperty | Property, index: number): TemplateResult {\n if (this.editedVariable === index) {\n return this.renderEditor(item, index);\n }\n const classes = {\n disabled: !item.enabled,\n 'variable-item': true,\n };\n return html`\n <li class=${classMap(classes)}>\n <span class=\"variable-name\">${item.name}</span>\n <span class=\"variable-value\">${variableValueLabel(item.value as string || '', !this.renderValues)}</span>\n ${this.renderListActions(index)}\n </li>`;\n }\n\n /**\n * @param index The index of the property on the list\n * @returns The template for list item actions\n */\n protected renderListActions(index: number): TemplateResult {\n return html`\n <div class=\"list-actions\">\n ${this.renderEditButton(index)}\n ${this.renderDeleteButton(index)}\n </div>`;\n }\n\n /**\n * @param item The variable to render.\n * @returns The template for the variables editor\n */\n protected renderEditor(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <li class=\"editor\">\n <div class=\"param-row\">\n ${this.renderToggleButton(item, index)}\n ${this.renderNameField(item, index)}\n ${this.renderValueField(item, index)}\n ${this.renderCloseEditor(index)}\n </div>\n </li>\n `;\n }\n\n protected renderToggleButton(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <ui-switch \n .checked=\"${!!item.enabled}\" \n @change=\"${this.handleToggle}\" \n title=\"Toggle variable enabled\"\n aria-label=\"Toggle variable enabled state\"\n data-index=\"${index}\"\n ></ui-switch>\n `;\n }\n\n protected renderDeleteButton(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Deletes this variable\" \n title=\"Deletes this variable\" \n data-index=\"${index}\" \n @click=\"${this.handleRemove}\"\n data-action=\"delete-editor\"\n >\n <ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderEditButton(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Edits this variable\" \n title=\"Edits this variable\" \n data-index=\"${index}\" \n @click=\"${this.handleEditVariable}\"\n data-action=\"edit\"\n >\n <ui-icon icon=\"edit\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCloseEditor(index: number): TemplateResult {\n return html`\n <ui-icon-button \n aria-label=\"Closes the editor\" \n title=\"Closes the editor\" \n data-index=\"${index}\" \n @click=\"${this.handleEditorClose}\"\n data-action=\"close-editor\"\n >\n <ui-icon icon=\"close\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderNameField(item: IProperty | Property, index: number): TemplateResult {\n return html`\n <div class=\"input-wrapper name-input\">\n <div class=\"error\" role=\"presentation\">Invalid character</div>\n <div class=\"state\"></div>\n <input\n type=\"text\"\n name=\"name\"\n autocomplete=\"off\"\n .value=\"${live(item.name)}\" \n data-index=\"${index}\"\n pattern=\"[a-zA-Z0-9_]+\" \n required\n aria-label=\"Variable name\"\n @change=\"${this.handleNameChange}\"\n />\n </div>\n `;\n }\n\n protected renderValueField(item: IProperty | Property, index: number): TemplateResult {\n const type = this.renderValues ? 'text' : 'password';\n return html`\n <div class=\"input-wrapper value-input\">\n <div class=\"error\" role=\"presentation\">Invalid character</div>\n <div class=\"state\"></div>\n <input\n type=\"${type}\"\n name=\"value\"\n .value=\"${live(item.value as string)}\" \n data-index=\"${index}\"\n aria-label=\"Variable value\"\n @change=\"${this.handleValueChange}\"\n />\n </div>\n `;\n }\n}\n"]}
@@ -60,7 +60,6 @@ const roles = {
60
60
  * ```
61
61
  */
62
62
  export default class ShareFile extends UiDialog {
63
- keyInternal;
64
63
  /**
65
64
  * The key of the file to share.
66
65
  */
@@ -75,7 +74,6 @@ export default class ShareFile extends UiDialog {
75
74
  this.keyInternal = value;
76
75
  this.processFileKey(value);
77
76
  }
78
- fileInternal;
79
77
  /**
80
78
  * When known, set this instead of the `key` to skip requesting the file info.
81
79
  * Also, when file is set and then the `key` is set the HTTP request won't be made.
@@ -96,61 +94,12 @@ export default class ShareFile extends UiDialog {
96
94
  this.requestFileUsers(value.key);
97
95
  }
98
96
  }
99
- /**
100
- * The current user to filter out the user from the suggestions and the shared list.
101
- */
102
- user;
103
- /**
104
- * This property is required for the API access to work.
105
- * Set it to the current application information.
106
- *
107
- * It will throw an error when trying to patch access without setting this property.
108
- */
109
- appInfo;
110
- /**
111
- * A flag set when requesting the the file meta
112
- */
113
- loadingFile = false;
114
- /**
115
- * A flag set when requesting the current list of users for the file.
116
- */
117
- loadingFileUsers = false;
118
97
  /**
119
98
  * Computed value of whether currently loading file or file users.
120
99
  */
121
100
  get loading() {
122
101
  return this.loadingFile || this.loadingFileUsers;
123
102
  }
124
- input;
125
- suggestionsContainer;
126
- suggestionsList;
127
- /**
128
- * The list of users to render in the suggestion box.
129
- */
130
- userSuggestions;
131
- /**
132
- * Whether the suggestion box is opened.
133
- */
134
- suggestionsOpened = false;
135
- /**
136
- * The list of users that were selected by the users to share the file with.
137
- */
138
- selectedUsers;
139
- /**
140
- * The list of users that have permission to the file read from the store
141
- * when the component was initializing.
142
- */
143
- permissionUsers = [];
144
- /**
145
- * A list of permissions to set on the users after the user confirms the change.
146
- * These are pending changes and only populated when the user changes any of the roles of
147
- * an existing user.
148
- */
149
- pendingPermissions;
150
- /**
151
- * The last user query sent to the server. Used by the suggestions logic.
152
- */
153
- lastUserQuery;
154
103
  /**
155
104
  * Computed value telling whether the main input should be disabled for the current state.
156
105
  */
@@ -192,14 +141,27 @@ export default class ShareFile extends UiDialog {
192
141
  }
193
142
  throw new Error(`Invalid state, file is not set.`);
194
143
  }
195
- filesChannel = new BroadcastChannel(StoreBroadcast.files);
196
- /**
197
- * Computed positioning styles for the suggestion box.
198
- */
199
- suggestionStyles;
200
- selectedRole = 'reader';
201
144
  constructor() {
202
145
  super();
146
+ /**
147
+ * A flag set when requesting the the file meta
148
+ */
149
+ this.loadingFile = false;
150
+ /**
151
+ * A flag set when requesting the current list of users for the file.
152
+ */
153
+ this.loadingFileUsers = false;
154
+ /**
155
+ * Whether the suggestion box is opened.
156
+ */
157
+ this.suggestionsOpened = false;
158
+ /**
159
+ * The list of users that have permission to the file read from the store
160
+ * when the component was initializing.
161
+ */
162
+ this.permissionUsers = [];
163
+ this.filesChannel = new BroadcastChannel(StoreBroadcast.files);
164
+ this.selectedRole = 'reader';
203
165
  this.fileMetaMessageHandler = this.fileMetaMessageHandler.bind(this);
204
166
  }
205
167
  connectedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"ShareFile.js","sourceRoot":"","sources":["../../../src/elements/files/ShareFile.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, nothing, } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { StyleInfo, styleMap } from 'lit/directives/style-map.js';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { \n IFile, Events as CoreEvents, IUser, AccessOperation, IAccessAddOperation, PermissionRole, IPermission,\n IApplication, IPatchRevision, BroadcastEvent, FilePatchBroadcastEvent,\n} from '@api-client/core/build/browser.js';\nimport { Patch, Core as JsonCore } from '@api-client/json';\nimport { Events } from '../../events/Events.js';\nimport { randomString } from '../../lib/Random.js';\nimport { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';\nimport UiDialog from '../../ui/dialog/UiDialog.js';\nimport { ElementPositioning } from '../../ui/lib/ElementPositioning.js';\nimport UiListbox from '../../ui/list/UiListbox.js';\nimport UiListItem from '../../ui/list/UiListItem.js';\nimport UiChip from '../../ui/chip/UiChip.js';\nimport { SnackNotifications } from '../../ui/notification/SnackNotifications.js';\nimport '../../define/ui/ui-listbox.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-chip.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/user/user-avatar.js';\n\nconst NAVIGATION_KEYS = {\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Home: 'Home',\n End: 'End',\n Escape: 'Escape',\n Enter: 'Enter',\n Space: ' ',\n Backspace: 'Backspace',\n};\n\ninterface RoleInfo {\n label: string;\n title: string;\n}\n\nconst roles: Record<PermissionRole, RoleInfo> = {\n reader: { label: 'Reader', title: 'Shares the file as read only' },\n commenter: { label: 'Commenter', title: 'Allows users to collaborate by leaving comments (when applicable)' },\n writer: { label: 'Writer', title: \"Allows users to edit contents of the file. It also allows to share or delete file.\" },\n owner: { label: 'Owner', title: 'The same permissions as the owner of the file' },\n};\n\n/**\n * A dialog that shows users that the file is shared with and allows to share a file.\n * \n * Listen to the `closed` on the dialog. The CustomEvent has the `detail`\n * object with the `closingReason` retails:\n * - canceled: whether the dialog was cancelled (ESC, outside click, dismiss button)\n * - confirmed: whether the dialog was confirmed by the user\n * \n * ```javascript\n * const dialog = document.createElement('share-file');\n * dialog.key = 'file key';\n * // or\n * dialog.file = file;\n * dialog.appInfo=\"${AppInfo}\"\n * dialog.user=\"${currentUser}\"\n * dialog.opened = true;\n * document.body.appendChild(dialog);\n * dialog.addEventListener('closed', (ev: Event) => {\n * document.body.removeChild(dialog);\n * });\n * ```\n */\nexport default class ShareFile extends UiDialog {\n private keyInternal?: string;\n\n /**\n * The key of the file to share.\n */\n @property({ type: String }) get key(): string | undefined {\n return this.keyInternal;\n }\n\n set key(value: string | undefined) {\n const old = this.keyInternal;\n if (old === value) {\n return;\n }\n this.keyInternal = value;\n this.processFileKey(value);\n }\n\n protected fileInternal?: IFile;\n\n /**\n * When known, set this instead of the `key` to skip requesting the file info.\n * Also, when file is set and then the `key` is set the HTTP request won't be made.\n */\n @property({ type: Object }) get file(): IFile | undefined {\n return this.fileInternal;\n }\n\n set file(value: IFile | undefined) {\n const old = this.fileInternal;\n if (old === value) {\n return;\n }\n if (old && value && old.key === value.key) {\n return;\n }\n this.fileInternal = value ? JsonCore.clone(value) : undefined;\n if (value) {\n this.requestFileUsers(value.key);\n }\n }\n\n /**\n * The current user to filter out the user from the suggestions and the shared list.\n */\n @property({ type: Object }) user?: IUser;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n * \n * It will throw an error when trying to patch access without setting this property.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * A flag set when requesting the the file meta\n */\n @state() protected loadingFile = false;\n\n /**\n * A flag set when requesting the current list of users for the file.\n */\n @state() protected loadingFileUsers = false;\n\n /**\n * Computed value of whether currently loading file or file users.\n */\n get loading(): boolean {\n return this.loadingFile || this.loadingFileUsers;\n }\n\n @query('#userInput')\n protected readonly input!: HTMLInputElement;\n\n @query('.suggestions')\n protected readonly suggestionsContainer!: HTMLDivElement;\n\n @query('ui-listbox.user-autocomplete')\n protected readonly suggestionsList!: UiListbox;\n\n /**\n * The list of users to render in the suggestion box.\n */\n @state() protected userSuggestions?: IUser[];\n\n /**\n * Whether the suggestion box is opened.\n */\n @state() protected suggestionsOpened = false;\n\n /**\n * The list of users that were selected by the users to share the file with.\n */\n @state() protected selectedUsers?: IUser[];\n\n /**\n * The list of users that have permission to the file read from the store\n * when the component was initializing.\n */\n @state() protected permissionUsers: IUser[] = [];\n\n /**\n * A list of permissions to set on the users after the user confirms the change.\n * These are pending changes and only populated when the user changes any of the roles of \n * an existing user.\n */\n @state() protected pendingPermissions?: AccessOperation[];\n\n /**\n * The last user query sent to the server. Used by the suggestions logic.\n */\n protected lastUserQuery?: string;\n\n /**\n * Computed value telling whether the main input should be disabled for the current state.\n */\n protected get inputDisabled(): boolean {\n const { file } = this;\n if (!file) {\n return true;\n }\n const { capabilities } = file;\n if (!capabilities) {\n return true;\n }\n return !capabilities.canShare;\n }\n\n /**\n * Computed value whether there are selected users\n */\n get hasSelectedUsers(): boolean {\n const { selectedUsers } = this;\n if (!Array.isArray(selectedUsers) || !selectedUsers.length) {\n return false;\n }\n return true;\n }\n\n /**\n * Whether there are pending permissions to be set.\n */\n get hasPending(): boolean {\n const { pendingPermissions } = this;\n return !!pendingPermissions && !!pendingPermissions.length;\n }\n\n protected get fileId(): string {\n const { key, file } = this;\n if (key) {\n return key;\n }\n if (file) {\n return file.key;\n }\n throw new Error(`Invalid state, file is not set.`);\n }\n\n filesChannel = new BroadcastChannel(StoreBroadcast.files);\n\n /**\n * Computed positioning styles for the suggestion box.\n */\n protected suggestionStyles?: StyleInfo;\n\n @state() protected selectedRole: PermissionRole = 'reader';\n\n constructor() {\n super();\n this.fileMetaMessageHandler = this.fileMetaMessageHandler.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.filesChannel.addEventListener('message', this.fileMetaMessageHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.filesChannel.removeEventListener('message', this.fileMetaMessageHandler);\n }\n\n protected fileMetaMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.operation === 'patch') {\n this.handleFilePatch(event as FilePatchBroadcastEvent);\n }\n }\n\n protected handleFilePatch(event: FilePatchBroadcastEvent): void {\n const { key, alt } = event;\n if (this.fileId !== key || alt !== 'meta') {\n return;\n }\n const file = this.file as IFile;\n const rev = event.data as IPatchRevision;\n const { patch } = rev;\n const result = Patch.apply(file, patch);\n this.file = result.doc as IFile;\n const hasPermission = patch.some(i => i.path.startsWith('/permissions'));\n if (hasPermission) {\n this.requestFileUsers(file.key);\n }\n this.requestUpdate();\n }\n\n protected processFileKey(value?: string): void {\n if (!value) {\n this.file = undefined;\n this.selectedUsers = undefined;\n this.lastUserQuery = undefined;\n this.pendingPermissions = undefined;\n this.selectedUsers = undefined;\n this.userSuggestions = undefined;\n this.loadingFile = false;\n this.loadingFileUsers = false;\n this.permissionUsers = [];\n return;\n }\n this.requestFileInfo(value);\n this.requestFileUsers(value);\n }\n\n protected async requestFileInfo(key: string): Promise<void> {\n if (this.file && this.file.key === key) {\n return;\n }\n this.loadingFile = true;\n try {\n this.file = await Events.Store.File.read(key, false, this);\n } catch (e) {\n CoreEvents.Telemetry.exception((e as Error).message, true, this);\n } finally {\n this.loadingFile = false;\n }\n }\n\n protected async requestFileUsers(key: string): Promise<void> {\n this.loadingFileUsers = true;\n try {\n const list = await Events.Store.File.listUsers(key);\n this.permissionUsers = list.items;\n } catch (e) {\n CoreEvents.Telemetry.exception((e as Error).message, true, this);\n } finally {\n this.loadingFileUsers = false;\n }\n }\n\n protected handleInput(e: Event): void {\n const input = e.target as HTMLInputElement;\n const { value } = input;\n this.queryUsers(value);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const { suggestionsOpened, suggestionsList } = this;\n if (!suggestionsList || event.defaultPrevented) {\n return;\n }\n if (Object.values(NAVIGATION_KEYS).indexOf(event.key) === -1) return;\n\n if (event.key === NAVIGATION_KEYS.Escape) {\n if (suggestionsOpened) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSuggestions(false);\n }\n } else if (event.key === NAVIGATION_KEYS.ArrowDown) {\n event.preventDefault();\n if (suggestionsOpened) {\n this.suggestionsList.highlightNext();\n } else {\n this.queryUsers('');\n }\n } else if (event.key === NAVIGATION_KEYS.ArrowUp) {\n event.preventDefault();\n if (suggestionsOpened) {\n this.suggestionsList.highlightPrevious();\n }\n } else if (event.key === NAVIGATION_KEYS.Home) {\n if (suggestionsOpened) {\n event.preventDefault();\n this.suggestionsList.highlightFirst();\n }\n } else if (event.key === NAVIGATION_KEYS.End) {\n if (suggestionsOpened) {\n event.preventDefault();\n this.suggestionsList.highlightLast();\n }\n } else if (event.key === NAVIGATION_KEYS.Enter) {\n event.preventDefault();\n if (suggestionsOpened) {\n const item = suggestionsList.highlightListItem;\n if (item) {\n suggestionsList.notifySelect(item);\n }\n }\n } else if (event.key === NAVIGATION_KEYS.Backspace) {\n const input = event.target as HTMLInputElement;\n if (!input.value) {\n event.preventDefault();\n this.removeLastSelectedUser();\n }\n }\n }\n\n protected handleSuggestionSelect(e: CustomEvent): void {\n const item = e.detail.item as UiListItem;\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectUserSuggestion(key);\n }\n\n protected selectUserSuggestion(key: string): void {\n this.toggleSuggestions(false);\n const { input, userSuggestions } = this;\n if (!input || !userSuggestions) {\n return;\n }\n input.value = '';\n const user = userSuggestions.find(i => i.key === key);\n if (!user) {\n return;\n }\n if (!this.selectedUsers) {\n this.selectedUsers = [user];\n } else {\n this.selectedUsers.push(user);\n this.requestUpdate();\n }\n }\n\n protected deselectUserSuggestion(key: string): void {\n const { selectedUsers: users = [] } = this;\n const index = users.findIndex(u => u.key === key);\n if (index >= 0) {\n users.splice(index, 1);\n if (!users.length) {\n this.selectedUsers = undefined;\n }\n this.requestUpdate();\n }\n }\n\n protected handleUserChipRemove(e: Event): void {\n const chip = e.target as UiChip;\n const { key } = chip.dataset;\n if (!key) {\n return;\n }\n this.deselectUserSuggestion(key);\n }\n\n protected removeLastSelectedUser(): void {\n const { selectedUsers } = this;\n if (!selectedUsers || !selectedUsers.length) {\n return;\n }\n const index = selectedUsers.length - 1;\n selectedUsers.splice(index, 1);\n if (!selectedUsers.length) {\n this.selectedUsers = undefined;\n }\n this.requestUpdate();\n }\n\n protected async queryUsers(q: string): Promise<void> {\n const { lastUserQuery, selectedUsers, userSuggestions, user } = this;\n let users: IUser[] = [];\n this.lastUserQuery = q;\n if (lastUserQuery && userSuggestions && q.includes(lastUserQuery)) {\n const lower = q.toLowerCase();\n // filter the current list for the continues query.\n // Not necessary to query the server as we have all results.\n users = userSuggestions.filter((i) => {\n const { name, email } = i;\n if (name && name.toLowerCase().includes(lower)) {\n return true;\n }\n if (email) {\n for (const item of email) {\n if (item.email && item.email.toLowerCase().includes(lower)) {\n return true;\n }\n }\n }\n return false;\n });\n } else {\n const result = await Events.Store.User.list({\n query: q,\n });\n users = result.items;\n }\n if (selectedUsers) {\n users = users.filter(candidate => !selectedUsers.some(i => i.key === candidate.key));\n }\n if (user) {\n users = users.filter(candidate => candidate.key !== user.key);\n }\n if (users.length) {\n this.userSuggestions = users;\n this.toggleSuggestions(true);\n } else {\n this.userSuggestions = undefined;\n this.toggleSuggestions(false);\n }\n }\n\n protected toggleSuggestions(opened: boolean): void {\n if (!opened) {\n this.suggestionsOpened = false;\n this.input.focus();\n } else {\n this.suggestionStyles = ElementPositioning.positionOverlay(this.suggestionsContainer, this.input, {\n vertical: 'top',\n noOverlap: true,\n constrain: true,\n matchAnchorWidth: true,\n });\n this.suggestionsOpened = true;\n }\n }\n\n protected getUserEmail(user: IUser): string | undefined {\n const { email } = user;\n if (!Array.isArray(email) || !email.length) {\n return undefined;\n }\n const emails: string[] = [];\n // we first find a verified email and then we pick any email\n for (const item of email) {\n if (item.verified && item.email) {\n return item.email;\n }\n if (item.email) {\n emails.push(item.email);\n }\n }\n return emails[0];\n }\n\n protected handleRoleOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { role } = element.dataset;\n if (!role) {\n return;\n }\n this.selectedRole = role as PermissionRole;\n }\n\n protected cancelShareUser(): void {\n this.selectedUsers = undefined;\n this.lastUserQuery = undefined;\n this.userSuggestions = undefined;\n this.suggestionsOpened = false;\n }\n\n protected handleShare(): void {\n const { selectedRole } = this;\n if (!selectedRole) {\n SnackNotifications.notify('Select a role before sharing', { timeout: 2000 });\n return;\n }\n this.share(selectedRole);\n }\n\n protected async share(role: PermissionRole): Promise<void> {\n if (!role) {\n throw new Error(`Invalid state. Role is not selected.`);\n }\n const { selectedUsers } = this;\n if (!selectedUsers || !selectedUsers.length) {\n this.cancelShareUser();\n return;\n }\n const { appInfo } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on the <${this.localName}> element.`);\n }\n const id = this.fileId;\n if (!id) {\n throw new Error(`The fileId is not set on the <${this.localName}> element.`);\n }\n const ops: AccessOperation[] = selectedUsers.map(user => {\n const op: AccessOperation = {\n op: 'add',\n type: 'user',\n value: role,\n id: user.key,\n };\n return op;\n });\n try {\n await Events.Store.File.patchUsers(id, randomString(), ops, appInfo);\n this.cancelShareUser();\n } catch (e) {\n const cause = e as Error;\n CoreEvents.Telemetry.exception(cause.message, false, this);\n throw cause;\n }\n }\n\n protected handleRoleChangeOption(e: CustomEvent): void {\n const list = e.target as HTMLElement;\n const { user, current } = list.dataset;\n const element = e.detail.item as HTMLElement;\n const role = element.dataset.role as PermissionRole;\n if (!role || !user || !current) {\n return;\n }\n if (!this.pendingPermissions) {\n this.pendingPermissions = [];\n }\n const { pendingPermissions = [] } = this;\n const index = pendingPermissions.findIndex(i => i.id === user);\n if (index >= 0) {\n // removes prior selection\n pendingPermissions.splice(index, 1);\n }\n\n if (role === current) {\n // the user selected the role that was originally assigned to the user.\n // we don't change anything.\n if (!pendingPermissions.length) {\n this.pendingPermissions = undefined;\n }\n this.requestUpdate();\n return;\n }\n\n let op: AccessOperation;\n if ((role as string) === 'remove') {\n op = {\n op: 'remove',\n type: 'user',\n id: user,\n };\n } else {\n op = {\n op: 'add',\n type: 'user',\n value: role,\n id: user,\n };\n }\n pendingPermissions.push(op);\n this.requestUpdate();\n }\n\n protected async handleCommitChanges(): Promise<void> {\n const { key, file, pendingPermissions } = this;\n if (!pendingPermissions) {\n return;\n }\n const { appInfo } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on the <${this.localName}> element.`);\n }\n const id = key || file && file.key;\n if (!id) {\n throw new Error(`Either \"key\" or \"file\" must be set on the <${this.localName}> element.`);\n }\n try {\n await Events.Store.File.patchUsers(id, randomString(), pendingPermissions, appInfo);\n this.pendingPermissions = undefined;\n } catch (e) {\n const cause = e as Error;\n CoreEvents.Telemetry.exception(cause.message, false, this);\n throw cause;\n }\n }\n\n override renderIcon(): TemplateResult {\n const classes: ClassInfo = {\n icon: true,\n 'with-icon': true,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"icon\"><ui-icon icon=\"personAdd\"></ui-icon></div>\n `;\n }\n\n override renderTitle(): TemplateResult {\n const classes: ClassInfo = {\n title: true,\n 'with-title': true,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"title\"><span>Share with others</span></div>\n `;\n }\n\n override renderBody(): TemplateResult {\n return html`\n <div class=\"content\">\n ${this.userInputTemplate()}\n ${this.renderCurrentUsers()}\n </div>\n `;\n }\n\n override renderButtons(): TemplateResult {\n const classes: ClassInfo = {\n buttons: true,\n 'with-buttons': true,\n };\n\n let content: TemplateResult;\n if (this.hasPending) {\n content = this.pendingActionsTemplate();\n } else if (this.hasSelectedUsers) {\n content = this.selectedUsersActionsTemplate();\n } else {\n content = this.overviewActionsTemplate();\n }\n return html`\n <div class=\"${classMap(classes)}\" part=\"button\">${content}</div>\n `;\n }\n\n protected overviewActionsTemplate(): TemplateResult {\n return html`\n <ui-button value=\"confirm\" type=\"text\" class=\"internal-button\" @click=\"${this.handleConfirm}\">Done</ui-button>\n `;\n }\n\n protected selectedUsersActionsTemplate(): TemplateResult {\n return html`\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.cancelShareUser}\">Cancel</ui-button>\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.handleShare}\">Share</ui-button>\n `;\n }\n\n protected pendingActionsTemplate(): TemplateResult {\n return html`\n <span class=\"pending-info\">Pending changes</span>\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.handleCommitChanges}\">Save</ui-button>\n `;\n }\n\n protected userInputTemplate(): TemplateResult {\n const classes = {\n 'name-input': true,\n autocomplete: this.suggestionsOpened,\n };\n return html`\n <div class=\"input-line\">\n <div class=\"${classMap(classes)}\">\n ${this.renderInput()}\n ${this.renderAutocomplete()}\n </div>\n ${this.roleSelectorTemplate()}\n </div>\n `\n }\n\n protected renderInput(): TemplateResult {\n return html`\n <div class=\"input-wrapper\">\n ${this.renderSelectedUserChips()}\n <input \n type=\"text\"\n id=\"userInput\"\n name=\"name\"\n ?disabled=\"${this.inputDisabled}\"\n @input=\"${this.handleInput}\"\n @keydown=\"${this.handleKeydown}\"\n placeholder=\"Name or email\"\n aria-label=\"Name or email\"\n autocomplete=\"off\"\n />\n </div>\n `;\n }\n\n protected renderAutocomplete(): TemplateResult {\n const { userSuggestions } = this;\n let opened = this.suggestionsOpened;\n if (opened && (!userSuggestions || !userSuggestions.length)) {\n opened = false;\n }\n\n const classes = {\n suggestions: true,\n opened,\n };\n\n return html`\n <div class=\"${classMap(classes)}\" style=\"${styleMap(this.suggestionStyles || {})}\">\n <ui-listbox \n class=\"user-autocomplete\" \n role=\"listbox\" \n aria-label=\"Suggested users from your organization.\"\n tabindex=\"-1\"\n @select=\"${this.handleSuggestionSelect}\"\n >\n ${this.renderSuggestionList()}\n </ui-listbox>\n </div>\n `;\n }\n\n /**\n * @returns The template for the suggestions list.\n */\n protected renderSuggestionList(): TemplateResult[] | string {\n const items = this.userSuggestions;\n if (!Array.isArray(items) || !items.length) {\n return '';\n }\n return items.map(i => this.renderSuggestionItem(i));\n }\n\n /**\n * @returns The template for an URL suggestion item.\n */\n protected renderSuggestionItem(user: IUser): TemplateResult {\n const { name, key } = user;\n const email = this.getUserEmail(user);\n return html`\n <ui-list-item \n class=\"suggestion-item\" \n data-key=\"${key}\"\n role=\"option\"\n aria-selected=\"false\"\n lines=\"two\"\n image=\"avatar\"\n >\n <user-avatar slot=\"start\" .user=\"${user}\"></user-avatar>\n <div>${name || key}</div>\n <p slot=\"supporting-text\">${email}</p>\n </ui-list-item>`;\n }\n\n protected renderSelectedUserChips(): TemplateResult | string {\n if (!this.hasSelectedUsers) {\n return '';\n }\n return html`\n ${(this.selectedUsers as IUser[]).map((user) => this.renderUserChip(user))}\n `;\n }\n\n protected renderUserChip(user: IUser): TemplateResult {\n const email = this.getUserEmail(user);\n return html`\n <ui-chip type=\"input\" closable @close=\"${this.handleUserChipRemove}\" data-key=\"${user.key}\" title=\"${ifDefined(email)}\">\n <user-avatar slot=\"avatar\" .user=\"${user}\"></user-avatar>\n ${user.name || email || user.key}\n </ui-chip>\n `;\n }\n\n protected roleSelectorTemplate(): TemplateResult | string {\n if (!this.hasSelectedUsers) {\n return '';\n }\n const { selectedRole } = this;\n \n let label: string;\n const info = roles[selectedRole as PermissionRole];\n if (info) {\n label = info.label;\n } else {\n label = 'Role';\n }\n return html`\n <ui-dropdown-list @select=\"${this.handleRoleOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-button aria-label=\"Select user role\" type=\"tonal\">${label} <ui-icon icon=\"arrowDropDown\" role=\"presentation\"></ui-icon></ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${Object.keys(roles).map((key) => html`\n <ui-list-item role=\"menuitem\" data-role=\"${key}\" title=\"${roles[key as PermissionRole].title}\">\n ${roles[key as PermissionRole].label}\n </ui-list-item>`)}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCurrentUsers(): TemplateResult | string {\n if (this.hasSelectedUsers) {\n return '';\n }\n const { file, loading, permissionUsers } = this;\n if (!file || !permissionUsers || loading) {\n return '';\n }\n const { permissions=[] } = file;\n return html`\n <div class=\"current-users\">\n ${permissions.map(p => this.renderUserPermission(p))}\n </div>\n `;\n }\n\n protected renderUserPermission(permission: IPermission): TemplateResult | typeof nothing {\n const { type, role } = permission;\n if (type === 'group') {\n return nothing;\n }\n if (type === 'anyone') {\n return html`<p>Shared within the organization.</p>`;\n }\n const { permissionUsers=[] } = this;\n const userId = permission.owner as string;\n const user = permissionUsers.find(u => u.key === userId);\n if (!user) {\n // @TODO: should render something...\n return nothing;\n }\n return html`\n <div class=\"permission-item\">\n <user-avatar class=\"user-icon\" .user=\"${user}\"></user-avatar>\n <div class=\"permission-user\">\n <span class=\"user-name\">${user.name || user.key}</span>\n <span class=\"user-email\">${this.getUserEmail(user)}</span>\n </div>\n <div class=\"user-role\">\n ${this.permissionRoleTemplate(role, userId)}\n </div>\n </div>\n `;\n }\n\n protected permissionRoleTemplate(role: PermissionRole, userId: string): TemplateResult {\n const { pendingPermissions } = this;\n const pending = pendingPermissions && pendingPermissions.find(i => i.type === 'user' && i.id === userId) as IAccessAddOperation | undefined;\n const pendingRole = pending && pending.value;\n const selectionRole = pendingRole || role;\n\n let label: string;\n const info = roles[selectionRole];\n if (info) {\n label = info.label;\n } else {\n label = 'Role';\n }\n return html`\n <ui-dropdown-list \n @select=\"${this.handleRoleChangeOption}\" \n closeOnOutsideClick class=\"dropdown\" \n data-user=\"${userId}\"\n data-current=\"${role}\"\n >\n <ui-button aria-label=\"Select user role\" type=\"text\">${label} <ui-icon icon=\"arrowDropDown\" role=\"presentation\"></ui-icon></ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.roleItemTemplate('reader', selectionRole)}\n ${this.roleItemTemplate('commenter', selectionRole)}\n ${this.roleItemTemplate('writer', selectionRole)}\n ${this.roleItemTemplate('owner', selectionRole)}\n <ui-divider type=\"inset\"></ui-divider>\n <ui-list-item role=\"menuitem\" data-role=\"remove\" title=\"Removes the user\">\n Remove\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected roleItemTemplate(role: PermissionRole, userRole: PermissionRole): TemplateResult {\n return html`\n <ui-list-item role=\"menuitem\" data-role=\"${role}\" title=\"${roles[role].title}\" image=\"icon\">\n ${role === userRole ? html`<ui-icon icon=\"check\" slot=\"end\"></ui-icon>` : ''}\n ${roles[role].label}\n </ui-list-item>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ShareFile.js","sourceRoot":"","sources":["../../../src/elements/files/ShareFile.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, nothing, } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { StyleInfo, styleMap } from 'lit/directives/style-map.js';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { \n IFile, Events as CoreEvents, IUser, AccessOperation, IAccessAddOperation, PermissionRole, IPermission,\n IApplication, IPatchRevision, BroadcastEvent, FilePatchBroadcastEvent,\n} from '@api-client/core/build/browser.js';\nimport { Patch, Core as JsonCore } from '@api-client/json';\nimport { Events } from '../../events/Events.js';\nimport { randomString } from '../../lib/Random.js';\nimport { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';\nimport UiDialog from '../../ui/dialog/UiDialog.js';\nimport { ElementPositioning } from '../../ui/lib/ElementPositioning.js';\nimport UiListbox from '../../ui/list/UiListbox.js';\nimport UiListItem from '../../ui/list/UiListItem.js';\nimport UiChip from '../../ui/chip/UiChip.js';\nimport { SnackNotifications } from '../../ui/notification/SnackNotifications.js';\nimport '../../define/ui/ui-listbox.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-chip.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/user/user-avatar.js';\n\nconst NAVIGATION_KEYS = {\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Home: 'Home',\n End: 'End',\n Escape: 'Escape',\n Enter: 'Enter',\n Space: ' ',\n Backspace: 'Backspace',\n};\n\ninterface RoleInfo {\n label: string;\n title: string;\n}\n\nconst roles: Record<PermissionRole, RoleInfo> = {\n reader: { label: 'Reader', title: 'Shares the file as read only' },\n commenter: { label: 'Commenter', title: 'Allows users to collaborate by leaving comments (when applicable)' },\n writer: { label: 'Writer', title: \"Allows users to edit contents of the file. It also allows to share or delete file.\" },\n owner: { label: 'Owner', title: 'The same permissions as the owner of the file' },\n};\n\n/**\n * A dialog that shows users that the file is shared with and allows to share a file.\n * \n * Listen to the `closed` on the dialog. The CustomEvent has the `detail`\n * object with the `closingReason` retails:\n * - canceled: whether the dialog was cancelled (ESC, outside click, dismiss button)\n * - confirmed: whether the dialog was confirmed by the user\n * \n * ```javascript\n * const dialog = document.createElement('share-file');\n * dialog.key = 'file key';\n * // or\n * dialog.file = file;\n * dialog.appInfo=\"${AppInfo}\"\n * dialog.user=\"${currentUser}\"\n * dialog.opened = true;\n * document.body.appendChild(dialog);\n * dialog.addEventListener('closed', (ev: Event) => {\n * document.body.removeChild(dialog);\n * });\n * ```\n */\nexport default class ShareFile extends UiDialog {\n private keyInternal?: string;\n\n /**\n * The key of the file to share.\n */\n @property({ type: String }) get key(): string | undefined {\n return this.keyInternal;\n }\n\n set key(value: string | undefined) {\n const old = this.keyInternal;\n if (old === value) {\n return;\n }\n this.keyInternal = value;\n this.processFileKey(value);\n }\n\n protected fileInternal?: IFile;\n\n /**\n * When known, set this instead of the `key` to skip requesting the file info.\n * Also, when file is set and then the `key` is set the HTTP request won't be made.\n */\n @property({ type: Object }) get file(): IFile | undefined {\n return this.fileInternal;\n }\n\n set file(value: IFile | undefined) {\n const old = this.fileInternal;\n if (old === value) {\n return;\n }\n if (old && value && old.key === value.key) {\n return;\n }\n this.fileInternal = value ? JsonCore.clone(value) : undefined;\n if (value) {\n this.requestFileUsers(value.key);\n }\n }\n\n /**\n * The current user to filter out the user from the suggestions and the shared list.\n */\n @property({ type: Object }) user?: IUser;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n * \n * It will throw an error when trying to patch access without setting this property.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * A flag set when requesting the the file meta\n */\n @state() protected loadingFile = false;\n\n /**\n * A flag set when requesting the current list of users for the file.\n */\n @state() protected loadingFileUsers = false;\n\n /**\n * Computed value of whether currently loading file or file users.\n */\n get loading(): boolean {\n return this.loadingFile || this.loadingFileUsers;\n }\n\n @query('#userInput')\n protected readonly input!: HTMLInputElement;\n\n @query('.suggestions')\n protected readonly suggestionsContainer!: HTMLDivElement;\n\n @query('ui-listbox.user-autocomplete')\n protected readonly suggestionsList!: UiListbox;\n\n /**\n * The list of users to render in the suggestion box.\n */\n @state() protected userSuggestions?: IUser[];\n\n /**\n * Whether the suggestion box is opened.\n */\n @state() protected suggestionsOpened = false;\n\n /**\n * The list of users that were selected by the users to share the file with.\n */\n @state() protected selectedUsers?: IUser[];\n\n /**\n * The list of users that have permission to the file read from the store\n * when the component was initializing.\n */\n @state() protected permissionUsers: IUser[] = [];\n\n /**\n * A list of permissions to set on the users after the user confirms the change.\n * These are pending changes and only populated when the user changes any of the roles of \n * an existing user.\n */\n @state() protected pendingPermissions?: AccessOperation[];\n\n /**\n * The last user query sent to the server. Used by the suggestions logic.\n */\n protected lastUserQuery?: string;\n\n /**\n * Computed value telling whether the main input should be disabled for the current state.\n */\n protected get inputDisabled(): boolean {\n const { file } = this;\n if (!file) {\n return true;\n }\n const { capabilities } = file;\n if (!capabilities) {\n return true;\n }\n return !capabilities.canShare;\n }\n\n /**\n * Computed value whether there are selected users\n */\n get hasSelectedUsers(): boolean {\n const { selectedUsers } = this;\n if (!Array.isArray(selectedUsers) || !selectedUsers.length) {\n return false;\n }\n return true;\n }\n\n /**\n * Whether there are pending permissions to be set.\n */\n get hasPending(): boolean {\n const { pendingPermissions } = this;\n return !!pendingPermissions && !!pendingPermissions.length;\n }\n\n protected get fileId(): string {\n const { key, file } = this;\n if (key) {\n return key;\n }\n if (file) {\n return file.key;\n }\n throw new Error(`Invalid state, file is not set.`);\n }\n\n filesChannel = new BroadcastChannel(StoreBroadcast.files);\n\n /**\n * Computed positioning styles for the suggestion box.\n */\n protected suggestionStyles?: StyleInfo;\n\n @state() protected selectedRole: PermissionRole = 'reader';\n\n constructor() {\n super();\n this.fileMetaMessageHandler = this.fileMetaMessageHandler.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.filesChannel.addEventListener('message', this.fileMetaMessageHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.filesChannel.removeEventListener('message', this.fileMetaMessageHandler);\n }\n\n protected fileMetaMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.operation === 'patch') {\n this.handleFilePatch(event as FilePatchBroadcastEvent);\n }\n }\n\n protected handleFilePatch(event: FilePatchBroadcastEvent): void {\n const { key, alt } = event;\n if (this.fileId !== key || alt !== 'meta') {\n return;\n }\n const file = this.file as IFile;\n const rev = event.data as IPatchRevision;\n const { patch } = rev;\n const result = Patch.apply(file, patch);\n this.file = result.doc as IFile;\n const hasPermission = patch.some(i => i.path.startsWith('/permissions'));\n if (hasPermission) {\n this.requestFileUsers(file.key);\n }\n this.requestUpdate();\n }\n\n protected processFileKey(value?: string): void {\n if (!value) {\n this.file = undefined;\n this.selectedUsers = undefined;\n this.lastUserQuery = undefined;\n this.pendingPermissions = undefined;\n this.selectedUsers = undefined;\n this.userSuggestions = undefined;\n this.loadingFile = false;\n this.loadingFileUsers = false;\n this.permissionUsers = [];\n return;\n }\n this.requestFileInfo(value);\n this.requestFileUsers(value);\n }\n\n protected async requestFileInfo(key: string): Promise<void> {\n if (this.file && this.file.key === key) {\n return;\n }\n this.loadingFile = true;\n try {\n this.file = await Events.Store.File.read(key, false, this);\n } catch (e) {\n CoreEvents.Telemetry.exception((e as Error).message, true, this);\n } finally {\n this.loadingFile = false;\n }\n }\n\n protected async requestFileUsers(key: string): Promise<void> {\n this.loadingFileUsers = true;\n try {\n const list = await Events.Store.File.listUsers(key);\n this.permissionUsers = list.items;\n } catch (e) {\n CoreEvents.Telemetry.exception((e as Error).message, true, this);\n } finally {\n this.loadingFileUsers = false;\n }\n }\n\n protected handleInput(e: Event): void {\n const input = e.target as HTMLInputElement;\n const { value } = input;\n this.queryUsers(value);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const { suggestionsOpened, suggestionsList } = this;\n if (!suggestionsList || event.defaultPrevented) {\n return;\n }\n if (Object.values(NAVIGATION_KEYS).indexOf(event.key) === -1) return;\n\n if (event.key === NAVIGATION_KEYS.Escape) {\n if (suggestionsOpened) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSuggestions(false);\n }\n } else if (event.key === NAVIGATION_KEYS.ArrowDown) {\n event.preventDefault();\n if (suggestionsOpened) {\n this.suggestionsList.highlightNext();\n } else {\n this.queryUsers('');\n }\n } else if (event.key === NAVIGATION_KEYS.ArrowUp) {\n event.preventDefault();\n if (suggestionsOpened) {\n this.suggestionsList.highlightPrevious();\n }\n } else if (event.key === NAVIGATION_KEYS.Home) {\n if (suggestionsOpened) {\n event.preventDefault();\n this.suggestionsList.highlightFirst();\n }\n } else if (event.key === NAVIGATION_KEYS.End) {\n if (suggestionsOpened) {\n event.preventDefault();\n this.suggestionsList.highlightLast();\n }\n } else if (event.key === NAVIGATION_KEYS.Enter) {\n event.preventDefault();\n if (suggestionsOpened) {\n const item = suggestionsList.highlightListItem;\n if (item) {\n suggestionsList.notifySelect(item);\n }\n }\n } else if (event.key === NAVIGATION_KEYS.Backspace) {\n const input = event.target as HTMLInputElement;\n if (!input.value) {\n event.preventDefault();\n this.removeLastSelectedUser();\n }\n }\n }\n\n protected handleSuggestionSelect(e: CustomEvent): void {\n const item = e.detail.item as UiListItem;\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectUserSuggestion(key);\n }\n\n protected selectUserSuggestion(key: string): void {\n this.toggleSuggestions(false);\n const { input, userSuggestions } = this;\n if (!input || !userSuggestions) {\n return;\n }\n input.value = '';\n const user = userSuggestions.find(i => i.key === key);\n if (!user) {\n return;\n }\n if (!this.selectedUsers) {\n this.selectedUsers = [user];\n } else {\n this.selectedUsers.push(user);\n this.requestUpdate();\n }\n }\n\n protected deselectUserSuggestion(key: string): void {\n const { selectedUsers: users = [] } = this;\n const index = users.findIndex(u => u.key === key);\n if (index >= 0) {\n users.splice(index, 1);\n if (!users.length) {\n this.selectedUsers = undefined;\n }\n this.requestUpdate();\n }\n }\n\n protected handleUserChipRemove(e: Event): void {\n const chip = e.target as UiChip;\n const { key } = chip.dataset;\n if (!key) {\n return;\n }\n this.deselectUserSuggestion(key);\n }\n\n protected removeLastSelectedUser(): void {\n const { selectedUsers } = this;\n if (!selectedUsers || !selectedUsers.length) {\n return;\n }\n const index = selectedUsers.length - 1;\n selectedUsers.splice(index, 1);\n if (!selectedUsers.length) {\n this.selectedUsers = undefined;\n }\n this.requestUpdate();\n }\n\n protected async queryUsers(q: string): Promise<void> {\n const { lastUserQuery, selectedUsers, userSuggestions, user } = this;\n let users: IUser[] = [];\n this.lastUserQuery = q;\n if (lastUserQuery && userSuggestions && q.includes(lastUserQuery)) {\n const lower = q.toLowerCase();\n // filter the current list for the continues query.\n // Not necessary to query the server as we have all results.\n users = userSuggestions.filter((i) => {\n const { name, email } = i;\n if (name && name.toLowerCase().includes(lower)) {\n return true;\n }\n if (email) {\n for (const item of email) {\n if (item.email && item.email.toLowerCase().includes(lower)) {\n return true;\n }\n }\n }\n return false;\n });\n } else {\n const result = await Events.Store.User.list({\n query: q,\n });\n users = result.items;\n }\n if (selectedUsers) {\n users = users.filter(candidate => !selectedUsers.some(i => i.key === candidate.key));\n }\n if (user) {\n users = users.filter(candidate => candidate.key !== user.key);\n }\n if (users.length) {\n this.userSuggestions = users;\n this.toggleSuggestions(true);\n } else {\n this.userSuggestions = undefined;\n this.toggleSuggestions(false);\n }\n }\n\n protected toggleSuggestions(opened: boolean): void {\n if (!opened) {\n this.suggestionsOpened = false;\n this.input.focus();\n } else {\n this.suggestionStyles = ElementPositioning.positionOverlay(this.suggestionsContainer, this.input, {\n vertical: 'top',\n noOverlap: true,\n constrain: true,\n matchAnchorWidth: true,\n });\n this.suggestionsOpened = true;\n }\n }\n\n protected getUserEmail(user: IUser): string | undefined {\n const { email } = user;\n if (!Array.isArray(email) || !email.length) {\n return undefined;\n }\n const emails: string[] = [];\n // we first find a verified email and then we pick any email\n for (const item of email) {\n if (item.verified && item.email) {\n return item.email;\n }\n if (item.email) {\n emails.push(item.email);\n }\n }\n return emails[0];\n }\n\n protected handleRoleOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { role } = element.dataset;\n if (!role) {\n return;\n }\n this.selectedRole = role as PermissionRole;\n }\n\n protected cancelShareUser(): void {\n this.selectedUsers = undefined;\n this.lastUserQuery = undefined;\n this.userSuggestions = undefined;\n this.suggestionsOpened = false;\n }\n\n protected handleShare(): void {\n const { selectedRole } = this;\n if (!selectedRole) {\n SnackNotifications.notify('Select a role before sharing', { timeout: 2000 });\n return;\n }\n this.share(selectedRole);\n }\n\n protected async share(role: PermissionRole): Promise<void> {\n if (!role) {\n throw new Error(`Invalid state. Role is not selected.`);\n }\n const { selectedUsers } = this;\n if (!selectedUsers || !selectedUsers.length) {\n this.cancelShareUser();\n return;\n }\n const { appInfo } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on the <${this.localName}> element.`);\n }\n const id = this.fileId;\n if (!id) {\n throw new Error(`The fileId is not set on the <${this.localName}> element.`);\n }\n const ops: AccessOperation[] = selectedUsers.map(user => {\n const op: AccessOperation = {\n op: 'add',\n type: 'user',\n value: role,\n id: user.key,\n };\n return op;\n });\n try {\n await Events.Store.File.patchUsers(id, randomString(), ops, appInfo);\n this.cancelShareUser();\n } catch (e) {\n const cause = e as Error;\n CoreEvents.Telemetry.exception(cause.message, false, this);\n throw cause;\n }\n }\n\n protected handleRoleChangeOption(e: CustomEvent): void {\n const list = e.target as HTMLElement;\n const { user, current } = list.dataset;\n const element = e.detail.item as HTMLElement;\n const role = element.dataset.role as PermissionRole;\n if (!role || !user || !current) {\n return;\n }\n if (!this.pendingPermissions) {\n this.pendingPermissions = [];\n }\n const { pendingPermissions = [] } = this;\n const index = pendingPermissions.findIndex(i => i.id === user);\n if (index >= 0) {\n // removes prior selection\n pendingPermissions.splice(index, 1);\n }\n\n if (role === current) {\n // the user selected the role that was originally assigned to the user.\n // we don't change anything.\n if (!pendingPermissions.length) {\n this.pendingPermissions = undefined;\n }\n this.requestUpdate();\n return;\n }\n\n let op: AccessOperation;\n if ((role as string) === 'remove') {\n op = {\n op: 'remove',\n type: 'user',\n id: user,\n };\n } else {\n op = {\n op: 'add',\n type: 'user',\n value: role,\n id: user,\n };\n }\n pendingPermissions.push(op);\n this.requestUpdate();\n }\n\n protected async handleCommitChanges(): Promise<void> {\n const { key, file, pendingPermissions } = this;\n if (!pendingPermissions) {\n return;\n }\n const { appInfo } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on the <${this.localName}> element.`);\n }\n const id = key || file && file.key;\n if (!id) {\n throw new Error(`Either \"key\" or \"file\" must be set on the <${this.localName}> element.`);\n }\n try {\n await Events.Store.File.patchUsers(id, randomString(), pendingPermissions, appInfo);\n this.pendingPermissions = undefined;\n } catch (e) {\n const cause = e as Error;\n CoreEvents.Telemetry.exception(cause.message, false, this);\n throw cause;\n }\n }\n\n override renderIcon(): TemplateResult {\n const classes: ClassInfo = {\n icon: true,\n 'with-icon': true,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"icon\"><ui-icon icon=\"personAdd\"></ui-icon></div>\n `;\n }\n\n override renderTitle(): TemplateResult {\n const classes: ClassInfo = {\n title: true,\n 'with-title': true,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"title\"><span>Share with others</span></div>\n `;\n }\n\n override renderBody(): TemplateResult {\n return html`\n <div class=\"content\">\n ${this.userInputTemplate()}\n ${this.renderCurrentUsers()}\n </div>\n `;\n }\n\n override renderButtons(): TemplateResult {\n const classes: ClassInfo = {\n buttons: true,\n 'with-buttons': true,\n };\n\n let content: TemplateResult;\n if (this.hasPending) {\n content = this.pendingActionsTemplate();\n } else if (this.hasSelectedUsers) {\n content = this.selectedUsersActionsTemplate();\n } else {\n content = this.overviewActionsTemplate();\n }\n return html`\n <div class=\"${classMap(classes)}\" part=\"button\">${content}</div>\n `;\n }\n\n protected overviewActionsTemplate(): TemplateResult {\n return html`\n <ui-button value=\"confirm\" type=\"text\" class=\"internal-button\" @click=\"${this.handleConfirm}\">Done</ui-button>\n `;\n }\n\n protected selectedUsersActionsTemplate(): TemplateResult {\n return html`\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.cancelShareUser}\">Cancel</ui-button>\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.handleShare}\">Share</ui-button>\n `;\n }\n\n protected pendingActionsTemplate(): TemplateResult {\n return html`\n <span class=\"pending-info\">Pending changes</span>\n <ui-button type=\"text\" class=\"internal-button\" @click=\"${this.handleCommitChanges}\">Save</ui-button>\n `;\n }\n\n protected userInputTemplate(): TemplateResult {\n const classes = {\n 'name-input': true,\n autocomplete: this.suggestionsOpened,\n };\n return html`\n <div class=\"input-line\">\n <div class=\"${classMap(classes)}\">\n ${this.renderInput()}\n ${this.renderAutocomplete()}\n </div>\n ${this.roleSelectorTemplate()}\n </div>\n `\n }\n\n protected renderInput(): TemplateResult {\n return html`\n <div class=\"input-wrapper\">\n ${this.renderSelectedUserChips()}\n <input \n type=\"text\"\n id=\"userInput\"\n name=\"name\"\n ?disabled=\"${this.inputDisabled}\"\n @input=\"${this.handleInput}\"\n @keydown=\"${this.handleKeydown}\"\n placeholder=\"Name or email\"\n aria-label=\"Name or email\"\n autocomplete=\"off\"\n />\n </div>\n `;\n }\n\n protected renderAutocomplete(): TemplateResult {\n const { userSuggestions } = this;\n let opened = this.suggestionsOpened;\n if (opened && (!userSuggestions || !userSuggestions.length)) {\n opened = false;\n }\n\n const classes = {\n suggestions: true,\n opened,\n };\n\n return html`\n <div class=\"${classMap(classes)}\" style=\"${styleMap(this.suggestionStyles || {})}\">\n <ui-listbox \n class=\"user-autocomplete\" \n role=\"listbox\" \n aria-label=\"Suggested users from your organization.\"\n tabindex=\"-1\"\n @select=\"${this.handleSuggestionSelect}\"\n >\n ${this.renderSuggestionList()}\n </ui-listbox>\n </div>\n `;\n }\n\n /**\n * @returns The template for the suggestions list.\n */\n protected renderSuggestionList(): TemplateResult[] | string {\n const items = this.userSuggestions;\n if (!Array.isArray(items) || !items.length) {\n return '';\n }\n return items.map(i => this.renderSuggestionItem(i));\n }\n\n /**\n * @returns The template for an URL suggestion item.\n */\n protected renderSuggestionItem(user: IUser): TemplateResult {\n const { name, key } = user;\n const email = this.getUserEmail(user);\n return html`\n <ui-list-item \n class=\"suggestion-item\" \n data-key=\"${key}\"\n role=\"option\"\n aria-selected=\"false\"\n lines=\"two\"\n image=\"avatar\"\n >\n <user-avatar slot=\"start\" .user=\"${user}\"></user-avatar>\n <div>${name || key}</div>\n <p slot=\"supporting-text\">${email}</p>\n </ui-list-item>`;\n }\n\n protected renderSelectedUserChips(): TemplateResult | string {\n if (!this.hasSelectedUsers) {\n return '';\n }\n return html`\n ${(this.selectedUsers as IUser[]).map((user) => this.renderUserChip(user))}\n `;\n }\n\n protected renderUserChip(user: IUser): TemplateResult {\n const email = this.getUserEmail(user);\n return html`\n <ui-chip type=\"input\" closable @close=\"${this.handleUserChipRemove}\" data-key=\"${user.key}\" title=\"${ifDefined(email)}\">\n <user-avatar slot=\"avatar\" .user=\"${user}\"></user-avatar>\n ${user.name || email || user.key}\n </ui-chip>\n `;\n }\n\n protected roleSelectorTemplate(): TemplateResult | string {\n if (!this.hasSelectedUsers) {\n return '';\n }\n const { selectedRole } = this;\n \n let label: string;\n const info = roles[selectedRole as PermissionRole];\n if (info) {\n label = info.label;\n } else {\n label = 'Role';\n }\n return html`\n <ui-dropdown-list @select=\"${this.handleRoleOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-button aria-label=\"Select user role\" type=\"tonal\">${label} <ui-icon icon=\"arrowDropDown\" role=\"presentation\"></ui-icon></ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${Object.keys(roles).map((key) => html`\n <ui-list-item role=\"menuitem\" data-role=\"${key}\" title=\"${roles[key as PermissionRole].title}\">\n ${roles[key as PermissionRole].label}\n </ui-list-item>`)}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCurrentUsers(): TemplateResult | string {\n if (this.hasSelectedUsers) {\n return '';\n }\n const { file, loading, permissionUsers } = this;\n if (!file || !permissionUsers || loading) {\n return '';\n }\n const { permissions=[] } = file;\n return html`\n <div class=\"current-users\">\n ${permissions.map(p => this.renderUserPermission(p))}\n </div>\n `;\n }\n\n protected renderUserPermission(permission: IPermission): TemplateResult | typeof nothing {\n const { type, role } = permission;\n if (type === 'group') {\n return nothing;\n }\n if (type === 'anyone') {\n return html`<p>Shared within the organization.</p>`;\n }\n const { permissionUsers=[] } = this;\n const userId = permission.owner as string;\n const user = permissionUsers.find(u => u.key === userId);\n if (!user) {\n // @TODO: should render something...\n return nothing;\n }\n return html`\n <div class=\"permission-item\">\n <user-avatar class=\"user-icon\" .user=\"${user}\"></user-avatar>\n <div class=\"permission-user\">\n <span class=\"user-name\">${user.name || user.key}</span>\n <span class=\"user-email\">${this.getUserEmail(user)}</span>\n </div>\n <div class=\"user-role\">\n ${this.permissionRoleTemplate(role, userId)}\n </div>\n </div>\n `;\n }\n\n protected permissionRoleTemplate(role: PermissionRole, userId: string): TemplateResult {\n const { pendingPermissions } = this;\n const pending = pendingPermissions && pendingPermissions.find(i => i.type === 'user' && i.id === userId) as IAccessAddOperation | undefined;\n const pendingRole = pending && pending.value;\n const selectionRole = pendingRole || role;\n\n let label: string;\n const info = roles[selectionRole];\n if (info) {\n label = info.label;\n } else {\n label = 'Role';\n }\n return html`\n <ui-dropdown-list \n @select=\"${this.handleRoleChangeOption}\" \n closeOnOutsideClick class=\"dropdown\" \n data-user=\"${userId}\"\n data-current=\"${role}\"\n >\n <ui-button aria-label=\"Select user role\" type=\"text\">${label} <ui-icon icon=\"arrowDropDown\" role=\"presentation\"></ui-icon></ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.roleItemTemplate('reader', selectionRole)}\n ${this.roleItemTemplate('commenter', selectionRole)}\n ${this.roleItemTemplate('writer', selectionRole)}\n ${this.roleItemTemplate('owner', selectionRole)}\n <ui-divider type=\"inset\"></ui-divider>\n <ui-list-item role=\"menuitem\" data-role=\"remove\" title=\"Removes the user\">\n Remove\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected roleItemTemplate(role: PermissionRole, userRole: PermissionRole): TemplateResult {\n return html`\n <ui-list-item role=\"menuitem\" data-role=\"${role}\" title=\"${roles[role].title}\" image=\"icon\">\n ${role === userRole ? html`<ui-icon icon=\"check\" slot=\"end\"></ui-icon>` : ''}\n ${roles[role].label}\n </ui-list-item>\n `;\n }\n}\n"]}
@@ -26,8 +26,12 @@ let nextId = 0;
26
26
  * An element that renders the UI for HAR data.
27
27
  */
28
28
  export default class HarViewer extends ApiElement {
29
- harInternal;
30
- ignorePagesInternal;
29
+ constructor() {
30
+ super(...arguments);
31
+ this.openedPages = [];
32
+ this.openedEntries = [];
33
+ this.selectedTabs = new Map();
34
+ }
31
35
  /**
32
36
  * The HAR object to render.
33
37
  */
@@ -56,11 +60,6 @@ export default class HarViewer extends ApiElement {
56
60
  this.ignorePagesInternal = value;
57
61
  this.processHar();
58
62
  }
59
- entries;
60
- pages;
61
- openedPages = [];
62
- openedEntries = [];
63
- selectedTabs = new Map();
64
63
  /**
65
64
  * Called when the `har` or `ignorePages` changed.
66
65
  */