@oxyhq/bloom 0.35.8 → 0.37.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 (310) hide show
  1. package/lib/commonjs/frosted-icon-button/FrostedIconButton.js +148 -0
  2. package/lib/commonjs/frosted-icon-button/FrostedIconButton.js.map +1 -0
  3. package/lib/commonjs/frosted-icon-button/FrostedIconButton.web.js +166 -0
  4. package/lib/commonjs/frosted-icon-button/FrostedIconButton.web.js.map +1 -0
  5. package/lib/commonjs/frosted-icon-button/index.js +13 -0
  6. package/lib/commonjs/frosted-icon-button/index.js.map +1 -0
  7. package/lib/commonjs/frosted-icon-button/index.web.js +13 -0
  8. package/lib/commonjs/frosted-icon-button/index.web.js.map +1 -0
  9. package/lib/commonjs/frosted-icon-button/shared.js +112 -0
  10. package/lib/commonjs/frosted-icon-button/shared.js.map +1 -0
  11. package/lib/commonjs/frosted-icon-button/types.js +6 -0
  12. package/lib/commonjs/frosted-icon-button/types.js.map +1 -0
  13. package/lib/commonjs/index.js +10 -1
  14. package/lib/commonjs/index.js.map +1 -1
  15. package/lib/commonjs/index.web.js +46 -37
  16. package/lib/commonjs/index.web.js.map +1 -1
  17. package/lib/commonjs/theme/build-theme.js +31 -43
  18. package/lib/commonjs/theme/build-theme.js.map +1 -1
  19. package/lib/commonjs/theme/color-engine/cam16.js +161 -0
  20. package/lib/commonjs/theme/color-engine/cam16.js.map +1 -0
  21. package/lib/commonjs/theme/color-engine/color-role.js +183 -0
  22. package/lib/commonjs/theme/color-engine/color-role.js.map +1 -0
  23. package/lib/commonjs/theme/color-engine/color-roles.js +416 -0
  24. package/lib/commonjs/theme/color-engine/color-roles.js.map +1 -0
  25. package/lib/commonjs/theme/color-engine/color-utils.js +157 -0
  26. package/lib/commonjs/theme/color-engine/color-utils.js.map +1 -0
  27. package/lib/commonjs/theme/color-engine/contrast-curve.js +32 -0
  28. package/lib/commonjs/theme/color-engine/contrast-curve.js.map +1 -0
  29. package/lib/commonjs/theme/color-engine/contrast.js +70 -0
  30. package/lib/commonjs/theme/color-engine/contrast.js.map +1 -0
  31. package/lib/commonjs/theme/color-engine/dislike-analyzer.js +26 -0
  32. package/lib/commonjs/theme/color-engine/dislike-analyzer.js.map +1 -0
  33. package/lib/commonjs/theme/color-engine/dynamic-scheme.js +70 -0
  34. package/lib/commonjs/theme/color-engine/dynamic-scheme.js.map +1 -0
  35. package/lib/commonjs/theme/color-engine/hct-solver.js +236 -0
  36. package/lib/commonjs/theme/color-engine/hct-solver.js.map +1 -0
  37. package/lib/commonjs/theme/color-engine/hct.js +67 -0
  38. package/lib/commonjs/theme/color-engine/hct.js.map +1 -0
  39. package/lib/commonjs/theme/color-engine/index.js +173 -0
  40. package/lib/commonjs/theme/color-engine/index.js.map +1 -0
  41. package/lib/commonjs/theme/color-engine/lab-point-provider.js +32 -0
  42. package/lib/commonjs/theme/color-engine/lab-point-provider.js.map +1 -0
  43. package/lib/commonjs/theme/color-engine/math-utils.js +77 -0
  44. package/lib/commonjs/theme/color-engine/math-utils.js.map +1 -0
  45. package/lib/commonjs/theme/color-engine/quantizer-map.js +24 -0
  46. package/lib/commonjs/theme/color-engine/quantizer-map.js.map +1 -0
  47. package/lib/commonjs/theme/color-engine/quantizer-wu.js +266 -0
  48. package/lib/commonjs/theme/color-engine/quantizer-wu.js.map +1 -0
  49. package/lib/commonjs/theme/color-engine/scheme-variants.js +102 -0
  50. package/lib/commonjs/theme/color-engine/scheme-variants.js.map +1 -0
  51. package/lib/commonjs/theme/color-engine/score.js +80 -0
  52. package/lib/commonjs/theme/color-engine/score.js.map +1 -0
  53. package/lib/commonjs/theme/color-engine/seed-from-image.js +73 -0
  54. package/lib/commonjs/theme/color-engine/seed-from-image.js.map +1 -0
  55. package/lib/commonjs/theme/color-engine/tonal-palette.js +95 -0
  56. package/lib/commonjs/theme/color-engine/tonal-palette.js.map +1 -0
  57. package/lib/commonjs/theme/color-engine/tone-delta-pair.js +26 -0
  58. package/lib/commonjs/theme/color-engine/tone-delta-pair.js.map +1 -0
  59. package/lib/commonjs/theme/color-engine/variant.js +26 -0
  60. package/lib/commonjs/theme/color-engine/variant.js.map +1 -0
  61. package/lib/commonjs/theme/color-engine/viewing-conditions.js +61 -0
  62. package/lib/commonjs/theme/color-engine/viewing-conditions.js.map +1 -0
  63. package/lib/commonjs/theme/color-presets.js +44 -572
  64. package/lib/commonjs/theme/color-presets.js.map +1 -1
  65. package/lib/commonjs/theme/preset-vars.js +64 -47
  66. package/lib/commonjs/theme/preset-vars.js.map +1 -1
  67. package/lib/module/frosted-icon-button/FrostedIconButton.js +143 -0
  68. package/lib/module/frosted-icon-button/FrostedIconButton.js.map +1 -0
  69. package/lib/module/frosted-icon-button/FrostedIconButton.web.js +161 -0
  70. package/lib/module/frosted-icon-button/FrostedIconButton.web.js.map +1 -0
  71. package/lib/module/frosted-icon-button/index.js +4 -0
  72. package/lib/module/frosted-icon-button/index.js.map +1 -0
  73. package/lib/module/frosted-icon-button/index.web.js +11 -0
  74. package/lib/module/frosted-icon-button/index.web.js.map +1 -0
  75. package/lib/module/frosted-icon-button/shared.js +107 -0
  76. package/lib/module/frosted-icon-button/shared.js.map +1 -0
  77. package/lib/module/frosted-icon-button/types.js +4 -0
  78. package/lib/module/frosted-icon-button/types.js.map +1 -0
  79. package/lib/module/index.js +1 -0
  80. package/lib/module/index.js.map +1 -1
  81. package/lib/module/index.web.js +1 -0
  82. package/lib/module/index.web.js.map +1 -1
  83. package/lib/module/theme/build-theme.js +32 -44
  84. package/lib/module/theme/build-theme.js.map +1 -1
  85. package/lib/module/theme/color-engine/cam16.js +155 -0
  86. package/lib/module/theme/color-engine/cam16.js.map +1 -0
  87. package/lib/module/theme/color-engine/color-role.js +177 -0
  88. package/lib/module/theme/color-engine/color-role.js.map +1 -0
  89. package/lib/module/theme/color-engine/color-roles.js +411 -0
  90. package/lib/module/theme/color-engine/color-roles.js.map +1 -0
  91. package/lib/module/theme/color-engine/color-utils.js +135 -0
  92. package/lib/module/theme/color-engine/color-utils.js.map +1 -0
  93. package/lib/module/theme/color-engine/contrast-curve.js +26 -0
  94. package/lib/module/theme/color-engine/contrast-curve.js.map +1 -0
  95. package/lib/module/theme/color-engine/contrast.js +61 -0
  96. package/lib/module/theme/color-engine/contrast.js.map +1 -0
  97. package/lib/module/theme/color-engine/dislike-analyzer.js +20 -0
  98. package/lib/module/theme/color-engine/dislike-analyzer.js.map +1 -0
  99. package/lib/module/theme/color-engine/dynamic-scheme.js +65 -0
  100. package/lib/module/theme/color-engine/dynamic-scheme.js.map +1 -0
  101. package/lib/module/theme/color-engine/hct-solver.js +231 -0
  102. package/lib/module/theme/color-engine/hct-solver.js.map +1 -0
  103. package/lib/module/theme/color-engine/hct.js +61 -0
  104. package/lib/module/theme/color-engine/hct.js.map +1 -0
  105. package/lib/module/theme/color-engine/index.js +57 -0
  106. package/lib/module/theme/color-engine/index.js.map +1 -0
  107. package/lib/module/theme/color-engine/lab-point-provider.js +25 -0
  108. package/lib/module/theme/color-engine/lab-point-provider.js.map +1 -0
  109. package/lib/module/theme/color-engine/math-utils.js +65 -0
  110. package/lib/module/theme/color-engine/math-utils.js.map +1 -0
  111. package/lib/module/theme/color-engine/quantizer-map.js +20 -0
  112. package/lib/module/theme/color-engine/quantizer-map.js.map +1 -0
  113. package/lib/module/theme/color-engine/quantizer-wu.js +261 -0
  114. package/lib/module/theme/color-engine/quantizer-wu.js.map +1 -0
  115. package/lib/module/theme/color-engine/scheme-variants.js +93 -0
  116. package/lib/module/theme/color-engine/scheme-variants.js.map +1 -0
  117. package/lib/module/theme/color-engine/score.js +75 -0
  118. package/lib/module/theme/color-engine/score.js.map +1 -0
  119. package/lib/module/theme/color-engine/seed-from-image.js +67 -0
  120. package/lib/module/theme/color-engine/seed-from-image.js.map +1 -0
  121. package/lib/module/theme/color-engine/tonal-palette.js +89 -0
  122. package/lib/module/theme/color-engine/tonal-palette.js.map +1 -0
  123. package/lib/module/theme/color-engine/tone-delta-pair.js +21 -0
  124. package/lib/module/theme/color-engine/tone-delta-pair.js.map +1 -0
  125. package/lib/module/theme/color-engine/variant.js +22 -0
  126. package/lib/module/theme/color-engine/variant.js.map +1 -0
  127. package/lib/module/theme/color-engine/viewing-conditions.js +55 -0
  128. package/lib/module/theme/color-engine/viewing-conditions.js.map +1 -0
  129. package/lib/module/theme/color-presets.js +44 -572
  130. package/lib/module/theme/color-presets.js.map +1 -1
  131. package/lib/module/theme/preset-vars.js +64 -46
  132. package/lib/module/theme/preset-vars.js.map +1 -1
  133. package/lib/typescript/commonjs/frosted-icon-button/FrostedIconButton.d.ts +5 -0
  134. package/lib/typescript/commonjs/frosted-icon-button/FrostedIconButton.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/frosted-icon-button/FrostedIconButton.web.d.ts +5 -0
  136. package/lib/typescript/commonjs/frosted-icon-button/FrostedIconButton.web.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/frosted-icon-button/index.d.ts +3 -0
  138. package/lib/typescript/commonjs/frosted-icon-button/index.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/frosted-icon-button/index.web.d.ts +3 -0
  140. package/lib/typescript/commonjs/frosted-icon-button/index.web.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/frosted-icon-button/shared.d.ts +60 -0
  142. package/lib/typescript/commonjs/frosted-icon-button/shared.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/frosted-icon-button/types.d.ts +69 -0
  144. package/lib/typescript/commonjs/frosted-icon-button/types.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/index.d.ts +2 -0
  146. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/index.web.d.ts +2 -0
  148. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/theme/build-theme.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/theme/color-engine/cam16.d.ts +26 -0
  151. package/lib/typescript/commonjs/theme/color-engine/cam16.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/theme/color-engine/color-role.d.ts +36 -0
  153. package/lib/typescript/commonjs/theme/color-engine/color-role.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/theme/color-engine/color-roles.d.ts +58 -0
  155. package/lib/typescript/commonjs/theme/color-engine/color-roles.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/theme/color-engine/color-utils.d.ts +32 -0
  157. package/lib/typescript/commonjs/theme/color-engine/color-utils.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/theme/color-engine/contrast-curve.d.ts +9 -0
  159. package/lib/typescript/commonjs/theme/color-engine/contrast-curve.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/theme/color-engine/contrast.d.ts +12 -0
  161. package/lib/typescript/commonjs/theme/color-engine/contrast.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/theme/color-engine/dislike-analyzer.d.ts +11 -0
  163. package/lib/typescript/commonjs/theme/color-engine/dislike-analyzer.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/theme/color-engine/dynamic-scheme.d.ts +47 -0
  165. package/lib/typescript/commonjs/theme/color-engine/dynamic-scheme.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/theme/color-engine/hct-solver.d.ts +6 -0
  167. package/lib/typescript/commonjs/theme/color-engine/hct-solver.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/theme/color-engine/hct.d.ts +20 -0
  169. package/lib/typescript/commonjs/theme/color-engine/hct.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/theme/color-engine/index.d.ts +44 -0
  171. package/lib/typescript/commonjs/theme/color-engine/index.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/theme/color-engine/lab-point-provider.d.ts +6 -0
  173. package/lib/typescript/commonjs/theme/color-engine/lab-point-provider.d.ts.map +1 -0
  174. package/lib/typescript/commonjs/theme/color-engine/math-utils.d.ts +46 -0
  175. package/lib/typescript/commonjs/theme/color-engine/math-utils.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/theme/color-engine/quantizer-map.d.ts +3 -0
  177. package/lib/typescript/commonjs/theme/color-engine/quantizer-map.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/theme/color-engine/quantizer-wu.d.ts +3 -0
  179. package/lib/typescript/commonjs/theme/color-engine/quantizer-wu.d.ts.map +1 -0
  180. package/lib/typescript/commonjs/theme/color-engine/scheme-variants.d.ts +23 -0
  181. package/lib/typescript/commonjs/theme/color-engine/scheme-variants.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/theme/color-engine/score.d.ts +8 -0
  183. package/lib/typescript/commonjs/theme/color-engine/score.d.ts.map +1 -0
  184. package/lib/typescript/commonjs/theme/color-engine/seed-from-image.d.ts +13 -0
  185. package/lib/typescript/commonjs/theme/color-engine/seed-from-image.d.ts.map +1 -0
  186. package/lib/typescript/commonjs/theme/color-engine/tonal-palette.d.ts +24 -0
  187. package/lib/typescript/commonjs/theme/color-engine/tonal-palette.d.ts.map +1 -0
  188. package/lib/typescript/commonjs/theme/color-engine/tone-delta-pair.d.ts +19 -0
  189. package/lib/typescript/commonjs/theme/color-engine/tone-delta-pair.d.ts.map +1 -0
  190. package/lib/typescript/commonjs/theme/color-engine/variant.d.ts +19 -0
  191. package/lib/typescript/commonjs/theme/color-engine/variant.d.ts.map +1 -0
  192. package/lib/typescript/commonjs/theme/color-engine/viewing-conditions.d.ts +18 -0
  193. package/lib/typescript/commonjs/theme/color-engine/viewing-conditions.d.ts.map +1 -0
  194. package/lib/typescript/commonjs/theme/color-presets.d.ts +25 -20
  195. package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
  196. package/lib/typescript/commonjs/theme/preset-vars.d.ts +16 -12
  197. package/lib/typescript/commonjs/theme/preset-vars.d.ts.map +1 -1
  198. package/lib/typescript/module/frosted-icon-button/FrostedIconButton.d.ts +5 -0
  199. package/lib/typescript/module/frosted-icon-button/FrostedIconButton.d.ts.map +1 -0
  200. package/lib/typescript/module/frosted-icon-button/FrostedIconButton.web.d.ts +5 -0
  201. package/lib/typescript/module/frosted-icon-button/FrostedIconButton.web.d.ts.map +1 -0
  202. package/lib/typescript/module/frosted-icon-button/index.d.ts +3 -0
  203. package/lib/typescript/module/frosted-icon-button/index.d.ts.map +1 -0
  204. package/lib/typescript/module/frosted-icon-button/index.web.d.ts +3 -0
  205. package/lib/typescript/module/frosted-icon-button/index.web.d.ts.map +1 -0
  206. package/lib/typescript/module/frosted-icon-button/shared.d.ts +60 -0
  207. package/lib/typescript/module/frosted-icon-button/shared.d.ts.map +1 -0
  208. package/lib/typescript/module/frosted-icon-button/types.d.ts +69 -0
  209. package/lib/typescript/module/frosted-icon-button/types.d.ts.map +1 -0
  210. package/lib/typescript/module/index.d.ts +2 -0
  211. package/lib/typescript/module/index.d.ts.map +1 -1
  212. package/lib/typescript/module/index.web.d.ts +2 -0
  213. package/lib/typescript/module/index.web.d.ts.map +1 -1
  214. package/lib/typescript/module/theme/build-theme.d.ts.map +1 -1
  215. package/lib/typescript/module/theme/color-engine/cam16.d.ts +26 -0
  216. package/lib/typescript/module/theme/color-engine/cam16.d.ts.map +1 -0
  217. package/lib/typescript/module/theme/color-engine/color-role.d.ts +36 -0
  218. package/lib/typescript/module/theme/color-engine/color-role.d.ts.map +1 -0
  219. package/lib/typescript/module/theme/color-engine/color-roles.d.ts +58 -0
  220. package/lib/typescript/module/theme/color-engine/color-roles.d.ts.map +1 -0
  221. package/lib/typescript/module/theme/color-engine/color-utils.d.ts +32 -0
  222. package/lib/typescript/module/theme/color-engine/color-utils.d.ts.map +1 -0
  223. package/lib/typescript/module/theme/color-engine/contrast-curve.d.ts +9 -0
  224. package/lib/typescript/module/theme/color-engine/contrast-curve.d.ts.map +1 -0
  225. package/lib/typescript/module/theme/color-engine/contrast.d.ts +12 -0
  226. package/lib/typescript/module/theme/color-engine/contrast.d.ts.map +1 -0
  227. package/lib/typescript/module/theme/color-engine/dislike-analyzer.d.ts +11 -0
  228. package/lib/typescript/module/theme/color-engine/dislike-analyzer.d.ts.map +1 -0
  229. package/lib/typescript/module/theme/color-engine/dynamic-scheme.d.ts +47 -0
  230. package/lib/typescript/module/theme/color-engine/dynamic-scheme.d.ts.map +1 -0
  231. package/lib/typescript/module/theme/color-engine/hct-solver.d.ts +6 -0
  232. package/lib/typescript/module/theme/color-engine/hct-solver.d.ts.map +1 -0
  233. package/lib/typescript/module/theme/color-engine/hct.d.ts +20 -0
  234. package/lib/typescript/module/theme/color-engine/hct.d.ts.map +1 -0
  235. package/lib/typescript/module/theme/color-engine/index.d.ts +44 -0
  236. package/lib/typescript/module/theme/color-engine/index.d.ts.map +1 -0
  237. package/lib/typescript/module/theme/color-engine/lab-point-provider.d.ts +6 -0
  238. package/lib/typescript/module/theme/color-engine/lab-point-provider.d.ts.map +1 -0
  239. package/lib/typescript/module/theme/color-engine/math-utils.d.ts +46 -0
  240. package/lib/typescript/module/theme/color-engine/math-utils.d.ts.map +1 -0
  241. package/lib/typescript/module/theme/color-engine/quantizer-map.d.ts +3 -0
  242. package/lib/typescript/module/theme/color-engine/quantizer-map.d.ts.map +1 -0
  243. package/lib/typescript/module/theme/color-engine/quantizer-wu.d.ts +3 -0
  244. package/lib/typescript/module/theme/color-engine/quantizer-wu.d.ts.map +1 -0
  245. package/lib/typescript/module/theme/color-engine/scheme-variants.d.ts +23 -0
  246. package/lib/typescript/module/theme/color-engine/scheme-variants.d.ts.map +1 -0
  247. package/lib/typescript/module/theme/color-engine/score.d.ts +8 -0
  248. package/lib/typescript/module/theme/color-engine/score.d.ts.map +1 -0
  249. package/lib/typescript/module/theme/color-engine/seed-from-image.d.ts +13 -0
  250. package/lib/typescript/module/theme/color-engine/seed-from-image.d.ts.map +1 -0
  251. package/lib/typescript/module/theme/color-engine/tonal-palette.d.ts +24 -0
  252. package/lib/typescript/module/theme/color-engine/tonal-palette.d.ts.map +1 -0
  253. package/lib/typescript/module/theme/color-engine/tone-delta-pair.d.ts +19 -0
  254. package/lib/typescript/module/theme/color-engine/tone-delta-pair.d.ts.map +1 -0
  255. package/lib/typescript/module/theme/color-engine/variant.d.ts +19 -0
  256. package/lib/typescript/module/theme/color-engine/variant.d.ts.map +1 -0
  257. package/lib/typescript/module/theme/color-engine/viewing-conditions.d.ts +18 -0
  258. package/lib/typescript/module/theme/color-engine/viewing-conditions.d.ts.map +1 -0
  259. package/lib/typescript/module/theme/color-presets.d.ts +25 -20
  260. package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
  261. package/lib/typescript/module/theme/preset-vars.d.ts +16 -12
  262. package/lib/typescript/module/theme/preset-vars.d.ts.map +1 -1
  263. package/package.json +17 -1
  264. package/src/__tests__/BloomThemeProvider.test.tsx +9 -4
  265. package/src/__tests__/FrostedIconButton.test.tsx +137 -0
  266. package/src/__tests__/FrostedIconButton.web.test.tsx +246 -0
  267. package/src/__tests__/native-root-vars.test.ts +8 -4
  268. package/src/__tests__/preset-vars.test.ts +66 -37
  269. package/src/__tests__/theme.test.ts +20 -12
  270. package/src/frosted-icon-button/FrostedIconButton.stories.tsx +65 -0
  271. package/src/frosted-icon-button/FrostedIconButton.tsx +156 -0
  272. package/src/frosted-icon-button/FrostedIconButton.web.tsx +207 -0
  273. package/src/frosted-icon-button/index.ts +2 -0
  274. package/src/frosted-icon-button/index.web.ts +9 -0
  275. package/src/frosted-icon-button/shared.ts +118 -0
  276. package/src/frosted-icon-button/types.ts +81 -0
  277. package/src/index.ts +2 -0
  278. package/src/index.web.ts +2 -0
  279. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +509 -509
  280. package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +613 -613
  281. package/src/theme/__tests__/color-engine-golden.test.ts +81 -0
  282. package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
  283. package/src/theme/__tests__/golden-tokens.test.ts +6 -7
  284. package/src/theme/__tests__/runtime-contract.test.ts +8 -8
  285. package/src/theme/__tests__/theme-colors-parity.test.ts +44 -88
  286. package/src/theme/build-theme.ts +32 -44
  287. package/src/theme/color-engine/cam16.ts +179 -0
  288. package/src/theme/color-engine/color-role.ts +217 -0
  289. package/src/theme/color-engine/color-roles.ts +435 -0
  290. package/src/theme/color-engine/color-utils.ts +157 -0
  291. package/src/theme/color-engine/contrast-curve.ts +25 -0
  292. package/src/theme/color-engine/contrast.ts +59 -0
  293. package/src/theme/color-engine/dislike-analyzer.ts +19 -0
  294. package/src/theme/color-engine/dynamic-scheme.ts +90 -0
  295. package/src/theme/color-engine/hct-solver.ts +263 -0
  296. package/src/theme/color-engine/hct.ts +69 -0
  297. package/src/theme/color-engine/index.ts +73 -0
  298. package/src/theme/color-engine/lab-point-provider.ts +26 -0
  299. package/src/theme/color-engine/math-utils.ts +69 -0
  300. package/src/theme/color-engine/quantizer-map.ts +17 -0
  301. package/src/theme/color-engine/quantizer-wu.ts +320 -0
  302. package/src/theme/color-engine/scheme-variants.ts +113 -0
  303. package/src/theme/color-engine/score.ts +82 -0
  304. package/src/theme/color-engine/seed-from-image.ts +64 -0
  305. package/src/theme/color-engine/tonal-palette.ts +94 -0
  306. package/src/theme/color-engine/tone-delta-pair.ts +21 -0
  307. package/src/theme/color-engine/variant.ts +18 -0
  308. package/src/theme/color-engine/viewing-conditions.ts +77 -0
  309. package/src/theme/color-presets.ts +54 -631
  310. package/src/theme/preset-vars.ts +65 -49
