button-v2.css 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. * {
  2. -webkit-font-smoothing: antialiased;
  3. -moz-osx-font-smoothing: grayscale;
  4. text-rendering: geometricPrecision;
  5. }
  6. [data-component="button-v2"] {
  7. position: relative;
  8. display: inline-flex;
  9. align-items: center;
  10. justify-content: center;
  11. gap: 6px;
  12. border-radius: 6px;
  13. font-style: normal;
  14. font-weight: 530;
  15. font-size: 13px;
  16. line-height: 1;
  17. color: var(--v2-text-text-base);
  18. text-shadow: none;
  19. font-variant-numeric: tabular-nums;
  20. letter-spacing: -0.04px;
  21. user-select: none;
  22. cursor: pointer;
  23. outline: none;
  24. }
  25. [data-component="button-v2"]:focus {
  26. outline: none;
  27. }
  28. [data-component="button-v2"]:is(:focus-visible, [data-state="focus"]):not(:disabled):not([data-variant="loading"]) {
  29. outline: 2px solid var(--v2-border-border-focus);
  30. outline-offset: 2.5px;
  31. }
  32. [data-component="button-v2"][data-size="normal"] {
  33. height: 28px;
  34. padding: 0 11px;
  35. }
  36. [data-component="button-v2"][data-size="small"] {
  37. height: 24px;
  38. padding: 0 9px;
  39. border-radius: 4px;
  40. }
  41. [data-component="button-v2"][data-size="large"] {
  42. height: 32px;
  43. padding: 0 15px;
  44. }
  45. [data-component="button-v2"][data-icon][data-size="small"] {
  46. padding-left: 9px;
  47. }
  48. [data-component="button-v2"][data-icon][data-size="normal"] {
  49. padding-left: 11px;
  50. }
  51. [data-component="button-v2"][data-icon][data-size="large"] {
  52. padding-left: 15px;
  53. }
  54. [data-component="button-v2"] [data-slot="icon-svg"] {
  55. color: currentColor;
  56. }
  57. /* Neutral */
  58. [data-component="button-v2"][data-variant="neutral"] {
  59. background-color: var(--v2-background-bg-button-neutral);
  60. color: var(--v2-text-text-base);
  61. box-shadow: var(--v2-elevation-button-neutral);
  62. }
  63. [data-component="button-v2"][data-variant="neutral"]:is(:hover, [data-state="hover"]):not(:disabled) {
  64. background-image:
  65. linear-gradient(90deg, var(--v2-overlay-simple-overlay-hover) 0%, var(--v2-overlay-simple-overlay-hover) 100%),
  66. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  67. }
  68. [data-component="button-v2"][data-variant="neutral"]:is(:active, [data-state="pressed"]):not(:disabled) {
  69. background-image:
  70. linear-gradient(90deg, var(--v2-overlay-simple-overlay-pressed) 0%, var(--v2-overlay-simple-overlay-pressed) 100%),
  71. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  72. }
  73. [data-component="button-v2"][data-variant="neutral"]:is(:disabled, [data-state="disabled"]) {
  74. opacity: 0.5;
  75. cursor: not-allowed;
  76. }
  77. /* Danger */
  78. [data-component="button-v2"][data-variant="danger"] {
  79. background-color: var(--v2-background-bg-button-neutral);
  80. color: var(--v2-state-fg-danger);
  81. box-shadow: var(--v2-elevation-button-neutral);
  82. }
  83. [data-component="button-v2"][data-variant="danger"]:is(:hover, [data-state="hover"]):not(:disabled) {
  84. background-image:
  85. linear-gradient(90deg, var(--v2-overlay-simple-overlay-hover) 0%, var(--v2-overlay-simple-overlay-hover) 100%),
  86. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  87. }
  88. [data-component="button-v2"][data-variant="danger"]:is(:active, [data-state="pressed"]):not(:disabled) {
  89. background-image:
  90. linear-gradient(90deg, var(--v2-overlay-simple-overlay-pressed) 0%, var(--v2-overlay-simple-overlay-pressed) 100%),
  91. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  92. }
  93. [data-component="button-v2"][data-variant="danger"]:is(:disabled, [data-state="disabled"]) {
  94. opacity: 0.5;
  95. cursor: not-allowed;
  96. }
  97. /* Outline */
  98. [data-component="button-v2"][data-variant="outline"] {
  99. background-color: transparent;
  100. color: var(--v2-text-text-base);
  101. box-shadow: inset 0 0 0 1px var(--v2-border-border-muted);
  102. }
  103. [data-component="button-v2"][data-variant="outline"]:is(:hover, [data-state="hover"]):not(:disabled) {
  104. background-color: var(--v2-overlay-simple-overlay-hover);
  105. }
  106. [data-component="button-v2"][data-variant="outline"]:is(:active, [data-state="pressed"]):not(:disabled) {
  107. background-color: var(--v2-overlay-simple-overlay-pressed);
  108. }
  109. [data-component="button-v2"][data-variant="outline"]:is(:disabled, [data-state="disabled"]) {
  110. opacity: 0.5;
  111. cursor: not-allowed;
  112. }
  113. /* Contrast */
  114. [data-component="button-v2"][data-variant="contrast"] {
  115. background-image:
  116. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  117. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  118. color: var(--v2-text-text-contrast);
  119. text-shadow: 0 0.5px 0.5px rgba(0, 0, 0, 0.3);
  120. box-shadow: var(--v2-elevation-button-contrast);
  121. }
  122. [data-component="button-v2"][data-variant="contrast"]:is(:hover, [data-state="hover"]):not(:disabled) {
  123. background-image:
  124. linear-gradient(
  125. 90deg,
  126. var(--v2-overlay-simple-overlay-contrast-hover) 0%,
  127. var(--v2-overlay-simple-overlay-contrast-hover) 100%
  128. ),
  129. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  130. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  131. }
  132. [data-component="button-v2"][data-variant="contrast"]:is(:active, [data-state="pressed"]):not(:disabled) {
  133. background-image:
  134. linear-gradient(
  135. 90deg,
  136. var(--v2-overlay-simple-overlay-contrast-pressed) 0%,
  137. var(--v2-overlay-simple-overlay-contrast-pressed) 100%
  138. ),
  139. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  140. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  141. }
  142. [data-component="button-v2"][data-variant="contrast"]:is(:disabled, [data-state="disabled"]) {
  143. opacity: 0.4;
  144. cursor: not-allowed;
  145. }
  146. /* Loading */
  147. [data-component="button-v2"][data-variant="loading"] {
  148. background: #f2f2f2;
  149. color: var(--v2-text-text-base);
  150. box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.08);
  151. cursor: default;
  152. pointer-events: none;
  153. }
  154. /* Ghost */
  155. [data-component="button-v2"][data-variant="ghost"] {
  156. background-color: transparent;
  157. color: var(--v2-text-text-base);
  158. }
  159. [data-component="button-v2"][data-variant="ghost"]:is(:hover, [data-state="hover"]):not(:disabled):not(
  160. [data-expanded]
  161. ) {
  162. background-color: var(--v2-overlay-simple-overlay-hover);
  163. }
  164. [data-component="button-v2"][data-variant="ghost"]:is(:active, [data-state="pressed"]):not(:disabled) {
  165. background-color: var(--v2-overlay-simple-overlay-pressed);
  166. }
  167. [data-component="button-v2"][data-variant="ghost"]:where([data-expanded]):not(:disabled) {
  168. background-color: var(--v2-overlay-simple-overlay-pressed);
  169. }
  170. [data-component="button-v2"][data-variant="ghost"]:is(:disabled, [data-state="disabled"]) {
  171. opacity: 0.5;
  172. cursor: not-allowed;
  173. }
  174. /* Ghost muted */
  175. [data-component="button-v2"][data-variant="ghost-muted"] {
  176. background-color: transparent;
  177. color: var(--v2-text-text-muted);
  178. }
  179. [data-component="button-v2"][data-variant="ghost-muted"] [data-slot="icon-svg"] {
  180. color: var(--v2-icon-icon-muted);
  181. }
  182. [data-component="button-v2"][data-variant="ghost-muted"]:is(:hover, [data-state="hover"]):not(:disabled):not(
  183. [data-expanded]
  184. ) {
  185. background-color: var(--v2-overlay-simple-overlay-hover);
  186. }
  187. [data-component="button-v2"][data-variant="ghost-muted"]:is(:active, [data-state="pressed"]):not(:disabled) {
  188. background-color: var(--v2-overlay-simple-overlay-pressed);
  189. }
  190. [data-component="button-v2"][data-variant="ghost-muted"]:where([data-expanded]):not(:disabled) {
  191. background-color: var(--v2-overlay-simple-overlay-pressed);
  192. color: var(--v2-text-text-base);
  193. }
  194. [data-component="button-v2"][data-variant="ghost-muted"]:where([data-expanded]):not(:disabled) [data-slot="icon-svg"] {
  195. color: var(--v2-icon-icon-base);
  196. }
  197. [data-component="button-v2"][data-variant="ghost-muted"]:is(:disabled, [data-state="disabled"]) {
  198. opacity: 0.5;
  199. cursor: not-allowed;
  200. }