@api-client/ui 0.0.3 → 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 (595) hide show
  1. package/demo/amf/api-annotation.html +1 -0
  2. package/demo/amf/api-channel.html +1 -0
  3. package/demo/amf/api-console.html +1 -0
  4. package/demo/amf/api-documentation-document.html +1 -0
  5. package/demo/amf/api-documentation.html +1 -0
  6. package/demo/amf/api-editor.html +1 -0
  7. package/demo/amf/api-navigation.html +1 -0
  8. package/demo/amf/api-operation.html +1 -0
  9. package/demo/amf/api-payload.html +1 -0
  10. package/demo/amf/api-request.html +1 -0
  11. package/demo/amf/api-resource.html +1 -0
  12. package/demo/amf/api-schema-documentation.html +1 -0
  13. package/demo/amf/api-security-documentation.html +1 -0
  14. package/demo/amf/api-server-picker.html +1 -0
  15. package/demo/amf/api-summary.html +1 -0
  16. package/demo/amf/bare-components.html +2 -0
  17. package/demo/amf/index.html +2 -0
  18. package/demo/amf/oauth-authorize.html +2 -0
  19. package/demo/amf/request-editor.html +1 -0
  20. package/demo/elements/authorization/api-key.html +1 -0
  21. package/demo/elements/authorization/basic.html +1 -0
  22. package/demo/elements/authorization/bearer.html +1 -0
  23. package/demo/elements/authorization/cc.html +1 -0
  24. package/demo/elements/authorization/index.html +2 -0
  25. package/demo/elements/authorization/ntlm.html +1 -0
  26. package/demo/elements/authorization/oauth-error.html +2 -0
  27. package/demo/elements/authorization/oauth-popup.html +2 -0
  28. package/demo/elements/authorization/oauth2.html +1 -0
  29. package/demo/elements/authorization/oidc.html +1 -0
  30. package/demo/elements/authorization/redirect.html +3 -1
  31. package/demo/elements/context-menu/basic.html +2 -1
  32. package/demo/elements/context-menu/custom-data.html +2 -1
  33. package/demo/elements/context-menu/enabled-state.html +2 -1
  34. package/demo/elements/context-menu/icons.html +2 -1
  35. package/demo/elements/context-menu/index.html +2 -0
  36. package/demo/elements/context-menu/nested.html +2 -1
  37. package/demo/elements/context-menu/no-execute.html +2 -1
  38. package/demo/elements/context-menu/radio-menu.html +2 -1
  39. package/demo/elements/context-menu/separators.html +2 -1
  40. package/demo/elements/environment/environment-editor.html +1 -0
  41. package/demo/elements/environment/index.html +1 -0
  42. package/demo/elements/environment/server-editor.html +1 -1
  43. package/demo/elements/environment/variables-editor.html +1 -1
  44. package/demo/elements/har/har-viewer.html +1 -0
  45. package/demo/elements/highlight/index.html +1 -0
  46. package/demo/elements/highlight/marked-highlight.html +1 -0
  47. package/demo/elements/highlight/prism-highlight.html +1 -0
  48. package/demo/elements/http/body-editor.html +1 -0
  49. package/demo/elements/http/headers.html +1 -0
  50. package/demo/elements/http/http-assertions.html +1 -0
  51. package/demo/elements/http/request-editor.html +1 -0
  52. package/demo/elements/http/request-log.html +1 -0
  53. package/demo/elements/http/url-editing.html +1 -0
  54. package/demo/elements/icons/index.html +1 -0
  55. package/demo/elements/project/project-run-report.html +1 -0
  56. package/demo/elements/project/request-editor.html +1 -0
  57. package/demo/elements/ui/buttons/api-button.html +2 -1
  58. package/demo/elements/ui/buttons/api-icon-button.html +2 -1
  59. package/demo/elements/ui/buttons/segmented-buttons.html +2 -1
  60. package/demo/elements/ui/chip/api-chip.html +2 -1
  61. package/demo/elements/ui/collapse/ui-collapse.html +2 -1
  62. package/demo/elements/ui/dialog/ui-dialog.html +2 -1
  63. package/demo/elements/ui/inputs/api-checkbox.html +2 -1
  64. package/demo/elements/ui/inputs/api-input.html +2 -1
  65. package/demo/elements/ui/inputs/api-radio.html +2 -1
  66. package/demo/elements/ui/inputs/api-switch.html +2 -1
  67. package/demo/elements/ui/list/dropdown-list.html +2 -1
  68. package/demo/elements/ui/list/list.html +2 -1
  69. package/demo/elements/ui/notification/snack.html +2 -1
  70. package/demo/elements/ui/progress/ui-progress.html +2 -1
  71. package/demo/elements/ui/tabs/tabs.html +2 -1
  72. package/dist/amf/lib/AmfParameters.js +0 -4
  73. package/dist/amf/lib/AmfParameters.js.map +1 -1
  74. package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
  75. package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
  76. package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
  77. package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
  78. package/dist/amf/store/AmfGraphStore.js +0 -2
  79. package/dist/amf/store/AmfGraphStore.js.map +1 -1
  80. package/dist/amf/store/AmfStore.js +0 -7
  81. package/dist/amf/store/AmfStore.js.map +1 -1
  82. package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
  83. package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
  84. package/dist/bindings/base/PlatformBindings.js +6 -10
  85. package/dist/bindings/base/PlatformBindings.js.map +1 -1
  86. package/dist/bindings/base/ProxyBindings.js +9 -6
  87. package/dist/bindings/base/ProxyBindings.js.map +1 -1
  88. package/dist/bindings/base/SharedWorkerThread.js +4 -1
  89. package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
  90. package/dist/bindings/base/StoreBindings.js +162 -170
  91. package/dist/bindings/base/StoreBindings.js.map +1 -1
  92. package/dist/bindings/web/WebConfigurationBindings.js +22 -24
  93. package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
  94. package/dist/bindings/web/WebFileBindings.js +7 -4
  95. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  96. package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
  97. package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
  98. package/dist/bindings/web/WebNavigationBindings.js +4 -1
  99. package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
  100. package/dist/bindings/web/WebProxyBindings.js +5 -6
  101. package/dist/bindings/web/WebProxyBindings.js.map +1 -1
  102. package/dist/bindings/web/WebStoreBindings.js +39 -44
  103. package/dist/bindings/web/WebStoreBindings.js.map +1 -1
  104. package/dist/contextual-menu/ContextualMenu.js +10 -19
  105. package/dist/contextual-menu/ContextualMenu.js.map +1 -1
  106. package/dist/contextual-menu/ContextualMenuElement.js +4 -32
  107. package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
  108. package/dist/contextual-menu/MenuItem.js +0 -12
  109. package/dist/contextual-menu/MenuItem.js.map +1 -1
  110. package/dist/define/amf/api-annotation-document.js +1 -1
  111. package/dist/define/amf/api-annotation-document.js.map +1 -1
  112. package/dist/define/amf/api-authorization-editor.js +1 -1
  113. package/dist/define/amf/api-authorization-editor.js.map +1 -1
  114. package/dist/define/amf/api-channel-document.js +1 -1
  115. package/dist/define/amf/api-channel-document.js.map +1 -1
  116. package/dist/define/amf/api-documentation-document.js +1 -1
  117. package/dist/define/amf/api-documentation-document.js.map +1 -1
  118. package/dist/define/amf/api-documentation.js +1 -1
  119. package/dist/define/amf/api-documentation.js.map +1 -1
  120. package/dist/define/amf/api-navigation.js +1 -1
  121. package/dist/define/amf/api-navigation.js.map +1 -1
  122. package/dist/define/amf/api-operation-document.js +1 -1
  123. package/dist/define/amf/api-operation-document.js.map +1 -1
  124. package/dist/define/amf/api-parameter-document.js +1 -1
  125. package/dist/define/amf/api-parameter-document.js.map +1 -1
  126. package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
  127. package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
  128. package/dist/define/amf/api-payload-document.js +1 -1
  129. package/dist/define/amf/api-payload-document.js.map +1 -1
  130. package/dist/define/amf/api-request-document.js +1 -1
  131. package/dist/define/amf/api-request-document.js.map +1 -1
  132. package/dist/define/amf/api-request-editor.js +1 -1
  133. package/dist/define/amf/api-request-editor.js.map +1 -1
  134. package/dist/define/amf/api-request.js +1 -1
  135. package/dist/define/amf/api-request.js.map +1 -1
  136. package/dist/define/amf/api-resource-document.js +1 -1
  137. package/dist/define/amf/api-resource-document.js.map +1 -1
  138. package/dist/define/amf/api-response-document.js +1 -1
  139. package/dist/define/amf/api-response-document.js.map +1 -1
  140. package/dist/define/amf/api-schema-document.js +1 -1
  141. package/dist/define/amf/api-schema-document.js.map +1 -1
  142. package/dist/define/amf/api-security-document.js +1 -1
  143. package/dist/define/amf/api-security-document.js.map +1 -1
  144. package/dist/define/amf/api-security-requirement-document.js +1 -1
  145. package/dist/define/amf/api-security-requirement-document.js.map +1 -1
  146. package/dist/define/amf/api-server-picker.js +1 -1
  147. package/dist/define/amf/api-server-picker.js.map +1 -1
  148. package/dist/define/amf/api-summary.js +1 -1
  149. package/dist/define/amf/api-summary.js.map +1 -1
  150. package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
  151. package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
  152. package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
  153. package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
  154. package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
  155. package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
  156. package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
  157. package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
  158. package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
  159. package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
  160. package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
  161. package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
  162. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
  163. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
  164. package/dist/define/authorization/apikey-authorization.js +1 -1
  165. package/dist/define/authorization/apikey-authorization.js.map +1 -1
  166. package/dist/define/authorization/basic-authorization.js +1 -1
  167. package/dist/define/authorization/basic-authorization.js.map +1 -1
  168. package/dist/define/authorization/bearer-authorization.js +1 -1
  169. package/dist/define/authorization/bearer-authorization.js.map +1 -1
  170. package/dist/define/authorization/cc-authorization.js +1 -1
  171. package/dist/define/authorization/cc-authorization.js.map +1 -1
  172. package/dist/define/authorization/ntlm-authorization.js +1 -1
  173. package/dist/define/authorization/ntlm-authorization.js.map +1 -1
  174. package/dist/define/authorization/oauth2-authorization.js +1 -1
  175. package/dist/define/authorization/oauth2-authorization.js.map +1 -1
  176. package/dist/define/authorization/oidc-authorization.js +1 -1
  177. package/dist/define/authorization/oidc-authorization.js.map +1 -1
  178. package/dist/define/contextual-menu/contextual-menu.js +1 -1
  179. package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
  180. package/dist/define/dialog/confirm-delete-dialog.js +1 -1
  181. package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
  182. package/dist/define/dialog/rename-dialog.js +1 -1
  183. package/dist/define/dialog/rename-dialog.js.map +1 -1
  184. package/dist/define/files/share-file.js +1 -1
  185. package/dist/define/files/share-file.js.map +1 -1
  186. package/dist/define/har/har-viewer.js +1 -1
  187. package/dist/define/har/har-viewer.js.map +1 -1
  188. package/dist/define/highlight/marked-highlight.js +1 -1
  189. package/dist/define/highlight/marked-highlight.js.map +1 -1
  190. package/dist/define/highlight/prism-highlight.js +1 -1
  191. package/dist/define/highlight/prism-highlight.js.map +1 -1
  192. package/dist/define/http/http-assertions.js +1 -1
  193. package/dist/define/http/http-assertions.js.map +1 -1
  194. package/dist/define/http/http-body-editor.js +1 -1
  195. package/dist/define/http/http-body-editor.js.map +1 -1
  196. package/dist/define/http/http-body-multipart-editor.js +1 -1
  197. package/dist/define/http/http-body-multipart-editor.js.map +1 -1
  198. package/dist/define/http/http-body-text-editor.js +1 -1
  199. package/dist/define/http/http-body-text-editor.js.map +1 -1
  200. package/dist/define/http/http-body-urlencoded-editor.js +1 -1
  201. package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
  202. package/dist/define/http/http-headers-form.js +1 -1
  203. package/dist/define/http/http-headers-form.js.map +1 -1
  204. package/dist/define/http/http-log-body.js +1 -1
  205. package/dist/define/http/http-log-body.js.map +1 -1
  206. package/dist/define/http/http-log-headers.js +1 -1
  207. package/dist/define/http/http-log-headers.js.map +1 -1
  208. package/dist/define/http/http-log-timings.js +1 -1
  209. package/dist/define/http/http-log-timings.js.map +1 -1
  210. package/dist/define/http/http-request-config.js +1 -1
  211. package/dist/define/http/http-request-config.js.map +1 -1
  212. package/dist/define/http/http-request-editor.js +1 -1
  213. package/dist/define/http/http-request-editor.js.map +1 -1
  214. package/dist/define/http/http-request-log.js +1 -1
  215. package/dist/define/http/http-request-log.js.map +1 -1
  216. package/dist/define/http/http-snippets.js +1 -1
  217. package/dist/define/http/http-snippets.js.map +1 -1
  218. package/dist/define/http/http-url-input.js +1 -1
  219. package/dist/define/http/http-url-input.js.map +1 -1
  220. package/dist/define/http/http-url-params-form.js +1 -1
  221. package/dist/define/http/http-url-params-form.js.map +1 -1
  222. package/dist/define/http-project/http-project-request-history.js +1 -1
  223. package/dist/define/http-project/http-project-request-history.js.map +1 -1
  224. package/dist/define/http-project/http-project-request.js +2 -2
  225. package/dist/define/http-project/http-project-request.js.map +1 -1
  226. package/dist/define/http-project/project-navigation.js +1 -1
  227. package/dist/define/http-project/project-navigation.js.map +1 -1
  228. package/dist/define/http-project/project-run-report.js +1 -1
  229. package/dist/define/http-project/project-run-report.js.map +1 -1
  230. package/dist/define/http-project/project-runner.js +2 -2
  231. package/dist/define/http-project/project-runner.js.map +1 -1
  232. package/dist/define/layout/split-view.js +1 -1
  233. package/dist/define/layout/split-view.js.map +1 -1
  234. package/dist/define/schema-design/schema-design-navigation.js +1 -1
  235. package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
  236. package/dist/define/schema-design/schema-namespace-selector.js +1 -1
  237. package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
  238. package/dist/define/ui/ui-button.js +1 -1
  239. package/dist/define/ui/ui-button.js.map +1 -1
  240. package/dist/define/ui/ui-chip.js +1 -1
  241. package/dist/define/ui/ui-chip.js.map +1 -1
  242. package/dist/define/ui/ui-collapse.js +1 -1
  243. package/dist/define/ui/ui-collapse.js.map +1 -1
  244. package/dist/define/ui/ui-dialog.js +1 -1
  245. package/dist/define/ui/ui-dialog.js.map +1 -1
  246. package/dist/define/ui/ui-dropdown-list.js +1 -1
  247. package/dist/define/ui/ui-dropdown-list.js.map +1 -1
  248. package/dist/define/ui/ui-icon-button.js +1 -1
  249. package/dist/define/ui/ui-icon-button.js.map +1 -1
  250. package/dist/define/ui/ui-icon.js +1 -1
  251. package/dist/define/ui/ui-icon.js.map +1 -1
  252. package/dist/define/ui/ui-list-item.js +1 -1
  253. package/dist/define/ui/ui-list-item.js.map +1 -1
  254. package/dist/define/ui/ui-list.js +1 -1
  255. package/dist/define/ui/ui-list.js.map +1 -1
  256. package/dist/define/ui/ui-listbox.js +1 -1
  257. package/dist/define/ui/ui-listbox.js.map +1 -1
  258. package/dist/define/ui/ui-progress.js +1 -1
  259. package/dist/define/ui/ui-progress.js.map +1 -1
  260. package/dist/define/ui/ui-segmented-button-set.js +1 -1
  261. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  262. package/dist/define/ui/ui-segmented-button.js +1 -1
  263. package/dist/define/ui/ui-segmented-button.js.map +1 -1
  264. package/dist/define/ui/ui-snackbar.js +1 -1
  265. package/dist/define/ui/ui-snackbar.js.map +1 -1
  266. package/dist/define/ui/ui-tab.js +1 -1
  267. package/dist/define/ui/ui-tab.js.map +1 -1
  268. package/dist/define/ui/ui-tabs.js +1 -1
  269. package/dist/define/ui/ui-tabs.js.map +1 -1
  270. package/dist/directives/data-attr.js +0 -1
  271. package/dist/directives/data-attr.js.map +1 -1
  272. package/dist/elements/ApiElement.js +0 -7
  273. package/dist/elements/ApiElement.js.map +1 -1
  274. package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
  275. package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
  276. package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
  277. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  278. package/dist/elements/amf/ApiDocumentation.element.js +0 -91
  279. package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
  280. package/dist/elements/amf/ApiDocumentationBase.js +0 -9
  281. package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
  282. package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
  283. package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
  284. package/dist/elements/amf/ApiNavigation.element.js +0 -97
  285. package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
  286. package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
  287. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  288. package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
  289. package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
  290. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
  291. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
  292. package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
  293. package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
  294. package/dist/elements/amf/ApiRequest.element.js +0 -78
  295. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  296. package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
  297. package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
  298. package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
  299. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  300. package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
  301. package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
  302. package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
  303. package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
  304. package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
  305. package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
  306. package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
  307. package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
  308. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
  309. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
  310. package/dist/elements/amf/ApiServerPicker.element.js +2 -65
  311. package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
  312. package/dist/elements/amf/ApiSummary.element.js +0 -26
  313. package/dist/elements/amf/ApiSummary.element.js.map +1 -1
  314. package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
  315. package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
  316. package/dist/elements/amf/authorization/AmfBasic.js +0 -4
  317. package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
  318. package/dist/elements/amf/authorization/AmfBearer.js +0 -4
  319. package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
  320. package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
  321. package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
  322. package/dist/elements/amf/authorization/AmfOidc.js +0 -4
  323. package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
  324. package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
  325. package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
  326. package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
  327. package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
  328. package/dist/elements/authorization/OAuth2Authorize.js +0 -14
  329. package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
  330. package/dist/elements/authorization/OidcAuthorize.js +0 -14
  331. package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
  332. package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
  333. package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  334. package/dist/elements/authorization/ui/Authorization.js +18 -32
  335. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  336. package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
  337. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  338. package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
  339. package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  340. package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
  341. package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  342. package/dist/elements/code/HttpSnippets.js +9 -8
  343. package/dist/elements/code/HttpSnippets.js.map +1 -1
  344. package/dist/elements/dialog/ConfirmDelete.js +0 -12
  345. package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
  346. package/dist/elements/dialog/Rename.js +0 -6
  347. package/dist/elements/dialog/Rename.js.map +1 -1
  348. package/dist/elements/environment/EnvironmentEditor.js +8 -11
  349. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  350. package/dist/elements/environment/ServerEditor.js +7 -45
  351. package/dist/elements/environment/ServerEditor.js.map +1 -1
  352. package/dist/elements/environment/VariablesEditor.js +7 -12
  353. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  354. package/dist/elements/files/ShareFile.js +19 -57
  355. package/dist/elements/files/ShareFile.js.map +1 -1
  356. package/dist/elements/har/HarViewer.js +6 -7
  357. package/dist/elements/har/HarViewer.js.map +1 -1
  358. package/dist/elements/highlight/MarkedHighlight.js +4 -56
  359. package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
  360. package/dist/elements/highlight/PrismHighlight.js +9 -18
  361. package/dist/elements/highlight/PrismHighlight.js.map +1 -1
  362. package/dist/elements/highlight/PrismHighlighter.js +4 -6
  363. package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
  364. package/dist/elements/http/BodyEditor.js +21 -33
  365. package/dist/elements/http/BodyEditor.js.map +1 -1
  366. package/dist/elements/http/BodyMultipartEditor.js +17 -18
  367. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  368. package/dist/elements/http/BodyTextEditor.js +2 -15
  369. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  370. package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
  371. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  372. package/dist/elements/http/HeadersForm.js +16 -17
  373. package/dist/elements/http/HeadersForm.js.map +1 -1
  374. package/dist/elements/http/HttpAssertions.js +8 -6
  375. package/dist/elements/http/HttpAssertions.js.map +1 -1
  376. package/dist/elements/http/LogBody.js +10 -21
  377. package/dist/elements/http/LogBody.js.map +1 -1
  378. package/dist/elements/http/LogHeaders.js +4 -23
  379. package/dist/elements/http/LogHeaders.js.map +1 -1
  380. package/dist/elements/http/LogTimings.js +11 -13
  381. package/dist/elements/http/LogTimings.js.map +1 -1
  382. package/dist/elements/http/RequestConfigElement.js +7 -4
  383. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  384. package/dist/elements/http/RequestEditor.js +54 -88
  385. package/dist/elements/http/RequestEditor.js.map +1 -1
  386. package/dist/elements/http/RequestLog.js +9 -14
  387. package/dist/elements/http/RequestLog.js.map +1 -1
  388. package/dist/elements/http/UrlInput.js +15 -25
  389. package/dist/elements/http/UrlInput.js.map +1 -1
  390. package/dist/elements/http/UrlParamsForm.js +16 -13
  391. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  392. package/dist/elements/layout/LayoutManager.js +16 -24
  393. package/dist/elements/layout/LayoutManager.js.map +1 -1
  394. package/dist/elements/layout/LayoutPanelElement.js +17 -23
  395. package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
  396. package/dist/elements/layout/SplitItem.js +4 -12
  397. package/dist/elements/layout/SplitItem.js.map +1 -1
  398. package/dist/elements/layout/SplitLayout.js +18 -24
  399. package/dist/elements/layout/SplitLayout.js.map +1 -1
  400. package/dist/elements/layout/SplitPanel.js +10 -16
  401. package/dist/elements/layout/SplitPanel.js.map +1 -1
  402. package/dist/elements/layout/SplitView.js +17 -26
  403. package/dist/elements/layout/SplitView.js.map +1 -1
  404. package/dist/elements/navigation/AppNavigationElement.js +8 -47
  405. package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
  406. package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
  407. package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
  408. package/dist/elements/project/HttpProjectRequest.js +0 -38
  409. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  410. package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
  411. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  412. package/dist/elements/project/ProjectNavigation.js +0 -4
  413. package/dist/elements/project/ProjectNavigation.js.map +1 -1
  414. package/dist/elements/project/ProjectRunReport.js +4 -15
  415. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  416. package/dist/elements/project/ProjectRunner.js +2 -47
  417. package/dist/elements/project/ProjectRunner.js.map +1 -1
  418. package/dist/elements/schema-design/AssociationFormElement.js +0 -13
  419. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  420. package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
  421. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  422. package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
  423. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  424. package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
  425. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  426. package/dist/elements/schema-design/EntityFormElement.js +0 -18
  427. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  428. package/dist/elements/schema-design/PropertyFormElement.js +0 -12
  429. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  430. package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
  431. package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
  432. package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
  433. package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
  434. package/dist/elements/user/UserAvatarElement.js +0 -9
  435. package/dist/elements/user/UserAvatarElement.js.map +1 -1
  436. package/dist/events/http-client/models/CertificatesEvents.js +2 -2
  437. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  438. package/dist/http-client/idb/Base.js +5 -10
  439. package/dist/http-client/idb/Base.js.map +1 -1
  440. package/dist/http-client/idb/LegacyMockedStore.js +0 -1
  441. package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
  442. package/dist/http-client/idb/MockedStore.js +3 -1
  443. package/dist/http-client/idb/MockedStore.js.map +1 -1
  444. package/dist/http-client/store/DataImportProcessor.js +0 -3
  445. package/dist/http-client/store/DataImportProcessor.js.map +1 -1
  446. package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
  447. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  448. package/dist/http-client/store/IdbThread.js +23 -20
  449. package/dist/http-client/store/IdbThread.js.map +1 -1
  450. package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
  451. package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
  452. package/dist/http-client/store/idb/IdbStore.js +0 -2
  453. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  454. package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
  455. package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
  456. package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
  457. package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
  458. package/dist/lib/chart/HttpHistoryChart.js +7 -8
  459. package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
  460. package/dist/mixins/FileDropMixin.js +0 -1
  461. package/dist/mixins/FileDropMixin.js.map +1 -1
  462. package/dist/mixins/RenderableMixin.js +11 -15
  463. package/dist/mixins/RenderableMixin.js.map +1 -1
  464. package/dist/pages/ApplicationScreen.js +34 -55
  465. package/dist/pages/ApplicationScreen.js.map +1 -1
  466. package/dist/pages/api-client/ApiClient.screen.js +11 -20
  467. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  468. package/dist/pages/api-client/Authenticate.screen.js +4 -6
  469. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  470. package/dist/pages/api-client/StoreConfig.screen.js +21 -37
  471. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  472. package/dist/pages/api-client/Telemetry.screen.js +1 -2
  473. package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
  474. package/dist/pages/api-client/pages/Files.page.js +6 -27
  475. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  476. package/dist/pages/api-client/pages/Settings.page.js +2 -4
  477. package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
  478. package/dist/pages/api-client/pages/Trash.page.js +2 -13
  479. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  480. package/dist/pages/demo/DemoPage.d.ts.map +1 -1
  481. package/dist/pages/demo/DemoPage.js +25 -24
  482. package/dist/pages/demo/DemoPage.js.map +1 -1
  483. package/dist/pages/http-project/HttpProject.screen.js +25 -35
  484. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  485. package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
  486. package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
  487. package/dist/store/HttpStore.js +0 -3
  488. package/dist/store/HttpStore.js.map +1 -1
  489. package/dist/store/UserCache.js +5 -5
  490. package/dist/store/UserCache.js.map +1 -1
  491. package/dist/ui/UiElement.js +4 -5
  492. package/dist/ui/UiElement.js.map +1 -1
  493. package/dist/ui/button/SegmentedButton.js +9 -11
  494. package/dist/ui/button/SegmentedButton.js.map +1 -1
  495. package/dist/ui/button/SegmentedButtonsSet.js +6 -7
  496. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  497. package/dist/ui/button/UiButton.js +17 -39
  498. package/dist/ui/button/UiButton.js.map +1 -1
  499. package/dist/ui/button/UiIconButton.js +9 -35
  500. package/dist/ui/button/UiIconButton.js.map +1 -1
  501. package/dist/ui/chip/UiChip.js +9 -49
  502. package/dist/ui/chip/UiChip.js.map +1 -1
  503. package/dist/ui/collapse/UiCollapse.js +15 -20
  504. package/dist/ui/collapse/UiCollapse.js.map +1 -1
  505. package/dist/ui/controllers/ActionController.js +143 -144
  506. package/dist/ui/controllers/ActionController.js.map +1 -1
  507. package/dist/ui/controllers/RadioSelectionController.js +0 -1
  508. package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
  509. package/dist/ui/date/DateTime.js +3 -3
  510. package/dist/ui/date/DateTime.js.map +1 -1
  511. package/dist/ui/dialog/UiDialog.d.ts +1 -1
  512. package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
  513. package/dist/ui/dialog/UiDialog.js +19 -41
  514. package/dist/ui/dialog/UiDialog.js.map +1 -1
  515. package/dist/ui/effects/ripple.js +20 -18
  516. package/dist/ui/effects/ripple.js.map +1 -1
  517. package/dist/ui/effects/rippleDirective.js +6 -7
  518. package/dist/ui/effects/rippleDirective.js.map +1 -1
  519. package/dist/ui/icons/UiIcon.js +4 -3
  520. package/dist/ui/icons/UiIcon.js.map +1 -1
  521. package/dist/ui/input/CheckboxElement.js +12 -10
  522. package/dist/ui/input/CheckboxElement.js.map +1 -1
  523. package/dist/ui/input/CheckedElement.js +2 -13
  524. package/dist/ui/input/CheckedElement.js.map +1 -1
  525. package/dist/ui/input/Input.js +169 -234
  526. package/dist/ui/input/Input.js.map +1 -1
  527. package/dist/ui/input/RadioElement.js +13 -11
  528. package/dist/ui/input/RadioElement.js.map +1 -1
  529. package/dist/ui/input/SwitchElement.js +0 -18
  530. package/dist/ui/input/SwitchElement.js.map +1 -1
  531. package/dist/ui/input/TextAreaElement.js +0 -15
  532. package/dist/ui/input/TextAreaElement.js.map +1 -1
  533. package/dist/ui/list/DividerElement.js +5 -10
  534. package/dist/ui/list/DividerElement.js.map +1 -1
  535. package/dist/ui/list/UiDropdownList.js +7 -48
  536. package/dist/ui/list/UiDropdownList.js.map +1 -1
  537. package/dist/ui/list/UiList.js +3 -15
  538. package/dist/ui/list/UiList.js.map +1 -1
  539. package/dist/ui/list/UiListItem.js +4 -17
  540. package/dist/ui/list/UiListItem.js.map +1 -1
  541. package/dist/ui/list/UiListbox.js +0 -1
  542. package/dist/ui/list/UiListbox.js.map +1 -1
  543. package/dist/ui/notification/SnackNotifications.js +1 -2
  544. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  545. package/dist/ui/notification/Snackbar.js +27 -51
  546. package/dist/ui/notification/Snackbar.js.map +1 -1
  547. package/dist/ui/progress/Range.js +24 -23
  548. package/dist/ui/progress/Range.js.map +1 -1
  549. package/dist/ui/progress/UiProgress.js +0 -11
  550. package/dist/ui/progress/UiProgress.js.map +1 -1
  551. package/dist/ui/table/DataTable.js +7 -12
  552. package/dist/ui/table/DataTable.js.map +1 -1
  553. package/dist/ui/tabs/UiTab.js +24 -25
  554. package/dist/ui/tabs/UiTab.js.map +1 -1
  555. package/dist/ui/tabs/UiTabs.js +21 -35
  556. package/dist/ui/tabs/UiTabs.js.map +1 -1
  557. package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
  558. package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
  559. package/dist/visualization/lib/AssociationAnchors.js +16 -28
  560. package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
  561. package/dist/visualization/lib/Point.js +0 -2
  562. package/dist/visualization/lib/Point.js.map +1 -1
  563. package/dist/visualization/lib/SelectionManager.js +10 -11
  564. package/dist/visualization/lib/SelectionManager.js.map +1 -1
  565. package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
  566. package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
  567. package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
  568. package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
  569. package/dist/visualization/lib/WorkspaceEdges.js +17 -19
  570. package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
  571. package/dist/visualization/lib/WorkspaceGestures.js +0 -3
  572. package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
  573. package/dist/visualization/lib/WorkspaceSizing.js +4 -6
  574. package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
  575. package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
  576. package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
  577. package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
  578. package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
  579. package/dist/visualization/lib/tips/TipArtist.js +0 -3
  580. package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
  581. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
  582. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
  583. package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
  584. package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
  585. package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
  586. package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
  587. package/package.json +3 -2
  588. package/src/pages/demo/DemoPage.ts +12 -11
  589. package/src/ui/dialog/UiDialog.ts +6 -4
  590. package/test/ui/dialog/UiDialog.test.ts +236 -0
  591. package/tsconfig.json +2 -2
  592. package/demo/themes/default.css +0 -0
  593. package/demo/themes/m3/theme.dark.css +0 -40
  594. package/demo/themes/m3/theme.light.css +0 -40
  595. package/demo/themes/m3/tokens.css +0 -291
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../../../src/ui/date/DateTime.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\n/**\n@license\nCopyright 2016 The Advanced REST client authors <arc@mulesoft.com>\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this file except in compliance with the License. You may obtain a copy of\nthe License at\nhttp://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\nLicense for the specific language governing permissions and limitations under\nthe License.\n*/\n\nexport type DateTimeTextOptions = \"long\" | \"short\" | \"narrow\";\nexport type DateTimeNumberOptions = \"numeric\" | \"2-digit\";\nexport type DateTimeTimezoneOptions = \"long\" | \"short\";\nexport type DateTimeTextNumberOptions = DateTimeTextOptions | DateTimeNumberOptions;\n\n/**\n * An element to display formatted date and time.\n *\n * The `date` property accepts Date object, Number as a timestamp or string\n * that will be parsed to the Date object.\n *\n * This element uses the `Intl` interface which is available in IE 11+ browsers.\n *\n * To format the date use [Intl.DateTimeFormat]\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)\n * interface options.\n *\n * The default value for each date-time component property is undefined,\n * but if all component properties are undefined, then year, month, and day\n * are assumed to be \"numeric\" (per spec).\n *\n * ### Example\n *\n * ```html\n * <date-time date=\"2010-12-10T11:50:45Z\" year=\"numeric\" month=\"narrow\" day=\"numeric\"></date-time>\n * ```\n *\n * The element provides accessibility by using the `time` element and setting\n * the `datetime` attribute on it.\n */\nexport default class DateTime extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'locales', 'date', 'year', 'month', 'day', 'hour', 'minute', 'second',\n 'weekday', 'time-zone-name', 'era', 'time-zone', 'hour12', 'itemprop'\n ];\n }\n\n protected _observer = new MutationObserver(() => this._mutationHandler());\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback(): void {\n this._observer.observe(this.shadowRoot as ShadowRoot, {\n childList: true,\n characterData: true,\n subtree: true\n });\n this._updateLabel();\n }\n\n disconnectedCallback(): void {\n this._observer.disconnect();\n }\n\n _mutationHandler(): void {\n this.setAttribute('aria-label', (this.shadowRoot as ShadowRoot).textContent || '');\n }\n\n /**\n * A string with a BCP 47 language tag, or an array of such strings.\n * For the general form and interpretation of the locales argument,\n * see the Intl page.\n * The following Unicode extension keys are allowed:\n * - nu - Numbering system. Possible values include: \"arab\", \"arabext\",\n * \"bali\", \"beng\", \"deva\", \"fullwide\", \"gujr\", \"guru\", \"hanidec\", \"khmr\",\n * \"knda\", \"laoo\", \"latn\", \"limb\", \"mlym\", \"mong\", \"mymr\", \"orya\",\n * \"tamldec\", \"telu\", \"thai\", \"tibt\".\n * - ca - Calendar. Possible values include: \"buddhist\", \"chinese\",\n * \"coptic\", \"ethioaa\", \"ethiopic\", \"gregory\", \"hebrew\", \"indian\",\n * \"islamic\", \"islamicc\", \"iso8601\", \"japanese\", \"persian\", \"roc\".\n * @attribute\n */\n get locales(): string | null {\n return this.getAttribute('locales');\n }\n\n /**\n * A string with a BCP 47 language tag, or an array of such strings.\n * For the general form and interpretation of the locales argument,\n * see the Intl page.\n * The following Unicode extension keys are allowed:\n * - nu - Numbering system. Possible values include: \"arab\", \"arabext\",\n * \"bali\", \"beng\", \"deva\", \"fullwide\", \"gujr\", \"guru\", \"hanidec\", \"khmr\",\n * \"knda\", \"laoo\", \"latn\", \"limb\", \"mlym\", \"mong\", \"mymr\", \"orya\",\n * \"tamldec\", \"telu\", \"thai\", \"tibt\".\n * - ca - Calendar. Possible values include: \"buddhist\", \"chinese\",\n * \"coptic\", \"ethioaa\", \"ethiopic\", \"gregory\", \"hebrew\", \"indian\",\n * \"islamic\", \"islamicc\", \"iso8601\", \"japanese\", \"persian\", \"roc\".\n */\n set locales(v: string | null) {\n if (v) {\n this.setAttribute('locales', v);\n } else {\n this.removeAttribute('locales');\n }\n }\n\n /**\n * The representation of the year.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get year(): DateTimeNumberOptions | null {\n return this.getAttribute('year') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the year.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set year(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('year', v);\n } else {\n this.removeAttribute('year');\n }\n }\n\n /**\n * The representation of the month.\n * Possible values are \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get month(): DateTimeTextNumberOptions | null {\n return this.getAttribute('month') as DateTimeTextNumberOptions;\n }\n\n /**\n * The representation of the month.\n * @param v Possible values are \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\".\n */\n set month(v: DateTimeTextNumberOptions | null) {\n if (v) {\n this.setAttribute('month', v);\n } else {\n this.removeAttribute('month');\n }\n }\n\n /**\n * The representation of the day.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get day(): DateTimeNumberOptions | null {\n return this.getAttribute('day') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the day.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set day(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('day', v);\n } else {\n this.removeAttribute('day');\n }\n }\n\n /**\n * The representation of the hour.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get hour(): DateTimeNumberOptions | null {\n return this.getAttribute('hour') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the hour.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set hour(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('hour', v);\n } else {\n this.removeAttribute('hour');\n }\n }\n\n /**\n * The representation of the minute.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get minute(): DateTimeNumberOptions | null {\n return this.getAttribute('minute') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the minute.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set minute(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('minute', v);\n } else {\n this.removeAttribute('minute');\n }\n }\n\n /**\n * The representation of the second.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get second(): DateTimeNumberOptions | null {\n return this.getAttribute('second') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the second.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set second(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('second', v);\n } else {\n this.removeAttribute('second');\n }\n }\n\n /**\n * The representation of the weekday.\n * Possible values are \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get weekday(): DateTimeTextOptions | null {\n return this.getAttribute('weekday') as DateTimeTextOptions;\n }\n\n /**\n * The representation of the weekday.\n * @param v Possible values are \"narrow\", \"short\", \"long\".\n */\n set weekday(v: DateTimeTextOptions | null) {\n if (v) {\n this.setAttribute('weekday', v);\n } else {\n this.removeAttribute('weekday');\n }\n }\n\n /**\n * The representation of the time zone name.\n *\n * Possible values are \"short\", \"long\".\n * @attribute\n */\n get timeZoneName(): DateTimeTimezoneOptions | null {\n return this.getAttribute('time-zone-name') as DateTimeTimezoneOptions;\n }\n\n /**\n * The representation of the time zone name.\n *\n * @param v Possible values are \"short\", \"long\".\n */\n set timeZoneName(v: DateTimeTimezoneOptions | null) {\n if (v) {\n this.setAttribute('time-zone-name', v);\n } else {\n this.removeAttribute('time-zone-name');\n }\n }\n\n /**\n * The time zone to use. The only value implementations must recognize\n * is \"UTC\"; the default is the runtime's default time zone.\n * Implementations may also recognize the time zone names of the IANA\n * time zone database, such as \"Asia/Shanghai\", \"Asia/Kolkata\",\n * \"America/New_York\".\n * @attribute\n */\n get timeZone(): string | null {\n return this.getAttribute('time-zone');\n }\n\n /**\n * The time zone to use. The only value implementations must recognize\n * is \"UTC\"; the default is the runtime's default time zone.\n * Implementations may also recognize the time zone names of the IANA\n * time zone database, such as \"Asia/Shanghai\", \"Asia/Kolkata\",\n * \"America/New_York\".\n */\n set timeZone(v: string | null) {\n if (v) {\n this.setAttribute('time-zone', v);\n } else {\n this.removeAttribute('time-zone');\n }\n }\n\n /**\n * The representation of the era.\n *\n * Possible values are \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get era(): DateTimeTextOptions | null {\n return this.getAttribute('era') as DateTimeTextOptions;\n }\n\n /**\n * The representation of the era.\n *\n * @param v Possible values are \"narrow\", \"short\", \"long\".\n */\n set era(v: DateTimeTextOptions | null) {\n if (v) {\n this.setAttribute('era', v);\n } else {\n this.removeAttribute('era');\n }\n }\n\n private __hour12set: boolean | null = null;\n\n /**\n * Whether to use 12-hour time (as opposed to 24-hour time).\n * Possible values are `true` and `false`; the default is locale\n * dependent.\n */\n get hour12(): boolean | null {\n if (!this.hasAttribute('hour12') && !this.__hour12set) {\n return null;\n }\n return this.hasAttribute('hour12');\n }\n\n /**\n * Whether to use 12-hour time (as opposed to 24-hour time).\n * Possible values are `true` and `false`; the default is locale\n * dependent.\n */\n set hour12(v: boolean | null) {\n this.__hour12set = true;\n if (v) {\n this.setAttribute('hour12', '');\n } else {\n this.removeAttribute('hour12');\n }\n }\n\n private __date: Date | string | number | null = null;\n\n /**\n * A date object to render.\n * It can be a `Date` object, number representing a timestamp\n * or valid date string. The argument is parsed by `Date` constructor\n * to produce the value.\n * @attribute\n */\n get date(): Date | string | number | null {\n if (this.__date) {\n return this.__date;\n }\n return this.getAttribute('date');\n }\n\n /**\n * A date object to render.\n * It can be a `Date` object, number representing a timestamp\n * or valid date string. The argument is parsed by `Date` constructor\n * to produce the value.\n *\n * @param {Date|string|number} v The date to render\n */\n set date(v: Date | string | number | null) {\n this.__date = v;\n if (typeof v === 'string') {\n this.setAttribute('date', v);\n } else {\n this._updateLabel();\n }\n }\n\n get itemprop(): string | null {\n return this._getTimeNode().getAttribute('itemprop');\n }\n\n set itemprop(value: string | null) {\n const old = this.itemprop;\n if (old === value) {\n return;\n }\n if (old && value === null) {\n // This setter moves attribute from this element to \"<time>\" element.\n // When the attribute is removed from this then it becomes null.\n return;\n }\n const node = this._getTimeNode();\n if (value) {\n node.setAttribute('itemprop', value);\n this.removeAttribute('itemprop');\n } else {\n node.removeAttribute('itemprop');\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n if (name === 'itemprop') {\n this[name] = newValue;\n return;\n }\n this._updateLabel();\n }\n\n /**\n * Parses input `date` to a Date object.\n * @param date A date to parse\n */\n protected _getParsableDate(date: string | number | Date | null): Date {\n if (!date) {\n date = new Date();\n } else if (typeof date === 'string') {\n try {\n date = new Date(date);\n if (Number.isNaN(date.getDate())) {\n date = new Date();\n }\n } catch (e) {\n date = new Date();\n }\n } else if (!Number.isNaN(date)) {\n date = new Date(date);\n } else if (!(date instanceof Date)) {\n date = new Date();\n }\n return date;\n }\n\n _getIntlOptions(): Intl.DateTimeFormatOptions {\n const options: Intl.DateTimeFormatOptions = {};\n if (this.year) {\n options.year = this.year;\n }\n if (this.month) {\n options.month = this.month;\n }\n if (this.day) {\n options.day = this.day;\n }\n if (this.hour) {\n options.hour = this.hour;\n }\n if (this.minute) {\n options.minute = this.minute;\n }\n if (this.second) {\n options.second = this.second;\n }\n if (this.weekday) {\n options.weekday = this.weekday;\n }\n if (this.era) {\n options.era = this.era;\n }\n if (this.timeZoneName) {\n options.timeZoneName = this.timeZoneName;\n }\n if (this.timeZone) {\n options.timeZone = this.timeZone;\n }\n if (this.hour12 !== undefined && this.hour12 !== null) {\n options.hour12 = this.hour12;\n }\n return options;\n }\n\n /**\n * @returns A reference to a `<time>` element that is in the shadow DOM of this element.\n */\n _getTimeNode(): HTMLTimeElement {\n const root = this.shadowRoot as ShadowRoot;\n let node = root.querySelector('time');\n if (!node) {\n node = document.createElement('time');\n root.appendChild(node);\n }\n return node;\n }\n\n _updateLabel(): void {\n if (!this.parentElement) {\n return;\n }\n const date = this._getParsableDate(this.date);\n const node = this._getTimeNode();\n node.setAttribute('datetime', date.toISOString());\n /* istanbul ignore if */\n if (typeof Intl === 'undefined') {\n node.innerText = date.toString();\n return;\n }\n let locales;\n if (this.locales) {\n locales = this.locales;\n }\n const options = this._getIntlOptions();\n const value = new Intl.DateTimeFormat(locales, options).format(date);\n node.innerText = value;\n }\n}\n"]}
1
+ {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../../../src/ui/date/DateTime.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\n/**\n@license\nCopyright 2016 The Advanced REST client authors <arc@mulesoft.com>\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this file except in compliance with the License. You may obtain a copy of\nthe License at\nhttp://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\nLicense for the specific language governing permissions and limitations under\nthe License.\n*/\n\nexport type DateTimeTextOptions = \"long\" | \"short\" | \"narrow\";\nexport type DateTimeNumberOptions = \"numeric\" | \"2-digit\";\nexport type DateTimeTimezoneOptions = \"long\" | \"short\";\nexport type DateTimeTextNumberOptions = DateTimeTextOptions | DateTimeNumberOptions;\n\n/**\n * An element to display formatted date and time.\n *\n * The `date` property accepts Date object, Number as a timestamp or string\n * that will be parsed to the Date object.\n *\n * This element uses the `Intl` interface which is available in IE 11+ browsers.\n *\n * To format the date use [Intl.DateTimeFormat]\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)\n * interface options.\n *\n * The default value for each date-time component property is undefined,\n * but if all component properties are undefined, then year, month, and day\n * are assumed to be \"numeric\" (per spec).\n *\n * ### Example\n *\n * ```html\n * <date-time date=\"2010-12-10T11:50:45Z\" year=\"numeric\" month=\"narrow\" day=\"numeric\"></date-time>\n * ```\n *\n * The element provides accessibility by using the `time` element and setting\n * the `datetime` attribute on it.\n */\nexport default class DateTime extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'locales', 'date', 'year', 'month', 'day', 'hour', 'minute', 'second',\n 'weekday', 'time-zone-name', 'era', 'time-zone', 'hour12', 'itemprop'\n ];\n }\n\n protected _observer = new MutationObserver(() => this._mutationHandler());\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback(): void {\n this._observer.observe(this.shadowRoot as ShadowRoot, {\n childList: true,\n characterData: true,\n subtree: true\n });\n this._updateLabel();\n }\n\n disconnectedCallback(): void {\n this._observer.disconnect();\n }\n\n _mutationHandler(): void {\n this.setAttribute('aria-label', (this.shadowRoot as ShadowRoot).textContent || '');\n }\n\n /**\n * A string with a BCP 47 language tag, or an array of such strings.\n * For the general form and interpretation of the locales argument,\n * see the Intl page.\n * The following Unicode extension keys are allowed:\n * - nu - Numbering system. Possible values include: \"arab\", \"arabext\",\n * \"bali\", \"beng\", \"deva\", \"fullwide\", \"gujr\", \"guru\", \"hanidec\", \"khmr\",\n * \"knda\", \"laoo\", \"latn\", \"limb\", \"mlym\", \"mong\", \"mymr\", \"orya\",\n * \"tamldec\", \"telu\", \"thai\", \"tibt\".\n * - ca - Calendar. Possible values include: \"buddhist\", \"chinese\",\n * \"coptic\", \"ethioaa\", \"ethiopic\", \"gregory\", \"hebrew\", \"indian\",\n * \"islamic\", \"islamicc\", \"iso8601\", \"japanese\", \"persian\", \"roc\".\n * @attribute\n */\n get locales(): string | null {\n return this.getAttribute('locales');\n }\n\n /**\n * A string with a BCP 47 language tag, or an array of such strings.\n * For the general form and interpretation of the locales argument,\n * see the Intl page.\n * The following Unicode extension keys are allowed:\n * - nu - Numbering system. Possible values include: \"arab\", \"arabext\",\n * \"bali\", \"beng\", \"deva\", \"fullwide\", \"gujr\", \"guru\", \"hanidec\", \"khmr\",\n * \"knda\", \"laoo\", \"latn\", \"limb\", \"mlym\", \"mong\", \"mymr\", \"orya\",\n * \"tamldec\", \"telu\", \"thai\", \"tibt\".\n * - ca - Calendar. Possible values include: \"buddhist\", \"chinese\",\n * \"coptic\", \"ethioaa\", \"ethiopic\", \"gregory\", \"hebrew\", \"indian\",\n * \"islamic\", \"islamicc\", \"iso8601\", \"japanese\", \"persian\", \"roc\".\n */\n set locales(v: string | null) {\n if (v) {\n this.setAttribute('locales', v);\n } else {\n this.removeAttribute('locales');\n }\n }\n\n /**\n * The representation of the year.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get year(): DateTimeNumberOptions | null {\n return this.getAttribute('year') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the year.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set year(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('year', v);\n } else {\n this.removeAttribute('year');\n }\n }\n\n /**\n * The representation of the month.\n * Possible values are \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get month(): DateTimeTextNumberOptions | null {\n return this.getAttribute('month') as DateTimeTextNumberOptions;\n }\n\n /**\n * The representation of the month.\n * @param v Possible values are \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\".\n */\n set month(v: DateTimeTextNumberOptions | null) {\n if (v) {\n this.setAttribute('month', v);\n } else {\n this.removeAttribute('month');\n }\n }\n\n /**\n * The representation of the day.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get day(): DateTimeNumberOptions | null {\n return this.getAttribute('day') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the day.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set day(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('day', v);\n } else {\n this.removeAttribute('day');\n }\n }\n\n /**\n * The representation of the hour.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get hour(): DateTimeNumberOptions | null {\n return this.getAttribute('hour') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the hour.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set hour(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('hour', v);\n } else {\n this.removeAttribute('hour');\n }\n }\n\n /**\n * The representation of the minute.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get minute(): DateTimeNumberOptions | null {\n return this.getAttribute('minute') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the minute.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set minute(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('minute', v);\n } else {\n this.removeAttribute('minute');\n }\n }\n\n /**\n * The representation of the second.\n * Possible values are \"numeric\", \"2-digit\".\n * @attribute\n */\n get second(): DateTimeNumberOptions | null {\n return this.getAttribute('second') as DateTimeNumberOptions;\n }\n\n /**\n * The representation of the second.\n * @param v Possible values are \"numeric\", \"2-digit\".\n */\n set second(v: DateTimeNumberOptions | null) {\n if (v) {\n this.setAttribute('second', v);\n } else {\n this.removeAttribute('second');\n }\n }\n\n /**\n * The representation of the weekday.\n * Possible values are \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get weekday(): DateTimeTextOptions | null {\n return this.getAttribute('weekday') as DateTimeTextOptions;\n }\n\n /**\n * The representation of the weekday.\n * @param v Possible values are \"narrow\", \"short\", \"long\".\n */\n set weekday(v: DateTimeTextOptions | null) {\n if (v) {\n this.setAttribute('weekday', v);\n } else {\n this.removeAttribute('weekday');\n }\n }\n\n /**\n * The representation of the time zone name.\n *\n * Possible values are \"short\", \"long\".\n * @attribute\n */\n get timeZoneName(): DateTimeTimezoneOptions | null {\n return this.getAttribute('time-zone-name') as DateTimeTimezoneOptions;\n }\n\n /**\n * The representation of the time zone name.\n *\n * @param v Possible values are \"short\", \"long\".\n */\n set timeZoneName(v: DateTimeTimezoneOptions | null) {\n if (v) {\n this.setAttribute('time-zone-name', v);\n } else {\n this.removeAttribute('time-zone-name');\n }\n }\n\n /**\n * The time zone to use. The only value implementations must recognize\n * is \"UTC\"; the default is the runtime's default time zone.\n * Implementations may also recognize the time zone names of the IANA\n * time zone database, such as \"Asia/Shanghai\", \"Asia/Kolkata\",\n * \"America/New_York\".\n * @attribute\n */\n get timeZone(): string | null {\n return this.getAttribute('time-zone');\n }\n\n /**\n * The time zone to use. The only value implementations must recognize\n * is \"UTC\"; the default is the runtime's default time zone.\n * Implementations may also recognize the time zone names of the IANA\n * time zone database, such as \"Asia/Shanghai\", \"Asia/Kolkata\",\n * \"America/New_York\".\n */\n set timeZone(v: string | null) {\n if (v) {\n this.setAttribute('time-zone', v);\n } else {\n this.removeAttribute('time-zone');\n }\n }\n\n /**\n * The representation of the era.\n *\n * Possible values are \"narrow\", \"short\", \"long\".\n * @attribute\n */\n get era(): DateTimeTextOptions | null {\n return this.getAttribute('era') as DateTimeTextOptions;\n }\n\n /**\n * The representation of the era.\n *\n * @param v Possible values are \"narrow\", \"short\", \"long\".\n */\n set era(v: DateTimeTextOptions | null) {\n if (v) {\n this.setAttribute('era', v);\n } else {\n this.removeAttribute('era');\n }\n }\n\n private __hour12set: boolean | null = null;\n\n /**\n * Whether to use 12-hour time (as opposed to 24-hour time).\n * Possible values are `true` and `false`; the default is locale\n * dependent.\n */\n get hour12(): boolean | null {\n if (!this.hasAttribute('hour12') && !this.__hour12set) {\n return null;\n }\n return this.hasAttribute('hour12');\n }\n\n /**\n * Whether to use 12-hour time (as opposed to 24-hour time).\n * Possible values are `true` and `false`; the default is locale\n * dependent.\n */\n set hour12(v: boolean | null) {\n this.__hour12set = true;\n if (v) {\n this.setAttribute('hour12', '');\n } else {\n this.removeAttribute('hour12');\n }\n }\n\n private __date: Date | string | number | null = null;\n\n /**\n * A date object to render.\n * It can be a `Date` object, number representing a timestamp\n * or valid date string. The argument is parsed by `Date` constructor\n * to produce the value.\n * @attribute\n */\n get date(): Date | string | number | null {\n if (this.__date) {\n return this.__date;\n }\n return this.getAttribute('date');\n }\n\n /**\n * A date object to render.\n * It can be a `Date` object, number representing a timestamp\n * or valid date string. The argument is parsed by `Date` constructor\n * to produce the value.\n *\n * @param {Date|string|number} v The date to render\n */\n set date(v: Date | string | number | null) {\n this.__date = v;\n if (typeof v === 'string') {\n this.setAttribute('date', v);\n } else {\n this._updateLabel();\n }\n }\n\n get itemprop(): string | null {\n return this._getTimeNode().getAttribute('itemprop');\n }\n\n set itemprop(value: string | null) {\n const old = this.itemprop;\n if (old === value) {\n return;\n }\n if (old && value === null) {\n // This setter moves attribute from this element to \"<time>\" element.\n // When the attribute is removed from this then it becomes null.\n return;\n }\n const node = this._getTimeNode();\n if (value) {\n node.setAttribute('itemprop', value);\n this.removeAttribute('itemprop');\n } else {\n node.removeAttribute('itemprop');\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n if (name === 'itemprop') {\n this[name] = newValue;\n return;\n }\n this._updateLabel();\n }\n\n /**\n * Parses input `date` to a Date object.\n * @param date A date to parse\n */\n protected _getParsableDate(date: string | number | Date | null): Date {\n if (!date) {\n date = new Date();\n } else if (typeof date === 'string') {\n try {\n date = new Date(date);\n if (Number.isNaN(date.getDate())) {\n date = new Date();\n }\n } catch (e) {\n date = new Date();\n }\n } else if (!Number.isNaN(date)) {\n date = new Date(date);\n } else if (!(date instanceof Date)) {\n date = new Date();\n }\n return date;\n }\n\n _getIntlOptions(): Intl.DateTimeFormatOptions {\n const options: Intl.DateTimeFormatOptions = {};\n if (this.year) {\n options.year = this.year;\n }\n if (this.month) {\n options.month = this.month;\n }\n if (this.day) {\n options.day = this.day;\n }\n if (this.hour) {\n options.hour = this.hour;\n }\n if (this.minute) {\n options.minute = this.minute;\n }\n if (this.second) {\n options.second = this.second;\n }\n if (this.weekday) {\n options.weekday = this.weekday;\n }\n if (this.era) {\n options.era = this.era;\n }\n if (this.timeZoneName) {\n options.timeZoneName = this.timeZoneName;\n }\n if (this.timeZone) {\n options.timeZone = this.timeZone;\n }\n if (this.hour12 !== undefined && this.hour12 !== null) {\n options.hour12 = this.hour12;\n }\n return options;\n }\n\n /**\n * @returns A reference to a `<time>` element that is in the shadow DOM of this element.\n */\n _getTimeNode(): HTMLTimeElement {\n const root = this.shadowRoot as ShadowRoot;\n let node = root.querySelector('time');\n if (!node) {\n node = document.createElement('time');\n root.appendChild(node);\n }\n return node;\n }\n\n _updateLabel(): void {\n if (!this.parentElement) {\n return;\n }\n const date = this._getParsableDate(this.date);\n const node = this._getTimeNode();\n node.setAttribute('datetime', date.toISOString());\n /* istanbul ignore if */\n if (typeof Intl === 'undefined') {\n node.innerText = date.toString();\n return;\n }\n let locales;\n if (this.locales) {\n locales = this.locales;\n }\n const options = this._getIntlOptions();\n const value = new Intl.DateTimeFormat(locales, options).format(date);\n node.innerText = value;\n }\n}\n"]}
@@ -104,7 +104,7 @@ export default class UiDialog extends UiElement {
104
104
  * To be set by a child class when closing the dialog.
105
105
  * This is passed to the close event.
106
106
  */
107
- protected dialogValue?: unknown;
107
+ dialogValue?: unknown;
108
108
  constructor();
109
109
  handleClick(e: MouseEvent): void;
110
110
  handleKeyDown(e: KeyboardEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"UiDialog.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/UiDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,8BAA8B,CAAA;AAErC,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAC7C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAI1B;IAED;;;OAGG;IAC0B,KAAK,UAAS;IAE3C;;;;OAIG;IAC0B,IAAI,UAAS;IAE1C;;;;OAIG;IACyB,YAAY,CAAC,EAAE,MAAM,CAAC;IAElD;;;;OAIG;IACyB,YAAY,CAAC,EAAE,MAAM,CAAC;IAElD;;OAEG;IACc,QAAQ,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAE5C,SAAS,CAAC,OAAO,UAAS;IAE1B,SAAS,CAAC,QAAQ,UAAS;IAE3B,SAAS,CAAC,SAAS,UAAS;IAEmB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAG,WAAW,EAAE,CAAC;IAE3C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAG,WAAW,EAAE,CAAC;IAEtC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAG,WAAW,EAAE,CAAC;IAErG;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;;IASvB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IAYhC,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;cAO3B,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAOzE,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAgBnC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAMlC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAiB/D,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAQnC,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,aAAa,IAAI,IAAI;IAItB,MAAM,IAAI,cAAc;IAWjC,SAAS,CAAC,UAAU,IAAI,cAAc;IAUtC,SAAS,CAAC,WAAW,IAAI,cAAc;IAUvC,SAAS,CAAC,UAAU,IAAI,cAAc;IAMtC,SAAS,CAAC,aAAa,IAAI,cAAc;IAazC,SAAS,CAAC,mBAAmB,IAAI,cAAc,GAAG,OAAO,OAAO;IAUhE,SAAS,CAAC,mBAAmB,IAAI,cAAc,GAAG,OAAO,OAAO;CASjE"}
1
+ {"version":3,"file":"UiDialog.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/UiDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,8BAA8B,CAAA;AAErC,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAC7C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAI1B;IAED;;;OAGG;IAC0B,KAAK,UAAS;IAE3C;;;;OAIG;IAC0B,IAAI,UAAS;IAE1C;;;;OAIG;IACyB,YAAY,CAAC,EAAE,MAAM,CAAC;IAElD;;;;OAIG;IACyB,YAAY,CAAC,EAAE,MAAM,CAAC;IAElD;;OAEG;IACc,QAAQ,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAE5C,SAAS,CAAC,OAAO,UAAS;IAE1B,SAAS,CAAC,QAAQ,UAAS;IAE3B,SAAS,CAAC,SAAS,UAAS;IAEmB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAG,WAAW,EAAE,CAAC;IAE3C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAG,WAAW,EAAE,CAAC;IAEtC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAG,WAAW,EAAE,CAAC;IAErG;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;;IASb,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IAYhC,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;cAO3B,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAOzE,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAgBnC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAOlC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAiB/D,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAQnC,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,aAAa,IAAI,IAAI;IAItB,MAAM,IAAI,cAAc;IAWjC,SAAS,CAAC,UAAU,IAAI,cAAc;IAUtC,SAAS,CAAC,WAAW,IAAI,cAAc;IAUvC,SAAS,CAAC,UAAU,IAAI,cAAc;IAMtC,SAAS,CAAC,aAAa,IAAI,cAAc;IAczC,SAAS,CAAC,mBAAmB,IAAI,cAAc,GAAG,OAAO,OAAO;IAUhE,SAAS,CAAC,mBAAmB,IAAI,cAAc,GAAG,OAAO,OAAO;CASjE"}
@@ -65,46 +65,22 @@ export default class UiDialog extends UiElement {
65
65
  setDisabled(this, value);
66
66
  this.requestUpdate('disabled', old);
67
67
  }
68
- /**
69
- * Opens the dialog as modal when toggling dialog's open state.
70
- * @attribute
71
- */
72
- modal = false;
73
- /**
74
- * Toggles visibility of the dialog.
75
- * Note, the dialog is opened asynchronously after the update is performed.
76
- * @attribute
77
- */
78
- open = false;
79
- /**
80
- * Imperative access to create a dismiss button.
81
- * When set this will render a dismiss button at the end of the buttons line, before the `confirmLabel` button.
82
- * @attribute
83
- */
84
- dismissLabel;
85
- /**
86
- * Imperative access to create a confirm button.
87
- * When set this will render a confirm button at the end of the buttons line, after the `dismissLabel` button.
88
- * @attribute
89
- */
90
- confirmLabel;
91
- /**
92
- * A reference to the underlying dialog element.
93
- */
94
- dialog;
95
- hasIcon = false;
96
- hasTitle = false;
97
- hasButton = false;
98
- icons;
99
- titles;
100
- buttons;
101
- /**
102
- * To be set by a child class when closing the dialog.
103
- * This is passed to the close event.
104
- */
105
- dialogValue;
106
68
  constructor() {
107
69
  super();
70
+ /**
71
+ * Opens the dialog as modal when toggling dialog's open state.
72
+ * @attribute
73
+ */
74
+ this.modal = false;
75
+ /**
76
+ * Toggles visibility of the dialog.
77
+ * Note, the dialog is opened asynchronously after the update is performed.
78
+ * @attribute
79
+ */
80
+ this.open = false;
81
+ this.hasIcon = false;
82
+ this.hasTitle = false;
83
+ this.hasButton = false;
108
84
  this.addEventListener('click', this.handleClick);
109
85
  this.addEventListener('keydown', this.handleKeyDown);
110
86
  }
@@ -149,9 +125,10 @@ export default class UiDialog extends UiElement {
149
125
  }
150
126
  }
