@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
@@ -179,31 +179,25 @@ export default class LayoutPanelElement extends LitElement {
179
179
  }
180
180
  `];
181
181
  }
182
- /**
183
- * @attribute
184
- */
185
- layout = 'horizontal';
186
- /**
187
- * @attribute
188
- */
189
- layoutId;
190
- dragTypes;
191
- /**
192
- * Whether dragging is occurring over the element
193
- */
194
- inDrag = false;
195
- /**
196
- * The region the drag is leaning to.
197
- */
198
- dragRegion = 'center';
199
- panel;
200
- /**
201
- * When set it adds the `overflow` hidden on the container that holds the tab contents.
202
- * @attribute
203
- */
204
- constrain = false;
205
182
  constructor() {
206
183
  super();
184
+ /**
185
+ * @attribute
186
+ */
187
+ this.layout = 'horizontal';
188
+ /**
189
+ * Whether dragging is occurring over the element
190
+ */
191
+ this.inDrag = false;
192
+ /**
193
+ * The region the drag is leaning to.
194
+ */
195
+ this.dragRegion = 'center';
196
+ /**
197
+ * When set it adds the `overflow` hidden on the container that holds the tab contents.
198
+ * @attribute
199
+ */
200
+ this.constrain = false;
207
201
  this._dragEnterHandler = this._dragEnterHandler.bind(this);
208
202
  this._dragOverHandler = this._dragOverHandler.bind(this);
209
203
  this._dropHandler = this._dropHandler.bind(this);
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutPanelElement.js","sourceRoot":"","sources":["../../../src/elements/layout/LayoutPanelElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { LitElement, html, TemplateResult, CSSResult, css } from 'lit';\nimport { property, state, eventOptions } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { classMap } from 'lit/directives/class-map.js';\n// eslint-disable-next-line import/no-cycle\nimport { LayoutPanel, DropRegion, ILayoutItem } from './LayoutManager.js';\nimport surfaceStyles from '../../styles/m3/surface.module.js';\nimport '../../define/ui/ui-icon.js';\n\nexport default class LayoutPanelElement extends LitElement {\n static override get styles(): CSSResult[] {\n return [surfaceStyles, css`\n :host {\n display: flex;\n position: relative;\n flex-direction: column;\n /* border: 1px red solid; */\n }\n\n .content {\n display: flex;\n flex: 1;\n }\n \n :host([constrain]) .content {\n overflow: hidden;\n }\n\n :host([layout=horizontal]) .content {\n flex-direction: row;\n }\n\n :host([layout=vertical]) .content {\n flex-direction: column;\n }\n\n :host ::slotted(*) {\n flex: 1;\n /* width: 100%;\n height: 100%; */\n }\n\n .drag-region {\n position: absolute;\n background-color: rgba(0,0,0,0.12);\n }\n\n .drag-region.center {\n top: 0;\n bottom: 0;\n left: 0;\n right:0;\n }\n\n .drag-region.west {\n top: 0;\n bottom: 0;\n left: 0;\n right: 50%;\n }\n\n .drag-region.east {\n top: 0;\n bottom: 0;\n left: 50%;\n right: 0;\n }\n\n .drag-region.north {\n top: 0;\n left: 0;\n right: 0;\n bottom: 50%;\n }\n\n .drag-region.south {\n top: 50%;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .layout-tabs {\n display: flex;\n align-items: center;\n background: var(--layout-tabs-background, var(--secondary-background-color));\n }\n\n .layout-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex: 1 1 200px;\n max-width: 200px;\n min-width: 40px;\n width: 200px;\n height: 100%;\n font-size: 0.94rem;\n padding: 0px 12px;\n border-radius: var(--md-sys-shape-corner-small-top);\n height: 40px; \n outline: none;\n justify-content: flex-start;\n text-transform: none;\n color: var(--md-sys-color-on-surface);\n\n font-family: var(--md-sys-typescale-body-medium-font-family-name);\n font-style: var(--md-sys-typescale-body-medium-font-family-style);\n font-weight: var(--md-sys-typescale-body-medium-font-weight);\n font-size: var(--md-sys-typescale-body-medium-font-size);\n letter-spacing: var(--md-sys-typescale-body-medium-tracking);\n line-height: var(--md-sys-typescale-body-medium-height);\n text-transform: var(--md-sys-typescale-body-medium-text-transform);\n text-decoration: var(--md-sys-typescale-body-medium-text-decoration);\n }\n\n .tab-label {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .is-dirty .tab-label {\n font-style: italic;\n }\n\n .is-dirty .tab-label::after {\n content: '*';\n user-select: none;\n }\n\n .layout-tab.selected {\n /* z-index: 2; */\n background: var(--layout-tab-select-background, var(--primary-background-color));\n }\n\n .layout-tab:not(.selected):hover::before {\n background-color: var(--md-sys-color-primary);\n opacity: var(--md-sys-state-hover-state-layer-opacity);\n position: absolute;\n inset: 0;\n content: '';\n border-radius: inherit;\n }\n\n .layout-tab:not(.selected):focus::before {\n background-color: var(--md-sys-color-primary);\n opacity: var(--md-sys-state-focus-state-layer-opacity);\n position: absolute;\n inset: 0;\n content: '';\n border-radius: inherit;\n }\n\n /* .layout-tab:focus {\n border-top-color: var(--primary-color);\n } */\n\n .tab-favicon {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n }\n\n .close-icon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n }\n\n .tab-divider {\n width: 1px;\n min-width: 1px;\n height: 20px;\n background-color: var(--md-sys-color-outline-variant);\n }\n\n .tab-divider.hidden {\n background-color: transparent;\n }\n `];\n }\n\n /**\n * @attribute\n */\n @property({ type: String, reflect: true }) layout: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * @attribute\n */\n @property({ type: Number, reflect: true }) layoutId?: number;\n\n @property({ type: Array }) dragTypes?: string[];\n\n /**\n * Whether dragging is occurring over the element\n */\n @state() protected inDrag = false;\n\n /**\n * The region the drag is leaning to.\n */\n @state() protected dragRegion?: DropRegion = 'center';\n\n @property({ type: Object }) panel?: LayoutPanel;\n\n /**\n * When set it adds the `overflow` hidden on the container that holds the tab contents.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) constrain = false;\n\n constructor() {\n super();\n this._dragEnterHandler = this._dragEnterHandler.bind(this);\n this._dragOverHandler = this._dragOverHandler.bind(this);\n this._dropHandler = this._dropHandler.bind(this);\n this._dragleaveHandler = this._dragleaveHandler.bind(this);\n this._dragendHandler = this._dragendHandler.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('dragenter', this._dragEnterHandler);\n this.addEventListener('dragover', this._dragOverHandler);\n this.addEventListener('drop', this._dropHandler);\n document.body.addEventListener('dragleave', this._dragleaveHandler);\n document.body.addEventListener('dragend', this._dragendHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('dragenter', this._dragEnterHandler);\n this.removeEventListener('dragover', this._dragOverHandler);\n this.removeEventListener('drop', this._dropHandler);\n document.body.removeEventListener('dragleave', this._dragleaveHandler);\n document.body.removeEventListener('dragend', this._dragendHandler);\n }\n\n protected hasDropTypes(dt: DataTransfer): boolean {\n const { dragTypes } = this;\n if (!Array.isArray(dragTypes)) {\n return true;\n }\n const eventTypes = [...dt.types];\n const allowedTypes = dragTypes.map(i => i.toLowerCase());\n return !allowedTypes.some(type => !eventTypes.includes(type));\n }\n\n protected panelCanDrop(e: DragEvent): boolean {\n if (e.defaultPrevented) {\n return false;\n }\n if (e.dataTransfer && !this.hasDropTypes(e.dataTransfer)) {\n return false;\n }\n const { panel } = this;\n if (!panel) {\n return true;\n }\n return panel.canDrop();\n }\n\n protected _dragEnterHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n dataTransfer.dropEffect = 'copy';\n }\n\n protected _dragOverHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const region = this.getDropRegionFromEvent(e);\n if (!region) {\n this.inDrag = false;\n return;\n }\n dataTransfer.dropEffect = 'copy';\n this.inDrag = true;\n this.dragRegion = region;\n }\n\n protected _dropHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const kind = dataTransfer.getData('text/kind');\n const key = dataTransfer.getData('text/key');\n if (!kind || !key) {\n return;\n }\n this.inDrag = false;\n const { panel } = this;\n let dispatch = true;\n if (panel) {\n dispatch = panel.addItem({ key, kind, label: 'New tab' }, { region: this.dragRegion });\n }\n if (dispatch) {\n this.dispatchEvent(new CustomEvent('datadrop', {\n detail: { kind, key, region: this.dragRegion },\n composed: true,\n bubbles: true,\n cancelable: true,\n }));\n }\n this.requestUpdate();\n }\n\n protected _dragleaveHandler(e: DragEvent): void {\n const elm = this.findLayout(e);\n if (!elm || elm !== this) {\n this.inDrag = false;\n this.dragRegion = 'center';\n }\n }\n\n protected _dragendHandler(): void {\n this.inDrag = false;\n this.dragRegion = 'center';\n }\n\n protected getDropRegionFromEvent(e: DragEvent): DropRegion | undefined {\n const layout = this.findLayout(e);\n if (!layout) {\n return undefined;\n }\n return this.getDropRegion(layout, e);\n }\n\n getDropRegion(element: HTMLElement, e: DragEvent): DropRegion | undefined {\n const { pageX, pageY } = e;\n const rect = element.getBoundingClientRect();\n const quarterWidth = rect.width / 4;\n const quarterHeight = rect.height / 4;\n if (pageX < rect.left + quarterWidth) {\n return 'west';\n }\n if (pageX > rect.right - quarterWidth) {\n return 'east';\n }\n if (pageY < rect.top + quarterHeight) {\n return 'north';\n }\n if (pageY > rect.bottom - quarterHeight) {\n return 'south';\n }\n const withingCenterX = (pageX >= rect.left + quarterWidth) && (pageX <= rect.right - quarterWidth);\n const withingCenterY = (pageY >= rect.top + quarterHeight) && (pageY <= rect.bottom - quarterHeight);\n if (withingCenterX && withingCenterY) {\n return 'center';\n }\n return undefined;\n }\n\n protected findLayout(e: Event): LayoutPanelElement | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.localName === this.localName) {\n return node as LayoutPanelElement;\n }\n }\n return undefined;\n }\n\n protected async _tabSelectHandler(e: Event): Promise<void> {\n if (!this.panel) {\n return;\n }\n const key = (e.currentTarget as HTMLElement).dataset.key as string;\n if (!key) {\n return;\n }\n if (this.panel.selected === key) {\n return;\n }\n this.panel.selected = key;\n this.panel.manager.changed();\n this.requestUpdate();\n await this.updateComplete;\n const child = this.querySelector(`[data-key=\"${key}\"]`);\n if (child) {\n child.dispatchEvent(new Event('resize'));\n }\n }\n\n /**\n * Closes a panel with right pointer configuration\n */\n protected _tabPointerDownHandler(e: PointerEvent): void {\n // the configuration of a middle button click which is \n // equal to 3 fingers click on a track pad.\n if (e.button === 1 && e.buttons === 4) {\n e.preventDefault();\n e.stopPropagation();\n const key = (e.target as HTMLElement).dataset.key as string;\n this.closeTab(key);\n }\n }\n\n protected _tabCloseHandler(e: Event): void {\n const icon = e.target as HTMLElement;\n const button = icon.parentElement as HTMLElement;\n const key = button.dataset.key as string;\n if (key) {\n e.preventDefault();\n e.stopPropagation();\n this.closeTab(key);\n }\n }\n\n @eventOptions({ passive: true })\n protected _tabTouchStartHandler(e: TouchEvent): void {\n if (e.targetTouches.length === 3) {\n e.preventDefault();\n e.stopPropagation();\n const key = (e.target as HTMLElement).dataset.key as string;\n this.closeTab(key);\n }\n }\n\n protected closeTab(key: string): void {\n const { panel } = this;\n if (!panel) {\n return;\n }\n const item = panel.items.find(i => i.key === key);\n if (!item) {\n return;\n }\n if (item.persistent && item.pinned) {\n return;\n }\n panel.removeItem(key);\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('closetab', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: key,\n }));\n }\n\n protected _tabKeydownHandler(e: KeyboardEvent): void {\n if (e.key === 'Enter') {\n this._tabSelectHandler(e);\n }\n }\n\n protected _tabDragStart(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || this.layoutId === undefined) {\n return;\n }\n \n dt.effectAllowed = 'copyMove';\n dt.dropEffect = 'move';\n const node = e.target as HTMLElement;\n dt.setData('text/kind', node.dataset.kind as string);\n dt.setData('text/key', node.dataset.key as string);\n dt.setData('text/source', this.localName);\n dt.setData('layout/id', String(this.layoutId));\n }\n\n protected _tabsDragEnterHandler(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n dt.effectAllowed = 'move';\n dt.dropEffect = 'move';\n }\n \n protected _tabsDragoverHandler(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n dt.effectAllowed = 'move';\n dt.dropEffect = 'move';\n }\n\n protected _tabsDrop(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e) || this.layoutId === undefined) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n const src = dt.getData('text/source');\n const key = dt.getData('text/key');\n const kind = dt.getData('text/kind');\n const lid = dt.getData('layout/id');\n const movingTab = src === this.localName;\n\n const overTab = this.findTab(e);\n const toIndex = overTab ? Number(overTab.dataset.index) : undefined;\n\n if (movingTab) {\n if (!lid) {\n return;\n }\n const srcPanel = Number(lid);\n if (Number.isNaN(srcPanel)) {\n return;\n }\n this.moveTab(srcPanel, this.layoutId, key, toIndex);\n } else {\n let dispatch = true;\n if (this.panel) {\n dispatch = this.panel.addItem({ key, kind, label: 'New tab' }, { index: toIndex });\n }\n if (dispatch) {\n this.dispatchEvent(new CustomEvent('datadrop', {\n detail: { kind, key, index: toIndex },\n composed: true,\n bubbles: true,\n cancelable: true,\n }));\n }\n this.requestUpdate();\n }\n }\n\n protected moveTab(fromLayout: number, toLayout: number, key: string, toIndex?: number): void {\n const { panel } = this;\n if (panel) {\n panel.manager.moveTab(fromLayout, toLayout, key, toIndex);\n }\n }\n\n protected findTab(e: Event): HTMLElement | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.classList.contains('layout-tab')) {\n return node as HTMLElement;\n }\n }\n return undefined;\n }\n\n override render(): TemplateResult {\n return html`\n ${this.dragRegionTemplate()}\n ${this.tabsTemplate()}\n <div class=\"content\">\n <slot></slot>\n </div>\n `;\n }\n\n protected dragRegionTemplate(): TemplateResult | string {\n const { inDrag, dragRegion } = this;\n if (!inDrag) {\n return '';\n }\n return html`\n <div class=\"drag-region ${dragRegion}\"></div>\n `;\n }\n\n protected tabsTemplate(): TemplateResult | string {\n const { panel } = this;\n if (!panel) {\n return '';\n }\n const items = panel.sortedItems();\n if (!items) {\n return '';\n }\n const size = items.length;\n return html`\n <div \n class=\"layout-tabs\" \n role=\"tablist\" \n @dragenter=\"${this._tabsDragEnterHandler}\" \n @dragover=\"${this._tabsDragoverHandler}\" \n @drop=\"${this._tabsDrop}\"\n >\n ${items.map((tab, i) => this.tabTemplate(tab, i + 1 === size, items[i + 1]?.key))}\n </div>\n `;\n }\n\n protected tabTemplate(item: ILayoutItem, last: boolean, nextKey?: string): TemplateResult {\n const { key, kind, label = '', index=0, icon, isDirty = false, parent } = item;\n const { panel } = this;\n const selected = !!panel && panel.selected === key;\n const nextSelected = !!nextKey && !!panel && panel.selected === nextKey;\n const closable = !item.persistent && !item.pinned;\n const classes = {\n 'layout-tab': true,\n 'is-dirty': isDirty,\n selected,\n surface1: selected,\n };\n let title = label;\n if (isDirty) {\n title = 'Unsaved changes';\n }\n\n const dividerHidden = last || selected || nextSelected;\n return html`\n <div \n data-key=\"${key}\" \n data-kind=\"${kind}\"\n data-index=\"${index}\"\n data-parent=\"${ifDefined(parent)}\"\n data-dirty=\"${isDirty}\"\n role=\"tab\"\n class=\"${classMap(classes)}\" \n draggable=\"true\"\n @dragstart=\"${this._tabDragStart}\"\n @click=\"${this._tabSelectHandler}\" \n @pointerdown=\"${this._tabPointerDownHandler}\"\n @touchstart=\"${this._tabTouchStartHandler}\"\n @keydown=\"${this._tabKeydownHandler}\"\n tabindex=\"0\"\n >\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"tab-favicon\"></ui-icon>` : ''}\n <span class=\"tab-label\" title=\"${title}\">${label}</span>\n ${closable ? html`<ui-icon icon=\"close\" class=\"close-icon\" @click=\"${this._tabCloseHandler}\"></ui-icon>` : ''}\n </div>\n <div class=\"tab-divider ${dividerHidden ? 'hidden' : ''}\"></div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"LayoutPanelElement.js","sourceRoot":"","sources":["../../../src/elements/layout/LayoutPanelElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { LitElement, html, TemplateResult, CSSResult, css } from 'lit';\nimport { property, state, eventOptions } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { classMap } from 'lit/directives/class-map.js';\n// eslint-disable-next-line import/no-cycle\nimport { LayoutPanel, DropRegion, ILayoutItem } from './LayoutManager.js';\nimport surfaceStyles from '../../styles/m3/surface.module.js';\nimport '../../define/ui/ui-icon.js';\n\nexport default class LayoutPanelElement extends LitElement {\n static override get styles(): CSSResult[] {\n return [surfaceStyles, css`\n :host {\n display: flex;\n position: relative;\n flex-direction: column;\n /* border: 1px red solid; */\n }\n\n .content {\n display: flex;\n flex: 1;\n }\n \n :host([constrain]) .content {\n overflow: hidden;\n }\n\n :host([layout=horizontal]) .content {\n flex-direction: row;\n }\n\n :host([layout=vertical]) .content {\n flex-direction: column;\n }\n\n :host ::slotted(*) {\n flex: 1;\n /* width: 100%;\n height: 100%; */\n }\n\n .drag-region {\n position: absolute;\n background-color: rgba(0,0,0,0.12);\n }\n\n .drag-region.center {\n top: 0;\n bottom: 0;\n left: 0;\n right:0;\n }\n\n .drag-region.west {\n top: 0;\n bottom: 0;\n left: 0;\n right: 50%;\n }\n\n .drag-region.east {\n top: 0;\n bottom: 0;\n left: 50%;\n right: 0;\n }\n\n .drag-region.north {\n top: 0;\n left: 0;\n right: 0;\n bottom: 50%;\n }\n\n .drag-region.south {\n top: 50%;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .layout-tabs {\n display: flex;\n align-items: center;\n background: var(--layout-tabs-background, var(--secondary-background-color));\n }\n\n .layout-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex: 1 1 200px;\n max-width: 200px;\n min-width: 40px;\n width: 200px;\n height: 100%;\n font-size: 0.94rem;\n padding: 0px 12px;\n border-radius: var(--md-sys-shape-corner-small-top);\n height: 40px; \n outline: none;\n justify-content: flex-start;\n text-transform: none;\n color: var(--md-sys-color-on-surface);\n\n font-family: var(--md-sys-typescale-body-medium-font-family-name);\n font-style: var(--md-sys-typescale-body-medium-font-family-style);\n font-weight: var(--md-sys-typescale-body-medium-font-weight);\n font-size: var(--md-sys-typescale-body-medium-font-size);\n letter-spacing: var(--md-sys-typescale-body-medium-tracking);\n line-height: var(--md-sys-typescale-body-medium-height);\n text-transform: var(--md-sys-typescale-body-medium-text-transform);\n text-decoration: var(--md-sys-typescale-body-medium-text-decoration);\n }\n\n .tab-label {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .is-dirty .tab-label {\n font-style: italic;\n }\n\n .is-dirty .tab-label::after {\n content: '*';\n user-select: none;\n }\n\n .layout-tab.selected {\n /* z-index: 2; */\n background: var(--layout-tab-select-background, var(--primary-background-color));\n }\n\n .layout-tab:not(.selected):hover::before {\n background-color: var(--md-sys-color-primary);\n opacity: var(--md-sys-state-hover-state-layer-opacity);\n position: absolute;\n inset: 0;\n content: '';\n border-radius: inherit;\n }\n\n .layout-tab:not(.selected):focus::before {\n background-color: var(--md-sys-color-primary);\n opacity: var(--md-sys-state-focus-state-layer-opacity);\n position: absolute;\n inset: 0;\n content: '';\n border-radius: inherit;\n }\n\n /* .layout-tab:focus {\n border-top-color: var(--primary-color);\n } */\n\n .tab-favicon {\n width: 16px;\n height: 16px;\n margin-right: 8px;\n }\n\n .close-icon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n }\n\n .tab-divider {\n width: 1px;\n min-width: 1px;\n height: 20px;\n background-color: var(--md-sys-color-outline-variant);\n }\n\n .tab-divider.hidden {\n background-color: transparent;\n }\n `];\n }\n\n /**\n * @attribute\n */\n @property({ type: String, reflect: true }) layout: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * @attribute\n */\n @property({ type: Number, reflect: true }) layoutId?: number;\n\n @property({ type: Array }) dragTypes?: string[];\n\n /**\n * Whether dragging is occurring over the element\n */\n @state() protected inDrag = false;\n\n /**\n * The region the drag is leaning to.\n */\n @state() protected dragRegion?: DropRegion = 'center';\n\n @property({ type: Object }) panel?: LayoutPanel;\n\n /**\n * When set it adds the `overflow` hidden on the container that holds the tab contents.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) constrain = false;\n\n constructor() {\n super();\n this._dragEnterHandler = this._dragEnterHandler.bind(this);\n this._dragOverHandler = this._dragOverHandler.bind(this);\n this._dropHandler = this._dropHandler.bind(this);\n this._dragleaveHandler = this._dragleaveHandler.bind(this);\n this._dragendHandler = this._dragendHandler.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('dragenter', this._dragEnterHandler);\n this.addEventListener('dragover', this._dragOverHandler);\n this.addEventListener('drop', this._dropHandler);\n document.body.addEventListener('dragleave', this._dragleaveHandler);\n document.body.addEventListener('dragend', this._dragendHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('dragenter', this._dragEnterHandler);\n this.removeEventListener('dragover', this._dragOverHandler);\n this.removeEventListener('drop', this._dropHandler);\n document.body.removeEventListener('dragleave', this._dragleaveHandler);\n document.body.removeEventListener('dragend', this._dragendHandler);\n }\n\n protected hasDropTypes(dt: DataTransfer): boolean {\n const { dragTypes } = this;\n if (!Array.isArray(dragTypes)) {\n return true;\n }\n const eventTypes = [...dt.types];\n const allowedTypes = dragTypes.map(i => i.toLowerCase());\n return !allowedTypes.some(type => !eventTypes.includes(type));\n }\n\n protected panelCanDrop(e: DragEvent): boolean {\n if (e.defaultPrevented) {\n return false;\n }\n if (e.dataTransfer && !this.hasDropTypes(e.dataTransfer)) {\n return false;\n }\n const { panel } = this;\n if (!panel) {\n return true;\n }\n return panel.canDrop();\n }\n\n protected _dragEnterHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n dataTransfer.dropEffect = 'copy';\n }\n\n protected _dragOverHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const region = this.getDropRegionFromEvent(e);\n if (!region) {\n this.inDrag = false;\n return;\n }\n dataTransfer.dropEffect = 'copy';\n this.inDrag = true;\n this.dragRegion = region;\n }\n\n protected _dropHandler(e: DragEvent): void {\n const { dataTransfer } = e;\n if (!dataTransfer || !this.panelCanDrop(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const kind = dataTransfer.getData('text/kind');\n const key = dataTransfer.getData('text/key');\n if (!kind || !key) {\n return;\n }\n this.inDrag = false;\n const { panel } = this;\n let dispatch = true;\n if (panel) {\n dispatch = panel.addItem({ key, kind, label: 'New tab' }, { region: this.dragRegion });\n }\n if (dispatch) {\n this.dispatchEvent(new CustomEvent('datadrop', {\n detail: { kind, key, region: this.dragRegion },\n composed: true,\n bubbles: true,\n cancelable: true,\n }));\n }\n this.requestUpdate();\n }\n\n protected _dragleaveHandler(e: DragEvent): void {\n const elm = this.findLayout(e);\n if (!elm || elm !== this) {\n this.inDrag = false;\n this.dragRegion = 'center';\n }\n }\n\n protected _dragendHandler(): void {\n this.inDrag = false;\n this.dragRegion = 'center';\n }\n\n protected getDropRegionFromEvent(e: DragEvent): DropRegion | undefined {\n const layout = this.findLayout(e);\n if (!layout) {\n return undefined;\n }\n return this.getDropRegion(layout, e);\n }\n\n getDropRegion(element: HTMLElement, e: DragEvent): DropRegion | undefined {\n const { pageX, pageY } = e;\n const rect = element.getBoundingClientRect();\n const quarterWidth = rect.width / 4;\n const quarterHeight = rect.height / 4;\n if (pageX < rect.left + quarterWidth) {\n return 'west';\n }\n if (pageX > rect.right - quarterWidth) {\n return 'east';\n }\n if (pageY < rect.top + quarterHeight) {\n return 'north';\n }\n if (pageY > rect.bottom - quarterHeight) {\n return 'south';\n }\n const withingCenterX = (pageX >= rect.left + quarterWidth) && (pageX <= rect.right - quarterWidth);\n const withingCenterY = (pageY >= rect.top + quarterHeight) && (pageY <= rect.bottom - quarterHeight);\n if (withingCenterX && withingCenterY) {\n return 'center';\n }\n return undefined;\n }\n\n protected findLayout(e: Event): LayoutPanelElement | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.localName === this.localName) {\n return node as LayoutPanelElement;\n }\n }\n return undefined;\n }\n\n protected async _tabSelectHandler(e: Event): Promise<void> {\n if (!this.panel) {\n return;\n }\n const key = (e.currentTarget as HTMLElement).dataset.key as string;\n if (!key) {\n return;\n }\n if (this.panel.selected === key) {\n return;\n }\n this.panel.selected = key;\n this.panel.manager.changed();\n this.requestUpdate();\n await this.updateComplete;\n const child = this.querySelector(`[data-key=\"${key}\"]`);\n if (child) {\n child.dispatchEvent(new Event('resize'));\n }\n }\n\n /**\n * Closes a panel with right pointer configuration\n */\n protected _tabPointerDownHandler(e: PointerEvent): void {\n // the configuration of a middle button click which is \n // equal to 3 fingers click on a track pad.\n if (e.button === 1 && e.buttons === 4) {\n e.preventDefault();\n e.stopPropagation();\n const key = (e.target as HTMLElement).dataset.key as string;\n this.closeTab(key);\n }\n }\n\n protected _tabCloseHandler(e: Event): void {\n const icon = e.target as HTMLElement;\n const button = icon.parentElement as HTMLElement;\n const key = button.dataset.key as string;\n if (key) {\n e.preventDefault();\n e.stopPropagation();\n this.closeTab(key);\n }\n }\n\n @eventOptions({ passive: true })\n protected _tabTouchStartHandler(e: TouchEvent): void {\n if (e.targetTouches.length === 3) {\n e.preventDefault();\n e.stopPropagation();\n const key = (e.target as HTMLElement).dataset.key as string;\n this.closeTab(key);\n }\n }\n\n protected closeTab(key: string): void {\n const { panel } = this;\n if (!panel) {\n return;\n }\n const item = panel.items.find(i => i.key === key);\n if (!item) {\n return;\n }\n if (item.persistent && item.pinned) {\n return;\n }\n panel.removeItem(key);\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('closetab', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: key,\n }));\n }\n\n protected _tabKeydownHandler(e: KeyboardEvent): void {\n if (e.key === 'Enter') {\n this._tabSelectHandler(e);\n }\n }\n\n protected _tabDragStart(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || this.layoutId === undefined) {\n return;\n }\n \n dt.effectAllowed = 'copyMove';\n dt.dropEffect = 'move';\n const node = e.target as HTMLElement;\n dt.setData('text/kind', node.dataset.kind as string);\n dt.setData('text/key', node.dataset.key as string);\n dt.setData('text/source', this.localName);\n dt.setData('layout/id', String(this.layoutId));\n }\n\n protected _tabsDragEnterHandler(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n dt.effectAllowed = 'move';\n dt.dropEffect = 'move';\n }\n \n protected _tabsDragoverHandler(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n dt.effectAllowed = 'move';\n dt.dropEffect = 'move';\n }\n\n protected _tabsDrop(e: DragEvent): void {\n const dt = e.dataTransfer;\n if (!dt || !this.panelCanDrop(e) || this.layoutId === undefined) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n const src = dt.getData('text/source');\n const key = dt.getData('text/key');\n const kind = dt.getData('text/kind');\n const lid = dt.getData('layout/id');\n const movingTab = src === this.localName;\n\n const overTab = this.findTab(e);\n const toIndex = overTab ? Number(overTab.dataset.index) : undefined;\n\n if (movingTab) {\n if (!lid) {\n return;\n }\n const srcPanel = Number(lid);\n if (Number.isNaN(srcPanel)) {\n return;\n }\n this.moveTab(srcPanel, this.layoutId, key, toIndex);\n } else {\n let dispatch = true;\n if (this.panel) {\n dispatch = this.panel.addItem({ key, kind, label: 'New tab' }, { index: toIndex });\n }\n if (dispatch) {\n this.dispatchEvent(new CustomEvent('datadrop', {\n detail: { kind, key, index: toIndex },\n composed: true,\n bubbles: true,\n cancelable: true,\n }));\n }\n this.requestUpdate();\n }\n }\n\n protected moveTab(fromLayout: number, toLayout: number, key: string, toIndex?: number): void {\n const { panel } = this;\n if (panel) {\n panel.manager.moveTab(fromLayout, toLayout, key, toIndex);\n }\n }\n\n protected findTab(e: Event): HTMLElement | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.classList.contains('layout-tab')) {\n return node as HTMLElement;\n }\n }\n return undefined;\n }\n\n override render(): TemplateResult {\n return html`\n ${this.dragRegionTemplate()}\n ${this.tabsTemplate()}\n <div class=\"content\">\n <slot></slot>\n </div>\n `;\n }\n\n protected dragRegionTemplate(): TemplateResult | string {\n const { inDrag, dragRegion } = this;\n if (!inDrag) {\n return '';\n }\n return html`\n <div class=\"drag-region ${dragRegion}\"></div>\n `;\n }\n\n protected tabsTemplate(): TemplateResult | string {\n const { panel } = this;\n if (!panel) {\n return '';\n }\n const items = panel.sortedItems();\n if (!items) {\n return '';\n }\n const size = items.length;\n return html`\n <div \n class=\"layout-tabs\" \n role=\"tablist\" \n @dragenter=\"${this._tabsDragEnterHandler}\" \n @dragover=\"${this._tabsDragoverHandler}\" \n @drop=\"${this._tabsDrop}\"\n >\n ${items.map((tab, i) => this.tabTemplate(tab, i + 1 === size, items[i + 1]?.key))}\n </div>\n `;\n }\n\n protected tabTemplate(item: ILayoutItem, last: boolean, nextKey?: string): TemplateResult {\n const { key, kind, label = '', index=0, icon, isDirty = false, parent } = item;\n const { panel } = this;\n const selected = !!panel && panel.selected === key;\n const nextSelected = !!nextKey && !!panel && panel.selected === nextKey;\n const closable = !item.persistent && !item.pinned;\n const classes = {\n 'layout-tab': true,\n 'is-dirty': isDirty,\n selected,\n surface1: selected,\n };\n let title = label;\n if (isDirty) {\n title = 'Unsaved changes';\n }\n\n const dividerHidden = last || selected || nextSelected;\n return html`\n <div \n data-key=\"${key}\" \n data-kind=\"${kind}\"\n data-index=\"${index}\"\n data-parent=\"${ifDefined(parent)}\"\n data-dirty=\"${isDirty}\"\n role=\"tab\"\n class=\"${classMap(classes)}\" \n draggable=\"true\"\n @dragstart=\"${this._tabDragStart}\"\n @click=\"${this._tabSelectHandler}\" \n @pointerdown=\"${this._tabPointerDownHandler}\"\n @touchstart=\"${this._tabTouchStartHandler}\"\n @keydown=\"${this._tabKeydownHandler}\"\n tabindex=\"0\"\n >\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"tab-favicon\"></ui-icon>` : ''}\n <span class=\"tab-label\" title=\"${title}\">${label}</span>\n ${closable ? html`<ui-icon icon=\"close\" class=\"close-icon\" @click=\"${this._tabCloseHandler}\"></ui-icon>` : ''}\n </div>\n <div class=\"tab-divider ${dividerHidden ? 'hidden' : ''}\"></div>\n `;\n }\n}\n"]}
@@ -1,16 +1,4 @@
1
1
  export class SplitItem {
2
- manager;
3
- kind = '';
4
- key = '';
5
- parent;
6
- label = '';
7
- pinned;
8
- index = 0;
9
- icon;
10
- persistent;
11
- loading;
12
- isDirty;
13
- value;
14
2
  /**
15
3
  * @param manager A reference to the manager.
16
4
  * @param id The id of the item in the layout system. This value is never serialized.
@@ -18,6 +6,10 @@ export class SplitItem {
18
6
  */
19
7
  constructor(manager, schema) {
20
8
  this.manager = manager;
9
+ this.kind = '';
10
+ this.key = '';
11
+ this.label = '';
12
+ this.index = 0;
21
13
  this.new(schema);
22
14
  }
23
15
  new(schema) {
@@ -1 +1 @@
1
- {"version":3,"file":"SplitItem.js","sourceRoot":"","sources":["../../../src/elements/layout/SplitItem.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { TemplateResult } from 'lit';\nimport { IconType } from '../../ui/icons/Icons.js';\nimport { SplitLayout } from './SplitLayout.js';\nimport { SplitPanel } from './SplitPanel.js';\n\nexport type ItemRenderCallback = (item: SplitItem, visible: boolean) => TemplateResult;\n\nexport interface ISplitItem {\n /**\n * The kind of opened item. This is to be used by the application\n * to recognize a kind of item to render. It is transparent to the layout system.\n */\n kind: string;\n /**\n * The key of the opened item. This is to be used by the application to identify \n * the rendered item. It is also used by the manager to identify the item.\n * It has to be unique key across the layout.\n * \n * Note, multiple panels can render the same item, however, they all share \n * the same item's state.\n */\n key: string;\n /**\n * Optional parent information that helps locating this object.\n * This is the item's parent, not related to a layout.\n */\n parent?: string;\n /**\n * The label to render in the layout tab.\n */\n label: string;\n /**\n * Whether the tab is pinned (cannot be closed or moved).\n */\n pinned?: boolean;\n /**\n * The tab index.\n */\n index?: number;\n /**\n * The icon defined in the internal library to render with the tab.\n */\n icon?: IconType;\n /**\n * A tab that is always present in the layout. The user can't close this tab.\n */\n persistent?: boolean;\n /**\n * A property to be used by the screen to indicate the property is being loaded\n * (from a data store, file, etc).\n */\n loading?: boolean;\n /**\n * Indicates the item has been changed and is out of sync with the data store.\n */\n isDirty?: boolean;\n\n /**\n * The layout value. Can be used to pass the object to render to the layout's render function.\n * This must be a serializable object as it will be passed to the `storeCallback`.\n * \n * This also can be used to temporary store unsaved changes to the object and sync the changes \n * on save action.\n */\n value?: unknown;\n}\n\nexport class SplitItem implements ISplitItem {\n kind = '';\n\n key = '';\n\n parent?: string;\n\n label = '';\n\n pinned?: boolean;\n\n index = 0;\n\n icon?: IconType;\n\n persistent?: boolean;\n\n loading?: boolean;\n\n isDirty?: boolean;\n\n value?: unknown;\n\n /**\n * @param manager A reference to the manager.\n * @param id The id of the item in the layout system. This value is never serialized.\n * @param schema A schema to restore the state of the panel.\n */\n constructor(public manager: SplitLayout, schema: ISplitItem) {\n this.new(schema);\n }\n\n new(schema: ISplitItem): void {\n this.kind = schema.kind;\n this.key = schema.key;\n this.label = schema.label;\n if (schema.parent) {\n this.parent = schema.parent;\n } else {\n this.parent = undefined;\n }\n if (schema.icon) {\n this.icon = schema.icon;\n } else {\n this.icon = undefined;\n }\n if (typeof schema.pinned === 'boolean') {\n this.pinned = schema.pinned;\n } else {\n this.pinned = undefined;\n }\n if (typeof schema.persistent === 'boolean') {\n this.persistent = schema.persistent;\n } else {\n this.persistent = undefined;\n }\n if (typeof schema.loading === 'boolean') {\n this.loading = schema.loading;\n } else {\n this.loading = undefined;\n }\n if (typeof schema.isDirty === 'boolean') {\n this.isDirty = schema.isDirty;\n } else {\n this.isDirty = undefined;\n }\n if (typeof schema.index === 'number') {\n this.index = schema.index;\n } else {\n this.index = 0;\n }\n this.value = schema.value;\n }\n\n toJSON(): ISplitItem {\n const result: ISplitItem = {\n key: this.key,\n kind: this.kind,\n label: this.label,\n };\n if (this.parent) {\n result.parent = this.parent;\n }\n if (this.icon) {\n result.icon = this.icon;\n }\n if (typeof this.pinned === 'boolean') {\n result.pinned = this.pinned;\n }\n if (typeof this.persistent === 'boolean') {\n result.persistent = this.persistent;\n }\n if (typeof this.loading === 'boolean') {\n result.loading = this.loading;\n }\n if (typeof this.isDirty === 'boolean') {\n result.isDirty = this.isDirty;\n }\n if (typeof this.index === 'number') {\n result.index = this.index;\n }\n if (this.value) {\n // try toJSON if any\n const typed = this.value as { toJSON: () => unknown };\n if (typeof typed.toJSON === 'function') {\n result.value = typed.toJSON();\n } else {\n result.value = this.value;\n }\n }\n return result;\n }\n\n /**\n * @returns The parent of the item. Returns undefined when the item was removed from layout.\n */\n getParent(): SplitPanel | undefined {\n return this.manager.getParent(this.key);\n }\n\n /**\n * Removes self from the layout\n */\n remove(): void {\n this.manager.removeItem(this.key);\n }\n\n /**\n * Sets the item active in the parent layout.\n */\n setSelected(): void {\n const parent = this.getParent();\n if (parent) {\n parent.selected = this.key;\n this.notifyChange();\n }\n }\n\n /**\n * Updates the label and triggers side effects like layout and view update.\n * \n * @param value The new value of the label. Empty values are ignored.\n * @param trigger Whether to trigger side effects (requesting a view update and notifying change)\n */\n setLabel(value: string, trigger = true): void {\n if (!value || this.label === value) {\n return;\n }\n this.label = value;\n if (trigger) {\n this.updateView();\n this.notifyChange();\n }\n }\n\n updateView(): void {\n const panel = this.getParent();\n panel?.updateView();\n }\n\n notifyChange(): void {\n this.manager.notifyChange();\n }\n}\n"]}
1
+ {"version":3,"file":"SplitItem.js","sourceRoot":"","sources":["../../../src/elements/layout/SplitItem.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { TemplateResult } from 'lit';\nimport { IconType } from '../../ui/icons/Icons.js';\nimport { SplitLayout } from './SplitLayout.js';\nimport { SplitPanel } from './SplitPanel.js';\n\nexport type ItemRenderCallback = (item: SplitItem, visible: boolean) => TemplateResult;\n\nexport interface ISplitItem {\n /**\n * The kind of opened item. This is to be used by the application\n * to recognize a kind of item to render. It is transparent to the layout system.\n */\n kind: string;\n /**\n * The key of the opened item. This is to be used by the application to identify \n * the rendered item. It is also used by the manager to identify the item.\n * It has to be unique key across the layout.\n * \n * Note, multiple panels can render the same item, however, they all share \n * the same item's state.\n */\n key: string;\n /**\n * Optional parent information that helps locating this object.\n * This is the item's parent, not related to a layout.\n */\n parent?: string;\n /**\n * The label to render in the layout tab.\n */\n label: string;\n /**\n * Whether the tab is pinned (cannot be closed or moved).\n */\n pinned?: boolean;\n /**\n * The tab index.\n */\n index?: number;\n /**\n * The icon defined in the internal library to render with the tab.\n */\n icon?: IconType;\n /**\n * A tab that is always present in the layout. The user can't close this tab.\n */\n persistent?: boolean;\n /**\n * A property to be used by the screen to indicate the property is being loaded\n * (from a data store, file, etc).\n */\n loading?: boolean;\n /**\n * Indicates the item has been changed and is out of sync with the data store.\n */\n isDirty?: boolean;\n\n /**\n * The layout value. Can be used to pass the object to render to the layout's render function.\n * This must be a serializable object as it will be passed to the `storeCallback`.\n * \n * This also can be used to temporary store unsaved changes to the object and sync the changes \n * on save action.\n */\n value?: unknown;\n}\n\nexport class SplitItem implements ISplitItem {\n kind = '';\n\n key = '';\n\n parent?: string;\n\n label = '';\n\n pinned?: boolean;\n\n index = 0;\n\n icon?: IconType;\n\n persistent?: boolean;\n\n loading?: boolean;\n\n isDirty?: boolean;\n\n value?: unknown;\n\n /**\n * @param manager A reference to the manager.\n * @param id The id of the item in the layout system. This value is never serialized.\n * @param schema A schema to restore the state of the panel.\n */\n constructor(public manager: SplitLayout, schema: ISplitItem) {\n this.new(schema);\n }\n\n new(schema: ISplitItem): void {\n this.kind = schema.kind;\n this.key = schema.key;\n this.label = schema.label;\n if (schema.parent) {\n this.parent = schema.parent;\n } else {\n this.parent = undefined;\n }\n if (schema.icon) {\n this.icon = schema.icon;\n } else {\n this.icon = undefined;\n }\n if (typeof schema.pinned === 'boolean') {\n this.pinned = schema.pinned;\n } else {\n this.pinned = undefined;\n }\n if (typeof schema.persistent === 'boolean') {\n this.persistent = schema.persistent;\n } else {\n this.persistent = undefined;\n }\n if (typeof schema.loading === 'boolean') {\n this.loading = schema.loading;\n } else {\n this.loading = undefined;\n }\n if (typeof schema.isDirty === 'boolean') {\n this.isDirty = schema.isDirty;\n } else {\n this.isDirty = undefined;\n }\n if (typeof schema.index === 'number') {\n this.index = schema.index;\n } else {\n this.index = 0;\n }\n this.value = schema.value;\n }\n\n toJSON(): ISplitItem {\n const result: ISplitItem = {\n key: this.key,\n kind: this.kind,\n label: this.label,\n };\n if (this.parent) {\n result.parent = this.parent;\n }\n if (this.icon) {\n result.icon = this.icon;\n }\n if (typeof this.pinned === 'boolean') {\n result.pinned = this.pinned;\n }\n if (typeof this.persistent === 'boolean') {\n result.persistent = this.persistent;\n }\n if (typeof this.loading === 'boolean') {\n result.loading = this.loading;\n }\n if (typeof this.isDirty === 'boolean') {\n result.isDirty = this.isDirty;\n }\n if (typeof this.index === 'number') {\n result.index = this.index;\n }\n if (this.value) {\n // try toJSON if any\n const typed = this.value as { toJSON: () => unknown };\n if (typeof typed.toJSON === 'function') {\n result.value = typed.toJSON();\n } else {\n result.value = this.value;\n }\n }\n return result;\n }\n\n /**\n * @returns The parent of the item. Returns undefined when the item was removed from layout.\n */\n getParent(): SplitPanel | undefined {\n return this.manager.getParent(this.key);\n }\n\n /**\n * Removes self from the layout\n */\n remove(): void {\n this.manager.removeItem(this.key);\n }\n\n /**\n * Sets the item active in the parent layout.\n */\n setSelected(): void {\n const parent = this.getParent();\n if (parent) {\n parent.selected = this.key;\n this.notifyChange();\n }\n }\n\n /**\n * Updates the label and triggers side effects like layout and view update.\n * \n * @param value The new value of the label. Empty values are ignored.\n * @param trigger Whether to trigger side effects (requesting a view update and notifying change)\n */\n setLabel(value: string, trigger = true): void {\n if (!value || this.label === value) {\n return;\n }\n this.label = value;\n if (trigger) {\n this.updateView();\n this.notifyChange();\n }\n }\n\n updateView(): void {\n const panel = this.getParent();\n panel?.updateView();\n }\n\n notifyChange(): void {\n this.manager.notifyChange();\n }\n}\n"]}
@@ -32,17 +32,6 @@ import { LayoutType, SplitDirection } from "./type.js";
32
32
  * @fires closetab - When a tab wa closed via a user interaction.
33
33
  */
34
34
  export class SplitLayout extends EventTarget {
35
- options;
36
- /**
37
- * The list of all definitions of panels and items.
38
- */
39
- definitions = new Map();
40
- /**
41
- * Holds an ordered list of panels in the layout.
42
- * Though, this interface is consistent with other panels, it can only keep panels, not items.
43
- */
44
- items = [];
45
- activeInternal;
46
35
  /**
47
36
  * The key of the panel that is marked as "active", that is,
48
37
  * the panel the user last interacted with.
@@ -89,22 +78,27 @@ export class SplitLayout extends EventTarget {
89
78
  }
90
79
  return undefined;
91
80
  }
92
- /**
93
- * Whether the manager is dirty, that is, a change ocurred
94
- * while storing the layout.
95
- */
96
- isDirty = false;
97
- /**
98
- * A flag that determines that the state is being stored in the store.
99
- */
100
- storing = false;
101
- /**
102
- * The value of the debouncer timeout.
103
- */
104
- debouncer;
105
81
  constructor(options = {}) {
106
82
  super();
107
83
  this.options = options;
84
+ /**
85
+ * The list of all definitions of panels and items.
86
+ */
87
+ this.definitions = new Map();
88
+ /**
89
+ * Holds an ordered list of panels in the layout.
90
+ * Though, this interface is consistent with other panels, it can only keep panels, not items.
91
+ */
92
+ this.items = [];
93
+ /**
94
+ * Whether the manager is dirty, that is, a change ocurred
95
+ * while storing the layout.
96
+ */
97
+ this.isDirty = false;
98
+ /**
99
+ * A flag that determines that the state is being stored in the store.
100
+ */
101
+ this.storing = false;
108
102
  this.handleFocusIn = this.handleFocusIn.bind(this);
109
103
  }
110
104
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SplitLayout.js","sourceRoot":"","sources":["../../../src/elements/layout/SplitLayout.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { TemplateResult } from \"lit\";\nimport { ISplitItem, SplitItem } from \"./SplitItem.js\";\nimport { ISplitPanel, SplitPanel } from \"./SplitPanel.js\";\nimport SplitView from \"./SplitView.js\";\nimport { IPanelObject, LayoutType, SplitCloseDirection, SplitDirection, SplitItemRenderCallback, SplitLayoutInit, SplitPanelAddOptions } from \"./type.js\";\n\ninterface LayoutObject {\n type: LayoutType;\n value: SplitItem | SplitPanel;\n}\n\ninterface SerializedLayoutObject {\n type: LayoutType;\n value: ISplitItem | ISplitPanel;\n}\n\nexport interface ISplitLayout {\n /**\n * The map of all definitions of panels and \n */\n definitions: SerializedLayoutObject[];\n\n /**\n * The ordered list of panel keys in the view.\n */\n items: string[];\n\n /**\n * The key of the active panel or item.\n * From here it can be deduced whether the active item is a panel or an item and what's the active panel.\n */\n active?: string;\n}\n\n/**\n * Split layout manager creates a view where the application can put \"items\" into\n * and render them inside \"panels\". The application can create as many panels as needed.\n * Panels can be layout vertically or horizontally.\n * \n * ## Basic usage\n * \n * ```javascript\n * const layout = new SplitLayout({\n * stateCallback: async (state: ISplitLayout): Promise<void> => { \n * localStorage.setItem('layout', JSON.stringify(state));\n * }\n * });\n * const restored = await readStoredState(); // a function that reads the state from the store\n * await layout.initialize(restored);\n * \n * const content = layout.render((itemToRender: SplitItem): TemplateResult => { return html`...` });\n * ```\n * \n * Each time the layout configuration change the optional `stateCallback` function \n * is called.\n * It's not mandatory to set this callback function but if you want the state to\n * persist you have to serialize the manager manually when needed.\n * Since the manage implement the `toJSON()` method it is safe to pass the instance of the manager\n * to a idb store or serialize with `JSON.stringify()`.\n * \n * @fires change - When the layout configuration change. This is the best time to perform DOM update.\n * @fires nameitem - When the layout requests to name an item. This usually happens then a code calls the `requestNameUpdate()` method after the item's name changed.\n * @fires closetab - When a tab wa closed via a user interaction.\n */\nexport class SplitLayout extends EventTarget {\n /**\n * The list of all definitions of panels and items.\n */\n definitions = new Map<string, LayoutObject>();\n\n /**\n * Holds an ordered list of panels in the layout.\n * Though, this interface is consistent with other panels, it can only keep panels, not items.\n */\n items: IPanelObject[] = [];\n\n private activeInternal?: string;\n\n /**\n * The key of the panel that is marked as \"active\", that is, \n * the panel the user last interacted with.\n */\n get active(): string | undefined {\n return this.activeInternal;\n }\n\n /**\n * Returns an object that is marked as active or undefined if none is marked as active.\n */\n get activeObject(): LayoutObject | undefined {\n const { activeInternal } = this;\n if (!activeInternal) {\n return undefined;\n }\n return this.definitions.get(activeInternal);\n }\n\n /**\n * An active panel that the user last interacted with.\n */\n get activePanel(): SplitPanel | undefined {\n const { activeObject } = this;\n if (!activeObject) {\n return undefined;\n }\n const { type, value } = activeObject;\n if (type === LayoutType.panel) {\n return value as SplitPanel;\n }\n const item = value as SplitItem;\n return this.getParent(item.key);\n }\n\n /**\n * An active panel item that the user last interacted with.\n */\n get activeItem(): SplitItem | undefined {\n const { activeObject } = this;\n if (!activeObject) {\n return undefined;\n }\n const { type, value } = activeObject;\n if (type === LayoutType.item) {\n return value as SplitItem;\n }\n return undefined;\n }\n\n /**\n * Whether the manager is dirty, that is, a change ocurred\n * while storing the layout.\n */\n protected isDirty = false;\n\n /**\n * A flag that determines that the state is being stored in the store.\n */\n protected storing = false;\n\n /**\n * The value of the debouncer timeout.\n */\n protected debouncer?: number;\n\n constructor(public options: SplitLayoutInit = {}) {\n super();\n this.handleFocusIn = this.handleFocusIn.bind(this);\n }\n\n /**\n * Initializes the split layout manager.\n * When passed the `state` parameter it restores the previously serialized state.\n * \n * @param state A state to restore. When not set an empty layout is rendered.\n */\n initialize(state?: ISplitLayout): void {\n if (state) {\n this.new(state);\n }\n document.body.addEventListener('focusin', this.handleFocusIn);\n }\n\n protected reset(): void {\n this.definitions = new Map();\n this.items = [];\n this.activeInternal = undefined;\n }\n\n /**\n * Clears the state and disposes of all resources.\n */\n dispose(): void {\n this.reset();\n document.body.removeEventListener('focusin', this.handleFocusIn);\n }\n\n /**\n * Overrides the current state.\n * Note, this operation does not call the `stateCallback()` callback.\n * @param state the state to set.\n */\n new(state: ISplitLayout): void {\n this.reset();\n const { definitions, items, active } = state;\n if (definitions) {\n // in the first step restore definitions\n definitions.forEach((value) => {\n if (value.type === LayoutType.item) {\n const instance = new SplitItem(this, value.value as ISplitItem);\n this.definitions.set(instance.key, {\n type: LayoutType.item,\n value: instance,\n });\n } else if (value.type === LayoutType.panel) {\n const instance = new SplitPanel(this, value.value as ISplitPanel);\n this.definitions.set(instance.key, {\n type: LayoutType.panel,\n value: instance,\n });\n }\n });\n }\n // now that definitions are set we can restore panels.\n if (Array.isArray(items)) {\n items.forEach((key) => {\n this.items.push({\n type: LayoutType.panel,\n key\n });\n });\n }\n this.activeInternal = active;\n }\n\n toJSON(): ISplitLayout {\n const result: ISplitLayout = {\n definitions: [],\n items: this.items.map(i => i.key),\n };\n if (this.activeInternal) {\n result.active = this.activeInternal;\n }\n this.definitions.forEach((value) => {\n const serialized = value.value.toJSON();\n result.definitions.push({\n type: value.type,\n value: serialized,\n });\n });\n return result;\n }\n\n /**\n * Schedules a layout store operation in a debouncer.\n * Once active all other request to store the layout are ignored until \n * the timeout is triggered.\n */\n scheduleStore(): void {\n if (typeof this.debouncer === 'number') {\n return;\n }\n this.debouncer = requestAnimationFrame(() => {\n delete this.debouncer;\n this.storeLayout();\n });\n }\n\n /**\n * This function is called automatically when the store configuration\n * change. There's no need to call it manually unless you want to trigger\n * the storing state flow. However, at that moment the state is already stored\n * (unless there was an error).\n */\n async storeLayout(): Promise<void> {\n const { stateCallback } = this.options;\n if (!stateCallback) {\n return;\n }\n if (this.storing) {\n this.isDirty = true;\n return;\n }\n this.storing = true;\n try {\n await stateCallback(this.toJSON());\n } finally {\n this.storing = false;\n }\n if (this.isDirty) {\n this.isDirty = false;\n await this.storeLayout();\n }\n }\n\n protected handleFocusIn(e: Event): void {\n const layout = this.findViewFromEvent(e);\n if (layout) {\n const key = layout.key as string;\n const def = this.definitions.get(key);\n if (def) {\n this.setActive(key);\n }\n }\n }\n\n /**\n * Sets an active panel or item.\n * @param panelOrItemKey the key of the panel or item that is active.\n */\n setActive(panelOrItemKey: string): void {\n this.activeInternal = panelOrItemKey;\n }\n\n protected findViewFromEvent(e: Event): SplitView | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.localName === 'split-view') {\n return node as SplitView;\n }\n }\n return undefined;\n }\n\n /**\n * @param panelKey The panel key to search for the view for.\n * @returns The `split-view` element in the document\n */\n findView(panelKey: string): SplitView | undefined {\n const layout = document.querySelector(`split-view[key=\"${panelKey}\"]`) as SplitView | null;\n return layout || undefined;\n }\n\n /**\n * Finds a parent for an item.\n * @param panelKey The key of the item (panel or panel's item) to find a parent for.\n * @returns The parent panel or `undefined` when the item was removed or the panel has no parents.\n */\n getParent(panelKey: string): SplitPanel | undefined {\n for (const { type, value } of this.definitions.values()) {\n if (type !== LayoutType.panel) {\n continue;\n }\n const panel = value as SplitPanel;\n const result = panel.items.some(i => i.key === panelKey);\n if (result) {\n return panel;\n }\n }\n return undefined;\n }\n\n /**\n * Finds a panel by id.\n * \n * @param panelKey The id of the panel.\n * @returns The panel if found\n */\n findPanel(panelKey: string): SplitPanel | undefined {\n const result = this.definitions.get(panelKey);\n if (!result) {\n return undefined;\n }\n if (result.type !== LayoutType.panel) {\n return undefined;\n }\n return result.value as SplitPanel;\n }\n\n /**\n * Finds a panel item by id.\n * \n * @param itemKey The id of the panel item.\n * @returns The item if found\n */\n findItem(itemKey: string): SplitItem | undefined {\n const result = this.definitions.get(itemKey);\n if (!result) {\n return undefined;\n }\n if (result.type !== LayoutType.item) {\n return undefined;\n }\n return result.value as SplitItem;\n }\n\n /**\n * Informs the screen that something has changed\n */\n notifyChange(): void {\n this.dispatchEvent(new Event('change'));\n this.scheduleStore();\n }\n\n /**\n * Dispatches the `nameitem` event.\n * The detail object has the item to be added to the items.\n * The event handler can manipulate properties of the item, except for the index which will be set by the manager.\n * \n * Note, use the `requestNameUpdate()` when requesting a name update. The other method includes side\n * effects like updating the view.\n * \n * @param item The item to notify.\n */\n dispatchNameItem(item: SplitItem): void {\n this.dispatchEvent(new CustomEvent('nameitem', {\n detail: item,\n }));\n }\n\n /**\n * Do not call this method from the outside of the layout manager logic.\n * It is a way to communicate a tab was closed.\n */\n notifyTabClose(itemKey: string): void {\n this.dispatchEvent(new CustomEvent('closetab', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: itemKey,\n }));\n }\n\n /**\n * Requests an update on the view element.\n * \n * @param panelKey The id of the panel. When not set it uses the active panel\n */\n updateView(panelKey?: string): void {\n const panel = panelKey ? this.findPanel(panelKey) : this.activePanel;\n if (!panel) {\n return;\n }\n panel.updateView();\n }\n\n /**\n * Requests to dispatch the `nameitem` event so the application can update the name of the tab.\n * \n * @param itemKey The key of the item.\n */\n requestNameUpdate(itemKey: string): void {\n const item = this.findItem(itemKey);\n if (!item) {\n return;\n }\n const before = item.label;\n this.dispatchNameItem(item);\n if (before !== item.label) {\n const panel = item.getParent();\n if (panel) {\n this.updateView(panel.key);\n }\n }\n }\n\n /**\n * Dispatches the `nameitem` event so the application \n * can update the name of an item that has a specific `parent`.\n * \n * @param parentValue The key of the `parent` property to look for.\n */\n requestNameUpdateByParent(parentValue: string): void {\n const updatePanels = new Set<SplitPanel>();\n for (const item of this.parentItemsIterator(parentValue)) {\n const before = item.label;\n this.dispatchNameItem(item);\n if (before !== item.label) {\n const panel = item.getParent() as SplitPanel;\n updatePanels.add(panel);\n }\n }\n\n for (const panel of updatePanels) {\n this.updateView(panel.key);\n }\n this.notifyChange();\n }\n\n /**\n * A shortcut to rename an item.\n * @param itemKey The key of the item to rename\n * @param label The label to set. It won't trigger side effects if the label is the same.\n */\n setItemLabel(itemKey: string, label: string): void {\n const item = this.findItem(itemKey);\n if (!item) {\n return;\n }\n item.setLabel(label);\n }\n\n addPanel(opts: SplitPanelAddOptions = {}): SplitPanel {\n const { layout = SplitDirection.horizontal, parent } = opts;\n let parentInstance: SplitPanel | SplitLayout;\n if (parent) {\n parentInstance = this.findPanel(parent) as SplitPanel;\n if (!parentInstance) {\n throw new Error(`Parent panel not found.`);\n }\n if (parentInstance.hasItems) {\n throw new Error(`Unable to create panel in a panel that has items.`);\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n parentInstance = this;\n }\n const panel = SplitPanel.fromLayout(this, layout);\n this.definitions.set(panel.key, {\n type: LayoutType.panel,\n value: panel,\n });\n parentInstance.items.push({\n key: panel.key,\n type: LayoutType.panel,\n });\n return panel;\n }\n\n /**\n * Adds an item to the active panel.\n * \n * To add an item to a specific panel find a reference to \n * the panel instance and call `addItem()` there.\n * \n * @param item The item to add.\n */\n addItem(item: ISplitItem): SplitItem {\n let panel: SplitPanel | undefined;\n const { activePanel } = this;\n // try the active panel\n if (activePanel) {\n panel = activePanel;\n } else {\n // try any panel that has no panels in it.\n for (const p of this.panelIterator()) {\n if (!p.hasPanels) {\n panel = p;\n break;\n }\n }\n }\n // finally add a new panel.\n if (!panel) {\n panel = this.addPanel();\n }\n return panel.addItem(item);\n }\n\n /**\n * Removes an item from layout.\n * @param key The key of the item to remove.\n */\n removeItem(key: string): void {\n const item = this.findItem(key);\n if (!item) {\n return;\n }\n const panel = item.getParent();\n if (panel) {\n panel.removeItem(key);\n }\n }\n\n /**\n * Removes other items relative to the `key` item.\n * @param key The key of the item to perform a relative operation from.\n * @param dir The direction to which close other items. Default to both directions leaving only the `key` item\n */\n removeRelative(key: string, dir?: SplitCloseDirection): void {\n const item = this.findItem(key);\n if (!item) {\n return;\n }\n const panel = item.getParent();\n if (panel) {\n panel.removeRelative(key, dir);\n }\n }\n\n /**\n * Moves a tab between panels or inside a panel\n * \n * @param fromPanelKey The id of the source panel of the item\n * @param toPanelKey The id of the target panel of the item\n * @param itemKey The key of the item\n * @param toIndex The index to which add the item. Default as the last.\n */\n moveItem(fromPanelKey: string, toPanelKey: string, itemKey: string, toIndex?: number): void {\n const singlePanel = fromPanelKey === toPanelKey;\n const from = this.findPanel(fromPanelKey);\n if (!from) {\n throw new Error(`Source layout panel not found.`);\n }\n if (singlePanel) {\n from.moveItem(itemKey, toIndex);\n } else {\n const to = this.findPanel(toPanelKey);\n if (!to) {\n throw new Error(`Target layout panel not found.`);\n }\n const removed = from.removeItem(itemKey);\n if (!removed) {\n throw new Error(`Item not found.`);\n }\n to.addItem(removed, { index: toIndex });\n }\n this.notifyChange();\n }\n\n /**\n * Iterates over panels from the root. \n * This iterates the panels structure in order defined in the `items` array on \n * each panel.\n * \n * @param parentPanel The parent SplitLayout to start the iteration from.\n */\n * panelIterator(parentPanel?: SplitPanel): Generator<SplitPanel> {\n const root = parentPanel || this;\n const { items } = root;\n for (const info of items) {\n if (info.type === LayoutType.panel) {\n const panel = this.findPanel(info.key);\n if (panel) {\n yield panel;\n for (const result of this.panelIterator(panel)) {\n yield result;\n }\n }\n }\n }\n }\n\n /**\n * Iterates over items that have specific `parent` property set.\n * \n * This is useful to close multiple object that belong to a parent.\n * \n * @param key The key of the `parent` property of a `SplitItem` to include in the iteration\n * @param parentPanel The `SplitPanel` to start the iteration from.\n */\n * parentItemsIterator(key: string, parentPanel?: SplitPanel): Generator<SplitItem> {\n const root = parentPanel || this;\n const { items } = root;\n for (const info of items) {\n const def = this.definitions.get(info.key);\n if (!def) {\n continue;\n }\n if (def.type === LayoutType.item && (def.value as SplitItem).parent === key) {\n yield def.value as SplitItem;\n }\n if (def.type === LayoutType.panel) {\n for (const result of this.parentItemsIterator(key, def.value as SplitPanel)) {\n yield result;\n }\n }\n }\n }\n\n /**\n * Finds all items in all panels that have specified parent.\n * @param parentValue The key of the parent to search for.\n */\n removeByParent(parentValue: string): void {\n for (const item of this.parentItemsIterator(parentValue)) {\n this.removeItem(item.key);\n }\n }\n\n /**\n * Checks whether the item with the given key is already managed by the manager.\n * @param itemKey The key of the item to check\n * @returns true if the item is in the definitions.\n */\n hasItem(itemKey: string): boolean {\n const def = this.definitions.get(itemKey);\n if (!def) {\n return false;\n }\n return def.type === LayoutType.item;\n }\n\n /**\n * Selects an item in a panel.\n * \n * When the parent is give then it tries to select the item on that panel.\n * Otherwise it checks whether the item is in the current panel and if so it selects it.\n * Otherwise, it selects the item on a first panel the item is in.\n * \n * @param itemKey The key of the item to set selected in the view.\n * @param panelKey The optional panel key. When not set it finds the first panel the item is on.\n */\n selectItem(itemKey: string, panelKey?: string): void {\n const { activePanel } = this;\n let panel: SplitPanel | undefined;\n if (panelKey) {\n // specified panel\n panel = this.findPanel(panelKey);\n } else if (activePanel?.hasItem(itemKey)) {\n // try the current active panel\n panel = activePanel;\n } else {\n // any panel that has the item\n panel = this.getParent(itemKey);\n }\n if (!panel) {\n return;\n }\n panel.selected = itemKey;\n this.updateView(panel.key);\n this.notifyChange();\n }\n\n /**\n * Checks whether the manager has at least one panel that has items.\n * \n * This is useful to render the empty state when no items are added.\n */\n isEmpty(): boolean {\n for (const panel of this.panelIterator()) {\n if (panel.hasItems) {\n return false;\n }\n }\n return true;\n }\n\n render(itemCallback: SplitItemRenderCallback): TemplateResult[] {\n const result: TemplateResult[] = [];\n const { items } = this;\n for (const info of items) {\n const panel = this.findPanel(info.key);\n const content = panel?.render(itemCallback);\n if (content) {\n result.push(content);\n }\n }\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"SplitLayout.js","sourceRoot":"","sources":["../../../src/elements/layout/SplitLayout.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { TemplateResult } from \"lit\";\nimport { ISplitItem, SplitItem } from \"./SplitItem.js\";\nimport { ISplitPanel, SplitPanel } from \"./SplitPanel.js\";\nimport SplitView from \"./SplitView.js\";\nimport { IPanelObject, LayoutType, SplitCloseDirection, SplitDirection, SplitItemRenderCallback, SplitLayoutInit, SplitPanelAddOptions } from \"./type.js\";\n\ninterface LayoutObject {\n type: LayoutType;\n value: SplitItem | SplitPanel;\n}\n\ninterface SerializedLayoutObject {\n type: LayoutType;\n value: ISplitItem | ISplitPanel;\n}\n\nexport interface ISplitLayout {\n /**\n * The map of all definitions of panels and \n */\n definitions: SerializedLayoutObject[];\n\n /**\n * The ordered list of panel keys in the view.\n */\n items: string[];\n\n /**\n * The key of the active panel or item.\n * From here it can be deduced whether the active item is a panel or an item and what's the active panel.\n */\n active?: string;\n}\n\n/**\n * Split layout manager creates a view where the application can put \"items\" into\n * and render them inside \"panels\". The application can create as many panels as needed.\n * Panels can be layout vertically or horizontally.\n * \n * ## Basic usage\n * \n * ```javascript\n * const layout = new SplitLayout({\n * stateCallback: async (state: ISplitLayout): Promise<void> => { \n * localStorage.setItem('layout', JSON.stringify(state));\n * }\n * });\n * const restored = await readStoredState(); // a function that reads the state from the store\n * await layout.initialize(restored);\n * \n * const content = layout.render((itemToRender: SplitItem): TemplateResult => { return html`...` });\n * ```\n * \n * Each time the layout configuration change the optional `stateCallback` function \n * is called.\n * It's not mandatory to set this callback function but if you want the state to\n * persist you have to serialize the manager manually when needed.\n * Since the manage implement the `toJSON()` method it is safe to pass the instance of the manager\n * to a idb store or serialize with `JSON.stringify()`.\n * \n * @fires change - When the layout configuration change. This is the best time to perform DOM update.\n * @fires nameitem - When the layout requests to name an item. This usually happens then a code calls the `requestNameUpdate()` method after the item's name changed.\n * @fires closetab - When a tab wa closed via a user interaction.\n */\nexport class SplitLayout extends EventTarget {\n /**\n * The list of all definitions of panels and items.\n */\n definitions = new Map<string, LayoutObject>();\n\n /**\n * Holds an ordered list of panels in the layout.\n * Though, this interface is consistent with other panels, it can only keep panels, not items.\n */\n items: IPanelObject[] = [];\n\n private activeInternal?: string;\n\n /**\n * The key of the panel that is marked as \"active\", that is, \n * the panel the user last interacted with.\n */\n get active(): string | undefined {\n return this.activeInternal;\n }\n\n /**\n * Returns an object that is marked as active or undefined if none is marked as active.\n */\n get activeObject(): LayoutObject | undefined {\n const { activeInternal } = this;\n if (!activeInternal) {\n return undefined;\n }\n return this.definitions.get(activeInternal);\n }\n\n /**\n * An active panel that the user last interacted with.\n */\n get activePanel(): SplitPanel | undefined {\n const { activeObject } = this;\n if (!activeObject) {\n return undefined;\n }\n const { type, value } = activeObject;\n if (type === LayoutType.panel) {\n return value as SplitPanel;\n }\n const item = value as SplitItem;\n return this.getParent(item.key);\n }\n\n /**\n * An active panel item that the user last interacted with.\n */\n get activeItem(): SplitItem | undefined {\n const { activeObject } = this;\n if (!activeObject) {\n return undefined;\n }\n const { type, value } = activeObject;\n if (type === LayoutType.item) {\n return value as SplitItem;\n }\n return undefined;\n }\n\n /**\n * Whether the manager is dirty, that is, a change ocurred\n * while storing the layout.\n */\n protected isDirty = false;\n\n /**\n * A flag that determines that the state is being stored in the store.\n */\n protected storing = false;\n\n /**\n * The value of the debouncer timeout.\n */\n protected debouncer?: number;\n\n constructor(public options: SplitLayoutInit = {}) {\n super();\n this.handleFocusIn = this.handleFocusIn.bind(this);\n }\n\n /**\n * Initializes the split layout manager.\n * When passed the `state` parameter it restores the previously serialized state.\n * \n * @param state A state to restore. When not set an empty layout is rendered.\n */\n initialize(state?: ISplitLayout): void {\n if (state) {\n this.new(state);\n }\n document.body.addEventListener('focusin', this.handleFocusIn);\n }\n\n protected reset(): void {\n this.definitions = new Map();\n this.items = [];\n this.activeInternal = undefined;\n }\n\n /**\n * Clears the state and disposes of all resources.\n */\n dispose(): void {\n this.reset();\n document.body.removeEventListener('focusin', this.handleFocusIn);\n }\n\n /**\n * Overrides the current state.\n * Note, this operation does not call the `stateCallback()` callback.\n * @param state the state to set.\n */\n new(state: ISplitLayout): void {\n this.reset();\n const { definitions, items, active } = state;\n if (definitions) {\n // in the first step restore definitions\n definitions.forEach((value) => {\n if (value.type === LayoutType.item) {\n const instance = new SplitItem(this, value.value as ISplitItem);\n this.definitions.set(instance.key, {\n type: LayoutType.item,\n value: instance,\n });\n } else if (value.type === LayoutType.panel) {\n const instance = new SplitPanel(this, value.value as ISplitPanel);\n this.definitions.set(instance.key, {\n type: LayoutType.panel,\n value: instance,\n });\n }\n });\n }\n // now that definitions are set we can restore panels.\n if (Array.isArray(items)) {\n items.forEach((key) => {\n this.items.push({\n type: LayoutType.panel,\n key\n });\n });\n }\n this.activeInternal = active;\n }\n\n toJSON(): ISplitLayout {\n const result: ISplitLayout = {\n definitions: [],\n items: this.items.map(i => i.key),\n };\n if (this.activeInternal) {\n result.active = this.activeInternal;\n }\n this.definitions.forEach((value) => {\n const serialized = value.value.toJSON();\n result.definitions.push({\n type: value.type,\n value: serialized,\n });\n });\n return result;\n }\n\n /**\n * Schedules a layout store operation in a debouncer.\n * Once active all other request to store the layout are ignored until \n * the timeout is triggered.\n */\n scheduleStore(): void {\n if (typeof this.debouncer === 'number') {\n return;\n }\n this.debouncer = requestAnimationFrame(() => {\n delete this.debouncer;\n this.storeLayout();\n });\n }\n\n /**\n * This function is called automatically when the store configuration\n * change. There's no need to call it manually unless you want to trigger\n * the storing state flow. However, at that moment the state is already stored\n * (unless there was an error).\n */\n async storeLayout(): Promise<void> {\n const { stateCallback } = this.options;\n if (!stateCallback) {\n return;\n }\n if (this.storing) {\n this.isDirty = true;\n return;\n }\n this.storing = true;\n try {\n await stateCallback(this.toJSON());\n } finally {\n this.storing = false;\n }\n if (this.isDirty) {\n this.isDirty = false;\n await this.storeLayout();\n }\n }\n\n protected handleFocusIn(e: Event): void {\n const layout = this.findViewFromEvent(e);\n if (layout) {\n const key = layout.key as string;\n const def = this.definitions.get(key);\n if (def) {\n this.setActive(key);\n }\n }\n }\n\n /**\n * Sets an active panel or item.\n * @param panelOrItemKey the key of the panel or item that is active.\n */\n setActive(panelOrItemKey: string): void {\n this.activeInternal = panelOrItemKey;\n }\n\n protected findViewFromEvent(e: Event): SplitView | undefined {\n const path = e.composedPath();\n while (path.length) {\n const node = path.shift() as Element;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n if (node.localName === 'split-view') {\n return node as SplitView;\n }\n }\n return undefined;\n }\n\n /**\n * @param panelKey The panel key to search for the view for.\n * @returns The `split-view` element in the document\n */\n findView(panelKey: string): SplitView | undefined {\n const layout = document.querySelector(`split-view[key=\"${panelKey}\"]`) as SplitView | null;\n return layout || undefined;\n }\n\n /**\n * Finds a parent for an item.\n * @param panelKey The key of the item (panel or panel's item) to find a parent for.\n * @returns The parent panel or `undefined` when the item was removed or the panel has no parents.\n */\n getParent(panelKey: string): SplitPanel | undefined {\n for (const { type, value } of this.definitions.values()) {\n if (type !== LayoutType.panel) {\n continue;\n }\n const panel = value as SplitPanel;\n const result = panel.items.some(i => i.key === panelKey);\n if (result) {\n return panel;\n }\n }\n return undefined;\n }\n\n /**\n * Finds a panel by id.\n * \n * @param panelKey The id of the panel.\n * @returns The panel if found\n */\n findPanel(panelKey: string): SplitPanel | undefined {\n const result = this.definitions.get(panelKey);\n if (!result) {\n return undefined;\n }\n if (result.type !== LayoutType.panel) {\n return undefined;\n }\n return result.value as SplitPanel;\n }\n\n /**\n * Finds a panel item by id.\n * \n * @param itemKey The id of the panel item.\n * @returns The item if found\n */\n findItem(itemKey: string): SplitItem | undefined {\n const result = this.definitions.get(itemKey);\n if (!result) {\n return undefined;\n }\n if (result.type !== LayoutType.item) {\n return undefined;\n }\n return result.value as SplitItem;\n }\n\n /**\n * Informs the screen that something has changed\n */\n notifyChange(): void {\n this.dispatchEvent(new Event('change'));\n this.scheduleStore();\n }\n\n /**\n * Dispatches the `nameitem` event.\n * The detail object has the item to be added to the items.\n * The event handler can manipulate properties of the item, except for the index which will be set by the manager.\n * \n * Note, use the `requestNameUpdate()` when requesting a name update. The other method includes side\n * effects like updating the view.\n * \n * @param item The item to notify.\n */\n dispatchNameItem(item: SplitItem): void {\n this.dispatchEvent(new CustomEvent('nameitem', {\n detail: item,\n }));\n }\n\n /**\n * Do not call this method from the outside of the layout manager logic.\n * It is a way to communicate a tab was closed.\n */\n notifyTabClose(itemKey: string): void {\n this.dispatchEvent(new CustomEvent('closetab', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: itemKey,\n }));\n }\n\n /**\n * Requests an update on the view element.\n * \n * @param panelKey The id of the panel. When not set it uses the active panel\n */\n updateView(panelKey?: string): void {\n const panel = panelKey ? this.findPanel(panelKey) : this.activePanel;\n if (!panel) {\n return;\n }\n panel.updateView();\n }\n\n /**\n * Requests to dispatch the `nameitem` event so the application can update the name of the tab.\n * \n * @param itemKey The key of the item.\n */\n requestNameUpdate(itemKey: string): void {\n const item = this.findItem(itemKey);\n if (!item) {\n return;\n }\n const before = item.label;\n this.dispatchNameItem(item);\n if (before !== item.label) {\n const panel = item.getParent();\n if (panel) {\n this.updateView(panel.key);\n }\n }\n }\n\n /**\n * Dispatches the `nameitem` event so the application \n * can update the name of an item that has a specific `parent`.\n * \n * @param parentValue The key of the `parent` property to look for.\n */\n requestNameUpdateByParent(parentValue: string): void {\n const updatePanels = new Set<SplitPanel>();\n for (const item of this.parentItemsIterator(parentValue)) {\n const before = item.label;\n this.dispatchNameItem(item);\n if (before !== item.label) {\n const panel = item.getParent() as SplitPanel;\n updatePanels.add(panel);\n }\n }\n\n for (const panel of updatePanels) {\n this.updateView(panel.key);\n }\n this.notifyChange();\n }\n\n /**\n * A shortcut to rename an item.\n * @param itemKey The key of the item to rename\n * @param label The label to set. It won't trigger side effects if the label is the same.\n */\n setItemLabel(itemKey: string, label: string): void {\n const item = this.findItem(itemKey);\n if (!item) {\n return;\n }\n item.setLabel(label);\n }\n\n addPanel(opts: SplitPanelAddOptions = {}): SplitPanel {\n const { layout = SplitDirection.horizontal, parent } = opts;\n let parentInstance: SplitPanel | SplitLayout;\n if (parent) {\n parentInstance = this.findPanel(parent) as SplitPanel;\n if (!parentInstance) {\n throw new Error(`Parent panel not found.`);\n }\n if (parentInstance.hasItems) {\n throw new Error(`Unable to create panel in a panel that has items.`);\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n parentInstance = this;\n }\n const panel = SplitPanel.fromLayout(this, layout);\n this.definitions.set(panel.key, {\n type: LayoutType.panel,\n value: panel,\n });\n parentInstance.items.push({\n key: panel.key,\n type: LayoutType.panel,\n });\n return panel;\n }\n\n /**\n * Adds an item to the active panel.\n * \n * To add an item to a specific panel find a reference to \n * the panel instance and call `addItem()` there.\n * \n * @param item The item to add.\n */\n addItem(item: ISplitItem): SplitItem {\n let panel: SplitPanel | undefined;\n const { activePanel } = this;\n // try the active panel\n if (activePanel) {\n panel = activePanel;\n } else {\n // try any panel that has no panels in it.\n for (const p of this.panelIterator()) {\n if (!p.hasPanels) {\n panel = p;\n break;\n }\n }\n }\n // finally add a new panel.\n if (!panel) {\n panel = this.addPanel();\n }\n return panel.addItem(item);\n }\n\n /**\n * Removes an item from layout.\n * @param key The key of the item to remove.\n */\n removeItem(key: string): void {\n const item = this.findItem(key);\n if (!item) {\n return;\n }\n const panel = item.getParent();\n if (panel) {\n panel.removeItem(key);\n }\n }\n\n /**\n * Removes other items relative to the `key` item.\n * @param key The key of the item to perform a relative operation from.\n * @param dir The direction to which close other items. Default to both directions leaving only the `key` item\n */\n removeRelative(key: string, dir?: SplitCloseDirection): void {\n const item = this.findItem(key);\n if (!item) {\n return;\n }\n const panel = item.getParent();\n if (panel) {\n panel.removeRelative(key, dir);\n }\n }\n\n /**\n * Moves a tab between panels or inside a panel\n * \n * @param fromPanelKey The id of the source panel of the item\n * @param toPanelKey The id of the target panel of the item\n * @param itemKey The key of the item\n * @param toIndex The index to which add the item. Default as the last.\n */\n moveItem(fromPanelKey: string, toPanelKey: string, itemKey: string, toIndex?: number): void {\n const singlePanel = fromPanelKey === toPanelKey;\n const from = this.findPanel(fromPanelKey);\n if (!from) {\n throw new Error(`Source layout panel not found.`);\n }\n if (singlePanel) {\n from.moveItem(itemKey, toIndex);\n } else {\n const to = this.findPanel(toPanelKey);\n if (!to) {\n throw new Error(`Target layout panel not found.`);\n }\n const removed = from.removeItem(itemKey);\n if (!removed) {\n throw new Error(`Item not found.`);\n }\n to.addItem(removed, { index: toIndex });\n }\n this.notifyChange();\n }\n\n /**\n * Iterates over panels from the root. \n * This iterates the panels structure in order defined in the `items` array on \n * each panel.\n * \n * @param parentPanel The parent SplitLayout to start the iteration from.\n */\n * panelIterator(parentPanel?: SplitPanel): Generator<SplitPanel> {\n const root = parentPanel || this;\n const { items } = root;\n for (const info of items) {\n if (info.type === LayoutType.panel) {\n const panel = this.findPanel(info.key);\n if (panel) {\n yield panel;\n for (const result of this.panelIterator(panel)) {\n yield result;\n }\n }\n }\n }\n }\n\n /**\n * Iterates over items that have specific `parent` property set.\n * \n * This is useful to close multiple object that belong to a parent.\n * \n * @param key The key of the `parent` property of a `SplitItem` to include in the iteration\n * @param parentPanel The `SplitPanel` to start the iteration from.\n */\n * parentItemsIterator(key: string, parentPanel?: SplitPanel): Generator<SplitItem> {\n const root = parentPanel || this;\n const { items } = root;\n for (const info of items) {\n const def = this.definitions.get(info.key);\n if (!def) {\n continue;\n }\n if (def.type === LayoutType.item && (def.value as SplitItem).parent === key) {\n yield def.value as SplitItem;\n }\n if (def.type === LayoutType.panel) {\n for (const result of this.parentItemsIterator(key, def.value as SplitPanel)) {\n yield result;\n }\n }\n }\n }\n\n /**\n * Finds all items in all panels that have specified parent.\n * @param parentValue The key of the parent to search for.\n */\n removeByParent(parentValue: string): void {\n for (const item of this.parentItemsIterator(parentValue)) {\n this.removeItem(item.key);\n }\n }\n\n /**\n * Checks whether the item with the given key is already managed by the manager.\n * @param itemKey The key of the item to check\n * @returns true if the item is in the definitions.\n */\n hasItem(itemKey: string): boolean {\n const def = this.definitions.get(itemKey);\n if (!def) {\n return false;\n }\n return def.type === LayoutType.item;\n }\n\n /**\n * Selects an item in a panel.\n * \n * When the parent is give then it tries to select the item on that panel.\n * Otherwise it checks whether the item is in the current panel and if so it selects it.\n * Otherwise, it selects the item on a first panel the item is in.\n * \n * @param itemKey The key of the item to set selected in the view.\n * @param panelKey The optional panel key. When not set it finds the first panel the item is on.\n */\n selectItem(itemKey: string, panelKey?: string): void {\n const { activePanel } = this;\n let panel: SplitPanel | undefined;\n if (panelKey) {\n // specified panel\n panel = this.findPanel(panelKey);\n } else if (activePanel?.hasItem(itemKey)) {\n // try the current active panel\n panel = activePanel;\n } else {\n // any panel that has the item\n panel = this.getParent(itemKey);\n }\n if (!panel) {\n return;\n }\n panel.selected = itemKey;\n this.updateView(panel.key);\n this.notifyChange();\n }\n\n /**\n * Checks whether the manager has at least one panel that has items.\n * \n * This is useful to render the empty state when no items are added.\n */\n isEmpty(): boolean {\n for (const panel of this.panelIterator()) {\n if (panel.hasItems) {\n return false;\n }\n }\n return true;\n }\n\n render(itemCallback: SplitItemRenderCallback): TemplateResult[] {\n const result: TemplateResult[] = [];\n const { items } = this;\n for (const info of items) {\n const panel = this.findPanel(info.key);\n const content = panel?.render(itemCallback);\n if (content) {\n result.push(content);\n }\n }\n return result;\n }\n}\n"]}
@@ -14,22 +14,6 @@ import '../../define/layout/split-view.js';
14
14
  * the application needs to add panels to this panel and distribute items among them.
15
15
  */
16
16
  export class SplitPanel {
17
- manager;
18
- /**
19
- * The key used as an internal reference to the definitions map.
20
- */
21
- key = uuidV4();
22
- layout = SplitDirection.horizontal;
23
- items = [];
24
- /**
25
- * The item being rendered in the panel.
26
- * Note, this is the `key` of the item and not the `id` of the item.
27
- */
28
- selected;
29
- /**
30
- * The current state of the panel.
31
- */
32
- state = PanelState.idle;
33
17
  get hasPanels() {
34
18
  return this.items.some(i => i.type === LayoutType.panel);
35
19
  }
@@ -48,6 +32,16 @@ export class SplitPanel {
48
32
  */
49
33
  constructor(manager, schema) {
50
34
  this.manager = manager;
35
+ /**
36
+ * The key used as an internal reference to the definitions map.
37
+ */
38
+ this.key = uuidV4();
39
+ this.layout = SplitDirection.horizontal;
40
+ this.items = [];
41
+ /**
42
+ * The current state of the panel.
43
+ */
44
+ this.state = PanelState.idle;
51
45
  if (schema) {
52
46
  this.new(schema);
53
47
  }