mapping.ts 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import type { V2ColorValue } from "../types"
  2. import { V2_AVATAR_DARK, V2_AVATAR_LIGHT } from "./avatar"
  3. const ref = (name: string): V2ColorValue => `var(--${name})`
  4. const lightAgentTokens: Record<string, V2ColorValue> = {
  5. "v2-agent-plan-solid": ref("v2-pink-800"),
  6. "v2-agent-plan-border": "rgba(200, 61, 139, 0.20)",
  7. "v2-agent-plan-background": "rgba(253, 236, 243, 0.10)",
  8. "v2-agent-build-solid": ref("v2-blue-800"),
  9. "v2-agent-build-border": "rgba(44, 71, 200, 0.20)",
  10. "v2-agent-build-background": "rgba(236, 241, 254, 0.10)",
  11. "v2-agent-explore-solid": ref("v2-yellow-900"),
  12. "v2-agent-explore-border": "rgba(203, 159, 52, 0.20)",
  13. "v2-agent-explore-background": "rgba(254, 250, 236, 0.1)",
  14. "v2-agent-review-solid": ref("v2-green-800"),
  15. "v2-agent-writer-solid": ref("v2-purple-700"),
  16. }
  17. const darkAgentTokens: Record<string, V2ColorValue> = {
  18. "v2-agent-plan-solid": ref("v2-pink-400"),
  19. "v2-agent-plan-border": "rgba(247, 153, 198, 0.20)",
  20. "v2-agent-plan-background": "rgba(170, 53, 118, 0.05)",
  21. "v2-agent-build-solid": ref("v2-blue-300"),
  22. "v2-agent-build-border": "rgba(162, 188, 255, 0.20)",
  23. "v2-agent-build-background": "rgba(38, 63, 169, 0.05)",
  24. "v2-agent-explore-solid": ref("v2-yellow-300"),
  25. "v2-agent-explore-border": "rgba(243, 218, 155, 0.20)",
  26. "v2-agent-explore-background": "rgba(172, 136, 51, 0.05)",
  27. "v2-agent-review-solid": ref("v2-green-300"),
  28. "v2-agent-writer-solid": ref("v2-purple-400"),
  29. }
  30. const light: Record<string, V2ColorValue> = {
  31. "v2-background-bg-base": ref("v2-grey-100"),
  32. "v2-background-bg-deep": ref("v2-grey-200"),
  33. "v2-background-bg-layer-01": ref("v2-grey-300"),
  34. "v2-background-bg-layer-02": ref("v2-grey-400"),
  35. "v2-background-bg-layer-03": ref("v2-grey-500"),
  36. "v2-background-bg-layer-04": ref("v2-grey-600"),
  37. "v2-background-bg-inverse": ref("v2-grey-1000"),
  38. "v2-background-bg-contrast": ref("v2-grey-900"),
  39. "v2-background-bg-button-neutral": ref("v2-grey-100"),
  40. "v2-background-bg-accent": ref("v2-blue-600"),
  41. "v2-text-text-inverse": ref("v2-grey-100"),
  42. "v2-text-text-contrast": ref("v2-grey-100"),
  43. "v2-text-text-accent": ref("v2-blue-600"),
  44. "v2-text-text-accent-hover": ref("v2-blue-700"),
  45. "v2-text-text-code-accent": ref("v2-blue-900"),
  46. "v2-border-border-muted": ref("v2-alpha-dark-8"),
  47. "v2-border-border-base": ref("v2-alpha-dark-10"),
  48. "v2-border-border-strong": ref("v2-alpha-dark-20"),
  49. "v2-border-border-inverse": ref("v2-grey-1000"),
  50. "v2-border-border-focus": ref("v2-blue-500"),
  51. "v2-overlay-simple-overlay-hover": ref("v2-alpha-dark-4"),
  52. "v2-overlay-simple-overlay-pressed": ref("v2-alpha-dark-8"),
  53. "v2-overlay-simple-overlay-contrast-hover": ref("v2-alpha-light-12"),
  54. "v2-overlay-simple-overlay-contrast-pressed": ref("v2-alpha-light-24"),
  55. "v2-overlay-simple-overlay-scrim": ref("v2-alpha-dark-40"),
  56. "v2-overlay-gradient-depth-overlay-depth-top": ref("v2-alpha-light-100"),
  57. "v2-overlay-gradient-depth-overlay-depth-bot": ref("v2-alpha-light-0"),
  58. "v2-overlay-simple-tab-active-scrim": "#fafafa00",
  59. "v2-overlay-simple-tab-hover-scrim": "#eeeeee00",
  60. "v2-overlay-simple-tab-scrim": "#fafafa00",
  61. "v2-state-bg-success": ref("v2-green-100"),
  62. "v2-state-fg-success": ref("v2-green-800"),
  63. "v2-state-border-success": ref("v2-green-300"),
  64. "v2-state-bg-warning": ref("v2-yellow-100"),
  65. "v2-state-fg-warning": ref("v2-yellow-800"),
  66. "v2-state-border-warning": ref("v2-yellow-300"),
  67. "v2-state-bg-danger": ref("v2-red-100"),
  68. "v2-state-fg-danger": ref("v2-red-800"),
  69. "v2-state-border-danger": ref("v2-red-300"),
  70. "v2-state-bg-info": ref("v2-blue-100"),
  71. "v2-state-fg-info": ref("v2-blue-800"),
  72. "v2-state-border-info": ref("v2-blue-300"),
  73. ...lightAgentTokens,
  74. ...V2_AVATAR_LIGHT,
  75. "v2-elevation-raised":
  76. "0px 2px 4px 0px var(--v2-alpha-dark-4), 0px 1px 2px -1px var(--v2-alpha-dark-8), 0px 0px 0px 0.5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0)",
  77. "v2-elevation-floating":
  78. "0px 8px 16px 0px var(--v2-alpha-dark-4), 0px 4px 8px 0px var(--v2-alpha-dark-8), 0px 0px 0px 0.5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0)",
  79. "v2-elevation-overlay":
  80. "0px 16px 32px 0px var(--v2-alpha-dark-4), 0px 8px 16px 0px var(--v2-alpha-dark-8), 0px 0px 0px 0.5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0)",
  81. "v2-elevation-button-neutral":
  82. "0px 1px 1.5px 0px var(--v2-alpha-dark-10), 0px 0px 0px 0.5px var(--v2-alpha-dark-14), 0px 0px 0px 0px var(--v2-alpha-dark-0)",
  83. "v2-elevation-button-contrast":
  84. "0px 1px 1.5px 0px var(--v2-alpha-dark-20), 0px 0px 0px 0.5px var(--v2-grey-800), inset 0px 1px 2px 0px var(--v2-alpha-light-14), inset 0px -1px 2px 0px var(--v2-alpha-dark-6), 0px 0px 0px 0px var(--v2-alpha-dark-0)",
  85. "v2-elevation-elements": "0px 0.5px 0.5px 0px var(--v2-alpha-dark-40)",
  86. "v2-elevation-switch-off":
  87. "inset 0px 1px 1px 0px var(--v2-alpha-dark-8), inset 0px 0.5px 0.5px 0px var(--v2-alpha-dark-8), inset 0px 0px 0px 0.5px var(--v2-alpha-dark-10)",
  88. "v2-elevation-switch-on":
  89. "inset 0px 2px 2px 0px var(--v2-alpha-dark-10), inset 0px 1px 1px 0px var(--v2-alpha-dark-10), inset 0px 0px 0px 0.5px var(--v2-alpha-dark-20)",
  90. "v2-illustration-illustration-layer-01": ref("v2-grey-300"),
  91. "v2-illustration-illustration-layer-02": ref("v2-grey-400"),
  92. "v2-illustration-illustration-layer-03": ref("v2-grey-500"),
  93. }
  94. const dark: Record<string, V2ColorValue> = {
  95. "v2-background-bg-base": ref("v2-grey-1000"),
  96. "v2-background-bg-deep": ref("v2-grey-1100"),
  97. "v2-background-bg-layer-01": ref("v2-grey-800"),
  98. "v2-background-bg-layer-02": ref("v2-grey-600"),
  99. "v2-background-bg-layer-03": ref("v2-grey-500"),
  100. "v2-background-bg-layer-04": ref("v2-grey-400"),
  101. "v2-background-bg-inverse": ref("v2-grey-100"),
  102. "v2-background-bg-contrast": ref("v2-grey-700"),
  103. "v2-background-bg-button-neutral": ref("v2-alpha-light-6"),
  104. "v2-background-bg-accent": ref("v2-blue-600"),
  105. "v2-text-text-inverse": ref("v2-grey-1000"),
  106. "v2-text-text-contrast": ref("v2-grey-100"),
  107. "v2-text-text-accent": ref("v2-blue-400"),
  108. "v2-text-text-accent-hover": ref("v2-blue-300"),
  109. "v2-text-text-code-accent": ref("v2-blue-400"),
  110. "v2-border-border-muted": ref("v2-alpha-light-8"),
  111. "v2-border-border-base": ref("v2-alpha-light-10"),
  112. "v2-border-border-strong": ref("v2-alpha-light-20"),
  113. "v2-border-border-inverse": ref("v2-grey-100"),
  114. "v2-border-border-focus": ref("v2-blue-500"),
  115. "v2-overlay-simple-overlay-hover": ref("v2-alpha-light-6"),
  116. "v2-overlay-simple-overlay-pressed": ref("v2-alpha-light-10"),
  117. "v2-overlay-simple-overlay-contrast-hover": ref("v2-alpha-dark-24"),
  118. "v2-overlay-simple-overlay-contrast-pressed": ref("v2-alpha-dark-40"),
  119. "v2-overlay-simple-overlay-scrim": ref("v2-alpha-dark-60"),
  120. "v2-overlay-gradient-depth-overlay-depth-top": ref("v2-alpha-light-100"),
  121. "v2-overlay-gradient-depth-overlay-depth-bot": ref("v2-alpha-light-0"),
  122. "v2-overlay-simple-tab-active-scrim": "#24242400",
  123. "v2-overlay-simple-tab-hover-scrim": "#3a3a3a00",
  124. "v2-overlay-simple-tab-scrim": "#08080800",
  125. "v2-state-bg-success": ref("v2-green-1200"),
  126. "v2-state-fg-success": ref("v2-green-500"),
  127. "v2-state-border-success": ref("v2-green-900"),
  128. "v2-state-bg-warning": ref("v2-yellow-1200"),
  129. "v2-state-fg-warning": ref("v2-yellow-500"),
  130. "v2-state-border-warning": ref("v2-yellow-900"),
  131. "v2-state-bg-danger": ref("v2-red-1200"),
  132. "v2-state-fg-danger": ref("v2-red-500"),
  133. "v2-state-border-danger": ref("v2-red-900"),
  134. "v2-state-bg-info": ref("v2-blue-1200"),
  135. "v2-state-fg-info": ref("v2-blue-500"),
  136. "v2-state-border-info": ref("v2-blue-900"),
  137. ...darkAgentTokens,
  138. ...V2_AVATAR_DARK,
  139. "v2-elevation-raised":
  140. "0px 2px 4px 0px var(--v2-alpha-dark-30), 0px 1px 2px 0px var(--v2-alpha-dark-30), 0px 0px 0px 0.5px var(--v2-alpha-light-16), 0px -0.5px 0px 0px var(--v2-alpha-light-6)",
  141. "v2-elevation-floating":
  142. "0px 8px 16px 0px var(--v2-alpha-dark-30), 0px 4px 8px 0px var(--v2-alpha-dark-30), 0px 0px 0px 0.5px var(--v2-alpha-light-16), 0px -0.5px 0px 0px var(--v2-alpha-light-6)",
  143. "v2-elevation-overlay":
  144. "0px 16px 32px 0px var(--v2-alpha-dark-30), 0px 8px 16px 0px var(--v2-alpha-dark-30), 0px 0px 0px 0.5px var(--v2-alpha-light-16), 0px -0.5px 0px 0px var(--v2-alpha-light-6)",
  145. "v2-elevation-button-neutral":
  146. "0px 1px 2px 0px var(--v2-alpha-dark-40), 0px 0px 0px 0.5px var(--v2-alpha-light-20), 0px -0.5px 0px 0px var(--v2-alpha-light-10)",
  147. "v2-elevation-button-contrast":
  148. "0px 1px 2px 0px var(--v2-alpha-dark-40), 0px 0px 0px 0.5px var(--v2-alpha-light-40), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px 0px var(--v2-alpha-light-0), 0px -0.5px 0px 0px var(--v2-alpha-light-30)",
  149. "v2-elevation-elements": "0px 0.5px 0.5px 0px var(--v2-alpha-dark-40)",
  150. "v2-elevation-switch-off":
  151. "inset 0px -0.5px 0px 0px var(--v2-alpha-light-10), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px 0.5px var(--v2-alpha-light-16)",
  152. "v2-elevation-switch-on":
  153. "inset 0px -0.5px 0px 0px var(--v2-alpha-light-10), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px 0.5px var(--v2-alpha-light-16)",
  154. "v2-illustration-illustration-layer-01": ref("v2-grey-900"),
  155. "v2-illustration-illustration-layer-02": ref("v2-grey-800"),
  156. "v2-illustration-illustration-layer-03": ref("v2-grey-700"),
  157. }
  158. export function mapV2Semantics(isDark: boolean): Record<string, V2ColorValue> {
  159. return isDark ? dark : light
  160. }
  161. export function mergeV2Tokens(...layers: Record<string, V2ColorValue>[]): Record<string, V2ColorValue> {
  162. return Object.assign({}, ...layers)
  163. }