@api-client/ui 0.2.13 → 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 (312) 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/ripple/internals/ripple.d.ts +2 -0
  136. package/build/src/md/ripple/internals/ripple.d.ts.map +1 -1
  137. package/build/src/md/ripple/internals/ripple.js +20 -10
  138. package/build/src/md/ripple/internals/ripple.js.map +1 -1
  139. package/build/src/md/ripple/internals/ripple.styles.d.ts.map +1 -1
  140. package/build/src/md/ripple/internals/ripple.styles.js +8 -20
  141. package/build/src/md/ripple/internals/ripple.styles.js.map +1 -1
  142. package/build/src/md/snackbar/internals/Snackbar.d.ts +1 -1
  143. package/build/src/md/snackbar/internals/Snackbar.d.ts.map +1 -1
  144. package/build/src/md/snackbar/internals/Snackbar.js +4 -2
  145. package/build/src/md/snackbar/internals/Snackbar.js.map +1 -1
  146. package/build/src/md/text-field/internals/filled.styles.d.ts.map +1 -1
  147. package/build/src/md/text-field/internals/filled.styles.js +3 -0
  148. package/build/src/md/text-field/internals/filled.styles.js.map +1 -1
  149. package/build/src/styles/m3/dialog.module.d.ts +2 -2
  150. package/build/src/styles/m3/dialog.module.js +2 -2
  151. package/build/src/styles/m3/dialog.module.js.map +1 -1
  152. package/build/src/styles/m3/tokens.d.ts.map +1 -1
  153. package/build/src/styles/m3/tokens.js +208 -182
  154. package/build/src/styles/m3/tokens.js.map +1 -1
  155. package/demo/elements/authorization/oauth-authorize.html +1 -1
  156. package/demo/elements/authorization/oauth-authorize.ts +1 -1
  157. package/demo/elements/environment/variables-editor.ts +2 -2
  158. package/demo/elements/http/url-editing.ts +3 -3
  159. package/demo/elements/project/request-editor.ts +4 -4
  160. package/demo/layout/index.ts +5 -5
  161. package/demo/md/buttons/button.html +121 -0
  162. package/demo/md/buttons/button.ts +246 -0
  163. package/demo/md/buttons/{index.html → group.html} +15 -2
  164. package/demo/md/buttons/group.ts +171 -0
  165. package/demo/md/checkbox/index.ts +1 -1
  166. package/demo/md/dialog/dialog.ts +8 -9
  167. package/demo/md/dropdown-list/index.ts +68 -71
  168. package/demo/md/icon-button/index.html +97 -7
  169. package/demo/md/icon-button/index.ts +97 -201
  170. package/demo/md/index.html +3 -1
  171. package/demo/md/inputs/input.ts +1 -1
  172. package/demo/md/inputs/radio.ts +1 -1
  173. package/demo/md/inputs/switch.ts +1 -1
  174. package/demo/md/notification/snack.ts +5 -5
  175. package/demo/md/progress/progress.ts +4 -3
  176. package/package.json +2 -2
  177. package/src/core/ModalActivity.ts +6 -5
  178. package/src/core/ThemeManager.ts +5 -4
  179. package/src/demo/DemoPage.ts +2 -5
  180. package/src/elements/authorization/ui/CcAuthorization.ts +2 -2
  181. package/src/elements/authorization/ui/OAuth2Authorization.ts +11 -5
  182. package/src/elements/authorization/ui/OidcAuthorization.ts +10 -8
  183. package/src/elements/code/HttpSnippets.ts +5 -5
  184. package/src/elements/dialog/internals/ConfirmDelete.ts +5 -5
  185. package/src/elements/dialog/internals/Rename.ts +6 -5
  186. package/src/elements/environment/EnvironmentEditor.ts +5 -4
  187. package/src/elements/http/BodyEditor.ts +25 -20
  188. package/src/elements/http/BodyMultipartEditor.ts +3 -3
  189. package/src/elements/http/CertificateAdd.element.ts +6 -10
  190. package/src/elements/http/HeadersForm.ts +3 -3
  191. package/src/elements/http/HttpAssertions.element.ts +2 -2
  192. package/src/elements/http/HttpFlows.element.ts +6 -6
  193. package/src/elements/http/RequestEditor.ts +10 -11
  194. package/src/elements/http/UrlParamsForm.ts +4 -4
  195. package/src/elements/project/HttpProjectRequest.ts +3 -3
  196. package/src/elements/project/HttpProjectRequestHistory.ts +5 -6
  197. package/src/elements/project/ProjectRunReport.ts +7 -7
  198. package/src/elements/project/ProjectRunner.ts +4 -5
  199. package/src/md/button/internals/base.ts +299 -0
  200. package/src/md/button/internals/button.styles.ts +319 -0
  201. package/src/md/button/internals/button.ts +8 -234
  202. package/src/md/button/internals/group.styles.ts +102 -0
  203. package/src/md/button/internals/group.ts +121 -0
  204. package/src/md/button/ui-button-group.ts +15 -0
  205. package/src/md/button/ui-button.ts +18 -0
  206. package/src/md/dialog/internals/Dialog.ts +14 -9
  207. package/src/md/dropdown-list/internals/UiDropdownList.ts +1 -1
  208. package/src/md/icon-button/internals/IconButton.styles.ts +286 -0
  209. package/src/md/icon-button/internals/IconButton.ts +15 -139
  210. package/src/md/icon-button/ui-icon-button.ts +2 -3
  211. package/src/md/ripple/internals/ripple.styles.ts +8 -20
  212. package/src/md/ripple/internals/ripple.ts +21 -13
  213. package/src/md/snackbar/internals/Snackbar.ts +4 -2
  214. package/src/md/text-field/internals/filled.styles.ts +3 -0
  215. package/src/styles/m3/dialog.module.ts +2 -2
  216. package/src/styles/m3/native.css +270 -0
  217. package/src/styles/m3/tokens.css +208 -182
  218. package/src/styles/m3/tokens.ts +208 -182
  219. package/test/ui/button/UiButton.test.ts +51 -29
  220. package/test/ui/button/UiIconButton.test.ts +25 -19
  221. package/test/ui/dialog/UiDialog.test.ts +10 -10
  222. package/build/src/md/button/internals/button-styles.d.ts.map +0 -1
  223. package/build/src/md/button/internals/button-styles.js +0 -143
  224. package/build/src/md/button/internals/button-styles.js.map +0 -1
  225. package/build/src/md/button/internals/elevated-button.d.ts +0 -4
  226. package/build/src/md/button/internals/elevated-button.d.ts.map +0 -1
  227. package/build/src/md/button/internals/elevated-button.js +0 -4
  228. package/build/src/md/button/internals/elevated-button.js.map +0 -1
  229. package/build/src/md/button/internals/elevated-button.styles.d.ts +0 -3
  230. package/build/src/md/button/internals/elevated-button.styles.d.ts.map +0 -1
  231. package/build/src/md/button/internals/elevated-button.styles.js +0 -38
  232. package/build/src/md/button/internals/elevated-button.styles.js.map +0 -1
  233. package/build/src/md/button/internals/filled-button.d.ts +0 -4
  234. package/build/src/md/button/internals/filled-button.d.ts.map +0 -1
  235. package/build/src/md/button/internals/filled-button.js +0 -4
  236. package/build/src/md/button/internals/filled-button.js.map +0 -1
  237. package/build/src/md/button/internals/filled-button.styles.d.ts.map +0 -1
  238. package/build/src/md/button/internals/filled-button.styles.js +0 -30
  239. package/build/src/md/button/internals/filled-button.styles.js.map +0 -1
  240. package/build/src/md/button/internals/filled-tonal-button.d.ts +0 -4
  241. package/build/src/md/button/internals/filled-tonal-button.d.ts.map +0 -1
  242. package/build/src/md/button/internals/filled-tonal-button.js +0 -4
  243. package/build/src/md/button/internals/filled-tonal-button.js.map +0 -1
  244. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts +0 -3
  245. package/build/src/md/button/internals/filled-tonal-button.styles.d.ts.map +0 -1
  246. package/build/src/md/button/internals/filled-tonal-button.styles.js +0 -30
  247. package/build/src/md/button/internals/filled-tonal-button.styles.js.map +0 -1
  248. package/build/src/md/button/internals/outlined-button.d.ts +0 -4
  249. package/build/src/md/button/internals/outlined-button.d.ts.map +0 -1
  250. package/build/src/md/button/internals/outlined-button.js +0 -4
  251. package/build/src/md/button/internals/outlined-button.js.map +0 -1
  252. package/build/src/md/button/internals/outlined-button.styles.d.ts +0 -3
  253. package/build/src/md/button/internals/outlined-button.styles.d.ts.map +0 -1
  254. package/build/src/md/button/internals/outlined-button.styles.js +0 -31
  255. package/build/src/md/button/internals/outlined-button.styles.js.map +0 -1
  256. package/build/src/md/button/internals/text-button.d.ts +0 -4
  257. package/build/src/md/button/internals/text-button.d.ts.map +0 -1
  258. package/build/src/md/button/internals/text-button.js +0 -4
  259. package/build/src/md/button/internals/text-button.js.map +0 -1
  260. package/build/src/md/button/internals/text-button.styles.d.ts.map +0 -1
  261. package/build/src/md/button/internals/text-button.styles.js +0 -30
  262. package/build/src/md/button/internals/text-button.styles.js.map +0 -1
  263. package/build/src/md/button/ui-elevated-button.d.ts +0 -14
  264. package/build/src/md/button/ui-elevated-button.d.ts.map +0 -1
  265. package/build/src/md/button/ui-elevated-button.js +0 -31
  266. package/build/src/md/button/ui-elevated-button.js.map +0 -1
  267. package/build/src/md/button/ui-filled-button.d.ts +0 -14
  268. package/build/src/md/button/ui-filled-button.d.ts.map +0 -1
  269. package/build/src/md/button/ui-filled-button.js +0 -31
  270. package/build/src/md/button/ui-filled-button.js.map +0 -1
  271. package/build/src/md/button/ui-filled-tonal-button.d.ts +0 -14
  272. package/build/src/md/button/ui-filled-tonal-button.d.ts.map +0 -1
  273. package/build/src/md/button/ui-filled-tonal-button.js +0 -31
  274. package/build/src/md/button/ui-filled-tonal-button.js.map +0 -1
  275. package/build/src/md/button/ui-outlined-button.d.ts +0 -14
  276. package/build/src/md/button/ui-outlined-button.d.ts.map +0 -1
  277. package/build/src/md/button/ui-outlined-button.js +0 -31
  278. package/build/src/md/button/ui-outlined-button.js.map +0 -1
  279. package/build/src/md/button/ui-text-button.d.ts +0 -14
  280. package/build/src/md/button/ui-text-button.d.ts.map +0 -1
  281. package/build/src/md/button/ui-text-button.js.map +0 -1
  282. package/build/src/md/icon-button/ui-filled-icon-button.d.ts +0 -11
  283. package/build/src/md/icon-button/ui-filled-icon-button.d.ts.map +0 -1
  284. package/build/src/md/icon-button/ui-filled-icon-button.js.map +0 -1
  285. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts +0 -11
  286. package/build/src/md/icon-button/ui-filled-tonal-icon-button.d.ts.map +0 -1
  287. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js +0 -28
  288. package/build/src/md/icon-button/ui-filled-tonal-icon-button.js.map +0 -1
  289. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts +0 -11
  290. package/build/src/md/icon-button/ui-outlined-icon-button.d.ts.map +0 -1
  291. package/build/src/md/icon-button/ui-outlined-icon-button.js +0 -28
  292. package/build/src/md/icon-button/ui-outlined-icon-button.js.map +0 -1
  293. package/demo/md/buttons/index.ts +0 -279
  294. package/src/md/button/internals/button-styles.ts +0 -143
  295. package/src/md/button/internals/elevated-button.styles.ts +0 -38
  296. package/src/md/button/internals/elevated-button.ts +0 -3
  297. package/src/md/button/internals/filled-button.styles.ts +0 -30
  298. package/src/md/button/internals/filled-button.ts +0 -3
  299. package/src/md/button/internals/filled-tonal-button.styles.ts +0 -30
  300. package/src/md/button/internals/filled-tonal-button.ts +0 -3
  301. package/src/md/button/internals/outlined-button.styles.ts +0 -31
  302. package/src/md/button/internals/outlined-button.ts +0 -3
  303. package/src/md/button/internals/text-button.styles.ts +0 -30
  304. package/src/md/button/internals/text-button.ts +0 -3
  305. package/src/md/button/ui-elevated-button.ts +0 -19
  306. package/src/md/button/ui-filled-button.ts +0 -19
  307. package/src/md/button/ui-filled-tonal-button.ts +0 -19
  308. package/src/md/button/ui-outlined-button.ts +0 -19
  309. package/src/md/button/ui-text-button.ts +0 -19
  310. package/src/md/icon-button/ui-filled-icon-button.ts +0 -16
  311. package/src/md/icon-button/ui-filled-tonal-icon-button.ts +0 -16
  312. package/src/md/icon-button/ui-outlined-icon-button.ts +0 -16
