icon-button-v2.css 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. * {
  2. -webkit-font-smoothing: antialiased;
  3. -moz-osx-font-smoothing: grayscale;
  4. text-rendering: geometricPrecision;
  5. }
  6. [data-component="icon-button-v2"] {
  7. display: inline-flex;
  8. align-items: center;
  9. justify-content: center;
  10. border-radius: 6px;
  11. color: var(--v2-text-text-base);
  12. user-select: none;
  13. outline: none;
  14. padding: 0;
  15. cursor: default;
  16. }
  17. [data-component="icon-button-v2"]:focus {
  18. outline: none;
  19. }
  20. [data-component="icon-button-v2"]:is(:focus-visible, [data-state="focus"]):not(:disabled) {
  21. outline: 2px solid var(--v2-border-border-focus);
  22. outline-offset: 2.5px;
  23. }
  24. [data-component="icon-button-v2"][data-size="small"] {
  25. width: 20px;
  26. height: 20px;
  27. border-radius: 4px;
  28. }
  29. [data-component="icon-button-v2"][data-size="normal"] {
  30. width: 24px;
  31. height: 24px;
  32. }
  33. [data-component="icon-button-v2"][data-size="large"] {
  34. width: 28px;
  35. height: 28px;
  36. }
  37. [data-component="icon-button-v2"] [data-slot="icon-svg"] {
  38. color: currentColor;
  39. }
  40. /* Neutral */
  41. [data-component="icon-button-v2"][data-variant="neutral"] {
  42. background-color: var(--v2-background-bg-button-neutral);
  43. color: var(--v2-text-text-base);
  44. box-shadow: var(--v2-elevation-button-neutral);
  45. }
  46. [data-component="icon-button-v2"][data-variant="neutral"]:is(:hover, [data-state="hover"]):not(:disabled) {
  47. background-image:
  48. linear-gradient(90deg, var(--v2-overlay-simple-overlay-hover) 0%, var(--v2-overlay-simple-overlay-hover) 100%),
  49. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  50. }
  51. [data-component="icon-button-v2"][data-variant="neutral"]:is(:active, [data-state="pressed"]):not(:disabled) {
  52. background-image:
  53. linear-gradient(90deg, var(--v2-overlay-simple-overlay-pressed) 0%, var(--v2-overlay-simple-overlay-pressed) 100%),
  54. linear-gradient(90deg, var(--v2-background-bg-button-neutral) 0%, var(--v2-background-bg-button-neutral) 100%);
  55. }
  56. [data-component="icon-button-v2"][data-variant="neutral"]:is(:disabled, [data-state="disabled"]) {
  57. opacity: 0.5;
  58. cursor: not-allowed;
  59. }
  60. /* Contrast */
  61. [data-component="icon-button-v2"][data-variant="contrast"] {
  62. background-image:
  63. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  64. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  65. color: var(--v2-text-text-contrast);
  66. text-shadow: 0 0.5px 0.5px rgba(0, 0, 0, 0.3);
  67. box-shadow: var(--v2-elevation-button-contrast);
  68. }
  69. [data-component="icon-button-v2"][data-variant="contrast"]:is(:hover, [data-state="hover"]):not(:disabled) {
  70. background-image:
  71. linear-gradient(
  72. 90deg,
  73. var(--v2-overlay-simple-overlay-contrast-hover) 0%,
  74. var(--v2-overlay-simple-overlay-contrast-hover) 100%
  75. ),
  76. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  77. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  78. }
  79. [data-component="icon-button-v2"][data-variant="contrast"]:is(:active, [data-state="pressed"]):not(:disabled) {
  80. background-image:
  81. linear-gradient(
  82. 90deg,
  83. var(--v2-overlay-simple-overlay-contrast-pressed) 0%,
  84. var(--v2-overlay-simple-overlay-contrast-pressed) 100%
  85. ),
  86. linear-gradient(180deg, var(--v2-alpha-light-20) 0%, var(--v2-alpha-light-0) 100%),
  87. linear-gradient(90deg, var(--v2-background-bg-contrast) 0%, var(--v2-background-bg-contrast) 100%);
  88. }
  89. [data-component="icon-button-v2"][data-variant="contrast"]:is(:disabled, [data-state="disabled"]) {
  90. opacity: 0.4;
  91. cursor: not-allowed;
  92. }
  93. /* Ghost */
  94. [data-component="icon-button-v2"][data-variant="ghost"] {
  95. background-color: transparent;
  96. color: var(--v2-text-text-base);
  97. }
  98. [data-component="icon-button-v2"][data-variant="ghost"]:is(:hover, [data-state="hover"], [data-expanded]):not(
  99. :disabled
  100. ) {
  101. background-color: var(--v2-overlay-simple-overlay-hover);
  102. }
  103. [data-component="icon-button-v2"][data-variant="ghost"]:is(:active, [data-state="pressed"]):not(:disabled) {
  104. background-color: var(--v2-overlay-simple-overlay-pressed);
  105. }
  106. [data-component="icon-button-v2"][data-variant="ghost"]:is(:disabled, [data-state="disabled"]) {
  107. opacity: 0.5;
  108. cursor: not-allowed;
  109. }
  110. /* Ghost */
  111. [data-component="icon-button-v2"][data-variant="ghost-muted"] {
  112. background-color: transparent;
  113. color: var(--v2-icon-icon-muted);
  114. }
  115. [data-component="icon-button-v2"][data-variant="ghost-muted"]:is(:hover, [data-state="hover"], [data-expanded]):not(
  116. :disabled
  117. ) {
  118. background-color: var(--v2-overlay-simple-overlay-hover);
  119. }
  120. [data-component="icon-button-v2"][data-variant="ghost-muted"]:is(:active, [data-state="pressed"]):not(:disabled) {
  121. background-color: var(--v2-overlay-simple-overlay-pressed);
  122. color: var(--v2-icon-icon-base);
  123. }
  124. [data-component="icon-button-v2"][data-variant="ghost-muted"]:where([data-expanded]):not(:disabled) {
  125. background-color: var(--v2-overlay-simple-overlay-pressed);
  126. color: var(--v2-icon-icon-base);
  127. }
  128. [data-component="icon-button-v2"][data-variant="ghost-muted"]:is(:disabled, [data-state="disabled"]) {
  129. opacity: 0.5;
  130. cursor: not-allowed;
  131. }