151
127
  handleSlotChange() {
152
- this.hasIcon = !!this.icons.length;
153
- this.hasTitle = !!this.titles.length;
154
- this.hasButton = !!this.buttons.length;
128
+ const { icons, titles, buttons } = this;
129
+ this.hasIcon = !!icons && !!icons.length;
130
+ this.hasTitle = !!titles && !!titles.length;
131
+ this.hasButton = !!buttons && !!buttons.length;
155
132
  }
156
133
  handleInteraction(value) {
157
134
  if (!['dismiss', 'confirm'].includes(value)) {
@@ -224,6 +201,7 @@ export default class UiDialog extends UiElement {
224
201
  <div class="${classMap(classes)}" part="button">
225
202
  <slot name="button" @slotchange="${this.handleSlotChange}"></slot>
226
203
  ${this.renderDismissButton()}
204
+ ${this.renderConfirmButton()}
227
205
  </div>
228
206
  `;
229
207
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UiDialog.js","sourceRoot":"","sources":["../../../src/ui/dialog/UiDialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements, queryAssignedNodes, state } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\nimport UiButton from \"../button/UiButton.js\";\nimport '../../define/ui/ui-button.js'\n\nexport interface UiDialogClosingReason {\n /**\n * Whether the dialog was cancelled by either activating the `dismiss` button\n * or by pressing escape.\n */\n cancelled: boolean;\n /**\n * This is used in cases when the dialog has more complex purpose.\n * This is the value expected from the dialog.\n */\n value?: unknown;\n}\n\n/**\n * Styled dialog using a native `<dialog>` element under the hood.\n * Note, since native dialog renders in the top layer it is not necessary \n * to place the dialog in the `<body>`.\n * \n * ## Using buttons\n * \n * The dialog automatically recognizes buttons with values `confirm` and `dismiss` \n * to close the dialog and dispatch the `close` event. The event has additional \n * closing reason detail.\n * \n * ```javascript\n * <ui-button value=\"dismiss\">Cancel</ui-button> \n * <ui-button value=\"confirm\">Take action</ui-button> \n * ```\n * \n * ```javascript\n * <button value=\"dismiss\">Cancel</button> \n * <button value=\"confirm\">Take action</button> \n * ```\n * \n * The detail object of the `close` event has the following properties:\n * - cancelled - Whether the dialog was cancelled by either activating the `dismiss` button or by pressing escape.\n * \n * The `close` event is only dispatched when the user interact with the dialog. Imperative control of the \n * dialog won't trigger the close button. \n * \n * ## Full example\n * \n * ```javascript\n * <ui-dialog modal>\n * <ui-icon slot=\"icon\" icon=\"delete\"></ui-icon>\n * \n * <span slot=\"title\">Delete photos?</span>\n * <p>This action will permanently remove the selected pictures from your account.</p>\n * \n * <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n * <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Confirm</ui-button>\n * </ui-dialog>\n * ```\n * \n * @slot - The slot for the content of the dialog.\n * @slot icon - The slot to place the dialog icon\n * @slot title - The slot to place the dialog title. Do not put elements here, just the text.\n * @slot button - The slot to place the dialog buttons. Use the `confirm` or `dismiss` buttons to automatically close the dialog.\n * @fires close - A non-bubbling, non-cancellable event with the `UiDialogClosingReason` as the detail.\n */\nexport default class UiDialog extends UiElement {\n get disabled(): boolean {\n return isDisabled(this);\n }\n\n /**\n * When set, the button is a disabled state.\n * @attribute\n */\n @property({ reflect: true, type: Boolean })\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * Opens the dialog as modal when toggling dialog's open state.\n * @attribute\n */\n @property({ type: Boolean }) modal = false;\n\n /**\n * Toggles visibility of the dialog.\n * Note, the dialog is opened asynchronously after the update is performed.\n * @attribute\n */\n @property({ type: Boolean }) open = false;\n\n /**\n * Imperative access to create a dismiss button.\n * When set this will render a dismiss button at the end of the buttons line, before the `confirmLabel` button.\n * @attribute\n */\n @property({ type: String }) dismissLabel?: string;\n\n /**\n * Imperative access to create a confirm button.\n * When set this will render a confirm button at the end of the buttons line, after the `dismissLabel` button.\n * @attribute\n */\n @property({ type: String }) confirmLabel?: string;\n\n /**\n * A reference to the underlying dialog element.\n */\n @query('dialog') readonly dialog!: HTMLDialogElement;\n\n @state() protected hasIcon = false;\n\n @state() protected hasTitle = false;\n\n @state() protected hasButton = false;\n\n @queryAssignedElements({ flatten: true, slot: 'icon' }) protected readonly icons!: HTMLElement[];\n\n @queryAssignedNodes({ flatten: true, slot: 'title' }) protected readonly titles!: HTMLElement[];\n\n @queryAssignedElements({ flatten: true, slot: 'button' }) protected readonly buttons!: HTMLElement[];\n\n /**\n * To be set by a child class when closing the dialog.\n * This is passed to the close event.\n */\n protected dialogValue?: unknown;\n\n constructor() {\n super();\n\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeyDown);\n }\n\n override handleClick(e: MouseEvent): void {\n super.handleClick(e);\n const path = e.composedPath();\n const { buttons } = this;\n const button = path.find(i => buttons.includes(i as HTMLElement)) as HTMLButtonElement | UiButton | undefined;\n if (!button) {\n return;\n }\n const { value ='' } = button;\n this.handleInteraction(value as 'dismiss' | 'confirm');\n }\n\n override handleKeyDown(e: KeyboardEvent): void {\n super.handleKeyDown(e);\n if (e.key === 'Escape') {\n this.handleInteraction('dismiss');\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('open')) {\n this.controlVisibility();\n }\n super.updated(changedProperties);\n }\n\n protected controlVisibility(): void {\n const { dialog, modal, open } = this;\n if (!dialog) {\n return;\n }\n if (open) {\n if (modal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n } else {\n dialog.close();\n }\n }\n\n protected handleSlotChange(): void {\n this.hasIcon = !!this.icons.length;\n this.hasTitle = !!this.titles.length;\n this.hasButton = !!this.buttons.length;\n }\n\n protected handleInteraction(value: 'dismiss' | 'confirm'): void {\n if (!['dismiss', 'confirm'].includes(value)) {\n return;\n }\n this.open = false;\n const detail: UiDialogClosingReason = {\n cancelled: value === 'dismiss',\n }\n if (this.dialogValue !== undefined) {\n detail.value = this.dialogValue;\n }\n this.dispatchEvent(new CustomEvent<UiDialogClosingReason>('close', {\n composed: true,\n detail,\n }));\n }\n\n protected handleDialogClose(): void {\n if (!this.open) {\n return;\n }\n this.open = false;\n this.handleInteraction('dismiss');\n }\n\n protected handleDismiss(): void {\n this.handleInteraction('dismiss');\n }\n\n protected handleConfirm(): void {\n this.handleInteraction('confirm');\n }\n\n override render(): TemplateResult {\n return html`\n <dialog @close=\"${this.handleDialogClose}\">\n ${this.renderIcon()}\n ${this.renderTitle()}\n ${this.renderBody()}\n ${this.renderButtons()}\n </dialog>\n `;\n }\n\n protected renderIcon(): TemplateResult {\n const classes: ClassInfo = {\n icon: true,\n 'with-icon': this.hasIcon,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"icon\"><slot name=\"icon\" @slotchange=\"${this.handleSlotChange}\"></slot></div>\n `;\n }\n\n protected renderTitle(): TemplateResult {\n const classes: ClassInfo = {\n title: true,\n 'with-title': this.hasTitle,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"title\"><slot name=\"title\" @slotchange=\"${this.handleSlotChange}\"></slot></div>\n `;\n }\n\n protected renderBody(): TemplateResult {\n return html`\n <div class=\"content\"><slot></slot></div>\n `;\n }\n\n protected renderButtons(): TemplateResult {\n const classes: ClassInfo = {\n buttons: true,\n 'with-buttons': this.hasButton || !!this.confirmLabel || !!this.dismissLabel,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"button\">\n <slot name=\"button\" @slotchange=\"${this.handleSlotChange}\"></slot>\n ${this.renderDismissButton()}\n </div>\n `;\n }\n\n protected renderDismissButton(): TemplateResult | typeof nothing {\n const { dismissLabel } = this;\n if (!dismissLabel) {\n return nothing;\n }\n return html`\n <ui-button value=\"dismiss\" type=\"text\" class=\"internal-button\" @click=\"${this.handleDismiss}\">${dismissLabel}</ui-button>\n `;\n }\n\n protected renderConfirmButton(): TemplateResult | typeof nothing {\n const { confirmLabel } = this;\n if (!confirmLabel) {\n return nothing;\n }\n return html`\n <ui-button value=\"confirm\" type=\"text\" class=\"internal-button\" @click=\"${this.handleConfirm}\">${confirmLabel}</ui-button>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"UiDialog.js","sourceRoot":"","sources":["../../../src/ui/dialog/UiDialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, PropertyValues, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements, queryAssignedNodes, state } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\nimport UiButton from \"../button/UiButton.js\";\nimport '../../define/ui/ui-button.js'\n\nexport interface UiDialogClosingReason {\n /**\n * Whether the dialog was cancelled by either activating the `dismiss` button\n * or by pressing escape.\n */\n cancelled: boolean;\n /**\n * This is used in cases when the dialog has more complex purpose.\n * This is the value expected from the dialog.\n */\n value?: unknown;\n}\n\n/**\n * Styled dialog using a native `<dialog>` element under the hood.\n * Note, since native dialog renders in the top layer it is not necessary \n * to place the dialog in the `<body>`.\n * \n * ## Using buttons\n * \n * The dialog automatically recognizes buttons with values `confirm` and `dismiss` \n * to close the dialog and dispatch the `close` event. The event has additional \n * closing reason detail.\n * \n * ```javascript\n * <ui-button value=\"dismiss\">Cancel</ui-button> \n * <ui-button value=\"confirm\">Take action</ui-button> \n * ```\n * \n * ```javascript\n * <button value=\"dismiss\">Cancel</button> \n * <button value=\"confirm\">Take action</button> \n * ```\n * \n * The detail object of the `close` event has the following properties:\n * - cancelled - Whether the dialog was cancelled by either activating the `dismiss` button or by pressing escape.\n * \n * The `close` event is only dispatched when the user interact with the dialog. Imperative control of the \n * dialog won't trigger the close button. \n * \n * ## Full example\n * \n * ```javascript\n * <ui-dialog modal>\n * <ui-icon slot=\"icon\" icon=\"delete\"></ui-icon>\n * \n * <span slot=\"title\">Delete photos?</span>\n * <p>This action will permanently remove the selected pictures from your account.</p>\n * \n * <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n * <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Confirm</ui-button>\n * </ui-dialog>\n * ```\n * \n * @slot - The slot for the content of the dialog.\n * @slot icon - The slot to place the dialog icon\n * @slot title - The slot to place the dialog title. Do not put elements here, just the text.\n * @slot button - The slot to place the dialog buttons. Use the `confirm` or `dismiss` buttons to automatically close the dialog.\n * @fires close - A non-bubbling, non-cancellable event with the `UiDialogClosingReason` as the detail.\n */\nexport default class UiDialog extends UiElement {\n get disabled(): boolean {\n return isDisabled(this);\n }\n\n /**\n * When set, the button is a disabled state.\n * @attribute\n */\n @property({ reflect: true, type: Boolean })\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * Opens the dialog as modal when toggling dialog's open state.\n * @attribute\n */\n @property({ type: Boolean }) modal = false;\n\n /**\n * Toggles visibility of the dialog.\n * Note, the dialog is opened asynchronously after the update is performed.\n * @attribute\n */\n @property({ type: Boolean }) open = false;\n\n /**\n * Imperative access to create a dismiss button.\n * When set this will render a dismiss button at the end of the buttons line, before the `confirmLabel` button.\n * @attribute\n */\n @property({ type: String }) dismissLabel?: string;\n\n /**\n * Imperative access to create a confirm button.\n * When set this will render a confirm button at the end of the buttons line, after the `dismissLabel` button.\n * @attribute\n */\n @property({ type: String }) confirmLabel?: string;\n\n /**\n * A reference to the underlying dialog element.\n */\n @query('dialog') readonly dialog!: HTMLDialogElement;\n\n @state() protected hasIcon = false;\n\n @state() protected hasTitle = false;\n\n @state() protected hasButton = false;\n\n @queryAssignedElements({ flatten: true, slot: 'icon' }) protected readonly icons!: HTMLElement[];\n\n @queryAssignedNodes({ flatten: true, slot: 'title' }) protected readonly titles!: HTMLElement[];\n\n @queryAssignedElements({ flatten: true, slot: 'button' }) protected readonly buttons!: HTMLElement[];\n\n /**\n * To be set by a child class when closing the dialog.\n * This is passed to the close event.\n */\n dialogValue?: unknown;\n\n constructor() {\n super();\n\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeyDown);\n }\n\n override handleClick(e: MouseEvent): void {\n super.handleClick(e);\n const path = e.composedPath();\n const { buttons } = this;\n const button = path.find(i => buttons.includes(i as HTMLElement)) as HTMLButtonElement | UiButton | undefined;\n if (!button) {\n return;\n }\n const { value ='' } = button;\n this.handleInteraction(value as 'dismiss' | 'confirm');\n }\n\n override handleKeyDown(e: KeyboardEvent): void {\n super.handleKeyDown(e);\n if (e.key === 'Escape') {\n this.handleInteraction('dismiss');\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('open')) {\n this.controlVisibility();\n }\n super.updated(changedProperties);\n }\n\n protected controlVisibility(): void {\n const { dialog, modal, open } = this;\n if (!dialog) {\n return;\n }\n if (open) {\n if (modal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n } else {\n dialog.close();\n }\n }\n\n protected handleSlotChange(): void {\n const { icons, titles, buttons } = this;\n this.hasIcon = !!icons && !!icons.length;\n this.hasTitle = !!titles && !!titles.length;\n this.hasButton = !!buttons && !!buttons.length;\n }\n\n protected handleInteraction(value: 'dismiss' | 'confirm'): void {\n if (!['dismiss', 'confirm'].includes(value)) {\n return;\n }\n this.open = false;\n const detail: UiDialogClosingReason = {\n cancelled: value === 'dismiss',\n }\n if (this.dialogValue !== undefined) {\n detail.value = this.dialogValue;\n }\n this.dispatchEvent(new CustomEvent<UiDialogClosingReason>('close', {\n composed: true,\n detail,\n }));\n }\n\n protected handleDialogClose(): void {\n if (!this.open) {\n return;\n }\n this.open = false;\n this.handleInteraction('dismiss');\n }\n\n protected handleDismiss(): void {\n this.handleInteraction('dismiss');\n }\n\n protected handleConfirm(): void {\n this.handleInteraction('confirm');\n }\n\n override render(): TemplateResult {\n return html`\n <dialog @close=\"${this.handleDialogClose}\">\n ${this.renderIcon()}\n ${this.renderTitle()}\n ${this.renderBody()}\n ${this.renderButtons()}\n </dialog>\n `;\n }\n\n protected renderIcon(): TemplateResult {\n const classes: ClassInfo = {\n icon: true,\n 'with-icon': this.hasIcon,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"icon\"><slot name=\"icon\" @slotchange=\"${this.handleSlotChange}\"></slot></div>\n `;\n }\n\n protected renderTitle(): TemplateResult {\n const classes: ClassInfo = {\n title: true,\n 'with-title': this.hasTitle,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"title\"><slot name=\"title\" @slotchange=\"${this.handleSlotChange}\"></slot></div>\n `;\n }\n\n protected renderBody(): TemplateResult {\n return html`\n <div class=\"content\"><slot></slot></div>\n `;\n }\n\n protected renderButtons(): TemplateResult {\n const classes: ClassInfo = {\n buttons: true,\n 'with-buttons': this.hasButton || !!this.confirmLabel || !!this.dismissLabel,\n };\n return html`\n <div class=\"${classMap(classes)}\" part=\"button\">\n <slot name=\"button\" @slotchange=\"${this.handleSlotChange}\"></slot>\n ${this.renderDismissButton()}\n ${this.renderConfirmButton()}\n </div>\n `;\n }\n\n protected renderDismissButton(): TemplateResult | typeof nothing {\n const { dismissLabel } = this;\n if (!dismissLabel) {\n return nothing;\n }\n return html`\n <ui-button value=\"dismiss\" type=\"text\" class=\"internal-button\" @click=\"${this.handleDismiss}\">${dismissLabel}</ui-button>\n `;\n }\n\n protected renderConfirmButton(): TemplateResult | typeof nothing {\n const { confirmLabel } = this;\n if (!confirmLabel) {\n return nothing;\n }\n return html`\n <ui-button value=\"confirm\" type=\"text\" class=\"internal-button\" @click=\"${this.handleConfirm}\">${confirmLabel}</ui-button>\n `;\n }\n}\n"]}
@@ -18,30 +18,32 @@ const SOFT_EDGE_CONTAINER_RATIO = 0.35;
18
18
  const PRESS_PSEUDO = '::after';