@@ -1,34 +1,47 @@
1
- export type AppColorName = 'teal' | 'blue' | 'green' | 'amber' | 'yellow' | 'red' | 'purple' | 'pink' | 'sky' | 'orange' | 'mint' | 'oxy' | 'faircoin';
1
+ import type { SchemeVariant } from './color-engine';
2
+
3
+ export type AppColorName =
4
+ | 'teal'
5
+ | 'blue'
6
+ | 'green'
7
+ | 'amber'
8
+ | 'yellow'
9
+ | 'red'
10
+ | 'purple'
11
+ | 'pink'
12
+ | 'sky'
13
+ | 'orange'
14
+ | 'mint'
15
+ | 'oxy'
16
+ | 'faircoin';
2
17
 
3
18
  /**
4
- * Palette tokens for a single mode (light or dark) of a color preset.
19
+ * A single colour preset: a brand SEED colour plus the tonal scheme variant to
20
+ * derive its full role set with.
5
21
  *
6
- * Keys carry a leading `--` for historical reasons (shadcn-style CSS variable
7
- * names) keep in mind the values are platform-agnostic **raw HSL triples**
8
- * (e.g. `'185 100% 20%'` or `'185 100% 20% / 0.5'`), not CSS-resolved colors.
9
- * The single canonical resolver `getResolvedTokens` (in `token-registry.ts`)
10
- * converts this raw map to sRGB `rgb(...)` for every runtime write — the same
11
- * values drive BOTH layers:
12
- * - the web layer: `getResolvedTokens`'s `rgb(...)` strings are written to
13
- * `document.documentElement` / a `BloomColorScope` element, so `var(--x)` —
14
- * the form Tailwind v4 `@theme inline` compiles its color utilities to —
15
- * resolves to a valid color directly, and
16
- * - the native layer (`buildTheme` resolves the raw triples into `hsl(...)`
17
- * strings consumable by React Native styles; `native-root-vars.native.ts`
18
- * writes the same canonical `rgb(...)` values into react-native-css's
19
- * `rootVariables` family).
20
- *
21
- * The `--` prefix is an implementation detail we will drop in a future major.
22
+ * Every preset's palette is now GENERATED by Bloom's dependency-free colour
23
+ * engine (`color-engine/`) from this seed no hand-authored HSL triples. The
24
+ * engine's `generateRoleColors({ seed, variant, isDark })` yields the full
25
+ * Material-3 role set for light and dark; `getPresetVars` (in `preset-vars.ts`)
26
+ * maps those roles onto Bloom's canonical token names. A user-picked colour
27
+ * flows through the identical path — a preset is just a fixed seed.
22
28
  */
