@atlaskit/tokens 13.0.2 → 13.0.4

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 (263) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/codemods/css-to-design-tokens/lib/meta.tsx +1 -1
  3. package/codemods/css-to-design-tokens/lib/tokens.tsx +1 -1
  4. package/codemods/theme-to-design-tokens/transform.tsx +16 -14
  5. package/codemods/theme-to-design-tokens/utils/ast-meta.tsx +2 -151
  6. package/codemods/theme-to-design-tokens/utils/ast.tsx +3 -35
  7. package/codemods/theme-to-design-tokens/utils/clean-meta.tsx +63 -0
  8. package/codemods/theme-to-design-tokens/utils/color.tsx +3 -11
  9. package/codemods/theme-to-design-tokens/utils/contains-replaceable-css-declarations.tsx +13 -0
  10. package/codemods/theme-to-design-tokens/utils/css-utils.tsx +2 -35
  11. package/codemods/theme-to-design-tokens/utils/find-end-index-of-css-expression.tsx +21 -0
  12. package/codemods/theme-to-design-tokens/utils/find-first-nonspace-index-after.tsx +9 -0
  13. package/codemods/theme-to-design-tokens/utils/get-closest-decendant-of-type.tsx +10 -0
  14. package/codemods/theme-to-design-tokens/utils/get-meta-from-ancestors.tsx +87 -0
  15. package/codemods/theme-to-design-tokens/utils/is-bold-color.tsx +4 -0
  16. package/codemods/theme-to-design-tokens/utils/is-decendant-of-token.tsx +14 -0
  17. package/codemods/theme-to-design-tokens/utils/is-legacy-color.tsx +4 -0
  18. package/codemods/theme-to-design-tokens/utils/is-legacy-named-color.tsx +4 -0
  19. package/codemods/theme-to-design-tokens/utils/is-parent-of-token.tsx +13 -0
  20. package/codemods/theme-to-design-tokens/utils/kebabize.tsx +2 -0
  21. package/codemods/theme-to-design-tokens/utils/legacy-color-meta-map.tsx +88 -0
  22. package/codemods/theme-to-design-tokens/utils/legacy-color-mixins.tsx +26 -0
  23. package/codemods/theme-to-design-tokens/utils/legacy-colors.tsx +2 -115
  24. package/codemods/theme-to-design-tokens/utils/split-at-index.tsx +3 -0
  25. package/codemods/theme-to-design-tokens/utils/string-utils.tsx +3 -16
  26. package/codemods/utils/active-tokens.tsx +284 -0
  27. package/codemods/utils/tokens.tsx +2 -376
  28. package/codemods/utils/unique-words-from-tokens.tsx +91 -0
  29. package/dist/cjs/artifacts/replacement-mapping.js +5 -2
  30. package/dist/cjs/artifacts/tokens-raw/atlassian-motion.js +3 -3
  31. package/dist/cjs/custom-theme.js +10 -60
  32. package/dist/cjs/entry-points/token-metadata.codegen.js +1 -10
  33. package/dist/cjs/get-custom-theme-styles.js +57 -0
  34. package/dist/cjs/get-global-theme.js +2 -2
  35. package/dist/cjs/get-theme-html-attrs.js +2 -2
  36. package/dist/cjs/get-theme-styles.js +6 -5
  37. package/dist/cjs/load-custom-theme-styles.js +2 -2
  38. package/dist/cjs/set-global-theme.js +4 -3
  39. package/dist/cjs/theme-color-modes.js +13 -0
  40. package/dist/cjs/theme-config.js +19 -16
  41. package/dist/cjs/theme-ids.js +13 -0
  42. package/dist/cjs/theme-state-transformer.js +2 -2
  43. package/dist/cjs/utils/color-detection.js +9 -12
  44. package/dist/cjs/utils/color-utils.js +38 -47
  45. package/dist/cjs/utils/custom-theme-loading-utils.js +7 -11
  46. package/dist/cjs/utils/generate-custom-color-ramp.js +16 -19
  47. package/dist/cjs/utils/get-alpha.js +13 -0
  48. package/dist/cjs/utils/get-closest-color-index.js +20 -0
  49. package/dist/cjs/utils/get-css-custom-property.js +32 -0
  50. package/dist/cjs/utils/get-fully-qualified-token-id.js +19 -0
  51. package/dist/cjs/utils/get-theme-override-preferences.js +12 -0
  52. package/dist/cjs/utils/get-theme-preferences.js +8 -5
  53. package/dist/cjs/utils/get-token-id.js +26 -0
  54. package/dist/cjs/utils/hct-color-utils/argb-from-rgb.js +12 -0
  55. package/dist/cjs/utils/hct-color-utils/clamp-double.js +20 -0
  56. package/dist/cjs/utils/hct-color-utils/clamp-int.js +20 -0
  57. package/dist/cjs/utils/hct-color-utils/color-utils.js +34 -59
  58. package/dist/cjs/utils/hct-color-utils/delinearized.js +27 -0
  59. package/dist/cjs/utils/hct-color-utils/hct.js +19 -95
  60. package/dist/cjs/utils/hct-color-utils/lerp.js +14 -0
  61. package/dist/cjs/utils/hct-color-utils/linearized.js +22 -0
  62. package/dist/cjs/utils/hct-color-utils/math-utils.js +38 -107
  63. package/dist/cjs/utils/hct-color-utils/matrix-multiply.js +15 -0
  64. package/dist/cjs/utils/hct-color-utils/sanitize-degrees-double.js +19 -0
  65. package/dist/cjs/utils/hct-color-utils/signum.js +20 -0
  66. package/dist/cjs/utils/hct-color-utils/viewing-conditions.js +98 -0
  67. package/dist/cjs/utils/hex-to-rgba-values.js +15 -0
  68. package/dist/cjs/utils/hsl-to-rgb.js +18 -0
  69. package/dist/cjs/utils/is-valid-brand-hex.js +9 -0
  70. package/dist/cjs/utils/limit-size-of-custom-style-elements.js +16 -0
  71. package/dist/cjs/utils/load-theme-css.js +32 -0
  72. package/dist/cjs/utils/relative-luminance-w3-c.js +18 -0
  73. package/dist/cjs/utils/rgb-to-hex.js +9 -0
  74. package/dist/cjs/utils/theme-loading.js +10 -25
  75. package/dist/cjs/utils/token-ids.js +21 -62
  76. package/dist/es2019/artifacts/replacement-mapping.js +5 -2
  77. package/dist/es2019/artifacts/tokens-raw/atlassian-motion.js +3 -3
  78. package/dist/es2019/custom-theme.js +4 -66
  79. package/dist/es2019/entry-points/token-metadata.codegen.js +1 -10
  80. package/dist/es2019/get-custom-theme-styles.js +60 -0
  81. package/dist/es2019/get-global-theme.js +1 -1
  82. package/dist/es2019/get-theme-html-attrs.js +1 -1
  83. package/dist/es2019/get-theme-styles.js +4 -3
  84. package/dist/es2019/load-custom-theme-styles.js +1 -1
  85. package/dist/es2019/set-global-theme.js +3 -2
  86. package/dist/es2019/theme-color-modes.js +7 -0
  87. package/dist/es2019/theme-config.js +4 -16
  88. package/dist/es2019/theme-ids.js +7 -0
  89. package/dist/es2019/theme-state-transformer.js +1 -1
  90. package/dist/es2019/utils/color-detection.js +3 -11
  91. package/dist/es2019/utils/color-utils.js +8 -34
  92. package/dist/es2019/utils/custom-theme-loading-utils.js +2 -8
  93. package/dist/es2019/utils/generate-custom-color-ramp.js +7 -15
  94. package/dist/es2019/utils/get-alpha.js +7 -0
  95. package/dist/es2019/utils/get-closest-color-index.js +14 -0
  96. package/dist/es2019/utils/get-css-custom-property.js +23 -0
  97. package/dist/es2019/utils/get-fully-qualified-token-id.js +11 -0
  98. package/dist/es2019/utils/get-theme-override-preferences.js +4 -0
  99. package/dist/es2019/utils/get-theme-preferences.js +1 -4
  100. package/dist/es2019/utils/get-token-id.js +18 -0
  101. package/dist/es2019/utils/hct-color-utils/argb-from-rgb.js +6 -0
  102. package/dist/es2019/utils/hct-color-utils/clamp-double.js +14 -0
  103. package/dist/es2019/utils/hct-color-utils/clamp-int.js +14 -0
  104. package/dist/es2019/utils/hct-color-utils/color-utils.js +7 -45
  105. package/dist/es2019/utils/hct-color-utils/delinearized.js +20 -0
  106. package/dist/es2019/utils/hct-color-utils/hct.js +3 -76
  107. package/dist/es2019/utils/hct-color-utils/lerp.js +8 -0
  108. package/dist/es2019/utils/hct-color-utils/linearized.js +16 -0
  109. package/dist/es2019/utils/hct-color-utils/math-utils.js +6 -105
  110. package/dist/es2019/utils/hct-color-utils/matrix-multiply.js +9 -0
  111. package/dist/es2019/utils/hct-color-utils/sanitize-degrees-double.js +13 -0
  112. package/dist/es2019/utils/hct-color-utils/signum.js +14 -0
  113. package/dist/es2019/utils/hct-color-utils/viewing-conditions.js +78 -0
  114. package/dist/es2019/utils/hex-to-rgba-values.js +9 -0
  115. package/dist/es2019/utils/hsl-to-rgb.js +8 -0
  116. package/dist/es2019/utils/is-valid-brand-hex.js +1 -0
  117. package/dist/es2019/utils/limit-size-of-custom-style-elements.js +8 -0
  118. package/dist/es2019/utils/load-theme-css.js +7 -0
  119. package/dist/es2019/utils/relative-luminance-w3-c.js +12 -0
  120. package/dist/es2019/utils/rgb-to-hex.js +3 -0
  121. package/dist/es2019/utils/theme-loading.js +3 -8
  122. package/dist/es2019/utils/token-ids.js +3 -54
  123. package/dist/esm/artifacts/replacement-mapping.js +5 -2
  124. package/dist/esm/artifacts/tokens-raw/atlassian-motion.js +3 -3
  125. package/dist/esm/custom-theme.js +4 -58
  126. package/dist/esm/entry-points/token-metadata.codegen.js +1 -10
  127. package/dist/esm/get-custom-theme-styles.js +52 -0
  128. package/dist/esm/get-global-theme.js +1 -1
  129. package/dist/esm/get-theme-html-attrs.js +1 -1
  130. package/dist/esm/get-theme-styles.js +4 -3
  131. package/dist/esm/load-custom-theme-styles.js +1 -1
  132. package/dist/esm/set-global-theme.js +3 -2
  133. package/dist/esm/theme-color-modes.js +7 -0
  134. package/dist/esm/theme-config.js +6 -17
  135. package/dist/esm/theme-ids.js +7 -0
  136. package/dist/esm/theme-state-transformer.js +1 -1
  137. package/dist/esm/utils/color-detection.js +3 -11
  138. package/dist/esm/utils/color-utils.js +8 -40
  139. package/dist/esm/utils/custom-theme-loading-utils.js +2 -11
  140. package/dist/esm/utils/generate-custom-color-ramp.js +7 -15
  141. package/dist/esm/utils/get-alpha.js +7 -0
  142. package/dist/esm/utils/get-closest-color-index.js +14 -0
  143. package/dist/esm/utils/get-css-custom-property.js +26 -0
  144. package/dist/esm/utils/get-fully-qualified-token-id.js +13 -0
  145. package/dist/esm/utils/get-theme-override-preferences.js +5 -0
  146. package/dist/esm/utils/get-theme-preferences.js +1 -4
  147. package/dist/esm/utils/get-token-id.js +20 -0
  148. package/dist/esm/utils/hct-color-utils/argb-from-rgb.js +6 -0
  149. package/dist/esm/utils/hct-color-utils/clamp-double.js +14 -0
  150. package/dist/esm/utils/hct-color-utils/clamp-int.js +14 -0
  151. package/dist/esm/utils/hct-color-utils/color-utils.js +7 -45
  152. package/dist/esm/utils/hct-color-utils/delinearized.js +20 -0
  153. package/dist/esm/utils/hct-color-utils/hct.js +5 -87
  154. package/dist/esm/utils/hct-color-utils/lerp.js +8 -0
  155. package/dist/esm/utils/hct-color-utils/linearized.js +16 -0
  156. package/dist/esm/utils/hct-color-utils/math-utils.js +6 -105
  157. package/dist/esm/utils/hct-color-utils/matrix-multiply.js +9 -0
  158. package/dist/esm/utils/hct-color-utils/sanitize-degrees-double.js +13 -0
  159. package/dist/esm/utils/hct-color-utils/signum.js +14 -0
  160. package/dist/esm/utils/hct-color-utils/viewing-conditions.js +89 -0
  161. package/dist/esm/utils/hex-to-rgba-values.js +9 -0
  162. package/dist/esm/utils/hsl-to-rgb.js +12 -0
  163. package/dist/esm/utils/is-valid-brand-hex.js +3 -0
  164. package/dist/esm/utils/limit-size-of-custom-style-elements.js +10 -0
  165. package/dist/esm/utils/load-theme-css.js +25 -0
  166. package/dist/esm/utils/relative-luminance-w3-c.js +12 -0
  167. package/dist/esm/utils/rgb-to-hex.js +3 -0
  168. package/dist/esm/utils/theme-loading.js +3 -24
  169. package/dist/esm/utils/token-ids.js +3 -61
  170. package/dist/types/artifacts/replacement-mapping.d.ts +1 -1
  171. package/dist/types/artifacts/tokens-raw/atlassian-motion.d.ts +1 -1
  172. package/dist/types/artifacts/types-internal.d.ts +2 -2
  173. package/dist/types/artifacts/types.d.ts +2 -2
  174. package/dist/types/custom-theme.d.ts +1 -20
  175. package/dist/types/entry-points/css-type-schema.codegen.d.ts +2 -2
  176. package/dist/types/entry-points/token-metadata.codegen.d.ts +1 -1
  177. package/dist/types/get-custom-theme-styles.d.ts +16 -0
  178. package/dist/types/get-global-theme.d.ts +1 -1
  179. package/dist/types/theme-color-modes.d.ts +7 -0
  180. package/dist/types/theme-config.d.ts +4 -14
  181. package/dist/types/theme-ids.d.ts +7 -0
  182. package/dist/types/theme-state-transformer.d.ts +1 -1
  183. package/dist/types/utils/color-detection.d.ts +1 -6
  184. package/dist/types/utils/color-utils.d.ts +5 -5
  185. package/dist/types/utils/custom-theme-loading-utils.d.ts +1 -2
  186. package/dist/types/utils/generate-custom-color-ramp.d.ts +1 -2
  187. package/dist/types/utils/get-alpha.d.ts +1 -0
  188. package/dist/types/utils/get-closest-color-index.d.ts +2 -0
  189. package/dist/types/utils/get-css-custom-property.d.ts +15 -0
  190. package/dist/types/utils/get-fully-qualified-token-id.d.ts +11 -0
  191. package/dist/types/utils/get-theme-override-preferences.d.ts +2 -0
  192. package/dist/types/utils/get-theme-preferences.d.ts +1 -1
  193. package/dist/types/utils/get-token-id.d.ts +15 -0
  194. package/dist/types/utils/hct-color-utils/argb-from-rgb.d.ts +4 -0
  195. package/dist/types/utils/hct-color-utils/clamp-double.d.ts +7 -0
  196. package/dist/types/utils/hct-color-utils/clamp-int.d.ts +7 -0
  197. package/dist/types/utils/hct-color-utils/color-utils.d.ts +3 -23
  198. package/dist/types/utils/hct-color-utils/delinearized.d.ts +9 -0
  199. package/dist/types/utils/hct-color-utils/hct.d.ts +3 -48
  200. package/dist/types/utils/hct-color-utils/lerp.d.ts +6 -0
  201. package/dist/types/utils/hct-color-utils/linearized.d.ts +9 -0
  202. package/dist/types/utils/hct-color-utils/math-utils.d.ts +6 -60
  203. package/dist/types/utils/hct-color-utils/matrix-multiply.d.ts +4 -0
  204. package/dist/types/utils/hct-color-utils/sanitize-degrees-double.d.ts +7 -0
  205. package/dist/types/utils/hct-color-utils/signum.d.ts +6 -0
  206. package/dist/types/utils/hct-color-utils/viewing-conditions.d.ts +47 -0
  207. package/dist/types/utils/hex-to-rgba-values.d.ts +6 -0
  208. package/dist/types/utils/hsl-to-rgb.d.ts +1 -0
  209. package/dist/types/utils/is-valid-brand-hex.d.ts +1 -0
  210. package/dist/types/utils/limit-size-of-custom-style-elements.d.ts +1 -0
  211. package/dist/types/utils/load-theme-css.d.ts +2 -0
  212. package/dist/types/utils/relative-luminance-w3-c.d.ts +1 -0
  213. package/dist/types/utils/rgb-to-hex.d.ts +1 -0
  214. package/dist/types/utils/theme-loading.d.ts +1 -1
  215. package/dist/types/utils/token-ids.d.ts +3 -41
  216. package/dist/types-ts4.5/artifacts/replacement-mapping.d.ts +1 -1
  217. package/dist/types-ts4.5/artifacts/tokens-raw/atlassian-motion.d.ts +1 -1
  218. package/dist/types-ts4.5/artifacts/types-internal.d.ts +2 -2
  219. package/dist/types-ts4.5/artifacts/types.d.ts +2 -2
  220. package/dist/types-ts4.5/custom-theme.d.ts +1 -20
  221. package/dist/types-ts4.5/entry-points/css-type-schema.codegen.d.ts +2 -2
  222. package/dist/types-ts4.5/entry-points/token-metadata.codegen.d.ts +1 -1
  223. package/dist/types-ts4.5/get-custom-theme-styles.d.ts +16 -0
  224. package/dist/types-ts4.5/get-global-theme.d.ts +1 -1
  225. package/dist/types-ts4.5/theme-color-modes.d.ts +11 -0
  226. package/dist/types-ts4.5/theme-config.d.ts +4 -29
  227. package/dist/types-ts4.5/theme-ids.d.ts +18 -0
  228. package/dist/types-ts4.5/theme-state-transformer.d.ts +1 -1
  229. package/dist/types-ts4.5/utils/color-detection.d.ts +1 -6
  230. package/dist/types-ts4.5/utils/color-utils.d.ts +5 -9
  231. package/dist/types-ts4.5/utils/custom-theme-loading-utils.d.ts +1 -2
  232. package/dist/types-ts4.5/utils/generate-custom-color-ramp.d.ts +1 -2
  233. package/dist/types-ts4.5/utils/get-alpha.d.ts +1 -0
  234. package/dist/types-ts4.5/utils/get-closest-color-index.d.ts +2 -0
  235. package/dist/types-ts4.5/utils/get-css-custom-property.d.ts +15 -0
  236. package/dist/types-ts4.5/utils/get-fully-qualified-token-id.d.ts +11 -0
  237. package/dist/types-ts4.5/utils/get-theme-override-preferences.d.ts +2 -0
  238. package/dist/types-ts4.5/utils/get-theme-preferences.d.ts +1 -1
  239. package/dist/types-ts4.5/utils/get-token-id.d.ts +15 -0
  240. package/dist/types-ts4.5/utils/hct-color-utils/argb-from-rgb.d.ts +4 -0
  241. package/dist/types-ts4.5/utils/hct-color-utils/clamp-double.d.ts +7 -0
  242. package/dist/types-ts4.5/utils/hct-color-utils/clamp-int.d.ts +7 -0
  243. package/dist/types-ts4.5/utils/hct-color-utils/color-utils.d.ts +3 -23
  244. package/dist/types-ts4.5/utils/hct-color-utils/delinearized.d.ts +9 -0
  245. package/dist/types-ts4.5/utils/hct-color-utils/hct.d.ts +3 -48
  246. package/dist/types-ts4.5/utils/hct-color-utils/lerp.d.ts +6 -0
  247. package/dist/types-ts4.5/utils/hct-color-utils/linearized.d.ts +9 -0
  248. package/dist/types-ts4.5/utils/hct-color-utils/math-utils.d.ts +6 -60
  249. package/dist/types-ts4.5/utils/hct-color-utils/matrix-multiply.d.ts +4 -0
  250. package/dist/types-ts4.5/utils/hct-color-utils/sanitize-degrees-double.d.ts +7 -0
  251. package/dist/types-ts4.5/utils/hct-color-utils/signum.d.ts +6 -0
  252. package/dist/types-ts4.5/utils/hct-color-utils/viewing-conditions.d.ts +47 -0
  253. package/dist/types-ts4.5/utils/hex-to-rgba-values.d.ts +6 -0
  254. package/dist/types-ts4.5/utils/hsl-to-rgb.d.ts +5 -0
  255. package/dist/types-ts4.5/utils/is-valid-brand-hex.d.ts +1 -0
  256. package/dist/types-ts4.5/utils/limit-size-of-custom-style-elements.d.ts +1 -0
  257. package/dist/types-ts4.5/utils/load-theme-css.d.ts +2 -0
  258. package/dist/types-ts4.5/utils/relative-luminance-w3-c.d.ts +1 -0
  259. package/dist/types-ts4.5/utils/rgb-to-hex.d.ts +1 -0
  260. package/dist/types-ts4.5/utils/theme-loading.d.ts +1 -1
  261. package/dist/types-ts4.5/utils/token-ids.d.ts +3 -41
  262. package/package.json +7 -7
  263. package/offerings.json +0 -44
