@api-client/ui 0.2.12 → 0.3.0

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 (317) 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/file-system/internals/Breadcrumbs.d.ts +2 -1
  42. package/build/src/elements/file-system/internals/Breadcrumbs.d.ts.map +1 -1
  43. package/build/src/elements/file-system/internals/Breadcrumbs.js +3 -4
  44. package/build/src/elements/file-system/internals/Breadcrumbs.js.map +1 -1
  45. package/build/src/elements/http/BodyEditor.d.ts +1 -3
  46. package/build/src/elements/http/BodyEditor.d.ts.map +1 -1
  47. package/build/src/elements/http/BodyEditor.js +25 -20
  48. package/build/src/elements/http/BodyEditor.js.map +1 -1
  49. package/build/src/elements/http/BodyMultipartEditor.d.ts +1 -1
  50. package/build/src/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  51. package/build/src/elements/http/BodyMultipartEditor.js +3 -3
  52. package/build/src/elements/http/BodyMultipartEditor.js.map +1 -1
  53. package/build/src/elements/http/CertificateAdd.element.d.ts +1 -3
  54. package/build/src/elements/http/CertificateAdd.element.d.ts.map +1 -1
  55. package/build/src/elements/http/CertificateAdd.element.js +6 -10
  56. package/build/src/elements/http/CertificateAdd.element.js.map +1 -1
  57. package/build/src/elements/http/HeadersForm.d.ts +1 -1
  58. package/build/src/elements/http/HeadersForm.d.ts.map +1 -1
  59. package/build/src/elements/http/HeadersForm.js +3 -3
  60. package/build/src/elements/http/HeadersForm.js.map +1 -1
  61. package/build/src/elements/http/HttpAssertions.element.d.ts +1 -1
  62. package/build/src/elements/http/HttpAssertions.element.d.ts.map +1 -1
  63. package/build/src/elements/http/HttpAssertions.element.js +2 -2
  64. package/build/src/elements/http/HttpAssertions.element.js.map +1 -1
  65. package/build/src/elements/http/HttpFlows.element.d.ts +1 -1
  66. package/build/src/elements/http/HttpFlows.element.d.ts.map +1 -1
  67. package/build/src/elements/http/HttpFlows.element.js +6 -6
  68. package/build/src/elements/http/HttpFlows.element.js.map +1 -1
  69. package/build/src/elements/http/RequestEditor.d.ts +1 -3
  70. package/build/src/elements/http/RequestEditor.d.ts.map +1 -1
  71. package/build/src/elements/http/RequestEditor.js +10 -11
  72. package/build/src/elements/http/RequestEditor.js.map +1 -1
  73. package/build/src/elements/http/UrlParamsForm.d.ts +1 -1
  74. package/build/src/elements/http/UrlParamsForm.d.ts.map +1 -1
  75. package/build/src/elements/http/UrlParamsForm.js +4 -4
  76. package/build/src/elements/http/UrlParamsForm.js.map +1 -1
  77. package/build/src/elements/project/HttpProjectRequest.d.ts +1 -1
  78. package/build/src/elements/project/HttpProjectRequest.d.ts.map +1 -1
  79. package/build/src/elements/project/HttpProjectRequest.js +3 -3
  80. package/build/src/elements/project/HttpProjectRequest.js.map +1 -1
  81. package/build/src/elements/project/HttpProjectRequestHistory.d.ts +1 -2
  82. package/build/src/elements/project/HttpProjectRequestHistory.d.ts.map +1 -1
  83. package/build/src/elements/project/HttpProjectRequestHistory.js +5 -6
  84. package/build/src/elements/project/HttpProjectRequestHistory.js.map +1 -1
  85. package/build/src/elements/project/ProjectRunReport.d.ts +1 -1
  86. package/build/src/elements/project/ProjectRunReport.d.ts.map +1 -1
  87. package/build/src/elements/project/ProjectRunReport.js +7 -7
  88. package/build/src/elements/project/ProjectRunReport.js.map +1 -1
  89. package/build/src/elements/project/ProjectRunner.d.ts +1 -2
  90. package/build/src/elements/project/ProjectRunner.d.ts.map +1 -1
  91. package/build/src/elements/project/ProjectRunner.js +4 -5
  92. package/build/src/elements/project/ProjectRunner.js.map +1 -1
  93. package/build/src/md/button/internals/base.d.ts +98 -0
  94. package/build/src/md/button/internals/base.d.ts.map +1 -0
  95. package/build/src/md/button/internals/base.js +353 -0
  96. package/build/src/md/button/internals/base.js.map +1 -0
  97. package/build/src/md/button/internals/button.d.ts +7 -75
  98. package/build/src/md/button/internals/button.d.ts.map +1 -1
  99. package/build/src/md/button/internals/button.js +18 -247
  100. package/build/src/md/button/internals/button.js.map +1 -1
  101. package/build/src/md/button/internals/{button-styles.d.ts → button.styles.d.ts} +1 -1
  102. package/build/src/md/button/internals/button.styles.d.ts.map +1 -0
  103. package/build/src/md/button/internals/button.styles.js +319 -0
  104. package/build/src/md/button/internals/button.styles.js.map +1 -0
  105. package/build/src/md/button/internals/group.d.ts +54 -0
  106. package/build/src/md/button/internals/group.d.ts.map +1 -0
  107. package/build/src/md/button/internals/group.js +157 -0
  108. package/build/src/md/button/internals/group.js.map +1 -0
  109. package/build/src/md/button/internals/{text-button.styles.d.ts → group.styles.d.ts} +1 -1
  110. package/build/src/md/button/internals/group.styles.d.ts.map +1 -0
  111. package/build/src/md/button/internals/group.styles.js +102 -0
  112. package/build/src/md/button/internals/group.styles.js.map +1 -0
  113. package/build/src/md/button/ui-button-group.d.ts +11 -0
  114. package/build/src/md/button/ui-button-group.d.ts.map +1 -0
  115. package/build/src/md/{icon-button/ui-filled-icon-button.js → button/ui-button-group.js} +10 -11
  116. package/build/src/md/button/ui-button-group.js.map +1 -0
  117. package/build/src/md/button/ui-button.d.ts +14 -0
  118. package/build/src/md/button/ui-button.d.ts.map +1 -0
  119. package/build/src/md/button/{ui-text-button.js → ui-button.js} +10 -11
  120. package/build/src/md/button/ui-button.js.map +1 -0
  121. package/build/src/md/dialog/internals/Dialog.d.ts +5 -5
  122. package/build/src/md/dialog/internals/Dialog.d.ts.map +1 -1
  123. package/build/src/md/dialog/internals/Dialog.js +14 -9
  124. package/build/src/md/dialog/internals/Dialog.js.map +1 -1
  125. package/build/src/md/dropdown-list/internals/UiDropdownList.d.ts +1 -1
  126. package/build/src/md/dropdown-list/internals/UiDropdownList.js +1 -1
  127. package/build/src/md/dropdown-list/internals/UiDropdownList.js.map +1 -1
  128. package/build/src/md/icon-button/internals/IconButton.d.ts +12 -36
  129. package/build/src/md/icon-button/internals/IconButton.d.ts.map +1 -1
  130. package/build/src/md/icon-button/internals/IconButton.js +32 -144
  131. package/build/src/md/icon-button/internals/IconButton.js.map +1 -1
  132. package/build/src/md/{button/internals/filled-button.styles.d.ts → icon-button/internals/IconButton.styles.d.ts} +1 -1
  133. package/build/src/md/icon-button/internals/IconButton.styles.d.ts.map +1 -0
  134. package/build/src/md/icon-button/internals/IconButton.styles.js +286 -0
  135. package/build/src/md/icon-button/internals/IconButton.styles.js.map +1 -0
  136. package/build/src/md/icon-button/ui-icon-button.d.ts.map +1 -1
  137. package/build/src/md/icon-button/ui-icon-button.js +2 -3
  138. package/build/src/md/icon-button/ui-icon-button.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/filled.styles.d.ts.map +1 -1
  151. package/build/src/md/text-field/internals/filled.styles.js +3 -0
  152. package/build/src/md/text-field/internals/filled.styles.js.map +1 -1
  153. package/build/src/styles/m3/dialog.module.d.ts +2 -2
  154. package/build/src/styles/m3/dialog.module.js +2 -2
  155. package/build/src/styles/m3/dialog.module.js.map +1 -1
  156. package/build/src/styles/m3/tokens.d.ts.map +1 -1
  157. package/build/src/styles/m3/tokens.js +208 -182
  158. package/build/src/styles/m3/tokens.js.map +1 -1
  159. package/demo/elements/authorization/oauth-authorize.html +1 -1
  160. package/demo/elements/authorization/oauth-authorize.ts +1 -1
  161. package/demo/elements/environment/variables-editor.ts +2 -2
  162. package/demo/elements/http/url-editing.ts +3 -3
  163. package/demo/elements/project/request-editor.ts +4 -4
  164. package/demo/layout/index.ts +5 -5
  165. package/demo/md/buttons/button.html +121 -0
  166. package/demo/md/buttons/button.ts +246 -0
  167. package/demo/md/buttons/{index.html → group.html} +15 -2
  168. package/demo/md/buttons/group.ts +171 -0
  169. package/demo/md/checkbox/index.ts +1 -1
  170. package/demo/md/dialog/dialog.ts +8 -9
  171. package/demo/md/dropdown-list/index.ts +68 -71
  172. package/demo/md/icon-button/index.html +97 -7
  173. package/demo/md/icon-button/index.ts +97 -201
  174. package/demo/md/index.html +3 -1
  175. package/demo/md/inputs/input.ts +1 -1
  176. package/demo/md/inputs/radio.ts +1 -1
  177. package/demo/md/inputs/switch.ts +1 -1
  178. package/demo/md/notification/snack.ts +5 -5
  179. package/demo/md/progress/progress.ts +4 -3
  180. package/package.json +2 -2
  181. package/src/core/ModalActivity.ts +6 -5
  182. package/src/core/ThemeManager.ts +5 -4
  183. package/src/demo/DemoPage.ts +2 -5
  184. package/src/elements/authorization/ui/CcAuthorization.ts +2 -2
  185. package/src/elements/authorization/ui/OAuth2Authorization.ts +11 -5
  186. package/src/elements/authorization/ui/OidcAuthorization.ts +10 -8
  187. package/src/elements/code/HttpSnippets.ts +5 -5
  188. package/src/elements/dialog/internals/ConfirmDelete.ts +5 -5
  189. package/src/elements/dialog/internals/Rename.ts +6 -5
  190. package/src/elements/environment/EnvironmentEditor.ts +5 -4
  191. package/src/elements/file-system/internals/Breadcrumbs.ts +3 -4
  192. package/src/elements/http/BodyEditor.ts +25 -20
  193. package/src/elements/http/BodyMultipartEditor.ts +3 -3
  194. package/src/elements/http/CertificateAdd.element.ts +6 -10
  195. package/src/elements/http/HeadersForm.ts +3 -3
  196. package/src/elements/http/HttpAssertions.element.ts +2 -2
  197. package/src/elements/http/HttpFlows.element.ts +6 -6
  198. package/src/elements/http/RequestEditor.ts +10 -11
  199. package/src/elements/http/UrlParamsForm.ts +4 -4
  200. package/src/elements/project/HttpProjectRequest.ts +3 -3
  201. package/src/elements/project/HttpProjectRequestHistory.ts +5 -6
  202. package/src/elements/project/ProjectRunReport.ts +7 -7
  203. package/src/elements/project/ProjectRunner.ts +4 -5
  204. package/src/md/button/internals/base.ts +299 -0
  205. package/src/md/button/internals/button.styles.ts +319 -0
  206. package/src/md/button/internals/button.ts +8 -234
  207. package/src/md/button/internals/group.styles.ts +102 -0
  208. package/src/md/button/internals/group.ts +121 -0
  209. package/src/md/button/ui-button-group.ts +15 -0
  210. package/src/md/button/ui-button.ts +18 -0
  211. package/src/md/dialog/internals/Dialog.ts +14 -9
  212. package/src/md/dropdown-list/internals/UiDropdownList.ts +1 -1
  213. package/src/md/icon-button/internals/IconButton.styles.ts +286 -0
  214. package/src/md/icon-button/internals/IconButton.ts +15 -139
  215. package/src/md/icon-button/ui-icon-button.ts +2 -3
  216. package/src/md/ripple/internals/ripple.styles.ts +8 -20
  217. package/src/md/ripple/internals/ripple.ts +21 -13
  218. package/src/md/snackbar/internals/Snackbar.ts +4 -2
  219. package/src/md/text-field/internals/filled.styles.ts +3 -0
  220. package/src/styles/m3/dialog.module.ts +2 -2
  221. package/src/styles/m3/native.css +270 -0
  222. package/src/styles/m3/tokens.css +208 -182
  223. package/src/styles/m3/tokens.ts +208 -182
  224. package/test/ui/button/UiButton.test.ts +51 -29
  225. package/test/ui/button/UiIconButton.test.ts +25 -19
  226. package/test/ui/dialog/UiDialog.test.ts +10 -10
  227. package/build/src/md/button/internals/button-styles.d.ts.map +0 -1
  228. package/build/src/md/button/internals/button-styles.js +0 -143
  229. package/build/src/md/button/internals/button-styles.js.map +0 -1
  230. package/build/src/md/button/internals/elevated-button.d.ts +0 -4
  231. package/build/src/md/button/internals/elevated-button.d.ts.map +0 -1
  232. package/build/src/md/button/internals/elevated-button.js +0 -4
  233. package/build/src/md/button/internals/elevated-button.js.map +0 -1
  234. package/build/src/md/button/internals/elevated-button.styles.d.ts +0 -3
  235. package/build/src/md/button/internals/elevated-button.styles.d.ts.map +0 -1
  236. package/build/src/md/button/internals/elevated-button.styles.js +0 -38
  237. package/build/src/md/button/internals/elevated-button.styles.js.map +0 -1
  238. package/build/src/md/button/internals/filled-button.d.ts +0 -4
  239. package/build/src/md/button/internals/filled-button.d.ts.map +0 -1
  240. package/build/src/md/button/internals/filled-button.js +0 -4
  241. package/build/src/md/button/internals/filled-button.js.map +0 -1
  242. package/build/src/md/button/internals/filled-button.styles.d.ts.map +0 -1
  243. package/build/src/md/button/internals/filled-button.styles.js +0 -30
  244. package/build/src/md/button/internals/filled-button.styles.js.map +0 -1
  245. package/build/src/md/button/internals/filled-tonal-button.d.ts +0 -4
  246. package/build/src/md/button/internals/filled-tonal-button.d.ts.map +0 -1
  247. package/build/src/md/button/internals/filled-tonal-button.js +0 -4
  248. package/build/src/md/button/internals/filled-tonal-button.js.map +0 -1
  249. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts +0 -3
  250. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts.map +0 -1
  251. package/build/src/md/button/internals/filled-tonal-button.styles.js +0 -30
  252. package/build/src/md/button/internals/filled-tonal-button.styles.js.map +0 -1
  253. package/build/src/md/button/internals/outlined-button.d.ts +0 -4
  254. package/build/src/md/button/internals/outlined-button.d.ts.map +0 -1
  255. package/build/src/md/button/internals/outlined-button.js +0 -4
  256. package/build/src/md/button/internals/outlined-button.js.map +0 -1
  257. package/build/src/md/button/internals/outlined-button.styles.d.ts +0 -3
  258. package/build/src/md/button/internals/outlined-button.styles.d.ts.map +0 -1
  259. package/build/src/md/button/internals/outlined-button.styles.js +0 -31
  260. package/build/src/md/button/internals/outlined-button.styles.js.map +0 -1
  261. package/build/src/md/button/internals/text-button.d.ts +0 -4
  262. package/build/src/md/button/internals/text-button.d.ts.map +0 -1
  263. package/build/src/md/button/internals/text-button.js +0 -4
  264. package/build/src/md/button/internals/text-button.js.map +0 -1
  265. package/build/src/md/button/internals/text-button.styles.d.ts.map +0 -1
  266. package/build/src/md/button/internals/text-button.styles.js +0 -30
  267. package/build/src/md/button/internals/text-button.styles.js.map +0 -1
  268. package/build/src/md/button/ui-elevated-button.d.ts +0 -14
  269. package/build/src/md/button/ui-elevated-button.d.ts.map +0 -1
  270. package/build/src/md/button/ui-elevated-button.js +0 -31
  271. package/build/src/md/button/ui-elevated-button.js.map +0 -1
  272. package/build/src/md/button/ui-filled-button.d.ts +0 -14
  273. package/build/src/md/button/ui-filled-button.d.ts.map +0 -1
  274. package/build/src/md/button/ui-filled-button.js +0 -31
  275. package/build/src/md/button/ui-filled-button.js.map +0 -1
  276. package/build/src/md/button/ui-filled-tonal-button.d.ts +0 -14
  277. package/build/src/md/button/ui-filled-tonal-button.d.ts.map +0 -1
  278. package/build/src/md/button/ui-filled-tonal-button.js +0 -31
  279. package/build/src/md/button/ui-filled-tonal-button.js.map +0 -1
  280. package/build/src/md/button/ui-outlined-button.d.ts +0 -14
  281. package/build/src/md/button/ui-outlined-button.d.ts.map +0 -1
  282. package/build/src/md/button/ui-outlined-button.js +0 -31
  283. package/build/src/md/button/ui-outlined-button.js.map +0 -1
  284. package/build/src/md/button/ui-text-button.d.ts +0 -14
  285. package/build/src/md/button/ui-text-button.d.ts.map +0 -1
  286. package/build/src/md/button/ui-text-button.js.map +0 -1
  287. package/build/src/md/icon-button/ui-filled-icon-button.d.ts +0 -11
  288. package/build/src/md/icon-button/ui-filled-icon-button.d.ts.map +0 -1
  289. package/build/src/md/icon-button/ui-filled-icon-button.js.map +0 -1
  290. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts +0 -11
  291. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts.map +0 -1
  292. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js +0 -28
  293. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js.map +0 -1
  294. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts +0 -11
  295. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts.map +0 -1
  296. package/build/src/md/icon-button/ui-outlined-icon-button.js +0 -28
  297. package/build/src/md/icon-button/ui-outlined-icon-button.js.map +0 -1
  298. package/demo/md/buttons/index.ts +0 -279
  299. package/src/md/button/internals/button-styles.ts +0 -143
  300. package/src/md/button/internals/elevated-button.styles.ts +0 -38
  301. package/src/md/button/internals/elevated-button.ts +0 -3
  302. package/src/md/button/internals/filled-button.styles.ts +0 -30
  303. package/src/md/button/internals/filled-button.ts +0 -3
  304. package/src/md/button/internals/filled-tonal-button.styles.ts +0 -30
  305. package/src/md/button/internals/filled-tonal-button.ts +0 -3
  306. package/src/md/button/internals/outlined-button.styles.ts +0 -31
  307. package/src/md/button/internals/outlined-button.ts +0 -3
  308. package/src/md/button/internals/text-button.styles.ts +0 -30
  309. package/src/md/button/internals/text-button.ts +0 -3
  310. package/src/md/button/ui-elevated-button.ts +0 -19
  311. package/src/md/button/ui-filled-button.ts +0 -19
  312. package/src/md/button/ui-filled-tonal-button.ts +0 -19
  313. package/src/md/button/ui-outlined-button.ts +0 -19
  314. package/src/md/button/ui-text-button.ts +0 -19
  315. package/src/md/icon-button/ui-filled-icon-button.ts +0 -16
  316. package/src/md/icon-button/ui-filled-tonal-icon-button.ts +0 -16
  317. package/src/md/icon-button/ui-outlined-icon-button.ts +0 -16
@@ -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
+ `
@@ -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>