@api-client/ui 0.0.4 → 0.0.5

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 (514) hide show
  1. package/dist/amf/lib/AmfParameters.js +0 -4
  2. package/dist/amf/lib/AmfParameters.js.map +1 -1
  3. package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
  4. package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
  5. package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
  6. package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
  7. package/dist/amf/store/AmfGraphStore.js +0 -2
  8. package/dist/amf/store/AmfGraphStore.js.map +1 -1
  9. package/dist/amf/store/AmfStore.js +0 -7
  10. package/dist/amf/store/AmfStore.js.map +1 -1
  11. package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
  12. package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
  13. package/dist/bindings/base/PlatformBindings.js +6 -10
  14. package/dist/bindings/base/PlatformBindings.js.map +1 -1
  15. package/dist/bindings/base/ProxyBindings.js +9 -6
  16. package/dist/bindings/base/ProxyBindings.js.map +1 -1
  17. package/dist/bindings/base/SharedWorkerThread.js +4 -1
  18. package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
  19. package/dist/bindings/base/StoreBindings.js +162 -170
  20. package/dist/bindings/base/StoreBindings.js.map +1 -1
  21. package/dist/bindings/web/WebConfigurationBindings.js +22 -24
  22. package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
  23. package/dist/bindings/web/WebFileBindings.js +7 -4
  24. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  25. package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
  26. package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
  27. package/dist/bindings/web/WebNavigationBindings.js +4 -1
  28. package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
  29. package/dist/bindings/web/WebProxyBindings.js +5 -6
  30. package/dist/bindings/web/WebProxyBindings.js.map +1 -1
  31. package/dist/bindings/web/WebStoreBindings.js +39 -44
  32. package/dist/bindings/web/WebStoreBindings.js.map +1 -1
  33. package/dist/contextual-menu/ContextualMenu.js +10 -19
  34. package/dist/contextual-menu/ContextualMenu.js.map +1 -1
  35. package/dist/contextual-menu/ContextualMenuElement.js +4 -32
  36. package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
  37. package/dist/contextual-menu/MenuItem.js +0 -12
  38. package/dist/contextual-menu/MenuItem.js.map +1 -1
  39. package/dist/define/amf/api-annotation-document.js +1 -1
  40. package/dist/define/amf/api-annotation-document.js.map +1 -1
  41. package/dist/define/amf/api-authorization-editor.js +1 -1
  42. package/dist/define/amf/api-authorization-editor.js.map +1 -1
  43. package/dist/define/amf/api-channel-document.js +1 -1
  44. package/dist/define/amf/api-channel-document.js.map +1 -1
  45. package/dist/define/amf/api-documentation-document.js +1 -1
  46. package/dist/define/amf/api-documentation-document.js.map +1 -1
  47. package/dist/define/amf/api-documentation.js +1 -1
  48. package/dist/define/amf/api-documentation.js.map +1 -1
  49. package/dist/define/amf/api-navigation.js +1 -1
  50. package/dist/define/amf/api-navigation.js.map +1 -1
  51. package/dist/define/amf/api-operation-document.js +1 -1
  52. package/dist/define/amf/api-operation-document.js.map +1 -1
  53. package/dist/define/amf/api-parameter-document.js +1 -1
  54. package/dist/define/amf/api-parameter-document.js.map +1 -1
  55. package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
  56. package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
  57. package/dist/define/amf/api-payload-document.js +1 -1
  58. package/dist/define/amf/api-payload-document.js.map +1 -1
  59. package/dist/define/amf/api-request-document.js +1 -1
  60. package/dist/define/amf/api-request-document.js.map +1 -1
  61. package/dist/define/amf/api-request-editor.js +1 -1
  62. package/dist/define/amf/api-request-editor.js.map +1 -1
  63. package/dist/define/amf/api-request.js +1 -1
  64. package/dist/define/amf/api-request.js.map +1 -1
  65. package/dist/define/amf/api-resource-document.js +1 -1
  66. package/dist/define/amf/api-resource-document.js.map +1 -1
  67. package/dist/define/amf/api-response-document.js +1 -1
  68. package/dist/define/amf/api-response-document.js.map +1 -1
  69. package/dist/define/amf/api-schema-document.js +1 -1
  70. package/dist/define/amf/api-schema-document.js.map +1 -1
  71. package/dist/define/amf/api-security-document.js +1 -1
  72. package/dist/define/amf/api-security-document.js.map +1 -1
  73. package/dist/define/amf/api-security-requirement-document.js +1 -1
  74. package/dist/define/amf/api-security-requirement-document.js.map +1 -1
  75. package/dist/define/amf/api-server-picker.js +1 -1
  76. package/dist/define/amf/api-server-picker.js.map +1 -1
  77. package/dist/define/amf/api-summary.js +1 -1
  78. package/dist/define/amf/api-summary.js.map +1 -1
  79. package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
  80. package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
  81. package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
  82. package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
  83. package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
  84. package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
  85. package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
  86. package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
  87. package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
  88. package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
  89. package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
  90. package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
  91. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
  92. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
  93. package/dist/define/authorization/apikey-authorization.js +1 -1
  94. package/dist/define/authorization/apikey-authorization.js.map +1 -1
  95. package/dist/define/authorization/basic-authorization.js +1 -1
  96. package/dist/define/authorization/basic-authorization.js.map +1 -1
  97. package/dist/define/authorization/bearer-authorization.js +1 -1
  98. package/dist/define/authorization/bearer-authorization.js.map +1 -1
  99. package/dist/define/authorization/cc-authorization.js +1 -1
  100. package/dist/define/authorization/cc-authorization.js.map +1 -1
  101. package/dist/define/authorization/ntlm-authorization.js +1 -1
  102. package/dist/define/authorization/ntlm-authorization.js.map +1 -1
  103. package/dist/define/authorization/oauth2-authorization.js +1 -1
  104. package/dist/define/authorization/oauth2-authorization.js.map +1 -1
  105. package/dist/define/authorization/oidc-authorization.js +1 -1
  106. package/dist/define/authorization/oidc-authorization.js.map +1 -1
  107. package/dist/define/contextual-menu/contextual-menu.js +1 -1
  108. package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
  109. package/dist/define/dialog/confirm-delete-dialog.js +1 -1
  110. package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
  111. package/dist/define/dialog/rename-dialog.js +1 -1
  112. package/dist/define/dialog/rename-dialog.js.map +1 -1
  113. package/dist/define/files/share-file.js +1 -1
  114. package/dist/define/files/share-file.js.map +1 -1
  115. package/dist/define/har/har-viewer.js +1 -1
  116. package/dist/define/har/har-viewer.js.map +1 -1
  117. package/dist/define/highlight/marked-highlight.js +1 -1
  118. package/dist/define/highlight/marked-highlight.js.map +1 -1
  119. package/dist/define/highlight/prism-highlight.js +1 -1
  120. package/dist/define/highlight/prism-highlight.js.map +1 -1
  121. package/dist/define/http/http-assertions.js +1 -1
  122. package/dist/define/http/http-assertions.js.map +1 -1
  123. package/dist/define/http/http-body-editor.js +1 -1
  124. package/dist/define/http/http-body-editor.js.map +1 -1
  125. package/dist/define/http/http-body-multipart-editor.js +1 -1
  126. package/dist/define/http/http-body-multipart-editor.js.map +1 -1
  127. package/dist/define/http/http-body-text-editor.js +1 -1
  128. package/dist/define/http/http-body-text-editor.js.map +1 -1
  129. package/dist/define/http/http-body-urlencoded-editor.js +1 -1
  130. package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
  131. package/dist/define/http/http-headers-form.js +1 -1
  132. package/dist/define/http/http-headers-form.js.map +1 -1
  133. package/dist/define/http/http-log-body.js +1 -1
  134. package/dist/define/http/http-log-body.js.map +1 -1
  135. package/dist/define/http/http-log-headers.js +1 -1
  136. package/dist/define/http/http-log-headers.js.map +1 -1
  137. package/dist/define/http/http-log-timings.js +1 -1
  138. package/dist/define/http/http-log-timings.js.map +1 -1
  139. package/dist/define/http/http-request-config.js +1 -1
  140. package/dist/define/http/http-request-config.js.map +1 -1
  141. package/dist/define/http/http-request-editor.js +1 -1
  142. package/dist/define/http/http-request-editor.js.map +1 -1
  143. package/dist/define/http/http-request-log.js +1 -1
  144. package/dist/define/http/http-request-log.js.map +1 -1
  145. package/dist/define/http/http-snippets.js +1 -1
  146. package/dist/define/http/http-snippets.js.map +1 -1
  147. package/dist/define/http/http-url-input.js +1 -1
  148. package/dist/define/http/http-url-input.js.map +1 -1
  149. package/dist/define/http/http-url-params-form.js +1 -1
  150. package/dist/define/http/http-url-params-form.js.map +1 -1
  151. package/dist/define/http-project/http-project-request-history.js +1 -1
  152. package/dist/define/http-project/http-project-request-history.js.map +1 -1
  153. package/dist/define/http-project/http-project-request.js +2 -2
  154. package/dist/define/http-project/http-project-request.js.map +1 -1
  155. package/dist/define/http-project/project-navigation.js +1 -1
  156. package/dist/define/http-project/project-navigation.js.map +1 -1
  157. package/dist/define/http-project/project-run-report.js +1 -1
  158. package/dist/define/http-project/project-run-report.js.map +1 -1
  159. package/dist/define/http-project/project-runner.js +2 -2
  160. package/dist/define/http-project/project-runner.js.map +1 -1
  161. package/dist/define/layout/split-view.js +1 -1
  162. package/dist/define/layout/split-view.js.map +1 -1
  163. package/dist/define/schema-design/schema-design-navigation.js +1 -1
  164. package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
  165. package/dist/define/schema-design/schema-namespace-selector.js +1 -1
  166. package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
  167. package/dist/define/ui/ui-button.js +1 -1
  168. package/dist/define/ui/ui-button.js.map +1 -1
  169. package/dist/define/ui/ui-chip.js +1 -1
  170. package/dist/define/ui/ui-chip.js.map +1 -1
  171. package/dist/define/ui/ui-collapse.js +1 -1
  172. package/dist/define/ui/ui-collapse.js.map +1 -1
  173. package/dist/define/ui/ui-dialog.js +1 -1
  174. package/dist/define/ui/ui-dialog.js.map +1 -1
  175. package/dist/define/ui/ui-dropdown-list.js +1 -1
  176. package/dist/define/ui/ui-dropdown-list.js.map +1 -1
  177. package/dist/define/ui/ui-icon-button.js +1 -1
  178. package/dist/define/ui/ui-icon-button.js.map +1 -1
  179. package/dist/define/ui/ui-icon.js +1 -1
  180. package/dist/define/ui/ui-icon.js.map +1 -1
  181. package/dist/define/ui/ui-list-item.js +1 -1
  182. package/dist/define/ui/ui-list-item.js.map +1 -1
  183. package/dist/define/ui/ui-list.js +1 -1
  184. package/dist/define/ui/ui-list.js.map +1 -1
  185. package/dist/define/ui/ui-listbox.js +1 -1
  186. package/dist/define/ui/ui-listbox.js.map +1 -1
  187. package/dist/define/ui/ui-progress.js +1 -1
  188. package/dist/define/ui/ui-progress.js.map +1 -1
  189. package/dist/define/ui/ui-segmented-button-set.js +1 -1
  190. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  191. package/dist/define/ui/ui-segmented-button.js +1 -1
  192. package/dist/define/ui/ui-segmented-button.js.map +1 -1
  193. package/dist/define/ui/ui-snackbar.js +1 -1
  194. package/dist/define/ui/ui-snackbar.js.map +1 -1
  195. package/dist/define/ui/ui-tab.js +1 -1
  196. package/dist/define/ui/ui-tab.js.map +1 -1
  197. package/dist/define/ui/ui-tabs.js +1 -1
  198. package/dist/define/ui/ui-tabs.js.map +1 -1
  199. package/dist/directives/data-attr.js +0 -1
  200. package/dist/directives/data-attr.js.map +1 -1
  201. package/dist/elements/ApiElement.js +0 -7
  202. package/dist/elements/ApiElement.js.map +1 -1
  203. package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
  204. package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
  205. package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
  206. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  207. package/dist/elements/amf/ApiDocumentation.element.js +0 -91
  208. package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
  209. package/dist/elements/amf/ApiDocumentationBase.js +0 -9
  210. package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
  211. package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
  212. package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
  213. package/dist/elements/amf/ApiNavigation.element.js +0 -97
  214. package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
  215. package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
  216. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  217. package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
  218. package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
  219. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
  220. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
  221. package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
  222. package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
  223. package/dist/elements/amf/ApiRequest.element.js +0 -78
  224. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  225. package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
  226. package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
  227. package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
  228. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  229. package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
  230. package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
  231. package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
  232. package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
  233. package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
  234. package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
  235. package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
  236. package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
  237. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
  238. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
  239. package/dist/elements/amf/ApiServerPicker.element.js +2 -65
  240. package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
  241. package/dist/elements/amf/ApiSummary.element.js +0 -26
  242. package/dist/elements/amf/ApiSummary.element.js.map +1 -1
  243. package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
  244. package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
  245. package/dist/elements/amf/authorization/AmfBasic.js +0 -4
  246. package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
  247. package/dist/elements/amf/authorization/AmfBearer.js +0 -4
  248. package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
  249. package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
  250. package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
  251. package/dist/elements/amf/authorization/AmfOidc.js +0 -4
  252. package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
  253. package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
  254. package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
  255. package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
  256. package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
  257. package/dist/elements/authorization/OAuth2Authorize.js +0 -14
  258. package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
  259. package/dist/elements/authorization/OidcAuthorize.js +0 -14
  260. package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
  261. package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
  262. package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  263. package/dist/elements/authorization/ui/Authorization.js +18 -32
  264. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  265. package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
  266. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  267. package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
  268. package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  269. package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
  270. package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  271. package/dist/elements/code/HttpSnippets.js +9 -8
  272. package/dist/elements/code/HttpSnippets.js.map +1 -1
  273. package/dist/elements/dialog/ConfirmDelete.js +0 -12
  274. package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
  275. package/dist/elements/dialog/Rename.js +0 -6
  276. package/dist/elements/dialog/Rename.js.map +1 -1
  277. package/dist/elements/environment/EnvironmentEditor.js +8 -11
  278. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  279. package/dist/elements/environment/ServerEditor.js +7 -45
  280. package/dist/elements/environment/ServerEditor.js.map +1 -1
  281. package/dist/elements/environment/VariablesEditor.js +7 -12
  282. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  283. package/dist/elements/files/ShareFile.js +19 -57
  284. package/dist/elements/files/ShareFile.js.map +1 -1
  285. package/dist/elements/har/HarViewer.js +6 -7
  286. package/dist/elements/har/HarViewer.js.map +1 -1
  287. package/dist/elements/highlight/MarkedHighlight.js +4 -56
  288. package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
  289. package/dist/elements/highlight/PrismHighlight.js +9 -18
  290. package/dist/elements/highlight/PrismHighlight.js.map +1 -1
  291. package/dist/elements/highlight/PrismHighlighter.js +4 -6
  292. package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
  293. package/dist/elements/http/BodyEditor.js +21 -33
  294. package/dist/elements/http/BodyEditor.js.map +1 -1
  295. package/dist/elements/http/BodyMultipartEditor.js +17 -18
  296. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  297. package/dist/elements/http/BodyTextEditor.js +2 -15
  298. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  299. package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
  300. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  301. package/dist/elements/http/HeadersForm.js +16 -17
  302. package/dist/elements/http/HeadersForm.js.map +1 -1
  303. package/dist/elements/http/HttpAssertions.js +8 -6
  304. package/dist/elements/http/HttpAssertions.js.map +1 -1
  305. package/dist/elements/http/LogBody.js +10 -21
  306. package/dist/elements/http/LogBody.js.map +1 -1
  307. package/dist/elements/http/LogHeaders.js +4 -23
  308. package/dist/elements/http/LogHeaders.js.map +1 -1
  309. package/dist/elements/http/LogTimings.js +11 -13
  310. package/dist/elements/http/LogTimings.js.map +1 -1
  311. package/dist/elements/http/RequestConfigElement.js +7 -4
  312. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  313. package/dist/elements/http/RequestEditor.js +54 -88
  314. package/dist/elements/http/RequestEditor.js.map +1 -1
  315. package/dist/elements/http/RequestLog.js +9 -14
  316. package/dist/elements/http/RequestLog.js.map +1 -1
  317. package/dist/elements/http/UrlInput.js +15 -25
  318. package/dist/elements/http/UrlInput.js.map +1 -1
  319. package/dist/elements/http/UrlParamsForm.js +16 -13
  320. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  321. package/dist/elements/layout/LayoutManager.js +16 -24
  322. package/dist/elements/layout/LayoutManager.js.map +1 -1
  323. package/dist/elements/layout/LayoutPanelElement.js +17 -23
  324. package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
  325. package/dist/elements/layout/SplitItem.js +4 -12
  326. package/dist/elements/layout/SplitItem.js.map +1 -1
  327. package/dist/elements/layout/SplitLayout.js +18 -24
  328. package/dist/elements/layout/SplitLayout.js.map +1 -1
  329. package/dist/elements/layout/SplitPanel.js +10 -16
  330. package/dist/elements/layout/SplitPanel.js.map +1 -1
  331. package/dist/elements/layout/SplitView.js +17 -26
  332. package/dist/elements/layout/SplitView.js.map +1 -1
  333. package/dist/elements/navigation/AppNavigationElement.js +8 -47
  334. package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
  335. package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
  336. package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
  337. package/dist/elements/project/HttpProjectRequest.js +0 -38
  338. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  339. package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
  340. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  341. package/dist/elements/project/ProjectNavigation.js +0 -4
  342. package/dist/elements/project/ProjectNavigation.js.map +1 -1
  343. package/dist/elements/project/ProjectRunReport.js +4 -15
  344. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  345. package/dist/elements/project/ProjectRunner.js +2 -47
  346. package/dist/elements/project/ProjectRunner.js.map +1 -1
  347. package/dist/elements/schema-design/AssociationFormElement.js +0 -13
  348. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  349. package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
  350. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  351. package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
  352. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  353. package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
  354. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  355. package/dist/elements/schema-design/EntityFormElement.js +0 -18
  356. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  357. package/dist/elements/schema-design/PropertyFormElement.js +0 -12
  358. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  359. package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
  360. package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
  361. package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
  362. package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
  363. package/dist/elements/user/UserAvatarElement.js +0 -9
  364. package/dist/elements/user/UserAvatarElement.js.map +1 -1
  365. package/dist/events/http-client/models/CertificatesEvents.js +2 -2
  366. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  367. package/dist/http-client/idb/Base.js +5 -10
  368. package/dist/http-client/idb/Base.js.map +1 -1
  369. package/dist/http-client/idb/LegacyMockedStore.js +0 -1
  370. package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
  371. package/dist/http-client/idb/MockedStore.js +3 -1
  372. package/dist/http-client/idb/MockedStore.js.map +1 -1
  373. package/dist/http-client/store/DataImportProcessor.js +0 -3
  374. package/dist/http-client/store/DataImportProcessor.js.map +1 -1
  375. package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
  376. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  377. package/dist/http-client/store/IdbThread.js +23 -20
  378. package/dist/http-client/store/IdbThread.js.map +1 -1
  379. package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
  380. package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
  381. package/dist/http-client/store/idb/IdbStore.js +0 -2
  382. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  383. package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
  384. package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
  385. package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
  386. package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
  387. package/dist/lib/chart/HttpHistoryChart.js +7 -8
  388. package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
  389. package/dist/mixins/FileDropMixin.js +0 -1
  390. package/dist/mixins/FileDropMixin.js.map +1 -1
  391. package/dist/mixins/RenderableMixin.js +11 -15
  392. package/dist/mixins/RenderableMixin.js.map +1 -1
  393. package/dist/pages/ApplicationScreen.js +34 -55
  394. package/dist/pages/ApplicationScreen.js.map +1 -1
  395. package/dist/pages/api-client/ApiClient.screen.js +11 -20
  396. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  397. package/dist/pages/api-client/Authenticate.screen.js +4 -6
  398. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  399. package/dist/pages/api-client/StoreConfig.screen.js +21 -37
  400. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  401. package/dist/pages/api-client/Telemetry.screen.js +1 -2
  402. package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
  403. package/dist/pages/api-client/pages/Files.page.js +6 -27
  404. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  405. package/dist/pages/api-client/pages/Settings.page.js +2 -4
  406. package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
  407. package/dist/pages/api-client/pages/Trash.page.js +2 -13
  408. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  409. package/dist/pages/demo/DemoPage.js +13 -13
  410. package/dist/pages/demo/DemoPage.js.map +1 -1
  411. package/dist/pages/http-project/HttpProject.screen.js +25 -35
  412. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  413. package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
  414. package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
  415. package/dist/store/HttpStore.js +0 -3
  416. package/dist/store/HttpStore.js.map +1 -1
  417. package/dist/store/UserCache.js +5 -5
  418. package/dist/store/UserCache.js.map +1 -1
  419. package/dist/ui/UiElement.js +4 -5
  420. package/dist/ui/UiElement.js.map +1 -1
  421. package/dist/ui/button/SegmentedButton.js +9 -11
  422. package/dist/ui/button/SegmentedButton.js.map +1 -1
  423. package/dist/ui/button/SegmentedButtonsSet.js +6 -7
  424. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  425. package/dist/ui/button/UiButton.js +17 -39
  426. package/dist/ui/button/UiButton.js.map +1 -1
  427. package/dist/ui/button/UiIconButton.js +9 -35
  428. package/dist/ui/button/UiIconButton.js.map +1 -1
  429. package/dist/ui/chip/UiChip.js +9 -49
  430. package/dist/ui/chip/UiChip.js.map +1 -1
  431. package/dist/ui/collapse/UiCollapse.js +15 -20
  432. package/dist/ui/collapse/UiCollapse.js.map +1 -1
  433. package/dist/ui/controllers/ActionController.js +143 -144
  434. package/dist/ui/controllers/ActionController.js.map +1 -1
  435. package/dist/ui/controllers/RadioSelectionController.js +0 -1
  436. package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
  437. package/dist/ui/date/DateTime.js +3 -3
  438. package/dist/ui/date/DateTime.js.map +1 -1
  439. package/dist/ui/dialog/UiDialog.js +14 -38
  440. package/dist/ui/dialog/UiDialog.js.map +1 -1
  441. package/dist/ui/effects/ripple.js +20 -18
  442. package/dist/ui/effects/ripple.js.map +1 -1
  443. package/dist/ui/effects/rippleDirective.js +6 -7
  444. package/dist/ui/effects/rippleDirective.js.map +1 -1
  445. package/dist/ui/icons/UiIcon.js +4 -3
  446. package/dist/ui/icons/UiIcon.js.map +1 -1
  447. package/dist/ui/input/CheckboxElement.js +12 -10
  448. package/dist/ui/input/CheckboxElement.js.map +1 -1
  449. package/dist/ui/input/CheckedElement.js +2 -13
  450. package/dist/ui/input/CheckedElement.js.map +1 -1
  451. package/dist/ui/input/Input.js +169 -234
  452. package/dist/ui/input/Input.js.map +1 -1
  453. package/dist/ui/input/RadioElement.js +13 -11
  454. package/dist/ui/input/RadioElement.js.map +1 -1
  455. package/dist/ui/input/SwitchElement.js +0 -18
  456. package/dist/ui/input/SwitchElement.js.map +1 -1
  457. package/dist/ui/input/TextAreaElement.js +0 -15
  458. package/dist/ui/input/TextAreaElement.js.map +1 -1
  459. package/dist/ui/list/DividerElement.js +5 -10
  460. package/dist/ui/list/DividerElement.js.map +1 -1
  461. package/dist/ui/list/UiDropdownList.js +7 -48
  462. package/dist/ui/list/UiDropdownList.js.map +1 -1
  463. package/dist/ui/list/UiList.js +3 -15
  464. package/dist/ui/list/UiList.js.map +1 -1
  465. package/dist/ui/list/UiListItem.js +4 -17
  466. package/dist/ui/list/UiListItem.js.map +1 -1
  467. package/dist/ui/list/UiListbox.js +0 -1
  468. package/dist/ui/list/UiListbox.js.map +1 -1
  469. package/dist/ui/notification/SnackNotifications.js +1 -2
  470. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  471. package/dist/ui/notification/Snackbar.js +27 -51
  472. package/dist/ui/notification/Snackbar.js.map +1 -1
  473. package/dist/ui/progress/Range.js +24 -23
  474. package/dist/ui/progress/Range.js.map +1 -1
  475. package/dist/ui/progress/UiProgress.js +0 -11
  476. package/dist/ui/progress/UiProgress.js.map +1 -1
  477. package/dist/ui/table/DataTable.js +7 -12
  478. package/dist/ui/table/DataTable.js.map +1 -1
  479. package/dist/ui/tabs/UiTab.js +24 -25
  480. package/dist/ui/tabs/UiTab.js.map +1 -1
  481. package/dist/ui/tabs/UiTabs.js +21 -35
  482. package/dist/ui/tabs/UiTabs.js.map +1 -1
  483. package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
  484. package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
  485. package/dist/visualization/lib/AssociationAnchors.js +16 -28
  486. package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
  487. package/dist/visualization/lib/Point.js +0 -2
  488. package/dist/visualization/lib/Point.js.map +1 -1
  489. package/dist/visualization/lib/SelectionManager.js +10 -11
  490. package/dist/visualization/lib/SelectionManager.js.map +1 -1
  491. package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
  492. package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
  493. package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
  494. package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
  495. package/dist/visualization/lib/WorkspaceEdges.js +17 -19
  496. package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
  497. package/dist/visualization/lib/WorkspaceGestures.js +0 -3
  498. package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
  499. package/dist/visualization/lib/WorkspaceSizing.js +4 -6
  500. package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
  501. package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
  502. package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
  503. package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
  504. package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
  505. package/dist/visualization/lib/tips/TipArtist.js +0 -3
  506. package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
  507. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
  508. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
  509. package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
  510. package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
  511. package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
  512. package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
  513. package/package.json +3 -2
  514. package/tsconfig.json +2 -2
