@api-client/ui 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/dist/amf/lib/AmfParameters.js +0 -4
  2. package/dist/amf/lib/AmfParameters.js.map +1 -1
  3. package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
  4. package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
  5. package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
  6. package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
  7. package/dist/amf/store/AmfGraphStore.js +0 -2
  8. package/dist/amf/store/AmfGraphStore.js.map +1 -1
  9. package/dist/amf/store/AmfStore.js +0 -7
  10. package/dist/amf/store/AmfStore.js.map +1 -1
  11. package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
  12. package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
  13. package/dist/bindings/base/PlatformBindings.js +6 -10
  14. package/dist/bindings/base/PlatformBindings.js.map +1 -1
  15. package/dist/bindings/base/ProxyBindings.js +9 -6
  16. package/dist/bindings/base/ProxyBindings.js.map +1 -1
  17. package/dist/bindings/base/SharedWorkerThread.js +4 -1
  18. package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
  19. package/dist/bindings/base/StoreBindings.js +162 -170
  20. package/dist/bindings/base/StoreBindings.js.map +1 -1
  21. package/dist/bindings/web/WebConfigurationBindings.js +22 -24
  22. package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
  23. package/dist/bindings/web/WebFileBindings.js +7 -4
  24. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  25. package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
  26. package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
  27. package/dist/bindings/web/WebNavigationBindings.js +4 -1
  28. package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
  29. package/dist/bindings/web/WebProxyBindings.js +5 -6
  30. package/dist/bindings/web/WebProxyBindings.js.map +1 -1
  31. package/dist/bindings/web/WebStoreBindings.js +39 -44
  32. package/dist/bindings/web/WebStoreBindings.js.map +1 -1
  33. package/dist/contextual-menu/ContextualMenu.js +10 -19
  34. package/dist/contextual-menu/ContextualMenu.js.map +1 -1
  35. package/dist/contextual-menu/ContextualMenuElement.js +4 -32
  36. package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
  37. package/dist/contextual-menu/MenuItem.js +0 -12
  38. package/dist/contextual-menu/MenuItem.js.map +1 -1
  39. package/dist/define/amf/api-annotation-document.js +1 -1
  40. package/dist/define/amf/api-annotation-document.js.map +1 -1
  41. package/dist/define/amf/api-authorization-editor.js +1 -1
  42. package/dist/define/amf/api-authorization-editor.js.map +1 -1
  43. package/dist/define/amf/api-channel-document.js +1 -1
  44. package/dist/define/amf/api-channel-document.js.map +1 -1
  45. package/dist/define/amf/api-documentation-document.js +1 -1
  46. package/dist/define/amf/api-documentation-document.js.map +1 -1
  47. package/dist/define/amf/api-documentation.js +1 -1
  48. package/dist/define/amf/api-documentation.js.map +1 -1
  49. package/dist/define/amf/api-navigation.js +1 -1
  50. package/dist/define/amf/api-navigation.js.map +1 -1
  51. package/dist/define/amf/api-operation-document.js +1 -1
  52. package/dist/define/amf/api-operation-document.js.map +1 -1
  53. package/dist/define/amf/api-parameter-document.js +1 -1
  54. package/dist/define/amf/api-parameter-document.js.map +1 -1
  55. package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
  56. package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
  57. package/dist/define/amf/api-payload-document.js +1 -1
  58. package/dist/define/amf/api-payload-document.js.map +1 -1
  59. package/dist/define/amf/api-request-document.js +1 -1
  60. package/dist/define/amf/api-request-document.js.map +1 -1
  61. package/dist/define/amf/api-request-editor.js +1 -1
  62. package/dist/define/amf/api-request-editor.js.map +1 -1
  63. package/dist/define/amf/api-request.js +1 -1
  64. package/dist/define/amf/api-request.js.map +1 -1
  65. package/dist/define/amf/api-resource-document.js +1 -1
  66. package/dist/define/amf/api-resource-document.js.map +1 -1
  67. package/dist/define/amf/api-response-document.js +1 -1
  68. package/dist/define/amf/api-response-document.js.map +1 -1
  69. package/dist/define/amf/api-schema-document.js +1 -1
  70. package/dist/define/amf/api-schema-document.js.map +1 -1
  71. package/dist/define/amf/api-security-document.js +1 -1
  72. package/dist/define/amf/api-security-document.js.map +1 -1
  73. package/dist/define/amf/api-security-requirement-document.js +1 -1
  74. package/dist/define/amf/api-security-requirement-document.js.map +1 -1
  75. package/dist/define/amf/api-server-picker.js +1 -1
  76. package/dist/define/amf/api-server-picker.js.map +1 -1
  77. package/dist/define/amf/api-summary.js +1 -1
  78. package/dist/define/amf/api-summary.js.map +1 -1
  79. package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
  80. package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
  81. package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
  82. package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
  83. package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
  84. package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
  85. package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
  86. package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
  87. package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
  88. package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
  89. package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
  90. package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
  91. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
  92. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
  93. package/dist/define/authorization/apikey-authorization.js +1 -1
  94. package/dist/define/authorization/apikey-authorization.js.map +1 -1
  95. package/dist/define/authorization/basic-authorization.js +1 -1
  96. package/dist/define/authorization/basic-authorization.js.map +1 -1
  97. package/dist/define/authorization/bearer-authorization.js +1 -1
  98. package/dist/define/authorization/bearer-authorization.js.map +1 -1
  99. package/dist/define/authorization/cc-authorization.js +1 -1
  100. package/dist/define/authorization/cc-authorization.js.map +1 -1
  101. package/dist/define/authorization/ntlm-authorization.js +1 -1
  102. package/dist/define/authorization/ntlm-authorization.js.map +1 -1
  103. package/dist/define/authorization/oauth2-authorization.js +1 -1
  104. package/dist/define/authorization/oauth2-authorization.js.map +1 -1
  105. package/dist/define/authorization/oidc-authorization.js +1 -1
  106. package/dist/define/authorization/oidc-authorization.js.map +1 -1
  107. package/dist/define/contextual-menu/contextual-menu.js +1 -1
  108. package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
  109. package/dist/define/dialog/confirm-delete-dialog.js +1 -1
  110. package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
  111. package/dist/define/dialog/rename-dialog.js +1 -1
  112. package/dist/define/dialog/rename-dialog.js.map +1 -1
  113. package/dist/define/files/share-file.js +1 -1
  114. package/dist/define/files/share-file.js.map +1 -1
  115. package/dist/define/har/har-viewer.js +1 -1
  116. package/dist/define/har/har-viewer.js.map +1 -1
  117. package/dist/define/highlight/marked-highlight.js +1 -1
  118. package/dist/define/highlight/marked-highlight.js.map +1 -1
  119. package/dist/define/highlight/prism-highlight.js +1 -1
  120. package/dist/define/highlight/prism-highlight.js.map +1 -1
  121. package/dist/define/http/http-assertions.js +1 -1
  122. package/dist/define/http/http-assertions.js.map +1 -1
  123. package/dist/define/http/http-body-editor.js +1 -1
  124. package/dist/define/http/http-body-editor.js.map +1 -1
  125. package/dist/define/http/http-body-multipart-editor.js +1 -1
  126. package/dist/define/http/http-body-multipart-editor.js.map +1 -1
  127. package/dist/define/http/http-body-text-editor.js +1 -1
  128. package/dist/define/http/http-body-text-editor.js.map +1 -1
  129. package/dist/define/http/http-body-urlencoded-editor.js +1 -1
  130. package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
  131. package/dist/define/http/http-headers-form.js +1 -1
  132. package/dist/define/http/http-headers-form.js.map +1 -1
  133. package/dist/define/http/http-log-body.js +1 -1
  134. package/dist/define/http/http-log-body.js.map +1 -1
  135. package/dist/define/http/http-log-headers.js +1 -1
  136. package/dist/define/http/http-log-headers.js.map +1 -1
  137. package/dist/define/http/http-log-timings.js +1 -1
  138. package/dist/define/http/http-log-timings.js.map +1 -1
  139. package/dist/define/http/http-request-config.js +1 -1
  140. package/dist/define/http/http-request-config.js.map +1 -1
  141. package/dist/define/http/http-request-editor.js +1 -1
  142. package/dist/define/http/http-request-editor.js.map +1 -1
  143. package/dist/define/http/http-request-log.js +1 -1
  144. package/dist/define/http/http-request-log.js.map +1 -1
  145. package/dist/define/http/http-snippets.js +1 -1
  146. package/dist/define/http/http-snippets.js.map +1 -1
  147. package/dist/define/http/http-url-input.js +1 -1
  148. package/dist/define/http/http-url-input.js.map +1 -1
  149. package/dist/define/http/http-url-params-form.js +1 -1
  150. package/dist/define/http/http-url-params-form.js.map +1 -1
  151. package/dist/define/http-project/http-project-request-history.js +1 -1
  152. package/dist/define/http-project/http-project-request-history.js.map +1 -1
  153. package/dist/define/http-project/http-project-request.js +2 -2
  154. package/dist/define/http-project/http-project-request.js.map +1 -1
  155. package/dist/define/http-project/project-navigation.js +1 -1
  156. package/dist/define/http-project/project-navigation.js.map +1 -1
  157. package/dist/define/http-project/project-run-report.js +1 -1
  158. package/dist/define/http-project/project-run-report.js.map +1 -1
  159. package/dist/define/http-project/project-runner.js +2 -2
  160. package/dist/define/http-project/project-runner.js.map +1 -1
  161. package/dist/define/layout/split-view.js +1 -1
  162. package/dist/define/layout/split-view.js.map +1 -1
  163. package/dist/define/schema-design/schema-design-navigation.js +1 -1
  164. package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
  165. package/dist/define/schema-design/schema-namespace-selector.js +1 -1
  166. package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
  167. package/dist/define/ui/ui-button.js +1 -1
  168. package/dist/define/ui/ui-button.js.map +1 -1
  169. package/dist/define/ui/ui-chip.js +1 -1
  170. package/dist/define/ui/ui-chip.js.map +1 -1
  171. package/dist/define/ui/ui-collapse.js +1 -1
  172. package/dist/define/ui/ui-collapse.js.map +1 -1
  173. package/dist/define/ui/ui-dialog.js +1 -1
  174. package/dist/define/ui/ui-dialog.js.map +1 -1
  175. package/dist/define/ui/ui-dropdown-list.js +1 -1
  176. package/dist/define/ui/ui-dropdown-list.js.map +1 -1
  177. package/dist/define/ui/ui-icon-button.js +1 -1
  178. package/dist/define/ui/ui-icon-button.js.map +1 -1
  179. package/dist/define/ui/ui-icon.js +1 -1
  180. package/dist/define/ui/ui-icon.js.map +1 -1
  181. package/dist/define/ui/ui-list-item.js +1 -1
  182. package/dist/define/ui/ui-list-item.js.map +1 -1
  183. package/dist/define/ui/ui-list.js +1 -1
  184. package/dist/define/ui/ui-list.js.map +1 -1
  185. package/dist/define/ui/ui-listbox.js +1 -1
  186. package/dist/define/ui/ui-listbox.js.map +1 -1
  187. package/dist/define/ui/ui-progress.js +1 -1
  188. package/dist/define/ui/ui-progress.js.map +1 -1
  189. package/dist/define/ui/ui-segmented-button-set.js +1 -1
  190. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  191. package/dist/define/ui/ui-segmented-button.js +1 -1
  192. package/dist/define/ui/ui-segmented-button.js.map +1 -1
  193. package/dist/define/ui/ui-snackbar.js +1 -1
  194. package/dist/define/ui/ui-snackbar.js.map +1 -1
  195. package/dist/define/ui/ui-tab.js +1 -1
  196. package/dist/define/ui/ui-tab.js.map +1 -1
  197. package/dist/define/ui/ui-tabs.js +1 -1
  198. package/dist/define/ui/ui-tabs.js.map +1 -1
  199. package/dist/directives/data-attr.js +0 -1
  200. package/dist/directives/data-attr.js.map +1 -1
  201. package/dist/elements/ApiElement.js +0 -7
  202. package/dist/elements/ApiElement.js.map +1 -1
  203. package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
  204. package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
  205. package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
  206. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  207. package/dist/elements/amf/ApiDocumentation.element.js +0 -91
  208. package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
  209. package/dist/elements/amf/ApiDocumentationBase.js +0 -9
  210. package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
  211. package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
  212. package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
  213. package/dist/elements/amf/ApiNavigation.element.js +0 -97
  214. package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
  215. package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
  216. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  217. package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
  218. package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
  219. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
  220. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
  221. package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
  222. package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
  223. package/dist/elements/amf/ApiRequest.element.js +0 -78
  224. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  225. package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
  226. package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
  227. package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
  228. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  229. package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
  230. package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
  231. package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
  232. package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
  233. package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
  234. package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
  235. package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
  236. package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
  237. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
  238. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
  239. package/dist/elements/amf/ApiServerPicker.element.js +2 -65
  240. package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
  241. package/dist/elements/amf/ApiSummary.element.js +0 -26
  242. package/dist/elements/amf/ApiSummary.element.js.map +1 -1
  243. package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
  244. package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
  245. package/dist/elements/amf/authorization/AmfBasic.js +0 -4
  246. package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
  247. package/dist/elements/amf/authorization/AmfBearer.js +0 -4
  248. package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
  249. package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
  250. package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
  251. package/dist/elements/amf/authorization/AmfOidc.js +0 -4
  252. package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
  253. package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
  254. package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
  255. package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
  256. package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
  257. package/dist/elements/authorization/OAuth2Authorize.js +0 -14
  258. package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
  259. package/dist/elements/authorization/OidcAuthorize.js +0 -14
  260. package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
  261. package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
  262. package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  263. package/dist/elements/authorization/ui/Authorization.js +18 -32
  264. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  265. package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
  266. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  267. package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
  268. package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  269. package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
  270. package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  271. package/dist/elements/code/HttpSnippets.js +9 -8
  272. package/dist/elements/code/HttpSnippets.js.map +1 -1
  273. package/dist/elements/dialog/ConfirmDelete.js +0 -12
  274. package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
  275. package/dist/elements/dialog/Rename.js +0 -6
  276. package/dist/elements/dialog/Rename.js.map +1 -1
  277. package/dist/elements/environment/EnvironmentEditor.js +8 -11
  278. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  279. package/dist/elements/environment/ServerEditor.js +7 -45
  280. package/dist/elements/environment/ServerEditor.js.map +1 -1
  281. package/dist/elements/environment/VariablesEditor.js +7 -12
  282. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  283. package/dist/elements/files/ShareFile.js +19 -57
  284. package/dist/elements/files/ShareFile.js.map +1 -1
  285. package/dist/elements/har/HarViewer.js +6 -7
  286. package/dist/elements/har/HarViewer.js.map +1 -1
  287. package/dist/elements/highlight/MarkedHighlight.js +4 -56
  288. package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
  289. package/dist/elements/highlight/PrismHighlight.js +9 -18
  290. package/dist/elements/highlight/PrismHighlight.js.map +1 -1
  291. package/dist/elements/highlight/PrismHighlighter.js +4 -6
  292. package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
  293. package/dist/elements/http/BodyEditor.js +21 -33
  294. package/dist/elements/http/BodyEditor.js.map +1 -1
  295. package/dist/elements/http/BodyMultipartEditor.js +17 -18
  296. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  297. package/dist/elements/http/BodyTextEditor.js +2 -15
  298. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  299. package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
  300. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  301. package/dist/elements/http/HeadersForm.js +16 -17
  302. package/dist/elements/http/HeadersForm.js.map +1 -1
  303. package/dist/elements/http/HttpAssertions.js +8 -6
  304. package/dist/elements/http/HttpAssertions.js.map +1 -1
  305. package/dist/elements/http/LogBody.js +10 -21
  306. package/dist/elements/http/LogBody.js.map +1 -1
  307. package/dist/elements/http/LogHeaders.js +4 -23
  308. package/dist/elements/http/LogHeaders.js.map +1 -1
  309. package/dist/elements/http/LogTimings.js +11 -13
  310. package/dist/elements/http/LogTimings.js.map +1 -1
  311. package/dist/elements/http/RequestConfigElement.js +7 -4
  312. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  313. package/dist/elements/http/RequestEditor.js +54 -88
  314. package/dist/elements/http/RequestEditor.js.map +1 -1
  315. package/dist/elements/http/RequestLog.js +9 -14
  316. package/dist/elements/http/RequestLog.js.map +1 -1
  317. package/dist/elements/http/UrlInput.js +15 -25
  318. package/dist/elements/http/UrlInput.js.map +1 -1
  319. package/dist/elements/http/UrlParamsForm.js +16 -13
  320. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  321. package/dist/elements/layout/LayoutManager.js +16 -24
  322. package/dist/elements/layout/LayoutManager.js.map +1 -1
  323. package/dist/elements/layout/LayoutPanelElement.js +17 -23
  324. package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
  325. package/dist/elements/layout/SplitItem.js +4 -12
  326. package/dist/elements/layout/SplitItem.js.map +1 -1
  327. package/dist/elements/layout/SplitLayout.js +18 -24
  328. package/dist/elements/layout/SplitLayout.js.map +1 -1
  329. package/dist/elements/layout/SplitPanel.js +10 -16
  330. package/dist/elements/layout/SplitPanel.js.map +1 -1
  331. package/dist/elements/layout/SplitView.js +17 -26
  332. package/dist/elements/layout/SplitView.js.map +1 -1
  333. package/dist/elements/navigation/AppNavigationElement.js +8 -47
  334. package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
  335. package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
  336. package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
  337. package/dist/elements/project/HttpProjectRequest.js +0 -38
  338. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  339. package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
  340. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  341. package/dist/elements/project/ProjectNavigation.js +0 -4
  342. package/dist/elements/project/ProjectNavigation.js.map +1 -1
  343. package/dist/elements/project/ProjectRunReport.js +4 -15
  344. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  345. package/dist/elements/project/ProjectRunner.js +2 -47
  346. package/dist/elements/project/ProjectRunner.js.map +1 -1
  347. package/dist/elements/schema-design/AssociationFormElement.js +0 -13
  348. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  349. package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
  350. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  351. package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
  352. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  353. package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
  354. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  355. package/dist/elements/schema-design/EntityFormElement.js +0 -18
  356. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  357. package/dist/elements/schema-design/PropertyFormElement.js +0 -12
  358. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  359. package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
  360. package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
  361. package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
  362. package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
  363. package/dist/elements/user/UserAvatarElement.js +0 -9
  364. package/dist/elements/user/UserAvatarElement.js.map +1 -1
  365. package/dist/events/http-client/models/CertificatesEvents.js +2 -2
  366. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  367. package/dist/http-client/idb/Base.js +5 -10
  368. package/dist/http-client/idb/Base.js.map +1 -1
  369. package/dist/http-client/idb/LegacyMockedStore.js +0 -1
  370. package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
  371. package/dist/http-client/idb/MockedStore.js +3 -1
  372. package/dist/http-client/idb/MockedStore.js.map +1 -1
  373. package/dist/http-client/store/DataImportProcessor.js +0 -3
  374. package/dist/http-client/store/DataImportProcessor.js.map +1 -1
  375. package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
  376. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  377. package/dist/http-client/store/IdbThread.js +23 -20
  378. package/dist/http-client/store/IdbThread.js.map +1 -1
  379. package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
  380. package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
  381. package/dist/http-client/store/idb/IdbStore.js +0 -2
  382. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  383. package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
  384. package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
  385. package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
  386. package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
  387. package/dist/lib/chart/HttpHistoryChart.js +7 -8
  388. package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
  389. package/dist/mixins/FileDropMixin.js +0 -1
  390. package/dist/mixins/FileDropMixin.js.map +1 -1
  391. package/dist/mixins/RenderableMixin.js +11 -15
  392. package/dist/mixins/RenderableMixin.js.map +1 -1
  393. package/dist/pages/ApplicationScreen.js +34 -55
  394. package/dist/pages/ApplicationScreen.js.map +1 -1
  395. package/dist/pages/api-client/ApiClient.screen.js +11 -20
  396. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  397. package/dist/pages/api-client/Authenticate.screen.js +4 -6
  398. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  399. package/dist/pages/api-client/StoreConfig.screen.js +21 -37
  400. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  401. package/dist/pages/api-client/Telemetry.screen.js +1 -2
  402. package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
  403. package/dist/pages/api-client/pages/Files.page.js +6 -27
  404. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  405. package/dist/pages/api-client/pages/Settings.page.js +2 -4
  406. package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
  407. package/dist/pages/api-client/pages/Trash.page.js +2 -13
  408. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  409. package/dist/pages/demo/DemoPage.js +13 -13
  410. package/dist/pages/demo/DemoPage.js.map +1 -1
  411. package/dist/pages/http-project/HttpProject.screen.js +25 -35
  412. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  413. package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
  414. package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
  415. package/dist/store/HttpStore.js +0 -3
  416. package/dist/store/HttpStore.js.map +1 -1
  417. package/dist/store/UserCache.js +5 -5
  418. package/dist/store/UserCache.js.map +1 -1
  419. package/dist/ui/UiElement.js +4 -5
  420. package/dist/ui/UiElement.js.map +1 -1
  421. package/dist/ui/button/SegmentedButton.js +9 -11
  422. package/dist/ui/button/SegmentedButton.js.map +1 -1
  423. package/dist/ui/button/SegmentedButtonsSet.js +6 -7
  424. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  425. package/dist/ui/button/UiButton.js +17 -39
  426. package/dist/ui/button/UiButton.js.map +1 -1
  427. package/dist/ui/button/UiIconButton.js +9 -35
  428. package/dist/ui/button/UiIconButton.js.map +1 -1
  429. package/dist/ui/chip/UiChip.js +9 -49
  430. package/dist/ui/chip/UiChip.js.map +1 -1
  431. package/dist/ui/collapse/UiCollapse.js +15 -20
  432. package/dist/ui/collapse/UiCollapse.js.map +1 -1
  433. package/dist/ui/controllers/ActionController.js +143 -144
  434. package/dist/ui/controllers/ActionController.js.map +1 -1
  435. package/dist/ui/controllers/RadioSelectionController.js +0 -1
  436. package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
  437. package/dist/ui/date/DateTime.js +3 -3
  438. package/dist/ui/date/DateTime.js.map +1 -1
  439. package/dist/ui/dialog/UiDialog.js +14 -38
  440. package/dist/ui/dialog/UiDialog.js.map +1 -1
  441. package/dist/ui/effects/ripple.js +20 -18
  442. package/dist/ui/effects/ripple.js.map +1 -1
  443. package/dist/ui/effects/rippleDirective.js +6 -7
  444. package/dist/ui/effects/rippleDirective.js.map +1 -1
  445. package/dist/ui/icons/UiIcon.js +4 -3
  446. package/dist/ui/icons/UiIcon.js.map +1 -1
  447. package/dist/ui/input/CheckboxElement.js +12 -10
  448. package/dist/ui/input/CheckboxElement.js.map +1 -1
  449. package/dist/ui/input/CheckedElement.js +2 -13
  450. package/dist/ui/input/CheckedElement.js.map +1 -1
  451. package/dist/ui/input/Input.js +169 -234
  452. package/dist/ui/input/Input.js.map +1 -1
  453. package/dist/ui/input/RadioElement.js +13 -11
  454. package/dist/ui/input/RadioElement.js.map +1 -1
  455. package/dist/ui/input/SwitchElement.js +0 -18
  456. package/dist/ui/input/SwitchElement.js.map +1 -1
  457. package/dist/ui/input/TextAreaElement.js +0 -15
  458. package/dist/ui/input/TextAreaElement.js.map +1 -1
  459. package/dist/ui/list/DividerElement.js +5 -10
  460. package/dist/ui/list/DividerElement.js.map +1 -1
  461. package/dist/ui/list/UiDropdownList.js +7 -48
  462. package/dist/ui/list/UiDropdownList.js.map +1 -1
  463. package/dist/ui/list/UiList.js +3 -15
  464. package/dist/ui/list/UiList.js.map +1 -1
  465. package/dist/ui/list/UiListItem.js +4 -17
  466. package/dist/ui/list/UiListItem.js.map +1 -1
  467. package/dist/ui/list/UiListbox.js +0 -1
  468. package/dist/ui/list/UiListbox.js.map +1 -1
  469. package/dist/ui/notification/SnackNotifications.js +1 -2
  470. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  471. package/dist/ui/notification/Snackbar.js +27 -51
  472. package/dist/ui/notification/Snackbar.js.map +1 -1
  473. package/dist/ui/progress/Range.js +24 -23
  474. package/dist/ui/progress/Range.js.map +1 -1
  475. package/dist/ui/progress/UiProgress.js +0 -11
  476. package/dist/ui/progress/UiProgress.js.map +1 -1
  477. package/dist/ui/table/DataTable.js +7 -12
  478. package/dist/ui/table/DataTable.js.map +1 -1
  479. package/dist/ui/tabs/UiTab.js +24 -25
  480. package/dist/ui/tabs/UiTab.js.map +1 -1
  481. package/dist/ui/tabs/UiTabs.js +21 -35
  482. package/dist/ui/tabs/UiTabs.js.map +1 -1
  483. package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
  484. package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
  485. package/dist/visualization/lib/AssociationAnchors.js +16 -28
  486. package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
  487. package/dist/visualization/lib/Point.js +0 -2
  488. package/dist/visualization/lib/Point.js.map +1 -1
  489. package/dist/visualization/lib/SelectionManager.js +10 -11
  490. package/dist/visualization/lib/SelectionManager.js.map +1 -1
  491. package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
  492. package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
  493. package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
  494. package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
  495. package/dist/visualization/lib/WorkspaceEdges.js +17 -19
  496. package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
  497. package/dist/visualization/lib/WorkspaceGestures.js +0 -3
  498. package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
  499. package/dist/visualization/lib/WorkspaceSizing.js +4 -6
  500. package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
  501. package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
  502. package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
  503. package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
  504. package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
  505. package/dist/visualization/lib/tips/TipArtist.js +0 -3
  506. package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
  507. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
  508. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
  509. package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
  510. package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
  511. package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
  512. package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
  513. package/package.json +3 -2
  514. package/tsconfig.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"UserCache.js","sourceRoot":"","sources":["../../src/store/UserCache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;GAGG;AACH,MAAM,SAAS;IACH,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD;;OAEG;IACO,eAAe,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAEzE;QACE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,GAAW;QACrC,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,OAAO;SACR;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,qBAAqB,CAAC,CAAe;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAuB,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,KAAK,wBAAwB,EAAE;YACrC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAgC,CAAC;YACpD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;aACzB;SACF;IACH,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;AACjC,eAAe,QAAQ,CAAC","sourcesContent":["import { IUser } from \"@api-client/core/build/browser.js\";\nimport { AddConfigEnvironmentInit } from \"../bindings/base/ConfigurationBindings.js\";\nimport { Events } from \"../events/Events.js\";\nimport { ConfigBroadcast, ConfigBroadcastChannel } from \"../lib/config/Config.js\";\n\n/**\n * A class that caches user info in memory so the application reduces the number\n * of requests to the backend requesting a user info.\n */\nclass UserCache {\n protected cached = new Map<string, IUser | undefined>();\n\n /**\n * Application configuration broadcast channel.\n */\n protected configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n constructor() {\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this))\n }\n\n async getUser(key: string): Promise<IUser | undefined> {\n const existing = this.cached.get(key);\n if (existing) {\n return existing;\n }\n const read = await this.requestUser(key);\n this.cached.set(key, read);\n return read;\n }\n\n protected async requestUser(key: string): Promise<IUser | undefined> {\n try {\n const result = await Events.Store.User.read(key);\n return result;\n } catch (e) {\n // ....\n }\n return undefined;\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'environment.setDefault') {\n this.cached = new Map();\n } else if (path === 'environment.add') {\n const init = event.init as AddConfigEnvironmentInit;\n if (init.asDefault) {\n this.cached = new Map();\n }\n }\n }\n}\n\nconst instance = new UserCache();\nexport default instance;\n"]}