19
19
  const ANIMATION_FILL = 'forwards';
20
20
  export default class UiRipple extends LitElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ /**
24
+ * @attribute
25
+ */
26
+ this.unbounded = false;
27
+ /**
28
+ * @attribute
29
+ */
30
+ this.disabled = false;
31
+ this.hovered = false;
32
+ this.focused = false;
33
+ this.pressed = false;
34
+ this.rippleSize = '';
35
+ this.rippleScale = '';
36
+ this.initialSize = 0;
37
+ this.pressAnimationSignal = createAnimationSignal();
38
+ this.growAnimation = null;
39
+ this.delayedEndPressHandle = null;
40
+ }
21
41
  static get styles() {
22
42
  return elementStyles;
23
43
  }
24
- mdRoot;
25
- /**
26
- * @attribute
27
- */
28
- unbounded = false;
29
- /**
30
- * @attribute
31
- */
32
- disabled = false;
33
- hovered = false;
34
- focused = false;
35
- pressed = false;
36
44
  get isPressed() {
37
45
  return this.pressed;
38
46
  }
39
- rippleSize = '';
40
- rippleScale = '';
41
- initialSize = 0;
42
- pressAnimationSignal = createAnimationSignal();
43
- growAnimation = null;
44
- delayedEndPressHandle = null;
45
47
  render() {
46
48
  return html `<div class="surface ${classMap(this.getRenderRippleClasses())}"></div>`;
47
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../src/ui/effects/ripple.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 { CSSResult, html, LitElement, PropertyValues, TemplateResult } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport elementStyles from './ripple.styles.js';\n\nimport { createAnimationSignal, Easing } from '../motion/animation.js';\n\nconst PRESS_GROW_MS = 450;\nconst MINIMUM_PRESS_MS = 225;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst PRESS_PSEUDO = '::after';\nconst ANIMATION_FILL = 'forwards';\n\ninterface IPoint {\n x: number;\n y: number;\n}\n\n\nexport default class UiRipple extends LitElement {\n static override get styles(): CSSResult | CSSResult[] {\n return elementStyles;\n }\n\n @query('.surface') mdRoot!: HTMLElement;\n \n /**\n * @attribute\n */\n @property({ type: Boolean }) unbounded = false;\n\n /**\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @state() protected hovered = false;\n\n @state() protected focused = false;\n\n @state() protected pressed = false;\n\n get isPressed(): boolean {\n return this.pressed;\n }\n\n protected rippleSize = '';\n\n protected rippleScale = '';\n\n protected initialSize = 0;\n\n protected pressAnimationSignal = createAnimationSignal();\n\n protected growAnimation: Animation | null = null;\n\n protected delayedEndPressHandle: number | null = null;\n\n protected override render(): TemplateResult {\n return html`<div class=\"surface ${classMap(this.getRenderRippleClasses())}\"></div>`;\n }\n\n /** @soyTemplate */\n protected getRenderRippleClasses(): ClassInfo {\n return {\n 'hovered': this.hovered,\n 'focused': this.focused,\n 'pressed': this.pressed,\n 'unbounded': this.unbounded,\n };\n }\n\n protected override update(changedProps: PropertyValues<this>): void {\n if (changedProps.has('disabled') && this.disabled) {\n this.endHover();\n this.endFocus();\n this.endPress();\n }\n super.update(changedProps);\n }\n\n protected getDimensions(): DOMRect {\n return (this.parentElement ?? this).getBoundingClientRect();\n }\n\n protected determineRippleSize(): void {\n const { height, width } = this.getDimensions();\n const maxDim = Math.max(height, width);\n const softEdgeSize =\n Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDim, SOFT_EDGE_MINIMUM_SIZE);\n\n\n let maxRadius = maxDim;\n let initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n\n const hypotenuse = Math.sqrt(width ** 2 + height ** 2);\n maxRadius = hypotenuse + PADDING;\n\n // ensure `initialSize` is even for unbounded\n if (this.unbounded) {\n initialSize -= (initialSize % 2);\n }\n\n this.initialSize = initialSize;\n this.rippleScale = `${(maxRadius + softEdgeSize) / initialSize}`;\n this.rippleSize = `${this.initialSize}px`;\n }\n\n protected getNormalizedPointerEventCoords(pointerEvent: PointerEvent): IPoint {\n const { scrollX, scrollY } = window;\n const { left, top } = this.getDimensions();\n const documentX = scrollX + left;\n const documentY = scrollY + top;\n const { pageX, pageY } = pointerEvent;\n return { x: pageX - documentX, y: pageY - documentY };\n }\n\n protected getTranslationCoordinates(positionEvent?: Event | null): { startPoint: IPoint; endPoint: IPoint; } {\n const { height, width } = this.getDimensions();\n // end in the center\n const endPoint = {\n x: (width - this.initialSize) / 2,\n y: (height - this.initialSize) / 2,\n };\n\n let startPoint;\n if (positionEvent instanceof PointerEvent) {\n startPoint = this.getNormalizedPointerEventCoords(positionEvent);\n } else {\n startPoint = {\n x: width / 2,\n y: height / 2,\n };\n }\n\n // center around start point\n startPoint = {\n x: startPoint.x - (this.initialSize / 2),\n y: startPoint.y - (this.initialSize / 2),\n };\n\n return { startPoint, endPoint };\n }\n\n protected startPressAnimation(positionEvent?: Event | null): void {\n this.determineRippleSize();\n const { startPoint, endPoint } =\n this.getTranslationCoordinates(positionEvent);\n const translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n const translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n\n const signal = this.pressAnimationSignal.start();\n\n const growAnimation = this.mdRoot.animate(\n {\n top: [0, 0],\n left: [0, 0],\n height: [this.rippleSize, this.rippleSize],\n width: [this.rippleSize, this.rippleSize],\n transform: [\n `translate(${translateStart}) scale(1)`,\n `translate(${translateEnd}) scale(${this.rippleScale})`\n ],\n },\n {\n pseudoElement: PRESS_PSEUDO,\n duration: PRESS_GROW_MS,\n easing: Easing.STANDARD,\n fill: ANIMATION_FILL\n });\n\n growAnimation.addEventListener('finish', () => {\n this.pressAnimationSignal.finish();\n this.growAnimation = null;\n });\n\n signal.addEventListener('abort', () => {\n growAnimation.cancel();\n this.growAnimation = null;\n });\n\n this.growAnimation = growAnimation;\n }\n\n beginHover(hoverEvent?: Event): void {\n if ((hoverEvent as PointerEvent)?.pointerType !== 'touch') {\n this.hovered = true;\n }\n }\n\n endHover(): void {\n this.hovered = false;\n }\n\n beginFocus(): void {\n this.focused = true;\n }\n\n endFocus(): void {\n this.focused = false;\n }\n\n beginPress(positionEvent?: Event | null): void {\n this.pressed = true;\n if (this.delayedEndPressHandle !== null) {\n clearTimeout(this.delayedEndPressHandle);\n this.delayedEndPressHandle = null;\n }\n this.startPressAnimation(positionEvent);\n }\n\n endPress(): void {\n const pressAnimationPlayState = this.growAnimation?.currentTime ?? Infinity;\n if (pressAnimationPlayState >= MINIMUM_PRESS_MS) {\n this.pressed = false;\n } else {\n this.delayedEndPressHandle = setTimeout(() => {\n this.pressed = false;\n this.delayedEndPressHandle = null;\n }, MINIMUM_PRESS_MS - pressAnimationPlayState) as unknown as number;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../src/ui/effects/ripple.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAa,IAAI,EAAE,UAAU,EAAkC,MAAM,KAAK,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAa,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEvE,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,cAAc,GAAG,UAAU,CAAC;AAQlC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,UAAU;IAAhD;;QAOE;;WAEG;QAC0B,cAAS,GAAG,KAAK,CAAC;QAE/C;;WAEG;QACyC,aAAQ,GAAG,KAAK,CAAC;QAE1C,YAAO,GAAG,KAAK,CAAC;QAEhB,YAAO,GAAG,KAAK,CAAC;QAEhB,YAAO,GAAG,KAAK,CAAC;QAMzB,eAAU,GAAG,EAAE,CAAC;QAEhB,gBAAW,GAAG,EAAE,CAAC;QAEjB,gBAAW,GAAG,CAAC,CAAC;QAEhB,yBAAoB,GAAG,qBAAqB,EAAE,CAAC;QAE/C,kBAAa,GAAqB,IAAI,CAAC;QAEvC,0BAAqB,GAAkB,IAAI,CAAC;IAsKxD,CAAC;IA1MC,MAAM,KAAc,MAAM;QACxB,OAAO,aAAa,CAAC;IACvB,CAAC;IAoBD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAckB,MAAM;QACvB,OAAO,IAAI,CAAA,uBAAuB,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,UAAU,CAAC;IACtF,CAAC;IAED,mBAAmB;IACT,sBAAsB;QAC9B,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,WAAW,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAEkB,MAAM,CAAC,YAAkC;QAC1D,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QACD,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAES,aAAa;QACrB,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAC9D,CAAC;IAES,mBAAmB;QAC3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,YAAY,GAChB,IAAI,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAGvE,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;QAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC;QACvD,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;QAEjC,6CAA6C;QAC7C,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,WAAW,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;SAClC;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,WAAW,EAAE,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;IAC5C,CAAC;IAES,+BAA+B,CAAC,YAA0B;QAClE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,GAAG,GAAG,CAAC;QAChC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,CAAC;IACxD,CAAC;IAES,yBAAyB,CAAC,aAA4B;QAC9D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/C,oBAAoB;QACpB,MAAM,QAAQ,GAAG;YACf,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACjC,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;SACnC,CAAC;QAEF,IAAI,UAAU,CAAC;QACf,IAAI,aAAa,YAAY,YAAY,EAAE;YACzC,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,aAAa,CAAC,CAAC;SAClE;aAAM;YACL,UAAU,GAAG;gBACX,CAAC,EAAE,KAAK,GAAG,CAAC;gBACZ,CAAC,EAAE,MAAM,GAAG,CAAC;aACd,CAAC;SACH;QAED,4BAA4B;QAC5B,UAAU,GAAG;YACX,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACxC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACzC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;IAES,mBAAmB,CAAC,aAA4B;QACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAC5B,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,GAAG,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC;QAC9D,MAAM,YAAY,GAAG,GAAG,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC;QAExD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAEjD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CACvC;YACE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACZ,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;YAC1C,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE;gBACT,aAAa,cAAc,YAAY;gBACvC,aAAa,YAAY,WAAW,IAAI,CAAC,WAAW,GAAG;aACxD;SACF,EACD;YACE,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,MAAM,CAAC,QAAQ;YACvB,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QAEL,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC5C,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACpC,aAAa,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,IAAK,UAA2B,EAAE,WAAW,KAAK,OAAO,EAAE;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;IACH,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,aAA4B;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,EAAE;YACvC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACnC;QACD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ;QACN,MAAM,uBAAuB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,IAAI,QAAQ,CAAC;QAC5E,IAAI,uBAAuB,IAAI,gBAAgB,EAAE;YAC/C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACtB;aAAM;YACL,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACpC,CAAC,EAAE,gBAAgB,GAAG,uBAAuB,CAAsB,CAAC;SACrE;IACH,CAAC;CACF;AAtMoB;IAAlB,KAAK,CAAC,UAAU,CAAC;wCAAsB;AAKX;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2CAAmB;AAKH;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;0CAAkB;AAEpD;IAAR,KAAK,EAAE;yCAA2B;AAE1B;IAAR,KAAK,EAAE;yCAA2B;AAE1B;IAAR,KAAK,EAAE;yCAA2B","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CSSResult, html, LitElement, PropertyValues, TemplateResult } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport elementStyles from './ripple.styles.js';\n\nimport { createAnimationSignal, Easing } from '../motion/animation.js';\n\nconst PRESS_GROW_MS = 450;\nconst MINIMUM_PRESS_MS = 225;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst PRESS_PSEUDO = '::after';\nconst ANIMATION_FILL = 'forwards';\n\ninterface IPoint {\n x: number;\n y: number;\n}\n\n\nexport default class UiRipple extends LitElement {\n static override get styles(): CSSResult | CSSResult[] {\n return elementStyles;\n }\n\n @query('.surface') mdRoot!: HTMLElement;\n \n /**\n * @attribute\n */\n @property({ type: Boolean }) unbounded = false;\n\n /**\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @state() protected hovered = false;\n\n @state() protected focused = false;\n\n @state() protected pressed = false;\n\n get isPressed(): boolean {\n return this.pressed;\n }\n\n protected rippleSize = '';\n\n protected rippleScale = '';\n\n protected initialSize = 0;\n\n protected pressAnimationSignal = createAnimationSignal();\n\n protected growAnimation: Animation | null = null;\n\n protected delayedEndPressHandle: number | null = null;\n\n protected override render(): TemplateResult {\n return html`<div class=\"surface ${classMap(this.getRenderRippleClasses())}\"></div>`;\n }\n\n /** @soyTemplate */\n protected getRenderRippleClasses(): ClassInfo {\n return {\n 'hovered': this.hovered,\n 'focused': this.focused,\n 'pressed': this.pressed,\n 'unbounded': this.unbounded,\n };\n }\n\n protected override update(changedProps: PropertyValues<this>): void {\n if (changedProps.has('disabled') && this.disabled) {\n this.endHover();\n this.endFocus();\n this.endPress();\n }\n super.update(changedProps);\n }\n\n protected getDimensions(): DOMRect {\n return (this.parentElement ?? this).getBoundingClientRect();\n }\n\n protected determineRippleSize(): void {\n const { height, width } = this.getDimensions();\n const maxDim = Math.max(height, width);\n const softEdgeSize =\n Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDim, SOFT_EDGE_MINIMUM_SIZE);\n\n\n let maxRadius = maxDim;\n let initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n\n const hypotenuse = Math.sqrt(width ** 2 + height ** 2);\n maxRadius = hypotenuse + PADDING;\n\n // ensure `initialSize` is even for unbounded\n if (this.unbounded) {\n initialSize -= (initialSize % 2);\n }\n\n this.initialSize = initialSize;\n this.rippleScale = `${(maxRadius + softEdgeSize) / initialSize}`;\n this.rippleSize = `${this.initialSize}px`;\n }\n\n protected getNormalizedPointerEventCoords(pointerEvent: PointerEvent): IPoint {\n const { scrollX, scrollY } = window;\n const { left, top } = this.getDimensions();\n const documentX = scrollX + left;\n const documentY = scrollY + top;\n const { pageX, pageY } = pointerEvent;\n return { x: pageX - documentX, y: pageY - documentY };\n }\n\n protected getTranslationCoordinates(positionEvent?: Event | null): { startPoint: IPoint; endPoint: IPoint; } {\n const { height, width } = this.getDimensions();\n // end in the center\n const endPoint = {\n x: (width - this.initialSize) / 2,\n y: (height - this.initialSize) / 2,\n };\n\n let startPoint;\n if (positionEvent instanceof PointerEvent) {\n startPoint = this.getNormalizedPointerEventCoords(positionEvent);\n } else {\n startPoint = {\n x: width / 2,\n y: height / 2,\n };\n }\n\n // center around start point\n startPoint = {\n x: startPoint.x - (this.initialSize / 2),\n y: startPoint.y - (this.initialSize / 2),\n };\n\n return { startPoint, endPoint };\n }\n\n protected startPressAnimation(positionEvent?: Event | null): void {\n this.determineRippleSize();\n const { startPoint, endPoint } =\n this.getTranslationCoordinates(positionEvent);\n const translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n const translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n\n const signal = this.pressAnimationSignal.start();\n\n const growAnimation = this.mdRoot.animate(\n {\n top: [0, 0],\n left: [0, 0],\n height: [this.rippleSize, this.rippleSize],\n width: [this.rippleSize, this.rippleSize],\n transform: [\n `translate(${translateStart}) scale(1)`,\n `translate(${translateEnd}) scale(${this.rippleScale})`\n ],\n },\n {\n pseudoElement: PRESS_PSEUDO,\n duration: PRESS_GROW_MS,\n easing: Easing.STANDARD,\n fill: ANIMATION_FILL\n });\n\n growAnimation.addEventListener('finish', () => {\n this.pressAnimationSignal.finish();\n this.growAnimation = null;\n });\n\n signal.addEventListener('abort', () => {\n growAnimation.cancel();\n this.growAnimation = null;\n });\n\n this.growAnimation = growAnimation;\n }\n\n beginHover(hoverEvent?: Event): void {\n if ((hoverEvent as PointerEvent)?.pointerType !== 'touch') {\n this.hovered = true;\n }\n }\n\n endHover(): void {\n this.hovered = false;\n }\n\n beginFocus(): void {\n this.focused = true;\n }\n\n endFocus(): void {\n this.focused = false;\n }\n\n beginPress(positionEvent?: Event | null): void {\n this.pressed = true;\n if (this.delayedEndPressHandle !== null) {\n clearTimeout(this.delayedEndPressHandle);\n this.delayedEndPressHandle = null;\n }\n this.startPressAnimation(positionEvent);\n }\n\n endPress(): void {\n const pressAnimationPlayState = this.growAnimation?.currentTime ?? Infinity;\n if (pressAnimationPlayState >= MINIMUM_PRESS_MS) {\n this.pressed = false;\n } else {\n this.delayedEndPressHandle = setTimeout(() => {\n this.pressed = false;\n this.delayedEndPressHandle = null;\n }, MINIMUM_PRESS_MS - pressAnimationPlayState) as unknown as number;\n }\n }\n}\n"]}
@@ -56,15 +56,14 @@ var State;
56
56
  State[State["WAITING_FOR_CLICK"] = 3] = "WAITING_FOR_CLICK";
57
57
  })(State || (State = {}));