@@ -20,21 +20,6 @@ export default class UiCollapse extends UiElement {
20
20
  setDisabled(this, value);
21
21
  this.requestUpdate('disabled', old);
22
22
  }
23
- /**
24
- * Set noAnimation to true to disable animations.
25
- * @attr
26
- */
27
- noAnimation;
28
- /**
29
- * Renders the collapse horizontally when true and vertically otherwise
30
- * @attribute
31
- */
32
- horizontal = false;
33
- /**
34
- * Set opened to true to show the collapse element and to false to hide it.
35
- * @attribute
36
- */
37
- open = false;
38
23
  get dimension() {
39
24
  return this.horizontal ? 'width' : 'height';
40
25
  }
@@ -55,7 +40,6 @@ export default class UiCollapse extends UiElement {
55
40
  get isAttached() {
56
41
  return !!this.parentNode;
57
42
  }
58
- transitioningInternal = false;
59
43
  /**
60
44
  * @return When true, the element is transitioning its open state. When false,
61
45
  * the element has finished opening/closing.
@@ -63,12 +47,23 @@ export default class UiCollapse extends UiElement {
63
47
  get transitioning() {
64
48
  return this.transitioningInternal;
65
49
  }
66
- /**
67
- * Stores the desired size of the collapse body.
68
- */
69
- desiredSize = '';
70
50
  constructor() {
71
51
  super();
52
+ /**
53
+ * Renders the collapse horizontally when true and vertically otherwise
54
+ * @attribute
55
+ */
56
+ this.horizontal = false;
57
+ /**
58
+ * Set opened to true to show the collapse element and to false to hide it.
59
+ * @attribute
60
+ */
61
+ this.open = false;
62
+ this.transitioningInternal = false;
63
+ /**
64
+ * Stores the desired size of the collapse body.
65
+ */
66
+ this.desiredSize = '';
72
67
  this.addEventListener('transitionend', this.handleTransitionEnd.bind(this));
73
68
  }
74
69
  connectedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"UiCollapse.js","sourceRoot":"","sources":["../../../src/ui/collapse/UiCollapse.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, PropertyValues, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\n\n/**\n * @fires transitioning - When the element is transitioning.\n * @slot - Main slot for the content\n */\nexport default class UiCollapse extends UiElement {\n /**\n * Whether the chip is disabled. The user can't interact with the chip when `true`.\n * @attribute\n */\n @property({ type: Boolean, reflect: true })\n get disabled(): boolean {\n return isDisabled(this);\n }\n\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * Set noAnimation to true to disable animations.\n * @attr\n */\n @property({ type: Boolean, reflect: true }) noAnimation?: boolean;\n\n /**\n * Renders the collapse horizontally when true and vertically otherwise\n * @attribute\n */\n @property({ type: Boolean }) horizontal = false;\n\n /**\n * Set opened to true to show the collapse element and to false to hide it.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) open = false;\n\n get dimension(): 'width' | 'height' {\n return this.horizontal ? 'width' : 'height';\n }\n\n /**\n * `maxWidth` or `maxHeight`.\n * @private\n */\n get dimensionMax(): 'maxWidth' | 'maxHeight' {\n return this.horizontal ? 'maxWidth' : 'maxHeight';\n }\n\n /**\n * `max-width` or `max-height`.\n * @private\n */\n get dimensionMaxCss(): 'max-width' | 'max-height' {\n return this.horizontal ? 'max-width' : 'max-height';\n }\n\n get isAttached(): boolean {\n return !!this.parentNode;\n }\n\n protected transitioningInternal = false;\n\n /**\n * @return When true, the element is transitioning its open state. When false,\n * the element has finished opening/closing.\n */\n get transitioning(): boolean {\n return this.transitioningInternal;\n }\n\n /**\n * Stores the desired size of the collapse body.\n */\n protected desiredSize = '';\n\n constructor() {\n super();\n this.addEventListener('transitionend', this.handleTransitionEnd.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n if (!this.hasAttribute('aria-hidden')) {\n this.setAttribute('aria-hidden', 'true');\n }\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('open')) {\n this.handleOpenChange();\n }\n if (cp.has('horizontal')) {\n this.handleHorizontalChange();\n }\n super.willUpdate(cp);\n }\n\n /**\n * Toggle the opened state.\n */\n toggle(): void {\n this.open = !this.open;\n this.dispatchEvent(new Event('open'));\n }\n\n /**\n * Updates the size of the element.\n * @param size The new value for `maxWidth`/`maxHeight` as css property value, usually `auto` or `0px`.\n * @param animated if `true` updates the size with an animation, otherwise without.\n */\n protected updateSize(size: string, animated?: boolean): void {\n // Consider 'auto' as '', to take full size.\n let sizeValue = size === 'auto' ? '' : size;\n\n let willAnimate = animated && !this.noAnimation && this.isAttached;\n this.desiredSize = sizeValue;\n\n this.updateTransition(false);\n // If we can animate, must do some prep work.\n if (willAnimate) {\n // Animation will start at the current size.\n const startSize = this.calcSize();\n // For `auto` we must calculate what is the final size for the animation.\n // After the transition is done, _transitionEnd will set the size back to\n // `auto`.\n if (sizeValue === '') {\n this.style[this.dimensionMax] = '';\n sizeValue = this.calcSize();\n }\n // Go to startSize without animation.\n \n this.style[this.dimensionMax] = startSize;\n // Force layout to ensure transition will go. Set scrollTop to itself\n // so that compilers won't remove it.\n // eslint-disable-next-line no-self-assign\n this.scrollTop = this.scrollTop;\n // Enable animation.\n this.updateTransition(true);\n // If final size is the same as startSize it will not animate.\n willAnimate = (sizeValue !== startSize);\n }\n // Set the final size.\n \n this.style[this.dimensionMax] = sizeValue;\n // If it won't animate, call transitionEnd to set correct styles.\n if (!willAnimate) {\n this.transitionEnd();\n }\n }\n\n protected updateTransition(enabled?: boolean): void {\n this.style.transitionDuration = (enabled && !this.noAnimation) ? '' : '0s';\n }\n\n /**\n * Calculates the size of the element when opened.\n */\n protected calcSize(): string {\n const value = this.getBoundingClientRect()[this.dimension];\n return `${value}px`;\n }\n\n protected transitionEnd(): void {\n this.style[this.dimensionMax] = this.desiredSize;\n this.toggleAttribute('collapse-closed', !this.open);\n this.toggleAttribute('collapse-opened', this.open);\n this.updateTransition(false);\n this.notifyResize();\n this.transitioningInternal = false;\n this.notifyTransitioning();\n }\n\n protected notifyResize(): void {\n this.dispatchEvent(new Event('resize', { bubbles: true, composed: true, cancelable: true }));\n }\n\n protected notifyTransitioning(): void {\n this.dispatchEvent(new Event('transitioning', { bubbles: true, composed: true, cancelable: true }));\n }\n\n protected handleTransitionEnd(e: Event): void {\n const target = e.composedPath().find((node) => node === this);\n if (target) {\n this.transitionEnd();\n }\n }\n\n protected handleOpenChange(): void {\n const { open } = this;\n this.setAttribute('aria-hidden', String(!open));\n this.transitioningInternal = true;\n this.notifyTransitioning();\n this.toggleAttribute('collapse-closed', false);\n this.toggleAttribute('collapse-opened', false);\n this.updateSize(open ? 'auto' : '0px', true);\n\n // Focus the current collapse.\n if (open) {\n this.focus();\n }\n }\n\n protected handleHorizontalChange(): void {\n this.style.transitionProperty = this.dimensionMaxCss;\n const otherDimension = this.dimensionMax === 'maxWidth' ? 'maxHeight' : 'maxWidth';\n this.style[otherDimension] = '';\n this.updateSize(this.open ? 'auto' : '0px', false);\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n"]}
