@tokens-studio/tokenscript-schemas 0.0.11 → 0.0.13

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 (307) hide show
  1. package/dist/cli/index.cjs +31 -8
  2. package/dist/cli/index.cjs.map +1 -1
  3. package/dist/cli/index.js +30 -8
  4. package/dist/cli/index.js.map +1 -1
  5. package/package.json +2 -1
  6. package/src/bundler/bundle-schema.ts +146 -0
  7. package/src/bundler/index.ts +151 -0
  8. package/src/bundler/schema-dependency-resolver.ts +299 -0
  9. package/src/bundler/selective-bundler.test.ts +94 -0
  10. package/src/bundler/selective-bundler.ts +159 -0
  11. package/src/bundler/types.ts +93 -0
  12. package/src/bundler/utils.ts +74 -0
  13. package/src/cli/commands/bundle.integration.test.ts +153 -0
  14. package/src/cli/commands/bundle.test.ts +57 -0
  15. package/src/cli/commands/bundle.ts +237 -0
  16. package/src/cli/commands/list.ts +109 -0
  17. package/src/cli/config-schema.ts +36 -0
  18. package/src/cli/index.ts +50 -0
  19. package/src/cli/output-generator.ts +63 -0
  20. package/src/downloader/index.ts +248 -0
  21. package/src/downloader/types.ts +48 -0
  22. package/src/index.ts +8 -0
  23. package/src/schemas/functions/adjust_chroma/adjust-chroma.tokenscript +27 -0
  24. package/src/schemas/functions/adjust_chroma/schema.json +48 -0
  25. package/src/schemas/functions/adjust_chroma/unit.test.ts +76 -0
  26. package/src/schemas/functions/adjust_hue/adjust-hue.tokenscript +32 -0
  27. package/src/schemas/functions/adjust_hue/schema.json +48 -0
  28. package/src/schemas/functions/adjust_hue/unit.test.ts +68 -0
  29. package/src/schemas/functions/adjust_lightness/adjust-lightness.tokenscript +31 -0
  30. package/src/schemas/functions/adjust_lightness/schema.json +48 -0
  31. package/src/schemas/functions/adjust_lightness/unit.test.ts +88 -0
  32. package/src/schemas/functions/adjust_to_contrast/adjust-to-contrast.tokenscript +131 -0
  33. package/src/schemas/functions/adjust_to_contrast/schema.json +56 -0
  34. package/src/schemas/functions/adjust_to_contrast/unit.test.ts +81 -0
  35. package/src/schemas/functions/alpha_blend/alpha-blend.tokenscript +46 -0
  36. package/src/schemas/functions/alpha_blend/schema.json +28 -0
  37. package/src/schemas/functions/alpha_blend/unit.test.ts +135 -0
  38. package/src/schemas/functions/alpha_scale/alpha-scale.tokenscript +38 -0
  39. package/src/schemas/functions/alpha_scale/schema.json +24 -0
  40. package/src/schemas/functions/alpha_scale/unit.test.ts +50 -0
  41. package/src/schemas/functions/analogous/analogous.tokenscript +47 -0
  42. package/src/schemas/functions/analogous/schema.json +28 -0
  43. package/src/schemas/functions/analogous/unit.test.ts +64 -0
  44. package/src/schemas/functions/apca_contrast/apca-contrast.tokenscript +129 -0
  45. package/src/schemas/functions/apca_contrast/schema.json +24 -0
  46. package/src/schemas/functions/apca_contrast/unit.test.ts +259 -0
  47. package/src/schemas/functions/are_similar/are-similar.tokenscript +24 -0
  48. package/src/schemas/functions/are_similar/schema.json +57 -0
  49. package/src/schemas/functions/are_similar/unit.test.ts +57 -0
  50. package/src/schemas/functions/auto_text_color/auto-text-color.tokenscript +41 -0
  51. package/src/schemas/functions/auto_text_color/schema.json +53 -0
  52. package/src/schemas/functions/auto_text_color/unit.test.ts +122 -0
  53. package/src/schemas/functions/best_contrast/best-contrast.tokenscript +66 -0
  54. package/src/schemas/functions/best_contrast/schema.json +24 -0
  55. package/src/schemas/functions/best_contrast/unit.test.ts +64 -0
  56. package/src/schemas/functions/chroma/chroma.tokenscript +12 -0
  57. package/src/schemas/functions/chroma/schema.json +44 -0
  58. package/src/schemas/functions/chroma/unit.test.ts +86 -0
  59. package/src/schemas/functions/clamp_chroma/clamp-chroma.tokenscript +21 -0
  60. package/src/schemas/functions/clamp_chroma/schema.json +52 -0
  61. package/src/schemas/functions/clamp_chroma/unit.test.ts +60 -0
  62. package/src/schemas/functions/clamp_lightness/clamp-lightness.tokenscript +21 -0
  63. package/src/schemas/functions/clamp_lightness/schema.json +52 -0
  64. package/src/schemas/functions/clamp_lightness/unit.test.ts +76 -0
  65. package/src/schemas/functions/clamp_to_gamut/clamp-to-gamut.tokenscript +41 -0
  66. package/src/schemas/functions/clamp_to_gamut/schema.json +20 -0
  67. package/src/schemas/functions/clamp_to_gamut/unit.test.ts +167 -0
  68. package/src/schemas/functions/complement/complement.tokenscript +21 -0
  69. package/src/schemas/functions/complement/schema.json +20 -0
  70. package/src/schemas/functions/complement/unit.test.ts +81 -0
  71. package/src/schemas/functions/contrast_ratio/contrast-ratio.tokenscript +36 -0
  72. package/src/schemas/functions/contrast_ratio/schema.json +24 -0
  73. package/src/schemas/functions/contrast_ratio/unit.test.ts +91 -0
  74. package/src/schemas/functions/cooler/cooler.tokenscript +45 -0
  75. package/src/schemas/functions/cooler/schema.json +43 -0
  76. package/src/schemas/functions/cooler/unit.test.ts +69 -0
  77. package/src/schemas/functions/darken/darken.tokenscript +37 -0
  78. package/src/schemas/functions/darken/schema.json +24 -0
  79. package/src/schemas/functions/darken/unit.test.ts +105 -0
  80. package/src/schemas/functions/delta_e_2000/delta-e-2000.tokenscript +184 -0
  81. package/src/schemas/functions/delta_e_2000/schema.json +36 -0
  82. package/src/schemas/functions/delta_e_2000/unit.test.ts +243 -0
  83. package/src/schemas/functions/delta_e_76/delta-e-76.tokenscript +45 -0
  84. package/src/schemas/functions/delta_e_76/schema.json +24 -0
  85. package/src/schemas/functions/delta_e_76/unit.test.ts +123 -0
  86. package/src/schemas/functions/delta_e_ok/delta-e-ok.tokenscript +43 -0
  87. package/src/schemas/functions/delta_e_ok/schema.json +24 -0
  88. package/src/schemas/functions/delta_e_ok/unit.test.ts +235 -0
  89. package/src/schemas/functions/desaturate/desaturate.tokenscript +32 -0
  90. package/src/schemas/functions/desaturate/schema.json +24 -0
  91. package/src/schemas/functions/desaturate/unit.test.ts +54 -0
  92. package/src/schemas/functions/distributed/distributed.tokenscript +54 -0
  93. package/src/schemas/functions/distributed/schema.json +32 -0
  94. package/src/schemas/functions/distributed/unit.test.ts +58 -0
  95. package/src/schemas/functions/diverging/diverging.tokenscript +58 -0
  96. package/src/schemas/functions/diverging/schema.json +32 -0
  97. package/src/schemas/functions/diverging/unit.test.ts +70 -0
  98. package/src/schemas/functions/grayscale/grayscale.tokenscript +17 -0
  99. package/src/schemas/functions/grayscale/schema.json +20 -0
  100. package/src/schemas/functions/grayscale/unit.test.ts +79 -0
  101. package/src/schemas/functions/harmonize/harmonize.tokenscript +61 -0
  102. package/src/schemas/functions/harmonize/schema.json +52 -0
  103. package/src/schemas/functions/harmonize/unit.test.ts +56 -0
  104. package/src/schemas/functions/hue/hue.tokenscript +12 -0
  105. package/src/schemas/functions/hue/schema.json +44 -0
  106. package/src/schemas/functions/hue/unit.test.ts +75 -0
  107. package/src/schemas/functions/hue_difference/hue-difference.tokenscript +42 -0
  108. package/src/schemas/functions/hue_difference/schema.json +24 -0
  109. package/src/schemas/functions/hue_difference/unit.test.ts +125 -0
  110. package/src/schemas/functions/in_gamut/in-gamut.tokenscript +51 -0
  111. package/src/schemas/functions/in_gamut/schema.json +24 -0
  112. package/src/schemas/functions/in_gamut/unit.test.ts +178 -0
  113. package/src/schemas/functions/interpolate/interpolate.tokenscript +61 -0
  114. package/src/schemas/functions/interpolate/schema.json +52 -0
  115. package/src/schemas/functions/interpolate/unit.test.ts +96 -0
  116. package/src/schemas/functions/invert/invert-initializer.tokenscript +29 -0
  117. package/src/schemas/functions/invert/schema.json +20 -0
  118. package/src/schemas/functions/invert/unit.test.ts +216 -0
  119. package/src/schemas/functions/is_cool/is-cool.tokenscript +41 -0
  120. package/src/schemas/functions/is_cool/schema.json +20 -0
  121. package/src/schemas/functions/is_cool/unit.test.ts +189 -0
  122. package/src/schemas/functions/is_dark/is-dark.tokenscript +16 -0
  123. package/src/schemas/functions/is_dark/schema.json +24 -0
  124. package/src/schemas/functions/is_dark/unit.test.ts +87 -0
  125. package/src/schemas/functions/is_light/is-light.tokenscript +16 -0
  126. package/src/schemas/functions/is_light/schema.json +24 -0
  127. package/src/schemas/functions/is_light/unit.test.ts +86 -0
  128. package/src/schemas/functions/is_neutral/is-neutral.tokenscript +16 -0
  129. package/src/schemas/functions/is_neutral/schema.json +53 -0
  130. package/src/schemas/functions/is_neutral/unit.test.ts +85 -0
  131. package/src/schemas/functions/is_warm/is-warm.tokenscript +62 -0
  132. package/src/schemas/functions/is_warm/schema.json +20 -0
  133. package/src/schemas/functions/is_warm/unit.test.ts +161 -0
  134. package/src/schemas/functions/lighten/lighten.tokenscript +37 -0
  135. package/src/schemas/functions/lighten/schema.json +24 -0
  136. package/src/schemas/functions/lighten/unit.test.ts +109 -0
  137. package/src/schemas/functions/lightness/lightness.tokenscript +12 -0
  138. package/src/schemas/functions/lightness/schema.json +49 -0
  139. package/src/schemas/functions/lightness/unit.test.ts +99 -0
  140. package/src/schemas/functions/luminance/luminance.tokenscript +16 -0
  141. package/src/schemas/functions/luminance/schema.json +20 -0
  142. package/src/schemas/functions/luminance/unit.test.ts +105 -0
  143. package/src/schemas/functions/meets_contrast/meets-contrast.tokenscript +49 -0
  144. package/src/schemas/functions/meets_contrast/schema.json +28 -0
  145. package/src/schemas/functions/meets_contrast/unit.test.ts +170 -0
  146. package/src/schemas/functions/mix/mix.tokenscript +47 -0
  147. package/src/schemas/functions/mix/schema.json +28 -0
  148. package/src/schemas/functions/mix/unit.test.ts +95 -0
  149. package/src/schemas/functions/monochromatic/monochromatic.tokenscript +72 -0
  150. package/src/schemas/functions/monochromatic/schema.json +24 -0
  151. package/src/schemas/functions/monochromatic/unit.test.ts +91 -0
  152. package/src/schemas/functions/muted/muted.tokenscript +25 -0
  153. package/src/schemas/functions/muted/schema.json +48 -0
  154. package/src/schemas/functions/muted/unit.test.ts +100 -0
  155. package/src/schemas/functions/neutral_variant/neutral-variant.tokenscript +23 -0
  156. package/src/schemas/functions/neutral_variant/schema.json +48 -0
  157. package/src/schemas/functions/neutral_variant/unit.test.ts +102 -0
  158. package/src/schemas/functions/relative_luminance/relative-luminance.tokenscript +15 -0
  159. package/src/schemas/functions/relative_luminance/schema.json +49 -0
  160. package/src/schemas/functions/relative_luminance/unit.test.ts +104 -0
  161. package/src/schemas/functions/rotate_hue/rotate-hue.tokenscript +20 -0
  162. package/src/schemas/functions/rotate_hue/schema.json +24 -0
  163. package/src/schemas/functions/rotate_hue/unit.test.ts +86 -0
  164. package/src/schemas/functions/saturate/saturate.tokenscript +33 -0
  165. package/src/schemas/functions/saturate/schema.json +24 -0
  166. package/src/schemas/functions/saturate/unit.test.ts +59 -0
  167. package/src/schemas/functions/scale_chroma/scale-chroma.tokenscript +22 -0
  168. package/src/schemas/functions/scale_chroma/schema.json +48 -0
  169. package/src/schemas/functions/scale_chroma/unit.test.ts +79 -0
  170. package/src/schemas/functions/scale_lightness/scale-lightness.tokenscript +23 -0
  171. package/src/schemas/functions/scale_lightness/schema.json +48 -0
  172. package/src/schemas/functions/scale_lightness/unit.test.ts +73 -0
  173. package/src/schemas/functions/sepia/schema.json +48 -0
  174. package/src/schemas/functions/sepia/sepia.tokenscript +54 -0
  175. package/src/schemas/functions/sepia/unit.test.ts +88 -0
  176. package/src/schemas/functions/set_chroma/schema.json +24 -0
  177. package/src/schemas/functions/set_chroma/set-chroma.tokenscript +18 -0
  178. package/src/schemas/functions/set_chroma/unit.test.ts +79 -0
  179. package/src/schemas/functions/set_hue/schema.json +24 -0
  180. package/src/schemas/functions/set_hue/set-hue.tokenscript +18 -0
  181. package/src/schemas/functions/set_hue/unit.test.ts +90 -0
  182. package/src/schemas/functions/set_lightness/schema.json +24 -0
  183. package/src/schemas/functions/set_lightness/set-lightness.tokenscript +18 -0
  184. package/src/schemas/functions/set_lightness/unit.test.ts +80 -0
  185. package/src/schemas/functions/shade_scale/schema.json +24 -0
  186. package/src/schemas/functions/shade_scale/shade-scale.tokenscript +61 -0
  187. package/src/schemas/functions/shade_scale/unit.test.ts +64 -0
  188. package/src/schemas/functions/split_complement/schema.json +24 -0
  189. package/src/schemas/functions/split_complement/split-complement.tokenscript +38 -0
  190. package/src/schemas/functions/split_complement/unit.test.ts +53 -0
  191. package/src/schemas/functions/steps/schema.json +28 -0
  192. package/src/schemas/functions/steps/steps.tokenscript +54 -0
  193. package/src/schemas/functions/steps/unit.test.ts +71 -0
  194. package/src/schemas/functions/tetradic/schema.json +20 -0
  195. package/src/schemas/functions/tetradic/tetradic.tokenscript +40 -0
  196. package/src/schemas/functions/tetradic/unit.test.ts +50 -0
  197. package/src/schemas/functions/tint_scale/schema.json +32 -0
  198. package/src/schemas/functions/tint_scale/tint-scale.tokenscript +71 -0
  199. package/src/schemas/functions/tint_scale/unit.test.ts +64 -0
  200. package/src/schemas/functions/to_gamut/schema.json +48 -0
  201. package/src/schemas/functions/to_gamut/to-gamut.tokenscript +96 -0
  202. package/src/schemas/functions/to_gamut/unit.test.ts +97 -0
  203. package/src/schemas/functions/triadic/schema.json +20 -0
  204. package/src/schemas/functions/triadic/triadic.tokenscript +33 -0
  205. package/src/schemas/functions/triadic/unit.test.ts +64 -0
  206. package/src/schemas/functions/vibrant/schema.json +48 -0
  207. package/src/schemas/functions/vibrant/unit.test.ts +55 -0
  208. package/src/schemas/functions/vibrant/vibrant.tokenscript +29 -0
  209. package/src/schemas/functions/warmer/schema.json +43 -0
  210. package/src/schemas/functions/warmer/unit.test.ts +69 -0
  211. package/src/schemas/functions/warmer/warmer.tokenscript +45 -0
  212. package/src/schemas/functions/wcag_level/schema.json +48 -0
  213. package/src/schemas/functions/wcag_level/unit.test.ts +75 -0
  214. package/src/schemas/functions/wcag_level/wcag-level.tokenscript +50 -0
  215. package/src/schemas/types/css-color/from-hsl-color.tokenscript +16 -0
  216. package/src/schemas/types/css-color/from-hwb-color.tokenscript +16 -0
  217. package/src/schemas/types/css-color/from-lab-color.tokenscript +16 -0
  218. package/src/schemas/types/css-color/from-lch-color.tokenscript +16 -0
  219. package/src/schemas/types/css-color/from-oklab-color.tokenscript +16 -0
  220. package/src/schemas/types/css-color/from-oklch-color.tokenscript +16 -0
  221. package/src/schemas/types/css-color/from-p3-color.tokenscript +16 -0
  222. package/src/schemas/types/css-color/from-rgb-color.tokenscript +15 -0
  223. package/src/schemas/types/css-color/from-srgb-color.tokenscript +16 -0
  224. package/src/schemas/types/css-color/from-srgb-linear-color.tokenscript +16 -0
  225. package/src/schemas/types/css-color/from-xyz-d50-color.tokenscript +16 -0
  226. package/src/schemas/types/css-color/from-xyz-d65-color.tokenscript +16 -0
  227. package/src/schemas/types/css-color/initializer.tokenscript +13 -0
  228. package/src/schemas/types/css-color/schema.json +148 -0
  229. package/src/schemas/types/css-color/unit.test.ts +402 -0
  230. package/src/schemas/types/hex-color/initializer.tokenscript +3 -0
  231. package/src/schemas/types/hex-color/schema.json +24 -0
  232. package/src/schemas/types/hex-color/unit.test.ts +123 -0
  233. package/src/schemas/types/hsl-color/from-srgb.tokenscript +87 -0
  234. package/src/schemas/types/hsl-color/initializer.tokenscript +16 -0
  235. package/src/schemas/types/hsl-color/schema.json +48 -0
  236. package/src/schemas/types/hsl-color/unit.test.ts +201 -0
  237. package/src/schemas/types/hsv-color/from-srgb.tokenscript +80 -0
  238. package/src/schemas/types/hsv-color/initializer.tokenscript +16 -0
  239. package/src/schemas/types/hsv-color/schema.json +48 -0
  240. package/src/schemas/types/hsv-color/unit.test.ts +162 -0
  241. package/src/schemas/types/hwb-color/from-hsv.tokenscript +31 -0
  242. package/src/schemas/types/hwb-color/initializer.tokenscript +16 -0
  243. package/src/schemas/types/hwb-color/schema.json +48 -0
  244. package/src/schemas/types/hwb-color/unit.test.ts +150 -0
  245. package/src/schemas/types/lab-color/from-xyz-d50.tokenscript +78 -0
  246. package/src/schemas/types/lab-color/initializer.tokenscript +16 -0
  247. package/src/schemas/types/lab-color/schema.json +48 -0
  248. package/src/schemas/types/lab-color/unit.test.ts +263 -0
  249. package/src/schemas/types/lch-color/from-lab.tokenscript +44 -0
  250. package/src/schemas/types/lch-color/initializer.tokenscript +16 -0
  251. package/src/schemas/types/lch-color/schema.json +48 -0
  252. package/src/schemas/types/lch-color/unit.test.ts +173 -0
  253. package/src/schemas/types/okhsl-color/from-oklab.tokenscript +410 -0
  254. package/src/schemas/types/okhsl-color/initializer.tokenscript +24 -0
  255. package/src/schemas/types/okhsl-color/schema.json +48 -0
  256. package/src/schemas/types/okhsl-color/unit.test.ts +514 -0
  257. package/src/schemas/types/okhsv-color/from-oklab.tokenscript +286 -0
  258. package/src/schemas/types/okhsv-color/initializer.tokenscript +24 -0
  259. package/src/schemas/types/okhsv-color/schema.json +48 -0
  260. package/src/schemas/types/okhsv-color/unit.test.ts +499 -0
  261. package/src/schemas/types/oklab-color/from-okhsl.tokenscript +195 -0
  262. package/src/schemas/types/oklab-color/from-okhsv.tokenscript +197 -0
  263. package/src/schemas/types/oklab-color/from-oklch.tokenscript +39 -0
  264. package/src/schemas/types/oklab-color/from-xyz-d65.tokenscript +43 -0
  265. package/src/schemas/types/oklab-color/initializer.tokenscript +16 -0
  266. package/src/schemas/types/oklab-color/schema.json +78 -0
  267. package/src/schemas/types/oklab-color/unit.test.ts +345 -0
  268. package/src/schemas/types/oklch-color/from-oklab.tokenscript +45 -0
  269. package/src/schemas/types/oklch-color/initializer.tokenscript +16 -0
  270. package/src/schemas/types/oklch-color/schema.json +48 -0
  271. package/src/schemas/types/oklch-color/unit.test.ts +267 -0
  272. package/src/schemas/types/p3-color/from-p3-linear.tokenscript +59 -0
  273. package/src/schemas/types/p3-color/initializer.tokenscript +16 -0
  274. package/src/schemas/types/p3-color/schema.json +48 -0
  275. package/src/schemas/types/p3-color/unit.test.ts +119 -0
  276. package/src/schemas/types/p3-linear-color/from-xyz-d65.tokenscript +47 -0
  277. package/src/schemas/types/p3-linear-color/initializer.tokenscript +16 -0
  278. package/src/schemas/types/p3-linear-color/schema.json +48 -0
  279. package/src/schemas/types/p3-linear-color/unit.test.ts +82 -0
  280. package/src/schemas/types/rgb-color/from-hex.tokenscript +43 -0
  281. package/src/schemas/types/rgb-color/initializer.tokenscript +16 -0
  282. package/src/schemas/types/rgb-color/schema.json +55 -0
  283. package/src/schemas/types/rgb-color/to-hex.tokenscript +42 -0
  284. package/src/schemas/types/rgb-color/unit.test.ts +302 -0
  285. package/src/schemas/types/srgb-color/from-hsl.tokenscript +106 -0
  286. package/src/schemas/types/srgb-color/from-linear.tokenscript +58 -0
  287. package/src/schemas/types/srgb-color/from-rgb.tokenscript +20 -0
  288. package/src/schemas/types/srgb-color/initializer.tokenscript +16 -0
  289. package/src/schemas/types/srgb-color/schema.json +68 -0
  290. package/src/schemas/types/srgb-color/unit.test.ts +303 -0
  291. package/src/schemas/types/srgb-linear-color/from-srgb.tokenscript +55 -0
  292. package/src/schemas/types/srgb-linear-color/from-xyz-d65.tokenscript +34 -0
  293. package/src/schemas/types/srgb-linear-color/initializer.tokenscript +13 -0
  294. package/src/schemas/types/srgb-linear-color/schema.json +58 -0
  295. package/src/schemas/types/srgb-linear-color/unit.test.ts +291 -0
  296. package/src/schemas/types/xyz-d50-color/from-xyz-d65.tokenscript +36 -0
  297. package/src/schemas/types/xyz-d50-color/initializer.tokenscript +16 -0
  298. package/src/schemas/types/xyz-d50-color/schema.json +48 -0
  299. package/src/schemas/types/xyz-d50-color/unit.test.ts +240 -0
  300. package/src/schemas/types/xyz-d65-color/from-linear-p3.tokenscript +47 -0
  301. package/src/schemas/types/xyz-d65-color/from-linear-srgb.tokenscript +38 -0
  302. package/src/schemas/types/xyz-d65-color/from-oklab.tokenscript +44 -0
  303. package/src/schemas/types/xyz-d65-color/initializer.tokenscript +16 -0
  304. package/src/schemas/types/xyz-d65-color/schema.json +68 -0
  305. package/src/schemas/types/xyz-d65-color/unit.test.ts +319 -0
  306. package/src/utils/schema-uri.ts +192 -0
  307. package/src/utils/type.ts +194 -0
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "relative_luminance",
3
+ "type": "function",
4
+ "description": "Returns the WCAG 2.1 relative luminance of a color. This is the Y value from the XYZ-D65 color space, ranging from 0 (black) to 1 (white). Used in contrast ratio calculations. Different from perceptual lightness - relative luminance is weighted toward green (which human eyes are most sensitive to). Essential for WCAG accessibility calculations.",
5
+ "keyword": "relative_luminance",
6
+ "requirements": ["/api/v1/core/srgb-color/0/", "/api/v1/core/xyz-d65-color/0/"],
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "input": {
11
+ "type": "array",
12
+ "items": [
13
+ {
14
+ "description": "Color to measure",
15
+ "type": "color"
16
+ }
17
+ ],
18
+ "minItems": 1,
19
+ "maxItems": 1
20
+ }
21
+ },
22
+ "required": ["input"]
23
+ },
24
+ "returns": {
25
+ "type": "number",
26
+ "description": "Relative luminance (0-1)"
27
+ },
28
+ "script": {
29
+ "type": "https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/tokenscript/0/",
30
+ "script": "./relative-luminance.tokenscript"
31
+ },
32
+ "examples": [
33
+ {
34
+ "description": "White has luminance 1",
35
+ "input": ["#ffffff"],
36
+ "output": 1
37
+ },
38
+ {
39
+ "description": "Black has luminance 0",
40
+ "input": ["#000000"],
41
+ "output": 0
42
+ },
43
+ {
44
+ "description": "Pure green is brighter than pure blue",
45
+ "input": ["#00ff00"],
46
+ "output": 0.7152
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Unit tests for the relative_luminance function
3
+ * Returns WCAG relative luminance
4
+ */
5
+
6
+ import { executeWithSchema, getBundledSchema } from "@tests/helpers/schema-test-utils";
7
+ import { describe, expect, it } from "vitest";
8
+ import type { FunctionSpecification } from "@/bundler/types";
9
+
10
+ describe("relative_luminance function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema(
14
+ "relative_luminance",
15
+ "function",
16
+ )) as FunctionSpecification;
17
+
18
+ expect(schema.name).toBe("relative_luminance");
19
+ expect(schema.type).toBe("function");
20
+ });
21
+ });
22
+
23
+ describe("Function Execution", () => {
24
+ it("should return 1 for white", async () => {
25
+ const result = await executeWithSchema(
26
+ "relative_luminance",
27
+ "function",
28
+ `
29
+ variable white: Color.SRGB;
30
+ white.r = 1; white.g = 1; white.b = 1;
31
+ relative_luminance(white)
32
+ `,
33
+ );
34
+
35
+ expect(result).toBeDefined();
36
+ const lum = (result as any).value ?? result;
37
+ expect(lum).toBeCloseTo(1, 2);
38
+ });
39
+
40
+ it("should return 0 for black", async () => {
41
+ const result = await executeWithSchema(
42
+ "relative_luminance",
43
+ "function",
44
+ `
45
+ variable black: Color.SRGB;
46
+ black.r = 0; black.g = 0; black.b = 0;
47
+ relative_luminance(black)
48
+ `,
49
+ );
50
+
51
+ expect(result).toBeDefined();
52
+ const lum = (result as any).value ?? result;
53
+ expect(lum).toBeCloseTo(0, 2);
54
+ });
55
+
56
+ it("should return ~0.2126 for pure red", async () => {
57
+ const result = await executeWithSchema(
58
+ "relative_luminance",
59
+ "function",
60
+ `
61
+ variable red: Color.SRGB;
62
+ red.r = 1; red.g = 0; red.b = 0;
63
+ relative_luminance(red)
64
+ `,
65
+ );
66
+
67
+ expect(result).toBeDefined();
68
+ const lum = (result as any).value ?? result;
69
+ expect(lum).toBeCloseTo(0.2126, 2);
70
+ });
71
+
72
+ it("should return ~0.7152 for pure green", async () => {
73
+ const result = await executeWithSchema(
74
+ "relative_luminance",
75
+ "function",
76
+ `
77
+ variable green: Color.SRGB;
78
+ green.r = 0; green.g = 1; green.b = 0;
79
+ relative_luminance(green)
80
+ `,
81
+ );
82
+
83
+ expect(result).toBeDefined();
84
+ const lum = (result as any).value ?? result;
85
+ expect(lum).toBeCloseTo(0.7152, 2);
86
+ });
87
+
88
+ it("should return ~0.0722 for pure blue", async () => {
89
+ const result = await executeWithSchema(
90
+ "relative_luminance",
91
+ "function",
92
+ `
93
+ variable blue: Color.SRGB;
94
+ blue.r = 0; blue.g = 0; blue.b = 1;
95
+ relative_luminance(blue)
96
+ `,
97
+ );
98
+
99
+ expect(result).toBeDefined();
100
+ const lum = (result as any).value ?? result;
101
+ expect(lum).toBeCloseTo(0.0722, 2);
102
+ });
103
+ });
104
+ });
@@ -0,0 +1,20 @@
1
+ // Rotate a color's hue by specified degrees
2
+ // Preserves lightness and chroma
3
+
4
+ variable input: List = {input};
5
+ variable color: Color.OKLCH = input.get(0).to.oklch();
6
+ variable degrees: Number = input.get(1);
7
+
8
+ variable new_h: Number = color.h + degrees;
9
+
10
+ // Normalize to 0-360
11
+ while (new_h >= 360) [ new_h = new_h - 360; ];
12
+ while (new_h < 0) [ new_h = new_h + 360; ];
13
+
14
+ variable result: Color.OKLCH;
15
+ result.l = color.l;
16
+ result.c = color.c;
17
+ result.h = new_h;
18
+
19
+ return result;
20
+
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Rotate Hue",
3
+ "type": "function",
4
+ "description": "Rotates a color's hue by a specified number of degrees in OKLCH space. Positive values rotate clockwise, negative counterclockwise.",
5
+ "keyword": "rotate_hue",
6
+ "input": {
7
+ "type": "object",
8
+ "properties": {
9
+ "color": {
10
+ "type": "color",
11
+ "description": "The color to rotate"
12
+ },
13
+ "degrees": {
14
+ "type": "number",
15
+ "description": "Degrees to rotate (-360 to 360)"
16
+ }
17
+ }
18
+ },
19
+ "script": {
20
+ "type": "/api/v1/core/tokenscript/0/",
21
+ "script": "./rotate-hue.tokenscript"
22
+ },
23
+ "requirements": ["/api/v1/core/oklch-color/0/", "/api/v1/core/srgb-color/0/"]
24
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Unit tests for the Rotate Hue function
3
+ * Rotates a color's hue by specified degrees in OKLCH
4
+ */
5
+
6
+ import { executeWithSchema, getBundledSchema } from "@tests/helpers/schema-test-utils";
7
+ import { describe, expect, it } from "vitest";
8
+ import type { FunctionSpecification } from "@/bundler/types";
9
+
10
+ describe("Rotate Hue Function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("rotate_hue", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("Rotate Hue");
16
+ expect(schema.type).toBe("function");
17
+ expect(schema.keyword).toBe("rotate_hue");
18
+ });
19
+ });
20
+
21
+ describe("Function Execution", () => {
22
+ it("should rotate hue by specified degrees", async () => {
23
+ const result = await executeWithSchema(
24
+ "rotate_hue",
25
+ "function",
26
+ `
27
+ variable red: Color.SRGB;
28
+ red.r = 0.9; red.g = 0.2; red.b = 0.2;
29
+ rotate_hue(red, 120).to.srgb()
30
+ `,
31
+ );
32
+
33
+ expect(result?.constructor.name).toBe("ColorSymbol");
34
+ // Red rotated 120° should be more green-ish
35
+ const r = (result as any).value.r.value;
36
+ const g = (result as any).value.g.value;
37
+ expect(g).toBeGreaterThan(r);
38
+ });
39
+
40
+ it("should handle 360° rotation (return to original)", async () => {
41
+ const result = await executeWithSchema(
42
+ "rotate_hue",
43
+ "function",
44
+ `
45
+ variable blue: Color.SRGB;
46
+ blue.r = 0.2; blue.g = 0.3; blue.b = 0.9;
47
+ rotate_hue(blue, 360).to.srgb()
48
+ `,
49
+ );
50
+
51
+ expect(result?.constructor.name).toBe("ColorSymbol");
52
+ const r = (result as any).value.r.value;
53
+ const b = (result as any).value.b.value;
54
+ // Should still be blue-ish after full rotation
55
+ expect(b).toBeGreaterThan(r);
56
+ });
57
+
58
+ it("should handle negative rotation", async () => {
59
+ const result = await executeWithSchema(
60
+ "rotate_hue",
61
+ "function",
62
+ `
63
+ variable green: Color.SRGB;
64
+ green.r = 0.2; green.g = 0.8; green.b = 0.3;
65
+ rotate_hue(green, -60).to.srgb()
66
+ `,
67
+ );
68
+
69
+ expect(result?.constructor.name).toBe("ColorSymbol");
70
+ });
71
+
72
+ it("should preserve lightness and chroma", async () => {
73
+ const result = await executeWithSchema(
74
+ "rotate_hue",
75
+ "function",
76
+ `
77
+ variable color: Color.SRGB;
78
+ color.r = 0.6; color.g = 0.4; color.b = 0.8;
79
+ rotate_hue(color, 45).to.srgb()
80
+ `,
81
+ );
82
+
83
+ expect(result?.constructor.name).toBe("ColorSymbol");
84
+ });
85
+ });
86
+ });
@@ -0,0 +1,33 @@
1
+ // Saturate a color by increasing its OKLCH chroma
2
+ // Amount: 0-1 where 0.25 means 25% increase
3
+ //
4
+ // Algorithm: C' = C * (1 + amount)
5
+ // Chroma has no strict upper bound but ~0.4 is practical max for sRGB
6
+
7
+ variable input: List = {input};
8
+ variable color: Color.OKLCH = input.get(0).to.oklch();
9
+
10
+ // Default amount is 0.25 (25%)
11
+ variable amount: Number = 0.25;
12
+ if (input.length() > 1) [
13
+ amount = input.get(1);
14
+ ];
15
+
16
+ // Calculate new chroma
17
+ variable current_c: Number = color.c;
18
+ variable new_c: Number = current_c * (1 + amount);
19
+
20
+ // Soft clamp at 0.4 (approximate sRGB gamut max)
21
+ if (new_c > 0.4) [ new_c = 0.4; ];
22
+
23
+ // Create output in OKLCH, return as sRGB
24
+ variable result: Color.OKLCH;
25
+ result.l = color.l;
26
+ result.c = new_c;
27
+ result.h = color.h;
28
+
29
+ return result;
30
+
31
+
32
+
33
+
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Saturate",
3
+ "type": "function",
4
+ "description": "Increases color saturation by boosting chroma in OKLCH space. Amount is 0-1 where 0.25 = 25% more saturated.",
5
+ "keyword": "saturate",
6
+ "input": {
7
+ "type": "object",
8
+ "properties": {
9
+ "color": {
10
+ "type": "color",
11
+ "description": "The color to saturate"
12
+ },
13
+ "amount": {
14
+ "type": "number",
15
+ "description": "Amount to saturate (0-1). Default is 0.25"
16
+ }
17
+ }
18
+ },
19
+ "script": {
20
+ "type": "/api/v1/core/tokenscript/0/",
21
+ "script": "./saturate.tokenscript"
22
+ },
23
+ "requirements": ["/api/v1/core/oklch-color/0/", "/api/v1/core/srgb-color/0/"]
24
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Unit tests for the Saturate function
3
+ * Increases color saturation by boosting OKLCH chroma
4
+ */
5
+
6
+ import { executeWithSchema, getBundledSchema } from "@tests/helpers/schema-test-utils";
7
+ import { describe, expect, it } from "vitest";
8
+ import type { FunctionSpecification } from "@/bundler/types";
9
+
10
+ describe("Saturate Function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("saturate", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("Saturate");
16
+ expect(schema.type).toBe("function");
17
+ expect(schema.keyword).toBe("saturate");
18
+ });
19
+ });
20
+
21
+ describe("Function Execution", () => {
22
+ it("should increase saturation of a muted color", async () => {
23
+ const result = await executeWithSchema(
24
+ "saturate",
25
+ "function",
26
+ `
27
+ variable muted: Color.SRGB;
28
+ muted.r = 0.5; muted.g = 0.4; muted.b = 0.45;
29
+ saturate(muted, 0.05).to.srgb()
30
+ `,
31
+ );
32
+
33
+ expect(result?.constructor.name).toBe("ColorSymbol");
34
+ // Result should have more color separation (more saturated)
35
+ const r = (result as any).value.r.value;
36
+ const g = (result as any).value.g.value;
37
+ // b is extracted but not directly tested - saturation affects all channels
38
+ const _b = (result as any).value.b.value;
39
+ void _b; // Acknowledge extraction
40
+ const originalSpread = Math.abs(0.5 - 0.4);
41
+ const newSpread = Math.abs(r - g);
42
+ expect(newSpread).toBeGreaterThanOrEqual(originalSpread - 0.01);
43
+ });
44
+
45
+ it("should use default amount of 0.1", async () => {
46
+ const result = await executeWithSchema(
47
+ "saturate",
48
+ "function",
49
+ `
50
+ variable color: Color.SRGB;
51
+ color.r = 0.6; color.g = 0.5; color.b = 0.5;
52
+ saturate(color).to.srgb()
53
+ `,
54
+ );
55
+
56
+ expect(result?.constructor.name).toBe("ColorSymbol");
57
+ });
58
+ });
59
+ });
@@ -0,0 +1,22 @@
1
+ // scale_chroma: Multiply chroma by a factor
2
+ // Uses OKLCH for perceptually uniform scaling
3
+ // Chroma cannot be negative; clamps to 0
4
+
5
+ variable input: List = {input};
6
+ variable color: Color.OKLCH = input.get(0).to.oklch();
7
+ variable factor: Number = input.get(1);
8
+
9
+ // Scale chroma
10
+ variable new_c: Number = color.c * factor;
11
+
12
+ // Clamp to valid range (no negative chroma)
13
+ if (new_c < 0) [ new_c = 0; ];
14
+
15
+ // Create result
16
+ variable result: Color.OKLCH;
17
+ result.l = color.l;
18
+ result.c = new_c;
19
+ result.h = color.h;
20
+
21
+ return result;
22
+
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "scale_chroma",
3
+ "type": "function",
4
+ "description": "Scales a color's chroma (saturation) by a factor. Unlike set_chroma which sets an absolute value, scale_chroma multiplies the current chroma. A factor of 1.5 increases colorfulness by 50%, while 0.5 decreases it by 50%. Uses OKLCH for perceptually uniform scaling. Useful for creating more or less vivid versions of a color.",
5
+ "keyword": "scale_chroma",
6
+ "requirements": ["/api/v1/core/srgb-color/0/", "/api/v1/core/oklch-color/0/"],
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "input": {
11
+ "type": "array",
12
+ "items": [
13
+ {
14
+ "description": "Color to scale",
15
+ "type": "color"
16
+ },
17
+ {
18
+ "description": "Scale factor (e.g., 1.5 for +50%, 0.5 for -50%)",
19
+ "type": "number"
20
+ }
21
+ ],
22
+ "minItems": 2,
23
+ "maxItems": 2
24
+ }
25
+ },
26
+ "required": ["input"]
27
+ },
28
+ "returns": {
29
+ "type": "color",
30
+ "description": "Color with scaled chroma"
31
+ },
32
+ "script": {
33
+ "type": "https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/tokenscript/0/",
34
+ "script": "./scale-chroma.tokenscript"
35
+ },
36
+ "examples": [
37
+ {
38
+ "description": "Make color more vivid",
39
+ "input": ["#cc8080", 1.5],
40
+ "output": "More saturated red"
41
+ },
42
+ {
43
+ "description": "Desaturate color",
44
+ "input": ["#ff0000", 0.5],
45
+ "output": "Muted red"
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Unit tests for the scale_chroma function
3
+ * Scales a color's chroma by a factor
4
+ */
5
+
6
+ import { executeWithSchema, getBundledSchema } from "@tests/helpers/schema-test-utils";
7
+ import { describe, expect, it } from "vitest";
8
+ import type { FunctionSpecification } from "@/bundler/types";
9
+
10
+ describe("scale_chroma function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("scale_chroma", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("scale_chroma");
16
+ expect(schema.type).toBe("function");
17
+ });
18
+ });
19
+
20
+ describe("Function Execution", () => {
21
+ it("should decrease saturation with factor < 1", async () => {
22
+ const result = await executeWithSchema(
23
+ "scale_chroma",
24
+ "function",
25
+ `
26
+ variable red: Color.SRGB;
27
+ red.r = 1; red.g = 0; red.b = 0;
28
+ scale_chroma(red, 0.5).to.srgb()
29
+ `,
30
+ );
31
+
32
+ expect(result).toBeDefined();
33
+ const r = (result as any).value?.r?.value ?? (result as any).value?.r;
34
+ const g = (result as any).value?.g?.value ?? (result as any).value?.g;
35
+ // Desaturated red should have less extreme difference
36
+ expect(Math.abs(r - g)).toBeLessThan(0.8);
37
+ });
38
+
39
+ it("should produce gray with factor 0", async () => {
40
+ const result = await executeWithSchema(
41
+ "scale_chroma",
42
+ "function",
43
+ `
44
+ variable red: Color.SRGB;
45
+ red.r = 1; red.g = 0; red.b = 0;
46
+ scale_chroma(red, 0).to.srgb()
47
+ `,
48
+ );
49
+
50
+ expect(result).toBeDefined();
51
+ const r = (result as any).value?.r?.value ?? (result as any).value?.r;
52
+ const g = (result as any).value?.g?.value ?? (result as any).value?.g;
53
+ const b = (result as any).value?.b?.value ?? (result as any).value?.b;
54
+ // Should be gray
55
+ expect(Math.abs(r - g)).toBeLessThan(0.05);
56
+ expect(Math.abs(g - b)).toBeLessThan(0.05);
57
+ });
58
+
59
+ it("should handle already gray colors", async () => {
60
+ const result = await executeWithSchema(
61
+ "scale_chroma",
62
+ "function",
63
+ `
64
+ variable gray: Color.SRGB;
65
+ gray.r = 0.5; gray.g = 0.5; gray.b = 0.5;
66
+ scale_chroma(gray, 2).to.srgb()
67
+ `,
68
+ );
69
+
70
+ expect(result).toBeDefined();
71
+ const r = (result as any).value?.r?.value ?? (result as any).value?.r;
72
+ const g = (result as any).value?.g?.value ?? (result as any).value?.g;
73
+ const b = (result as any).value?.b?.value ?? (result as any).value?.b;
74
+ // Gray scaled stays gray (0 * 2 = 0)
75
+ expect(Math.abs(r - g)).toBeLessThan(0.05);
76
+ expect(Math.abs(g - b)).toBeLessThan(0.05);
77
+ });
78
+ });
79
+ });
@@ -0,0 +1,23 @@
1
+ // scale_lightness: Multiply lightness by a factor
2
+ // Uses OKLCH for perceptually uniform scaling
3
+ // Clamps result to valid range [0, 1]
4
+
5
+ variable input: List = {input};
6
+ variable color: Color.OKLCH = input.get(0).to.oklch();
7
+ variable factor: Number = input.get(1);
8
+
9
+ // Scale lightness
10
+ variable new_l: Number = color.l * factor;
11
+
12
+ // Clamp to valid range
13
+ if (new_l < 0) [ new_l = 0; ];
14
+ if (new_l > 1) [ new_l = 1; ];
15
+
16
+ // Create result
17
+ variable result: Color.OKLCH;
18
+ result.l = new_l;
19
+ result.c = color.c;
20
+ result.h = color.h;
21
+
22
+ return result;
23
+
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "scale_lightness",
3
+ "type": "function",
4
+ "description": "Scales a color's lightness by a factor. Unlike set_lightness which sets an absolute value, scale_lightness multiplies the current lightness. A factor of 1.2 increases lightness by 20%, while 0.8 decreases it by 20%. Uses OKLCH for perceptually uniform scaling. Result is clamped to valid lightness range [0, 1].",
5
+ "keyword": "scale_lightness",
6
+ "requirements": ["/api/v1/core/srgb-color/0/", "/api/v1/core/oklch-color/0/"],
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "input": {
11
+ "type": "array",
12
+ "items": [
13
+ {
14
+ "description": "Color to scale",
15
+ "type": "color"
16
+ },
17
+ {
18
+ "description": "Scale factor (e.g., 1.2 for +20%, 0.8 for -20%)",
19
+ "type": "number"
20
+ }
21
+ ],
22
+ "minItems": 2,
23
+ "maxItems": 2
24
+ }
25
+ },
26
+ "required": ["input"]
27
+ },
28
+ "returns": {
29
+ "type": "color",
30
+ "description": "Color with scaled lightness"
31
+ },
32
+ "script": {
33
+ "type": "https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/tokenscript/0/",
34
+ "script": "./scale-lightness.tokenscript"
35
+ },
36
+ "examples": [
37
+ {
38
+ "description": "Brighten color by 20%",
39
+ "input": ["#808080", 1.2],
40
+ "output": "Lighter gray"
41
+ },
42
+ {
43
+ "description": "Dim color by 50%",
44
+ "input": ["#ffffff", 0.5],
45
+ "output": "Mid-gray"
46
+ }
47
+ ]
48
+ }