@api-client/ui 0.2.13 → 0.3.1

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 (326) hide show
  1. package/.vscode/settings.json +1 -0
  2. package/build/src/core/ModalActivity.d.ts +1 -1
  3. package/build/src/core/ModalActivity.d.ts.map +1 -1
  4. package/build/src/core/ModalActivity.js +6 -5
  5. package/build/src/core/ModalActivity.js.map +1 -1
  6. package/build/src/core/ThemeManager.d.ts +4 -2
  7. package/build/src/core/ThemeManager.d.ts.map +1 -1
  8. package/build/src/core/ThemeManager.js.map +1 -1
  9. package/build/src/demo/DemoPage.d.ts +1 -4
  10. package/build/src/demo/DemoPage.d.ts.map +1 -1
  11. package/build/src/demo/DemoPage.js +2 -5
  12. package/build/src/demo/DemoPage.js.map +1 -1
  13. package/build/src/elements/authorization/ui/CcAuthorization.d.ts +1 -1
  14. package/build/src/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
  15. package/build/src/elements/authorization/ui/CcAuthorization.js +2 -2
  16. package/build/src/elements/authorization/ui/CcAuthorization.js.map +1 -1
  17. package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts +1 -1
  18. package/build/src/elements/authorization/ui/OAuth2Authorization.d.ts.map +1 -1
  19. package/build/src/elements/authorization/ui/OAuth2Authorization.js +11 -5
  20. package/build/src/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  21. package/build/src/elements/authorization/ui/OidcAuthorization.d.ts +1 -2
  22. package/build/src/elements/authorization/ui/OidcAuthorization.d.ts.map +1 -1
  23. package/build/src/elements/authorization/ui/OidcAuthorization.js +10 -8
  24. package/build/src/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  25. package/build/src/elements/code/HttpSnippets.d.ts +1 -1
  26. package/build/src/elements/code/HttpSnippets.d.ts.map +1 -1
  27. package/build/src/elements/code/HttpSnippets.js +5 -5
  28. package/build/src/elements/code/HttpSnippets.js.map +1 -1
  29. package/build/src/elements/dialog/internals/ConfirmDelete.d.ts +1 -1
  30. package/build/src/elements/dialog/internals/ConfirmDelete.d.ts.map +1 -1
  31. package/build/src/elements/dialog/internals/ConfirmDelete.js +5 -5
  32. package/build/src/elements/dialog/internals/ConfirmDelete.js.map +1 -1
  33. package/build/src/elements/dialog/internals/Rename.d.ts +1 -1
  34. package/build/src/elements/dialog/internals/Rename.d.ts.map +1 -1
  35. package/build/src/elements/dialog/internals/Rename.js +6 -5
  36. package/build/src/elements/dialog/internals/Rename.js.map +1 -1
  37. package/build/src/elements/environment/EnvironmentEditor.d.ts +1 -1
  38. package/build/src/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  39. package/build/src/elements/environment/EnvironmentEditor.js +5 -4
  40. package/build/src/elements/environment/EnvironmentEditor.js.map +1 -1
  41. package/build/src/elements/http/BodyEditor.d.ts +1 -3
  42. package/build/src/elements/http/BodyEditor.d.ts.map +1 -1
  43. package/build/src/elements/http/BodyEditor.js +25 -20
  44. package/build/src/elements/http/BodyEditor.js.map +1 -1
  45. package/build/src/elements/http/BodyMultipartEditor.d.ts +1 -1
  46. package/build/src/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  47. package/build/src/elements/http/BodyMultipartEditor.js +3 -3
  48. package/build/src/elements/http/BodyMultipartEditor.js.map +1 -1
  49. package/build/src/elements/http/CertificateAdd.element.d.ts +1 -3
  50. package/build/src/elements/http/CertificateAdd.element.d.ts.map +1 -1
  51. package/build/src/elements/http/CertificateAdd.element.js +6 -10
  52. package/build/src/elements/http/CertificateAdd.element.js.map +1 -1
  53. package/build/src/elements/http/HeadersForm.d.ts +1 -1
  54. package/build/src/elements/http/HeadersForm.d.ts.map +1 -1
  55. package/build/src/elements/http/HeadersForm.js +3 -3
  56. package/build/src/elements/http/HeadersForm.js.map +1 -1
  57. package/build/src/elements/http/HttpAssertions.element.d.ts +1 -1
  58. package/build/src/elements/http/HttpAssertions.element.d.ts.map +1 -1
  59. package/build/src/elements/http/HttpAssertions.element.js +2 -2
  60. package/build/src/elements/http/HttpAssertions.element.js.map +1 -1
  61. package/build/src/elements/http/HttpFlows.element.d.ts +1 -1
  62. package/build/src/elements/http/HttpFlows.element.d.ts.map +1 -1
  63. package/build/src/elements/http/HttpFlows.element.js +6 -6
  64. package/build/src/elements/http/HttpFlows.element.js.map +1 -1
  65. package/build/src/elements/http/RequestEditor.d.ts +1 -3
  66. package/build/src/elements/http/RequestEditor.d.ts.map +1 -1
  67. package/build/src/elements/http/RequestEditor.js +10 -11
  68. package/build/src/elements/http/RequestEditor.js.map +1 -1
  69. package/build/src/elements/http/UrlParamsForm.d.ts +1 -1
  70. package/build/src/elements/http/UrlParamsForm.d.ts.map +1 -1
  71. package/build/src/elements/http/UrlParamsForm.js +4 -4
  72. package/build/src/elements/http/UrlParamsForm.js.map +1 -1
  73. package/build/src/elements/project/HttpProjectRequest.d.ts +1 -1
  74. package/build/src/elements/project/HttpProjectRequest.d.ts.map +1 -1
  75. package/build/src/elements/project/HttpProjectRequest.js +3 -3
  76. package/build/src/elements/project/HttpProjectRequest.js.map +1 -1
  77. package/build/src/elements/project/HttpProjectRequestHistory.d.ts +1 -2
  78. package/build/src/elements/project/HttpProjectRequestHistory.d.ts.map +1 -1
  79. package/build/src/elements/project/HttpProjectRequestHistory.js +5 -6
  80. package/build/src/elements/project/HttpProjectRequestHistory.js.map +1 -1
  81. package/build/src/elements/project/ProjectRunReport.d.ts +1 -1
  82. package/build/src/elements/project/ProjectRunReport.d.ts.map +1 -1
  83. package/build/src/elements/project/ProjectRunReport.js +7 -7
  84. package/build/src/elements/project/ProjectRunReport.js.map +1 -1
  85. package/build/src/elements/project/ProjectRunner.d.ts +1 -2
  86. package/build/src/elements/project/ProjectRunner.d.ts.map +1 -1
  87. package/build/src/elements/project/ProjectRunner.js +4 -5
  88. package/build/src/elements/project/ProjectRunner.js.map +1 -1
  89. package/build/src/md/button/internals/base.d.ts +98 -0
  90. package/build/src/md/button/internals/base.d.ts.map +1 -0
  91. package/build/src/md/button/internals/base.js +353 -0
  92. package/build/src/md/button/internals/base.js.map +1 -0
  93. package/build/src/md/button/internals/button.d.ts +7 -75
  94. package/build/src/md/button/internals/button.d.ts.map +1 -1
  95. package/build/src/md/button/internals/button.js +18 -247
  96. package/build/src/md/button/internals/button.js.map +1 -1
  97. package/build/src/md/button/internals/{button-styles.d.ts → button.styles.d.ts} +1 -1
  98. package/build/src/md/button/internals/button.styles.d.ts.map +1 -0
  99. package/build/src/md/button/internals/button.styles.js +319 -0
  100. package/build/src/md/button/internals/button.styles.js.map +1 -0
  101. package/build/src/md/button/internals/group.d.ts +54 -0
  102. package/build/src/md/button/internals/group.d.ts.map +1 -0
  103. package/build/src/md/button/internals/group.js +157 -0
  104. package/build/src/md/button/internals/group.js.map +1 -0
  105. package/build/src/md/button/internals/{text-button.styles.d.ts → group.styles.d.ts} +1 -1
  106. package/build/src/md/button/internals/group.styles.d.ts.map +1 -0
  107. package/build/src/md/button/internals/group.styles.js +102 -0
  108. package/build/src/md/button/internals/group.styles.js.map +1 -0
  109. package/build/src/md/button/ui-button-group.d.ts +11 -0
  110. package/build/src/md/button/ui-button-group.d.ts.map +1 -0
  111. package/build/src/md/{icon-button/ui-filled-icon-button.js → button/ui-button-group.js} +10 -11
  112. package/build/src/md/button/ui-button-group.js.map +1 -0
  113. package/build/src/md/button/ui-button.d.ts +14 -0
  114. package/build/src/md/button/ui-button.d.ts.map +1 -0
  115. package/build/src/md/button/{ui-text-button.js → ui-button.js} +10 -11
  116. package/build/src/md/button/ui-button.js.map +1 -0
  117. package/build/src/md/dialog/internals/Dialog.d.ts +5 -5
  118. package/build/src/md/dialog/internals/Dialog.d.ts.map +1 -1
  119. package/build/src/md/dialog/internals/Dialog.js +14 -9
  120. package/build/src/md/dialog/internals/Dialog.js.map +1 -1
  121. package/build/src/md/dropdown-list/internals/UiDropdownList.d.ts +1 -1
  122. package/build/src/md/dropdown-list/internals/UiDropdownList.js +1 -1
  123. package/build/src/md/dropdown-list/internals/UiDropdownList.js.map +1 -1
  124. package/build/src/md/icon-button/internals/IconButton.d.ts +12 -36
  125. package/build/src/md/icon-button/internals/IconButton.d.ts.map +1 -1
  126. package/build/src/md/icon-button/internals/IconButton.js +32 -144
  127. package/build/src/md/icon-button/internals/IconButton.js.map +1 -1
  128. package/build/src/md/{button/internals/filled-button.styles.d.ts → icon-button/internals/IconButton.styles.d.ts} +1 -1
  129. package/build/src/md/icon-button/internals/IconButton.styles.d.ts.map +1 -0
  130. package/build/src/md/icon-button/internals/IconButton.styles.js +286 -0
  131. package/build/src/md/icon-button/internals/IconButton.styles.js.map +1 -0
  132. package/build/src/md/icon-button/ui-icon-button.d.ts.map +1 -1
  133. package/build/src/md/icon-button/ui-icon-button.js +2 -3
  134. package/build/src/md/icon-button/ui-icon-button.js.map +1 -1
  135. package/build/src/md/input/Input.d.ts +4 -3
  136. package/build/src/md/input/Input.d.ts.map +1 -1
  137. package/build/src/md/input/Input.js +15 -11
  138. package/build/src/md/input/Input.js.map +1 -1
  139. package/build/src/md/ripple/internals/ripple.d.ts +2 -0
  140. package/build/src/md/ripple/internals/ripple.d.ts.map +1 -1
  141. package/build/src/md/ripple/internals/ripple.js +20 -10
  142. package/build/src/md/ripple/internals/ripple.js.map +1 -1
  143. package/build/src/md/ripple/internals/ripple.styles.d.ts.map +1 -1
  144. package/build/src/md/ripple/internals/ripple.styles.js +8 -20
  145. package/build/src/md/ripple/internals/ripple.styles.js.map +1 -1
  146. package/build/src/md/snackbar/internals/Snackbar.d.ts +1 -1
  147. package/build/src/md/snackbar/internals/Snackbar.d.ts.map +1 -1
  148. package/build/src/md/snackbar/internals/Snackbar.js +4 -2
  149. package/build/src/md/snackbar/internals/Snackbar.js.map +1 -1
  150. package/build/src/md/text-field/internals/common.styles.d.ts.map +1 -1
  151. package/build/src/md/text-field/internals/common.styles.js +11 -5
  152. package/build/src/md/text-field/internals/common.styles.js.map +1 -1
  153. package/build/src/md/text-field/internals/filled.styles.d.ts.map +1 -1
  154. package/build/src/md/text-field/internals/filled.styles.js +7 -0
  155. package/build/src/md/text-field/internals/filled.styles.js.map +1 -1
  156. package/build/src/md/text-field/internals/outlined.styles.d.ts.map +1 -1
  157. package/build/src/md/text-field/internals/outlined.styles.js +29 -9
  158. package/build/src/md/text-field/internals/outlined.styles.js.map +1 -1
  159. package/build/src/styles/m3/dialog.module.d.ts +2 -2
  160. package/build/src/styles/m3/dialog.module.js +2 -2
  161. package/build/src/styles/m3/dialog.module.js.map +1 -1
  162. package/build/src/styles/m3/tokens.d.ts.map +1 -1
  163. package/build/src/styles/m3/tokens.js +208 -182
  164. package/build/src/styles/m3/tokens.js.map +1 -1
  165. package/demo/elements/authorization/oauth-authorize.html +1 -1
  166. package/demo/elements/authorization/oauth-authorize.ts +1 -1
  167. package/demo/elements/environment/variables-editor.ts +2 -2
  168. package/demo/elements/http/url-editing.ts +3 -3
  169. package/demo/elements/project/request-editor.ts +4 -4
  170. package/demo/layout/index.ts +5 -5
  171. package/demo/md/buttons/button.html +121 -0
  172. package/demo/md/buttons/button.ts +246 -0
  173. package/demo/md/buttons/{index.html → group.html} +15 -2
  174. package/demo/md/buttons/group.ts +171 -0
  175. package/demo/md/checkbox/index.ts +1 -1
  176. package/demo/md/dialog/dialog.ts +8 -9
  177. package/demo/md/dropdown-list/index.ts +68 -71
  178. package/demo/md/icon-button/index.html +97 -7
  179. package/demo/md/icon-button/index.ts +97 -201
  180. package/demo/md/index.html +3 -1
  181. package/demo/md/inputs/input.html +39 -0
  182. package/demo/md/inputs/input.ts +204 -419
  183. package/demo/md/inputs/radio.ts +1 -1
  184. package/demo/md/inputs/switch.ts +1 -1
  185. package/demo/md/notification/snack.ts +5 -5
  186. package/demo/md/progress/progress.ts +4 -3
  187. package/package.json +2 -2
  188. package/src/core/ModalActivity.ts +6 -5
  189. package/src/core/ThemeManager.ts +5 -4
  190. package/src/demo/DemoPage.ts +2 -5
  191. package/src/elements/authorization/ui/CcAuthorization.ts +2 -2
  192. package/src/elements/authorization/ui/OAuth2Authorization.ts +11 -5
  193. package/src/elements/authorization/ui/OidcAuthorization.ts +10 -8
  194. package/src/elements/code/HttpSnippets.ts +5 -5
  195. package/src/elements/dialog/internals/ConfirmDelete.ts +5 -5
  196. package/src/elements/dialog/internals/Rename.ts +6 -5
  197. package/src/elements/environment/EnvironmentEditor.ts +5 -4
  198. package/src/elements/http/BodyEditor.ts +25 -20
  199. package/src/elements/http/BodyMultipartEditor.ts +3 -3
  200. package/src/elements/http/CertificateAdd.element.ts +6 -10
  201. package/src/elements/http/HeadersForm.ts +3 -3
  202. package/src/elements/http/HttpAssertions.element.ts +2 -2
  203. package/src/elements/http/HttpFlows.element.ts +6 -6
  204. package/src/elements/http/RequestEditor.ts +10 -11
  205. package/src/elements/http/UrlParamsForm.ts +4 -4
  206. package/src/elements/project/HttpProjectRequest.ts +3 -3
  207. package/src/elements/project/HttpProjectRequestHistory.ts +5 -6
  208. package/src/elements/project/ProjectRunReport.ts +7 -7
  209. package/src/elements/project/ProjectRunner.ts +4 -5
  210. package/src/md/button/internals/base.ts +299 -0
  211. package/src/md/button/internals/button.styles.ts +319 -0
  212. package/src/md/button/internals/button.ts +8 -234
  213. package/src/md/button/internals/group.styles.ts +102 -0
  214. package/src/md/button/internals/group.ts +121 -0
  215. package/src/md/button/ui-button-group.ts +15 -0
  216. package/src/md/button/ui-button.ts +18 -0
  217. package/src/md/dialog/internals/Dialog.ts +14 -9
  218. package/src/md/dropdown-list/internals/UiDropdownList.ts +1 -1
  219. package/src/md/icon-button/internals/IconButton.styles.ts +286 -0
  220. package/src/md/icon-button/internals/IconButton.ts +15 -139
  221. package/src/md/icon-button/ui-icon-button.ts +2 -3
  222. package/src/md/input/Input.ts +16 -11
  223. package/src/md/ripple/internals/ripple.styles.ts +8 -20
  224. package/src/md/ripple/internals/ripple.ts +21 -13
  225. package/src/md/snackbar/internals/Snackbar.ts +4 -2
  226. package/src/md/text-field/internals/common.styles.ts +11 -5
  227. package/src/md/text-field/internals/filled.styles.ts +7 -0
  228. package/src/md/text-field/internals/outlined.styles.ts +29 -9
  229. package/src/styles/m3/dialog.module.ts +2 -2
  230. package/src/styles/m3/native.css +270 -0
  231. package/src/styles/m3/tokens.css +208 -182
  232. package/src/styles/m3/tokens.ts +208 -182
  233. package/test/ui/button/UiButton.test.ts +51 -29
  234. package/test/ui/button/UiIconButton.test.ts +25 -19
  235. package/test/ui/dialog/UiDialog.test.ts +10 -10
  236. package/build/src/md/button/internals/button-styles.d.ts.map +0 -1
  237. package/build/src/md/button/internals/button-styles.js +0 -143
  238. package/build/src/md/button/internals/button-styles.js.map +0 -1
  239. package/build/src/md/button/internals/elevated-button.d.ts +0 -4
  240. package/build/src/md/button/internals/elevated-button.d.ts.map +0 -1
  241. package/build/src/md/button/internals/elevated-button.js +0 -4
  242. package/build/src/md/button/internals/elevated-button.js.map +0 -1
  243. package/build/src/md/button/internals/elevated-button.styles.d.ts +0 -3
  244. package/build/src/md/button/internals/elevated-button.styles.d.ts.map +0 -1
  245. package/build/src/md/button/internals/elevated-button.styles.js +0 -38
  246. package/build/src/md/button/internals/elevated-button.styles.js.map +0 -1
  247. package/build/src/md/button/internals/filled-button.d.ts +0 -4
  248. package/build/src/md/button/internals/filled-button.d.ts.map +0 -1
  249. package/build/src/md/button/internals/filled-button.js +0 -4
  250. package/build/src/md/button/internals/filled-button.js.map +0 -1
  251. package/build/src/md/button/internals/filled-button.styles.d.ts.map +0 -1
  252. package/build/src/md/button/internals/filled-button.styles.js +0 -30
  253. package/build/src/md/button/internals/filled-button.styles.js.map +0 -1
  254. package/build/src/md/button/internals/filled-tonal-button.d.ts +0 -4
  255. package/build/src/md/button/internals/filled-tonal-button.d.ts.map +0 -1
  256. package/build/src/md/button/internals/filled-tonal-button.js +0 -4
  257. package/build/src/md/button/internals/filled-tonal-button.js.map +0 -1
  258. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts +0 -3
  259. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts.map +0 -1
  260. package/build/src/md/button/internals/filled-tonal-button.styles.js +0 -30
  261. package/build/src/md/button/internals/filled-tonal-button.styles.js.map +0 -1
  262. package/build/src/md/button/internals/outlined-button.d.ts +0 -4
  263. package/build/src/md/button/internals/outlined-button.d.ts.map +0 -1
  264. package/build/src/md/button/internals/outlined-button.js +0 -4
  265. package/build/src/md/button/internals/outlined-button.js.map +0 -1
  266. package/build/src/md/button/internals/outlined-button.styles.d.ts +0 -3
  267. package/build/src/md/button/internals/outlined-button.styles.d.ts.map +0 -1
  268. package/build/src/md/button/internals/outlined-button.styles.js +0 -31
  269. package/build/src/md/button/internals/outlined-button.styles.js.map +0 -1
  270. package/build/src/md/button/internals/text-button.d.ts +0 -4
  271. package/build/src/md/button/internals/text-button.d.ts.map +0 -1
  272. package/build/src/md/button/internals/text-button.js +0 -4
  273. package/build/src/md/button/internals/text-button.js.map +0 -1
  274. package/build/src/md/button/internals/text-button.styles.d.ts.map +0 -1
  275. package/build/src/md/button/internals/text-button.styles.js +0 -30
  276. package/build/src/md/button/internals/text-button.styles.js.map +0 -1
  277. package/build/src/md/button/ui-elevated-button.d.ts +0 -14
  278. package/build/src/md/button/ui-elevated-button.d.ts.map +0 -1
  279. package/build/src/md/button/ui-elevated-button.js +0 -31
  280. package/build/src/md/button/ui-elevated-button.js.map +0 -1
  281. package/build/src/md/button/ui-filled-button.d.ts +0 -14
  282. package/build/src/md/button/ui-filled-button.d.ts.map +0 -1
  283. package/build/src/md/button/ui-filled-button.js +0 -31
  284. package/build/src/md/button/ui-filled-button.js.map +0 -1
  285. package/build/src/md/button/ui-filled-tonal-button.d.ts +0 -14
  286. package/build/src/md/button/ui-filled-tonal-button.d.ts.map +0 -1
  287. package/build/src/md/button/ui-filled-tonal-button.js +0 -31
  288. package/build/src/md/button/ui-filled-tonal-button.js.map +0 -1
  289. package/build/src/md/button/ui-outlined-button.d.ts +0 -14
  290. package/build/src/md/button/ui-outlined-button.d.ts.map +0 -1
  291. package/build/src/md/button/ui-outlined-button.js +0 -31
  292. package/build/src/md/button/ui-outlined-button.js.map +0 -1
  293. package/build/src/md/button/ui-text-button.d.ts +0 -14
  294. package/build/src/md/button/ui-text-button.d.ts.map +0 -1
  295. package/build/src/md/button/ui-text-button.js.map +0 -1
  296. package/build/src/md/icon-button/ui-filled-icon-button.d.ts +0 -11
  297. package/build/src/md/icon-button/ui-filled-icon-button.d.ts.map +0 -1
  298. package/build/src/md/icon-button/ui-filled-icon-button.js.map +0 -1
  299. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts +0 -11
  300. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts.map +0 -1
  301. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js +0 -28
  302. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js.map +0 -1
  303. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts +0 -11
  304. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts.map +0 -1
  305. package/build/src/md/icon-button/ui-outlined-icon-button.js +0 -28
  306. package/build/src/md/icon-button/ui-outlined-icon-button.js.map +0 -1
  307. package/demo/md/buttons/index.ts +0 -279
  308. package/src/md/button/internals/button-styles.ts +0 -143
  309. package/src/md/button/internals/elevated-button.styles.ts +0 -38
  310. package/src/md/button/internals/elevated-button.ts +0 -3
  311. package/src/md/button/internals/filled-button.styles.ts +0 -30
  312. package/src/md/button/internals/filled-button.ts +0 -3
  313. package/src/md/button/internals/filled-tonal-button.styles.ts +0 -30
  314. package/src/md/button/internals/filled-tonal-button.ts +0 -3
  315. package/src/md/button/internals/outlined-button.styles.ts +0 -31
  316. package/src/md/button/internals/outlined-button.ts +0 -3
  317. package/src/md/button/internals/text-button.styles.ts +0 -30
  318. package/src/md/button/internals/text-button.ts +0 -3
  319. package/src/md/button/ui-elevated-button.ts +0 -19
  320. package/src/md/button/ui-filled-button.ts +0 -19
  321. package/src/md/button/ui-filled-tonal-button.ts +0 -19
  322. package/src/md/button/ui-outlined-button.ts +0 -19
  323. package/src/md/button/ui-text-button.ts +0 -19
  324. package/src/md/icon-button/ui-filled-icon-button.ts +0 -16
  325. package/src/md/icon-button/ui-filled-tonal-icon-button.ts +0 -16
  326. package/src/md/icon-button/ui-outlined-icon-button.ts +0 -16