@@ -1,8 +1,9 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
2
  import { themeIdsWithOverrides, themeStateDefaults } from './theme-config';
3
- import { isValidBrandHex } from './utils/color-utils';
4
- import { getThemeOverridePreferences, getThemePreferences } from './utils/get-theme-preferences';
5
- import { loadThemeCss } from './utils/theme-loading';
3
+ import { getThemeOverridePreferences } from './utils/get-theme-override-preferences';
4
+ import { getThemePreferences } from './utils/get-theme-preferences';
5
+ import { isValidBrandHex } from './utils/is-valid-brand-hex';
6
+ import { loadThemeCss } from './utils/load-theme-css';
6
7
  /**
7
8
  * Takes an object containing theme preferences, and returns an array of objects for use in applying styles to the document head.
8
9
  * Only supplies the color themes necessary for initial render, based on the current themeState. I.e. if in light mode, dark mode themes are not returned.
@@ -1,7 +1,7 @@
1
1
  import { loadAndAppendCustomThemeCss } from './custom-theme';
2
2
  import { themeStateDefaults } from './theme-config';
3
- import { isValidBrandHex } from './utils/color-utils';
4
3
  import { findMissingCustomStyleElements } from './utils/custom-theme-loading-utils';
4
+ import { isValidBrandHex } from './utils/is-valid-brand-hex';
5
5
 
6
6
  /**
7
7
  * Synchronously generates and applies custom theme styles to the page.
@@ -1,10 +1,11 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
2
  import getGlobalTheme from './get-global-theme';
3
3
  import { themeStateDefaults } from './theme-config';
4
- import { isValidBrandHex } from './utils/color-utils';
5
4
  import configurePage from './utils/configure-page';
6
5
  import { findMissingCustomStyleElements } from './utils/custom-theme-loading-utils';
7
- import { getThemeOverridePreferences, getThemePreferences } from './utils/get-theme-preferences';
6
+ import { getThemeOverridePreferences } from './utils/get-theme-override-preferences';
7
+ import { getThemePreferences } from './utils/get-theme-preferences';
8
+ import { isValidBrandHex } from './utils/is-valid-brand-hex';
8
9
  import { loadAndAppendThemeCss } from './utils/theme-loading';
9
10
 
10
11
  /**
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Theme modes: The general purpose of a theme.
3
+ * This attr is used to apply the appropriate system-preference option
4
+ * It may also be used as a selector for mode-specific overrides such as light/dark images.
5
+ * The idea is there may exist many color themes, but every theme must either fit into light or dark.
6
+ */
7
+ export const themeColorModes = ['light', 'dark', 'auto'];
@@ -1,5 +1,5 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
-
2
+ import { themeIds } from './theme-ids';
3
3
  /**
4
4
  * This file contains the source of truth for themes and all associated meta data.
5
5
  */
