morya-ui 0.4.1 → 0.4.3

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 (252) hide show
  1. package/CHANGELOG.md +60 -1
  2. package/dist/Button-Bjsth0ct.js +326 -0
  3. package/dist/{Card-B1CB9Trm.js → Card-Ct5vJmoV.js} +1 -1
  4. package/dist/{Checkbox-BKt8hdhV.js → Checkbox-Bo26OGHP.js} +1 -1
  5. package/dist/{DatePicker-CSoMFEvh.js → DatePicker-CsMGzCqY.js} +4 -4
  6. package/dist/{Empty-iNcc0G-q.js → Empty-rMhOPi79.js} +2 -2
  7. package/dist/{FlyoutSubmenu-C1RfFRzH.js → FlyoutSubmenu-C0id6-Sb.js} +1 -1
  8. package/dist/{Icon-od9Ob-Ay.js → Icon-CmHjx7W8.js} +1 -1
  9. package/dist/{Input-DQHYqvNk.js → Input-CxSTVp9E.js} +3 -3
  10. package/dist/{Loading-BPpR-jGa.js → Loading-D_qRwfKv.js} +11 -11
  11. package/dist/{Pagination-DLphD6LC.js → Pagination-CnGOpp0m.js} +3 -3
  12. package/dist/{Popover-B_2c9NWs.js → Popover-D1uZ1N9Z.js} +2 -2
  13. package/dist/{ProgressSpinner-B_OJG_0l.js → ProgressSpinner-hmR23xpi.js} +2 -2
  14. package/dist/{Radio-Bxd806ys.js → Radio-CZAyelC_.js} +1 -1
  15. package/dist/{Segmented-BRMSmXCl.js → Segmented-BpdO7arR.js} +2 -2
  16. package/dist/{Select-DxMlpgc5.js → Select-CySmusHs.js} +5 -5
  17. package/dist/{Textarea-BBvpgIQL.js → Textarea-DskjTCcz.js} +3 -3
  18. package/dist/{Tooltip-BJp-ZMqQ.js → Tooltip-DSfkflHp.js} +2 -2
  19. package/dist/alert/index.js +15 -15
  20. package/dist/alert/style.css +1 -1
  21. package/dist/auto-complete/index.js +4 -4
  22. package/dist/avatar/index.js +1 -1
  23. package/dist/badge/index.js +24 -24
  24. package/dist/badge/style.css +0 -1
  25. package/dist/block-ui/index.js +1 -1
  26. package/dist/breadcrumb/index.js +1 -1
  27. package/dist/button/index.js +9 -9
  28. package/dist/button/style.css +464 -775
  29. package/dist/button/style.js +1 -0
  30. package/dist/calendar/index.js +3 -3
  31. package/dist/card/index.js +1 -1
  32. package/dist/carousel/index.js +2 -4
  33. package/dist/carousel/style.css +457 -775
  34. package/dist/cascade-select/index.js +5 -5
  35. package/dist/checkbox/index.js +1 -1
  36. package/dist/chip/index.js +35 -35
  37. package/dist/chip/style.css +1 -1
  38. package/dist/command-menu/index.js +5 -5
  39. package/dist/components/Alert/Alert.vue.d.ts +2 -2
  40. package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
  41. package/dist/components/Alert/index.d.ts +1 -1
  42. package/dist/components/Alert/index.d.ts.map +1 -1
  43. package/dist/components/Alert/styles.css +1 -1
  44. package/dist/components/Alert/types.d.ts +3 -3
  45. package/dist/components/Alert/types.d.ts.map +1 -1
  46. package/dist/components/Badge/Badge.vue.d.ts +2 -2
  47. package/dist/components/Badge/index.d.ts +1 -1
  48. package/dist/components/Badge/index.d.ts.map +1 -1
  49. package/dist/components/Badge/styles.css +0 -1
  50. package/dist/components/Badge/types.d.ts +3 -4
  51. package/dist/components/Badge/types.d.ts.map +1 -1
  52. package/dist/components/Button/Button.vue.d.ts +15 -22
  53. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  54. package/dist/components/Button/ButtonGroup.vue.d.ts +1 -1
  55. package/dist/components/Button/ButtonGroup.vue.d.ts.map +1 -1
  56. package/dist/components/Button/buttonHelpers.d.ts +25 -0
  57. package/dist/components/Button/buttonHelpers.d.ts.map +1 -0
  58. package/dist/components/Button/index.d.ts +2 -1
  59. package/dist/components/Button/index.d.ts.map +1 -1
  60. package/dist/components/Button/styles.css +463 -781
  61. package/dist/components/Button/types.d.ts +63 -61
  62. package/dist/components/Button/types.d.ts.map +1 -1
  63. package/dist/components/Carousel/Carousel.vue.d.ts.map +1 -1
  64. package/dist/components/Chip/index.d.ts +1 -1
  65. package/dist/components/Chip/index.d.ts.map +1 -1
  66. package/dist/components/Chip/styles.css +1 -1
  67. package/dist/components/Chip/types.d.ts +3 -3
  68. package/dist/components/Chip/types.d.ts.map +1 -1
  69. package/dist/components/ConfirmDialog/ConfirmDialog.vue.d.ts +2 -2
  70. package/dist/components/ConfirmDialog/ConfirmDialog.vue.d.ts.map +1 -1
  71. package/dist/components/ConfirmDialog/types.d.ts +3 -3
  72. package/dist/components/ConfirmDialog/types.d.ts.map +1 -1
  73. package/dist/components/ConfirmDialog/useConfirm.d.ts +1 -1
  74. package/dist/components/ConfirmDialog/useConfirm.d.ts.map +1 -1
  75. package/dist/components/ConfirmPopup/ConfirmPopup.vue.d.ts.map +1 -1
  76. package/dist/components/ConfirmPopup/types.d.ts +3 -3
  77. package/dist/components/ConfirmPopup/types.d.ts.map +1 -1
  78. package/dist/components/Dialog/Dialog.vue.d.ts.map +1 -1
  79. package/dist/components/Dialog/styles.css +2 -3
  80. package/dist/components/Dialog/types.d.ts +4 -5
  81. package/dist/components/Dialog/types.d.ts.map +1 -1
  82. package/dist/components/Dialog/useModal.d.ts +2 -2
  83. package/dist/components/Dialog/useModal.d.ts.map +1 -1
  84. package/dist/components/Divider/Divider.vue.d.ts +1 -1
  85. package/dist/components/Mentions/Mentions.vue.d.ts +1 -1
  86. package/dist/components/Message/Message.vue.d.ts.map +1 -1
  87. package/dist/components/Message/index.d.ts +1 -1
  88. package/dist/components/Message/index.d.ts.map +1 -1
  89. package/dist/components/Message/message.d.ts +4 -0
  90. package/dist/components/Message/message.d.ts.map +1 -1
  91. package/dist/components/Message/styles.css +7 -9
  92. package/dist/components/Message/types.d.ts +4 -4
  93. package/dist/components/Message/types.d.ts.map +1 -1
  94. package/dist/components/Page/PageFilters.vue.d.ts.map +1 -1
  95. package/dist/components/Page/PageStat.vue.d.ts +2 -2
  96. package/dist/components/Page/index.d.ts +1 -1
  97. package/dist/components/Page/index.d.ts.map +1 -1
  98. package/dist/components/Page/styles.css +2 -2
  99. package/dist/components/Page/types.d.ts +2 -2
  100. package/dist/components/Page/types.d.ts.map +1 -1
  101. package/dist/components/ProgressBar/ProgressBar.vue.d.ts.map +1 -1
  102. package/dist/components/ProgressBar/styles.css +1 -1
  103. package/dist/components/ProgressBar/types.d.ts +2 -7
  104. package/dist/components/ProgressBar/types.d.ts.map +1 -1
  105. package/dist/components/QRCode/QRCode.vue.d.ts.map +1 -1
  106. package/dist/components/Select/Select.vue.d.ts +1 -1
  107. package/dist/components/SplitButton/SplitButton.vue.d.ts +0 -1
  108. package/dist/components/SplitButton/SplitButton.vue.d.ts.map +1 -1
  109. package/dist/components/SplitButton/types.d.ts +3 -3
  110. package/dist/components/SplitButton/types.d.ts.map +1 -1
  111. package/dist/components/Status/Status.vue.d.ts +2 -2
  112. package/dist/components/Status/Status.vue.d.ts.map +1 -1
  113. package/dist/components/Status/index.d.ts +1 -1
  114. package/dist/components/Status/index.d.ts.map +1 -1
  115. package/dist/components/Status/styles.css +0 -1
  116. package/dist/components/Status/types.d.ts +4 -5
  117. package/dist/components/Status/types.d.ts.map +1 -1
  118. package/dist/components/Table/Table.vue.d.ts +4 -4
  119. package/dist/components/Table/Table.vue.d.ts.map +1 -1
  120. package/dist/components/Table/render/TableThead.vue.d.ts +2 -0
  121. package/dist/components/Table/render/TableThead.vue.d.ts.map +1 -1
  122. package/dist/components/Table/state/internal.d.ts +1 -0
  123. package/dist/components/Table/state/internal.d.ts.map +1 -1
  124. package/dist/components/Table/styles.css +9 -0
  125. package/dist/components/Tag/Tag.vue.d.ts +3 -3
  126. package/dist/components/Tag/index.d.ts +1 -1
  127. package/dist/components/Tag/index.d.ts.map +1 -1
  128. package/dist/components/Tag/styles.css +0 -1
  129. package/dist/components/Tag/types.d.ts +4 -5
  130. package/dist/components/Tag/types.d.ts.map +1 -1
  131. package/dist/components/Timeline/Timeline.vue.d.ts.map +1 -1
  132. package/dist/components/Timeline/index.d.ts +1 -1
  133. package/dist/components/Timeline/index.d.ts.map +1 -1
  134. package/dist/components/Timeline/styles.css +2 -4
  135. package/dist/components/Timeline/types.d.ts +3 -3
  136. package/dist/components/Timeline/types.d.ts.map +1 -1
  137. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  138. package/dist/components/Toast/index.d.ts +1 -1
  139. package/dist/components/Toast/index.d.ts.map +1 -1
  140. package/dist/components/Toast/styles.css +1 -3
  141. package/dist/components/Toast/toast.d.ts +4 -0
  142. package/dist/components/Toast/toast.d.ts.map +1 -1
  143. package/dist/components/Toast/types.d.ts +5 -5
  144. package/dist/components/Toast/types.d.ts.map +1 -1
  145. package/dist/components/Toast/useNotification.d.ts +3 -2
  146. package/dist/components/Toast/useNotification.d.ts.map +1 -1
  147. package/dist/components/Tour/Tour.vue.d.ts.map +1 -1
  148. package/dist/{config-COgrsSV2.js → config-BEpyhJi3.js} +12 -5
  149. package/dist/config-provider/index.js +1 -1
  150. package/dist/config-provider/style.css +457 -775
  151. package/dist/confirm-dialog/index.js +62 -59
  152. package/dist/confirm-dialog/style.css +459 -778
  153. package/dist/confirm-popup/index.js +18 -15
  154. package/dist/confirm-popup/style.css +457 -775
  155. package/dist/context-menu/index.js +5 -5
  156. package/dist/data-view/index.js +3 -3
  157. package/dist/date-picker/index.js +1 -1
  158. package/dist/descriptions/index.js +1 -1
  159. package/dist/dialog/index.js +126 -116
  160. package/dist/dialog/style.css +459 -778
  161. package/dist/dock/index.js +2 -2
  162. package/dist/drawer/index.js +4 -4
  163. package/dist/dropdown/index.js +6 -6
  164. package/dist/empty/index.js +1 -1
  165. package/dist/fieldset/index.js +1 -1
  166. package/dist/file-upload/index.js +2 -2
  167. package/dist/flex/index.js +1 -1
  168. package/dist/form/index.js +2 -2
  169. package/dist/gallery/index.js +2 -2
  170. package/dist/icon/index.js +1 -1
  171. package/dist/{icon-COrt_N8A.js → icon-H8prbteT.js} +1 -1
  172. package/dist/image/index.js +2 -2
  173. package/dist/index.d.ts +12 -12
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +4478 -4380
  176. package/dist/input/index.js +1 -1
  177. package/dist/input-color/index.js +2 -2
  178. package/dist/input-number/index.js +3 -3
  179. package/dist/input-otp/index.js +2 -2
  180. package/dist/input-password/index.js +4 -4
  181. package/dist/input-tags/index.js +3 -3
  182. package/dist/layout/index.js +2 -2
  183. package/dist/list/index.js +4 -4
  184. package/dist/listbox/index.js +2 -2
  185. package/dist/loading/index.js +1 -1
  186. package/dist/locale-CZddM-tH.js +21 -0
  187. package/dist/mega-menu/index.js +5 -5
  188. package/dist/mentions/index.js +4 -4
  189. package/dist/menu/index.js +6 -6
  190. package/dist/menubar/index.js +5 -5
  191. package/dist/message/index.js +116 -117
  192. package/dist/message/style.css +7 -9
  193. package/dist/order-list/index.js +2 -2
  194. package/dist/page/index.js +9 -11
  195. package/dist/page/style.css +459 -777
  196. package/dist/pagination/index.js +1 -1
  197. package/dist/panel/index.js +3 -3
  198. package/dist/pick-list/index.js +2 -2
  199. package/dist/popover/index.js +1 -1
  200. package/dist/progress-bar/index.js +33 -34
  201. package/dist/progress-bar/style.css +1 -1
  202. package/dist/progress-spinner/index.js +1 -1
  203. package/dist/qr-code/index.js +4 -4
  204. package/dist/qr-code/style.css +457 -775
  205. package/dist/radio/index.js +1 -1
  206. package/dist/rating/index.js +3 -3
  207. package/dist/result/index.js +2 -2
  208. package/dist/scroll-top/index.js +3 -3
  209. package/dist/segmented/index.js +1 -1
  210. package/dist/select/index.js +1 -1
  211. package/dist/select-button/index.js +1 -1
  212. package/dist/shared/componentDefaults.d.ts +6 -0
  213. package/dist/shared/componentDefaults.d.ts.map +1 -1
  214. package/dist/shared/types.d.ts +7 -20
  215. package/dist/shared/types.d.ts.map +1 -1
  216. package/dist/sidebar/index.js +3 -3
  217. package/dist/slider/index.js +2 -2
  218. package/dist/space/index.js +1 -1
  219. package/dist/speed-dial/index.js +5 -5
  220. package/dist/split-button/index.js +9 -12
  221. package/dist/split-button/style.css +463 -781
  222. package/dist/splitter/index.js +1 -1
  223. package/dist/status/index.js +30 -31
  224. package/dist/status/style.css +0 -1
  225. package/dist/stepper/index.js +1 -1
  226. package/dist/styles.css +1 -1
  227. package/dist/switch/index.js +1 -1
  228. package/dist/table/index.js +1629 -1623
  229. package/dist/table/style.css +9 -0
  230. package/dist/tabs/index.js +2 -2
  231. package/dist/tag/index.js +52 -52
  232. package/dist/tag/style.css +0 -1
  233. package/dist/terminal/index.js +1 -1
  234. package/dist/textarea/index.js +1 -1
  235. package/dist/tiered-menu/index.js +4 -4
  236. package/dist/time-picker/index.js +1 -1
  237. package/dist/timeline/index.js +67 -72
  238. package/dist/timeline/style.css +2 -4
  239. package/dist/toast/index.js +135 -136
  240. package/dist/toast/style.css +458 -778
  241. package/dist/toggle-button/index.js +3 -3
  242. package/dist/tooltip/index.js +1 -1
  243. package/dist/tour/index.js +8 -9
  244. package/dist/tour/style.css +457 -775
  245. package/dist/tree/index.js +3 -3
  246. package/dist/tree-select/index.js +5 -5
  247. package/dist/{types-DGuu4Eg4.js → types-DBQfGctj.js} +1 -4
  248. package/dist/typography/index.js +3 -3
  249. package/dist/{useMotionTransition-S2rlviyZ.js → useMotionTransition-DqL_SEML.js} +1 -1
  250. package/package.json +1 -1
  251. package/dist/Button-TaJ0LKtP.js +0 -234
  252. package/dist/locale-Dnk0UIie.js +0 -21
