@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,319 @@
1
+ import { css } from 'lit'
2
+
3
+ /* Material Design 3 Expressive Button - CSS-Native Implementation */
4
+ export default css`
5
+ :host {
6
+ all: unset;
7
+
8
+ /* Layout and positioning */
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ position: relative;
13
+ box-sizing: border-box;
14
+ white-space: nowrap;
15
+
16
+ /* Default sizing */
17
+ min-height: 40px;
18
+ min-width: 64px;
19
+ padding-inline: 16px;
20
+ gap: 8px;
21
+
22
+ /* Typography from Material 3 tokens */
23
+ font-family: var(--md-sys-typescale-label-large-font, var(--md-ref-typeface-plain, system-ui));
24
+ font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
25
+ font-weight: var(--md-sys-typescale-label-large-weight, 500);
26
+ line-height: var(--md-sys-typescale-label-large-height, 1.25);
27
+ letter-spacing: var(--md-sys-typescale-label-large-tracking, 0.01em);
28
+
29
+ --md-ripple-hover-state-layer-color: currentColor;
30
+ --md-ripple-focus-state-layer-color: currentColor;
31
+ --md-ripple-pressed-state-layer-color: currentColor;
32
+
33
+ /* CSS custom property for pill radius - half of the button height */
34
+ --_pill-radius: 20px;
35
+ /* Default icon size */
36
+ --_icon-size: var(--md-button-icon-size, 20px);
37
+ --_background-color: transparent;
38
+ --_color: inherit;
39
+ --_shadow: var(--md-sys-elevation-0);
40
+
41
+ border-end-end-radius: var(--ui-button-shape-end-end, var(--_pill-radius));
42
+ border-end-start-radius: var(--ui-button-shape-end-start, var(--_pill-radius));
43
+ border-start-end-radius: var(--ui-button-shape-start-end, var(--_pill-radius));
44
+ border-start-start-radius: var(--ui-button-shape-start-start, var(--_pill-radius));
45
+ background-color: var(--_background-color);
46
+ color: var(--_color);
47
+ box-shadow: var(--_shadow);
48
+
49
+ /* Interaction styles */
50
+ cursor: pointer;
51
+ user-select: none;
52
+ -webkit-tap-highlight-color: transparent;
53
+ outline: none;
54
+
55
+ transition:
56
+ background-color var(--md-sys-motion-duration-short2, 200ms)
57
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
58
+ color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
59
+ box-shadow var(--md-sys-motion-duration-short2, 200ms)
60
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
61
+ border-color var(--md-sys-motion-duration-short2, 200ms)
62
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
63
+ border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
64
+ }
65
+
66
+ /* Icon styling */
67
+ ::slotted([slot='icon']) {
68
+ flex-shrink: 0;
69
+ width: var(--_icon-size);
70
+ height: var(--_icon-size);
71
+ font-size: inherit;
72
+ }
73
+
74
+ /* Modern CSS: Container queries for responsive sizing */
75
+ @container (min-width: 320px) {
76
+ :host {
77
+ min-width: 80px;
78
+ }
79
+ }
80
+
81
+ .ripple {
82
+ border-radius: inherit;
83
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
84
+ }
85
+
86
+ .focus-ring {
87
+ --md-focus-ring-shape-end-end: var(--ui-button-shape-end-end, var(--_pill-radius));
88
+ --md-focus-ring-shape-end-start: var(--ui-button-shape-end-start, var(--_pill-radius));
89
+ --md-focus-ring-shape-start-end: var(--ui-button-shape-start-end, var(--_pill-radius));
90
+ --md-focus-ring-shape-start-start: var(--ui-button-shape-start-start, var(--_pill-radius));
91
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
92
+ }
93
+
94
+ .ripple.activated {
95
+ z-index: 1;
96
+ }
97
+
98
+ /* Disabled state */
99
+ :host([disabled]) {
100
+ background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent);
101
+ color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
102
+ box-shadow: none;
103
+ cursor: not-allowed;
104
+ pointer-events: none;
105
+ }
106
+
107
+ /* Size Variations */
108
+ :host([size='xs']) {
109
+ min-height: 32px;
110
+ padding-inline: 12px;
111
+ font-size: var(--md-sys-typescale-label-medium-size, 0.75rem);
112
+ gap: 6px;
113
+ --_icon-size: 20px;
114
+ }
115
+
116
+ :host([size='s']) {
117
+ min-height: 40px;
118
+ padding-inline: 16px;
119
+ --_icon-size: 20px;
120
+ }
121
+
122
+ :host([size='m']) {
123
+ min-height: 56px;
124
+ padding-inline: 24px;
125
+ font-size: var(--md-sys-typescale-label-large-size, 1rem);
126
+ gap: 10px;
127
+ --_icon-size: 24px;
128
+ }
129
+
130
+ :host([size='l']) {
131
+ min-height: 96px;
132
+ padding-inline: 48px;
133
+ font-size: var(--md-sys-typescale-title-medium-size, 1.125rem);
134
+ gap: 12px;
135
+ --_icon-size: 32px;
136
+ }
137
+
138
+ :host([size='xl']) {
139
+ min-height: 136px;
140
+ padding-inline: 64px;
141
+ font-size: var(--md-sys-typescale-title-large-size, 1.375rem);
142
+ gap: 16px;
143
+ --_icon-size: 40px;
144
+ }
145
+
146
+ /* Pressed state is the same to all combinations of shape and size */
147
+ :host([size='xs'].pressed),
148
+ :host([size='s'].pressed) {
149
+ --_pill-radius: 8px !important;
150
+ }
151
+ :host([size='m'].pressed) {
152
+ --_pill-radius: 12px !important;
153
+ }
154
+ :host([size='xl'].pressed),
155
+ :host([size='l'].pressed) {
156
+ --_pill-radius: 16px !important;
157
+ }
158
+
159
+ /* Shape setup */
160
+ /* 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. */
161
+ :host([toggle][selected][shape='square'][size='xs']),
162
+ :host([shape='round'][size='xs']) {
163
+ --_pill-radius: 16px; /* Half of 32px height */
164
+ }
165
+ :host([toggle][selected][shape='square'][size='s']),
166
+ :host([shape='round'][size='s']) {
167
+ --_pill-radius: 20px; /* Half of 40px height */
168
+ }
169
+ :host([toggle][selected][shape='square'][size='m']),
170
+ :host([shape='round'][size='m']) {
171
+ --_pill-radius: 28px; /* Half of 56px height */
172
+ }
173
+ :host([toggle][selected][shape='square'][size='l']),
174
+ :host([shape='round'][size='l']) {
175
+ --_pill-radius: 48px; /* Half of 96px height */
176
+ }
177
+ :host([toggle][selected][shape='square'][size='xl']),
178
+ :host([shape='round'][size='xl']) {
179
+ --_pill-radius: 68px; /* Half of 136px height */
180
+ }
181
+
182
+ :host([shape='square'][size='xs']),
183
+ :host([shape='square'][size='s']) {
184
+ --_pill-radius: var(--md-sys-shape-corner-medium);
185
+ }
186
+
187
+ :host([shape='square'][size='m']) {
188
+ --_pill-radius: var(--md-sys-shape-corner-large);
189
+ }
190
+
191
+ :host([shape='square'][size='l']),
192
+ :host([shape='square'][size='xl']) {
193
+ --_pill-radius: var(--md-sys-shape-corner-extra-large);
194
+ }
195
+
196
+ /* Button Color Variants - Material 3 Expressive */
197
+
198
+ /* Elevated Button */
199
+ :host([color='elevated']) {
200
+ --_background-color: var(--md-sys-color-surface-container-low);
201
+ --_color: var(--md-sys-color-primary);
202
+ --_shadow: var(--md-sys-elevation-1);
203
+ }
204
+
205
+ :host([color='elevated'][toggle][selected]) {
206
+ --_background-color: var(--md-sys-color-primary);
207
+ --_color: var(--md-sys-color-on-primary);
208
+ }
209
+
210
+ :host([color='elevated']:hover:not([disabled])) {
211
+ --_shadow: var(--md-sys-elevation-2);
212
+ }
213
+
214
+ :host([color='elevated'][disabled]) {
215
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
216
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
217
+ --_shadow: var(--md-sys-elevation-0);
218
+ }
219
+
220
+ /* Filled Button */
221
+ :host([color='filled']) {
222
+ --_background-color: var(--md-sys-color-primary);
223
+ --_color: var(--md-sys-color-on-primary);
224
+ }
225
+
226
+ :host([color='filled'][toggle]) {
227
+ --_background-color: var(--md-sys-color-surface-container);
228
+ --_color: var(--md-sys-color-on-surface-variant);
229
+ }
230
+
231
+ :host([color='filled'][toggle][selected]) {
232
+ --_background-color: var(--md-sys-color-primary);
233
+ --_color: var(--md-sys-color-on-primary);
234
+ }
235
+
236
+ :host([color='filled']:hover:not([disabled])) {
237
+ --_shadow: var(--md-sys-elevation-1);
238
+ }
239
+
240
+ :host([color='filled'][disabled]) {
241
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
242
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
243
+ }
244
+
245
+ /* Filled Tonal Button */
246
+ :host([color='tonal']) {
247
+ --_background-color: var(--md-sys-color-secondary-container);
248
+ --_color: var(--md-sys-color-on-secondary-container);
249
+ }
250
+
251
+ :host([color='tonal'][toggle]) {
252
+ --_background-color: var(--md-sys-color-secondary-container);
253
+ --_color: var(--md-sys-color-on-secondary-container);
254
+ }
255
+
256
+ :host([color='tonal'][toggle][selected]) {
257
+ --_background-color: var(--md-sys-color-secondary);
258
+ --_color: var(--md-sys-color-on-secondary);
259
+ }
260
+
261
+ :host([color='tonal']:hover:not([disabled])) {
262
+ --_shadow: var(--md-sys-elevation-1);
263
+ }
264
+
265
+ :host([color='tonal'][disabled]) {
266
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
267
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
268
+ }
269
+
270
+ /* Outlined Button */
271
+ :host([color='outlined']) {
272
+ border: 1px var(--md-sys-color-outline-variant) solid;
273
+ --_color: var(--md-sys-color-on-surface-variant);
274
+ }
275
+
276
+ :host([color='outlined'][toggle][selected]) {
277
+ --_background-color: var(--md-sys-color-inverse-surface);
278
+ --_color: var(--md-sys-color-inverse-on-surface);
279
+ }
280
+
281
+ :host([color='outlined'][disabled]) {
282
+ border-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
283
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
284
+ }
285
+
286
+ /* Text Button */
287
+ :host([color='text']) {
288
+ --_color: var(--md-sys-color-primary);
289
+ }
290
+
291
+ :host([color='text'][disabled]) {
292
+ color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
293
+ }
294
+
295
+ :host([toggle][selected][shape='round']) {
296
+ --_pill-radius: var(--md-sys-shape-corner-medium);
297
+ }
298
+
299
+ /* Preference-based animations */
300
+ @media (prefers-reduced-motion: reduce) {
301
+ :host {
302
+ transition-duration: 0.01ms;
303
+ animation-duration: 0.01ms;
304
+ }
305
+ }
306
+
307
+ /* High contrast mode support */
308
+ @media (prefers-contrast: high) {
309
+ :host {
310
+ border-width: 2px;
311
+ }
312
+
313
+ :host([color='text']),
314
+ :host([color='outlined']) {
315
+ border-width: 2px;
316
+ border-style: solid;
317
+ }
318
+ }
319
+ `
@@ -1,242 +1,16 @@
1
- import { html, nothing, TemplateResult } from 'lit'
2
- import { property, queryAsync, state } from 'lit/decorators.js'
3
- import { classMap } from 'lit/directives/class-map.js'
4
- import { UiElement } from '../../UiElement.js'
5
- import { BeginPressConfig, EndPressConfig } from '../../../controllers/ActionController.js'
6
- import UiRipple from '../../ripple/internals/ripple.js'
7
- import { isDisabled, setDisabled } from '../../../lib/disabled.js'
1
+ import { property } from 'lit/decorators.js'
2
+ import BaseButton from './base.js'
3
+ export type { ButtonType, MdButtonShape, MdButtonSize } from './base.js'
8
4
 