@@ -0,0 +1,319 @@
1
+ import { css } from 'lit';
2
+ /* Material Design 3 Expressive Button - CSS-Native Implementation */
3
+ export default css `
4
+ :host {
5
+ all: unset;
6
+
7
+ /* Layout and positioning */
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ position: relative;
12
+ box-sizing: border-box;
13
+ white-space: nowrap;
14
+
15
+ /* Default sizing */
16
+ min-height: 40px;
17
+ min-width: 64px;
18
+ padding-inline: 16px;
19
+ gap: 8px;
20
+
21
+ /* Typography from Material 3 tokens */
22
+ font-family: var(--md-sys-typescale-label-large-font, var(--md-ref-typeface-plain, system-ui));
23
+ font-size: var(--md-sys-typescale-label-large-size, 0.875rem);
24
+ font-weight: var(--md-sys-typescale-label-large-weight, 500);
25
+ line-height: var(--md-sys-typescale-label-large-height, 1.25);
26
+ letter-spacing: var(--md-sys-typescale-label-large-tracking, 0.01em);
27
+
28
+ --md-ripple-hover-state-layer-color: currentColor;
29
+ --md-ripple-focus-state-layer-color: currentColor;
30
+ --md-ripple-pressed-state-layer-color: currentColor;
31
+
32
+ /* CSS custom property for pill radius - half of the button height */
33
+ --_pill-radius: 20px;
34
+ /* Default icon size */
35
+ --_icon-size: var(--md-button-icon-size, 20px);
36
+ --_background-color: transparent;
37
+ --_color: inherit;
38
+ --_shadow: var(--md-sys-elevation-0);
39
+
40
+ border-end-end-radius: var(--ui-button-shape-end-end, var(--_pill-radius));
41
+ border-end-start-radius: var(--ui-button-shape-end-start, var(--_pill-radius));
42
+ border-start-end-radius: var(--ui-button-shape-start-end, var(--_pill-radius));
43
+ border-start-start-radius: var(--ui-button-shape-start-start, var(--_pill-radius));
44
+ background-color: var(--_background-color);
45
+ color: var(--_color);
46
+ box-shadow: var(--_shadow);
47
+
48
+ /* Interaction styles */
49
+ cursor: pointer;
50
+ user-select: none;
51
+ -webkit-tap-highlight-color: transparent;
52
+ outline: none;
53
+
54
+ transition:
55
+ background-color var(--md-sys-motion-duration-short2, 200ms)
56
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
57
+ color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
58
+ box-shadow var(--md-sys-motion-duration-short2, 200ms)
59
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
60
+ border-color var(--md-sys-motion-duration-short2, 200ms)
61
+ var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),
62
+ border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
63
+ }
64
+
65
+ /* Icon styling */
66
+ ::slotted([slot='icon']) {
67
+ flex-shrink: 0;
68
+ width: var(--_icon-size);
69
+ height: var(--_icon-size);
70
+ font-size: inherit;
71
+ }
72
+
73
+ /* Modern CSS: Container queries for responsive sizing */
74
+ @container (min-width: 320px) {
75
+ :host {
76
+ min-width: 80px;
77
+ }
78
+ }
79
+
80
+ .ripple {
81
+ border-radius: inherit;
82
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
83
+ }
84
+
85
+ .focus-ring {
86
+ --md-focus-ring-shape-end-end: var(--ui-button-shape-end-end, var(--_pill-radius));
87
+ --md-focus-ring-shape-end-start: var(--ui-button-shape-end-start, var(--_pill-radius));
88
+ --md-focus-ring-shape-start-end: var(--ui-button-shape-start-end, var(--_pill-radius));
89
+ --md-focus-ring-shape-start-start: var(--ui-button-shape-start-start, var(--_pill-radius));
90
+ transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);
91
+ }
92
+
93
+ .ripple.activated {
94
+ z-index: 1;
95
+ }
96
+
97
+ /* Disabled state */
98
+ :host([disabled]) {
99
+ background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent);
100
+ color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
101
+ box-shadow: none;
102
+ cursor: not-allowed;
103
+ pointer-events: none;
104
+ }
105
+
106
+ /* Size Variations */
107
+ :host([size='xs']) {
108
+ min-height: 32px;
109
+ padding-inline: 12px;
110
+ font-size: var(--md-sys-typescale-label-medium-size, 0.75rem);
111
+ gap: 6px;
112
+ --_icon-size: 20px;
113
+ }
114
+
115
+ :host([size='s']) {
116
+ min-height: 40px;
117
+ padding-inline: 16px;
118
+ --_icon-size: 20px;
119
+ }
120
+
121
+ :host([size='m']) {
122
+ min-height: 56px;
123
+ padding-inline: 24px;
124
+ font-size: var(--md-sys-typescale-label-large-size, 1rem);
125
+ gap: 10px;
126
+ --_icon-size: 24px;
127
+ }
128
+
129
+ :host([size='l']) {
130
+ min-height: 96px;
131
+ padding-inline: 48px;
132
+ font-size: var(--md-sys-typescale-title-medium-size, 1.125rem);
133
+ gap: 12px;
134
+ --_icon-size: 32px;
135
+ }
136
+
137
+ :host([size='xl']) {
138
+ min-height: 136px;
139
+ padding-inline: 64px;
140
+ font-size: var(--md-sys-typescale-title-large-size, 1.375rem);
141
+ gap: 16px;
142
+ --_icon-size: 40px;
143
+ }
144
+
145
+ /* Pressed state is the same to all combinations of shape and size */
146
+ :host([size='xs'].pressed),
147
+ :host([size='s'].pressed) {
148
+ --_pill-radius: 8px !important;
149
+ }
150
+ :host([size='m'].pressed) {
151
+ --_pill-radius: 12px !important;
152
+ }
153
+ :host([size='xl'].pressed),
154
+ :host([size='l'].pressed) {
155
+ --_pill-radius: 16px !important;
156
+ }
157
+
158
+ /* Shape setup */
159
+ /* 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. */
160
+ :host([toggle][selected][shape='square'][size='xs']),
161
+ :host([shape='round'][size='xs']) {
162
+ --_pill-radius: 16px; /* Half of 32px height */
163
+ }
164
+ :host([toggle][selected][shape='square'][size='s']),
165
+ :host([shape='round'][size='s']) {
166
+ --_pill-radius: 20px; /* Half of 40px height */
167
+ }
168
+ :host([toggle][selected][shape='square'][size='m']),
169
+ :host([shape='round'][size='m']) {
170
+ --_pill-radius: 28px; /* Half of 56px height */
171
+ }
172
+ :host([toggle][selected][shape='square'][size='l']),
173
+ :host([shape='round'][size='l']) {
174
+ --_pill-radius: 48px; /* Half of 96px height */
175
+ }
176
+ :host([toggle][selected][shape='square'][size='xl']),
177
+ :host([shape='round'][size='xl']) {
178
+ --_pill-radius: 68px; /* Half of 136px height */
179
+ }
180
+
181
+ :host([shape='square'][size='xs']),
182
+ :host([shape='square'][size='s']) {
183
+ --_pill-radius: var(--md-sys-shape-corner-medium);
184
+ }
185
+
186
+ :host([shape='square'][size='m']) {
187
+ --_pill-radius: var(--md-sys-shape-corner-large);
188
+ }
189
+
190
+ :host([shape='square'][size='l']),
191
+ :host([shape='square'][size='xl']) {
192
+ --_pill-radius: var(--md-sys-shape-corner-extra-large);
193
+ }
194
+
195
+ /* Button Color Variants - Material 3 Expressive */
196
+
197
+ /* Elevated Button */
198
+ :host([color='elevated']) {
199
+ --_background-color: var(--md-sys-color-surface-container-low);
200
+ --_color: var(--md-sys-color-primary);
201
+ --_shadow: var(--md-sys-elevation-1);
202
+ }
203
+
204
+ :host([color='elevated'][toggle][selected]) {
205
+ --_background-color: var(--md-sys-color-primary);
206
+ --_color: var(--md-sys-color-on-primary);
207
+ }
208
+
209
+ :host([color='elevated']:hover:not([disabled])) {
210
+ --_shadow: var(--md-sys-elevation-2);
211
+ }
212
+
213
+ :host([color='elevated'][disabled]) {
214
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
215
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
216
+ --_shadow: var(--md-sys-elevation-0);
217
+ }
218
+
219
+ /* Filled Button */
220
+ :host([color='filled']) {
221
+ --_background-color: var(--md-sys-color-primary);
222
+ --_color: var(--md-sys-color-on-primary);
223
+ }
224
+
225
+ :host([color='filled'][toggle]) {
226
+ --_background-color: var(--md-sys-color-surface-container);
227
+ --_color: var(--md-sys-color-on-surface-variant);
228
+ }
229
+
230
+ :host([color='filled'][toggle][selected]) {
231
+ --_background-color: var(--md-sys-color-primary);
232
+ --_color: var(--md-sys-color-on-primary);
233
+ }
234
+
235
+ :host([color='filled']:hover:not([disabled])) {
236
+ --_shadow: var(--md-sys-elevation-1);
237
+ }
238
+
239
+ :host([color='filled'][disabled]) {
240
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
241
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
242
+ }
243
+
244
+ /* Filled Tonal Button */
245
+ :host([color='tonal']) {
246
+ --_background-color: var(--md-sys-color-secondary-container);
247
+ --_color: var(--md-sys-color-on-secondary-container);
248
+ }
249
+
250
+ :host([color='tonal'][toggle]) {
251
+ --_background-color: var(--md-sys-color-secondary-container);
252
+ --_color: var(--md-sys-color-on-secondary-container);
253
+ }
254
+
255
+ :host([color='tonal'][toggle][selected]) {
256
+ --_background-color: var(--md-sys-color-secondary);
257
+ --_color: var(--md-sys-color-on-secondary);
258
+ }
259
+
260
+ :host([color='tonal']:hover:not([disabled])) {
261
+ --_shadow: var(--md-sys-elevation-1);
262
+ }
263
+
264
+ :host([color='tonal'][disabled]) {
265
+ --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
266
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
267
+ }
268
+
269
+ /* Outlined Button */
270
+ :host([color='outlined']) {
271
+ border: 1px var(--md-sys-color-outline-variant) solid;
272
+ --_color: var(--md-sys-color-on-surface-variant);
273
+ }
274
+
275
+ :host([color='outlined'][toggle][selected]) {
276
+ --_background-color: var(--md-sys-color-inverse-surface);
277
+ --_color: var(--md-sys-color-inverse-on-surface);
278
+ }
279
+
280
+ :host([color='outlined'][disabled]) {
281
+ border-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
282
+ --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
283
+ }
284
+
285
+ /* Text Button */
286
+ :host([color='text']) {
287
+ --_color: var(--md-sys-color-primary);
288
+ }
289
+
290
+ :host([color='text'][disabled]) {
291
+ color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);
292
+ }
293
+
294
+ :host([toggle][selected][shape='round']) {
295
+ --_pill-radius: var(--md-sys-shape-corner-medium);
296
+ }
297
+
298
+ /* Preference-based animations */
299
+ @media (prefers-reduced-motion: reduce) {
300
+ :host {
301
+ transition-duration: 0.01ms;
302
+ animation-duration: 0.01ms;
303
+ }
304
+ }
305
+
306
+ /* High contrast mode support */
307
+ @media (prefers-contrast: high) {
308
+ :host {
309
+ border-width: 2px;
310
+ }
311
+
312
+ :host([color='text']),
313
+ :host([color='outlined']) {
314
+ border-width: 2px;
315
+ border-style: solid;
316
+ }
317
+ }
318
+ `;
319
+ //# sourceMappingURL=button.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.styles.js","sourceRoot":"","sources":["../../../../../src/md/button/internals/button.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,qEAAqE;AACrE,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2TjB,CAAA","sourcesContent":["import { css } from 'lit'\n\n/* Material Design 3 Expressive Button - CSS-Native Implementation */\nexport default css`\n :host {\n all: unset;\n\n /* Layout and positioning */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n white-space: nowrap;\n\n /* Default sizing */\n min-height: 40px;\n min-width: 64px;\n padding-inline: 16px;\n gap: 8px;\n\n /* Typography from Material 3 tokens */\n font-family: var(--md-sys-typescale-label-large-font, var(--md-ref-typeface-plain, system-ui));\n font-size: var(--md-sys-typescale-label-large-size, 0.875rem);\n font-weight: var(--md-sys-typescale-label-large-weight, 500);\n line-height: var(--md-sys-typescale-label-large-height, 1.25);\n letter-spacing: var(--md-sys-typescale-label-large-tracking, 0.01em);\n\n --md-ripple-hover-state-layer-color: currentColor;\n --md-ripple-focus-state-layer-color: currentColor;\n --md-ripple-pressed-state-layer-color: currentColor;\n\n /* CSS custom property for pill radius - half of the button height */\n --_pill-radius: 20px;\n /* Default icon size */\n --_icon-size: var(--md-button-icon-size, 20px);\n --_background-color: transparent;\n --_color: inherit;\n --_shadow: var(--md-sys-elevation-0);\n\n border-end-end-radius: var(--ui-button-shape-end-end, var(--_pill-radius));\n border-end-start-radius: var(--ui-button-shape-end-start, var(--_pill-radius));\n border-start-end-radius: var(--ui-button-shape-start-end, var(--_pill-radius));\n border-start-start-radius: var(--ui-button-shape-start-start, var(--_pill-radius));\n background-color: var(--_background-color);\n color: var(--_color);\n box-shadow: var(--_shadow);\n\n /* Interaction styles */\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n outline: none;\n\n transition:\n background-color var(--md-sys-motion-duration-short2, 200ms)\n var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n box-shadow var(--md-sys-motion-duration-short2, 200ms)\n var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n border-color var(--md-sys-motion-duration-short2, 200ms)\n var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);\n }\n\n /* Icon styling */\n ::slotted([slot='icon']) {\n flex-shrink: 0;\n width: var(--_icon-size);\n height: var(--_icon-size);\n font-size: inherit;\n }\n\n /* Modern CSS: Container queries for responsive sizing */\n @container (min-width: 320px) {\n :host {\n min-width: 80px;\n }\n }\n\n .ripple {\n border-radius: inherit;\n transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);\n }\n\n .focus-ring {\n --md-focus-ring-shape-end-end: var(--ui-button-shape-end-end, var(--_pill-radius));\n --md-focus-ring-shape-end-start: var(--ui-button-shape-end-start, var(--_pill-radius));\n --md-focus-ring-shape-start-end: var(--ui-button-shape-start-end, var(--_pill-radius));\n --md-focus-ring-shape-start-start: var(--ui-button-shape-start-start, var(--_pill-radius));\n transition: border-radius var(--md-sys-motion-duration-medium1) var(--md-sys-motion-easing-standard);\n }\n\n .ripple.activated {\n z-index: 1;\n }\n\n /* Disabled state */\n :host([disabled]) {\n background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent);\n color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n box-shadow: none;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* Size Variations */\n :host([size='xs']) {\n min-height: 32px;\n padding-inline: 12px;\n font-size: var(--md-sys-typescale-label-medium-size, 0.75rem);\n gap: 6px;\n --_icon-size: 20px;\n }\n\n :host([size='s']) {\n min-height: 40px;\n padding-inline: 16px;\n --_icon-size: 20px;\n }\n\n :host([size='m']) {\n min-height: 56px;\n padding-inline: 24px;\n font-size: var(--md-sys-typescale-label-large-size, 1rem);\n gap: 10px;\n --_icon-size: 24px;\n }\n\n :host([size='l']) {\n min-height: 96px;\n padding-inline: 48px;\n font-size: var(--md-sys-typescale-title-medium-size, 1.125rem);\n gap: 12px;\n --_icon-size: 32px;\n }\n\n :host([size='xl']) {\n min-height: 136px;\n padding-inline: 64px;\n font-size: var(--md-sys-typescale-title-large-size, 1.375rem);\n gap: 16px;\n --_icon-size: 40px;\n }\n\n /* Pressed state is the same to all combinations of shape and size */\n :host([size='xs'].pressed),\n :host([size='s'].pressed) {\n --_pill-radius: 8px !important;\n }\n :host([size='m'].pressed) {\n --_pill-radius: 12px !important;\n }\n :host([size='xl'].pressed),\n :host([size='l'].pressed) {\n --_pill-radius: 16px !important;\n }\n\n /* Shape setup */\n /* 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. */\n :host([toggle][selected][shape='square'][size='xs']),\n :host([shape='round'][size='xs']) {\n --_pill-radius: 16px; /* Half of 32px height */\n }\n :host([toggle][selected][shape='square'][size='s']),\n :host([shape='round'][size='s']) {\n --_pill-radius: 20px; /* Half of 40px height */\n }\n :host([toggle][selected][shape='square'][size='m']),\n :host([shape='round'][size='m']) {\n --_pill-radius: 28px; /* Half of 56px height */\n }\n :host([toggle][selected][shape='square'][size='l']),\n :host([shape='round'][size='l']) {\n --_pill-radius: 48px; /* Half of 96px height */\n }\n :host([toggle][selected][shape='square'][size='xl']),\n :host([shape='round'][size='xl']) {\n --_pill-radius: 68px; /* Half of 136px height */\n }\n\n :host([shape='square'][size='xs']),\n :host([shape='square'][size='s']) {\n --_pill-radius: var(--md-sys-shape-corner-medium);\n }\n\n :host([shape='square'][size='m']) {\n --_pill-radius: var(--md-sys-shape-corner-large);\n }\n\n :host([shape='square'][size='l']),\n :host([shape='square'][size='xl']) {\n --_pill-radius: var(--md-sys-shape-corner-extra-large);\n }\n\n /* Button Color Variants - Material 3 Expressive */\n\n /* Elevated Button */\n :host([color='elevated']) {\n --_background-color: var(--md-sys-color-surface-container-low);\n --_color: var(--md-sys-color-primary);\n --_shadow: var(--md-sys-elevation-1);\n }\n\n :host([color='elevated'][toggle][selected]) {\n --_background-color: var(--md-sys-color-primary);\n --_color: var(--md-sys-color-on-primary);\n }\n\n :host([color='elevated']:hover:not([disabled])) {\n --_shadow: var(--md-sys-elevation-2);\n }\n\n :host([color='elevated'][disabled]) {\n --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);\n --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n --_shadow: var(--md-sys-elevation-0);\n }\n\n /* Filled Button */\n :host([color='filled']) {\n --_background-color: var(--md-sys-color-primary);\n --_color: var(--md-sys-color-on-primary);\n }\n\n :host([color='filled'][toggle]) {\n --_background-color: var(--md-sys-color-surface-container);\n --_color: var(--md-sys-color-on-surface-variant);\n }\n\n :host([color='filled'][toggle][selected]) {\n --_background-color: var(--md-sys-color-primary);\n --_color: var(--md-sys-color-on-primary);\n }\n\n :host([color='filled']:hover:not([disabled])) {\n --_shadow: var(--md-sys-elevation-1);\n }\n\n :host([color='filled'][disabled]) {\n --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);\n --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n }\n\n /* Filled Tonal Button */\n :host([color='tonal']) {\n --_background-color: var(--md-sys-color-secondary-container);\n --_color: var(--md-sys-color-on-secondary-container);\n }\n\n :host([color='tonal'][toggle]) {\n --_background-color: var(--md-sys-color-secondary-container);\n --_color: var(--md-sys-color-on-secondary-container);\n }\n\n :host([color='tonal'][toggle][selected]) {\n --_background-color: var(--md-sys-color-secondary);\n --_color: var(--md-sys-color-on-secondary);\n }\n\n :host([color='tonal']:hover:not([disabled])) {\n --_shadow: var(--md-sys-elevation-1);\n }\n\n :host([color='tonal'][disabled]) {\n --_background-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);\n --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n }\n\n /* Outlined Button */\n :host([color='outlined']) {\n border: 1px var(--md-sys-color-outline-variant) solid;\n --_color: var(--md-sys-color-on-surface-variant);\n }\n\n :host([color='outlined'][toggle][selected]) {\n --_background-color: var(--md-sys-color-inverse-surface);\n --_color: var(--md-sys-color-inverse-on-surface);\n }\n\n :host([color='outlined'][disabled]) {\n border-color: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);\n --_color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n }\n\n /* Text Button */\n :host([color='text']) {\n --_color: var(--md-sys-color-primary);\n }\n\n :host([color='text'][disabled]) {\n color: color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent);\n }\n\n :host([toggle][selected][shape='round']) {\n --_pill-radius: var(--md-sys-shape-corner-medium);\n }\n\n /* Preference-based animations */\n @media (prefers-reduced-motion: reduce) {\n :host {\n transition-duration: 0.01ms;\n animation-duration: 0.01ms;\n }\n }\n\n /* High contrast mode support */\n @media (prefers-contrast: high) {\n :host {\n border-width: 2px;\n }\n\n :host([color='text']),\n :host([color='outlined']) {\n border-width: 2px;\n border-style: solid;\n }\n }\n`\n"]}
@@ -0,0 +1,54 @@
1
+ import { LitElement, type PropertyValues } from 'lit';
2
+ import UiButtonElement from './button.js';
3
+ import type { MdButtonSize } from './button.js';
4
+ export type MdGroupType = 'standard' | 'connected';
5
+ /**
6
+ * A group of buttons that can be selected.
7
+ *
8
+ * When a group of buttons is added to the group element, the group element
9
+ * becomes the manager of the buttons type, size, and selection state.
10
+ *
11
+ * All buttons added to the group will inherit the size from the group, but also the `shape` is set
12
+ * based on the group type.
13
+ *
14
+ * Buttons don't need to be have the `toggle` attribute set. In such case, the button
15
+ * will not participate in the selection state management.
16
+ */
17
+ export default class ButtonGroup extends LitElement {
18
+ /**
19
+ * If true, multiple buttons can be selected.
20
+ * When set to false, the group deselects all other buttons when one is selected.
21
+ * @attribute
22
+ */
23
+ accessor multiple: boolean;
24
+ /**
25
+ * The type of button group.
26
+ * - 'standard': Standard button group.
27
+ * - 'connected': Connected button group (buttons are visually connected).
28
+ * @attribute
29
+ */
30
+ accessor type: MdGroupType;
31
+ /**
32
+ * The size of the buttons used with this group.
33
+ * @attribute
34
+ */
35
+ accessor size: MdButtonSize;
36
+ private accessor buttons;
37
+ /**
38
+ * The MutationObserver instance used to watch for changes in slotted children.
39
+ */
40
+ protected observer?: MutationObserver;
41
+ connectedCallback(): void;
42
+ disconnectedCallback(): void;
43
+ protected firstUpdated(changed: PropertyValues): void;
44
+ protected willUpdate(changed: PropertyValues<this>): void;
45
+ protected handleMutations(mutations: MutationRecord[]): void;
46
+ protected updateChildren(): void;
47
+ /**
48
+ * In multi selection mode, this method does nothing.
49
+ * In single selection mode, it activates the clicked button and deactivates all others.
50
+ */
51
+ activate(button: UiButtonElement): void;
52
+ render(): import("lit-html").TemplateResult<1>;
53
+ }
54
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAQ,MAAM,KAAK,CAAA;AAE3D,OAAO,eAAe,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU;IACjD;;;;OAIG;IAC0B,QAAQ,CAAC,QAAQ,UAAQ;IAEtD;;;;;OAKG;IACyB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAa;IAEnE;;;OAGG;IACwC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAM;IAEX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE7G;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAE5B,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;cAMlB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;cAK3C,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAMlE,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI;IAa5D,SAAS,CAAC,cAAc,IAAI,IAAI;IAYhC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe;IAgBvB,MAAM;CAGhB"}
@@ -0,0 +1,157 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import { property, queryAssignedElements } from 'lit/decorators.js';
4
+ import UiButtonElement from './button.js';
5
+ let ButtonGroup = (() => {
6
+ let _classSuper = LitElement;
7
+ let _multiple_decorators;
8
+ let _multiple_initializers = [];
9
+ let _multiple_extraInitializers = [];
10
+ let _type_decorators;
11
+ let _type_initializers = [];
12
+ let _type_extraInitializers = [];
13
+ let _size_decorators;
14
+ let _size_initializers = [];
15
+ let _size_extraInitializers = [];
16
+ let _buttons_decorators;
17
+ let _buttons_initializers = [];
18
+ let _buttons_extraInitializers = [];
19
+ return class ButtonGroup extends _classSuper {
20
+ static {
21
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
22
+ _multiple_decorators = [property({ type: Boolean })];
23
+ _type_decorators = [property({ type: String })];
24
+ _size_decorators = [property({ type: String, reflect: true })];
25
+ _buttons_decorators = [queryAssignedElements({ flatten: true, selector: 'ui-button' })];
26
+ __esDecorate(this, null, _multiple_decorators, { kind: "accessor", name: "multiple", static: false, private: false, access: { has: obj => "multiple" in obj, get: obj => obj.multiple, set: (obj, value) => { obj.multiple = value; } }, metadata: _metadata }, _multiple_initializers, _multiple_extraInitializers);
27
+ __esDecorate(this, null, _type_decorators, { kind: "accessor", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
28
+ __esDecorate(this, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
29
+ __esDecorate(this, null, _buttons_decorators, { kind: "accessor", name: "buttons", static: false, private: false, access: { has: obj => "buttons" in obj, get: obj => obj.buttons, set: (obj, value) => { obj.buttons = value; } }, metadata: _metadata }, _buttons_initializers, _buttons_extraInitializers);
30
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
31
+ }
32
+ #multiple_accessor_storage = __runInitializers(this, _multiple_initializers, false
33
+ /**
34
+ * The type of button group.
35
+ * - 'standard': Standard button group.
36
+ * - 'connected': Connected button group (buttons are visually connected).
37
+ * @attribute
38
+ */
39
+ );
40
+ /**
41
+ * If true, multiple buttons can be selected.
42
+ * When set to false, the group deselects all other buttons when one is selected.
43
+ * @attribute
44
+ */
45
+ get multiple() { return this.#multiple_accessor_storage; }
46
+ set multiple(value) { this.#multiple_accessor_storage = value; }
47
+ #type_accessor_storage = (__runInitializers(this, _multiple_extraInitializers), __runInitializers(this, _type_initializers, 'standard'
48
+ /**
49
+ * The size of the buttons used with this group.
50
+ * @attribute
51
+ */
52
+ ));
53
+ /**
54
+ * The type of button group.
55
+ * - 'standard': Standard button group.
56
+ * - 'connected': Connected button group (buttons are visually connected).
57
+ * @attribute
58
+ */
59
+ get type() { return this.#type_accessor_storage; }
60
+ set type(value) { this.#type_accessor_storage = value; }
61
+ #size_accessor_storage = (__runInitializers(this, _type_extraInitializers), __runInitializers(this, _size_initializers, 's'));
62
+ /**
63
+ * The size of the buttons used with this group.
64
+ * @attribute
65
+ */
66
+ get size() { return this.#size_accessor_storage; }
67
+ set size(value) { this.#size_accessor_storage = value; }
68
+ #buttons_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _buttons_initializers, void 0));
69
+ get buttons() { return this.#buttons_accessor_storage; }
70
+ set buttons(value) { this.#buttons_accessor_storage = value; }
71
+ /**
72
+ * The MutationObserver instance used to watch for changes in slotted children.
73
+ */
74
+ observer = __runInitializers(this, _buttons_extraInitializers);
75
+ connectedCallback() {
76
+ super.connectedCallback();
77
+ this.observer = new MutationObserver(this.handleMutations.bind(this));
78
+ this.observer.observe(this, { childList: true, subtree: true, attributes: true, attributeFilter: ['selected'] });
79
+ this.updateChildren();
80
+ }
81
+ disconnectedCallback() {
82
+ super.disconnectedCallback();
83
+ this.observer?.disconnect();
84
+ this.observer = undefined;
85
+ }
86
+ firstUpdated(changed) {
87
+ this.updateChildren();
88
+ super.firstUpdated(changed);
89
+ }
90
+ willUpdate(changed) {
91
+ if (changed.has('size')) {
92
+ this.updateChildren();
93
+ }
94
+ }
95
+ handleMutations(mutations) {
96
+ for (const mutation of mutations) {
97
+ if (mutation.type === 'attributes' && mutation.attributeName === 'selected') {
98
+ const target = mutation.target;
99
+ if (target instanceof UiButtonElement && target.toggle && target.selected) {
100
+ this.activate(target);
101
+ }
102
+ }
103
+ else if (mutation.type === 'childList') {
104
+ this.updateChildren();
105
+ }
106
+ }
107
+ }
108
+ updateChildren() {
109
+ const isConnected = this.type === 'connected';
110
+ this.buttons.forEach((button) => {
111
+ button.size = this.size;
112
+ if (isConnected) {
113
+ button.shape = 'square';
114
+ }
115
+ else {
116
+ button.shape = 'round';
117
+ }
118
+ });
119
+ }
120
+ /**
121
+ * In multi selection mode, this method does nothing.
122
+ * In single selection mode, it activates the clicked button and deactivates all others.
123
+ */
124
+ activate(button) {
125
+ if (this.multiple) {
126
+ // In multiselection, we don't need to do anything here
127
+ return;
128
+ }
129
+ this.buttons.forEach((btn) => {
130
+ if (!btn.toggle || btn === button || !btn.selected) {
131
+ return;
132
+ }
133
+ btn.selected = false;
134
+ });
135
+ if (button.toggle && !button.selected) {
136
+ button.selected = true;
137
+ }
138
+ }
139
+ render() {
140
+ return html `<slot></slot>`;
141
+ }
142
+ };
143
+ })();
144
+ /**
145
+ * A group of buttons that can be selected.
146
+ *
147
+ * When a group of buttons is added to the group element, the group element
148
+ * becomes the manager of the buttons type, size, and selection state.
149
+ *
150
+ * All buttons added to the group will inherit the size from the group, but also the `shape` is set
151
+ * based on the group type.
152
+ *
153
+ * Buttons don't need to be have the `toggle` attribute set. In such case, the button
154
+ * will not participate in the selection state management.
155
+ */
156
+ export default ButtonGroup;
157
+ //# sourceMappingURL=group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, type PropertyValues, html } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport UiButtonElement from './button.js'\nimport type { MdButtonSize } from './button.js'\n\nexport type MdGroupType = 'standard' | 'connected'\n\n/**\n * A group of buttons that can be selected.\n *\n * When a group of buttons is added to the group element, the group element\n * becomes the manager of the buttons type, size, and selection state.\n *\n * All buttons added to the group will inherit the size from the group, but also the `shape` is set\n * based on the group type.\n *\n * Buttons don't need to be have the `toggle` attribute set. In such case, the button\n * will not participate in the selection state management.\n */\nexport default class ButtonGroup extends LitElement {\n /**\n * If true, multiple buttons can be selected.\n * When set to false, the group deselects all other buttons when one is selected.\n * @attribute\n */\n @property({ type: Boolean }) accessor multiple = false\n\n /**\n * The type of button group.\n * - 'standard': Standard button group.\n * - 'connected': Connected button group (buttons are visually connected).\n * @attribute\n */\n @property({ type: String }) accessor type: MdGroupType = 'standard'\n\n /**\n * The size of the buttons used with this group.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor size: MdButtonSize = 's'\n\n @queryAssignedElements({ flatten: true, selector: 'ui-button' }) private accessor buttons!: UiButtonElement[]\n\n /**\n * The MutationObserver instance used to watch for changes in slotted children.\n */\n protected observer?: MutationObserver\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.observer = new MutationObserver(this.handleMutations.bind(this))\n this.observer.observe(this, { childList: true, subtree: true, attributes: true, attributeFilter: ['selected'] })\n this.updateChildren()\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n this.updateChildren()\n super.firstUpdated(changed)\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('size')) {\n this.updateChildren()\n }\n }\n\n protected handleMutations(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'selected') {\n const target = mutation.target as UiButtonElement\n if (target instanceof UiButtonElement && target.toggle && target.selected) {\n this.activate(target)\n }\n } else if (mutation.type === 'childList') {\n this.updateChildren()\n }\n }\n }\n\n protected updateChildren(): void {\n const isConnected = this.type === 'connected'\n this.buttons.forEach((button) => {\n button.size = this.size\n if (isConnected) {\n button.shape = 'square'\n } else {\n button.shape = 'round'\n }\n })\n }\n\n /**\n * In multi selection mode, this method does nothing.\n * In single selection mode, it activates the clicked button and deactivates all others.\n */\n activate(button: UiButtonElement) {\n if (this.multiple) {\n // In multiselection, we don't need to do anything here\n return\n }\n this.buttons.forEach((btn) => {\n if (!btn.toggle || btn === button || !btn.selected) {\n return\n }\n btn.selected = false\n })\n if (button.toggle && !button.selected) {\n button.selected = true\n }\n }\n\n override render() {\n return html`<slot></slot>`\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  declare const _default: import("lit").CSSResult;
2
2
  export default _default;
3
- //# sourceMappingURL=text-button.styles.d.ts.map
3
+ //# sourceMappingURL=group.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.styles.d.ts","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.styles.ts"],"names":[],"mappings":";AAGA,wBAkGC"}