1
+ {"version":3,"file":"UiCollapse.js","sourceRoot":"","sources":["../../../src/ui/collapse/UiCollapse.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAkC,MAAM,KAAK,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAC/C;;;OAGG;IAEH,IAAI,QAAQ;QACV,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAc;QACzB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7B,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAoBD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;IACtD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAID;;;OAGG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAOD;QACE,KAAK,EAAE,CAAC;QApDV;;;WAGG;QAC0B,eAAU,GAAG,KAAK,CAAC;QAEhD;;;WAGG;QACyC,SAAI,GAAG,KAAK,CAAC;QA0B/C,0BAAqB,GAAG,KAAK,CAAC;QAUxC;;WAEG;QACO,gBAAW,GAAG,EAAE,CAAC;QAIzB,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;YACrC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;SAC1C;IACH,CAAC;IAEkB,UAAU,CAAC,EAAwB;QACpD,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;QACD,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACO,UAAU,CAAC,IAAY,EAAE,QAAkB;QACnD,4CAA4C;QAC5C,IAAI,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,IAAI,WAAW,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;QACnE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAE7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,6CAA6C;QAC7C,IAAI,WAAW,EAAE;YACf,4CAA4C;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,yEAAyE;YACzE,yEAAyE;YACzE,UAAU;YACV,IAAI,SAAS,KAAK,EAAE,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBACnC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC7B;YACD,qCAAqC;YAErC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;YAC1C,qEAAqE;YACrE,qCAAqC;YACrC,0CAA0C;YAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,oBAAoB;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5B,8DAA8D;YAC9D,WAAW,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;SACzC;QACD,sBAAsB;QAEtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QAC1C,iEAAiE;QACjE,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;IACH,CAAC;IAES,gBAAgB,CAAC,OAAiB;QAC1C,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;IAED;;OAEG;IACO,QAAQ;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAES,aAAa;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACjD,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IAES,mBAAmB;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IAES,mBAAmB,CAAC,CAAQ;QACpC,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;IACH,CAAC;IAES,gBAAgB;QACxB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE7C,8BAA8B;QAC9B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;IAES,sBAAsB;QAC9B,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;CACF;AA/MC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;0CAG1C;AAY2C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAuB;AAMrC;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CAAoB;AAMJ;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wCAAc","sourcesContent":["import { html, PropertyValues, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\n\n/**\n * @fires transitioning - When the element is transitioning.\n * @slot - Main slot for the content\n */\nexport default class UiCollapse extends UiElement {\n /**\n * Whether the chip is disabled. The user can't interact with the chip when `true`.\n * @attribute\n */\n @property({ type: Boolean, reflect: true })\n get disabled(): boolean {\n return isDisabled(this);\n }\n\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * Set noAnimation to true to disable animations.\n * @attr\n */\n @property({ type: Boolean, reflect: true }) noAnimation?: boolean;\n\n /**\n * Renders the collapse horizontally when true and vertically otherwise\n * @attribute\n */\n @property({ type: Boolean }) horizontal = false;\n\n /**\n * Set opened to true to show the collapse element and to false to hide it.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) open = false;\n\n get dimension(): 'width' | 'height' {\n return this.horizontal ? 'width' : 'height';\n }\n\n /**\n * `maxWidth` or `maxHeight`.\n * @private\n */\n get dimensionMax(): 'maxWidth' | 'maxHeight' {\n return this.horizontal ? 'maxWidth' : 'maxHeight';\n }\n\n /**\n * `max-width` or `max-height`.\n * @private\n */\n get dimensionMaxCss(): 'max-width' | 'max-height' {\n return this.horizontal ? 'max-width' : 'max-height';\n }\n\n get isAttached(): boolean {\n return !!this.parentNode;\n }\n\n protected transitioningInternal = false;\n\n /**\n * @return When true, the element is transitioning its open state. When false,\n * the element has finished opening/closing.\n */\n get transitioning(): boolean {\n return this.transitioningInternal;\n }\n\n /**\n * Stores the desired size of the collapse body.\n */\n protected desiredSize = '';\n\n constructor() {\n super();\n this.addEventListener('transitionend', this.handleTransitionEnd.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'group');\n }\n if (!this.hasAttribute('aria-hidden')) {\n this.setAttribute('aria-hidden', 'true');\n }\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('open')) {\n this.handleOpenChange();\n }\n if (cp.has('horizontal')) {\n this.handleHorizontalChange();\n }\n super.willUpdate(cp);\n }\n\n /**\n * Toggle the opened state.\n */\n toggle(): void {\n this.open = !this.open;\n this.dispatchEvent(new Event('open'));\n }\n\n /**\n * Updates the size of the element.\n * @param size The new value for `maxWidth`/`maxHeight` as css property value, usually `auto` or `0px`.\n * @param animated if `true` updates the size with an animation, otherwise without.\n */\n protected updateSize(size: string, animated?: boolean): void {\n // Consider 'auto' as '', to take full size.\n let sizeValue = size === 'auto' ? '' : size;\n\n let willAnimate = animated && !this.noAnimation && this.isAttached;\n this.desiredSize = sizeValue;\n\n this.updateTransition(false);\n // If we can animate, must do some prep work.\n if (willAnimate) {\n // Animation will start at the current size.\n const startSize = this.calcSize();\n // For `auto` we must calculate what is the final size for the animation.\n // After the transition is done, _transitionEnd will set the size back to\n // `auto`.\n if (sizeValue === '') {\n this.style[this.dimensionMax] = '';\n sizeValue = this.calcSize();\n }\n // Go to startSize without animation.\n \n this.style[this.dimensionMax] = startSize;\n // Force layout to ensure transition will go. Set scrollTop to itself\n // so that compilers won't remove it.\n // eslint-disable-next-line no-self-assign\n this.scrollTop = this.scrollTop;\n // Enable animation.\n this.updateTransition(true);\n // If final size is the same as startSize it will not animate.\n willAnimate = (sizeValue !== startSize);\n }\n // Set the final size.\n \n this.style[this.dimensionMax] = sizeValue;\n // If it won't animate, call transitionEnd to set correct styles.\n if (!willAnimate) {\n this.transitionEnd();\n }\n }\n\n protected updateTransition(enabled?: boolean): void {\n this.style.transitionDuration = (enabled && !this.noAnimation) ? '' : '0s';\n }\n\n /**\n * Calculates the size of the element when opened.\n */\n protected calcSize(): string {\n const value = this.getBoundingClientRect()[this.dimension];\n return `${value}px`;\n }\n\n protected transitionEnd(): void {\n this.style[this.dimensionMax] = this.desiredSize;\n this.toggleAttribute('collapse-closed', !this.open);\n this.toggleAttribute('collapse-opened', this.open);\n this.updateTransition(false);\n this.notifyResize();\n this.transitioningInternal = false;\n this.notifyTransitioning();\n }\n\n protected notifyResize(): void {\n this.dispatchEvent(new Event('resize', { bubbles: true, composed: true, cancelable: true }));\n }\n\n protected notifyTransitioning(): void {\n this.dispatchEvent(new Event('transitioning', { bubbles: true, composed: true, cancelable: true }));\n }\n\n protected handleTransitionEnd(e: Event): void {\n const target = e.composedPath().find((node) => node === this);\n if (target) {\n this.transitionEnd();\n }\n }\n\n protected handleOpenChange(): void {\n const { open } = this;\n this.setAttribute('aria-hidden', String(!open));\n this.transitioningInternal = true;\n this.notifyTransitioning();\n this.toggleAttribute('collapse-closed', false);\n this.toggleAttribute('collapse-opened', false);\n this.updateSize(open ? 'auto' : '0px', true);\n\n // Focus the current collapse.\n if (open) {\n this.focus();\n }\n }\n\n protected handleHorizontalChange(): void {\n this.style.transitionProperty = this.dimensionMaxCss;\n const otherDimension = this.dimensionMax === 'maxWidth' ? 'maxHeight' : 'maxWidth';\n this.style[otherDimension] = '';\n this.updateSize(this.open ? 'auto' : '0px', false);\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n"]}
@@ -70,9 +70,151 @@ export const WAIT_FOR_MOUSE_CLICK_MS = 500;
70
70
  * interaction.
71
71
  */
72
72
  export class ActionController {
73
- element;
74
73
  constructor(element) {
75
74
  this.element = element;
75
+ this.phase = Phase.INACTIVE;
76
+ this.touchTimer = null;
77
+ this.clickTimer = null;
78
+ this.lastPositionEvent = null;
79
+ this.pressed = false;
80
+ this.checkBoundsAfterContextMenu = false;
81
+ /**
82
+ * When set it cancels handled keyboard events (space, enter, num enter)
83
+ */
84
+ this.cancelKeyboardEvents = false;
85
+ // event listeners
86
+ /**
87
+ * Pointer down event handler.
88
+ */
89
+ this.pointerDown = (e) => {
90
+ if (!this.shouldRespondToEvent(e) || this.phase !== Phase.INACTIVE) {
91
+ return;
92
+ }
93
+ if (this.isTouch(e)) {
94
+ // after a longpress contextmenu event, an extra `pointerdown` can be
95
+ // dispatched to the pressed element. Check that the down is within
96
+ // bounds of the element in this case.
97
+ if (this.checkBoundsAfterContextMenu && !this.inBounds(e)) {
98
+ return;
99
+ }
100
+ this.checkBoundsAfterContextMenu = false;
101
+ this.lastPositionEvent = e;
102
+ this.setPhase(Phase.TOUCH_DELAY);
103
+ this.touchTimer = setTimeout(() => {
104
+ this.touchDelayFinished();
105
+ }, TOUCH_DELAY_MS);
106
+ }
107
+ else {
108
+ const leftButtonPressed = e.button === 0;
109
+ if (!leftButtonPressed ||
110
+ (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {
111
+ return;
112
+ }
113
+ this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);
114
+ this.beginPress(e);
115
+ }
116
+ };
117
+ /**
118
+ * Pointer up event handler.
119
+ */
120
+ this.pointerUp = (e) => {
121
+ if (!this.isTouch(e) || !this.shouldRespondToEvent(e)) {
122
+ return;
123
+ }
124
+ if (this.phase === Phase.HOLDING) {
125
+ this.waitForClick();
126
+ }
127
+ else if (this.phase === Phase.TOUCH_DELAY) {
128
+ this.setPhase(Phase.RELEASING);
129
+ this.beginPress();
130
+ this.waitForClick();
131
+ }
132
+ };
133
+ /**
134
+ * Click event handler.
135
+ */
136
+ this.click = (e) => {
137
+ if (this.disabled ||
138
+ (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {
139
+ return;
140
+ }
141
+ if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {
142
+ this.endPress();
143
+ this.setPhase(Phase.INACTIVE);
144
+ return;
145
+ }
146
+ // keyboard synthesized click event
147
+ if (this.phase === Phase.INACTIVE && !this.pressed) {
148
+ this.press();
149
+ }
150
+ };
151
+ /**
152
+ * Pointer leave event handler.
153
+ */
154
+ this.pointerLeave = (e) => {
155
+ // cancel a held press that moves outside the element
156
+ if (this.shouldRespondToEvent(e) && !this.isTouch(e) && this.pressed) {
157
+ this.cancelPress();
158
+ }
159
+ };
160
+ /**
161
+ * Pointer cancel event handler.
162
+ */
163
+ this.pointerCancel = (e) => {
164
+ if (this.shouldRespondToEvent(e)) {
165
+ this.cancelPress();
166
+ }
167
+ };
168
+ /**
169
+ * Contextmenu event handler.
170
+ */
171
+ this.contextMenu = () => {
172
+ if (!this.disabled) {
173
+ this.checkBoundsAfterContextMenu = true;
174
+ this.cancelPress();
175
+ }
176
+ };
177
+ /**
178
+ * Keyboard down event handler
179
+ */
180
+ this.keyDown = (e) => {
181
+ if (this.disabled) {
182
+ return;
183
+ }
184
+ if (['Enter', 'NumpadEnter'].includes(e.code)) {
185
+ this.press('enter');
186
+ if (this.cancelKeyboardEvents) {
187
+ e.preventDefault();
188
+ }
189
+ }
190
+ else if (e.code === 'Space' || e.key === ' ') {
191
+ this.beginPress(/* positionEvent= */ null);
192
+ this.setPhase(Phase.INACTIVE);
193
+ if (this.cancelKeyboardEvents) {
194
+ e.preventDefault();
195
+ }
196
+ }
197
+ };
198
+ /**
199
+ * Keyboard up event handler
200
+ */
201
+ this.keyUp = (e) => {
202
+ if (this.disabled) {
203
+ return;
204
+ }
205
+ if (e.code === 'Space' || e.key === ' ') {
206
+ this.endPress('space');
207
+ if (this.cancelKeyboardEvents) {
208
+ e.preventDefault();
209
+ }
210
+ }
211
+ else if (e.code === 'Escape' && this.pressed) {
212
+ this.cancelPress();
213
+ if (this.cancelKeyboardEvents) {
214
+ e.preventDefault();
215
+ }
216
+ }
217
+ };
76
218
  this.element.addController(this);
77
219
  }
78
220
  get disabled() {
@@ -81,16 +223,6 @@ export class ActionController {
81
223
  get ignoreClicksWithModifiers() {
82
224
  return this.element.ignoreClicksWithModifiers ?? false;
83
225
  }
84
- phase = Phase.INACTIVE;
85
- touchTimer = null;
86
- clickTimer = null;
87
- lastPositionEvent = null;
88
- pressed = false;
89
- checkBoundsAfterContextMenu = false;
90
- /**
91
- * When set it cancels handled keyboard events (space, enter, num enter)
92
- */
93
- cancelKeyboardEvents = false;
94
226
  setPhase(newPhase) {
95
227
  this.phase = newPhase;
96
228
  }
@@ -195,138 +327,5 @@ export class ActionController {
195
327
  this.cancelPress();
196
328
  }
197
329
  }
198
- // event listeners
199
- /**
200
- * Pointer down event handler.
201
- */
202
- pointerDown = (e) => {
203
- if (!this.shouldRespondToEvent(e) || this.phase !== Phase.INACTIVE) {
204
- return;
205
- }
206
- if (this.isTouch(e)) {
207
- // after a longpress contextmenu event, an extra `pointerdown` can be
208
- // dispatched to the pressed element. Check that the down is within
209
- // bounds of the element in this case.
210
- if (this.checkBoundsAfterContextMenu && !this.inBounds(e)) {
211
- return;
212
- }
213
- this.checkBoundsAfterContextMenu = false;
214
- this.lastPositionEvent = e;
215
- this.setPhase(Phase.TOUCH_DELAY);
216
- this.touchTimer = setTimeout(() => {
217
- this.touchDelayFinished();
218
- }, TOUCH_DELAY_MS);
219
- }
220
- else {
221
- const leftButtonPressed = e.button === 0;
222
- if (!leftButtonPressed ||
223
- (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {
224
- return;
225
- }
226
- this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);
227
- this.beginPress(e);
228
- }
229
- };
230
- /**
231
- * Pointer up event handler.
232
- */
233
- pointerUp = (e) => {
234
- if (!this.isTouch(e) || !this.shouldRespondToEvent(e)) {
235
- return;
236
- }
237
- if (this.phase === Phase.HOLDING) {
238
- this.waitForClick();
239
- }
240
- else if (this.phase === Phase.TOUCH_DELAY) {
241
- this.setPhase(Phase.RELEASING);
242
- this.beginPress();
243
- this.waitForClick();
244
- }
245
- };
246
- /**
247
- * Click event handler.
248
- */
249
- click = (e) => {
250
- if (this.disabled ||
251
- (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {
252
- return;
253
- }
254
- if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {
255
- this.endPress();
256
- this.setPhase(Phase.INACTIVE);
257
- return;
258
- }
259
- // keyboard synthesized click event
260
- if (this.phase === Phase.INACTIVE && !this.pressed) {
261
- this.press();
262
- }
263
- };
264
- /**
265
- * Pointer leave event handler.
266
- */
267
- pointerLeave = (e) => {
268
- // cancel a held press that moves outside the element
269
- if (this.shouldRespondToEvent(e) && !this.isTouch(e) && this.pressed) {
270
- this.cancelPress();
271
- }
272
- };
273
- /**
274
- * Pointer cancel event handler.
275
- */
276
- pointerCancel = (e) => {
277
- if (this.shouldRespondToEvent(e)) {
278
- this.cancelPress();
279
- }
280
- };
281
- /**
282
- * Contextmenu event handler.
283
- */
284
- contextMenu = () => {
285
- if (!this.disabled) {
286
- this.checkBoundsAfterContextMenu = true;
287
- this.cancelPress();
288
- }
289
- };
290
- /**
291
- * Keyboard down event handler
292
- */
293
- keyDown = (e) => {
294
- if (this.disabled) {
295
- return;
296
- }
297
- if (['Enter', 'NumpadEnter'].includes(e.code)) {
298
- this.press('enter');
299
- if (this.cancelKeyboardEvents) {
300
- e.preventDefault();
301
- }
302
- }
303
- else if (e.code === 'Space' || e.key === ' ') {
304
- this.beginPress(/* positionEvent= */ null);
305
- this.setPhase(Phase.INACTIVE);
306
- if (this.cancelKeyboardEvents) {
307
- e.preventDefault();
308
- }
309
- }
310
- };
311
- /**
312
- * Keyboard up event handler
313
- */
314
- keyUp = (e) => {
315
- if (this.disabled) {
316
- return;
317
- }
318
- if (e.code === 'Space' || e.key === ' ') {
319
- this.endPress('space');
320
- if (this.cancelKeyboardEvents) {
321
- e.preventDefault();
322
- }
323
- }
324
- else if (e.code === 'Escape' && this.pressed) {
325
- this.cancelPress();
326
- if (this.cancelKeyboardEvents) {
327
- e.preventDefault();
328
- }
329
- }
330
- };
331
330
  }
332
331
  //# sourceMappingURL=ActionController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionController.js","sourceRoot":"","sources":["../../../src/ui/controllers/ActionController.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/**\n * Enumeration to keep track of the lifecycle of a touch event.\n */\n\n// State transition diagram:\n// +-----------------------------+\n// | v\n// | +------+------ WAITING_FOR_MOUSE_CLICK<----+\n// | | | ^ |\n// | V | | |\n// => INACTIVE -> TOUCH_DELAY -> RELEASING HOLDING\n// | ^\n// | |\n// +-----------------------------------+\nenum Phase {\n // Initial state of the control, no touch in progress.\n // Transitions:\n // on touch down: transition to TOUCH_DELAY.\n // on mouse down: transition to WAITING_FOR_MOUSE_CLICK.\n INACTIVE = 'INACTIVE',\n\n // Touch down has been received, waiting to determine if it's a swipe.\n // Transitions:\n // on touch up: beginPress(); transition to RELEASING.\n // on cancel: transition to INACTIVE.\n // after TOUCH_DELAY_MS: beginPress(); transition to HOLDING.\n TOUCH_DELAY = 'TOUCH_DELAY',\n\n // A touch has been deemed to be a press\n // Transitions:\n // on pointerup: endPress(); transition to WAITING_FOR_MOUSE_CLICK.\n HOLDING = 'HOLDING',\n\n // The user has released the mouse / touch, but we want to delay calling\n // endPress for a little bit to avoid double clicks.\n // Transitions:\n // mouse sequence after debounceDelay: endPress(); transition to INACTIVE\n // when in touch sequence: transitions directly to WAITING_FOR_MOUSE_CLICK\n RELEASING = 'RELEASING',\n\n // The user has touched, but we want to delay endPress until synthetic mouse\n // click event occurs. Stay in this state for a fixed amount of time before\n // giving up and transitioning into rest state.\n // Transitions:\n // on click: endPress(); transition to INACTIVE.\n // after WAIT_FOR_MOUSE_CLICK_MS: transition to INACTIVE.\n WAITING_FOR_MOUSE_CLICK = 'WAITING_FOR_MOUSE_CLICK'\n}\n\n/**\n * Delay time from touchstart to when element#beginPress is invoked.\n */\nexport const TOUCH_DELAY_MS = 150;\n\n/**\n * Delay time from beginning to wait for synthetic mouse events till giving up.\n */\nexport const WAIT_FOR_MOUSE_CLICK_MS = 500;\n\n/**\n * Interface for argument to beginPress.\n */\nexport interface BeginPressConfig {\n /**\n * Event that was recorded at the start of the interaction.\n * `null` if the press happened via keyboard.\n */\n positionEvent: Event | null;\n}\n\n/**\n * Interface for argument to endPress.\n */\nexport interface EndPressConfig {\n /**\n * `true` if the press was cancelled.\n */\n cancelled: boolean;\n /**\n * Data object to pass along to clients in the `action` event, if relevant.\n */\n actionData?: unknown;\n /**\n * Optional reason why the end is called.\n */\n reason?: IEndPressType;\n}\n\n/**\n * The necessary interface for using an ActionController\n */\nexport interface ActionControllerHost extends ReactiveControllerHost,\n HTMLElement {\n disabled: boolean;\n /**\n * Determines if pointerdown or click events containing modifier keys should\n * be ignored.\n */\n ignoreClicksWithModifiers?: boolean;\n /**\n * Called when a user interaction is determined to be a press.\n */\n beginPress(config: BeginPressConfig): void;\n /**\n * Called when a press ends or is cancelled.\n */\n endPress(config: EndPressConfig): void;\n}\n\ntype IEndPressType = 'space' | 'enter';\n\n/**\n * ActionController normalizes user interaction on components and distills it\n * into calling `beginPress` and `endPress` on the component.\n *\n * `beginPress` is a good hook to affect visuals for pressed state, including\n * ripple.\n *\n * `endPress` is a good hook for firing events based on user interaction, and\n * cleaning up the pressed visual state.\n *\n * A component using an ActionController need only implement the ActionElement\n * interface and add the ActionController's event listeners to understand user\n * interaction.\n */\nexport class ActionController implements ReactiveController {\n constructor(private readonly element: ActionControllerHost) {\n this.element.addController(this);\n }\n\n private get disabled(): boolean {\n return this.element.disabled;\n }\n\n private get ignoreClicksWithModifiers(): boolean {\n return this.element.ignoreClicksWithModifiers ?? false;\n }\n\n private phase = Phase.INACTIVE;\n\n private touchTimer: number | null = null;\n\n private clickTimer: number | null = null;\n\n private lastPositionEvent: PointerEvent | null = null;\n\n private pressed = false;\n\n private checkBoundsAfterContextMenu = false;\n\n /**\n * When set it cancels handled keyboard events (space, enter, num enter)\n */\n cancelKeyboardEvents = false;\n\n private setPhase(newPhase: Phase): void {\n this.phase = newPhase;\n }\n\n /**\n * Calls beginPress and then endPress. Allows us to programmatically click\n * on the element.\n */\n private press(reason?: IEndPressType): void {\n this.beginPress(/* positionEvent= */ null);\n this.setPhase(Phase.INACTIVE);\n this.endPress(reason);\n }\n\n /**\n * Call `beginPress` on element with triggering event, if applicable.\n */\n private beginPress(positionEvent: Event | null = this.lastPositionEvent): void {\n this.pressed = true;\n this.element.beginPress({ positionEvent });\n }\n\n /**\n * Call `endPress` on element, and clean up timers.\n */\n private endPress(reason?: IEndPressType): void {\n this.pressed = false;\n this.element.endPress({ cancelled: false, reason });\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n }\n this.touchTimer = null;\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n }\n this.clickTimer = null;\n this.lastPositionEvent = null;\n }\n\n /**\n * Call `endPress` with cancelled state on element, and cleanup timers.\n */\n private cancelPress(): void {\n this.pressed = false;\n this.cleanup();\n if (this.phase === Phase.TOUCH_DELAY) {\n this.setPhase(Phase.INACTIVE);\n } else if (this.phase !== Phase.INACTIVE) {\n this.setPhase(Phase.INACTIVE);\n this.element.endPress({ cancelled: true });\n }\n }\n\n private isTouch(e: PointerEvent): boolean {\n return e.pointerType === 'touch';\n }\n\n private touchDelayFinished(): void {\n if (this.phase !== Phase.TOUCH_DELAY) {\n return;\n }\n this.setPhase(Phase.HOLDING);\n this.beginPress();\n }\n\n private waitForClick(): void {\n this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);\n this.clickTimer = setTimeout(() => {\n // If a click event does not occur, clean up the interaction state.\n if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {\n this.cancelPress();\n }\n }, WAIT_FOR_MOUSE_CLICK_MS) as unknown as number;\n }\n\n /**\n * Check if event should trigger actions on the element.\n */\n private shouldRespondToEvent(e: PointerEvent): boolean {\n return !this.disabled && e.isPrimary;\n }\n\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n private inBounds(ev: PointerEvent): boolean {\n const { top, left, bottom, right } = this.element.getBoundingClientRect();\n const { x, y } = ev;\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private eventHasModifiers(e: MouseEvent): boolean {\n return e.altKey || e.ctrlKey || e.shiftKey || e.metaKey;\n }\n\n /**\n * Cancel interactions if the element is removed from the DOM.\n */\n hostDisconnected(): void {\n this.cancelPress();\n }\n\n /**\n * If the element becomes disabled, cancel interactions.\n */\n hostUpdated(): void {\n if (this.disabled) {\n this.cancelPress();\n }\n }\n\n // event listeners\n /**\n * Pointer down event handler.\n */\n pointerDown = (e: PointerEvent): void => {\n if (!this.shouldRespondToEvent(e) || this.phase !== Phase.INACTIVE) {\n return;\n }\n if (this.isTouch(e)) {\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(e)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.lastPositionEvent = e;\n this.setPhase(Phase.TOUCH_DELAY);\n this.touchTimer = setTimeout(() => {\n this.touchDelayFinished();\n }, TOUCH_DELAY_MS) as unknown as number;\n } else {\n const leftButtonPressed = e.button === 0;\n if (!leftButtonPressed ||\n (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {\n return;\n }\n this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);\n this.beginPress(e);\n }\n }\n\n /**\n * Pointer up event handler.\n */\n pointerUp = (e: PointerEvent): void => {\n if (!this.isTouch(e) || !this.shouldRespondToEvent(e)) {\n return;\n }\n if (this.phase === Phase.HOLDING) {\n this.waitForClick();\n } else if (this.phase === Phase.TOUCH_DELAY) {\n this.setPhase(Phase.RELEASING);\n this.beginPress();\n this.waitForClick();\n }\n }\n\n /**\n * Click event handler.\n */\n click = (e: MouseEvent): void => {\n if (this.disabled ||\n (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {\n return;\n }\n if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {\n this.endPress();\n this.setPhase(Phase.INACTIVE);\n return;\n }\n\n // keyboard synthesized click event\n if (this.phase === Phase.INACTIVE && !this.pressed) {\n this.press();\n }\n }\n\n /**\n * Pointer leave event handler.\n */\n pointerLeave = (e: PointerEvent): void => {\n // cancel a held press that moves outside the element\n if (this.shouldRespondToEvent(e) && !this.isTouch(e) && this.pressed) {\n this.cancelPress();\n }\n }\n\n /**\n * Pointer cancel event handler.\n */\n pointerCancel = (e: PointerEvent): void => {\n if (this.shouldRespondToEvent(e)) {\n this.cancelPress();\n }\n }\n\n /**\n * Contextmenu event handler.\n */\n contextMenu = (): void => {\n if (!this.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.cancelPress();\n }\n }\n\n /**\n * Keyboard down event handler\n */\n keyDown = (e: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n if (['Enter', 'NumpadEnter'].includes(e.code)) {\n this.press('enter');\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n } else if (e.code === 'Space' || e.key === ' ') {\n this.beginPress(/* positionEvent= */ null);\n this.setPhase(Phase.INACTIVE);\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n }\n }\n\n /**\n * Keyboard up event handler\n */\n keyUp = (e: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n if (e.code === 'Space' || e.key === ' ') {\n this.endPress('space');\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n } else if (e.code === 'Escape' && this.pressed) {\n this.cancelPress();\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ActionController.js","sourceRoot":"","sources":["../../../src/ui/controllers/ActionController.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/**\n * Enumeration to keep track of the lifecycle of a touch event.\n */\n\n// State transition diagram:\n// +-----------------------------+\n// | v\n// | +------+------ WAITING_FOR_MOUSE_CLICK<----+\n// | | | ^ |\n// | V | | |\n// => INACTIVE -> TOUCH_DELAY -> RELEASING HOLDING\n// | ^\n// | |\n// +-----------------------------------+\nenum Phase {\n // Initial state of the control, no touch in progress.\n // Transitions:\n // on touch down: transition to TOUCH_DELAY.\n // on mouse down: transition to WAITING_FOR_MOUSE_CLICK.\n INACTIVE = 'INACTIVE',\n\n // Touch down has been received, waiting to determine if it's a swipe.\n // Transitions:\n // on touch up: beginPress(); transition to RELEASING.\n // on cancel: transition to INACTIVE.\n // after TOUCH_DELAY_MS: beginPress(); transition to HOLDING.\n TOUCH_DELAY = 'TOUCH_DELAY',\n\n // A touch has been deemed to be a press\n // Transitions:\n // on pointerup: endPress(); transition to WAITING_FOR_MOUSE_CLICK.\n HOLDING = 'HOLDING',\n\n // The user has released the mouse / touch, but we want to delay calling\n // endPress for a little bit to avoid double clicks.\n // Transitions:\n // mouse sequence after debounceDelay: endPress(); transition to INACTIVE\n // when in touch sequence: transitions directly to WAITING_FOR_MOUSE_CLICK\n RELEASING = 'RELEASING',\n\n // The user has touched, but we want to delay endPress until synthetic mouse\n // click event occurs. Stay in this state for a fixed amount of time before\n // giving up and transitioning into rest state.\n // Transitions:\n // on click: endPress(); transition to INACTIVE.\n // after WAIT_FOR_MOUSE_CLICK_MS: transition to INACTIVE.\n WAITING_FOR_MOUSE_CLICK = 'WAITING_FOR_MOUSE_CLICK'\n}\n\n/**\n * Delay time from touchstart to when element#beginPress is invoked.\n */\nexport const TOUCH_DELAY_MS = 150;\n\n/**\n * Delay time from beginning to wait for synthetic mouse events till giving up.\n */\nexport const WAIT_FOR_MOUSE_CLICK_MS = 500;\n\n/**\n * Interface for argument to beginPress.\n */\nexport interface BeginPressConfig {\n /**\n * Event that was recorded at the start of the interaction.\n * `null` if the press happened via keyboard.\n */\n positionEvent: Event | null;\n}\n\n/**\n * Interface for argument to endPress.\n */\nexport interface EndPressConfig {\n /**\n * `true` if the press was cancelled.\n */\n cancelled: boolean;\n /**\n * Data object to pass along to clients in the `action` event, if relevant.\n */\n actionData?: unknown;\n /**\n * Optional reason why the end is called.\n */\n reason?: IEndPressType;\n}\n\n/**\n * The necessary interface for using an ActionController\n */\nexport interface ActionControllerHost extends ReactiveControllerHost,\n HTMLElement {\n disabled: boolean;\n /**\n * Determines if pointerdown or click events containing modifier keys should\n * be ignored.\n */\n ignoreClicksWithModifiers?: boolean;\n /**\n * Called when a user interaction is determined to be a press.\n */\n beginPress(config: BeginPressConfig): void;\n /**\n * Called when a press ends or is cancelled.\n */\n endPress(config: EndPressConfig): void;\n}\n\ntype IEndPressType = 'space' | 'enter';\n\n/**\n * ActionController normalizes user interaction on components and distills it\n * into calling `beginPress` and `endPress` on the component.\n *\n * `beginPress` is a good hook to affect visuals for pressed state, including\n * ripple.\n *\n * `endPress` is a good hook for firing events based on user interaction, and\n * cleaning up the pressed visual state.\n *\n * A component using an ActionController need only implement the ActionElement\n * interface and add the ActionController's event listeners to understand user\n * interaction.\n */\nexport class ActionController implements ReactiveController {\n constructor(private readonly element: ActionControllerHost) {\n this.element.addController(this);\n }\n\n private get disabled(): boolean {\n return this.element.disabled;\n }\n\n private get ignoreClicksWithModifiers(): boolean {\n return this.element.ignoreClicksWithModifiers ?? false;\n }\n\n private phase = Phase.INACTIVE;\n\n private touchTimer: number | null = null;\n\n private clickTimer: number | null = null;\n\n private lastPositionEvent: PointerEvent | null = null;\n\n private pressed = false;\n\n private checkBoundsAfterContextMenu = false;\n\n /**\n * When set it cancels handled keyboard events (space, enter, num enter)\n */\n cancelKeyboardEvents = false;\n\n private setPhase(newPhase: Phase): void {\n this.phase = newPhase;\n }\n\n /**\n * Calls beginPress and then endPress. Allows us to programmatically click\n * on the element.\n */\n private press(reason?: IEndPressType): void {\n this.beginPress(/* positionEvent= */ null);\n this.setPhase(Phase.INACTIVE);\n this.endPress(reason);\n }\n\n /**\n * Call `beginPress` on element with triggering event, if applicable.\n */\n private beginPress(positionEvent: Event | null = this.lastPositionEvent): void {\n this.pressed = true;\n this.element.beginPress({ positionEvent });\n }\n\n /**\n * Call `endPress` on element, and clean up timers.\n */\n private endPress(reason?: IEndPressType): void {\n this.pressed = false;\n this.element.endPress({ cancelled: false, reason });\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n }\n this.touchTimer = null;\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n }\n this.clickTimer = null;\n this.lastPositionEvent = null;\n }\n\n /**\n * Call `endPress` with cancelled state on element, and cleanup timers.\n */\n private cancelPress(): void {\n this.pressed = false;\n this.cleanup();\n if (this.phase === Phase.TOUCH_DELAY) {\n this.setPhase(Phase.INACTIVE);\n } else if (this.phase !== Phase.INACTIVE) {\n this.setPhase(Phase.INACTIVE);\n this.element.endPress({ cancelled: true });\n }\n }\n\n private isTouch(e: PointerEvent): boolean {\n return e.pointerType === 'touch';\n }\n\n private touchDelayFinished(): void {\n if (this.phase !== Phase.TOUCH_DELAY) {\n return;\n }\n this.setPhase(Phase.HOLDING);\n this.beginPress();\n }\n\n private waitForClick(): void {\n this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);\n this.clickTimer = setTimeout(() => {\n // If a click event does not occur, clean up the interaction state.\n if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {\n this.cancelPress();\n }\n }, WAIT_FOR_MOUSE_CLICK_MS) as unknown as number;\n }\n\n /**\n * Check if event should trigger actions on the element.\n */\n private shouldRespondToEvent(e: PointerEvent): boolean {\n return !this.disabled && e.isPrimary;\n }\n\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n private inBounds(ev: PointerEvent): boolean {\n const { top, left, bottom, right } = this.element.getBoundingClientRect();\n const { x, y } = ev;\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private eventHasModifiers(e: MouseEvent): boolean {\n return e.altKey || e.ctrlKey || e.shiftKey || e.metaKey;\n }\n\n /**\n * Cancel interactions if the element is removed from the DOM.\n */\n hostDisconnected(): void {\n this.cancelPress();\n }\n\n /**\n * If the element becomes disabled, cancel interactions.\n */\n hostUpdated(): void {\n if (this.disabled) {\n this.cancelPress();\n }\n }\n\n // event listeners\n /**\n * Pointer down event handler.\n */\n pointerDown = (e: PointerEvent): void => {\n if (!this.shouldRespondToEvent(e) || this.phase !== Phase.INACTIVE) {\n return;\n }\n if (this.isTouch(e)) {\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(e)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.lastPositionEvent = e;\n this.setPhase(Phase.TOUCH_DELAY);\n this.touchTimer = setTimeout(() => {\n this.touchDelayFinished();\n }, TOUCH_DELAY_MS) as unknown as number;\n } else {\n const leftButtonPressed = e.button === 0;\n if (!leftButtonPressed ||\n (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {\n return;\n }\n this.setPhase(Phase.WAITING_FOR_MOUSE_CLICK);\n this.beginPress(e);\n }\n }\n\n /**\n * Pointer up event handler.\n */\n pointerUp = (e: PointerEvent): void => {\n if (!this.isTouch(e) || !this.shouldRespondToEvent(e)) {\n return;\n }\n if (this.phase === Phase.HOLDING) {\n this.waitForClick();\n } else if (this.phase === Phase.TOUCH_DELAY) {\n this.setPhase(Phase.RELEASING);\n this.beginPress();\n this.waitForClick();\n }\n }\n\n /**\n * Click event handler.\n */\n click = (e: MouseEvent): void => {\n if (this.disabled ||\n (this.ignoreClicksWithModifiers && this.eventHasModifiers(e))) {\n return;\n }\n if (this.phase === Phase.WAITING_FOR_MOUSE_CLICK) {\n this.endPress();\n this.setPhase(Phase.INACTIVE);\n return;\n }\n\n // keyboard synthesized click event\n if (this.phase === Phase.INACTIVE && !this.pressed) {\n this.press();\n }\n }\n\n /**\n * Pointer leave event handler.\n */\n pointerLeave = (e: PointerEvent): void => {\n // cancel a held press that moves outside the element\n if (this.shouldRespondToEvent(e) && !this.isTouch(e) && this.pressed) {\n this.cancelPress();\n }\n }\n\n /**\n * Pointer cancel event handler.\n */\n pointerCancel = (e: PointerEvent): void => {\n if (this.shouldRespondToEvent(e)) {\n this.cancelPress();\n }\n }\n\n /**\n * Contextmenu event handler.\n */\n contextMenu = (): void => {\n if (!this.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.cancelPress();\n }\n }\n\n /**\n * Keyboard down event handler\n */\n keyDown = (e: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n if (['Enter', 'NumpadEnter'].includes(e.code)) {\n this.press('enter');\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n } else if (e.code === 'Space' || e.key === ' ') {\n this.beginPress(/* positionEvent= */ null);\n this.setPhase(Phase.INACTIVE);\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n }\n }\n\n /**\n * Keyboard up event handler\n */\n keyUp = (e: KeyboardEvent): void => {\n if (this.disabled) {\n return;\n }\n if (e.code === 'Space' || e.key === ' ') {\n this.endPress('space');\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n } else if (e.code === 'Escape' && this.pressed) {\n this.cancelPress();\n if (this.cancelKeyboardEvents) {\n e.preventDefault();\n }\n }\n }\n}\n"]}
@@ -13,7 +13,6 @@ const inputs = [];
13
13
  * in the group.
14
14
  */
15
15
  export class RadioSelectionController {
16
- element;
17
16
  constructor(element) {
18
17
  this.element = element;
19
18
  this.element.addController(this);
@@ -1 +1 @@
1
- {"version":3,"file":"RadioSelectionController.js","sourceRoot":"","sources":["../../../src/ui/controllers/RadioSelectionController.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveController, ReactiveControllerHost } from 'lit';\n\nexport interface IRadioSelectionControllerHost extends ReactiveControllerHost, HTMLElement {\n checked?: boolean;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n value?: string;\n readonly form: HTMLFormElement | null;\n}\n\n/**\n * An ordered list of inputs added to the document. Selection order depends on that list.\n */\nconst inputs: IRadioSelectionControllerHost[] = [];\n\n/**\n * A controller that groups radios by name and manages selection of a radio input in a group.\n * \n * A group is defined as:\n * - radio inputs with the same name associated with the same form\n * - radio inputs with the same name not associated with any form\n * \n * The radio input must call the `handleSelection()` method on this controller to manage the selection\n * in the group.\n */\nexport class RadioSelectionController implements ReactiveController {\n constructor(private readonly element: IRadioSelectionControllerHost) {\n this.element.addController(this);\n }\n\n hostConnected(): void {\n const { element } = this;\n inputs.push(element);\n }\n\n hostDisconnected(): void {\n const index = inputs.indexOf(this.element);\n if (index >= 0) {\n inputs.splice(index, 1);\n }\n }\n\n /**\n * Selects the current element and deselects other elements in the group.\n */\n handleSelection(): void {\n const { element } = this;\n const group = this._findGroup(element);\n const isRequired = group.some(i => !!i.required || typeof i.dataset.required === 'string');\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n item.checked = true;\n item.setAttribute('tabindex', '0');\n if (isRequired) {\n item.required = true;\n }\n } else {\n if (item.required) {\n item.required = false;\n }\n if (item.checked) {\n item.checked = false;\n }\n item.removeAttribute('tabindex');\n }\n }\n }\n\n /**\n * A handler for the keydown event. Changes the selection (when there's a selection in the group).\n */\n handleKeyDown(e: KeyboardEvent): void {\n if (['ArrowUp', 'ArrowLeft'].includes(e.code)) {\n e.preventDefault();\n this.selectPrevious();\n } else if (['ArrowDown', 'ArrowRight'].includes(e.code)) {\n e.preventDefault();\n this.selectNext();\n }\n }\n\n selectNext(): void {\n const { element } = this;\n const group = this._findGroup(element);\n if (group.length < 2) {\n // 0 or 1 input, no way to go.\n return;\n }\n const next = this.findNextInput(group, element);\n if (next) {\n next.click();\n }\n }\n\n selectPrevious(): void {\n const { element } = this;\n const group = this._findGroup(element);\n if (group.length < 2) {\n // 0 or 1 input, no way to go.\n return;\n }\n const previous = this.findPreviousInput(group, element);\n if (previous) {\n previous.click();\n }\n }\n\n findNextInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null {\n const currentIndex = group.indexOf(current);\n if (currentIndex < 0) {\n return null;\n }\n let i = currentIndex;\n let next: IRadioSelectionControllerHost | null = null;\n do {\n i++;\n if (i === currentIndex) {\n // looped back from the start, no active element to find.\n return null;\n }\n const item = group[i];\n if (!item) {\n i = -1;\n continue;\n }\n if (!item.disabled) {\n next = item;\n }\n } while (!next);\n return next;\n }\n\n findPreviousInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null {\n const currentIndex = group.indexOf(current);\n if (currentIndex < 0) {\n return null;\n }\n let i = currentIndex;\n let result: IRadioSelectionControllerHost | null = null;\n do {\n i--;\n if (i === currentIndex) {\n // looped back from the end, no active element to find.\n return null;\n }\n const item = group[i];\n if (!item) {\n i = group.length;\n continue;\n }\n if (!item.disabled) {\n result = item;\n }\n } while (!result);\n return result;\n }\n\n private _findGroup(element: IRadioSelectionControllerHost): IRadioSelectionControllerHost[] {\n let group: IRadioSelectionControllerHost[];\n if (element.form) {\n group = this._findFormGroup(element.name || '', element.form);\n } else {\n group = this._findDocumentGroup(element);\n }\n return group;\n }\n\n /**\n * @param name The name of the input\n * @param form The associated form\n * @returns Ordered list of input group for the same form.\n */\n private _findFormGroup(name: string, form: HTMLFormElement): IRadioSelectionControllerHost[] {\n const group = inputs.filter((node) => {\n if (node.name !== name) {\n return false;\n }\n if (node.form !== form) {\n return false;\n }\n return true;\n });\n return group;\n }\n\n /**\n * @param element The element to find its group\n * @returns Ordered list of inputs with the same name that don't belong to any form.\n */\n private _findDocumentGroup(element: IRadioSelectionControllerHost): IRadioSelectionControllerHost[] {\n const { name='' } = element;\n const group = inputs.filter((node) => {\n if (node.form) {\n return false;\n }\n return name === (node.name || '');\n });\n return group;\n }\n\n /**\n * When multiple inputs within the same group have the `required` attribute\n * then the validation is reported incorrectly on inputs where the `tabindex` was removed from.\n * This triggers a console error (not an error in a sense of stopping JS execution) that\n * the form control is not focusable.\n * This removes the `required` attribute from the input when there's another radio button that has the \n * required attribute.\n */\n clearRequired(): void {\n const { element } = this;\n if (!element.required) {\n return;\n }\n const group = this._findGroup(element);\n let hasPreviousRequired = false;\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n break;\n }\n if (item.required && !item.disabled) {\n hasPreviousRequired = true;\n break;\n }\n }\n if (hasPreviousRequired) {\n element.required = false;\n element.dataset.required = '';\n }\n }\n\n /**\n * Removes the tabindex attribute from the input when there's another input with\n * `tabindex` within the same group. This way the user can `tab` to the next input instead\n * of tabbing through all inputs in the group.\n * \n * Note, tabindex values within a group may be different but it has no semantic or logical \n * meaning as navigation within a group happens with arrows and not tab.\n * \n */\n clearTabindex(): void {\n const { element } = this;\n const elementIndex = this._readTabIndex(element);\n if (elementIndex < 0) {\n return;\n }\n const group = this._findGroup(element);\n if (group.length < 2) {\n // noting to clear.\n return;\n }\n let hasFocusableElement = false;\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n break;\n }\n if (item.disabled) {\n continue;\n }\n const index = this._readTabIndex(item);\n if (index >= 0) {\n hasFocusableElement = true;\n break;\n }\n }\n if (hasFocusableElement) {\n element.removeAttribute('tabindex');\n }\n }\n\n protected _readTabIndex(element: HTMLElement): number {\n const tIndex = element.getAttribute('tabindex');\n if (!tIndex) {\n return -1;\n }\n const num = Number(tIndex);\n if (!Number.isInteger(num)) {\n return -1;\n }\n return num;\n }\n}\n"]}
1
+ {"version":3,"file":"RadioSelectionController.js","sourceRoot":"","sources":["../../../src/ui/controllers/RadioSelectionController.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveController, ReactiveControllerHost } from 'lit';\n\nexport interface IRadioSelectionControllerHost extends ReactiveControllerHost, HTMLElement {\n checked?: boolean;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n value?: string;\n readonly form: HTMLFormElement | null;\n}\n\n/**\n * An ordered list of inputs added to the document. Selection order depends on that list.\n */\nconst inputs: IRadioSelectionControllerHost[] = [];\n\n/**\n * A controller that groups radios by name and manages selection of a radio input in a group.\n * \n * A group is defined as:\n * - radio inputs with the same name associated with the same form\n * - radio inputs with the same name not associated with any form\n * \n * The radio input must call the `handleSelection()` method on this controller to manage the selection\n * in the group.\n */\nexport class RadioSelectionController implements ReactiveController {\n constructor(private readonly element: IRadioSelectionControllerHost) {\n this.element.addController(this);\n }\n\n hostConnected(): void {\n const { element } = this;\n inputs.push(element);\n }\n\n hostDisconnected(): void {\n const index = inputs.indexOf(this.element);\n if (index >= 0) {\n inputs.splice(index, 1);\n }\n }\n\n /**\n * Selects the current element and deselects other elements in the group.\n */\n handleSelection(): void {\n const { element } = this;\n const group = this._findGroup(element);\n const isRequired = group.some(i => !!i.required || typeof i.dataset.required === 'string');\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n item.checked = true;\n item.setAttribute('tabindex', '0');\n if (isRequired) {\n item.required = true;\n }\n } else {\n if (item.required) {\n item.required = false;\n }\n if (item.checked) {\n item.checked = false;\n }\n item.removeAttribute('tabindex');\n }\n }\n }\n\n /**\n * A handler for the keydown event. Changes the selection (when there's a selection in the group).\n */\n handleKeyDown(e: KeyboardEvent): void {\n if (['ArrowUp', 'ArrowLeft'].includes(e.code)) {\n e.preventDefault();\n this.selectPrevious();\n } else if (['ArrowDown', 'ArrowRight'].includes(e.code)) {\n e.preventDefault();\n this.selectNext();\n }\n }\n\n selectNext(): void {\n const { element } = this;\n const group = this._findGroup(element);\n if (group.length < 2) {\n // 0 or 1 input, no way to go.\n return;\n }\n const next = this.findNextInput(group, element);\n if (next) {\n next.click();\n }\n }\n\n selectPrevious(): void {\n const { element } = this;\n const group = this._findGroup(element);\n if (group.length < 2) {\n // 0 or 1 input, no way to go.\n return;\n }\n const previous = this.findPreviousInput(group, element);\n if (previous) {\n previous.click();\n }\n }\n\n findNextInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null {\n const currentIndex = group.indexOf(current);\n if (currentIndex < 0) {\n return null;\n }\n let i = currentIndex;\n let next: IRadioSelectionControllerHost | null = null;\n do {\n i++;\n if (i === currentIndex) {\n // looped back from the start, no active element to find.\n return null;\n }\n const item = group[i];\n if (!item) {\n i = -1;\n continue;\n }\n if (!item.disabled) {\n next = item;\n }\n } while (!next);\n return next;\n }\n\n findPreviousInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null {\n const currentIndex = group.indexOf(current);\n if (currentIndex < 0) {\n return null;\n }\n let i = currentIndex;\n let result: IRadioSelectionControllerHost | null = null;\n do {\n i--;\n if (i === currentIndex) {\n // looped back from the end, no active element to find.\n return null;\n }\n const item = group[i];\n if (!item) {\n i = group.length;\n continue;\n }\n if (!item.disabled) {\n result = item;\n }\n } while (!result);\n return result;\n }\n\n private _findGroup(element: IRadioSelectionControllerHost): IRadioSelectionControllerHost[] {\n let group: IRadioSelectionControllerHost[];\n if (element.form) {\n group = this._findFormGroup(element.name || '', element.form);\n } else {\n group = this._findDocumentGroup(element);\n }\n return group;\n }\n\n /**\n * @param name The name of the input\n * @param form The associated form\n * @returns Ordered list of input group for the same form.\n */\n private _findFormGroup(name: string, form: HTMLFormElement): IRadioSelectionControllerHost[] {\n const group = inputs.filter((node) => {\n if (node.name !== name) {\n return false;\n }\n if (node.form !== form) {\n return false;\n }\n return true;\n });\n return group;\n }\n\n /**\n * @param element The element to find its group\n * @returns Ordered list of inputs with the same name that don't belong to any form.\n */\n private _findDocumentGroup(element: IRadioSelectionControllerHost): IRadioSelectionControllerHost[] {\n const { name='' } = element;\n const group = inputs.filter((node) => {\n if (node.form) {\n return false;\n }\n return name === (node.name || '');\n });\n return group;\n }\n\n /**\n * When multiple inputs within the same group have the `required` attribute\n * then the validation is reported incorrectly on inputs where the `tabindex` was removed from.\n * This triggers a console error (not an error in a sense of stopping JS execution) that\n * the form control is not focusable.\n * This removes the `required` attribute from the input when there's another radio button that has the \n * required attribute.\n */\n clearRequired(): void {\n const { element } = this;\n if (!element.required) {\n return;\n }\n const group = this._findGroup(element);\n let hasPreviousRequired = false;\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n break;\n }\n if (item.required && !item.disabled) {\n hasPreviousRequired = true;\n break;\n }\n }\n if (hasPreviousRequired) {\n element.required = false;\n element.dataset.required = '';\n }\n }\n\n /**\n * Removes the tabindex attribute from the input when there's another input with\n * `tabindex` within the same group. This way the user can `tab` to the next input instead\n * of tabbing through all inputs in the group.\n * \n * Note, tabindex values within a group may be different but it has no semantic or logical \n * meaning as navigation within a group happens with arrows and not tab.\n * \n */\n clearTabindex(): void {\n const { element } = this;\n const elementIndex = this._readTabIndex(element);\n if (elementIndex < 0) {\n return;\n }\n const group = this._findGroup(element);\n if (group.length < 2) {\n // noting to clear.\n return;\n }\n let hasFocusableElement = false;\n for (let i = 0, len = group.length; i < len; i++) {\n const item = group[i];\n if (item === element) {\n break;\n }\n if (item.disabled) {\n continue;\n }\n const index = this._readTabIndex(item);\n if (index >= 0) {\n hasFocusableElement = true;\n break;\n }\n }\n if (hasFocusableElement) {\n element.removeAttribute('tabindex');\n }\n }\n\n protected _readTabIndex(element: HTMLElement): number {\n const tIndex = element.getAttribute('tabindex');\n if (!tIndex) {\n return -1;\n }\n const num = Number(tIndex);\n if (!Number.isInteger(num)) {\n return -1;\n }\n return num;\n }\n}\n"]}
@@ -45,9 +45,11 @@ export default class DateTime extends HTMLElement {
45
45
  'weekday', 'time-zone-name', 'era', 'time-zone', 'hour12', 'itemprop'
46
46
  ];
47
47
  }
48
- _observer = new MutationObserver(() => this._mutationHandler());
49
48
  constructor() {
50
49
  super();
50
+ this._observer = new MutationObserver(() => this._mutationHandler());
51
+ this.__hour12set = null;
52
+ this.__date = null;
51
53
  this.attachShadow({ mode: 'open' });
52
54
  }
53
55
  connectedCallback() {
@@ -312,7 +314,6 @@ export default class DateTime extends HTMLElement {
312
314
  this.removeAttribute('era');
313
315
  }
314
316
  }
315
- __hour12set = null;
316
317
  /**
317
318
  * Whether to use 12-hour time (as opposed to 24-hour time).
318
319
  * Possible values are `true` and `false`; the default is locale
@@ -338,7 +339,6 @@ export default class DateTime extends HTMLElement {
338
339
  this.removeAttribute('hour12');
339
340
  }
340
341
  }
341
- __date = null;
342
342
  /**
343
343
  * A date object to render.
344
344
  * It can be a `Date` object, number representing a timestamp