1
+ {"version":3,"file":"UserCache.js","sourceRoot":"","sources":["../../src/store/UserCache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;GAGG;AACH,MAAM,SAAS;IAQb;QAPU,WAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;QAExD;;WAEG;QACO,oBAAe,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAGvE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,GAAW;QACrC,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,OAAO;SACR;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,qBAAqB,CAAC,CAAe;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAuB,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,KAAK,wBAAwB,EAAE;YACrC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAgC,CAAC;YACpD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;aACzB;SACF;IACH,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;AACjC,eAAe,QAAQ,CAAC","sourcesContent":["import { IUser } from \"@api-client/core/build/browser.js\";\nimport { AddConfigEnvironmentInit } from \"../bindings/base/ConfigurationBindings.js\";\nimport { Events } from \"../events/Events.js\";\nimport { ConfigBroadcast, ConfigBroadcastChannel } from \"../lib/config/Config.js\";\n\n/**\n * A class that caches user info in memory so the application reduces the number\n * of requests to the backend requesting a user info.\n */\nclass UserCache {\n protected cached = new Map<string, IUser | undefined>();\n\n /**\n * Application configuration broadcast channel.\n */\n protected configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n constructor() {\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this))\n }\n\n async getUser(key: string): Promise<IUser | undefined> {\n const existing = this.cached.get(key);\n if (existing) {\n return existing;\n }\n const read = await this.requestUser(key);\n this.cached.set(key, read);\n return read;\n }\n\n protected async requestUser(key: string): Promise<IUser | undefined> {\n try {\n const result = await Events.Store.User.read(key);\n return result;\n } catch (e) {\n // ....\n }\n return undefined;\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'environment.setDefault') {\n this.cached = new Map();\n } else if (path === 'environment.add') {\n const init = event.init as AddConfigEnvironmentInit;\n if (init.asDefault) {\n this.cached = new Map();\n }\n }\n }\n}\n\nconst instance = new UserCache();\nexport default instance;\n"]}
@@ -15,11 +15,10 @@ import { ActionController } from "./controllers/ActionController.js";
15
15
  * @fires action - An event dispatched when the UI element was activated (pointer, keyboard).
16
16
  */
17
17
  export class UiElement extends LitElement {
18
- actionController = new ActionController(this);
19
- /**
20
- * Indicates the component is in the pressed state.
21
- */
22
- pressed;
18
+ constructor() {
19
+ super(...arguments);
20
+ this.actionController = new ActionController(this);
21
+ }
23
22
  /**
24
23
  * Hook method called when we've confirmed that the gesture is intended to be
25
24
  * a press. Subclasses should change the visual state of the control to
@@ -1 +1 @@
1
- {"version":3,"file":"UiElement.js","sourceRoot":"","sources":["../../src/ui/UiElement.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD;;;;GAIG;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAA0D,MAAM,mCAAmC,CAAC;AAE7H;;;;;GAKG;AACH,MAAM,OAAgB,SAAU,SAAQ,UAAU;IAOtC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAExD;;OAEG;IACgB,OAAO,CAAW;IAErC;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,SAAS,EAAE,UAAU,EAAkB;QAChD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBAC3C,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAC;SACL;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,CAAe;QAC/B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAe;QAC7B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,CAAe;QACjC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,CAAe;QAChC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,CAAa;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,CAAgB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,CAAgB;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACF;AAzGU;IAAR,KAAK,EAAE;0CAA6B","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LitElement } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { ActionController, ActionControllerHost, BeginPressConfig, EndPressConfig } from \"./controllers/ActionController.js\";\n\n/**\n * The base class for all API Client's base UI elements.\n * Only contains logic to be applied to **all** UI elements.\n * \n * @fires action - An event dispatched when the UI element was activated (pointer, keyboard).\n */\nexport abstract class UiElement extends LitElement implements ActionControllerHost {\n /**\n * ActionController needs to know if the component is disabled, so subclasses\n * must implement a `disabled` property.\n */\n abstract disabled: boolean;\n\n protected actionController = new ActionController(this);\n\n /**\n * Indicates the component is in the pressed state.\n */\n @state() protected pressed?: boolean;\n\n /**\n * Hook method called when we've confirmed that the gesture is intended to be\n * a press. Subclasses should change the visual state of the control to\n * 'active' at this point, and possibly fire an event. Subclasses should\n * override this method if more needs to be done.\n *\n * @param options `positionEvent` is the Event that is considered the\n * beginning of the press. Null if this was a keyboard interaction.\n */\n beginPress(options: BeginPressConfig): void { \n this.pressed = true;\n }\n\n /**\n * Hook method called when the control goes from a pressed to unpressed\n * state.\n *\n * @param options If `cancelled` is true, means the user canceled the action.\n * Subclasses which trigger events on endPress() should check the value\n * of this flag, and modify their behavior accordingly.\n */\n endPress({ cancelled, actionData }: EndPressConfig): void {\n this.pressed = false;\n if (!cancelled) {\n this.dispatchEvent(new CustomEvent('action', {\n detail: actionData,\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerdown=\"${this.handlePointerDown}\"`\n */\n handlePointerDown(e: PointerEvent): void {\n this.actionController.pointerDown(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerup=\"${this.handlePointerUp}\"`\n */\n handlePointerUp(e: PointerEvent): void {\n this.actionController.pointerUp(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointercancel=\"${this.handlePointerCancel}\"`\n */\n handlePointerCancel(e: PointerEvent): void {\n this.actionController.pointerCancel(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerleave=\"${this.handlePointerleave}\"`\n */\n handlePointerLeave(e: PointerEvent): void {\n this.actionController.pointerLeave(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@click=\"${this.handleClick}\"`\n */\n handleClick(e: MouseEvent): void {\n this.actionController.click(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@contextmenu=\"${this.handleContextMenu}\"`\n */\n handleContextMenu(): void {\n this.actionController.contextMenu();\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@keydown=\"${this.handleKeyDown}\"`\n */\n handleKeyDown(e: KeyboardEvent): void {\n this.actionController.keyDown(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@keyup=\"${this.handleKeyUp}\"`\n */\n handleKeyUp(e: KeyboardEvent): void {\n this.actionController.keyUp(e);\n }\n}\n"]}
1
+ {"version":3,"file":"UiElement.js","sourceRoot":"","sources":["../../src/ui/UiElement.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD;;;;GAIG;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAA0D,MAAM,mCAAmC,CAAC;AAE7H;;;;;GAKG;AACH,MAAM,OAAgB,SAAU,SAAQ,UAAU;IAAlD;;QAOY,qBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IA8G1D,CAAC;IAvGC;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,SAAS,EAAE,UAAU,EAAkB;QAChD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBAC3C,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAC;SACL;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,CAAe;QAC/B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAe;QAC7B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,CAAe;QACjC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,CAAe;QAChC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,CAAa;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,CAAgB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,CAAgB;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACF;AAzGU;IAAR,KAAK,EAAE;0CAA6B","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LitElement } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { ActionController, ActionControllerHost, BeginPressConfig, EndPressConfig } from \"./controllers/ActionController.js\";\n\n/**\n * The base class for all API Client's base UI elements.\n * Only contains logic to be applied to **all** UI elements.\n * \n * @fires action - An event dispatched when the UI element was activated (pointer, keyboard).\n */\nexport abstract class UiElement extends LitElement implements ActionControllerHost {\n /**\n * ActionController needs to know if the component is disabled, so subclasses\n * must implement a `disabled` property.\n */\n abstract disabled: boolean;\n\n protected actionController = new ActionController(this);\n\n /**\n * Indicates the component is in the pressed state.\n */\n @state() protected pressed?: boolean;\n\n /**\n * Hook method called when we've confirmed that the gesture is intended to be\n * a press. Subclasses should change the visual state of the control to\n * 'active' at this point, and possibly fire an event. Subclasses should\n * override this method if more needs to be done.\n *\n * @param options `positionEvent` is the Event that is considered the\n * beginning of the press. Null if this was a keyboard interaction.\n */\n beginPress(options: BeginPressConfig): void { \n this.pressed = true;\n }\n\n /**\n * Hook method called when the control goes from a pressed to unpressed\n * state.\n *\n * @param options If `cancelled` is true, means the user canceled the action.\n * Subclasses which trigger events on endPress() should check the value\n * of this flag, and modify their behavior accordingly.\n */\n endPress({ cancelled, actionData }: EndPressConfig): void {\n this.pressed = false;\n if (!cancelled) {\n this.dispatchEvent(new CustomEvent('action', {\n detail: actionData,\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerdown=\"${this.handlePointerDown}\"`\n */\n handlePointerDown(e: PointerEvent): void {\n this.actionController.pointerDown(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerup=\"${this.handlePointerUp}\"`\n */\n handlePointerUp(e: PointerEvent): void {\n this.actionController.pointerUp(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointercancel=\"${this.handlePointerCancel}\"`\n */\n handlePointerCancel(e: PointerEvent): void {\n this.actionController.pointerCancel(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@pointerleave=\"${this.handlePointerleave}\"`\n */\n handlePointerLeave(e: PointerEvent): void {\n this.actionController.pointerLeave(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@click=\"${this.handleClick}\"`\n */\n handleClick(e: MouseEvent): void {\n this.actionController.click(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@contextmenu=\"${this.handleContextMenu}\"`\n */\n handleContextMenu(): void {\n this.actionController.contextMenu();\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@keydown=\"${this.handleKeyDown}\"`\n */\n handleKeyDown(e: KeyboardEvent): void {\n this.actionController.keyDown(e);\n }\n\n /**\n * Hook method for the ActionController.\n * Subclasses should add this method as an event handler on the interactive\n * template element with `@keyup=\"${this.handleKeyUp}\"`\n */\n handleKeyUp(e: KeyboardEvent): void {\n this.actionController.keyUp(e);\n }\n}\n"]}
@@ -12,15 +12,17 @@ import { check } from "../icons/Icons.js";
12
12
  * @slot icon - A slot to render an icon.
13
13
  */
14
14
  export default class SegmentedButton extends Button {
15
- ripple;
16
- /**
17
- * Whether the button is selected.
18
- * @attribute
19
- */
20
- selected = false;
21
- leadingIcons;
22
15
  constructor() {
23
16
  super();
17
+ /**
18
+ * Whether the button is selected.
19
+ * @attribute
20
+ */
21
+ this.selected = false;
22
+ this.renderRipple = () => {
23
+ const { disabled } = this;
24
+ return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
25
+ };
24
26
  this.addEventListener('pointerenter', this.handlePointerEnter.bind(this));
25
27
  }
26
28
  beginPress(options) {
@@ -92,10 +94,6 @@ export default class SegmentedButton extends Button {
92
94
  });
93
95
  return html `<span class="${iconClasses}" role="presentation">${check}</span>`;
94
96
  }
95
- renderRipple = () => {
96
- const { disabled } = this;
97
- return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
98
- };
99
97
  }
100
98
  __decorate([
101
99
  query('ui-ripple')
@@ -1 +1 @@
1
- {"version":3,"file":"SegmentedButton.js","sourceRoot":"","sources":["../../../src/ui/button/SegmentedButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { Button } from \"./Button.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport { ripple } from \"../effects/rippleDirective.js\";\nimport '../../define/ui/ui-ripple.js';\nimport { check } from \"../icons/Icons.js\";\n\n/**\n * @fires trigger - When a button is triggered.\n * @slot - Default slot for the label\n * @slot icon - A slot to render an icon.\n */\nexport default class SegmentedButton extends Button {\n @query('ui-ripple') ripple!: UiRipple;\n\n /**\n * Whether the button is selected.\n * @attribute\n */\n @property({ type: Boolean }) selected = false;\n\n @queryAssignedElements({ flatten: true, slot: 'icon' }) protected leadingIcons!: HTMLElement[];\n\n constructor() {\n super();\n this.addEventListener('pointerenter', this.handlePointerEnter.bind(this));\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.ripple.beginPress(options.positionEvent);\n }\n\n override endPress(options: EndPressConfig): void {\n super.endPress(options);\n this.ripple.endPress();\n\n if (!options.cancelled) {\n this.dispatchEvent(new Event('trigger', { bubbles: true, composed: true }));\n }\n }\n\n protected handlePointerEnter(e: PointerEvent): void {\n this.ripple.beginHover(e);\n }\n\n override handlePointerLeave(e: PointerEvent): void {\n super.handlePointerLeave(e);\n this.ripple.endHover();\n }\n\n protected handleIconSlotChange(): void {\n this.requestUpdate();\n }\n\n protected override render(): TemplateResult {\n const { pressed = false, selected = false } = this;\n const surfaceClasses = classMap({\n surface: true,\n pressed,\n selected,\n });\n\n return html`\n <div class=\"${surfaceClasses}\" ${ripple(() => this.ripple)}>\n ${this.renderRipple()}\n <div class=\"content\">\n ${this.leadingContent()} \n <slot></slot>\n </div>\n </div>\n `;\n }\n\n protected leadingContent(): TemplateResult {\n const { leadingIcons } = this;\n const classes: ClassInfo = {\n 'leading': true,\n visible: !!this.selected || !!leadingIcons.length,\n }\n return html`\n <div class=\"${classMap(classes)}\">\n ${this.renderLeadingIcon()}\n ${this.renderChecked()}\n </div>\n `;\n }\n\n protected renderLeadingIcon(): TemplateResult {\n const { leadingIcons } = this;\n const classes: ClassInfo = {\n 'leading-icon': true,\n 'with-icon': !!leadingIcons.length,\n hidden: !!this.selected,\n }\n return html`\n <div class=\"${classMap(classes)}\"><slot name=\"icon\" @slotchange=\"${this.handleIconSlotChange}\"></slot></div>\n `;\n }\n\n protected renderChecked(): TemplateResult {\n const iconClasses = classMap({\n 'check-mark': true,\n checked: !!this.selected,\n });\n return html`<span class=\"${iconClasses}\" role=\"presentation\">${check}</span>`;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
1
+ {"version":3,"file":"SegmentedButton.js","sourceRoot":"","sources":["../../../src/ui/button/SegmentedButton.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAa,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,MAAM;IAWjD;QACE,KAAK,EAAE,CAAC;QATV;;;WAGG;QAC0B,aAAQ,GAAG,KAAK,CAAC;QAyFpC,iBAAY,GAAG,GAAmB,EAAE;YAC5C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAA,wCAAwC,QAAQ,gBAAgB,CAAC;QAC9E,CAAC,CAAC;QAtFA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEQ,UAAU,CAAC,OAAyB;QAC3C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAEQ,QAAQ,CAAC,OAAuB;QACvC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEvB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC7E;IACH,CAAC;IAES,kBAAkB,CAAC,CAAe;QAC1C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEQ,kBAAkB,CAAC,CAAe;QACzC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEkB,MAAM;QACvB,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QACnD,MAAM,cAAc,GAAG,QAAQ,CAAC;YAC9B,OAAO,EAAE,IAAI;YACb,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO,IAAI,CAAA;kBACG,cAAc,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,YAAY,EAAE;;UAEjB,IAAI,CAAC,cAAc,EAAE;;;;KAI1B,CAAC;IACJ,CAAC;IAES,cAAc;QACtB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAc;YACzB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM;SAClD,CAAA;QACD,OAAO,IAAI,CAAA;kBACG,QAAQ,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,aAAa,EAAE;;KAEvB,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAc;YACzB,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;SACxB,CAAA;QACD,OAAO,IAAI,CAAA;kBACG,QAAQ,CAAC,OAAO,CAAC,oCAAoC,IAAI,CAAC,oBAAoB;KAC3F,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,MAAM,WAAW,GAAG,QAAQ,CAAC;YAC3B,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,OAAO,IAAI,CAAA,gBAAgB,WAAW,yBAAyB,KAAK,SAAS,CAAC;IAChF,CAAC;CAMF;AAnGqB;IAAnB,KAAK,CAAC,WAAW,CAAC;+CAAmB;AAMT;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iDAAkB;AAEU;IAAvD,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAwC","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, query, queryAssignedElements } from \"lit/decorators.js\";\nimport { ClassInfo, classMap } from \"lit/directives/class-map.js\";\nimport { Button } from \"./Button.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport { ripple } from \"../effects/rippleDirective.js\";\nimport '../../define/ui/ui-ripple.js';\nimport { check } from \"../icons/Icons.js\";\n\n/**\n * @fires trigger - When a button is triggered.\n * @slot - Default slot for the label\n * @slot icon - A slot to render an icon.\n */\nexport default class SegmentedButton extends Button {\n @query('ui-ripple') ripple!: UiRipple;\n\n /**\n * Whether the button is selected.\n * @attribute\n */\n @property({ type: Boolean }) selected = false;\n\n @queryAssignedElements({ flatten: true, slot: 'icon' }) protected leadingIcons!: HTMLElement[];\n\n constructor() {\n super();\n this.addEventListener('pointerenter', this.handlePointerEnter.bind(this));\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.ripple.beginPress(options.positionEvent);\n }\n\n override endPress(options: EndPressConfig): void {\n super.endPress(options);\n this.ripple.endPress();\n\n if (!options.cancelled) {\n this.dispatchEvent(new Event('trigger', { bubbles: true, composed: true }));\n }\n }\n\n protected handlePointerEnter(e: PointerEvent): void {\n this.ripple.beginHover(e);\n }\n\n override handlePointerLeave(e: PointerEvent): void {\n super.handlePointerLeave(e);\n this.ripple.endHover();\n }\n\n protected handleIconSlotChange(): void {\n this.requestUpdate();\n }\n\n protected override render(): TemplateResult {\n const { pressed = false, selected = false } = this;\n const surfaceClasses = classMap({\n surface: true,\n pressed,\n selected,\n });\n\n return html`\n <div class=\"${surfaceClasses}\" ${ripple(() => this.ripple)}>\n ${this.renderRipple()}\n <div class=\"content\">\n ${this.leadingContent()} \n <slot></slot>\n </div>\n </div>\n `;\n }\n\n protected leadingContent(): TemplateResult {\n const { leadingIcons } = this;\n const classes: ClassInfo = {\n 'leading': true,\n visible: !!this.selected || !!leadingIcons.length,\n }\n return html`\n <div class=\"${classMap(classes)}\">\n ${this.renderLeadingIcon()}\n ${this.renderChecked()}\n </div>\n `;\n }\n\n protected renderLeadingIcon(): TemplateResult {\n const { leadingIcons } = this;\n const classes: ClassInfo = {\n 'leading-icon': true,\n 'with-icon': !!leadingIcons.length,\n hidden: !!this.selected,\n }\n return html`\n <div class=\"${classMap(classes)}\"><slot name=\"icon\" @slotchange=\"${this.handleIconSlotChange}\"></slot></div>\n `;\n }\n\n protected renderChecked(): TemplateResult {\n const iconClasses = classMap({\n 'check-mark': true,\n checked: !!this.selected,\n });\n return html`<span class=\"${iconClasses}\" role=\"presentation\">${check}</span>`;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
@@ -6,15 +6,14 @@ import { UiElement } from "../UiElement.js";
6
6
  * @fires select - When button's selection change.
7
7
  */
8
8
  export default class SegmentedButtonsSet extends UiElement {
9
- disabled = false;
10
- /**
11
- * Whether multiple buttons can be selected at once.
12
- * @attribute
13
- */
14
- multiselect = false;
15
- buttons;
16
9
  constructor() {
17
10
  super();
11
+ this.disabled = false;
12
+ /**
13
+ * Whether multiple buttons can be selected at once.
14
+ * @attribute
15
+ */
16
+ this.multiselect = false;
18
17
  this.addEventListener('trigger', this.handleButtonTrigger.bind(this));
19
18
  }
20
19
  connectedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"SegmentedButtonsSet.js","sourceRoot":"","sources":["../../../src/ui/button/SegmentedButtonsSet.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, queryAssignedElements } from \"lit/decorators.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport SegmentedButton from \"./SegmentedButton.js\";\n\n/**\n * @fires select - When button's selection change.\n */\nexport default class SegmentedButtonsSet extends UiElement {\n disabled = false;\n\n /**\n * Whether multiple buttons can be selected at once.\n * @attribute\n */\n @property({ type: Boolean }) multiselect = false;\n\n @queryAssignedElements({ flatten: true }) buttons!: SegmentedButton[];\n\n constructor() {\n super();\n this.addEventListener('trigger', this.handleButtonTrigger.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('role', 'group');\n }\n\n isButtonDisabled(index: number): boolean {\n if (this.isOutOfBounds(index)) return false;\n return this.buttons[index].disabled;\n }\n\n setButtonDisabled(index: number, disabled: boolean): void {\n if (this.isOutOfBounds(index)) return;\n this.buttons[index].disabled = disabled;\n }\n\n isButtonSelected(index: number): boolean {\n if (this.isOutOfBounds(index)) return false;\n return this.buttons[index].selected;\n }\n\n setButtonSelected(index: number, selected: boolean): void {\n // Ignore out-of-index values.\n if (this.isOutOfBounds(index)) return;\n // Ignore disabled buttons.\n if (this.isButtonDisabled(index)) return;\n\n if (this.multiselect) {\n this.buttons[index].selected = selected;\n this.dispatchSelected(index);\n return;\n }\n\n // Single-select segmented buttons are not unselectable.\n if (!selected) return;\n\n this.buttons[index].selected = true;\n this.dispatchSelected(index);\n // Deselect all other buttons for single-select.\n for (let i = 0; i < this.buttons.length; i++) {\n if (i === index) continue;\n this.buttons[i].selected = false;\n }\n }\n\n private handleButtonTrigger(e: Event): void {\n const index = this.buttons.indexOf(e.target as SegmentedButton);\n this.toggleSelection(index);\n }\n\n private toggleSelection(index: number): void {\n this.setButtonSelected(index, !this.buttons[index].selected);\n }\n\n private isOutOfBounds(index: number): boolean {\n return index < 0 || index >= this.buttons.length;\n }\n\n private dispatchSelected(index: number): void {\n this.dispatchEvent(new CustomEvent('select', {\n detail: {\n button: this.buttons[index],\n selected: this.buttons[index].selected,\n index,\n },\n bubbles: true,\n composed: true\n }));\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n"]}
1
+ {"version":3,"file":"SegmentedButtonsSet.js","sourceRoot":"","sources":["../../../src/ui/button/SegmentedButtonsSet.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, queryAssignedElements } from \"lit/decorators.js\";\nimport { UiElement } from \"../UiElement.js\";\nimport SegmentedButton from \"./SegmentedButton.js\";\n\n/**\n * @fires select - When button's selection change.\n */\nexport default class SegmentedButtonsSet extends UiElement {\n disabled = false;\n\n /**\n * Whether multiple buttons can be selected at once.\n * @attribute\n */\n @property({ type: Boolean }) multiselect = false;\n\n @queryAssignedElements({ flatten: true }) buttons!: SegmentedButton[];\n\n constructor() {\n super();\n this.addEventListener('trigger', this.handleButtonTrigger.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('role', 'group');\n }\n\n isButtonDisabled(index: number): boolean {\n if (this.isOutOfBounds(index)) return false;\n return this.buttons[index].disabled;\n }\n\n setButtonDisabled(index: number, disabled: boolean): void {\n if (this.isOutOfBounds(index)) return;\n this.buttons[index].disabled = disabled;\n }\n\n isButtonSelected(index: number): boolean {\n if (this.isOutOfBounds(index)) return false;\n return this.buttons[index].selected;\n }\n\n setButtonSelected(index: number, selected: boolean): void {\n // Ignore out-of-index values.\n if (this.isOutOfBounds(index)) return;\n // Ignore disabled buttons.\n if (this.isButtonDisabled(index)) return;\n\n if (this.multiselect) {\n this.buttons[index].selected = selected;\n this.dispatchSelected(index);\n return;\n }\n\n // Single-select segmented buttons are not unselectable.\n if (!selected) return;\n\n this.buttons[index].selected = true;\n this.dispatchSelected(index);\n // Deselect all other buttons for single-select.\n for (let i = 0; i < this.buttons.length; i++) {\n if (i === index) continue;\n this.buttons[i].selected = false;\n }\n }\n\n private handleButtonTrigger(e: Event): void {\n const index = this.buttons.indexOf(e.target as SegmentedButton);\n this.toggleSelection(index);\n }\n\n private toggleSelection(index: number): void {\n this.setButtonSelected(index, !this.buttons[index].selected);\n }\n\n private isOutOfBounds(index: number): boolean {\n return index < 0 || index >= this.buttons.length;\n }\n\n private dispatchSelected(index: number): void {\n this.dispatchEvent(new CustomEvent('select', {\n detail: {\n button: this.buttons[index],\n selected: this.buttons[index].selected,\n index,\n },\n bubbles: true,\n composed: true\n }));\n }\n\n override render(): TemplateResult {\n return html`<slot></slot>`;\n }\n}\n"]}
@@ -29,27 +29,10 @@ export default class UiButton extends Button {
29
29
  static get formAssociated() {
30
30
  return true;
31
31
  }
32
- #_internals = this.attachInternals();
32
+ #_internals;
33
33
  get form() {
34
34
  return this.#_internals && this.#_internals.form;
35
35
  }
36
- /**
37
- * The type of the rendered button according to Material 3 spec.
38
- *
39
- * @default {ButtonType.filled}
40
- * @attribute
41
- */
42
- type;
43
- /**
44
- * Determines when the element has an icon in the "icon" slot.
45
- */
46
- _hasIcon;
47
- /**
48
- * The name of the button, submitted as a pair with the button's value as part of the form data,
49
- * when that button is used to submit the form.
50
- * @attribute
51
- */
52
- name;
53
36
  #_value;
54
37
  /**
55
38
  * Defines the value associated with the button's name when it's submitted with the form data.
@@ -66,25 +49,24 @@ export default class UiButton extends Button {
66
49
  this.#_value = value;
67
50
  this.#_internals?.setFormValue(value || null);
68
51
  }
69
- /**
70
- * Whether to render the icon at the inline end of the label rather than the
71
- * inline start.
72
- * @attribute
73
- */
74
- trailingIcon = false;
75
- ripple;
76
- showRipple = false;
77
- /**
78
- * Whether the button is a submit button for a form.
79
- * @attribute
80
- */
81
- submit;
82
- getRipple = () => {
83
- this.showRipple = true;
84
- return this.ripple;
85
- };
86
52
  constructor() {
87
53
  super();
54
+ this.#_internals = this.attachInternals();
55
+ /**
56
+ * Whether to render the icon at the inline end of the label rather than the
57
+ * inline start.
58
+ * @attribute
59
+ */
60
+ this.trailingIcon = false;
61
+ this.showRipple = false;
62
+ this.getRipple = () => {
63
+ this.showRipple = true;
64
+ return this.ripple;
65
+ };
66
+ this.renderRipple = () => {
67
+ const { disabled } = this;
68
+ return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
69
+ };
88
70
  this.type = ButtonType.filled;
89
71
  this._hasIcon = false;
90
72
  }
@@ -174,10 +156,6 @@ export default class UiButton extends Button {
174
156
  _iconTemplate() {
175
157
  return html `<slot name="icon" @slotchange="${this._iconSlotChange}"></slot>`;
176
158
  }
177
- renderRipple = () => {
178
- const { disabled } = this;
179
- return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
180
- };
181
159
  }
182
160
  __decorate([
183
161
  property({ type: String, reflect: true, })
@@ -1 +1 @@
1
- {"version":3,"file":"UiButton.js","sourceRoot":"","sources":["../../../src/ui/button/UiButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport { Button } from \"./Button.js\";\nimport { ripple } from '../effects/rippleDirective.js';\nimport UiRipple from \"../effects/ripple.js\";\nimport '../../define/ui/ui-ripple.js';\n\n/**\n * The type of the button rendered.\n */\nexport enum ButtonType {\n 'elevated' = 'elevated',\n 'filled' = 'filled',\n 'tonal' = 'tonal',\n 'outlined' = 'outlined',\n 'text' = 'text',\n}\n\n/**\n * A material design button.\n * \n * Note, this control is form associated.\n * \n * @slot icon - A slot for the icon element\n * @slot - The default slot for the label\n */\nexport default class UiButton extends Button {\n static get formAssociated(): boolean {\n return true;\n }\n\n #_internals = this.attachInternals();\n\n get form(): HTMLFormElement | null {\n return this.#_internals && this.#_internals.form;\n }\n\n /**\n * The type of the rendered button according to Material 3 spec.\n * \n * @default {ButtonType.filled}\n * @attribute\n */\n @property({ type: String, reflect: true, }) type: ButtonType;\n\n /**\n * Determines when the element has an icon in the \"icon\" slot.\n */\n @state() protected _hasIcon: boolean;\n\n /**\n * The name of the button, submitted as a pair with the button's value as part of the form data, \n * when that button is used to submit the form.\n * @attribute\n */\n @property({ type: String }) name?: string;\n\n #_value?: string;\n\n /**\n * Defines the value associated with the button's name when it's submitted with the form data. \n * This value is passed to the server in params when the form is submitted using this button.\n * @attribute\n */\n @property({ type: String })\n get value(): string | undefined {\n return this.#_value;\n }\n\n set value(value: string | undefined) {\n if (this.#_value === value) {\n return;\n }\n this.#_value = value;\n this.#_internals?.setFormValue(value || null);\n }\n\n /**\n * Whether to render the icon at the inline end of the label rather than the\n * inline start.\n * @attribute\n */\n @property({ type: Boolean, attribute: 'trailingicon', reflect: true }) trailingIcon = false;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n /**\n * Whether the button is a submit button for a form.\n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) submit?: boolean;\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n constructor() {\n super();\n\n this.type = ButtonType.filled;\n this._hasIcon = false;\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override endPress(config: EndPressConfig): void {\n super.endPress(config);\n this.endRipple();\n const { cancelled, reason } = config;\n if (cancelled) {\n return;\n }\n if (!reason || reason === 'enter' || reason === 'space') {\n this._submitHandler();\n }\n if (reason === 'enter' || reason === 'space') {\n this.click();\n }\n }\n\n protected _submitHandler(): void {\n const { form, name, value, submit, disabled } = this;\n if (!form || !submit || disabled) {\n return;\n }\n let button: HTMLButtonElement | undefined;\n if (name || value) {\n button = document.createElement('button');\n if (name) {\n button.name = name;\n }\n if (value) {\n button.value = value;\n }\n button.type = 'submit';\n button.hidden = true;\n form.append(button);\n }\n try {\n form.requestSubmit(button);\n } catch (_) {\n // ...\n }\n if (button) {\n form.removeChild(button);\n }\n }\n\n /**\n * Sets the `_hasIcon` state property when the \"icon\" slot change event is dispatched.\n */\n protected _iconSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasIcon = !!slot.assignedNodes().length;\n }\n\n protected override render(): TemplateResult {\n const { pressed = false, trailingIcon = false } = this;\n const containerClasses = classMap({\n surface: true,\n withIcon: this._hasIcon,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n <div class=\"state\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n ${trailingIcon ? '' : this._iconTemplate()}\n <slot></slot>\n ${trailingIcon ? this._iconTemplate() : ''}\n </div>\n </div>\n `;\n }\n\n protected _iconTemplate(): TemplateResult {\n return html`<slot name=\"icon\" @slotchange=\"${this._iconSlotChange}\"></slot>`;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
1
+ {"version":3,"file":"UiButton.js","sourceRoot":"","sources":["../../../src/ui/button/UiButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport { Button } from \"./Button.js\";\nimport { ripple } from '../effects/rippleDirective.js';\nimport UiRipple from \"../effects/ripple.js\";\nimport '../../define/ui/ui-ripple.js';\n\n/**\n * The type of the button rendered.\n */\nexport enum ButtonType {\n 'elevated' = 'elevated',\n 'filled' = 'filled',\n 'tonal' = 'tonal',\n 'outlined' = 'outlined',\n 'text' = 'text',\n}\n\n/**\n * A material design button.\n * \n * Note, this control is form associated.\n * \n * @slot icon - A slot for the icon element\n * @slot - The default slot for the label\n */\nexport default class UiButton extends Button {\n static get formAssociated(): boolean {\n return true;\n }\n\n #_internals = this.attachInternals();\n\n get form(): HTMLFormElement | null {\n return this.#_internals && this.#_internals.form;\n }\n\n /**\n * The type of the rendered button according to Material 3 spec.\n * \n * @default {ButtonType.filled}\n * @attribute\n */\n @property({ type: String, reflect: true, }) type: ButtonType;\n\n /**\n * Determines when the element has an icon in the \"icon\" slot.\n */\n @state() protected _hasIcon: boolean;\n\n /**\n * The name of the button, submitted as a pair with the button's value as part of the form data, \n * when that button is used to submit the form.\n * @attribute\n */\n @property({ type: String }) name?: string;\n\n #_value?: string;\n\n /**\n * Defines the value associated with the button's name when it's submitted with the form data. \n * This value is passed to the server in params when the form is submitted using this button.\n * @attribute\n */\n @property({ type: String })\n get value(): string | undefined {\n return this.#_value;\n }\n\n set value(value: string | undefined) {\n if (this.#_value === value) {\n return;\n }\n this.#_value = value;\n this.#_internals?.setFormValue(value || null);\n }\n\n /**\n * Whether to render the icon at the inline end of the label rather than the\n * inline start.\n * @attribute\n */\n @property({ type: Boolean, attribute: 'trailingicon', reflect: true }) trailingIcon = false;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n /**\n * Whether the button is a submit button for a form.\n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) submit?: boolean;\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n constructor() {\n super();\n\n this.type = ButtonType.filled;\n this._hasIcon = false;\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override endPress(config: EndPressConfig): void {\n super.endPress(config);\n this.endRipple();\n const { cancelled, reason } = config;\n if (cancelled) {\n return;\n }\n if (!reason || reason === 'enter' || reason === 'space') {\n this._submitHandler();\n }\n if (reason === 'enter' || reason === 'space') {\n this.click();\n }\n }\n\n protected _submitHandler(): void {\n const { form, name, value, submit, disabled } = this;\n if (!form || !submit || disabled) {\n return;\n }\n let button: HTMLButtonElement | undefined;\n if (name || value) {\n button = document.createElement('button');\n if (name) {\n button.name = name;\n }\n if (value) {\n button.value = value;\n }\n button.type = 'submit';\n button.hidden = true;\n form.append(button);\n }\n try {\n form.requestSubmit(button);\n } catch (_) {\n // ...\n }\n if (button) {\n form.removeChild(button);\n }\n }\n\n /**\n * Sets the `_hasIcon` state property when the \"icon\" slot change event is dispatched.\n */\n protected _iconSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasIcon = !!slot.assignedNodes().length;\n }\n\n protected override render(): TemplateResult {\n const { pressed = false, trailingIcon = false } = this;\n const containerClasses = classMap({\n surface: true,\n withIcon: this._hasIcon,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n <div class=\"state\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n ${trailingIcon ? '' : this._iconTemplate()}\n <slot></slot>\n ${trailingIcon ? this._iconTemplate() : ''}\n </div>\n </div>\n `;\n }\n\n protected _iconTemplate(): TemplateResult {\n return html`<slot name=\"icon\" @slotchange=\"${this._iconSlotChange}\"></slot>`;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
@@ -20,39 +20,17 @@ export var IconButtonType;
20
20
  * @fires active - An event dispatched when the `active` state has changed. This only happens when the button is `toggle`.
21
21
  */
22
22
  export default class UiIconButton extends Button {
23
- /**
24
- * The type of the rendered button according to Material 3 spec.
25
- *
26
- * @default {ButtonType.filled}
27
- * @attribute
28
- */
29
- type;
30
- /**
31
- * Whether the button can be toggled.
32
- * A toggle button behaves different as it gets the `aria-pressed` attribute
33
- * which changes depending on the pressed state.
34
- * A toggle button is activated until it is clicked/pressed again.
35
- * A toggle button dispatched `active` event when the press state change.
36
- * The host can check the `active` property to know the state.
37
- *
38
- * @attribute
39
- */
40
- toggle;
41
- /**
42
- * A flag that determines whether the button is activated (pressed when `toggle` is set).
43
- * It is `undefined` and makes no effect when `toggle` is not set.
44
- *
45
- * @attribute
46
- */
47
- active;
48
- ripple;
49
- showRipple = false;
50
- getRipple = () => {
51
- this.showRipple = true;
52
- return this.ripple;
53
- };
54
23
  constructor() {
55
24
  super();
25
+ this.showRipple = false;
26
+ this.getRipple = () => {
27
+ this.showRipple = true;
28
+ return this.ripple;
29
+ };
30
+ this.renderRipple = () => {
31
+ const { disabled } = this;
32
+ return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
33
+ };
56
34
  this.type = IconButtonType.standard;
57
35
  }
58
36
  update(changedProperties) {
@@ -112,10 +90,6 @@ export default class UiIconButton extends Button {
112
90
  </div>
113
91
  `;
114
92
  }
115
- renderRipple = () => {
116
- const { disabled } = this;
117
- return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
118
- };
119
93
  }
120
94
  __decorate([
121
95
  property({ type: String, reflect: true, })
@@ -1 +1 @@
1
- {"version":3,"file":"UiIconButton.js","sourceRoot":"","sources":["../../../src/ui/button/UiIconButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, PropertyValues, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { Button } from \"./Button.js\";\nimport { ripple } from \"../effects/rippleDirective.js\";\nimport '../../define/ui/ui-ripple.js';\n\n/**\n * The type of the icon button rendered.\n */\nexport enum IconButtonType {\n 'filled' = 'filled', \n 'tonal' = 'tonal', \n 'outlined' = 'outlined', \n 'standard' = 'standard',\n}\n\n/**\n * @fires active - An event dispatched when the `active` state has changed. This only happens when the button is `toggle`.\n */\nexport default class UiIconButton extends Button {\n /**\n * The type of the rendered button according to Material 3 spec.\n * \n * @default {ButtonType.filled}\n * @attribute\n */\n @property({ type: String, reflect: true, }) type: IconButtonType;\n\n /**\n * Whether the button can be toggled.\n * A toggle button behaves different as it gets the `aria-pressed` attribute \n * which changes depending on the pressed state.\n * A toggle button is activated until it is clicked/pressed again.\n * A toggle button dispatched `active` event when the press state change. \n * The host can check the `active` property to know the state.\n * \n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) toggle?: boolean;\n\n /**\n * A flag that determines whether the button is activated (pressed when `toggle` is set).\n * It is `undefined` and makes no effect when `toggle` is not set.\n * \n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) active?: boolean;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n constructor() {\n super();\n\n this.type = IconButtonType.standard;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('active')) {\n this.setAttribute('aria-pressed', String(this.active));\n }\n super.update(changedProperties);\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override endPress(config: EndPressConfig): void {\n super.endPress(config);\n this.endRipple();\n const { cancelled, reason } = config;\n if (cancelled) {\n return;\n }\n if (!reason || reason === 'enter' || reason === 'space') {\n if (this.toggle) {\n this.active = !this.active;\n // note, only dispatch events when user interacting with the UI.\n this.dispatchEvent(new Event('active'));\n }\n }\n if (reason === 'enter' || reason === 'space') {\n if (!this.toggle) {\n this.click();\n }\n }\n }\n\n protected override render(): TemplateResult {\n const { pressed=false } = this;\n const containerClasses = classMap({\n surface: true,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n <div class=\"state\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
1
+ {"version":3,"file":"UiIconButton.js","sourceRoot":"","sources":["../../../src/ui/button/UiIconButton.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAkC,MAAM,KAAK,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAN,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;IACjB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;AACzB,CAAC,EALW,cAAc,KAAd,cAAc,QAKzB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,MAAM;IAsC9C;QACE,KAAK,EAAE,CAAC;QARS,eAAU,GAAG,KAAK,CAAC;QAEnB,cAAS,GAAG,GAA6B,EAAE;YAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC;QAuEQ,iBAAY,GAAG,GAAmB,EAAE;YAC5C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAA,wCAAwC,QAAQ,gBAAgB,CAAC;QAC9E,CAAC,CAAC;QArEA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC;IACtC,CAAC;IAEkB,MAAM,CAAC,iBAAuC;QAC/D,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACxD;QACD,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACjC,OAAO,CAAC,UAAU,EAAE,CAAC;SACtB;IACH,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAEQ,UAAU,CAAC,OAAyB;QAC3C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEQ,QAAQ,CAAC,MAAsB;QACtC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACrC,IAAI,SAAS,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;YACvD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,gEAAgE;gBAChE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzC;SACF;QACD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;IACH,CAAC;IAEkB,MAAM;QACvB,MAAM,EAAE,OAAO,GAAC,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,gBAAgB,GAAG,QAAQ,CAAC;YAChC,OAAO,EAAE,IAAI;YACb,OAAO;SACR,CAAC,CAAC;QACH,OAAO,IAAI,CAAA;kBACG,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;;;QAGrD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;;;;;KAK3C,CAAC;IACJ,CAAC;CAMF;AAxG6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;0CAAsB;AAYpB;IAA5C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;4CAAkB;AAQjB;IAA5C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;4CAAkB;AAErC;IAAxB,UAAU,CAAC,WAAW,CAAC;4CAA6C;AAE5D;IAAR,KAAK,EAAE;gDAA8B","sourcesContent":["import { html, PropertyValues, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { Button } from \"./Button.js\";\nimport { ripple } from \"../effects/rippleDirective.js\";\nimport '../../define/ui/ui-ripple.js';\n\n/**\n * The type of the icon button rendered.\n */\nexport enum IconButtonType {\n 'filled' = 'filled', \n 'tonal' = 'tonal', \n 'outlined' = 'outlined', \n 'standard' = 'standard',\n}\n\n/**\n * @fires active - An event dispatched when the `active` state has changed. This only happens when the button is `toggle`.\n */\nexport default class UiIconButton extends Button {\n /**\n * The type of the rendered button according to Material 3 spec.\n * \n * @default {ButtonType.filled}\n * @attribute\n */\n @property({ type: String, reflect: true, }) type: IconButtonType;\n\n /**\n * Whether the button can be toggled.\n * A toggle button behaves different as it gets the `aria-pressed` attribute \n * which changes depending on the pressed state.\n * A toggle button is activated until it is clicked/pressed again.\n * A toggle button dispatched `active` event when the press state change. \n * The host can check the `active` property to know the state.\n * \n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) toggle?: boolean;\n\n /**\n * A flag that determines whether the button is activated (pressed when `toggle` is set).\n * It is `undefined` and makes no effect when `toggle` is not set.\n * \n * @attribute\n */\n @property({ type: Boolean, reflect: true, }) active?: boolean;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n constructor() {\n super();\n\n this.type = IconButtonType.standard;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('active')) {\n this.setAttribute('aria-pressed', String(this.active));\n }\n super.update(changedProperties);\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override endPress(config: EndPressConfig): void {\n super.endPress(config);\n this.endRipple();\n const { cancelled, reason } = config;\n if (cancelled) {\n return;\n }\n if (!reason || reason === 'enter' || reason === 'space') {\n if (this.toggle) {\n this.active = !this.active;\n // note, only dispatch events when user interacting with the UI.\n this.dispatchEvent(new Event('active'));\n }\n }\n if (reason === 'enter' || reason === 'space') {\n if (!this.toggle) {\n this.click();\n }\n }\n }\n\n protected override render(): TemplateResult {\n const { pressed=false } = this;\n const containerClasses = classMap({\n surface: true,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n <div class=\"state\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
@@ -35,49 +35,17 @@ export default class UiChip extends UiElement {
35
35
  setDisabled(this, value);
36
36
  this.requestUpdate('disabled', old);
37
37
  }
38
- /**
39
- * The type of the rendered chip.
40
- * @attribute
41
- *
42
- * @see https://m3.material.io/components/chips/guidelines
43
- */
44
- type;
45
- /**
46
- * Whether the chip should be rendered as elevated.
47
- * @attribute
48
- */
49
- elevated;
50
- /**
51
- * Whether the chip renders the "close" icon at the end.
52
- * @attribute
53
- */
54
- closable;
55
- /**
56
- * Whether the chip is currently checked.
57
- * Note, this controls the presentation layer only. It has no meaning when it comes to forms and inputs.
58
- * @attribute
59
- */
60
- checked;
61
- /**
62
- * The ID attribute of the list element that is rendered after activating the chip.
63
- * When this is set the chip renders the dropdown icon at the end and sets `aria-*`
64
- * attributes informing the assistive technology that this chip controls a list.
65
- *
66
- * @attribute
67
- */
68
- list;
69
- ripple;
70
- showRipple = false;
71
- /**
72
- * Determines when the element has an icon in the "icon" slot.
73
- */
74
- hasIcon;
75
- /**
76
- * Determines when the element has an image in the "avatar" slot.
77
- */
78
- hasAvatar;
79
38
  constructor() {
80
39
  super();
40
+ this.showRipple = false;
41
+ this.getRipple = () => {
42
+ this.showRipple = true;
43
+ return this.ripple;
44
+ };
45
+ this.renderRipple = () => {
46
+ const { disabled } = this;
47
+ return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
48
+ };
81
49
  this.disabled = false;
82
50
  this.type = ChipType.assist;
83
51
  this.hasIcon = false;
@@ -136,10 +104,6 @@ export default class UiChip extends UiElement {
136
104
  const element = await this.getRipple();
137
105
  element?.endFocus();
138
106
  }
139
- getRipple = () => {
140
- this.showRipple = true;
141
- return this.ripple;
142
- };
143
107
  endPress(info) {
144
108
  super.endPress(info);
145
109
  this.endRipple();
@@ -255,10 +219,6 @@ export default class UiChip extends UiElement {
255
219
  }
256
220
  return nothing;
257
221
  }
258
- renderRipple = () => {
259
- const { disabled } = this;
260
- return html `<ui-ripple class="ripple" ?disabled="${disabled}"></ui-ripple>`;
261
- };
262
222
  }
263
223
  __decorate([
264
224
  property({ type: Boolean, reflect: true })
@@ -1 +1 @@
1
- {"version":3,"file":"UiChip.js","sourceRoot":"","sources":["../../../src/ui/chip/UiChip.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { EventUtils } from \"@api-client/core/build/browser.js\"; // build/src/lib/events/Utils.js\nimport { UiElement } from \"../UiElement.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { ripple } from '../effects/rippleDirective.js';\nimport { close, arrowDropDown, check } from \"../icons/Icons.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport '../../define/ui/ui-ripple.js';\n\nexport enum ChipType {\n assist = 'assist',\n filter = 'filter',\n input = 'input',\n suggestion = 'suggestion',\n}\n\n/**\n * @slot icon - The leading icon, sized 18x18 px\n * @slot avatar - The leading image, sized 24x24 px\n * @fires list - When the user requested to activate the list associated with the element.\n * @fires select - When the checked state changed through a user interaction. This only related to `filter` chips. Note, `select` is dispatched just before the `click` event.\n */\nexport default class UiChip extends UiElement {\n /**\n * Whether the chip is disabled. The user can't interact with the chip when `true`.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) \n get disabled(): boolean {\n return isDisabled(this);\n }\n\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * The type of the rendered chip.\n * @attribute\n * \n * @see https://m3.material.io/components/chips/guidelines\n */\n @property({ type: String }) type: ChipType;\n\n /**\n * Whether the chip should be rendered as elevated.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) elevated?: boolean;\n\n /**\n * Whether the chip renders the \"close\" icon at the end.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) closable?: boolean;\n\n /**\n * Whether the chip is currently checked.\n * Note, this controls the presentation layer only. It has no meaning when it comes to forms and inputs.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) checked?: boolean;\n\n /**\n * The ID attribute of the list element that is rendered after activating the chip.\n * When this is set the chip renders the dropdown icon at the end and sets `aria-*` \n * attributes informing the assistive technology that this chip controls a list.\n * \n * @attribute\n */\n @property({ type: String, reflect: true }) list?: string;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n /**\n * Determines when the element has an icon in the \"icon\" slot.\n */\n @state() protected hasIcon: boolean;\n\n /**\n * Determines when the element has an image in the \"avatar\" slot.\n */\n @state() protected hasAvatar: boolean;\n\n constructor() {\n super();\n\n this.disabled = false;\n this.type = ChipType.assist;\n this.hasIcon = false;\n this.hasAvatar = false;\n\n this.actionController.cancelKeyboardEvents = true;\n\n this.addEventListener('click', this.handleClick.bind(this));\n this.addEventListener('keydown', this.handleKeyDown.bind(this));\n this.addEventListener('keyup', this.handleKeyUp.bind(this));\n this.addEventListener('pointerdown', this.handlePointerDown.bind(this));\n this.addEventListener('pointerup', this.handlePointerUp.bind(this));\n this.addEventListener('pointercancel', this.handlePointerCancel.bind(this));\n this.addEventListener('pointerleave', this.handlePointerLeave.bind(this));\n this.addEventListener('contextmenu', this.handleContextMenu.bind(this));\n this.addEventListener('focus', this.handleFocus.bind(this));\n this.addEventListener('blur', this.handleBlur.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex') && !this.disabled) {\n this.setAttribute('tabindex', '0');\n }\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override async handleKeyDown(e: KeyboardEvent): Promise<void> {\n super.handleKeyDown(e);\n if (this.type === ChipType.filter && e.code === 'ArrowDown') {\n e.preventDefault();\n this.listAction();\n } else if (this.closable && e.code === 'Backspace') {\n e.preventDefault();\n this.closeAction();\n }\n }\n\n protected async handleFocus(): Promise<void> {\n const element = await this.getRipple();\n element?.beginFocus();\n }\n\n protected async handleBlur(): Promise<void> {\n const element = await this.getRipple();\n element?.endFocus();\n }\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n override endPress(info: EndPressConfig): void {\n super.endPress(info);\n this.endRipple();\n const { cancelled, reason } = info;\n if (cancelled) {\n return;\n }\n if (reason === 'enter' || reason === 'space') {\n this.click();\n }\n }\n\n override handleClick(e: MouseEvent): void {\n super.handleClick(e);\n if (this.type === ChipType.filter) {\n this.toggleChecked();\n }\n }\n\n /**\n * Toggles the \"filter\" type of the chip.\n */\n toggleChecked(): void {\n this.checked = !this.checked;\n this.dispatchEvent(new Event('select'));\n }\n\n /**\n * Sets the `hasIcon` state property when the \"icon\" slot change event is dispatched.\n */\n protected handleIconSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this.hasIcon = !!slot.assignedNodes().length;\n }\n\n /**\n * Sets the `_hasAvatar` state property when the \"avatar\" slot change event is dispatched.\n */\n protected handleAvatarSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this.hasAvatar = !!slot.assignedNodes().length;\n }\n\n protected handleListClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n this.listAction();\n }\n\n protected handleClose(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n this.closeAction();\n }\n\n protected async closeAction(): Promise<void> {\n this.dispatchEvent(new Event('close'));\n }\n\n protected async listAction(): Promise<void> {\n this.dispatchEvent(new Event('list'));\n }\n\n protected override render(): TemplateResult {\n const { pressed = false } = this;\n const containerClasses = classMap({\n surface: true,\n withIcon: this.hasIcon,\n withAvatar: this.hasAvatar,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n ${this.renderLeadingIcon()}\n ${this.renderAvatar()}\n <slot></slot>\n ${this.renderTrailingIcon()}\n </div>\n </div>\n `;\n }\n\n protected renderLeadingIcon(): TemplateResult | typeof nothing {\n const { type } = this;\n if (type === ChipType.suggestion) {\n return nothing;\n }\n if (type === ChipType.filter) {\n const iconClasses = classMap({\n 'leading-icon': true,\n 'check-mark': true,\n checked: !!this.checked,\n });\n return html`<span class=\"${iconClasses}\" role=\"presentation\">${check}</span>`;\n }\n return html`<slot name=\"icon\" @slotchange=\"${this.handleIconSlotChange}\"></slot>`;\n }\n\n protected renderAvatar(): TemplateResult | typeof nothing {\n const { type } = this;\n if (type === ChipType.input) {\n return html`<slot name=\"avatar\" @slotchange=\"${this.handleAvatarSlotChange}\"></slot>`;\n }\n return nothing;\n }\n\n protected renderTrailingIcon(): TemplateResult | typeof nothing {\n const { closable=false, list, type } = this;\n if (type === ChipType.filter) {\n if (list) {\n return html`<span class=\"trailing-icon\" role=\"presentation\" @click=\"${this.handleListClick}\" @keypress=\"${EventUtils.cancelEvent}\">${arrowDropDown}</span>`;\n }\n }\n if (type === ChipType.input && closable) {\n return html`<span \n class=\"trailing-icon\" \n @click=\"${this.handleClose}\" \n @keypress=\"${EventUtils.cancelEvent}\"\n role=\"button\"\n aria-label=\"Activate to close or disabled this chip.\"\n >${close}</span>`;\n }\n return nothing;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}
1
+ {"version":3,"file":"UiChip.js","sourceRoot":"","sources":["../../../src/ui/chip/UiChip.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, TemplateResult } from \"lit\";\nimport { property, queryAsync, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { when } from 'lit/directives/when.js';\nimport { EventUtils } from \"@api-client/core/build/browser.js\"; // build/src/lib/events/Utils.js\nimport { UiElement } from \"../UiElement.js\";\nimport UiRipple from \"../effects/ripple.js\";\nimport { ripple } from '../effects/rippleDirective.js';\nimport { close, arrowDropDown, check } from \"../icons/Icons.js\";\nimport { isDisabled, setDisabled } from \"../lib/disabled.js\";\nimport { BeginPressConfig, EndPressConfig } from \"../controllers/ActionController.js\";\nimport '../../define/ui/ui-ripple.js';\n\nexport enum ChipType {\n assist = 'assist',\n filter = 'filter',\n input = 'input',\n suggestion = 'suggestion',\n}\n\n/**\n * @slot icon - The leading icon, sized 18x18 px\n * @slot avatar - The leading image, sized 24x24 px\n * @fires list - When the user requested to activate the list associated with the element.\n * @fires select - When the checked state changed through a user interaction. This only related to `filter` chips. Note, `select` is dispatched just before the `click` event.\n */\nexport default class UiChip extends UiElement {\n /**\n * Whether the chip is disabled. The user can't interact with the chip when `true`.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) \n get disabled(): boolean {\n return isDisabled(this);\n }\n\n set disabled(value: boolean) {\n const old = isDisabled(this);\n setDisabled(this, value);\n this.requestUpdate('disabled', old);\n }\n\n /**\n * The type of the rendered chip.\n * @attribute\n * \n * @see https://m3.material.io/components/chips/guidelines\n */\n @property({ type: String }) type: ChipType;\n\n /**\n * Whether the chip should be rendered as elevated.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) elevated?: boolean;\n\n /**\n * Whether the chip renders the \"close\" icon at the end.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) closable?: boolean;\n\n /**\n * Whether the chip is currently checked.\n * Note, this controls the presentation layer only. It has no meaning when it comes to forms and inputs.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) checked?: boolean;\n\n /**\n * The ID attribute of the list element that is rendered after activating the chip.\n * When this is set the chip renders the dropdown icon at the end and sets `aria-*` \n * attributes informing the assistive technology that this chip controls a list.\n * \n * @attribute\n */\n @property({ type: String, reflect: true }) list?: string;\n\n @queryAsync('ui-ripple') protected ripple!: Promise<UiRipple | null>;\n\n @state() protected showRipple = false;\n\n /**\n * Determines when the element has an icon in the \"icon\" slot.\n */\n @state() protected hasIcon: boolean;\n\n /**\n * Determines when the element has an image in the \"avatar\" slot.\n */\n @state() protected hasAvatar: boolean;\n\n constructor() {\n super();\n\n this.disabled = false;\n this.type = ChipType.assist;\n this.hasIcon = false;\n this.hasAvatar = false;\n\n this.actionController.cancelKeyboardEvents = true;\n\n this.addEventListener('click', this.handleClick.bind(this));\n this.addEventListener('keydown', this.handleKeyDown.bind(this));\n this.addEventListener('keyup', this.handleKeyUp.bind(this));\n this.addEventListener('pointerdown', this.handlePointerDown.bind(this));\n this.addEventListener('pointerup', this.handlePointerUp.bind(this));\n this.addEventListener('pointercancel', this.handlePointerCancel.bind(this));\n this.addEventListener('pointerleave', this.handlePointerLeave.bind(this));\n this.addEventListener('contextmenu', this.handleContextMenu.bind(this));\n this.addEventListener('focus', this.handleFocus.bind(this));\n this.addEventListener('blur', this.handleBlur.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex') && !this.disabled) {\n this.setAttribute('tabindex', '0');\n }\n }\n\n protected async pressRipple(): Promise<void> {\n const element = await this.getRipple();\n if (element && !element.isPressed) {\n element.beginPress();\n }\n }\n\n protected async endRipple(): Promise<void> {\n const element = await this.getRipple();\n element?.endPress();\n }\n\n override beginPress(options: BeginPressConfig): void {\n super.beginPress(options);\n this.pressRipple();\n }\n\n override async handleKeyDown(e: KeyboardEvent): Promise<void> {\n super.handleKeyDown(e);\n if (this.type === ChipType.filter && e.code === 'ArrowDown') {\n e.preventDefault();\n this.listAction();\n } else if (this.closable && e.code === 'Backspace') {\n e.preventDefault();\n this.closeAction();\n }\n }\n\n protected async handleFocus(): Promise<void> {\n const element = await this.getRipple();\n element?.beginFocus();\n }\n\n protected async handleBlur(): Promise<void> {\n const element = await this.getRipple();\n element?.endFocus();\n }\n\n protected readonly getRipple = (): Promise<UiRipple | null> => {\n this.showRipple = true;\n return this.ripple;\n };\n\n override endPress(info: EndPressConfig): void {\n super.endPress(info);\n this.endRipple();\n const { cancelled, reason } = info;\n if (cancelled) {\n return;\n }\n if (reason === 'enter' || reason === 'space') {\n this.click();\n }\n }\n\n override handleClick(e: MouseEvent): void {\n super.handleClick(e);\n if (this.type === ChipType.filter) {\n this.toggleChecked();\n }\n }\n\n /**\n * Toggles the \"filter\" type of the chip.\n */\n toggleChecked(): void {\n this.checked = !this.checked;\n this.dispatchEvent(new Event('select'));\n }\n\n /**\n * Sets the `hasIcon` state property when the \"icon\" slot change event is dispatched.\n */\n protected handleIconSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this.hasIcon = !!slot.assignedNodes().length;\n }\n\n /**\n * Sets the `_hasAvatar` state property when the \"avatar\" slot change event is dispatched.\n */\n protected handleAvatarSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this.hasAvatar = !!slot.assignedNodes().length;\n }\n\n protected handleListClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n this.listAction();\n }\n\n protected handleClose(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n this.closeAction();\n }\n\n protected async closeAction(): Promise<void> {\n this.dispatchEvent(new Event('close'));\n }\n\n protected async listAction(): Promise<void> {\n this.dispatchEvent(new Event('list'));\n }\n\n protected override render(): TemplateResult {\n const { pressed = false } = this;\n const containerClasses = classMap({\n surface: true,\n withIcon: this.hasIcon,\n withAvatar: this.hasAvatar,\n pressed,\n });\n return html`\n <div class=\"${containerClasses}\" ${ripple(this.getRipple)}>\n <div class=\"container\"></div>\n ${when(this.showRipple, this.renderRipple)}\n <div class=\"content\">\n ${this.renderLeadingIcon()}\n ${this.renderAvatar()}\n <slot></slot>\n ${this.renderTrailingIcon()}\n </div>\n </div>\n `;\n }\n\n protected renderLeadingIcon(): TemplateResult | typeof nothing {\n const { type } = this;\n if (type === ChipType.suggestion) {\n return nothing;\n }\n if (type === ChipType.filter) {\n const iconClasses = classMap({\n 'leading-icon': true,\n 'check-mark': true,\n checked: !!this.checked,\n });\n return html`<span class=\"${iconClasses}\" role=\"presentation\">${check}</span>`;\n }\n return html`<slot name=\"icon\" @slotchange=\"${this.handleIconSlotChange}\"></slot>`;\n }\n\n protected renderAvatar(): TemplateResult | typeof nothing {\n const { type } = this;\n if (type === ChipType.input) {\n return html`<slot name=\"avatar\" @slotchange=\"${this.handleAvatarSlotChange}\"></slot>`;\n }\n return nothing;\n }\n\n protected renderTrailingIcon(): TemplateResult | typeof nothing {\n const { closable=false, list, type } = this;\n if (type === ChipType.filter) {\n if (list) {\n return html`<span class=\"trailing-icon\" role=\"presentation\" @click=\"${this.handleListClick}\" @keypress=\"${EventUtils.cancelEvent}\">${arrowDropDown}</span>`;\n }\n }\n if (type === ChipType.input && closable) {\n return html`<span \n class=\"trailing-icon\" \n @click=\"${this.handleClose}\" \n @keypress=\"${EventUtils.cancelEvent}\"\n role=\"button\"\n aria-label=\"Activate to close or disabled this chip.\"\n >${close}</span>`;\n }\n return nothing;\n }\n\n protected renderRipple = (): TemplateResult => {\n const { disabled } = this;\n return html`<ui-ripple class=\"ripple\" ?disabled=\"${disabled}\"></ui-ripple>`;\n };\n}\n"]}