@@ -6,7 +6,7 @@ import { HttpFlowsUi, StepsTarget } from './HttpFlowsUi.js'
6
6
  import type SwitchElement from '../../md/switch/internals/SwitchElement.js'
7
7
  import type Input from '../../md/input/Input.js'
8
8
  import UiDialog, { UiDialogClosingReason } from '../../md/dialog/internals/Dialog.js'
9
- import '../../md/button/ui-filled-tonal-button.js'
9
+ import '../../md/button/ui-button.js'
10
10
  import '../../md/switch/ui-switch.js'
11
11
  import '../../md/dialog/ui-dialog.js'
12
12
  import '../../md/divider/ui-divider.js'
@@ -165,7 +165,7 @@ export default class HttpAssertions extends HttpFlowsUi {
165
165
  protected renderActionButtons(): TemplateResult {
166
166
  return html`
167
167
  <div class="editor-actions">
168
- <ui-filled-tonal-button @click="${this.handleAdd}" class="add-button">Add</ui-filled-tonal-button>
168
+ <ui-button color="tonal" @click="${this.handleAdd}" class="add-button">Add</ui-button>
169
169
  </div>
170
170
  `
171
171
  }
@@ -11,7 +11,7 @@ import { HttpFlowsUi, StepsTarget } from './HttpFlowsUi.js'
11
11
  import '../../md/list/ui-list.js'
12
12
  import '../../md/list/ui-list-item.js'
13
13
  import '../../md/dropdown-list/ui-dropdown-list.js'
14
- import '../../md/button/ui-outlined-button.js'
14
+ import '../../md/button/ui-button.js'
15
15
  import '../../md/divider/ui-divider.js'
16
16
  import '../../md/dialog/ui-dialog.js'
17
17
  import '../dialog/rename-dialog.js'
@@ -451,10 +451,10 @@ export default class HttpFlows extends HttpFlowsUi {
451
451
  const label = trigger === 'request' ? 'Pre-request' : 'Post-request'
452
452
  return html`
453
453
  <ui-dropdown-list @select="${this.handleTriggerSelect}" horizontalAlign="right" closeOnOutsideClick>
454
- <ui-outlined-button class="new-button">
454
+ <ui-button color="outlined" class="new-button">
455
455
  <ui-icon icon="arrowDropDown" slot="icon"></ui-icon>
456
456
  ${label}
457
- </ui-outlined-button>
457
+ </ui-button>
458
458
  <ui-list slot="dropdown" role="menu">
459
459
  <ui-list-item data-trigger="request" role="menuitem" title="Select pre-request flows"
460
460
  >Pre-request</ui-list-item
@@ -474,10 +474,10 @@ export default class HttpFlows extends HttpFlowsUi {
474
474
  const hasItems = !!items.length
475
475
  return html`
476
476
  <ui-dropdown-list @select="${this.handleFlowSelect}" horizontalAlign="right" closeOnOutsideClick>
477
- <ui-outlined-button class="new-button">
477
+ <ui-button color="outlined" class="new-button">
478
478
  <ui-icon icon="arrowDropDown" slot="icon"></ui-icon>
479
479
  ${label}
480
- </ui-outlined-button>
480
+ </ui-button>
481
481
  <ui-list slot="dropdown" role="menu">
482
482
  ${hasItems
483
483
  ? html`
@@ -569,7 +569,7 @@ export default class HttpFlows extends HttpFlowsUi {
569
569
  return html`
570
570
  <div class="empty-message">Create a flow to get started.</div>
571
571
  <div class="empty-message">
572
- <ui-outlined-button @click="${this.handleAdd}" class="empty-button">Create</ui-outlined-button>
572
+ <ui-button color="outlined" @click="${this.handleAdd}" class="empty-button">Create</ui-button>
573
573
  </div>
574
574
  `
575
575
  }
@@ -37,9 +37,7 @@ import '../../define/http/http-request-config.js'
37
37
  import '../../md/dropdown-list/ui-dropdown-list.js'
38
38
  import '../../md/list/ui-list.js'
39
39
  import '../../md/list/ui-list-item.js'
40
- import '../../md/button/ui-text-button.js'
41
- import '../../md/button/ui-filled-button.js'
42
- import '../../md/button/ui-filled-tonal-button.js'
40
+ import '../../md/button/ui-button.js'
43
41
  import '../../md/tabs/ui-tabs.js'
44
42
  import '../../md/tabs/ui-tab.js'
45
43
  import '../../md/divider/ui-divider.js'
@@ -769,10 +767,10 @@ export default class RequestEditor extends ApiElement {
769
767
  class="verb-dropdown"
770
768
  closeOnOutsideClick
771
769
  >
772
- <ui-text-button class="button">
770
+ <ui-button color="text" class="button">
773
771
  ${method}
774
772
  <ui-icon icon="arrowDropDown"></ui-icon>
775
- </ui-text-button>
773
+ </ui-button>
776
774
  <ui-list slot="dropdown" role="menu"> ${this.renderHttpVerbOptions()} </ui-list>
777
775
  </ui-dropdown-list>
778
776
  `
@@ -816,11 +814,11 @@ export default class RequestEditor extends ApiElement {
816
814
  protected renderSendButton(): TemplateResult | string {
817
815
  if (this.loading) {
818
816
  return html`
819
- <ui-filled-button title="Abort the request" class="send-button" @click="${this.abort}">Abort</ui-filled-button>
817
+ <ui-button color="filled" title="Abort the request" class="send-button" @click="${this.abort}">Abort</ui-button>
820
818
  `
821
819
  }
822
820
  return html`
823
- <ui-filled-button title="Send the request" class="send-button" @click="${this.send}">Send</ui-filled-button>
821
+ <ui-button color="filled" title="Send the request" class="send-button" @click="${this.send}">Send</ui-button>
824
822
  `
825
823
  }
826
824
 
@@ -950,14 +948,15 @@ export default class RequestEditor extends ApiElement {
950
948
  const toRender: string[] = all.filter((type) => !current.some((i) => i.type === type))
951
949
  return html`
952
950
  <ui-dropdown-list verticalAlign="top" @select="${this.handleAuthAdd}" class="auth-dropdown" closeOnOutsideClick>
953
- <ui-filled-tonal-button
951
+ <ui-button
952
+ color="tonal"
954
953
  title="Add authorization option"
955
954
  aria-label="Opens a menu to select authorization option"
956
955
  ?disabled="${!toRender.length}"
957
956
  >
958
957
  <ui-icon icon="arrowDropDown" slot="icon" role="presentation"></ui-icon>
959
958
  Add
960
- </ui-filled-tonal-button>
959
+ </ui-button>
961
960
  <ui-list slot="dropdown" role="menu"> ${this.renderAuthorizationOptions(toRender)} </ui-list>
962
961
  </ui-dropdown-list>
963
962
  `
@@ -1195,8 +1194,8 @@ export default class RequestEditor extends ApiElement {
1195
1194
  <p><b>Do you want to continue?</b></p>
1196
1195
  </div>
1197
1196
 
1198
- <ui-text-button value="dismiss" slot="button">Cancel request</ui-text-button>
1199
- <ui-text-button value="confirm" slot="button">Continue</ui-text-button>
1197
+ <ui-button color="text" value="dismiss" slot="button">Cancel request</ui-button>
1198
+ <ui-button color="text" value="confirm" slot="button">Continue</ui-button>
1200
1199
  </ui-dialog>`
1201
1200
  }
1202
1201
  }
@@ -6,7 +6,7 @@ import { UrlEncoder } from '@api-client/core/lib/parsers/UrlEncoder.js'
6
6
  import ApiElement from '../ApiElement.js'
7
7
  import type Input from '../../md/input/Input.js'
8
8
  import type SwitchElement from '../../md/switch/internals/SwitchElement.js'
9
- import '../../md/button/ui-filled-tonal-button.js'
9
+ import '../../md/button/ui-button.js'
10
10
  import '../../md/icon-button/ui-icon-button.js'
11
11
  import '../../md/dropdown-list/ui-dropdown-list.js'
12
12
  import '../../md/list/ui-list.js'
@@ -273,9 +273,9 @@ export default class UrlParamsForm extends ApiElement {
273
273
  protected renderActionButtons(): TemplateResult {
274
274
  return html`
275
275
  <div class="editor-actions">
276
- <ui-filled-tonal-button @click="${this.handleAdd}">Add</ui-filled-tonal-button>
277
- <ui-filled-tonal-button @click="${this.handleEncode}">URL encode</ui-filled-tonal-button>
278
- <ui-filled-tonal-button @click="${this.handleDecode}">URL decode</ui-filled-tonal-button>
276
+ <ui-button color="tonal" @click="${this.handleAdd}">Add</ui-button>
277
+ <ui-button color="tonal" @click="${this.handleEncode}">URL encode</ui-button>
278
+ <ui-button color="tonal" @click="${this.handleDecode}">URL decode</ui-button>
279
279
  <ui-dropdown-list @select="${this.handleOption}" closeOnOutsideClick class="dropdown">
280
280
  <ui-icon-button aria-label="Additional options"
281
281
  ><ui-icon icon="moreVert" role="presentation"></ui-icon
@@ -27,7 +27,7 @@ import { EventTypes } from '../../events/EventTypes.js'
27
27
  import { midnightTimestamp } from '../../lib/time/Conversion.js'
28
28
 
29
29
  import '../../md/icons/ui-icon.js'
30
- import '../../md/button/ui-text-button.js'
30
+ import '../../md/button/ui-button.js'
31
31
  import '../../md/dropdown-list/ui-dropdown-list.js'
32
32
  import '../../md/list/ui-list.js'
33
33
  import '../../md/list/ui-list-item.js'
@@ -439,10 +439,10 @@ export default class HttpProjectRequest extends RequestEditor {
439
439
  class="environment-dropdown"
440
440
  closeOnOutsideClick
441
441
  >
442
- <ui-text-button class="button">
442
+ <ui-button color="text" class="button">
443
443
  ${currentEnvironmentLabel || 'No environment'}
444
444
  <ui-icon icon="arrowDropDown"></ui-icon>
445
- </ui-text-button>
445
+ </ui-button>
446
446
  <ui-list slot="dropdown" role="menu">
447
447
  <ui-list-item
448
448
  role="menuitem"
@@ -17,8 +17,7 @@ import '@github/relative-time-element'
17
17
  import type UiIconButton from '../../md/icon-button/internals/IconButton.js'
18
18
  import '../../define/http/http-request-log.js'
19
19
  import '../../md/icons/ui-icon.js'
20
- import '../../md/button/ui-filled-tonal-button.js'
21
- import '../../md/button/ui-text-button.js'
20
+ import '../../md/button/ui-button.js'
22
21
  import '../../md/dropdown-list/ui-dropdown-list.js'
23
22
  import '../../md/list/ui-list.js'
24
23
  import '../../md/list/ui-list-item.js'
@@ -446,10 +445,10 @@ export default class HttpProjectRequestHistory extends ApiElement {
446
445
  closeOnOutsideClick
447
446
  @select="${this.handleSelection}"
448
447
  >
449
- <ui-filled-tonal-button ?disabled="${disabled}">
448
+ <ui-button color="tonal" ?disabled="${disabled}">
450
449
  <ui-icon slot="icon" icon="arrowDropDown"></ui-icon>
451
450
  History
452
- </ui-filled-tonal-button>
451
+ </ui-button>
453
452
  <ui-list slot="dropdown" role="menu" aria-label="History list"> ${this.renderHistoryList()} </ui-list>
454
453
  </ui-dropdown-list>
455
454
  `
@@ -589,8 +588,8 @@ export default class HttpProjectRequestHistory extends ApiElement {
589
588
  <ui-icon slot="icon" icon="deleteOutline"></ui-icon>
590
589
  <span slot="title">Delete history?</span>
591
590
  <p>This will clear responses history for this request.</p>
592
- <ui-text-button slot="button" value="dismiss">Cancel</ui-text-button>
593
- <ui-text-button slot="button" value="confirm">Accept</ui-text-button>
591
+ <ui-button color="text" slot="button" value="dismiss">Cancel</ui-button>
592
+ <ui-button color="text" slot="button" value="confirm">Accept</ui-button>
594
593
  </ui-dialog>
595
594
  `
596
595
  }
@@ -13,7 +13,7 @@ import type { IResponse } from '@api-client/core/models/Response.js'
13
13
  import '@github/relative-time-element'
14
14
  import '../../define/http/http-request-log.js'
15
15
  import '../../md/icons/ui-icon.js'
16
- import '../../md/button/ui-filled-tonal-button.js'
16
+ import '../../md/button/ui-button.js'
17
17
  import '../../md/dropdown-list/ui-dropdown-list.js'
18
18
  import '../../md/list/ui-list.js'
19
19
  import '../../md/list/ui-list-item.js'
@@ -228,10 +228,10 @@ export default class ProjectRunReport extends LitElement {
228
228
  closeOnOutsideClick
229
229
  @select="${this.handleIterationSelection}"
230
230
  >
231
- <ui-filled-tonal-button>
231
+ <ui-button color="tonal">
232
232
  <ui-icon slot="icon" icon="arrowDropDown"></ui-icon>
233
233
  Iteration #${index}
234
- </ui-filled-tonal-button>
234
+ </ui-button>
235
235
  <ui-list slot="dropdown" role="menu" aria-label="Iterations list">
236
236
  ${iterations.map((current) => this.renderIterationOption(current.index))}
237
237
  </ui-list>
@@ -269,10 +269,10 @@ export default class ProjectRunReport extends LitElement {
269
269
  closeOnOutsideClick
270
270
  @select="${this.handleRequestSelection}"
271
271
  >
272
- <ui-filled-tonal-button title="${title}">
272
+ <ui-button color="tonal" title="${title}">
273
273
  <ui-icon slot="icon" icon="arrowDropDown"></ui-icon>
274
274
  <span class="request-title-dropdown">${title}</span>
275
- </ui-filled-tonal-button>
275
+ </ui-button>
276
276
  <ui-list slot="dropdown" role="menu" aria-label="History list"> ${options} </ui-list>
277
277
  </ui-dropdown-list>
278
278
  `
@@ -280,10 +280,10 @@ export default class ProjectRunReport extends LitElement {
280
280
 
281
281
  protected renderEmptyRequestsList(): TemplateResult {
282
282
  return html`
283
- <ui-filled-tonal-button disabled>
283
+ <ui-button color="tonal" disabled>
284
284
  <ui-icon slot="icon" icon="arrowDropDown"></ui-icon>
285
285
  No requests
286
- </ui-filled-tonal-button>
286
+ </ui-button>
287
287
  `
288
288
  }
289
289
 
@@ -17,8 +17,7 @@ import '@github/relative-time-element'
17
17
  import '../../define/http-project/project-run-report.js'
18
18
  import '../../md/checkbox/ui-checkbox.js'
19
19
  import '../../md/text-field/ui-filled-text-field.js'
20
- import '../../md/button/ui-filled-button.js'
21
- import '../../md/button/ui-filled-tonal-button.js'
20
+ import '../../md/button/ui-button.js'
22
21
  import '../../md/progress/ui-progress.js'
23
22
  import '../../md/icons/ui-icon.js'
24
23
  import '../../md/dropdown-list/ui-dropdown-list.js'
@@ -447,7 +446,7 @@ export default class ProjectRunner extends ApiElement {
447
446
  protected renderSubmit(): TemplateResult {
448
447
  return html`
449
448
  <div class="submit-row">
450
- <ui-filled-button @click="${this.handleRun}" ?disabled="${this.running}">Run</ui-filled-button>
449
+ <ui-button color="filled" @click="${this.handleRun}" ?disabled="${this.running}">Run</ui-button>
451
450
  </div>
452
451
  `
453
452
  }
@@ -493,12 +492,12 @@ export default class ProjectRunner extends ApiElement {
493
492
  closeOnOutsideClick
494
493
  @select="${this.handleHistorySelection}"
495
494
  >
496
- <ui-filled-tonal-button ?disabled="${disabled}">
495
+ <ui-button color="tonal" ?disabled="${disabled}">
497
496
  <ui-icon slot="icon" icon="arrowDropDown"></ui-icon>
498
497
  ${selected
499
498
  ? html`<relative-time datetime="${new Date(selected.ended).toISOString()}"></relative-time>`
500
499
  : 'History'}
501
- </ui-filled-tonal-button>
500
+ </ui-button>
502
501
  <ui-list slot="dropdown" role="menu" aria-label="History list">
503
502
  ${history.map((current) => this.renderHistoryOption(current))}
504
503
  </ui-list>
@@ -0,0 +1,299 @@
1
+ import { html, nothing, type PropertyValues, type TemplateResult } from 'lit'
2
+ import { property, query } from 'lit/decorators.js'
3
+ import { UiElement } from '../../UiElement.js'
4
+ import type { BeginPressConfig, EndPressConfig } from '../../../controllers/ActionController.js'
5
+ import { isDisabled, setDisabled } from '../../../lib/disabled.js'
6
+ import type UiRipple from '../../ripple/internals/ripple.js'
7
+
8
+ import '../../ripple/ui-ripple.js'
9
+ import '@material/web/focus/md-focus-ring.js'
10
+
11
+ export type ButtonType = 'submit' | 'reset' | 'button'
12
+ export type MdButtonShape = 'round' | 'square'
13
+ export type MdButtonSize = 'xs' | 's' | 'm' | 'l' | 'xl'
14
+
15
+ /**
16
+ * A material design button with M3 Expressive features - CSS-native implementation.
17
+ *
18
+ * @slot icon - A slot for the icon element
19
+ * @slot - The default slot for the label
20
+ * @attribute {string} form - The form associated with this element when the element is outside the form.
21
+ * @fires {ToggleEvent} toggle - Fired when the `toggle` property is true and the button is clicked,
22
+ * changing its selection state.
23
+ * The event's `newState` and `oldState` properties (string values: 'selected' or
24
+ * 'unselected') detail this selection change.
25
+ */
26
+ export default class BaseButton extends UiElement {
27
+ static readonly formAssociated = true
28
+
29
+ #internals = this.attachInternals()
30
+
31
+ /**
32
+ * The form associated with this element
33
+ * @attribute
34
+ */
35
+ get form(): HTMLFormElement | null | string {
36
+ return this.#internals.form
37
+ }
38
+
39
+ get validity() {
40
+ return this.#internals.validity
41
+ }
42
+
43
+ get validationMessage() {
44
+ return this.#internals.validationMessage
45
+ }
46
+
47
+ get willValidate() {
48
+ return this.#internals.willValidate
49
+ }
50
+
51
+ /**
52
+ * The name of the button, submitted as a pair with the button's value as part of the form data.
53
+ * @attribute
54
+ */
55
+ @property({ type: String }) accessor name: string | undefined
56
+
57
+ #value?: string
58
+
59
+ get value(): string | undefined {
60
+ return this.#value
61
+ }
62
+
63
+ /**
64
+ * Defines the value associated with the button's name when it's submitted with the form data.
65
+ * @attribute
66
+ */
67
+ @property({ type: String })
68
+ set value(value: string | undefined) {
69
+ if (this.#value === value) {
70
+ return
71
+ }
72
+ this.#value = value
73
+ this.#internals?.setFormValue(value || null)
74
+ }
75
+
76
+ /**
77
+ * Whether to render the icon at the inline end of the label rather than the inline start.
78
+ * @attribute
79
+ */
80
+ @property({ type: Boolean, attribute: 'trailingicon', reflect: true }) accessor trailingIcon = false
81
+
82
+ /**
83
+ * The default behavior of the button.
84
+ * @attribute
85
+ */
86
+ @property({ type: String, reflect: true }) accessor type: ButtonType = 'button'
87
+
88
+ /**
89
+ * When set, the button is a toggle button.
90
+ * @attribute
91
+ */
92
+ @property({ type: Boolean, reflect: true }) accessor toggle = false
93
+
94
+ /**
95
+ * Indicates that the button is currently selected.
96
+ * @attribute
97
+ */
98
+ @property({ type: Boolean, reflect: true }) accessor selected = false
99
+
100
+ /**
101
+ * The shape of the button.
102
+ * @attribute
103
+ */
104
+ @property({ type: String, reflect: true }) accessor shape: MdButtonShape = 'round'
105
+
106
+ /**
107
+ * The size of the button.
108
+ * @attribute
109
+ */
110
+ @property({ type: String, reflect: true }) accessor size: MdButtonSize = 's'
111
+
112
+ get disabled(): boolean {
113
+ return isDisabled(this)
114
+ }
115
+
116
+ /**
117
+ * When set, the button is in a disabled state.
118
+ * @attribute
119
+ */
120
+ @property({ reflect: true, type: Boolean })
121
+ set disabled(value: boolean) {
122
+ const old = isDisabled(this)
123
+ setDisabled(this, value)
124
+ this.requestUpdate('disabled', old)
125
+ }
126
+
127
+ @query('ui-ripple') protected accessor ripple!: UiRipple | null
128
+
129
+ constructor() {
130
+ super()
131
+ this.actionController.cancelKeyboardEvents = true
132
+ this.addEventListener('keydown', this.handleKeyDown.bind(this))
133
+ this.addEventListener('keyup', this.handleKeyUp.bind(this))
134
+ this.addEventListener('click', this.handleClick.bind(this))
135
+ this.addEventListener('pointerdown', this.handlePointerDown.bind(this))
136
+ this.addEventListener('pointerup', this.handlePointerUp.bind(this))
137
+ this.addEventListener('pointercancel', this.handlePointerCancel.bind(this))
138
+ this.addEventListener('pointerleave', this.handlePointerLeave.bind(this))
139
+ this.addEventListener('pointerenter', this.handlePointerEnter.bind(this))
140
+ this.addEventListener('contextmenu', this.handleContextMenu.bind(this))
141
+ }
142
+
143
+ override connectedCallback(): void {
144
+ super.connectedCallback()
145
+ if (!this.hasAttribute('role')) {
146
+ this.setAttribute('role', 'button')
147
+ }
148
+ if (!this.hasAttribute('tabindex') && !this.disabled) {
149
+ this.setAttribute('tabindex', '0')
150
+ }
151
+ }
152
+
153
+ protected override updated(cp: PropertyValues<this>): void {
154
+ super.updated(cp)
155
+
156
+ // If the button is disabled, remove the tabindex attribute
157
+ if (cp.has('disabled')) {
158
+ if (this.disabled) {
159
+ this.removeAttribute('tabindex')
160
+ } else if (!this.hasAttribute('tabindex')) {
161
+ this.setAttribute('tabindex', '0')
162
+ }
163
+ }
164
+
165
+ if (cp.has('toggle') || cp.has('selected')) {
166
+ this.updatePressedState()
167
+ }
168
+ }
169
+
170
+ protected updatePressedState(): void {
171
+ if (this.toggle) {
172
+ this.ariaPressed = String(this.selected)
173
+ } else {
174
+ this.selected = false
175
+ this.removeAttribute('aria-pressed')
176
+ }
177
+ }
178
+
179
+ checkValidity() {
180
+ return this.#internals.checkValidity()
181
+ }
182
+
183
+ reportValidity() {
184
+ return this.#internals.reportValidity()
185
+ }
186
+
187
+ protected override firstUpdated(): void {
188
+ this.#internals?.setFormValue(this.value || null)
189
+ }
190
+
191
+ override beginPress(options: BeginPressConfig): void {
192
+ super.beginPress(options)
193
+ this.classList.add('pressed')
194
+ this.ripple?.beginFocus()
195
+ }
196
+
197
+ override endPress(config: EndPressConfig): void {
198
+ super.endPress(config)
199
+ this.classList.remove('pressed')
200
+ this.ripple?.endFocus()
201
+ const { cancelled, reason } = config
202
+ if (cancelled) {
203
+ return
204
+ }
205
+ const allowedReasons = reason === 'enter' || reason === 'space'
206
+ if (this.type === 'submit' && (!reason || allowedReasons)) {
207
+ this.handleSubmit()
208
+ } else if (allowedReasons) {
209
+ this.click()
210
+ }
211
+ }
212
+
213
+ override handleClick(e: MouseEvent): void {
214
+ super.handleClick(e)
215
+ if (this.disabled) {
216
+ e.preventDefault()
217
+ e.stopPropagation()
218
+ return
219
+ }
220
+
221
+ if (this.toggle) {
222
+ this.selected = !this.selected
223
+ const e = new ToggleEvent('toggle', {
224
+ bubbles: true,
225
+ composed: true,
226
+ newState: this.selected ? 'selected' : 'unselected',
227
+ oldState: this.selected ? 'unselected' : 'selected',
228
+ })
229
+ this.dispatchEvent(e)
230
+ }
231
+ this.endPress({ cancelled: false, actionData: { event: e } })
232
+ }
233
+
234
+ protected handleSubmit(): void {
235
+ const { name, value, type, disabled, form } = this
236
+ if (!form || !type || disabled) {
237
+ return
238
+ }
239
+ const typedForm = form as HTMLFormElement
240
+ let button: HTMLButtonElement | undefined
241
+ if (name || value) {
242
+ button = document.createElement('button')
243
+ if (name) {
244
+ button.name = name
245
+ }
246
+ if (value) {
247
+ button.value = value
248
+ }
249
+ button.type = type
250
+ button.hidden = true
251
+ typedForm.append(button)
252
+ }
253
+ try {
254
+ typedForm.requestSubmit(button)
255
+ } catch {
256
+ // Ignore errors
257
+ }
258
+ if (button) {
259
+ typedForm.removeChild(button)
260
+ }
261
+ }
262
+
263
+ override handlePointerEnter(e: PointerEvent): void {
264
+ super.handlePointerEnter(e)
265
+ if (this.ripple) {
266
+ this.ripple.beginHover(e)
267
+ }
268
+ }
269
+
270
+ override handlePointerLeave(e: PointerEvent): void {
271
+ super.handlePointerLeave(e)
272
+ if (this.ripple) {
273
+ this.ripple.endHover()
274
+ }
275
+ }
276
+
277
+ protected override render(): TemplateResult {
278
+ const { trailingIcon = false } = this
279
+ const icon = this.renderIcon()
280
+
281
+ return html`
282
+ ${this.renderFocusRing()} ${this.renderRipple()} ${trailingIcon ? nothing : icon}
283
+ <slot></slot>
284
+ ${trailingIcon ? icon : nothing}
285
+ `
286
+ }
287
+
288
+ protected renderIcon(): TemplateResult {
289
+ return html`<slot name="icon"></slot>`
290
+ }
291
+
292
+ protected renderFocusRing(): TemplateResult {
293
+ return html`<md-focus-ring part="focus-ring" class="focus-ring" .control="${this as HTMLElement}"></md-focus-ring>`
294
+ }
295
+
296
+ protected renderRipple(): TemplateResult {
297
+ return html`<ui-ripple class="ripple" ?disabled="${this.disabled}"></ui-ripple>`
298
+ }
299
+ }