58
58
  class RippleDirective extends Directive {
59
- rippleGetter = async () => null;
60
- element;
61
- state = State.INACTIVE;
62
- checkBoundsAfterContextMenu = false;
63
- rippleStartEvent = null;
64
- touchTimer = null;
65
- clickTimer = null;
66
59
  constructor(partInfo) {
67
60
  super(partInfo);
61
+ this.rippleGetter = async () => null;
62
+ this.state = State.INACTIVE;
63
+ this.checkBoundsAfterContextMenu = false;
64
+ this.rippleStartEvent = null;
65
+ this.touchTimer = null;
66
+ this.clickTimer = null;
68
67
  if (partInfo.type !== PartType.ELEMENT) {
69
68
  throw new Error('The `ripple` directive must be used on an element');
70
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rippleDirective.js","sourceRoot":"","sources":["../../../src/ui/effects/rippleDirective.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 { noChange } from 'lit';\nimport { Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType } from 'lit/directive.js';\n\nimport Ripple from './ripple.js';\n\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nenum State {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n INACTIVE,\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.\n */\n TOUCH_DELAY,\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n HOLDING,\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click endPress(); transition to `INACTIVE`.\n */\n WAITING_FOR_CLICK\n}\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple | null | Promise<Ripple | null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n\n private element?: HTMLElement;\n\n private state: State = State.INACTIVE;\n\n private checkBoundsAfterContextMenu = false;\n\n private rippleStartEvent: PointerEvent | null = null;\n\n private touchTimer: number | null = null;\n\n private clickTimer: number | null = null;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(ripple: RippleFunction | Promise<Ripple | null>): typeof noChange {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event): Promise<void> {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n this.click(ripple);\n break;\n case 'contextmenu':\n this.contextMenu(ripple);\n break;\n case 'pointercancel':\n this.pointerCancel(ripple, event as PointerEvent);\n break;\n case 'pointerdown':\n this.pointerDown(ripple, event as PointerEvent);\n break;\n case 'pointerenter':\n this.pointerEnter(ripple, event as PointerEvent);\n break;\n case 'pointerleave':\n this.pointerLeave(ripple, event as PointerEvent);\n break;\n case 'pointerup':\n this.pointerUp(ripple, event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>): typeof noChange {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : (): Promise<Ripple | null> => ripple;\n return noChange;\n }\n\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n private shouldReactToEvent(ripple: Ripple, ev: PointerEvent, hovering = false): boolean {\n const enabled = !ripple.disabled;\n const isPrimaryPointer = ev.isPrimary;\n const isInteractionPointer = this.rippleStartEvent === null ||\n this.rippleStartEvent.pointerId === ev.pointerId;\n const isPrimaryButton = ev.buttons === 1;\n return enabled && isPrimaryPointer && isInteractionPointer &&\n (this.isTouch(ev) || isPrimaryButton || hovering);\n }\n\n private isTouch({ pointerType }: PointerEvent): boolean {\n return pointerType === 'touch';\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({ x, y }: PointerEvent): boolean {\n const { top, left, bottom, right } = (this.element as HTMLElement).getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private beginPress(ripple: Ripple): void {\n ripple.beginPress(this.rippleStartEvent);\n }\n\n private endPress(ripple: Ripple): void {\n ripple.endPress();\n this.state = State.INACTIVE;\n this.rippleStartEvent = null;\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n this.touchTimer = null;\n }\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n }\n }\n\n private waitForTouchHold(): void {\n if (this.touchTimer !== null) {\n clearTimeout(this.touchTimer);\n }\n this.state = State.TOUCH_DELAY;\n this.touchTimer = setTimeout(async () => {\n const ripple = await this.rippleGetter();\n if (ripple === null || this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.beginPress(ripple);\n }, TOUCH_DELAY_MS) as unknown as number;\n }\n\n private click(ripple: Ripple): void {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (ripple.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPress(ripple);\n } else if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.beginPress(ripple);\n this.endPress(ripple);\n }\n }\n\n private contextMenu(ripple: Ripple): void {\n if (!ripple.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.endPress(ripple);\n }\n }\n\n private pointerDown(ripple: Ripple, ev: PointerEvent): void {\n if (!this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n this.rippleStartEvent = ev;\n if (this.isTouch(ev)) {\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(ev)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.waitForTouchHold();\n } else {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerUp(ripple: Ripple, ev: PointerEvent): void {\n if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n } else if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerCancel(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev)) {\n this.endPress(ripple);\n }\n }\n\n private pointerEnter(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.beginHover(ev);\n }\n }\n\n private pointerLeave(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.endHover();\n // release a held mouse or pen press that moves outside the element\n if (!this.isTouch(ev) && this.state !== State.INACTIVE) {\n this.endPress(ripple);\n }\n }\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);\n"]}
1
+ {"version":3,"file":"rippleDirective.js","sourceRoot":"","sources":["../../../src/ui/effects/rippleDirective.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 { noChange } from 'lit';\nimport { Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType } from 'lit/directive.js';\n\nimport Ripple from './ripple.js';\n\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nenum State {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n INACTIVE,\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.\n */\n TOUCH_DELAY,\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n HOLDING,\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click endPress(); transition to `INACTIVE`.\n */\n WAITING_FOR_CLICK\n}\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple | null | Promise<Ripple | null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n\n private element?: HTMLElement;\n\n private state: State = State.INACTIVE;\n\n private checkBoundsAfterContextMenu = false;\n\n private rippleStartEvent: PointerEvent | null = null;\n\n private touchTimer: number | null = null;\n\n private clickTimer: number | null = null;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(ripple: RippleFunction | Promise<Ripple | null>): typeof noChange {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event): Promise<void> {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n this.click(ripple);\n break;\n case 'contextmenu':\n this.contextMenu(ripple);\n break;\n case 'pointercancel':\n this.pointerCancel(ripple, event as PointerEvent);\n break;\n case 'pointerdown':\n this.pointerDown(ripple, event as PointerEvent);\n break;\n case 'pointerenter':\n this.pointerEnter(ripple, event as PointerEvent);\n break;\n case 'pointerleave':\n this.pointerLeave(ripple, event as PointerEvent);\n break;\n case 'pointerup':\n this.pointerUp(ripple, event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>): typeof noChange {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : (): Promise<Ripple | null> => ripple;\n return noChange;\n }\n\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n private shouldReactToEvent(ripple: Ripple, ev: PointerEvent, hovering = false): boolean {\n const enabled = !ripple.disabled;\n const isPrimaryPointer = ev.isPrimary;\n const isInteractionPointer = this.rippleStartEvent === null ||\n this.rippleStartEvent.pointerId === ev.pointerId;\n const isPrimaryButton = ev.buttons === 1;\n return enabled && isPrimaryPointer && isInteractionPointer &&\n (this.isTouch(ev) || isPrimaryButton || hovering);\n }\n\n private isTouch({ pointerType }: PointerEvent): boolean {\n return pointerType === 'touch';\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({ x, y }: PointerEvent): boolean {\n const { top, left, bottom, right } = (this.element as HTMLElement).getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private beginPress(ripple: Ripple): void {\n ripple.beginPress(this.rippleStartEvent);\n }\n\n private endPress(ripple: Ripple): void {\n ripple.endPress();\n this.state = State.INACTIVE;\n this.rippleStartEvent = null;\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n this.touchTimer = null;\n }\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n }\n }\n\n private waitForTouchHold(): void {\n if (this.touchTimer !== null) {\n clearTimeout(this.touchTimer);\n }\n this.state = State.TOUCH_DELAY;\n this.touchTimer = setTimeout(async () => {\n const ripple = await this.rippleGetter();\n if (ripple === null || this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.beginPress(ripple);\n }, TOUCH_DELAY_MS) as unknown as number;\n }\n\n private click(ripple: Ripple): void {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (ripple.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPress(ripple);\n } else if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.beginPress(ripple);\n this.endPress(ripple);\n }\n }\n\n private contextMenu(ripple: Ripple): void {\n if (!ripple.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.endPress(ripple);\n }\n }\n\n private pointerDown(ripple: Ripple, ev: PointerEvent): void {\n if (!this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n this.rippleStartEvent = ev;\n if (this.isTouch(ev)) {\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(ev)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.waitForTouchHold();\n } else {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerUp(ripple: Ripple, ev: PointerEvent): void {\n if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n } else if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerCancel(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev)) {\n this.endPress(ripple);\n }\n }\n\n private pointerEnter(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.beginHover(ev);\n }\n }\n\n private pointerLeave(ripple: Ripple, ev: PointerEvent): void {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.endHover();\n // release a held mouse or pen press that moves outside the element\n if (!this.isTouch(ev) && this.state !== State.INACTIVE) {\n this.endPress(ripple);\n }\n }\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);\n"]}