9
- import '../../ripple/ui-ripple.js'
10
- import '@material/web/focus/md-focus-ring.js'
5
+ export type MdButtonColor = 'elevated' | 'filled' | 'outlined' | 'text' | 'tonal'
11
6
 
12
7
  /**
13
- * A material design button.
14
- *
15
- * Note, this control is form associated.
16
- *
17
- * @slot icon - A slot for the icon element
18
- * @slot - The default slot for the label
19
- * @attribute {string} form - The form associated with this element when the element is outside the form.
20
- * It should be the id of the form element within the same document.
8
+ * A material design button with M3 Expressive features - CSS-native implementation.
21
9
  */
22
- export default class UiButton extends UiElement {
23
- static readonly formAssociated = true
24
-
25
- #internals = this.attachInternals()
26
-
27
- /**
28
- * The form associated with this element
29
- * @attribute {string} form - The form associated with this element when the element is outside the form.
30
- * It should be the id of the form element within the same document.
31
- */
32
- get form(): HTMLFormElement | null {
33
- return this.#internals.form
34
- }
35
-
36
- get validity() {
37
- return this.#internals.validity
38
- }
39
-
40
- get validationMessage() {
41
- return this.#internals.validationMessage
42
- }
43
-
44
- get willValidate() {
45
- return this.#internals.willValidate
46
- }
47
-
48
- /**
49
- * Determines when the element has an icon in the "icon" slot.
50
- */
51
- @state() protected accessor hasIcon: boolean
52
-
53
- /**
54
- * The name of the button, submitted as a pair with the button's value as part of the form data,
55
- * when that button is used to submit the form.
56
- * @attribute
57
- */
58
- @property({ type: String }) accessor name: string | undefined
59
-
60
- #value?: string
61
-
62
- get value(): string | undefined {
63
- return this.#value
64
- }
65
-
66
- /**
67
- * Defines the value associated with the button's name when it's submitted with the form data.
68
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#value}
69
- * @attribute
70
- */
71
- @property({ type: String })
72
- set value(value: string | undefined) {
73
- if (this.#value === value) {
74
- return
75
- }
76
- this.#value = value
77
- this.#internals?.setFormValue(value || null)
78
- }
79
-
10
+ export default class Button extends BaseButton {
80
11
  /**
81
- * Whether to render the icon at the inline end of the label rather than the
82
- * inline start.
12
+ * The color of the button.
83
13
  * @attribute
84
14
  */
85
- @property({ type: Boolean, attribute: 'trailingicon', reflect: true }) accessor trailingIcon = false
86
-
87
- @queryAsync('ui-ripple') protected accessor ripple!: Promise<UiRipple | null>
88
-
89
- /**
90
- * The default behavior of the button.
91
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#type}
92
- * @attribute
93
- */
94
- @property({ type: String, reflect: true }) accessor type: 'submit' | 'reset' | 'button' = 'button'
95
-
96
- get disabled(): boolean {
97
- return isDisabled(this)
98
- }
99
-
100
- /**
101
- * When set, the button is a disabled state.
102
- * @attribute
103
- */
104
- @property({ reflect: true, type: Boolean })
105
- set disabled(value: boolean) {
106
- const old = isDisabled(this)
107
- setDisabled(this, value)
108
- this.requestUpdate('disabled', old)
109
- }
110
-
111
- constructor() {
112
- super()
113
-
114
- this.hasIcon = false
115
- this.actionController.cancelKeyboardEvents = true
116
- this.addEventListener('keydown', this.handleKeyDown.bind(this))
117
- this.addEventListener('keyup', this.handleKeyUp.bind(this))
118
- this.addEventListener('click', this.handleClick.bind(this))
119
- this.addEventListener('pointerdown', this.handlePointerDown.bind(this))
120
- this.addEventListener('pointerup', this.handlePointerUp.bind(this))
121
- this.addEventListener('pointercancel', this.handlePointerCancel.bind(this))
122
- this.addEventListener('pointerleave', this.handlePointerLeave.bind(this))
123
- this.addEventListener('contextmenu', this.handleContextMenu.bind(this))
124
- }
125
-
126
- override connectedCallback(): void {
127
- super.connectedCallback()
128
- if (!this.hasAttribute('role')) {
129
- this.setAttribute('role', 'button')
130
- }
131
- if (!this.hasAttribute('tabindex') && !this.disabled) {
132
- this.setAttribute('tabindex', '0')
133
- }
134
- }
135
-
136
- checkValidity() {
137
- return this.#internals.checkValidity()
138
- }
139
-
140
- reportValidity() {
141
- return this.#internals.reportValidity()
142
- }
143
-
144
- protected override firstUpdated(): void {
145
- this.#internals?.setFormValue(this.value || null)
146
- }
147
-
148
- protected async pressRipple(): Promise<void> {
149
- const element = await this.ripple
150
- if (element && !element.isPressed) {
151
- element.beginPress()
152
- }
153
- }
154
-
155
- protected async endRipple(): Promise<void> {
156
- const element = await this.ripple
157
- element?.endPress()
158
- }
159
-
160
- override beginPress(options: BeginPressConfig): void {
161
- super.beginPress(options)
162
- this.pressRipple()
163
- }
164
-
165
- override endPress(config: EndPressConfig): void {
166
- super.endPress(config)
167
- this.endRipple()
168
- const { cancelled, reason } = config
169
- if (cancelled) {
170
- return
171
- }
172
- const allowedReasons = reason === 'enter' || reason === 'space'
173
- if (this.type === 'submit' && (!reason || allowedReasons)) {
174
- this.handleSubmit()
175
- } else if (allowedReasons) {
176
- this.click()
177
- }
178
- }
179
-
180
- protected handleSubmit(): void {
181
- const { name, value, type, disabled, form } = this
182
- if (!form || !type || disabled) {
183
- return
184
- }
185
- let button: HTMLButtonElement | undefined
186
- if (name || value) {
187
- button = document.createElement('button')
188
- if (name) {
189
- button.name = name
190
- }
191
- if (value) {
192
- button.value = value
193
- }
194
- button.type = type
195
- button.hidden = true
196
- form.append(button)
197
- }
198
- try {
199
- form.requestSubmit(button)
200
- } catch {
201
- // ...
202
- }
203
- if (button) {
204
- form.removeChild(button)
205
- }
206
- }
207
-
208
- /**
209
- * Sets the `_hasIcon` state property when the "icon" slot change event is dispatched.
210
- */
211
- protected handleSlotChange(e: Event): void {
212
- const slot = e.target as HTMLSlotElement
213
- this.hasIcon = !!slot.assignedNodes().length
214
- }
215
-
216
- protected override render(): TemplateResult {
217
- const { pressed = false, trailingIcon = false } = this
218
- const containerClasses = classMap({
219
- surface: true,
220
- withIcon: this.hasIcon,
221
- pressed,
222
- })
223
- const icon = this.renderIcon()
224
- return html`
225
- <md-focus-ring part="focus-ring" .control="${this as HTMLElement}"></md-focus-ring>
226
- <ui-ripple class="ripple" ?disabled="${this.disabled}"></ui-ripple>
227
- <div class="${containerClasses}" id="container">
228
- <div class="container"></div>
229
- <div class="state"></div>
230
- <div class="content">
231
- ${trailingIcon ? nothing : icon}
232
- <slot></slot>
233
- ${trailingIcon ? icon : nothing}
234
- </div>
235
- </div>
236
- `
237
- }
238
-
239
- protected renderIcon(): TemplateResult {
240
- return html`<slot name="icon" @slotchange="${this.handleSlotChange}"></slot>`
241
- }
15
+ @property({ type: String, reflect: true }) accessor color: MdButtonColor = 'filled'
242
16
  }
@@ -0,0 +1,102 @@
1
+ import { css } from 'lit'
2
+
3
+ /* Material Design 3 Expressive Button - CSS-Native Implementation */
4
+ export default css`
5
+ :host {
6
+ display: flex;
7
+
8
+ --_gap: 8px;
9
+ --_xs-radius: 16px;
10
+ --_s-radius: 20px;
11
+ --_m-radius: 28px;
12
+ --_l-radius: 48px;
13
+ --_xl-radius: 68px;
14
+
15
+ gap: var(--_gap);
16
+ }
17
+
18
+ :host([size='xs'][type='standard']) {
19
+ --_gap: 18px;
20
+ }
21
+ :host([size='xs'][type='connected']) {
22
+ --_gap: 2px;
23
+ }
24
+
25
+ :host([size='s'][type='standard']) {
26
+ --_gap: 12px;
27
+ }
28
+ :host([size='s'][type='connected']) {
29
+ --_gap: 2px;
30
+ }
31
+
32
+ :host([size='m'][type='standard']) {
33
+ --_gap: 8px;
34
+ }
35
+ :host([size='m'][type='connected']) {
36
+ --_gap: 2px;
37
+ }
38
+
39
+ :host([size='l'][type='standard']) {
40
+ --_gap: 8px;
41
+ }
42
+ :host([size='l'][type='connected']) {
43
+ --_gap: 2px;
44
+ }
45
+
46
+ :host([size='xl'][type='standard']) {
47
+ --_gap: 8px;
48
+ }
49
+ :host([size='xl'][type='connected']) {
50
+ --_gap: 2px;
51
+ }
52
+
53
+ :host([type='connected']) ::slotted(ui-button[size='xs']:first-child) {
54
+ --ui-button-shape-start-start: var(--_xs-radius);
55
+ --ui-button-shape-end-start: var(--_xs-radius);
56
+ }
57
+
58
+ :host([type='connected']) ::slotted(ui-button[size='s']:first-child) {
59
+ --ui-button-shape-start-start: var(--_s-radius);
60
+ --ui-button-shape-end-start: var(--_s-radius);
61
+ }
62
+
63
+ :host([type='connected']) ::slotted(ui-button[size='m']:first-child) {
64
+ --ui-button-shape-start-start: var(--_m-radius);
65
+ --ui-button-shape-end-start: var(--_m-radius);
66
+ }
67
+
68
+ :host([type='connected']) ::slotted(ui-button[size='l']:first-child) {
69
+ --ui-button-shape-start-start: var(--_l-radius);
70
+ --ui-button-shape-end-start: var(--_l-radius);
71
+ }
72
+
73
+ :host([type='connected']) ::slotted(ui-button[size='xl']:first-child) {
74
+ --ui-button-shape-start-start: var(--_xl-radius);
75
+ --ui-button-shape-end-start: var(--_xl-radius);
76
+ }
77
+
78
+ :host([type='connected']) ::slotted(ui-button[size='xs']:last-child) {
79
+ --ui-button-shape-start-end: var(--_xs-radius);
80
+ --ui-button-shape-end-end: var(--_xs-radius);
81
+ }
82
+
83
+ :host([type='connected']) ::slotted(ui-button[size='s']:last-child) {
84
+ --ui-button-shape-start-end: var(--_s-radius);
85
+ --ui-button-shape-end-end: var(--_s-radius);
86
+ }
87
+
88
+ :host([type='connected']) ::slotted(ui-button[size='m']:last-child) {
89
+ --ui-button-shape-start-end: var(--_m-radius);
90
+ --ui-button-shape-end-end: var(--_m-radius);
91
+ }
92
+
93
+ :host([type='connected']) ::slotted(ui-button[size='l']:last-child) {
94
+ --ui-button-shape-start-end: var(--_l-radius);
95
+ --ui-button-shape-end-end: var(--_l-radius);
96
+ }
97
+
98
+ :host([type='connected']) ::slotted(ui-button[size='xl']:last-child) {
99
+ --ui-button-shape-start-end: var(--_xl-radius);
100
+ --ui-button-shape-end-end: var(--_xl-radius);
101
+ }
102
+ `