@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
@@ -0,0 +1,121 @@
1
+ import { LitElement, type PropertyValues, html } from 'lit'
2
+ import { property, queryAssignedElements } from 'lit/decorators.js'
3
+ import UiButtonElement from './button.js'
4
+ import type { MdButtonSize } from './button.js'
5
+
6
+ export type MdGroupType = 'standard' | 'connected'
7
+
8
+ /**
9
+ * A group of buttons that can be selected.
10
+ *
11
+ * When a group of buttons is added to the group element, the group element
12
+ * becomes the manager of the buttons type, size, and selection state.
13
+ *
14
+ * All buttons added to the group will inherit the size from the group, but also the `shape` is set
15
+ * based on the group type.
16
+ *
17
+ * Buttons don't need to be have the `toggle` attribute set. In such case, the button
18
+ * will not participate in the selection state management.
19
+ */
20
+ export default class ButtonGroup extends LitElement {
21
+ /**
22
+ * If true, multiple buttons can be selected.
23
+ * When set to false, the group deselects all other buttons when one is selected.
24
+ * @attribute
25
+ */
26
+ @property({ type: Boolean }) accessor multiple = false
27
+
28
+ /**
29
+ * The type of button group.
30
+ * - 'standard': Standard button group.
31
+ * - 'connected': Connected button group (buttons are visually connected).
32
+ * @attribute
33
+ */
34
+ @property({ type: String }) accessor type: MdGroupType = 'standard'
35
+
36
+ /**
37
+ * The size of the buttons used with this group.
38
+ * @attribute
39
+ */
40
+ @property({ type: String, reflect: true }) accessor size: MdButtonSize = 's'
41
+
42
+ @queryAssignedElements({ flatten: true, selector: 'ui-button' }) private accessor buttons!: UiButtonElement[]
43
+
44
+ /**
45
+ * The MutationObserver instance used to watch for changes in slotted children.
46
+ */
47
+ protected observer?: MutationObserver
48
+
49
+ override connectedCallback(): void {
50
+ super.connectedCallback()
51
+ this.observer = new MutationObserver(this.handleMutations.bind(this))
52
+ this.observer.observe(this, { childList: true, subtree: true, attributes: true, attributeFilter: ['selected'] })
53
+ this.updateChildren()
54
+ }
55
+
56
+ override disconnectedCallback(): void {
57
+ super.disconnectedCallback()
58
+ this.observer?.disconnect()
59
+ this.observer = undefined
60
+ }
61
+
62
+ protected override firstUpdated(changed: PropertyValues): void {
63
+ this.updateChildren()
64
+ super.firstUpdated(changed)
65
+ }
66
+
67
+ protected override willUpdate(changed: PropertyValues<this>): void {
68
+ if (changed.has('size')) {
69
+ this.updateChildren()
70
+ }
71
+ }
72
+
73
+ protected handleMutations(mutations: MutationRecord[]): void {
74
+ for (const mutation of mutations) {
75
+ if (mutation.type === 'attributes' && mutation.attributeName === 'selected') {
76
+ const target = mutation.target as UiButtonElement
77
+ if (target instanceof UiButtonElement && target.toggle && target.selected) {
78
+ this.activate(target)
79
+ }
80
+ } else if (mutation.type === 'childList') {
81
+ this.updateChildren()
82
+ }
83
+ }
84
+ }
85
+
86
+ protected updateChildren(): void {
87
+ const isConnected = this.type === 'connected'
88
+ this.buttons.forEach((button) => {
89
+ button.size = this.size
90
+ if (isConnected) {
91
+ button.shape = 'square'
92
+ } else {
93
+ button.shape = 'round'
94
+ }
95
+ })
96
+ }
97
+
98
+ /**
99
+ * In multi selection mode, this method does nothing.
100
+ * In single selection mode, it activates the clicked button and deactivates all others.
101
+ */
102
+ activate(button: UiButtonElement) {
103
+ if (this.multiple) {
104
+ // In multiselection, we don't need to do anything here
105
+ return
106
+ }
107
+ this.buttons.forEach((btn) => {
108
+ if (!btn.toggle || btn === button || !btn.selected) {
109
+ return
110
+ }
111
+ btn.selected = false
112
+ })
113
+ if (button.toggle && !button.selected) {
114
+ button.selected = true
115
+ }
116
+ }
117
+
118
+ override render() {
119
+ return html`<slot></slot>`
120
+ }
121
+ }
@@ -0,0 +1,15 @@
1
+ import type { CSSResultOrNative } from 'lit'
2
+ import { customElement } from 'lit/decorators.js'
3
+ import Element from './internals/group.js'
4
+ import styles from './internals/group.styles.js'
5
+
6
+ @customElement('ui-button-group')
7
+ export class UiButtonGroupElement extends Element {
8
+ static override styles: CSSResultOrNative[] = [styles]
9
+ }
10
+
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ 'ui-button-group': UiButtonGroupElement
14
+ }
15
+ }
@@ -0,0 +1,18 @@
1
+ import type { CSSResultOrNative } from 'lit'
2
+ import { customElement } from 'lit/decorators.js'
3
+ import Element from './internals/button.js'
4
+ import styles from './internals/button.styles.js'
5
+
6
+ /**
7
+ * @attribute {string} form
8
+ */
9
+ @customElement('ui-button')
10
+ export class UiButtonElement extends Element {
11
+ static override styles: CSSResultOrNative[] = [styles]
12
+ }
13
+
14
+ declare global {
15
+ interface HTMLElementTagNameMap {
16
+ 'ui-button': UiButtonElement
17
+ }
18
+ }
@@ -7,7 +7,7 @@ import type UiButton from '../../button/internals/button.js'
7
7
  import type { TypedEvents } from '../../../core/types.js'