@@ -23,24 +23,10 @@ import { fg } from '@atlaskit/platform-feature-flags';
23
23
  * In the future other types may be introduced such as typography.
24
24
  */
25
25
 
26
- /**
27
- * Theme modes: The general purpose of a theme.
28
- * This attr is used to apply the appropriate system-preference option
29
- * It may also be used as a selector for mode-specific overrides such as light/dark images.
30
- * The idea is there may exist many color themes, but every theme must either fit into light or dark.
31
- */
32
- export const themeColorModes = ['light', 'dark', 'auto'];
33
26
  /**
34
27
  * Contrast preferences: The system contrast preference
35
28
  */
36
29
  const themeContrastModes = ['more', 'no-preference', 'auto'];
37
- /**
38
- * Theme ids: The value that will be mounted to the DOM as a data attr
39
- * For example: `data-theme="light:light dark:dark spacing:spacing"
40
- *
41
- * These ids must be kebab case
42
- */
43
- export const themeIds = ['light-increased-contrast', 'light', 'light-future', 'dark', 'dark-future', 'dark-increased-contrast', 'spacing', 'shape', 'typography', 'motion'];
44
30
  /**
45
31
  * Theme override ids: the equivalent of themeIds for theme overrides.
46
32
  * Theme overrides are temporary and there may not be any defined at times.
@@ -206,4 +192,6 @@ export const themeStateDefaults = {
206
192
  * (the page doesn't have an "auto" color mode, it's either light or dark)
207
193
  */