@@ -1,4 +1,12 @@
1
1
  .m-button {
2
+ /* Geometry */
3
+ --m-button-radius: var(--m-radius-control);
4
+ --m-button-border-width: var(--m-border-width);
5
+ --m-button-gap: var(--m-space-2);
6
+ --m-button-font-weight: var(--m-font-weight);
7
+ --m-button-font-size: var(--m-control-font-medium);
8
+ --m-button-height: var(--m-control-height-medium);
9
+ --m-button-padding-x: var(--m-button-padding-x-medium);
2
10
  --m-button-padding-x-small: var(--m-control-padding-x-small);
3
11
  --m-button-padding-x-medium: calc(
4
12
  var(--m-control-padding-x-medium) + var(--m-space-1)
@@ -6,62 +14,117 @@
6
14
  --m-button-padding-x-large: calc(
7
15
  var(--m-control-padding-x-large) + var(--m-space-1)
8
16
  );
9
- --m-button-icon-stack-min-height: 3.25rem;
10
- --m-button-badge-min-width: 1.15rem;
11
- --m-button-spinner-size: 0.875rem;
17
+ --m-button-padding-x-round-extra: var(--m-space-2);
18
+
19
+ /* Icon / spinner */
12
20
  --m-button-icon-size: 1rem;
13
- --m-button-bg: var(--m-color-primary);
14
- --m-button-fg: var(--m-color-on-emphasis);
15
- --m-button-border: var(--m-color-primary);
16
- --m-button-hover-bg: var(--m-color-primary-hover);
17
- --m-button-hover-fg: var(--m-color-on-emphasis);
18
- --m-button-hover-border: var(--m-color-primary-hover);
19
- --m-button-active-bg: var(--m-color-primary-active);
21
+ --m-button-icon-size-small: 0.875rem;
22
+ --m-button-icon-size-large: 1.25rem;
23
+ --m-button-spinner-size: 0.875rem;
24
+ --m-button-spinner-border-width: 2px;
25
+ --m-button-cn-letter-spacing: 0.3em;
26
+
27
+ /* Soft fill opacities (theme-adaptive via surface mix) */
28
+ --m-button-fill-opacity: 10%;
29
+ --m-button-fill-opacity-hover: 16%;
30
+ --m-button-fill-opacity-active: 22%;
31
+ --m-button-fill-opacity-muted: 6%;
32
+ --m-button-fill-opacity-muted-hover: 10%;
33
+ --m-button-fill-opacity-muted-active: 14%;
34
+
35
+ /* Interaction */
36
+ --m-button-loading-opacity: 0.72;
37
+ --m-button-press-scale: 0.97;
38
+ --m-button-press-duration: 160ms;
39
+ --m-button-ripple-duration: 560ms;
40
+ --m-button-ripple-opacity-start: 0.42;
41
+ --m-button-ripple-opacity-mid: 0.22;
42
+ --m-button-ghost-hover-opacity: 80%;
43
+
44
+ /* Color axis defaults (overridden by --color-*) */
45
+ --m-button-color-base: var(--m-color-primary);
46
+ --m-button-color-hover: var(--m-color-primary-hover);
47
+ --m-button-color-active: var(--m-color-primary-active);
48
+ --m-button-color-light: color-mix(
49
+ in srgb,
50
+ var(--m-button-color-base) var(--m-button-fill-opacity),
51
+ var(--m-color-surface)
52
+ );
53
+ --m-button-color-light-hover: color-mix(
54
+ in srgb,
55
+ var(--m-button-color-base) var(--m-button-fill-opacity-hover),
56
+ var(--m-color-surface)
57
+ );
58
+ --m-button-color-light-active: color-mix(
59
+ in srgb,
60
+ var(--m-button-color-base) var(--m-button-fill-opacity-active),
61
+ var(--m-color-surface)
62
+ );
63
+ --m-button-on-color: var(--m-color-on-emphasis);
64
+
65
+ /* Variant surface vars */
66
+ --m-button-bg: var(--m-color-surface);
67
+ --m-button-fg: var(--m-color-text);
68
+ --m-button-border: var(--m-color-border);
69
+ --m-button-hover-bg: var(--m-button-bg);
70
+ --m-button-hover-fg: var(--m-button-fg);
71
+ --m-button-hover-border: var(--m-button-border);
72
+ --m-button-active-bg: var(--m-button-bg);
73
+ --m-button-border-style: solid;
74
+
75
+ --m-button-active-fg: var(--m-button-fg);
76
+ --m-button-active-border: var(--m-button-border);
77
+
20
78
  align-items: center;
21
79
  background: var(--m-button-bg);
22
- border: var(--m-border-width) solid var(--m-button-border);
23
- border-radius: var(--m-radius-control);
80
+ border: var(--m-button-border-width) var(--m-button-border-style)
81
+ var(--m-button-border);
82
+ border-radius: var(--m-button-radius);
24
83
  color: var(--m-button-fg);
25
84
  cursor: pointer;
26
85
  display: inline-flex;
27
86
  flex-direction: row;
28
87
  font-family: var(--m-font-sans);
29
- font-size: var(--m-control-font-medium);
30
- font-weight: 400;
31
- gap: var(--m-space-2);
88
+ font-size: var(--m-button-font-size);
89
+ font-weight: var(--m-button-font-weight);
90
+ gap: var(--m-button-gap);
32
91
  justify-content: center;
33
92
  line-height: 1;
34
- min-height: var(--m-control-height-medium);
35
- padding: 0 var(--m-button-padding-x-medium);
93
+ min-height: var(--m-button-height);
94
+ padding: 0 var(--m-button-padding-x);
36
95
  position: relative;
96
+ text-decoration: none;
97
+ touch-action: manipulation;
37
98
  transition:
38
99
  background-color var(--m-motion-fast) var(--m-motion-ease),
39
100
  border-color var(--m-motion-fast) var(--m-motion-ease),
40
101
  color var(--m-motion-fast) var(--m-motion-ease),
41
102
  box-shadow var(--m-motion-fast) var(--m-motion-ease),
42
103
  opacity var(--m-motion-fast) var(--m-motion-ease),
43
- transform 160ms var(--m-motion-ease);
104
+ transform var(--m-button-press-duration) var(--m-motion-ease);
105
+ user-select: none;
44
106
  vertical-align: middle;
45
107
  white-space: nowrap;
46
108
  }
47
109
 
48
110
  @media (hover: hover) and (pointer: fine) {
49
- .m-button:hover:not(:disabled) {
111
+ .m-button:hover:not(:disabled):not(.m-button--disabled) {
50
112
  background: var(--m-button-hover-bg);
51
113
  border-color: var(--m-button-hover-border);
52
114
  color: var(--m-button-hover-fg);
53
115
  }
54
116
  }
55
117
 
56
- .m-button:active:not(:disabled) {
118
+ .m-button:active:not(:disabled):not(.m-button--disabled):not(.m-button--loading) {
57
119
  background: var(--m-button-active-bg);
120
+ border-color: var(--m-button-active-border);
121
+ color: var(--m-button-active-fg);
58
122
  }
59
123
 
60
- .m-button--press:active:not(:disabled) {
61
- transform: scale(0.97);
124
+ .m-button--press:active:not(:disabled):not(.m-button--disabled) {
125
+ transform: scale(var(--m-button-press-scale));
62
126
  }
63
127
 
64
- /* Soft glow focus, not outline-offset ring */
65
128
  .m-button:focus {
66
129
  outline: none;
67
130
  }
@@ -71,804 +134,419 @@
71
134
  outline: none;
72
135
  }
73
136
 
74
- .m-button:disabled {
75
- background: color-mix(in srgb, var(--m-color-text) 4%, var(--m-color-surface));
137
+ .m-button:disabled,
138
+ .m-button--disabled {
139
+ background: var(--m-color-bg-disabled);
76
140
  border-color: var(--m-color-border);
77
- color: color-mix(in srgb, var(--m-color-text) 35%, var(--m-color-surface));
141
+ color: var(--m-color-text-disabled);
78
142
  cursor: not-allowed;
79
143
  opacity: 1;
80
144
  }
81
145
 
82
- .m-button--text:disabled,
83
- .m-button--link:disabled,
146
+ .m-button--variant-text:disabled,
147
+ .m-button--variant-link:disabled,
148
+ .m-button--variant-text.m-button--disabled,
149
+ .m-button--variant-link.m-button--disabled,
84
150
  .m-button--ghost:disabled,
85
- .m-button--quaternary:disabled {
151
+ .m-button--ghost.m-button--disabled {
86
152
  background: transparent;
87
153
  border-color: transparent;
88
154
  }
89
155
 
90
- .m-button--primary {
91
- --m-button-bg: var(--m-color-primary);
92
- --m-button-fg: var(--m-color-on-emphasis);
93
- --m-button-border: var(--m-color-primary);
94
- --m-button-hover-bg: var(--m-color-primary-hover);
95
- --m-button-hover-fg: var(--m-color-on-emphasis);
96
- --m-button-hover-border: var(--m-color-primary-hover);
97
- --m-button-active-bg: var(--m-color-primary-active);
98
- }
99
-
100
- .m-button--secondary {
101
- --m-button-bg: var(--m-color-surface);
102
- --m-button-fg: var(--m-color-text);
103
- --m-button-border: var(--m-color-border);
104
- --m-button-hover-bg: var(--m-color-surface);
105
- --m-button-hover-fg: var(--m-color-primary-hover);
106
- --m-button-hover-border: var(--m-color-primary-hover);
107
- --m-button-active-bg: var(--m-color-surface);
108
- }
156
+ /* ---------- Color axis ---------- */
109
157
 
110
- .m-button--success {
111
- --m-button-bg: var(--m-color-success);
112
- --m-button-fg: var(--m-color-on-emphasis);
113
- --m-button-border: var(--m-color-success);
114
- --m-button-hover-bg: color-mix(
158
+ .m-button--color-default {
159
+ --m-button-color-base: var(--m-color-text);
160
+ --m-button-color-hover: var(--m-color-primary-hover);
161
+ --m-button-color-active: var(--m-color-primary-active);
162
+ --m-button-color-light: color-mix(
115
163
  in srgb,
116
- var(--m-color-success) 85%,
117
- black
164
+ var(--m-color-text) var(--m-button-fill-opacity-muted),
165
+ var(--m-color-surface)
118
166
  );
119
- --m-button-hover-fg: var(--m-color-on-emphasis);
120
- --m-button-hover-border: color-mix(
167
+ --m-button-color-light-hover: color-mix(
121
168
  in srgb,
122
- var(--m-color-success) 85%,
123
- black
169
+ var(--m-color-text) var(--m-button-fill-opacity-muted-hover),
170
+ var(--m-color-surface)
124
171
  );
125
- --m-button-active-bg: color-mix(
172
+ --m-button-color-light-active: color-mix(
126
173
  in srgb,
127
- var(--m-color-success) 75%,
128
- black
174
+ var(--m-color-text) var(--m-button-fill-opacity-muted-active),
175
+ var(--m-color-surface)
129
176
  );
130
- }
131
-
132
- .m-button--info {
133
- --m-button-bg: var(--m-color-info);
134
- --m-button-fg: var(--m-color-on-emphasis);
135
- --m-button-border: var(--m-color-info);
136
- --m-button-hover-bg: color-mix(in srgb, var(--m-color-info) 85%, black);
137
- --m-button-hover-fg: var(--m-color-on-emphasis);
138
- --m-button-hover-border: color-mix(
177
+ --m-button-on-color: var(--m-color-contrast-fg);
178
+ --m-button-solid-bg: var(--m-color-contrast);
179
+ --m-button-solid-bg-hover: var(--m-color-contrast-hover);
180
+ --m-button-solid-bg-active: var(--m-color-contrast-active);
181
+ --m-button-outlined-border: var(--m-color-border);
182
+ --m-button-outlined-fg: var(--m-color-text);
183
+ --m-button-outlined-hover-border: var(--m-color-primary-hover);
184
+ --m-button-outlined-hover-fg: var(--m-color-primary-hover);
185
+ --m-button-outlined-bg: var(--m-color-surface);
186
+ /* Match ant default outlined/dashed: keep surface bg, only shift border/text. */
187
+ --m-button-outlined-hover-bg: var(--m-color-surface);
188
+ --m-button-outlined-active-bg: var(--m-color-surface);
189
+ }
190
+
191
+ .m-button--color-primary {
192
+ --m-button-color-base: var(--m-color-primary);
193
+ --m-button-color-hover: var(--m-color-primary-hover);
194
+ --m-button-color-active: var(--m-color-primary-active);
195
+ --m-button-solid-bg: var(--m-color-primary);
196
+ --m-button-solid-bg-hover: var(--m-color-primary-hover);
197
+ --m-button-solid-bg-active: var(--m-color-primary-active);
198
+ --m-button-outlined-border: var(--m-color-primary);
199
+ --m-button-outlined-fg: var(--m-color-primary);
200
+ --m-button-outlined-hover-border: var(--m-color-primary-hover);
201
+ --m-button-outlined-hover-fg: var(--m-color-primary-hover);
202
+ --m-button-outlined-bg: var(--m-color-surface);
203
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
204
+ }
205
+
206
+ .m-button--color-danger {
207
+ --m-button-color-base: var(--m-color-danger);
208
+ --m-button-color-hover: color-mix(
139
209
  in srgb,
140
- var(--m-color-info) 85%,
141
- black
142
- );
143
- --m-button-active-bg: color-mix(in srgb, var(--m-color-info) 75%, black);
144
- }
210
+ var(--m-color-danger) 88%,
211
+ var(--m-color-text)
212
+ );
213
+ --m-button-color-active: color-mix(
214
+ in srgb,
215
+ var(--m-color-danger) 76%,
216
+ var(--m-color-text)
217
+ );
218
+ --m-button-solid-bg: var(--m-color-danger);
219
+ --m-button-solid-bg-hover: var(--m-button-color-hover);
220
+ --m-button-solid-bg-active: var(--m-button-color-active);
221
+ --m-button-outlined-border: var(--m-color-danger);
222
+ --m-button-outlined-fg: var(--m-color-danger);
223
+ --m-button-outlined-hover-border: var(--m-button-color-hover);
224
+ --m-button-outlined-hover-fg: var(--m-button-color-hover);
225
+ --m-button-outlined-bg: var(--m-color-surface);
226
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
227
+ }
228
+
229
+ .m-button--color-success {
230
+ --m-button-color-base: var(--m-color-success);
231
+ --m-button-color-hover: color-mix(
232
+ in srgb,
233
+ var(--m-color-success) 88%,
234
+ var(--m-color-text)
235
+ );
236
+ --m-button-color-active: color-mix(
237
+ in srgb,
238
+ var(--m-color-success) 76%,
239
+ var(--m-color-text)
240
+ );
241
+ --m-button-solid-bg: var(--m-color-success);
242
+ --m-button-solid-bg-hover: var(--m-button-color-hover);
243
+ --m-button-solid-bg-active: var(--m-button-color-active);
244
+ --m-button-outlined-border: var(--m-color-success);
245
+ --m-button-outlined-fg: var(--m-color-success);
246
+ --m-button-outlined-hover-border: var(--m-button-color-hover);
247
+ --m-button-outlined-hover-fg: var(--m-button-color-hover);
248
+ --m-button-outlined-bg: var(--m-color-surface);
249
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
250
+ }
251
+
252
+ .m-button--color-info {
253
+ --m-button-color-base: var(--m-color-info);
254
+ --m-button-color-hover: color-mix(
255
+ in srgb,
256
+ var(--m-color-info) 88%,
257
+ var(--m-color-text)
258
+ );
259
+ --m-button-color-active: color-mix(
260
+ in srgb,
261
+ var(--m-color-info) 76%,
262
+ var(--m-color-text)
263
+ );
264
+ --m-button-solid-bg: var(--m-color-info);
265
+ --m-button-solid-bg-hover: var(--m-button-color-hover);
266
+ --m-button-solid-bg-active: var(--m-button-color-active);
267
+ --m-button-outlined-border: var(--m-color-info);
268
+ --m-button-outlined-fg: var(--m-color-info);
269
+ --m-button-outlined-hover-border: var(--m-button-color-hover);
270
+ --m-button-outlined-hover-fg: var(--m-button-color-hover);
271
+ --m-button-outlined-bg: var(--m-color-surface);
272
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
273
+ }
274
+
275
+ .m-button--color-warning {
276
+ --m-button-color-base: var(--m-color-warn);
277
+ --m-button-color-hover: color-mix(
278
+ in srgb,
279
+ var(--m-color-warn) 88%,
280
+ var(--m-color-text)
281
+ );
282
+ --m-button-color-active: color-mix(
283
+ in srgb,
284
+ var(--m-color-warn) 76%,
285
+ var(--m-color-text)
286
+ );
287
+ --m-button-solid-bg: var(--m-color-warn);
288
+ --m-button-solid-bg-hover: var(--m-button-color-hover);
289
+ --m-button-solid-bg-active: var(--m-button-color-active);
290
+ --m-button-outlined-border: var(--m-color-warn);
291
+ --m-button-outlined-fg: var(--m-color-warn);
292
+ --m-button-outlined-hover-border: var(--m-button-color-hover);
293
+ --m-button-outlined-hover-fg: var(--m-button-color-hover);
294
+ --m-button-outlined-bg: var(--m-color-surface);
295
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
296
+ }
145
297
 
146
- .m-button--warn {
147
- --m-button-bg: var(--m-color-warn);
148
- --m-button-fg: var(--m-color-on-emphasis);
149
- --m-button-border: var(--m-color-warn);
150
- --m-button-hover-bg: color-mix(in srgb, var(--m-color-warn) 85%, black);
151
- --m-button-hover-fg: var(--m-color-on-emphasis);
152
- --m-button-hover-border: color-mix(
298
+ .m-button--color-help {
299
+ --m-button-color-base: var(--m-color-help);
300
+ --m-button-color-hover: color-mix(
153
301
  in srgb,
154
- var(--m-color-warn) 85%,
155
- black
302
+ var(--m-color-help) 88%,
303
+ var(--m-color-text)
156
304
  );
157
- --m-button-active-bg: color-mix(in srgb, var(--m-color-warn) 75%, black);
158
- }
159
-
160
- .m-button--help {
161
- --m-button-bg: var(--m-color-help);
162
- --m-button-fg: var(--m-color-on-emphasis);
163
- --m-button-border: var(--m-color-help);
164
- --m-button-hover-bg: color-mix(in srgb, var(--m-color-help) 85%, black);
165
- --m-button-hover-fg: var(--m-color-on-emphasis);
166
- --m-button-hover-border: color-mix(
305
+ --m-button-color-active: color-mix(
167
306
  in srgb,
168
- var(--m-color-help) 85%,
169
- black
307
+ var(--m-color-help) 76%,
308
+ var(--m-color-text)
170
309
  );
171
- --m-button-active-bg: color-mix(in srgb, var(--m-color-help) 75%, black);
310
+ --m-button-solid-bg: var(--m-color-help);
311
+ --m-button-solid-bg-hover: var(--m-button-color-hover);
312
+ --m-button-solid-bg-active: var(--m-button-color-active);
313
+ --m-button-outlined-border: var(--m-color-help);
314
+ --m-button-outlined-fg: var(--m-color-help);
315
+ --m-button-outlined-hover-border: var(--m-button-color-hover);
316
+ --m-button-outlined-hover-fg: var(--m-button-color-hover);
317
+ --m-button-outlined-bg: var(--m-color-surface);
318
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
319
+ }
320
+
321
+ .m-button--color-contrast {
322
+ --m-button-color-base: var(--m-color-contrast);
323
+ --m-button-color-hover: var(--m-color-contrast-hover);
324
+ --m-button-color-active: var(--m-color-contrast-active);
325
+ --m-button-on-color: var(--m-color-contrast-fg);
326
+ --m-button-solid-bg: var(--m-color-contrast);
327
+ --m-button-solid-bg-hover: var(--m-color-contrast-hover);
328
+ --m-button-solid-bg-active: var(--m-color-contrast-active);
329
+ --m-button-outlined-border: var(--m-color-contrast);
330
+ --m-button-outlined-fg: var(--m-color-contrast);
331
+ --m-button-outlined-hover-border: var(--m-color-contrast-hover);
332
+ --m-button-outlined-hover-fg: var(--m-color-contrast-hover);
333
+ --m-button-outlined-bg: var(--m-color-surface);
334
+ --m-button-outlined-hover-bg: var(--m-button-color-light);
172
335
  }
173
-
174
- .m-button--danger {
175
- --m-button-bg: var(--m-color-danger);
176
- --m-button-fg: var(--m-color-on-emphasis);
177
- --m-button-border: var(--m-color-danger);
178
- --m-button-hover-bg: color-mix(in srgb, var(--m-color-danger) 85%, black);
179
- --m-button-hover-fg: var(--m-color-on-emphasis);
180
- --m-button-hover-border: color-mix(
181
- in srgb,
182
- var(--m-color-danger) 85%,
183
- black
336
+
337
+ .m-button--color-link {
338
+ --m-button-color-base: var(--m-color-primary);
339
+ --m-button-color-hover: var(--m-color-primary-hover);
340
+ --m-button-color-active: var(--m-color-primary-active);
341
+ }
342
+
343
+ /* ---------- Variant axis ---------- */
344
+
345
+ .m-button--variant-solid {
346
+ --m-button-bg: var(--m-button-solid-bg, var(--m-button-color-base));
347
+ --m-button-fg: var(--m-button-on-color);
348
+ --m-button-border: transparent;
349
+ --m-button-hover-bg: var(
350
+ --m-button-solid-bg-hover,
351
+ var(--m-button-color-hover)
184
352
  );
185
- --m-button-active-bg: color-mix(
186
- in srgb,
187
- var(--m-color-danger) 75%,
188
- black
353
+ --m-button-hover-fg: var(--m-button-on-color);
354
+ --m-button-hover-border: transparent;
355
+ --m-button-active-bg: var(
356
+ --m-button-solid-bg-active,
357
+ var(--m-button-color-active)
189
358
  );
359
+ --m-button-active-fg: var(--m-button-on-color);
360
+ --m-button-active-border: transparent;
190
361
  }
191
362
 
192
- .m-button--contrast {
193
- --m-button-bg: var(--m-color-contrast);
194
- --m-button-fg: var(--m-color-contrast-fg);
195
- --m-button-border: var(--m-color-contrast);
196
- --m-button-hover-bg: var(--m-color-contrast-hover);
197
- --m-button-hover-fg: var(--m-color-contrast-fg);
198
- --m-button-hover-border: var(--m-color-contrast-hover);
199
- --m-button-active-bg: var(--m-color-contrast-active);
200
- }
201
-
202
- .m-button--outlined {
203
- --m-button-bg: transparent;
204
- --m-button-fg: var(--m-button-border);
205
- --m-button-hover-bg: color-mix(
206
- in srgb,
207
- var(--m-button-border) 10%,
208
- transparent
363
+ .m-button--variant-outlined,
364
+ .m-button--variant-dashed {
365
+ --m-button-bg: var(--m-button-outlined-bg, var(--m-color-surface));
366
+ --m-button-fg: var(--m-button-outlined-fg, var(--m-button-color-base));
367
+ --m-button-border: var(
368
+ --m-button-outlined-border,
369
+ var(--m-button-color-base)
209
370
  );
210
- --m-button-hover-fg: var(--m-button-border);
211
- --m-button-hover-border: var(--m-button-border);
212
- --m-button-active-bg: color-mix(
213
- in srgb,
214
- var(--m-button-border) 16%,
215
- transparent
371
+ --m-button-hover-bg: var(
372
+ --m-button-outlined-hover-bg,
373
+ var(--m-button-color-light)
216
374
  );
217
- }
218
-
219
- /* Idle matches outlined hover; hover/active deepen the tint. */
220
- .m-button--plain {
221
- --m-button-bg: color-mix(
222
- in srgb,
223
- var(--m-button-border) 10%,
224
- transparent
375
+ --m-button-hover-fg: var(
376
+ --m-button-outlined-hover-fg,
377
+ var(--m-button-color-hover)
225
378
  );
226
- --m-button-fg: var(--m-button-border);
227
- --m-button-hover-bg: color-mix(
228
- in srgb,
229
- var(--m-button-border) 16%,
230
- transparent
379
+ --m-button-hover-border: var(
380
+ --m-button-outlined-hover-border,
381
+ var(--m-button-color-hover)
231
382
  );
232
- --m-button-hover-fg: var(--m-button-border);
233
- --m-button-hover-border: var(--m-button-border);
234
- --m-button-active-bg: color-mix(
235
- in srgb,
236
- var(--m-button-border) 22%,
237
- transparent
383
+ --m-button-active-bg: var(
384
+ --m-button-outlined-active-bg,
385
+ var(--m-button-color-light-active, var(--m-button-color-light))
386
+ );
387
+ --m-button-active-fg: var(
388
+ --m-button-color-active,
389
+ var(--m-button-hover-fg)
390
+ );
391
+ --m-button-active-border: var(
392
+ --m-button-color-active,
393
+ var(--m-button-hover-border)
238
394
  );
239
395
  }
240
396
 
241
- .m-button--secondary.m-button--outlined,
242
- .m-button--secondary.m-button--plain {
243
- --m-button-border: var(--m-color-border);
244
- --m-button-fg: var(--m-color-text);
245
- --m-button-hover-fg: var(--m-color-text);
397
+ .m-button--variant-dashed {
398
+ --m-button-border-style: dashed;
246
399
  }
247
400
 
248
- .m-button--text,
249
- .m-button--link {
401
+ .m-button--variant-filled {
402
+ --m-button-bg: var(--m-button-color-light);
403
+ --m-button-fg: var(--m-button-color-base);
404
+ --m-button-border: transparent;
405
+ --m-button-hover-bg: var(--m-button-color-light-hover);
406
+ --m-button-hover-fg: var(--m-button-color-base);
407
+ --m-button-hover-border: transparent;
408
+ --m-button-active-bg: var(--m-button-color-light-active);
409
+ --m-button-active-fg: var(--m-button-color-base);
410
+ --m-button-active-border: transparent;
411
+ }
412
+
413
+ .m-button--variant-text,
414
+ .m-button--variant-link {
250
415
  --m-button-bg: transparent;
416
+ --m-button-fg: var(--m-button-color-base);
251
417
  --m-button-border: transparent;
252
- --m-button-fg: var(--m-color-primary);
253
- --m-button-hover-fg: var(--m-color-primary);
418
+ --m-button-hover-fg: var(--m-button-color-hover);
254
419
  --m-button-hover-border: transparent;
420
+ --m-button-active-bg: transparent;
421
+ --m-button-active-fg: var(--m-button-color-active, var(--m-button-color-hover));
422
+ --m-button-active-border: transparent;
255
423
  }
256
424
 
257
- .m-button--text {
258
- --m-button-hover-bg: color-mix(
259
- in srgb,
260
- var(--m-color-primary) 10%,
261
- transparent
262
- );
263
- --m-button-active-bg: color-mix(
264
- in srgb,
265
- var(--m-color-primary) 16%,
266
- transparent
267
- );
425
+ .m-button--variant-text {
426
+ --m-button-hover-bg: var(--m-button-color-light);
427
+ --m-button-active-bg: var(--m-button-color-light-active);
268
428
  }
269
429
 
270
- .m-button--link {
271
- --m-button-bg: transparent;
430
+ .m-button--variant-link {
272
431
  --m-button-hover-bg: transparent;
273
- --m-button-active-bg: transparent;
432
+ --m-button-height: auto;
274
433
  height: auto;
275
434
  min-height: 0;
276
435
  padding: 0;
277
436
  }
278
437
 
279
- .m-button--link.m-button--link-underline:hover:not(:disabled) {
438
+ .m-button--variant-link:hover:not(:disabled):not(.m-button--disabled) {
280
439
  text-decoration: underline;
281
440
  }
282
441
 
283
- .m-button--link:not(.m-button--link-underline):hover:not(:disabled) {
284
- opacity: 0.8;
285
- }
286
-
287
- .m-button--secondary.m-button--text {
288
- --m-button-fg: var(--m-color-text-muted);
289
- --m-button-hover-bg: color-mix(
290
- in srgb,
291
- var(--m-color-text-muted) 12%,
292
- transparent
293
- );
294
- --m-button-hover-fg: var(--m-color-text);
295
- }
296
-
297
- .m-button--secondary.m-button--link {
298
- --m-button-fg: var(--m-color-text-muted);
299
- --m-button-hover-fg: var(--m-color-text);
300
- }
301
-
302
- .m-button--success.m-button--text,
303
- .m-button--success.m-button--outlined {
304
- --m-button-fg: var(--m-color-success);
305
- --m-button-border: var(--m-color-success);
306
- --m-button-hover-bg: color-mix(
307
- in srgb,
308
- var(--m-color-success) 10%,
309
- transparent
310
- );
311
- --m-button-hover-fg: var(--m-color-success);
312
- --m-button-hover-border: var(--m-color-success);
313
- }
314
-
315
- .m-button--success.m-button--link {
316
- --m-button-fg: var(--m-color-success);
317
- --m-button-hover-fg: var(--m-color-success);
318
- }
319
-
320
- .m-button--info.m-button--text,
321
- .m-button--info.m-button--outlined {
322
- --m-button-fg: var(--m-color-info);
323
- --m-button-border: var(--m-color-info);
324
- --m-button-hover-bg: color-mix(
325
- in srgb,
326
- var(--m-color-info) 10%,
327
- transparent
328
- );
329
- --m-button-hover-fg: var(--m-color-info);
330
- --m-button-hover-border: var(--m-color-info);
331
- }
332
-
333
- .m-button--info.m-button--link {
334
- --m-button-fg: var(--m-color-info);
335
- --m-button-hover-fg: var(--m-color-info);
336
- }
337
-
338
- .m-button--warn.m-button--text,
339
- .m-button--warn.m-button--outlined {
340
- --m-button-fg: var(--m-color-warn);
341
- --m-button-border: var(--m-color-warn);
342
- --m-button-hover-bg: color-mix(
343
- in srgb,
344
- var(--m-color-warn) 10%,
345
- transparent
346
- );
347
- --m-button-hover-fg: var(--m-color-warn);
348
- --m-button-hover-border: var(--m-color-warn);
349
- }
350
-
351
- .m-button--warn.m-button--link {
352
- --m-button-fg: var(--m-color-warn);
353
- --m-button-hover-fg: var(--m-color-warn);
354
- }
355
-
356
- .m-button--help.m-button--text,
357
- .m-button--help.m-button--outlined {
358
- --m-button-fg: var(--m-color-help);
359
- --m-button-border: var(--m-color-help);
360
- --m-button-hover-bg: color-mix(
361
- in srgb,
362
- var(--m-color-help) 10%,
363
- transparent
364
- );
365
- --m-button-hover-fg: var(--m-color-help);
366
- --m-button-hover-border: var(--m-color-help);
367
- }
368
-
369
- .m-button--help.m-button--link {
370
- --m-button-fg: var(--m-color-help);
371
- --m-button-hover-fg: var(--m-color-help);
372
- }
373
-
374
- .m-button--danger.m-button--text,
375
- .m-button--danger.m-button--outlined {
376
- --m-button-fg: var(--m-color-danger);
377
- --m-button-border: var(--m-color-danger);
378
- --m-button-hover-bg: color-mix(
379
- in srgb,
380
- var(--m-color-danger) 10%,
381
- transparent
382
- );
383
- --m-button-hover-fg: var(--m-color-danger);
384
- --m-button-hover-border: var(--m-color-danger);
442
+ .m-button--color-default.m-button--variant-text {
443
+ --m-button-color-base: var(--m-color-text);
444
+ --m-button-color-hover: var(--m-color-text);
445
+ --m-button-hover-bg: var(--m-button-color-light);
446
+ --m-button-active-bg: var(--m-button-color-light-hover);
385
447
  }
386
448
 
387
- .m-button--danger.m-button--link {
388
- --m-button-fg: var(--m-color-danger);
389
- --m-button-hover-fg: var(--m-color-danger);
390
- }
391
-
392
- .m-button--contrast.m-button--text,
393
- .m-button--contrast.m-button--outlined {
394
- --m-button-fg: var(--m-color-contrast);
395
- --m-button-border: var(--m-color-contrast);
396
- --m-button-hover-bg: color-mix(
397
- in srgb,
398
- var(--m-color-contrast) 10%,
399
- transparent
400
- );
401
- --m-button-hover-fg: var(--m-color-contrast);
402
- --m-button-hover-border: var(--m-color-contrast);
403
- }
404
-
405
- .m-button--contrast.m-button--link {
406
- --m-button-fg: var(--m-color-contrast);
407
- --m-button-hover-fg: var(--m-color-contrast);
408
- }
409
-
410
- .m-button--plain.m-button--text,
411
- .m-button--plain.m-button--outlined {
412
- --m-button-bg: transparent;
413
- --m-button-fg: var(--m-color-text-muted);
414
- --m-button-border: var(--m-color-border);
415
- --m-button-hover-bg: color-mix(
416
- in srgb,
417
- var(--m-color-text-muted) 12%,
418
- transparent
419
- );
420
- --m-button-hover-fg: var(--m-color-text);
421
- --m-button-hover-border: var(--m-color-border);
422
- --m-button-active-bg: color-mix(
423
- in srgb,
424
- var(--m-color-text-muted) 18%,
425
- transparent
426
- );
449
+ .m-button--color-default.m-button--variant-filled {
450
+ --m-button-color-base: var(--m-color-text);
427
451
  }
428
452
 
429
- .m-button--plain.m-button--link {
430
- --m-button-fg: var(--m-color-text-muted);
431
- --m-button-hover-fg: var(--m-color-text);
453
+ .m-button--color-link.m-button--variant-link {
454
+ --m-button-color-base: var(--m-color-primary);
455
+ --m-button-color-hover: var(--m-color-primary-hover);
432
456
  }
433
457
 
458
+ /* Ghost: transparent fill on bordered variants */
434
459
  .m-button--ghost {
435
- --m-button-bg: color-mix(
436
- in srgb,
437
- var(--m-color-primary) 10%,
438
- transparent
439
- );
440
- --m-button-border: transparent;
441
- --m-button-fg: var(--m-color-primary);
442
- --m-button-hover-bg: color-mix(
443
- in srgb,
444
- var(--m-color-primary) 16%,
445
- transparent
446
- );
447
- --m-button-hover-fg: var(--m-color-primary);
448
- --m-button-hover-border: transparent;
449
- --m-button-active-bg: color-mix(
450
- in srgb,
451
- var(--m-color-primary) 22%,
452
- transparent
453
- );
454
- }
455
-
456
- .m-button--secondary.m-button--ghost {
457
- --m-button-bg: color-mix(
458
- in srgb,
459
- var(--m-color-text-muted) 12%,
460
- transparent
461
- );
462
- --m-button-fg: var(--m-color-text);
463
- --m-button-hover-bg: color-mix(
464
- in srgb,
465
- var(--m-color-text-muted) 18%,
466
- transparent
467
- );
468
- --m-button-hover-fg: var(--m-color-text);
469
- --m-button-active-bg: color-mix(
470
- in srgb,
471
- var(--m-color-text-muted) 24%,
472
- transparent
473
- );
474
- }
475
-
476
- .m-button--success.m-button--ghost {
477
- --m-button-bg: color-mix(
478
- in srgb,
479
- var(--m-color-success) 10%,
480
- transparent
481
- );
482
- --m-button-fg: var(--m-color-success);
483
- --m-button-hover-bg: color-mix(
484
- in srgb,
485
- var(--m-color-success) 16%,
486
- transparent
487
- );
488
- --m-button-hover-fg: var(--m-color-success);
489
- --m-button-active-bg: color-mix(
490
- in srgb,
491
- var(--m-color-success) 22%,
492
- transparent
493
- );
494
- }
495
-
496
- .m-button--info.m-button--ghost {
497
- --m-button-bg: color-mix(
498
- in srgb,
499
- var(--m-color-info) 10%,
500
- transparent
501
- );
502
- --m-button-fg: var(--m-color-info);
503
- --m-button-hover-bg: color-mix(
504
- in srgb,
505
- var(--m-color-info) 16%,
506
- transparent
507
- );
508
- --m-button-hover-fg: var(--m-color-info);
509
- --m-button-active-bg: color-mix(
510
- in srgb,
511
- var(--m-color-info) 22%,
512
- transparent
513
- );
514
- }
515
-
516
- .m-button--warn.m-button--ghost {
517
- --m-button-bg: color-mix(
518
- in srgb,
519
- var(--m-color-warn) 10%,
520
- transparent
521
- );
522
- --m-button-fg: var(--m-color-warn);
523
- --m-button-hover-bg: color-mix(
524
- in srgb,
525
- var(--m-color-warn) 16%,
526
- transparent
527
- );
528
- --m-button-hover-fg: var(--m-color-warn);
529
- --m-button-active-bg: color-mix(
530
- in srgb,
531
- var(--m-color-warn) 22%,
532
- transparent
533
- );
534
- }
535
-
536
- .m-button--help.m-button--ghost {
537
- --m-button-bg: color-mix(
538
- in srgb,
539
- var(--m-color-help) 10%,
540
- transparent
541
- );
542
- --m-button-fg: var(--m-color-help);
543
- --m-button-hover-bg: color-mix(
544
- in srgb,
545
- var(--m-color-help) 16%,
546
- transparent
547
- );
548
- --m-button-hover-fg: var(--m-color-help);
549
- --m-button-active-bg: color-mix(
550
- in srgb,
551
- var(--m-color-help) 22%,
552
- transparent
553
- );
554
- }
555
-
556
- .m-button--danger.m-button--ghost {
557
- --m-button-bg: color-mix(
558
- in srgb,
559
- var(--m-color-danger) 10%,
560
- transparent
561
- );
562
- --m-button-fg: var(--m-color-danger);
563
- --m-button-hover-bg: color-mix(
564
- in srgb,
565
- var(--m-color-danger) 16%,
566
- transparent
567
- );
568
- --m-button-hover-fg: var(--m-color-danger);
569
- --m-button-active-bg: color-mix(
570
- in srgb,
571
- var(--m-color-danger) 22%,
572
- transparent
573
- );
574
- }
575
-
576
- .m-button--contrast.m-button--ghost {
577
- --m-button-bg: color-mix(
578
- in srgb,
579
- var(--m-color-contrast) 10%,
580
- transparent
581
- );
582
- --m-button-fg: var(--m-color-contrast);
583
- --m-button-hover-bg: color-mix(
584
- in srgb,
585
- var(--m-color-contrast) 16%,
586
- transparent
587
- );
588
- --m-button-hover-fg: var(--m-color-contrast);
589
- --m-button-active-bg: color-mix(
590
- in srgb,
591
- var(--m-color-contrast) 22%,
592
- transparent
593
- );
594
- }
595
-
596
- .m-button--quaternary {
597
460
  --m-button-bg: transparent;
598
- --m-button-border: transparent;
599
- --m-button-fg: var(--m-color-text);
600
- --m-button-hover-bg: color-mix(
601
- in srgb,
602
- var(--m-color-text-muted) 10%,
603
- transparent
604
- );
605
- --m-button-hover-fg: var(--m-color-text);
606
- --m-button-hover-border: transparent;
607
- --m-button-active-bg: color-mix(
608
- in srgb,
609
- var(--m-color-text-muted) 16%,
610
- transparent
611
- );
612
- }
613
-
614
- .m-button--custom {
615
- --m-button-bg: var(--m-button-color);
616
- --m-button-fg: var(--m-color-on-emphasis);
617
- --m-button-border: var(--m-button-color);
618
- --m-button-hover-bg: color-mix(in srgb, var(--m-button-color) 85%, black);
619
- --m-button-hover-fg: var(--m-color-on-emphasis);
620
- --m-button-hover-border: color-mix(
621
- in srgb,
622
- var(--m-button-color) 85%,
623
- black
624
- );
625
- --m-button-active-bg: color-mix(
626
- in srgb,
627
- var(--m-button-color) 75%,
628
- black
629
- );
461
+ --m-button-hover-bg: transparent;
462
+ --m-button-active-bg: transparent;
630
463
  }
631
464
 
632
- .m-button--custom.m-button--outlined {
633
- --m-button-bg: transparent;
634
- --m-button-fg: var(--m-button-color);
635
- --m-button-border: var(--m-button-color);
636
- --m-button-hover-bg: color-mix(
637
- in srgb,
638
- var(--m-button-color) 12%,
639
- transparent
640
- );
641
- --m-button-hover-fg: var(--m-button-color);
642
- --m-button-hover-border: var(--m-button-color);
465
+ .m-button--ghost.m-button--variant-solid,
466
+ .m-button--ghost.m-button--variant-outlined,
467
+ .m-button--ghost.m-button--variant-dashed {
468
+ --m-button-fg: var(--m-button-color-base);
469
+ --m-button-border: var(--m-button-color-base);
470
+ --m-button-hover-fg: var(--m-button-color-hover);
471
+ --m-button-hover-border: var(--m-button-color-hover);
472
+ --m-button-active-fg: var(--m-button-color-active, var(--m-button-color-hover));
473
+ --m-button-active-border: var(--m-button-color-active, var(--m-button-color-hover));
643
474
  }
644
-
645
- .m-button--custom.m-button--ghost {
646
- --m-button-bg: color-mix(
647
- in srgb,
648
- var(--m-button-color) 10%,
649
- transparent
650
- );
651
- --m-button-fg: var(--m-button-color);
652
- --m-button-border: transparent;
653
- --m-button-hover-bg: color-mix(
654
- in srgb,
655
- var(--m-button-color) 16%,
656
- transparent
657
- );
658
- --m-button-hover-fg: var(--m-button-color);
659
- --m-button-hover-border: transparent;
660
- --m-button-active-bg: color-mix(
475
+ .m-button--ghost.m-button--color-default {
476
+ --m-button-color-base: var(--m-color-on-emphasis);
477
+ --m-button-color-hover: color-mix(
661
478
  in srgb,
662
- var(--m-button-color) 22%,
479
+ var(--m-color-on-emphasis) var(--m-button-ghost-hover-opacity),
663
480
  transparent
664
481
  );
482
+ --m-button-fg: var(--m-color-on-emphasis);
483
+ --m-button-border: var(--m-color-on-emphasis);
484
+ --m-button-hover-fg: var(--m-button-color-hover);
485
+ --m-button-hover-border: var(--m-button-color-hover);
665
486
  }
666
487
 
667
- .m-button--custom.m-button--text,
668
- .m-button--custom.m-button--quaternary {
669
- --m-button-bg: transparent;
670
- --m-button-fg: var(--m-button-color);
671
- --m-button-border: transparent;
672
- --m-button-hover-bg: color-mix(
673
- in srgb,
674
- var(--m-button-color) 12%,
675
- transparent
676
- );
677
- --m-button-hover-fg: var(--m-button-color);
678
- --m-button-hover-border: transparent;
679
- }
680
-
681
- .m-button--custom.m-button--plain {
682
- --m-button-bg: color-mix(
683
- in srgb,
684
- var(--m-button-color) 10%,
685
- transparent
686
- );
687
- --m-button-fg: var(--m-button-color);
688
- --m-button-border: var(--m-button-color);
689
- --m-button-hover-bg: color-mix(
690
- in srgb,
691
- var(--m-button-color) 16%,
692
- transparent
693
- );
694
- --m-button-hover-fg: var(--m-button-color);
695
- --m-button-hover-border: var(--m-button-color);
696
- --m-button-active-bg: color-mix(
697
- in srgb,
698
- var(--m-button-color) 22%,
699
- transparent
700
- );
701
- }
488
+ /* ---------- Size / shape / layout ---------- */
702
489
 
703
- .m-button--custom.m-button--link {
704
- --m-button-bg: transparent;
705
- --m-button-fg: var(--m-button-color);
706
- --m-button-border: transparent;
707
- --m-button-hover-bg: transparent;
708
- --m-button-hover-fg: var(--m-button-color);
709
- --m-button-hover-border: transparent;
710
- --m-button-active-bg: transparent;
490
+ .m-button--small {
491
+ --m-button-icon-size: var(--m-button-icon-size-small);
492
+ --m-button-font-size: var(--m-control-font-small);
493
+ --m-button-height: var(--m-control-height-small);
494
+ --m-button-padding-x: var(--m-button-padding-x-small);
711
495
  }
712
496
 
713
- .m-button-group {
714
- display: inline-flex;
715
- vertical-align: middle;
497
+ .m-button--large {
498
+ --m-button-icon-size: var(--m-button-icon-size-large);
499
+ --m-button-font-size: var(--m-control-font-large);
500
+ --m-button-height: var(--m-control-height-large);
501
+ --m-button-padding-x: var(--m-button-padding-x-large);
716
502
  }
717
503
 
718
- .m-button-group--fluid {
504
+ .m-button--block {
719
505
  display: flex;
720
506
  width: 100%;
721
507
  }
722
508
 
723
- .m-button-group--fluid > .m-button {
724
- flex: 1;
725
- }
726
-
727
- .m-button-group > .m-button {
728
- border-radius: 0;
729
- margin: 0;
730
- }
731
-
732
- .m-button-group > .m-button + .m-button {
733
- margin-left: calc(var(--m-border-width) * -1);
734
- }
735
-
736
- .m-button-group > .m-button:hover,
737
- .m-button-group > .m-button:focus-visible,
738
- .m-button-group > .m-button:active {
739
- position: relative;
740
- z-index: 1;
741
- }
742
-
743
- .m-button-group > .m-button:first-child {
744
- border-top-left-radius: var(--m-radius-control);
745
- border-bottom-left-radius: var(--m-radius-control);
746
- }
747
-
748
- .m-button-group > .m-button:last-child {
749
- border-top-right-radius: var(--m-radius-control);
750
- border-bottom-right-radius: var(--m-radius-control);
751
- }
752
-
753
- .m-button--raised {
754
- box-shadow: var(--m-shadow-raised);
755
- }
756
-
757
- .m-button--raised:focus-visible {
758
- box-shadow: var(--m-focus-shadow), var(--m-shadow-raised);
759
- }
760
-
761
- .m-button--rounded {
762
- border-radius: var(--m-radius-full);
509
+ .m-button--shape-round {
510
+ --m-button-radius: var(--m-radius-full);
511
+ padding-inline: calc(
512
+ var(--m-button-padding-x) + var(--m-button-padding-x-round-extra)
513
+ );
763
514
  }
764
515
 
765
516
  .m-button--shape-circle {
766
- border-radius: var(--m-radius-full);
767
- min-width: var(--m-control-height-medium);
517
+ --m-button-radius: var(--m-radius-full);
518
+ min-width: var(--m-button-height);
768
519
  padding-inline: 0;
769
- width: var(--m-control-height-medium);
770
- }
771
-
772
- .m-button--shape-circle.m-button--small {
773
- min-width: var(--m-control-height-small);
774
- width: var(--m-control-height-small);
775
- }
776
-
777
- .m-button--shape-circle.m-button--large {
778
- min-width: var(--m-control-height-large);
779
- width: var(--m-control-height-large);
780
- }
781
-
782
- .m-button--shape-round {
783
- border-radius: var(--m-radius-full);
784
- padding-inline: calc(var(--m-button-padding-x-medium) + var(--m-space-2));
520
+ width: var(--m-button-height);
785
521
  }
786
522
 
787
523
  .m-button--shape-square {
788
- border-radius: 0;
789
- }
790
-
791
- .m-button--dashed {
792
- background: var(--m-color-surface);
793
- border-style: dashed;
794
- color: var(--m-color-text);
795
- }
796
-
797
- .m-button--dashed:not(:disabled):hover {
798
- border-color: var(--m-color-primary-hover);
799
- color: var(--m-color-primary-hover);
800
- }
801
-
802
- .m-button--primary.m-button--dashed {
803
- --m-button-bg: var(--m-color-surface);
804
- --m-button-fg: var(--m-color-primary);
805
- --m-button-border: var(--m-color-primary);
806
- --m-button-hover-bg: var(--m-color-surface);
807
- --m-button-hover-fg: var(--m-color-primary-hover);
808
- --m-button-hover-border: var(--m-color-primary-hover);
809
- --m-button-active-bg: var(--m-color-surface);
810
- }
811
-
812
- .m-button--secondary.m-button--dashed {
813
- --m-button-bg: var(--m-color-surface);
814
- --m-button-fg: var(--m-color-text);
815
- --m-button-border: var(--m-color-border);
816
- --m-button-hover-bg: var(--m-color-surface);
817
- --m-button-hover-fg: var(--m-color-primary-hover);
818
- --m-button-hover-border: var(--m-color-primary-hover);
524
+ --m-button-radius: 0;
819
525
  }
820
526
 
821
527
  .m-button--icon-only {
822
528
  gap: 0;
823
- min-width: var(--m-control-height-medium);
529
+ min-width: var(--m-button-height);
824
530
  padding: 0;
825
- width: var(--m-control-height-medium);
826
- }
827
-
828
- .m-button--icon-only.m-button--small {
829
- min-width: var(--m-control-height-small);
830
- width: var(--m-control-height-small);
531
+ width: var(--m-button-height);
831
532
  }
832
533
 
833
- .m-button--icon-only.m-button--large {
834
- min-width: var(--m-control-height-large);
835
- width: var(--m-control-height-large);
836
- }
837
-
838
- .m-button--icon-right {
534
+ .m-button--icon-end {
839
535
  flex-direction: row-reverse;
840
536
  }
841
537
 
842
- .m-button--icon-top {
843
- flex-direction: column;
844
- min-height: var(--m-button-icon-stack-min-height);
845
- padding-block: var(--m-space-2);
846
- }
847
-
848
- .m-button--icon-bottom {
849
- flex-direction: column-reverse;
850
- min-height: var(--m-button-icon-stack-min-height);
851
- padding-block: var(--m-space-2);
852
- }
853
-
854
- .m-button--fluid {
855
- display: flex;
856
- width: 100%;
538
+ .m-button--two-chinese-chars > .m-button__label {
539
+ letter-spacing: var(--m-button-cn-letter-spacing);
540
+ margin-inline-end: calc(var(--m-button-cn-letter-spacing) * -1);
857
541
  }
858
542
 
859
- .m-button--small {
860
- --m-button-icon-size: 0.875rem;
861
- font-size: var(--m-control-font-small);
862
- min-height: var(--m-control-height-small);
863
- padding: 0 var(--m-button-padding-x-small);
543
+ .m-button--loading {
544
+ cursor: default;
545
+ opacity: var(--m-button-loading-opacity);
546
+ pointer-events: none;
864
547
  }
865
548
 
866
- .m-button--large {
867
- --m-button-icon-size: 1.25rem;
868
- font-size: var(--m-control-font-large);
869
- min-height: var(--m-control-height-large);
870
- padding: 0 var(--m-button-padding-x-large);
871
- }
549
+ /* ---------- Parts ---------- */
872
550
 
873
551
  .m-button__icon,
874
552
  .m-button__label {
@@ -878,8 +556,7 @@
878
556
  }
879
557
 
880
558
  .m-button__icon,
881
- .m-button__label,
882
- .m-button__badge {
559
+ .m-button__label {
883
560
  position: relative;
884
561
  z-index: 1;
885
562
  }
@@ -903,18 +580,18 @@
903
580
  will-change: transform, opacity;
904
581
  }
905
582
 
906
- /* Used only when Web Animations API is unavailable. */
907
583
  .m-button__ripple-wave--fallback {
908
- animation: m-button-ripple 560ms var(--m-motion-ease) forwards;
584
+ animation: m-button-ripple var(--m-button-ripple-duration)
585
+ var(--m-motion-ease) forwards;
909
586
  }
910
587
 
911
588
  @keyframes m-button-ripple {
912
589
  0% {
913
- opacity: 0.42;
590
+ opacity: var(--m-button-ripple-opacity-start);
914
591
  transform: scale(0);
915
592
  }
916
593
  55% {
917
- opacity: 0.22;
594
+ opacity: var(--m-button-ripple-opacity-mid);
918
595
  transform: scale(0.55);
919
596
  }
920
597
  100% {
@@ -925,92 +602,97 @@
925
602
 
926
603
  .m-button__icon {
927
604
  flex: 0 0 auto;
928
- width: var(--m-button-icon-size);
929
605
  height: var(--m-button-icon-size);
930
606
  line-height: 0;
607
+ width: var(--m-button-icon-size);
931
608
  }
932
609
 
933
610
  .m-button__icon :is(.m-icon, .m-button__icon-graphic, svg) {
934
611
  display: block;
935
612
  flex-shrink: 0;
936
- width: 100%;
937
613
  height: 100%;
614
+ width: 100%;
938
615
  }
939
616
 
940
617
  .m-button__icon .m-icon {
941
- max-width: 100%;
942
618
  max-height: 100%;
619
+ max-width: 100%;
943
620
  }
944
621
 
945
- .m-button__badge {
946
- align-items: center;
947
- background: var(--m-color-contrast);
622
+ .m-button__spinner {
623
+ animation: m-button-spin var(--m-motion-spin-fast) linear infinite;
624
+ border: var(--m-button-spinner-border-width) solid currentColor;
948
625
  border-radius: var(--m-radius-full);
949
- color: var(--m-color-contrast-fg);
950
- display: inline-flex;
951
- font-size: var(--m-font-size-xs);
952
- font-weight: 700;
953
- justify-content: center;
954
- line-height: 1;
955
- margin-inline-start: var(--m-space-1);
956
- min-width: var(--m-button-badge-min-width);
957
- padding: var(--m-space-1) var(--m-space-2);
626
+ border-right-color: transparent;
627
+ height: var(--m-button-spinner-size);
628
+ width: var(--m-button-spinner-size);
958
629
  }
959
630
 
960
- .m-button__badge--secondary {
961
- background: color-mix(
962
- in srgb,
963
- var(--m-color-text-muted) 25%,
964
- var(--m-color-surface)
965
- );
966
- color: var(--m-color-text);
631
+ @keyframes m-button-spin {
632
+ to {
633
+ transform: rotate(360deg);
634
+ }
967
635
  }
968
636
 
969
- .m-button__badge--success {
970
- background: var(--m-color-success);
971
- color: var(--m-color-on-emphasis);
637
+ @media (prefers-reduced-motion: reduce) {
638
+ .m-button {
639
+ --m-button-ripple-duration: 0ms;
640
+ transition-duration: 0ms;
641
+ }
642
+
643
+ .m-button__spinner {
644
+ animation-duration: 0ms;
645
+ }
972
646
  }
973
647
 
974
- .m-button__badge--info {
975
- background: var(--m-color-info);
976
- color: var(--m-color-on-emphasis);
648
+ :root[data-m-motion='reduced'] .m-button {
649
+ --m-button-ripple-duration: 280ms;
650
+ --m-button-press-duration: 120ms;
977
651
  }
978
652
 
979
- .m-button__badge--warn {
980
- background: var(--m-color-warn);
981
- color: var(--m-color-on-emphasis);
653
+ :root[data-m-motion='none'] .m-button {
654
+ --m-button-ripple-duration: 0ms;
655
+ --m-button-press-duration: 0ms;
982
656
  }
983
657
 
984
- .m-button__badge--danger {
985
- background: var(--m-color-danger);
986
- color: var(--m-color-on-emphasis);
658
+ /* ---------- Group ---------- */
659
+
660
+ .m-button-group {
661
+ display: inline-flex;
662
+ vertical-align: middle;
987
663
  }
988
664
 
989
- .m-button__badge--contrast {
990
- background: var(--m-color-contrast);
991
- color: var(--m-color-contrast-fg);
665
+ .m-button-group--block {
666
+ display: flex;
667
+ width: 100%;
992
668
  }
993
669
 
994
- .m-button__spinner {
995
- animation: m-button-spin var(--m-motion-spin-fast) linear infinite;
996
- border: 2px solid currentColor;
997
- border-right-color: transparent;
998
- border-radius: var(--m-radius-full);
999
- height: var(--m-button-spinner-size);
1000
- width: var(--m-button-spinner-size);
670
+ .m-button-group--block > .m-button {
671
+ flex: 1;
1001
672
  }
1002
673
 
1003
- @keyframes m-button-spin {
1004
- to {
1005
- transform: rotate(360deg);
1006
- }
674
+ .m-button-group > .m-button {
675
+ border-radius: 0;
676
+ margin: 0;
1007
677
  }
1008
678
 
1009
- [data-m-motion="reduced"] .m-button__spinner,
1010
- [data-m-motion="none"] .m-button__spinner {
1011
- animation: none;
679
+ .m-button-group > .m-button + .m-button {
680
+ margin-inline-start: calc(var(--m-border-width) * -1);
681
+ }
682
+
683
+ .m-button-group > .m-button:hover,
684
+ .m-button-group > .m-button:focus-visible,
685
+ .m-button-group > .m-button:active {
686
+ position: relative;
687
+ z-index: 1;
688
+ }
689
+
690
+ .m-button-group > .m-button:first-child {
691
+ border-end-start-radius: var(--m-radius-control);
692
+ border-start-start-radius: var(--m-radius-control);
1012
693
  }
1013
694
 
1014
- [data-m-motion="none"] .m-button__ripple-wave {
1015
- display: none;
695
+ .m-button-group > .m-button:last-child {
696
+ border-end-end-radius: var(--m-radius-control);
697
+ border-start-end-radius: var(--m-radius-control);
1016
698
  }