23
- export type PresetTokens = Record<string, string>;
24
-
25
29
  export interface AppColorPreset {
26
30
  name: AppColorName;
31
+ /** The brand seed colour, `#rrggbb`. Also the value the colour picker matches. */
27
32
  hex: string;
28
- light: PresetTokens;
29
- dark: PresetTokens;
33
+ /** The tonal scheme variant the engine derives roles with. */
34
+ variant: SchemeVariant;
30
35
  }
31
36
 
37
+ /**
38
+ * Historically each preset carried a full light/dark map of raw HSL triples.
39
+ * That map is gone — the engine derives every role from {@link AppColorPreset.hex}.
40
+ * The type alias is retained for the public `PresetTokens` export shape (the
41
+ * resolved `--token -> value` record that `getPresetVars` produces).
42
+ */
43
+ export type PresetTokens = Record<string, string>;
44
+
32
45
  export const APP_COLOR_NAMES: readonly AppColorName[] = ['teal', 'blue', 'green', 'amber', 'yellow', 'red', 'purple', 'pink', 'sky', 'orange', 'mint', 'oxy', 'faircoin'];
33
46
 
34
47
  /** Premium-exclusive presets, hidden from the standard color picker. */
@@ -54,614 +67,24 @@ export function hexToAppColorName(hex: string): AppColorName {
54
67
  return HEX_TO_APP_COLOR[hex.toLowerCase()] ?? 'teal';
55
68
  }