208
194
 
209
- export default themeConfig;
195
+ export default themeConfig;
196
+ export { themeColorModes } from './theme-color-modes';
197
+ export { themeIds } from './theme-ids';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Theme ids: The value that will be mounted to the DOM as a data attr
3
+ * For example: `data-theme="light:light dark:dark spacing:spacing"
4
+ *
5
+ * These ids must be kebab case
6
+ */
7
+ export const themeIds = ['light-increased-contrast', 'light', 'light-future', 'dark', 'dark-future', 'dark-increased-contrast', 'spacing', 'shape', 'typography', 'motion'];
@@ -1,4 +1,4 @@
1
- import { themeIds } from './theme-config';
1
+ import { themeIds } from './theme-ids';
2
2
  const themeKinds = ['light', 'dark', 'spacing', 'typography', 'shape', 'motion'];
3
3
  const customThemeOptions = 'UNSAFE_themeOptions';
4
4
  const isThemeKind = themeKind => {
@@ -1,13 +1,4 @@
1
- export const hexToRGBAValues = hex => {
2
- const hexColor = hex.replace('#', '');
3
- return {
4
- r: parseInt(hexColor.slice(0, 2), 16),
5
- g: parseInt(hexColor.slice(2, 4), 16),
6
- b: parseInt(hexColor.slice(4, 6), 16),
7
- a: parseFloat((parseInt(hexColor.slice(6, 8), 16) / 255).toFixed(2))
8
- };
9
- };
10
-
1
+ import { hexToRGBAValues } from './hex-to-rgba-values';
11
2
  /**
12
3
  * Returns a box shadow formatted for CSS from a ShadowToken raw value.
13
4
  *
@@ -25,4 +16,5 @@ export const getBoxShadow = rawShadow => rawShadow.map(({
25
16
  b
26
17
  } = hexToRGBAValues(color);
27
18
  return `${offset.x}px ${offset.y}px ${radius}px rgba(${r}, ${g}, ${b}, ${opacity})`;
28
- }).join(',');
19
+ }).join(',');
20
+ export { hexToRGBAValues } from './hex-to-rgba-values';
@@ -1,18 +1,7 @@
1
- // valid hex color with 6 digits
2
- export const isValidBrandHex = hex => /^#[0-9A-F]{6}$/i.test(hex);
3
-
1
+ import { getAlpha } from './get-alpha';
2
+ import { relativeLuminanceW3C } from './relative-luminance-w3-c';
4
3
  // valid hex color with 4, 6 or 8 digits
5
4
  const isValidHex = hex => /^#([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);
6
- export function rgbToHex(r, g, b) {
7
- return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
8
- }
9
- export function getAlpha(hex) {
10
- if (hex.length === 9) {
11
- const int = parseInt(hex.slice(7, 9), 16) / 255;
12
- return Number(parseFloat(int.toString()).toFixed(2));
13
- }
14
- return 1;
15
- }
16
5
  export function hexToRgbA(hex) {
17
6
  if (!isValidHex(hex)) {
18
7
  throw new Error('Invalid HEX');
@@ -82,26 +71,6 @@ export function hexToHSL(hex) {
82
71
  l = +(l * 100).toFixed(1);
83
72
  return [h, s, l];
84
73
  }
85
- export function HSLToRGB(h, s, l) {
86
- s /= 100;
87
- l /= 100;
88
- const k = n => (n + h / 30) % 12;
89
- const a = s * Math.min(l, 1 - l);
90
- const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
91
- return [255 * f(0), 255 * f(8), 255 * f(4)];
92
- }
93
- export function relativeLuminanceW3C(r, g, b) {
94
- const RsRGB = r / 255;
95
- const GsRGB = g / 255;
96
- const BsRGB = b / 255;
97
- const R = RsRGB <= 0.03928 ? RsRGB / 12.92 : Math.pow((RsRGB + 0.055) / 1.055, 2.4);
98
- const G = GsRGB <= 0.03928 ? GsRGB / 12.92 : Math.pow((GsRGB + 0.055) / 1.055, 2.4);
99
- const B = BsRGB <= 0.03928 ? BsRGB / 12.92 : Math.pow((BsRGB + 0.055) / 1.055, 2.4);
100
-
101
- // For the sRGB colorspace, the relative luminance of a color is defined as:
102
- const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;
103
- return L;
104
- }
105
74
  export function getContrastRatio(foreground, background) {
106
75
  if (!isValidHex(foreground) || !isValidHex(background)) {
107
76
  throw new Error('Invalid HEX');
@@ -151,4 +120,9 @@ function rgbToLab(rgb) {
151
120
  y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
152
121
  z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
153
122
  return [116 * y - 16, 500 * (x - y), 200 * (y - z)];
154
- }
123
+ }
124
+ export { isValidBrandHex } from './is-valid-brand-hex';
125
+ export { rgbToHex } from './rgb-to-hex';
126
+ export { getAlpha } from './get-alpha';
127
+ export { HSLToRGB } from './hsl-to-rgb';
128
+ export { relativeLuminanceW3C } from './relative-luminance-w3-c';
@@ -16,16 +16,10 @@ export function findMissingCustomStyleElements(UNSAFE_themeOptions, mode) {
16
16
  });
17
17
  return attrOfMissingCustomStyles;
18
18
  }
19
- export function limitSizeOfCustomStyleElements(sizeThreshold) {
20
- const styleTags = [...Array.from(document.head.querySelectorAll(`style[${CUSTOM_THEME_ATTRIBUTE}][${THEME_DATA_ATTRIBUTE}]`))];
21
- if (styleTags.length < sizeThreshold) {
22
- return;
23
- }
24
- styleTags.slice(0, styleTags.length - (sizeThreshold - 1)).forEach(element => element.remove());
25
- }
26
19
  export function reduceTokenMap(tokenMap, themeRamp) {
27
20
  return Object.entries(tokenMap).reduce((acc, [key, value]) => {
28
21
  const cssVar = tokens[key];
29
22
  return cssVar ? `${acc}\n ${cssVar}: ${typeof value === 'string' ? value : themeRamp[value]};` : acc;
30
23
  }, '');
31
- }
24
+ }
25
+ export { limitSizeOfCustomStyleElements } from './limit-size-of-custom-style-elements';
@@ -1,22 +1,13 @@
1
1
  import rawTokensDark from '../artifacts/atlassian-dark-token-value-for-contrast-check';
2
- import { deltaE, getContrastRatio, hexToHSL, hexToRgb, hexToRgbA, HSLToRGB, relativeLuminanceW3C, rgbToHex } from './color-utils';
2
+ import { getContrastRatio, hexToHSL, hexToRgbA } from './color-utils';
3
3
  import { additionalContrastChecker } from './custom-theme-token-contrast-check';
4
+ import { getClosestColorIndex } from './get-closest-color-index';
4
5
  import { argbFromRgba, Contrast, Hct, rgbaFromArgb } from './hct-color-utils';
6
+ import { HSLToRGB } from './hsl-to-rgb';
7
+ import { relativeLuminanceW3C } from './relative-luminance-w3-c';
8
+ import { rgbToHex } from './rgb-to-hex';
5
9
  const lowLuminanceContrastRatios = [1.12, 1.33, 2.03, 2.73, 3.33, 4.27, 5.2, 6.62, 12.46, 14.25];
6
10
  const highLuminanceContrastRatios = [1.08, 1.24, 1.55, 1.99, 2.45, 3.34, 4.64, 6.1, 10.19, 12.6];
7
- export const getClosestColorIndex = (themeRamp, brandColor) => {
8
- // Iterate over themeRamp and find whichever color is closest to brandColor
9
- let closestColorIndex = 0;
10
- let closestColorDistance = null;
11
- themeRamp.forEach((value, index) => {
12
- const distance = deltaE(hexToRgb(value), hexToRgb(brandColor));
13
- if (closestColorDistance === null || distance < closestColorDistance) {
14
- closestColorIndex = index;
15
- closestColorDistance = distance;
16
- }
17
- });
18
- return closestColorIndex;
19
- };
20
11
  export const generateColors = brandColor => {
21
12
  // Determine luminance
22
13
  const HSLBrandColorHue = hexToHSL(brandColor)[0];
@@ -216,4 +207,5 @@ export const generateTokenMapWithContrastCheck = (brandColor, mode, themeRamp) =
216
207
  }
217
208
  });
218
209
  return result;
219
- };
210
+ };
211
+ export { getClosestColorIndex } from './get-closest-color-index';
@@ -0,0 +1,7 @@
1
+ export function getAlpha(hex) {
2
+ if (hex.length === 9) {
3
+ const int = parseInt(hex.slice(7, 9), 16) / 255;
4
+ return Number(parseFloat(int.toString()).toFixed(2));
5
+ }
6
+ return 1;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { deltaE, hexToRgb } from './color-utils';
2
+ export const getClosestColorIndex = (themeRamp, brandColor) => {
3
+ // Iterate over themeRamp and find whichever color is closest to brandColor
4
+ let closestColorIndex = 0;
5
+ let closestColorDistance = null;
6
+ themeRamp.forEach((value, index) => {
7
+ const distance = deltaE(hexToRgb(value), hexToRgb(brandColor));
8
+ if (closestColorDistance === null || distance < closestColorDistance) {
9
+ closestColorIndex = index;
10
+ closestColorDistance = distance;
11
+ }
12
+ });
13
+ return closestColorIndex;
14
+ };
@@ -0,0 +1,23 @@
1
+ import { CSS_PREFIX, CSS_VAR_FULL } from '../constants';
2
+
3
+ /**
4
+ * Transforms a style dictionary token path to a CSS custom property.
5
+ *
6
+ * A css prefix will be prepended and all [default] key words will be omitted
7
+ * from the path
8
+ *
9
+ * @example <caption>Passing a path as an array</caption>
10
+ * // Returns ds-background-bold
11
+ * getCSSCustomProperty(['color', 'background', 'bold', '[default]'])
12
+ *
13
+ * @example <caption>Passing a path as a string</caption>
14
+ * // Returns ds-background-bold
15
+ * getCSSCustomProperty('color.background.bold.[default]')
16
+ */
17
+ export const getCSSCustomProperty = path => {
18
+ const normalizedPath = typeof path === 'string' ? path.split('.') : path;
19
+
20
+ // Opacity and other 'shallow' groups are more readable when not trimmed
21
+ const slice = CSS_VAR_FULL.includes(normalizedPath[0]) ? 0 : 1;
22
+ return `--${[CSS_PREFIX, ...normalizedPath.slice(slice)].filter(el => el !== '[default]').join('-')}`;
23
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Transforms a style dictionary token path to a fully qualified token id
3
+ * These Ids are intended to be used internal to this package by style-dictionary
4
+ *
5
+ * [default] key words will NOT be omitted from the path
6
+ *
7
+ * @example <caption>Passing a path as a string</caption>
8
+ * // Returns color.background.bold.[default]
9
+ * getFullyQualifiedTokenId(['color', 'background', 'bold', '[default]'])
10
+ */
11
+ export const getFullyQualifiedTokenId = path => path.join('.');
@@ -0,0 +1,4 @@
1
+ export const getThemeOverridePreferences = _themeState => {
2
+ const themeOverridePreferences = [];
3
+ return [...new Set(themeOverridePreferences)];
4
+ };
@@ -39,7 +39,4 @@ export const getThemePreferences = themeState => {
39
39
  });
40
40
  return [...new Set(themePreferences)];
41
41
  };
42
- export const getThemeOverridePreferences = _themeState => {
43
- const themeOverridePreferences = [];
44
- return [...new Set(themeOverridePreferences)];
45
- };
42
+ export { getThemeOverridePreferences } from './get-theme-override-preferences';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Transforms a style dictionary token path to a shorthand token id
3
+ * These ids will be typically be how tokens are interacted with via typescript and css
4
+ *
5
+ * All [default] key words will be omitted from the path
6
+ *
7
+ * @example <caption>Passing a path as an array</caption>
8
+ * // Returns color.background.bold
9
+ * getTokenId(['color', 'background', 'bold', '[default]'])
10
+ *
11
+ * @example <caption>Passing a path as a string</caption>
12
+ * // Returns color.background.bold
13
+ * getTokenId('color.background.bold.[default]')
14
+ */
15
+ export const getTokenId = path => {
16
+ const normalizedPath = typeof path === 'string' ? path.split('.') : path;
17
+ return normalizedPath.filter(el => el !== '[default]').join('.');
18
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Converts a color from RGB components to ARGB format.
3
+ */
4
+ export function argbFromRgb(red, green, blue) {
5
+ return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>> 0;
6
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Clamps an integer between two floating-point numbers.
3
+ *
4
+ * @return input when min <= input <= max, and either min or max
5
+ * otherwise.
6
+ */
7
+ export function clampDouble(min, max, input) {
8
+ if (input < min) {
9
+ return min;
10
+ } else if (input > max) {
11
+ return max;
12
+ }
13
+ return input;
14
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Clamps an integer between two integers.
3
+ *
4
+ * @return input when min <= input <= max, and either min or max
5
+ * otherwise.
6
+ */
7
+ export function clampInt(min, max, input) {
8
+ if (input < min) {
9
+ return min;
10
+ } else if (input > max) {
11
+ return max;
12
+ }
13
+ return input;
14
+ }
@@ -22,8 +22,10 @@
22
22
 
23
23
  // This file is automatically generated. Do not modify it.
24
24
 
25
+ import { argbFromRgb } from './argb-from-rgb';
26
+ import { delinearized } from './delinearized';
27
+ import { linearized } from './linearized';
25
28
  import * as mathUtils from './math-utils';
26
-
27
29
  /**
28
30
  * Color science utilities.
29
31
  *
@@ -35,13 +37,6 @@ const SRGB_TO_XYZ = [[0.41233895, 0.35762064, 0.18051042], [0.2126, 0.7152, 0.07
35
37
  const XYZ_TO_SRGB = [[3.2413774792388685, -1.5376652402851851, -0.49885366846268053], [-0.9691452513005321, 1.8758853451067872, 0.04156585616912061], [0.05562093689691305, -0.20395524564742123, 1.0571799111220335]];
36
38
  const WHITE_POINT_D65 = [95.047, 100.0, 108.883];
37
39
 
38
- /**
39
- * Converts a color from RGB components to ARGB format.
40
- */
41
- export function argbFromRgb(red, green, blue) {
42
- return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>> 0;
43
- }
44
-
45
40
  /**
46
41
  * Converts a color from linear RGB components to ARGB format.
47
42
  */
@@ -158,42 +153,6 @@ export function lstarFromY(y) {
158
153
  return labF(y / 100.0) * 116.0 - 16.0;
159
154
  }
160
155
 
161
- /**
162
- * Linearizes an RGB component.
163
- *
164
- * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B
165
- * channel
166
- * @return 0.0 <= output <= 100.0, color channel converted to
167
- * linear RGB space
168
- */
169
- export function linearized(rgbComponent) {
170
- const normalized = rgbComponent / 255.0;
171
- if (normalized <= 0.040449936) {
172
- return normalized / 12.92 * 100.0;
173
- } else {
174
- return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;
175
- }
176
- }
177
-
178
- /**
179
- * Delinearizes an RGB component.
180
- *
181
- * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents
182
- * linear R/G/B channel
183
- * @return 0 <= output <= 255, color channel converted to regular
184
- * RGB space
185
- */
186
- export function delinearized(rgbComponent) {
187
- const normalized = rgbComponent / 100.0;
188
- let delinearized = 0.0;
189
- if (normalized <= 0.0031308) {
190
- delinearized = normalized * 12.92;
191
- } else {
192
- delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;
193
- }
194
- return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));
195
- }
196
-
197
156
  /**
198
157
  * Returns the standard white point; white on a sunny day.
199
158
  *
@@ -276,4 +235,7 @@ function labInvf(ft) {
276
235
  } else {
277
236
  return (116 * ft - 16) / kappa;
278
237
  }
279
- }
238
+ }
239
+ export { argbFromRgb } from './argb-from-rgb';
240
+ export { linearized } from './linearized';
241
+ export { delinearized } from './delinearized';
@@ -0,0 +1,20 @@
1
+ import * as mathUtils from './math-utils';
2
+
3
+ /**
4
+ * Delinearizes an RGB component.
5
+ *
6
+ * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents
7
+ * linear R/G/B channel
8
+ * @return 0 <= output <= 255, color channel converted to regular
9
+ * RGB space
10
+ */
11
+ export function delinearized(rgbComponent) {
12
+ const normalized = rgbComponent / 100.0;
13
+ let delinearized = 0.0;
14
+ if (normalized <= 0.0031308) {
15
+ delinearized = normalized * 12.92;
16
+ } else {
17
+ delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;
18
+ }
19
+ return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));
20
+ }
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- var _ViewingConditions;
3
2
  /**
4
3
  * Below lines are copied from @material/material-color-utilities.
5
4
  * Do not modify it.
@@ -24,7 +23,7 @@ var _ViewingConditions;
24
23
 
25
24
  import * as utils from './color-utils';
26
25
  import * as math from './math-utils';
27
-
26
+ import { ViewingConditions } from './viewing-conditions';
28
27
  /**
29
28
  * A color system built using CAM16 hue and chroma, and L* from
30
29
  * L*a*b*.
@@ -121,7 +120,6 @@ export class Hct {
121
120
  this.internalHue = cam.hue;
122
121
  this.internalChroma = cam.chroma;
123
122
  this.internalTone = utils.lstarFromArgb(argb);
124
- this.argb = argb;
125
123
  }
126
124
  setInternalState(argb) {
127
125
  const cam = Cam16.fromInt(argb);
@@ -199,6 +197,7 @@ class Cam16 {
199
197
  * @param astar CAM16-UCS a coordinate
200
198
  * @param bstar CAM16-UCS b coordinate
201
199
  */
200
+
202
201
  constructor(hue, chroma, j, q, m, s, jstar, astar, bstar) {
203
202
  this.hue = hue;
204
203
  this.chroma = chroma;
@@ -858,76 +857,4 @@ _defineProperty(HctSolver, "SCALED_DISCOUNT_FROM_LINRGB", [[0.001200833568784504
858
857
  _defineProperty(HctSolver, "LINRGB_FROM_SCALED_DISCOUNT", [[1373.2198709594231, -1100.4251190754821, -7.278681089101213], [-271.815969077903, 559.6580465940733, -32.46047482791194], [1.9622899599665666, -57.173814538844006, 308.7233197812385]]);
859
858
  _defineProperty(HctSolver, "Y_FROM_LINRGB", [0.2126, 0.7152, 0.0722]);
860
859
  _defineProperty(HctSolver, "CRITICAL_PLANES", [0.015176349177441876, 0.045529047532325624, 0.07588174588720938, 0.10623444424209313, 0.13658714259697685, 0.16693984095186062, 0.19729253930674434, 0.2276452376616281, 0.2579979360165119, 0.28835063437139563, 0.3188300904430532, 0.350925934958123, 0.3848314933096426, 0.42057480301049466, 0.458183274052838, 0.4976837250274023, 0.5391024159806381, 0.5824650784040898, 0.6277969426914107, 0.6751227633498623, 0.7244668422128921, 0.775853049866786, 0.829304845476233, 0.8848452951698498, 0.942497089126609, 1.0022825574869039, 1.0642236851973577, 1.1283421258858297, 1.1946592148522128, 1.2631959812511864, 1.3339731595349034, 1.407011200216447, 1.4823302800086415, 1.5599503113873272, 1.6398909516233677, 1.7221716113234105, 1.8068114625156377, 1.8938294463134073, 1.9832442801866852, 2.075074464868551, 2.1693382909216234, 2.2660538449872063, 2.36523901573795, 2.4669114995532007, 2.5710888059345764, 2.6777882626779785, 2.7870270208169257, 2.898822059350997, 3.0131901897720907, 3.1301480604002863, 3.2497121605402226, 3.3718988244681087, 3.4967242352587946, 3.624204428461639, 3.754355295633311, 3.887192587735158, 4.022731918402185, 4.160988767090289, 4.301978482107941, 4.445716283538092, 4.592217266055746, 4.741496401646282, 4.893568542229298, 5.048448422192488, 5.20615066083972, 5.3666897647573375, 5.5300801301023865, 5.696336044816294, 5.865471690767354, 6.037501145825082, 6.212438385869475, 6.390297286737924, 6.571091626112461, 6.7548350853498045, 6.941541251256611, 7.131223617812143, 7.323895587840543, 7.5195704746346665, 7.7182615035334345, 7.919981813454504, 8.124744458384042, 8.332562408825165, 8.543448553206703, 8.757415699253682, 8.974476575321063, 9.194643831691977, 9.417930041841839, 9.644347703669503, 9.873909240696694, 10.106627003236781, 10.342513269534024, 10.58158024687427, 10.8238400726681, 11.069304815507364, 11.317986476196008, 11.569896988756009, 11.825048221409341, 12.083451977536606, 12.345119996613247, 12.610063955123938, 12.878295467455942, 13.149826086772048, 13.42466730586372, 13.702830557985108, 13.984327217668513, 14.269168601521828, 14.55736596900856, 14.848930523210871, 15.143873411576273, 15.44220572664832, 15.743938506781891, 16.04908273684337, 16.35764934889634, 16.66964922287304, 16.985093187232053, 17.30399201960269, 17.62635644741625, 17.95219714852476, 18.281524751807332, 18.614349837764564, 18.95068293910138, 19.290534541298456, 19.633915083172692, 19.98083495742689, 20.331304511189067, 20.685334046541502, 21.042933821039977, 21.404114048223256, 21.76888489811322, 22.137256497705877, 22.50923893145328, 22.884842241736916, 23.264076429332462, 23.6469514538663, 24.033477234264016, 24.42366364919083, 24.817520537484558, 25.21505769858089, 25.61628489293138, 26.021211842414342, 26.429848230738664, 26.842203703840827, 27.258287870275353, 27.678110301598522, 28.10168053274597, 28.529008062403893, 28.96010235337422, 29.39497283293396, 29.83362889318845, 30.276079891419332, 30.722335150426627, 31.172403958865512, 31.62629557157785, 32.08401920991837, 32.54558406207592, 33.010999283389665, 33.4802739966603, 33.953417292456834, 34.430438229418264, 34.911345834551085, 35.39614910352207, 35.88485700094671, 36.37747846067349, 36.87402238606382, 37.37449765026789, 37.87891309649659, 38.38727753828926, 38.89959975977785, 39.41588851594697, 39.93615253289054, 40.460400508064545, 40.98864111053629, 41.520882981230194, 42.05713473317016, 42.597404951718396, 43.141702194811224, 43.6900349931913, 44.24241185063697, 44.798841244188324, 45.35933162437017, 45.92389141541209, 46.49252901546552, 47.065252796817916, 47.64207110610409, 48.22299226451468, 48.808024568002054, 49.3971762874833, 49.9904556690408, 50.587870934119984, 51.189430279724725, 51.79514187861014, 52.40501387947288, 53.0190544071392, 53.637271562750364, 54.259673423945976, 54.88626804504493, 55.517063457223934, 56.15206766869424, 56.79128866487574, 57.43473440856916, 58.08241284012621, 58.734331877617365, 59.39049941699807, 60.05092333227251, 60.715611475655585, 61.38457167773311, 62.057811747619894, 62.7353394731159, 63.417162620860914, 64.10328893648692, 64.79372614476921, 65.48848194977529, 66.18756403501224, 66.89098006357258, 67.59873767827808, 68.31084450182222, 69.02730813691093, 69.74813616640164, 70.47333615344107, 71.20291564160104, 71.93688215501312, 72.67524319850172, 73.41800625771542, 74.16517879925733, 74.9167682708136, 75.67278210128072, 76.43322770089146, 77.1981124613393, 77.96744375590167, 78.74122893956174, 79.51947534912904, 80.30219030335869, 81.08938110306934, 81.88105503125999, 82.67721935322541, 83.4778813166706, 84.28304815182372, 85.09272707154808, 85.90692527145302, 86.72564993000343, 87.54890820862819, 88.3767072518277, 89.2090541872801, 90.04595612594655, 90.88742016217518, 91.73345337380438, 92.58406282226491, 93.43925555268066, 94.29903859396902, 95.16341895893969, 96.03240364439274, 96.9059996312159, 97.78421388448044, 98.6670533535366, 99.55452497210776]);
861
- export class ViewingConditions {
862
- /**
863
- * Create ViewingConditions from a simple, physically relevant, set of
864
- * parameters.
865
- *
866
- * @param whitePoint White point, measured in the XYZ color space.
867
- * default = D65, or sunny day afternoon
868
- * @param adaptingLuminance The luminance of the adapting field. Informally,
869
- * how bright it is in the room where the color is viewed. Can be
870
- * calculated from lux by multiplying lux by 0.0586. default = 11.72,
871
- * or 200 lux.
872
- * @param backgroundLstar The lightness of the area surrounding the color.
873
- * measured by L* in L*a*b*. default = 50.0
874
- * @param surround A general description of the lighting surrounding the
875
- * color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a
876
- * dimly light room, like watching TV at home at night. 2.0 means there
877
- * is no difference between the lighting on the color and around it.
878
- * default = 2.0
879
- * @param discountingIlluminant Whether the eye accounts for the tint of the
880
- * ambient lighting, such as knowing an apple is still red in green light.
881
- * default = false, the eye does not perform this process on
882
- * self-luminous objects like displays.
883
- */
884
- static make(whitePoint = utils.whitePointD65(), adaptingLuminance = 200.0 / Math.PI * utils.yFromLstar(50.0) / 100.0, backgroundLstar = 50.0, surround = 2.0, discountingIlluminant = false) {
885
- const xyz = whitePoint;
886
- const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;
887
- const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;
888
- const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;
889
- const f = 0.8 + surround / 10.0;
890
- const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10.0) : math.lerp(0.525, 0.59, (f - 0.8) * 10.0);
891
- let d = discountingIlluminant ? 1.0 : f * (1.0 - 1.0 / 3.6 * Math.exp((-adaptingLuminance - 42.0) / 92.0));
892
- d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;
893
- const nc = f;
894
- const rgbD = [d * (100.0 / rW) + 1.0 - d, d * (100.0 / gW) + 1.0 - d, d * (100.0 / bW) + 1.0 - d];
895
- const k = 1.0 / (5.0 * adaptingLuminance + 1.0);
896
- const k4 = k * k * k * k;
897
- const k4F = 1.0 - k4;
898
- const fl = k4 * adaptingLuminance + 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);
899
- const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];
900
- const z = 1.48 + Math.sqrt(n);
901
- const nbb = 0.725 / Math.pow(n, 0.2);
902
- const ncb = nbb;
903
- const rgbAFactors = [Math.pow(fl * rgbD[0] * rW / 100.0, 0.42), Math.pow(fl * rgbD[1] * gW / 100.0, 0.42), Math.pow(fl * rgbD[2] * bW / 100.0, 0.42)];
904
- const rgbA = [400.0 * rgbAFactors[0] / (rgbAFactors[0] + 27.13), 400.0 * rgbAFactors[1] / (rgbAFactors[1] + 27.13), 400.0 * rgbAFactors[2] / (rgbAFactors[2] + 27.13)];
905
- const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;
906
- return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);
907
- }
908
-
909
- /**
910
- * Parameters are intermediate values of the CAM16 conversion process. Their
911
- * names are shorthand for technical color science terminology, this class
912
- * would not benefit from documenting them individually. A brief overview
913
- * is available in the CAM16 specification, and a complete overview requires
914
- * a color science textbook, such as Fairchild's Color Appearance Models.
915
- */
916
- constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {
917
- this.n = n;
918
- this.aw = aw;
919
- this.nbb = nbb;
920
- this.ncb = ncb;
921
- this.c = c;
922
- this.nc = nc;
923
- this.rgbD = rgbD;
924
- this.fl = fl;
925
- this.fLRoot = fLRoot;
926
- this.z = z;
927
- }
928
- }
929
- _ViewingConditions = ViewingConditions;
930
- /**
931
- * sRGB-like viewing conditions.
932
- */
933
- _defineProperty(ViewingConditions, "DEFAULT", _ViewingConditions.make());
860
+ export { ViewingConditions } from './viewing-conditions';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The linear interpolation function.
3
+ *
4
+ * @return start if amount = 0 and stop if amount = 1
5
+ */
6
+ export function lerp(start, stop, amount) {
7
+ return (1.0 - amount) * start + amount * stop;
8
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Linearizes an RGB component.
3
+ *
4
+ * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B
5
+ * channel
6
+ * @return 0.0 <= output <= 100.0, color channel converted to
7
+ * linear RGB space
8
+ */
9
+ export function linearized(rgbComponent) {
10
+ const normalized = rgbComponent / 255.0;
11
+ if (normalized <= 0.040449936) {
12
+ return normalized / 12.92 * 100.0;
13
+ } else {
14
+ return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;
15
+ }
16
+ }