8
8
  import { ifDefined } from 'lit/directives/if-defined.js'
9
9
  import { SyntheticSubmitEvent } from '../../../events/SyntheticSubmitEvent.js'
10
- import '../../button/ui-text-button.js'
10
+ import '../../button/ui-button.js'
11
11
 
12
12
  export interface UiDialogClosingReason {
13
13
  /**
@@ -40,8 +40,8 @@ export type RenderFunction = () => TemplateResult
40
40
  * closing reason detail.
41
41
  *
42
42
  * ```javascript
43
- * <ui-text-button value="dismiss">Cancel</ui-text-button>
44
- * <ui-text-button value="confirm">Take action</ui-text-button>
43
+ * <ui-button color="text" value="dismiss">Cancel</ui-button>
44
+ * <ui-button color="text" value="confirm">Take action</ui-button>
45
45
  * ```
46
46
  *
47
47
  * ```javascript
@@ -64,8 +64,8 @@ export type RenderFunction = () => TemplateResult
64
64
  * <span slot="title">Delete photos?</span>
65
65
  * <p>This action will permanently remove the selected pictures from your account.</p>
66
66
  *
67
- * <ui-text-button slot="button" value="dismiss" type="text">Cancel</ui-text-button>
68
- * <ui-text-button slot="button" value="confirm" type="text">Confirm</ui-text-button>
67
+ * <ui-button color="text" slot="button" value="dismiss" type="text">Cancel</ui-button>
68
+ * <ui-button color="text" slot="button" value="confirm" type="text">Confirm</ui-button>
69
69
  * </ui-dialog>
70
70
  * ```
71
71
  *
@@ -408,8 +408,8 @@ export default class UiDialog extends UiElement implements TypedEvents<DialogEve
408
408
  return nothing
409
409
  }
410
410
  return html`
411
- <ui-text-button value="dismiss" class="internal-button" @click="${this.handleDismiss}"
412
- >${dismissLabel}</ui-text-button
411
+ <ui-button color="text" value="dismiss" class="internal-button" @click="${this.handleDismiss}"
412
+ >${dismissLabel}</ui-button
413
413
  >
414
414
  `
415
415
  }
@@ -421,8 +421,13 @@ export default class UiDialog extends UiElement implements TypedEvents<DialogEve
421
421
  }
422
422
  const type = useForm ? 'submit' : 'button'
423
423
  return html`
424
- <ui-text-button type="${type}" value="${confirmValue}" class="internal-button" @click="${this.handleConfirm}"
425
- >${confirmLabel}</ui-text-button
424
+ <ui-button
425
+ color="text"
426
+ type="${type}"
427
+ value="${confirmValue}"
428
+ class="internal-button"
429
+ @click="${this.handleConfirm}"
430
+ >${confirmLabel}</ui-button
426
431
  >
427
432
  `
428
433
  }
@@ -18,7 +18,7 @@ export interface UiDropdownListSelection {
18
18
  * Examples:
19
19
  *
20
20
  * <ui-dropdown-list>
21
- * <ui-filled-button>Click me</ui-filled-button>
21
+ * <ui-button color="filled">Click me</ui-button>
22
22
  * <ui-list slot="dropdown" role="menu">
23
23
  * <ui-list-item role="menuitem">Item 1</ui-list-item>
24
24
  * <ui-list-item role="menuitem">Item 2</ui-list-item>
@@ -0,0 +1,286 @@
1
+ import { css } from 'lit'
2
+
3
+ export default css`
4
+ :host {
5
+ all: unset;
6
+
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ position: relative;
11
+ box-sizing: border-box;
12
+ white-space: nowrap;
13
+
14
+ --md-ripple-hover-state-layer-color: currentColor;
15
+ --md-ripple-focus-state-layer-color: currentColor;
16
+ --md-ripple-pressed-state-layer-color: currentColor;
17
+
18
+ --_color: inherit;
19
+ --_background-color: transparent;
20
+ --_icon-size: var(--md-button-icon-size, 20px);
21
+ --_container-height: inherit;
22
+ --_leading-space: 0;
23
+ --_trailing-space: 0;
24
+ --_radius: 0;
25
+ --_outline-width: 0;
26
+
27
+ --_xs-radius: 16px;
28
+ --_s-radius: 20px;
29
+ --_m-radius: 28px;
30
+ --_l-radius: 48px;
31
+ --_xl-radius: 68px;
32
+
33
+ background-color: var(--_background-color);
34
+ color: var(--_color);
35
+ fill: var(--_color);
36
+ height: var(--_container-height);
37
+ padding-inline-start: var(--_leading-space);
38
+ padding-inline-end: var(--_trailing-space);
39
+ border: var(--_outline-width) var(--md-sys-color-outline-variant) solid;
40
+ border-end-end-radius: var(--ui-button-shape-end-end, var(--_radius));
41
+ border-end-start-radius: var(--ui-button-shape-end-start, var(--_radius));
42
+ border-start-end-radius: var(--ui-button-shape-start-end, var(--_radius));
43
+ border-start-start-radius: var(--ui-button-shape-start-start, var(--_radius));
44
+
45
+ /* Interaction styles */
46
+ cursor: pointer;
47
+ user-select: none;
48
+ -webkit-tap-highlight-color: transparent;
49
+ outline: none;
50
+
51
+ transition:
52
+ background-color var(--md-sys-motion-duration-short2, 200ms)
53
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
54
+ color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
55
+ border-color var(--md-sys-motion-duration-short2, 200ms)
56
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
57
+ border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
58
+ }
59
+
60
+ ::slotted(*) {
61
+ width: var(--_icon-size) !important;
62
+ height: var(--_icon-size) !important;
63
+ color: var(--_color);
64
+ fill: var(--_color);
65
+ }
66
+
67
+ .ripple {
68
+ border-radius: inherit;
69
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
70
+ }
71
+
72
+ .focus-ring {
73
+ --md-focus-ring-shape-end-end: var(--ui-button-shape-end-end, var(--_radius));
74
+ --md-focus-ring-shape-end-start: var(--ui-button-shape-end-start, var(--_radius));
75
+ --md-focus-ring-shape-start-end: var(--ui-button-shape-start-end, var(--_radius));
76
+ --md-focus-ring-shape-start-start: var(--ui-button-shape-start-start, var(--_radius));
77
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
78
+ }
79
+
80
+ .ripple.activated {
81
+ z-index: 1;
82
+ }
83
+
84
+ /* Filled Button */
85
+ :host([color='filled']) {
86
+ --_background-color: var(--md-sys-color-primary);
87
+ --_color: var(--md-sys-color-on-primary);
88
+ }
89
+
90
+ :host([color='filled'][toggle]) {
91
+ --_background-color: var(--md-sys-color-surface-container);
92
+ --_color: var(--md-sys-color-on-surface-variant);
93
+ }
94
+
95
+ :host([color='filled'][toggle][selected]) {
96
+ --_background-color: var(--md-sys-color-primary);
97
+ --_color: var(--md-sys-color-on-primary);
98
+ }
99
+
100
+ :host([color='filled'][disabled]) {
101
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
102
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
103
+ }
104
+
105
+ /* Filled Tonal Button */
106
+ :host([color='tonal']) {
107
+ --_background-color: var(--md-sys-color-secondary-container);
108
+ --_color: var(--md-sys-color-on-secondary-container);
109
+ }
110
+
111
+ :host([color='tonal'][toggle]) {
112
+ --_background-color: var(--md-sys-color-secondary-container);
113
+ --_color: var(--md-sys-color-on-secondary-container);
114
+ }
115
+
116
+ :host([color='tonal'][toggle][selected]) {
117
+ --_background-color: var(--md-sys-color-secondary);
118
+ --_color: var(--md-sys-color-on-secondary);
119
+ }
120
+
121
+ :host([color='tonal']:hover:not([disabled])) {
122
+ --_shadow: var(--md-sys-elevation-1);
123
+ }
124
+
125
+ :host([color='tonal'][disabled]) {
126
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
127
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
128
+ }
129
+
130
+ /* Outlined Button */
131
+ :host([color='outlined']) {
132
+ --_outline-width: 1px;
133
+ --_color: var(--md-sys-color-on-surface-variant);
134
+ }
135
+ :host([color='outlined'][size='l']),
136
+ :host([color='outlined'][size='xl']) {
137
+ --_outline-width: 3px;
138
+ }
139
+
140
+ :host([color='outlined'][toggle][selected]) {
141
+ --_background-color: var(--md-sys-color-inverse-surface);
142
+ --_color: var(--md-sys-color-inverse-on-surface);
143
+ }
144
+
145
+ :host([color='outlined'][disabled]) {
146
+ border-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
147
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
148
+ }
149
+
150
+ /* Standard Button */
151
+ :host([color='standard']) {
152
+ --_color: var(--md-sys-color-on-surface-variant);
153
+ }
154
+
155
+ :host([color='standard'][toggle][selected]) {
156
+ --_color: var(--md-sys-color-primary);
157
+ }
158
+
159
+ :host([color='standard'][disabled]) {
160
+ color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
161
+ }
162
+
163
+ /* Sizes */
164
+ :host([size='xs']) {
165
+ --_container-height: 32px;
166
+ --_icon-size: 20px;
167
+ }
168
+ :host([size='s']) {
169
+ --_container-height: 40px;
170
+ --_icon-size: 24px;
171
+ }
172
+ :host([size='m']) {
173
+ --_container-height: 56px;
174
+ --_icon-size: 24px;
175
+ }
176
+ :host([size='l']) {
177
+ --_container-height: 96px;
178
+ --_icon-size: 32px;
179
+ }
180
+ :host([size='xl']) {
181
+ --_container-height: 136px;
182
+ --_icon-size: 40px;
183
+ }
184
+ :host([size='xs'][width='narrow']) {
185
+ --_leading-space: 4px;
186
+ --_trailing-space: 4px;
187
+ }
188
+ :host([size='xs'][width='default']) {
189
+ --_leading-space: 6px;
190
+ --_trailing-space: 6px;
191
+ }
192
+ :host([size='xs'][width='wide']) {
193
+ --_leading-space: 10px;
194
+ --_trailing-space: 10px;
195
+ }
196
+ :host([size='s'][width='narrow']) {
197
+ --_leading-space: 4px;
198
+ --_trailing-space: 4px;
199
+ }
200
+ :host([size='s'][width='default']) {
201
+ --_leading-space: 8px;
202
+ --_trailing-space: 8px;
203
+ }
204
+ :host([size='s'][width='wide']) {
205
+ --_leading-space: 14px;
206
+ --_trailing-space: 14px;
207
+ }
208
+ :host([size='m'][width='narrow']) {
209
+ --_leading-space: 12px;
210
+ --_trailing-space: 12px;
211
+ }
212
+ :host([size='m'][width='default']) {
213
+ --_leading-space: 16px;
214
+ --_trailing-space: 16px;
215
+ }
216
+ :host([size='m'][width='wide']) {
217
+ --_leading-space: 24px;
218
+ --_trailing-space: 24px;
219
+ }
220
+ :host([size='l'][width='narrow']) {
221
+ --_leading-space: 16px;
222
+ --_trailing-space: 16px;
223
+ }
224
+ :host([size='l'][width='default']) {
225
+ --_leading-space: 32px;
226
+ --_trailing-space: 32px;
227
+ }
228
+ :host([size='l'][width='wide']) {
229
+ --_leading-space: 48px;
230
+ --_trailing-space: 48px;
231
+ }
232
+ :host([size='xl'][width='narrow']) {
233
+ --_leading-space: 32px;
234
+ --_trailing-space: 32px;
235
+ }
236
+ :host([size='xl'][width='default']) {
237
+ --_leading-space: 48px;
238
+ --_trailing-space: 48px;
239
+ }
240
+ :host([size='xl'][width='wide']) {
241
+ --_leading-space: 72px;
242
+ --_trailing-space: 72px;
243
+ }
244
+
245
+ /* Shape setup */
246
+ /* For the round shape, we can't use the "--md-sys-shape-corner-full" value as it has a value of 999px and it would make animations impossible so see. */
247
+ :host([shape='round'][size='xs']) {
248
+ --_radius: var(--_xs-radius);
249
+ }
250
+ :host([shape='round'][size='s']) {
251
+ --_radius: var(--_s-radius);
252
+ }
253
+ :host([shape='square'][size='xs']),
254
+ :host([shape='square'][size='s']) {
255
+ --_radius: var(--md-sys-shape-corner-medium);
256
+ }
257
+ :host([shape='round'][size='m']) {
258
+ --_radius: var(--_m-radius);
259
+ }
260
+ :host([shape='square'][size='m']) {
261
+ --_radius: var(--md-sys-shape-corner-large);
262
+ }
263
+ :host([shape='round'][size='l']) {
264
+ --_radius: var(--_l-radius);
265
+ }
266
+ :host([shape='round'][size='xl']) {
267
+ --_radius: var(--_xl-radius);
268
+ }
269
+ :host([shape='square'][size='l']),
270
+ :host([shape='square'][size='xl']) {
271
+ --_radius: var(--md-sys-shape-corner-extra-large);
272
+ }
273
+
274
+ /* Pressed shapes */
275
+ :host([size='xs'].pressed),
276
+ :host([size='s'].pressed) {
277
+ --_radius: var(--md-sys-shape-corner-small);
278
+ }
279
+ :host([size='m'].pressed) {
280
+ --_radius: var(--md-sys-shape-corner-medium);
281
+ }
282
+ :host([size='l'].pressed),
283
+ :host([size='xl'].pressed) {
284
+ --_radius: var(--md-sys-shape-corner-large);
285
+ }
286
+ `
@@ -1,155 +1,31 @@
1
- /* eslint-disable max-len */
2
- import { html, PropertyValues, TemplateResult } from 'lit'
3
- import { property, query } from 'lit/decorators.js'
4
- import { classMap } from 'lit/directives/class-map.js'
5
- import { BeginPressConfig, EndPressConfig } from '../../../controllers/ActionController.js'
6
- import { UiElement } from '../../UiElement.js'
7
- import { isDisabled, setDisabled } from '../../../lib/disabled.js'
8
- import UiRipple from '../../ripple/internals/ripple.js'
1
+ import { html, type TemplateResult } from 'lit'
2
+ import BaseButton from '../../button/internals/base.js'
3
+ import { property } from 'lit/decorators.js'
9
4
 
10
- import '../../ripple/ui-ripple.js'
11
- import '@material/web/focus/md-focus-ring.js'
5
+ export type MdIconButtonColor = 'filled' | 'outlined' | 'standard' | 'tonal'
6
+ export type MdIconButtonWidth = 'default' | 'narrow' | 'wide'
12
7
 
13
8
  /**
14
- * @fires active - An event dispatched when the `active` state has changed. This only happens when the button is `toggle`.
9
+ * An icon button component that extends the functionality of a standard button,
10
+ * but is specifically designed to hold an icon.
11
+ * @slot - The default slot for the icon.
15
12
  */
16
- export default class IconButton extends UiElement {
13
+ export default class IconButton extends BaseButton {
17
14
  /**
18
- * Whether the button can be toggled.
19
- * A toggle button behaves different as it gets the `aria-pressed` attribute
20
- * which changes depending on the pressed state.
21
- * A toggle button is activated until it is clicked/pressed again.
22
- * A toggle button dispatched `active` event when the press state change.
23
- * The host can check the `active` property to know the state.
24
- *
15
+ * The color of the button.
25
16
  * @attribute
26
17
  */
27
- @property({ type: Boolean, reflect: true }) accessor toggle: boolean | undefined
28
-
29
- /**
30
- * A flag that determines whether the button is activated (pressed when `toggle` is set).
31
- * It is `undefined` and makes no effect when `toggle` is not set.
32
- *
33
- * @attribute
34
- */
35
- @property({ type: Boolean, reflect: true }) accessor active: boolean | undefined
36
-
37
- get disabled(): boolean {
38
- return isDisabled(this)
39
- }
40
-
18
+ @property({ type: String, reflect: true }) accessor color: MdIconButtonColor = 'standard'
41
19
  /**
42
- * When set, the button is a disabled state.
20
+ * The width of the button.
43
21
  * @attribute
44
22
  */
45
- @property({ reflect: true, type: Boolean })
46
- set disabled(value: boolean) {
47
- const old = isDisabled(this)
48
- setDisabled(this, value)
49
- this.requestUpdate('disabled', old)
50
- }
51
-
52
- @query('ui-ripple') protected accessor ripple!: UiRipple | null
53
-
54
- constructor() {
55
- super()
56
-
57
- this.actionController.cancelKeyboardEvents = true
58
- this.addEventListener('keydown', this.handleKeyDown.bind(this))
59
- this.addEventListener('keyup', this.handleKeyUp.bind(this))
60
- this.addEventListener('click', this.handleClick.bind(this))
61
- this.addEventListener('pointerdown', this.handlePointerDown.bind(this))
62
- this.addEventListener('pointerup', this.handlePointerUp.bind(this))
63
- this.addEventListener('pointercancel', this.handlePointerCancel.bind(this))
64
- this.addEventListener('pointerleave', this.handlePointerLeave.bind(this))
65
- this.addEventListener('pointerenter', this.handlePointerEnter.bind(this))
66
- this.addEventListener('contextmenu', this.handleContextMenu.bind(this))
67
- }
68
-
69
- override connectedCallback(): void {
70
- super.connectedCallback()
71
- if (!this.hasAttribute('role')) {
72
- this.setAttribute('role', 'button')
73
- }
74
- if (!this.hasAttribute('tabindex') && !this.disabled) {
75
- this.setAttribute('tabindex', '0')
76
- }
77
- }
78
-
79
- protected override update(changedProperties: PropertyValues<this>): void {
80
- if (changedProperties.has('active')) {
81
- this.setAttribute('aria-pressed', String(this.active))
82
- }
83
- super.update(changedProperties)
84
- }
85
-
86
- protected pressRipple(options: BeginPressConfig): void {
87
- const element = this.ripple
88
- if (element && !element.isPressed) {
89
- element.beginPress(options.positionEvent as PointerEvent)
90
- }
91
- }
92
-
93
- protected endRipple(): void {
94
- this.ripple?.endPress()
95
- }
96
-
97
- override beginPress(options: BeginPressConfig): void {
98
- super.beginPress(options)
99
- this.pressRipple(options)
100
- }
101
-
102
- override endPress(config: EndPressConfig): void {
103
- super.endPress(config)
104
- this.endRipple()
105
- const { cancelled, reason } = config
106
- if (cancelled) {
107
- return
108
- }
109
- if (!reason || reason === 'enter' || reason === 'space') {
110
- if (this.toggle) {
111
- this.active = !this.active
112
- // note, only dispatch events when user interacting with the UI.
113
- this.dispatchEvent(new Event('active'))
114
- }
115
- }
116
- if (reason === 'enter' || reason === 'space') {
117
- if (!this.toggle) {
118
- this.click()
119
- }
120
- }
121
- }
122
-
123
- override handlePointerEnter(e: PointerEvent): void {
124
- super.handlePointerEnter(e)
125
- if (this.ripple) {
126
- this.ripple.beginHover(e)
127
- }
128
- }
129
-
130
- override handlePointerLeave(e: PointerEvent): void {
131
- super.handlePointerLeave(e)
132
- if (this.ripple) {
133
- this.ripple.endHover()
134
- }
135
- }
23
+ @property({ type: String, reflect: true }) accessor width: MdIconButtonWidth = 'default'
136
24
 
137
25
  protected override render(): TemplateResult {
138
- const { pressed = false } = this
139
- const containerClasses = classMap({
140
- surface: true,
141
- pressed,
142
- })
143
26
  return html`
144
- <md-focus-ring part="focus-ring" .control="${this as HTMLElement}"></md-focus-ring>
145
- <ui-ripple class="ripple" ?disabled="${this.disabled}"></ui-ripple>
146
- <div class="${containerClasses}">
147
- <div class="container"></div>
148
- <div class="state"></div>
149
- <div class="content">
150
- <slot></slot>
151
- </div>
152
- </div>
27
+ ${this.renderFocusRing()} ${this.renderRipple()}
28
+ <slot></slot>
153
29
  `
154
30
  }
155
31
  }