56
69
 
70
+ /**
71
+ * The 13 named presets, each a brand seed + scheme variant. The engine derives
72
+ * the full role set (light + dark) from the seed. Seeds are the brand hex of
73
+ * each preset; `oxy` reads most faithfully as `vibrant`, everything else keeps a
74
+ * bold `vibrant` derivation to match the prior saturated palette.
75
+ */
57
76
  export const APP_COLOR_PRESETS: Record<AppColorName, AppColorPreset> = {
58
- teal: {
59
- name: 'teal',
60
- hex: '#005c67',
61
- light: {
62
- '--background': '185 55% 96%',
63
- '--foreground': '0 0% 12%',
64
- '--surface': '185 58% 94%',
65
- '--surface-foreground': '0 0% 12%',
66
- '--popover': '185 55% 97%',
67
- '--popover-foreground': '0 0% 12%',
68
- '--primary': '185 100% 20%',
69
- '--primary-foreground': '0 0% 100%',
70
- '--secondary': '185 55% 92%',
71
- '--secondary-foreground': '0 0% 12%',
72
- '--muted': '185 55% 92%',
73
- '--muted-foreground': '185 5% 42%',
74
- '--accent': '185 55% 92%',
75
- '--accent-foreground': '0 0% 12%',
76
- '--destructive': '0 84% 60%',
77
- '--border': '185 40% 87%',
78
- '--input': '185 40% 87%',
79
- '--ring': '185 100% 20%',
80
- '--sidebar': '185 58% 94%',
81
- },
82
- dark: {
83
- '--background': '185 50% 5%',
84
- '--foreground': '0 0% 93%',
85
- '--surface': '185 20% 18%',
86
- '--surface-foreground': '0 0% 93%',
87
- '--popover': '185 20% 18%',
88
- '--popover-foreground': '0 0% 93%',
89
- '--primary': '185 100% 20%',
90
- '--primary-foreground': '0 0% 100%',
91
- '--secondary': '185 20% 18%',
92
- '--secondary-foreground': '0 0% 93%',
93
- '--muted': '185 18% 20%',
94
- '--muted-foreground': '0 0% 70%',
95
- '--accent': '185 18% 20%',
96
- '--accent-foreground': '0 0% 93%',
97
- '--destructive': '0 84% 60%',
98
- '--border': '185 12% 20%',
99
- '--input': '185 10% 23%',
100
- '--ring': '185 100% 20%',
101
- '--sidebar': '185 30% 8%',
102
- },
103
- },
104
-
105
- blue: {
106
- name: 'blue',
107
- hex: '#1D9BF0',
108
- light: {
109
- '--background': '205 55% 96%',
110
- '--foreground': '0 0% 12%',
111
- '--surface': '205 58% 94%',
112
- '--surface-foreground': '0 0% 12%',
113
- '--popover': '205 55% 97%',
114
- '--popover-foreground': '0 0% 12%',
115
- '--primary': '205 87% 53%',
116
- '--primary-foreground': '0 0% 100%',
117
- '--secondary': '205 55% 92%',
118
- '--secondary-foreground': '0 0% 12%',
119
- '--muted': '205 55% 92%',
120
- '--muted-foreground': '205 5% 42%',
121
- '--accent': '205 55% 92%',
122
- '--accent-foreground': '0 0% 12%',
123
- '--destructive': '0 84% 60%',
124
- '--border': '205 40% 87%',
125
- '--input': '205 40% 87%',
126
- '--ring': '205 87% 53%',
127
- '--sidebar': '205 58% 94%',
128
- },
129
- dark: {
130
- '--background': '205 50% 5%',
131
- '--foreground': '0 0% 93%',
132
- '--surface': '205 20% 18%',
133
- '--surface-foreground': '0 0% 93%',
134
- '--popover': '205 20% 18%',
135
- '--popover-foreground': '0 0% 93%',
136
- '--primary': '205 87% 53%',
137
- '--primary-foreground': '0 0% 100%',
138
- '--secondary': '205 20% 18%',
139
- '--secondary-foreground': '0 0% 93%',
140
- '--muted': '205 18% 20%',
141
- '--muted-foreground': '0 0% 70%',
142
- '--accent': '205 18% 20%',
143
- '--accent-foreground': '0 0% 93%',
144
- '--destructive': '0 84% 60%',
145
- '--border': '205 12% 20%',
146
- '--input': '205 10% 23%',
147
- '--ring': '205 87% 53%',
148
- '--sidebar': '205 30% 8%',
149
- },
150
- },
151
-
152
- green: {
153
- name: 'green',
154
- hex: '#10B981',
155
- light: {
156
- '--background': '160 55% 96%',
157
- '--foreground': '0 0% 12%',
158
- '--surface': '160 58% 94%',
159
- '--surface-foreground': '0 0% 12%',
160
- '--popover': '160 55% 97%',
161
- '--popover-foreground': '0 0% 12%',
162
- '--primary': '160 84% 39%',
163
- '--primary-foreground': '0 0% 100%',
164
- '--secondary': '160 55% 92%',
165
- '--secondary-foreground': '0 0% 12%',
166
- '--muted': '160 55% 92%',
167
- '--muted-foreground': '160 5% 42%',
168
- '--accent': '160 55% 92%',
169
- '--accent-foreground': '0 0% 12%',
170
- '--destructive': '0 84% 60%',
171
- '--border': '160 40% 87%',
172
- '--input': '160 40% 87%',
173
- '--ring': '160 84% 39%',
174
- '--sidebar': '160 58% 94%',
175
- },
176
- dark: {
177
- '--background': '160 50% 5%',
178
- '--foreground': '0 0% 93%',
179
- '--surface': '160 20% 18%',
180
- '--surface-foreground': '0 0% 93%',
181
- '--popover': '160 20% 18%',
182
- '--popover-foreground': '0 0% 93%',
183
- '--primary': '160 84% 39%',
184
- '--primary-foreground': '0 0% 100%',
185
- '--secondary': '160 20% 18%',
186
- '--secondary-foreground': '0 0% 93%',
187
- '--muted': '160 18% 20%',
188
- '--muted-foreground': '0 0% 70%',
189
- '--accent': '160 18% 20%',
190
- '--accent-foreground': '0 0% 93%',
191
- '--destructive': '0 84% 60%',
192
- '--border': '160 12% 20%',
193
- '--input': '160 10% 23%',
194
- '--ring': '160 84% 39%',
195
- '--sidebar': '160 30% 8%',
196
- },
197
- },
198
-
199
- amber: {
200
- name: 'amber',
201
- hex: '#F59E0B',
202
- light: {
203
- '--background': '38 55% 96%',
204
- '--foreground': '0 0% 12%',
205
- '--surface': '38 58% 94%',
206
- '--surface-foreground': '0 0% 12%',
207
- '--popover': '38 55% 97%',
208
- '--popover-foreground': '0 0% 12%',
209
- '--primary': '38 92% 50%',
210
- '--primary-foreground': '0 0% 0%',
211
- '--secondary': '38 55% 92%',
212
- '--secondary-foreground': '0 0% 12%',
213
- '--muted': '38 55% 92%',
214
- '--muted-foreground': '38 5% 42%',
215
- '--accent': '38 55% 92%',
216
- '--accent-foreground': '0 0% 12%',
217
- '--destructive': '0 84% 60%',
218
- '--border': '38 40% 87%',
219
- '--input': '38 40% 87%',
220
- '--ring': '38 92% 50%',
221
- '--sidebar': '38 58% 94%',
222
- },
223
- dark: {
224
- '--background': '38 50% 5%',
225
- '--foreground': '0 0% 93%',
226
- '--surface': '38 20% 18%',
227
- '--surface-foreground': '0 0% 93%',
228
- '--popover': '38 20% 18%',
229
- '--popover-foreground': '0 0% 93%',
230
- '--primary': '38 92% 50%',
231
- '--primary-foreground': '0 0% 0%',
232
- '--secondary': '38 20% 18%',
233
- '--secondary-foreground': '0 0% 93%',
234
- '--muted': '38 18% 20%',
235
- '--muted-foreground': '0 0% 70%',
236
- '--accent': '38 18% 20%',
237
- '--accent-foreground': '0 0% 93%',
238
- '--destructive': '0 84% 60%',
239
- '--border': '38 12% 20%',
240
- '--input': '38 10% 23%',
241
- '--ring': '38 92% 50%',
242
- '--sidebar': '38 30% 8%',
243
- },
244
- },
245
-
246
- yellow: {
247
- name: 'yellow',
248
- hex: '#ffc300',
249
- light: {
250
- '--background': '46 55% 96%',
251
- '--foreground': '0 0% 12%',
252
- '--surface': '46 58% 94%',
253
- '--surface-foreground': '0 0% 12%',
254
- '--popover': '46 55% 97%',
255
- '--popover-foreground': '0 0% 12%',
256
- '--primary': '46 100% 50%',
257
- '--primary-foreground': '0 0% 0%',
258
- '--secondary': '46 55% 92%',
259
- '--secondary-foreground': '0 0% 12%',
260
- '--muted': '46 55% 92%',
261
- '--muted-foreground': '46 5% 42%',
262
- '--accent': '46 55% 92%',
263
- '--accent-foreground': '0 0% 12%',
264
- '--destructive': '0 84% 60%',
265
- '--border': '46 40% 87%',
266
- '--input': '46 40% 87%',
267
- '--ring': '46 100% 50%',
268
- '--sidebar': '46 58% 94%',
269
- },
270
- dark: {
271
- '--background': '46 50% 5%',
272
- '--foreground': '0 0% 93%',
273
- '--surface': '46 20% 18%',
274
- '--surface-foreground': '0 0% 93%',
275
- '--popover': '46 20% 18%',
276
- '--popover-foreground': '0 0% 93%',
277
- '--primary': '46 100% 50%',
278
- '--primary-foreground': '0 0% 0%',
279
- '--secondary': '46 20% 18%',
280
- '--secondary-foreground': '0 0% 93%',
281
- '--muted': '46 18% 20%',
282
- '--muted-foreground': '0 0% 70%',
283
- '--accent': '46 18% 20%',
284
- '--accent-foreground': '0 0% 93%',
285
- '--destructive': '0 84% 60%',
286
- '--border': '46 12% 20%',
287
- '--input': '46 10% 23%',
288
- '--ring': '46 100% 50%',
289
- '--sidebar': '46 30% 8%',
290
- },
291
- },
292
-
293
- red: {
294
- name: 'red',
295
- hex: '#EF4444',
296
- light: {
297
- '--background': '0 55% 96%',
298
- '--foreground': '0 0% 12%',
299
- '--surface': '0 58% 94%',
300
- '--surface-foreground': '0 0% 12%',
301
- '--popover': '0 55% 97%',
302
- '--popover-foreground': '0 0% 12%',
303
- '--primary': '0 84% 60%',
304
- '--primary-foreground': '0 0% 100%',
305
- '--secondary': '0 55% 92%',
306
- '--secondary-foreground': '0 0% 12%',
307
- '--muted': '0 55% 92%',
308
- '--muted-foreground': '0 5% 42%',
309
- '--accent': '0 55% 92%',
310
- '--accent-foreground': '0 0% 12%',
311
- '--destructive': '0 84% 60%',
312
- '--border': '0 40% 87%',
313
- '--input': '0 40% 87%',
314
- '--ring': '0 84% 60%',
315
- '--sidebar': '0 58% 94%',
316
- },
317
- dark: {
318
- '--background': '0 50% 5%',
319
- '--foreground': '0 0% 93%',
320
- '--surface': '0 20% 18%',
321
- '--surface-foreground': '0 0% 93%',
322
- '--popover': '0 20% 18%',
323
- '--popover-foreground': '0 0% 93%',
324
- '--primary': '0 84% 60%',
325
- '--primary-foreground': '0 0% 100%',
326
- '--secondary': '0 20% 18%',
327
- '--secondary-foreground': '0 0% 93%',
328
- '--muted': '0 18% 20%',
329
- '--muted-foreground': '0 0% 70%',
330
- '--accent': '0 18% 20%',
331
- '--accent-foreground': '0 0% 93%',
332
- '--destructive': '0 84% 60%',
333
- '--border': '0 12% 20%',
334
- '--input': '0 10% 23%',
335
- '--ring': '0 84% 60%',
336
- '--sidebar': '0 30% 8%',
337
- },
338
- },
339
-
340
- purple: {
341
- name: 'purple',
342
- hex: '#8B5CF6',
343
- light: {
344
- '--background': '258 55% 96%',
345
- '--foreground': '0 0% 12%',
346
- '--surface': '258 58% 94%',
347
- '--surface-foreground': '0 0% 12%',
348
- '--popover': '258 55% 97%',
349
- '--popover-foreground': '0 0% 12%',
350
- '--primary': '258 90% 66%',
351
- '--primary-foreground': '0 0% 100%',
352
- '--secondary': '258 55% 92%',
353
- '--secondary-foreground': '0 0% 12%',
354
- '--muted': '258 55% 92%',
355
- '--muted-foreground': '258 5% 42%',
356
- '--accent': '258 55% 92%',
357
- '--accent-foreground': '0 0% 12%',
358
- '--destructive': '0 84% 60%',
359
- '--border': '258 40% 87%',
360
- '--input': '258 40% 87%',
361
- '--ring': '258 90% 66%',
362
- '--sidebar': '258 58% 94%',
363
- },
364
- dark: {
365
- '--background': '258 50% 5%',
366
- '--foreground': '0 0% 93%',
367
- '--surface': '258 20% 18%',
368
- '--surface-foreground': '0 0% 93%',
369
- '--popover': '258 20% 18%',
370
- '--popover-foreground': '0 0% 93%',
371
- '--primary': '258 90% 66%',
372
- '--primary-foreground': '0 0% 100%',
373
- '--secondary': '258 20% 18%',
374
- '--secondary-foreground': '0 0% 93%',
375
- '--muted': '258 18% 20%',
376
- '--muted-foreground': '0 0% 70%',
377
- '--accent': '258 18% 20%',
378
- '--accent-foreground': '0 0% 93%',
379
- '--destructive': '0 84% 60%',
380
- '--border': '258 12% 20%',
381
- '--input': '258 10% 23%',
382
- '--ring': '258 90% 66%',
383
- '--sidebar': '258 30% 8%',
384
- },
385
- },
386
-
387
- pink: {
388
- name: 'pink',
389
- hex: '#EC4899',
390
- light: {
391
- '--background': '330 55% 96%',
392
- '--foreground': '0 0% 12%',
393
- '--surface': '330 58% 94%',
394
- '--surface-foreground': '0 0% 12%',
395
- '--popover': '330 55% 97%',
396
- '--popover-foreground': '0 0% 12%',
397
- '--primary': '330 81% 60%',
398
- '--primary-foreground': '0 0% 100%',
399
- '--secondary': '330 55% 92%',
400
- '--secondary-foreground': '0 0% 12%',
401
- '--muted': '330 55% 92%',
402
- '--muted-foreground': '330 5% 42%',
403
- '--accent': '330 55% 92%',
404
- '--accent-foreground': '0 0% 12%',
405
- '--destructive': '0 84% 60%',
406
- '--border': '330 40% 87%',
407
- '--input': '330 40% 87%',
408
- '--ring': '330 81% 60%',
409
- '--sidebar': '330 58% 94%',
410
- },
411
- dark: {
412
- '--background': '330 50% 5%',
413
- '--foreground': '0 0% 93%',
414
- '--surface': '330 20% 18%',
415
- '--surface-foreground': '0 0% 93%',
416
- '--popover': '330 20% 18%',
417
- '--popover-foreground': '0 0% 93%',
418
- '--primary': '330 81% 60%',
419
- '--primary-foreground': '0 0% 100%',
420
- '--secondary': '330 20% 18%',
421
- '--secondary-foreground': '0 0% 93%',
422
- '--muted': '330 18% 20%',
423
- '--muted-foreground': '0 0% 70%',
424
- '--accent': '330 18% 20%',
425
- '--accent-foreground': '0 0% 93%',
426
- '--destructive': '0 84% 60%',
427
- '--border': '330 12% 20%',
428
- '--input': '330 10% 23%',
429
- '--ring': '330 81% 60%',
430
- '--sidebar': '330 30% 8%',
431
- },
432
- },
433
-
434
- sky: {
435
- name: 'sky',
436
- hex: '#0EA5E9',
437
- light: {
438
- '--background': '199 55% 96%',
439
- '--foreground': '0 0% 12%',
440
- '--surface': '199 58% 94%',
441
- '--surface-foreground': '0 0% 12%',
442
- '--popover': '199 55% 97%',
443
- '--popover-foreground': '0 0% 12%',
444
- '--primary': '199 89% 48%',
445
- '--primary-foreground': '0 0% 100%',
446
- '--secondary': '199 55% 92%',
447
- '--secondary-foreground': '0 0% 12%',
448
- '--muted': '199 55% 92%',
449
- '--muted-foreground': '199 5% 42%',
450
- '--accent': '199 55% 92%',
451
- '--accent-foreground': '0 0% 12%',
452
- '--destructive': '0 84% 60%',
453
- '--border': '199 40% 87%',
454
- '--input': '199 40% 87%',
455
- '--ring': '199 89% 48%',
456
- '--sidebar': '199 58% 94%',
457
- },
458
- dark: {
459
- '--background': '199 50% 5%',
460
- '--foreground': '0 0% 93%',
461
- '--surface': '199 20% 18%',
462
- '--surface-foreground': '0 0% 93%',
463
- '--popover': '199 20% 18%',
464
- '--popover-foreground': '0 0% 93%',
465
- '--primary': '199 89% 48%',
466
- '--primary-foreground': '0 0% 100%',
467
- '--secondary': '199 20% 18%',
468
- '--secondary-foreground': '0 0% 93%',
469
- '--muted': '199 18% 20%',
470
- '--muted-foreground': '0 0% 70%',
471
- '--accent': '199 18% 20%',
472
- '--accent-foreground': '0 0% 93%',
473
- '--destructive': '0 84% 60%',
474
- '--border': '199 12% 20%',
475
- '--input': '199 10% 23%',
476
- '--ring': '199 89% 48%',
477
- '--sidebar': '199 30% 8%',
478
- },
479
- },
480
-
481
- orange: {
482
- name: 'orange',
483
- hex: '#F97316',
484
- light: {
485
- '--background': '25 55% 96%',
486
- '--foreground': '0 0% 12%',
487
- '--surface': '25 58% 94%',
488
- '--surface-foreground': '0 0% 12%',
489
- '--popover': '25 55% 97%',
490
- '--popover-foreground': '0 0% 12%',
491
- '--primary': '25 95% 53%',
492
- '--primary-foreground': '0 0% 100%',
493
- '--secondary': '25 55% 92%',
494
- '--secondary-foreground': '0 0% 12%',
495
- '--muted': '25 55% 92%',
496
- '--muted-foreground': '25 5% 42%',
497
- '--accent': '25 55% 92%',
498
- '--accent-foreground': '0 0% 12%',
499
- '--destructive': '0 84% 60%',
500
- '--border': '25 40% 87%',
501
- '--input': '25 40% 87%',
502
- '--ring': '25 95% 53%',
503
- '--sidebar': '25 58% 94%',
504
- },
505
- dark: {
506
- '--background': '25 50% 5%',
507
- '--foreground': '0 0% 93%',
508
- '--surface': '25 20% 18%',
509
- '--surface-foreground': '0 0% 93%',
510
- '--popover': '25 20% 18%',
511
- '--popover-foreground': '0 0% 93%',
512
- '--primary': '25 95% 53%',
513
- '--primary-foreground': '0 0% 100%',
514
- '--secondary': '25 20% 18%',
515
- '--secondary-foreground': '0 0% 93%',
516
- '--muted': '25 18% 20%',
517
- '--muted-foreground': '0 0% 70%',
518
- '--accent': '25 18% 20%',
519
- '--accent-foreground': '0 0% 93%',
520
- '--destructive': '0 84% 60%',
521
- '--border': '25 12% 20%',
522
- '--input': '25 10% 23%',
523
- '--ring': '25 95% 53%',
524
- '--sidebar': '25 30% 8%',
525
- },
526
- },
527
-
528
- mint: {
529
- name: 'mint',
530
- hex: '#14B8A6',
531
- light: {
532
- '--background': '173 55% 96%',
533
- '--foreground': '0 0% 12%',
534
- '--surface': '173 58% 94%',
535
- '--surface-foreground': '0 0% 12%',
536
- '--popover': '173 55% 97%',
537
- '--popover-foreground': '0 0% 12%',
538
- '--primary': '173 80% 40%',
539
- '--primary-foreground': '0 0% 100%',
540
- '--secondary': '173 55% 92%',
541
- '--secondary-foreground': '0 0% 12%',
542
- '--muted': '173 55% 92%',
543
- '--muted-foreground': '173 5% 42%',
544
- '--accent': '173 55% 92%',
545
- '--accent-foreground': '0 0% 12%',
546
- '--destructive': '0 84% 60%',
547
- '--border': '173 40% 87%',
548
- '--input': '173 40% 87%',
549
- '--ring': '173 80% 40%',
550
- '--sidebar': '173 58% 94%',
551
- },
552
- dark: {
553
- '--background': '173 50% 5%',
554
- '--foreground': '0 0% 93%',
555
- '--surface': '173 20% 18%',
556
- '--surface-foreground': '0 0% 93%',
557
- '--popover': '173 20% 18%',
558
- '--popover-foreground': '0 0% 93%',
559
- '--primary': '173 80% 40%',
560
- '--primary-foreground': '0 0% 100%',
561
- '--secondary': '173 20% 18%',
562
- '--secondary-foreground': '0 0% 93%',
563
- '--muted': '173 18% 20%',
564
- '--muted-foreground': '0 0% 70%',
565
- '--accent': '173 18% 20%',
566
- '--accent-foreground': '0 0% 93%',
567
- '--destructive': '0 84% 60%',
568
- '--border': '173 12% 20%',
569
- '--input': '173 10% 23%',
570
- '--ring': '173 80% 40%',
571
- '--sidebar': '173 30% 8%',
572
- },
573
- },
574
-
575
- oxy: {
576
- name: 'oxy',
577
- hex: '#c46ede',
578
- light: {
579
- '--background': '277 55% 96%',
580
- '--foreground': '0 0% 12%',
581
- '--surface': '277 58% 94%',
582
- '--surface-foreground': '0 0% 12%',
583
- '--popover': '277 55% 97%',
584
- '--popover-foreground': '0 0% 12%',
585
- '--primary': '277 66% 56%',
586
- '--primary-foreground': '0 0% 100%',
587
- '--secondary': '277 55% 92%',
588
- '--secondary-foreground': '0 0% 12%',
589
- '--muted': '277 55% 92%',
590
- '--muted-foreground': '277 5% 42%',
591
- '--accent': '277 55% 92%',
592
- '--accent-foreground': '0 0% 12%',
593
- '--destructive': '0 84% 60%',
594
- '--border': '277 40% 87%',
595
- '--input': '277 40% 87%',
596
- '--ring': '277 66% 56%',
597
- '--sidebar': '277 58% 94%',
598
- },
599
- dark: {
600
- '--background': '277 50% 5%',
601
- '--foreground': '0 0% 93%',
602
- '--surface': '277 20% 18%',
603
- '--surface-foreground': '0 0% 93%',
604
- '--popover': '277 20% 18%',
605
- '--popover-foreground': '0 0% 93%',
606
- '--primary': '277 66% 56%',
607
- '--primary-foreground': '0 0% 100%',
608
- '--secondary': '277 20% 18%',
609
- '--secondary-foreground': '0 0% 93%',
610
- '--muted': '277 18% 20%',
611
- '--muted-foreground': '0 0% 70%',
612
- '--accent': '277 18% 20%',
613
- '--accent-foreground': '0 0% 93%',
614
- '--destructive': '0 84% 60%',
615
- '--border': '277 12% 20%',
616
- '--input': '277 10% 23%',
617
- '--ring': '277 66% 56%',
618
- '--sidebar': '277 30% 8%',
619
- },
620
- },
621
- faircoin: {
622
- name: 'faircoin',
623
- hex: '#9ffb50',
624
- light: {
625
- '--background': '92 55% 96%',
626
- '--foreground': '0 0% 12%',
627
- '--surface': '92 58% 94%',
628
- '--surface-foreground': '0 0% 12%',
629
- '--popover': '92 55% 97%',
630
- '--popover-foreground': '0 0% 12%',
631
- '--primary': '92 90% 25%',
632
- '--primary-foreground': '0 0% 100%',
633
- '--secondary': '92 55% 92%',
634
- '--secondary-foreground': '0 0% 12%',
635
- '--muted': '92 55% 92%',
636
- '--muted-foreground': '92 5% 40%',
637
- '--accent': '92 55% 92%',
638
- '--accent-foreground': '0 0% 12%',
639
- '--destructive': '0 84% 60%',
640
- '--border': '92 40% 87%',
641
- '--input': '92 40% 87%',
642
- '--ring': '92 90% 25%',
643
- '--sidebar': '92 58% 94%',
644
- },
645
- dark: {
646
- '--background': '69 54% 8%',
647
- '--foreground': '0 0% 93%',
648
- '--surface': '69 30% 13%',
649
- '--surface-foreground': '0 0% 93%',
650
- '--popover': '69 30% 13%',
651
- '--popover-foreground': '0 0% 93%',
652
- '--primary': '92 96% 65%',
653
- '--primary-foreground': '0 0% 0%',
654
- '--secondary': '69 20% 15%',
655
- '--secondary-foreground': '0 0% 93%',
656
- '--muted': '69 18% 16%',
657
- '--muted-foreground': '0 0% 46%',
658
- '--accent': '69 18% 16%',
659
- '--accent-foreground': '0 0% 93%',
660
- '--destructive': '0 84% 60%',
661
- '--border': '69 20% 18%',
662
- '--input': '69 15% 20%',
663
- '--ring': '92 96% 65%',
664
- '--sidebar': '69 40% 6%',
665
- },
666
- },
77
+ teal: { name: 'teal', hex: '#005c67', variant: 'vibrant' },
78
+ blue: { name: 'blue', hex: '#1d9bf0', variant: 'vibrant' },
79
+ green: { name: 'green', hex: '#10b981', variant: 'vibrant' },
80
+ amber: { name: 'amber', hex: '#f59e0b', variant: 'vibrant' },
81
+ yellow: { name: 'yellow', hex: '#ffc300', variant: 'vibrant' },
82
+ red: { name: 'red', hex: '#ef4444', variant: 'vibrant' },
83
+ purple: { name: 'purple', hex: '#8b5cf6', variant: 'vibrant' },
84
+ pink: { name: 'pink', hex: '#ec4899', variant: 'vibrant' },
85
+ sky: { name: 'sky', hex: '#0ea5e9', variant: 'vibrant' },
86
+ orange: { name: 'orange', hex: '#f97316', variant: 'vibrant' },
87
+ mint: { name: 'mint', hex: '#14b8a6', variant: 'vibrant' },
88
+ oxy: { name: 'oxy', hex: '#c46ede', variant: 'vibrant' },
89
+ faircoin: { name: 'faircoin', hex: '#9ffb50', variant: 'vibrant' },
667
90
  };