@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,86 @@
1
+ /**
2
+ * Unit tests for the Is Light function
3
+ * Checks if a color is perceptually light
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("Is Light Function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("is_light", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("Is Light");
16
+ expect(schema.type).toBe("function");
17
+ expect(schema.keyword).toBe("is_light");
18
+ });
19
+ });
20
+
21
+ describe("Function Execution", () => {
22
+ it("should return true for white", async () => {
23
+ const result = await executeWithSchema(
24
+ "is_light",
25
+ "function",
26
+ `
27
+ variable white: Color.SRGB;
28
+ white.r = 1; white.g = 1; white.b = 1;
29
+ is_light(white)
30
+ `,
31
+ );
32
+
33
+ expect(result).toBeDefined();
34
+ const isLight = (result as any).value ?? result;
35
+ expect(isLight).toBe(true);
36
+ });
37
+
38
+ it("should return false for black", async () => {
39
+ const result = await executeWithSchema(
40
+ "is_light",
41
+ "function",
42
+ `
43
+ variable black: Color.SRGB;
44
+ black.r = 0; black.g = 0; black.b = 0;
45
+ is_light(black)
46
+ `,
47
+ );
48
+
49
+ expect(result).toBeDefined();
50
+ const isLight = (result as any).value ?? result;
51
+ expect(isLight).toBe(false);
52
+ });
53
+
54
+ it("should return true for light yellow", async () => {
55
+ const result = await executeWithSchema(
56
+ "is_light",
57
+ "function",
58
+ `
59
+ variable yellow: Color.SRGB;
60
+ yellow.r = 1; yellow.g = 0.95; yellow.b = 0.6;
61
+ is_light(yellow)
62
+ `,
63
+ );
64
+
65
+ expect(result).toBeDefined();
66
+ const isLight = (result as any).value ?? result;
67
+ expect(isLight).toBe(true);
68
+ });
69
+
70
+ it("should return false for dark blue", async () => {
71
+ const result = await executeWithSchema(
72
+ "is_light",
73
+ "function",
74
+ `
75
+ variable darkBlue: Color.SRGB;
76
+ darkBlue.r = 0.1; darkBlue.g = 0.1; darkBlue.b = 0.3;
77
+ is_light(darkBlue)
78
+ `,
79
+ );
80
+
81
+ expect(result).toBeDefined();
82
+ const isLight = (result as any).value ?? result;
83
+ expect(isLight).toBe(false);
84
+ });
85
+ });
86
+ });
@@ -0,0 +1,16 @@
1
+ // is_neutral: Check if a color is achromatic (gray)
2
+ // Uses OKLCH chroma - low chroma means neutral
3
+ // Threshold of 0.02 allows for near-neutral colors
4
+
5
+ variable input: List = {input};
6
+ variable color: Color.OKLCH = input.get(0).to.oklch();
7
+
8
+ // Default chroma threshold
9
+ variable threshold: Number = 0.02;
10
+ if (input.length() > 1) [
11
+ threshold = input.get(1);
12
+ ];
13
+
14
+ // Color is neutral if chroma is below threshold
15
+ return color.c < threshold;
16
+
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "is_neutral",
3
+ "type": "function",
4
+ "description": "Determines if a color is achromatic (neutral/gray). Uses OKLCH chroma value - colors with very low chroma are considered neutral regardless of their hue. Default threshold of 0.02 allows for near-neutral colors that appear gray to human observers.",
5
+ "keyword": "is_neutral",
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 test",
15
+ "type": "color"
16
+ },
17
+ {
18
+ "description": "Chroma threshold (default 0.02). Lower = stricter.",
19
+ "type": "number"
20
+ }
21
+ ],
22
+ "minItems": 1,
23
+ "maxItems": 2
24
+ }
25
+ },
26
+ "required": ["input"]
27
+ },
28
+ "returns": {
29
+ "type": "boolean",
30
+ "description": "True if color is achromatic/neutral"
31
+ },
32
+ "script": {
33
+ "type": "https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/tokenscript/0/",
34
+ "script": "./is-neutral.tokenscript"
35
+ },
36
+ "examples": [
37
+ {
38
+ "description": "Pure gray is neutral",
39
+ "input": ["#808080"],
40
+ "output": true
41
+ },
42
+ {
43
+ "description": "Pure red is not neutral",
44
+ "input": ["#ff0000"],
45
+ "output": false
46
+ },
47
+ {
48
+ "description": "Desaturated color may be neutral",
49
+ "input": ["#7a7a7c"],
50
+ "output": true
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Unit tests for the is_neutral function
3
+ * Checks if a color is achromatic (gray)
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("is_neutral function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("is_neutral", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("is_neutral");
16
+ expect(schema.type).toBe("function");
17
+ });
18
+ });
19
+
20
+ describe("Function Execution", () => {
21
+ it("should return true for pure gray", async () => {
22
+ const result = await executeWithSchema(
23
+ "is_neutral",
24
+ "function",
25
+ `
26
+ variable gray: Color.SRGB;
27
+ gray.r = 0.5; gray.g = 0.5; gray.b = 0.5;
28
+ is_neutral(gray)
29
+ `,
30
+ );
31
+
32
+ expect(result).toBeDefined();
33
+ const neutral = (result as any).value ?? result;
34
+ expect(neutral).toBe(true);
35
+ });
36
+
37
+ it("should return true for white", async () => {
38
+ const result = await executeWithSchema(
39
+ "is_neutral",
40
+ "function",
41
+ `
42
+ variable white: Color.SRGB;
43
+ white.r = 1; white.g = 1; white.b = 1;
44
+ is_neutral(white)
45
+ `,
46
+ );
47
+
48
+ expect(result).toBeDefined();
49
+ const neutral = (result as any).value ?? result;
50
+ expect(neutral).toBe(true);
51
+ });
52
+
53
+ it("should return true for black", async () => {
54
+ const result = await executeWithSchema(
55
+ "is_neutral",
56
+ "function",
57
+ `
58
+ variable black: Color.SRGB;
59
+ black.r = 0; black.g = 0; black.b = 0;
60
+ is_neutral(black)
61
+ `,
62
+ );
63
+
64
+ expect(result).toBeDefined();
65
+ const neutral = (result as any).value ?? result;
66
+ expect(neutral).toBe(true);
67
+ });
68
+
69
+ it("should return false for saturated red", async () => {
70
+ const result = await executeWithSchema(
71
+ "is_neutral",
72
+ "function",
73
+ `
74
+ variable red: Color.SRGB;
75
+ red.r = 1; red.g = 0; red.b = 0;
76
+ is_neutral(red)
77
+ `,
78
+ );
79
+
80
+ expect(result).toBeDefined();
81
+ const neutral = (result as any).value ?? result;
82
+ expect(neutral).toBe(false);
83
+ });
84
+ });
85
+ });
@@ -0,0 +1,62 @@
1
+ // Is Warm Color
2
+ // Determines if a color is perceptually warm or cool
3
+ //
4
+ // Color Temperature Psychology:
5
+ // - Warm colors: Red, orange, yellow (associated with fire, sun)
6
+ // - Cool colors: Blue, green, purple (associated with water, ice)
7
+ //
8
+ // Hue ranges (in OKLCH/HSL degrees):
9
+ // - Warm: roughly 0-90° (red through yellow) and 330-360° (red-magenta)
10
+ // - Cool: roughly 90-330° (yellow-green through purple)
11
+ //
12
+ // Achromatic colors (low chroma) are considered neutral
13
+ // and return false (lean towards cool for safety in accessibility)
14
+
15
+ variable input: List = {input};
16
+ variable color: Color.OKLCH = input.get(0).to.oklch();
17
+
18
+ // Get hue and chroma
19
+ variable h: Number = color.h;
20
+ variable c: Number = color.c;
21
+
22
+ // Achromatic colors (very low chroma) are neutral
23
+ // Return false (cool) for these
24
+ if (c < 0.02) [
25
+ return false;
26
+ ];
27
+
28
+ // Normalize hue to 0-360
29
+ if (h < 0) [ h = h + 360; ];
30
+ if (h >= 360) [ h = h - 360; ];
31
+
32
+ // OKLCH Warm hue ranges:
33
+ // In OKLCH, hue angles differ from HSL:
34
+ // - Red: ~29°
35
+ // - Orange: ~53°
36
+ // - Yellow: ~110°
37
+ // - Yellow-green: ~130°
38
+ // - Green: ~145°
39
+ // - Cyan: ~195°
40
+ // - Blue: ~265°
41
+ // - Purple: ~300°
42
+ // - Magenta: ~330°
43
+ //
44
+ // Warm colors: 0-130° (red through yellow-green) and 320-360° (magenta-red)
45
+ variable is_warm: Boolean = false;
46
+
47
+ // Check 0-130 range (red through yellow to yellow-green)
48
+ if (h >= 0) [
49
+ if (h <= 130) [
50
+ is_warm = true;
51
+ ];
52
+ ];
53
+
54
+ // Check 320-360 range (magenta-red)
55
+ if (h >= 320) [
56
+ if (h <= 360) [
57
+ is_warm = true;
58
+ ];
59
+ ];
60
+
61
+ return is_warm;
62
+
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "Is Warm",
3
+ "type": "function",
4
+ "description": "Checks if a color is perceptually warm. Uses OKLCH color space where warm colors have hues in the red-yellow range (roughly 0-130° and 320-360°). Returns true for warm colors (red, orange, yellow), false for cool colors (green, cyan, blue, purple). Achromatic colors are considered neutral/cool.",
5
+ "keyword": "is_warm",
6
+ "input": {
7
+ "type": "object",
8
+ "properties": {
9
+ "color": {
10
+ "type": "color",
11
+ "description": "Color to check"
12
+ }
13
+ }
14
+ },
15
+ "script": {
16
+ "type": "/api/v1/core/tokenscript/0/",
17
+ "script": "./is-warm.tokenscript"
18
+ },
19
+ "requirements": ["/api/v1/core/oklch-color/0/"]
20
+ }
@@ -0,0 +1,161 @@
1
+ import { executeWithSchema } from "@tests/helpers/schema-test-utils";
2
+ import { describe, expect, it } from "vitest";
3
+
4
+ describe("Is Warm Function", () => {
5
+ describe("Schema Definition", () => {
6
+ it("should have correct schema structure", async () => {
7
+ const { getBundledSchema } = await import("@tests/helpers/schema-test-utils");
8
+ const schema = await getBundledSchema("is_warm", "function");
9
+
10
+ expect(schema.name).toBe("Is Warm");
11
+ expect(schema.type).toBe("function");
12
+ expect((schema as any).keyword).toBe("is_warm");
13
+ });
14
+ });
15
+
16
+ describe("Warm Colors", () => {
17
+ it("should return true for red", async () => {
18
+ const result = await executeWithSchema(
19
+ "is_warm",
20
+ "function",
21
+ `
22
+ variable c: Color.SRGB;
23
+ c.r = 1; c.g = 0; c.b = 0;
24
+ is_warm(c)
25
+ `,
26
+ );
27
+
28
+ expect(result.value).toBe(true);
29
+ });
30
+
31
+ it("should return true for orange", async () => {
32
+ const result = await executeWithSchema(
33
+ "is_warm",
34
+ "function",
35
+ `
36
+ variable c: Color.SRGB;
37
+ c.r = 1; c.g = 0.5; c.b = 0;
38
+ is_warm(c)
39
+ `,
40
+ );
41
+
42
+ expect(result.value).toBe(true);
43
+ });
44
+
45
+ it("should return true for yellow", async () => {
46
+ const result = await executeWithSchema(
47
+ "is_warm",
48
+ "function",
49
+ `
50
+ variable c: Color.SRGB;
51
+ c.r = 1; c.g = 1; c.b = 0;
52
+ is_warm(c)
53
+ `,
54
+ );
55
+
56
+ expect(result.value).toBe(true);
57
+ });
58
+ });
59
+
60
+ describe("Cool Colors", () => {
61
+ it("should return false for blue", async () => {
62
+ const result = await executeWithSchema(
63
+ "is_warm",
64
+ "function",
65
+ `
66
+ variable c: Color.SRGB;
67
+ c.r = 0; c.g = 0; c.b = 1;
68
+ is_warm(c)
69
+ `,
70
+ );
71
+
72
+ expect(result.value).toBe(false);
73
+ });
74
+
75
+ it("should return false for green", async () => {
76
+ const result = await executeWithSchema(
77
+ "is_warm",
78
+ "function",
79
+ `
80
+ variable c: Color.SRGB;
81
+ c.r = 0; c.g = 1; c.b = 0;
82
+ is_warm(c)
83
+ `,
84
+ );
85
+
86
+ expect(result.value).toBe(false);
87
+ });
88
+
89
+ it("should return false for cyan", async () => {
90
+ const result = await executeWithSchema(
91
+ "is_warm",
92
+ "function",
93
+ `
94
+ variable c: Color.SRGB;
95
+ c.r = 0; c.g = 1; c.b = 1;
96
+ is_warm(c)
97
+ `,
98
+ );
99
+
100
+ expect(result.value).toBe(false);
101
+ });
102
+
103
+ it("should return false for purple", async () => {
104
+ const result = await executeWithSchema(
105
+ "is_warm",
106
+ "function",
107
+ `
108
+ variable c: Color.SRGB;
109
+ c.r = 0.5; c.g = 0; c.b = 1;
110
+ is_warm(c)
111
+ `,
112
+ );
113
+
114
+ expect(result.value).toBe(false);
115
+ });
116
+ });
117
+
118
+ describe("Achromatic Colors", () => {
119
+ it("should return false for white (neutral)", async () => {
120
+ const result = await executeWithSchema(
121
+ "is_warm",
122
+ "function",
123
+ `
124
+ variable c: Color.SRGB;
125
+ c.r = 1; c.g = 1; c.b = 1;
126
+ is_warm(c)
127
+ `,
128
+ );
129
+
130
+ expect(result.value).toBe(false);
131
+ });
132
+
133
+ it("should return false for black (neutral)", async () => {
134
+ const result = await executeWithSchema(
135
+ "is_warm",
136
+ "function",
137
+ `
138
+ variable c: Color.SRGB;
139
+ c.r = 0; c.g = 0; c.b = 0;
140
+ is_warm(c)
141
+ `,
142
+ );
143
+
144
+ expect(result.value).toBe(false);
145
+ });
146
+
147
+ it("should return false for gray (neutral)", async () => {
148
+ const result = await executeWithSchema(
149
+ "is_warm",
150
+ "function",
151
+ `
152
+ variable c: Color.SRGB;
153
+ c.r = 0.5; c.g = 0.5; c.b = 0.5;
154
+ is_warm(c)
155
+ `,
156
+ );
157
+
158
+ expect(result.value).toBe(false);
159
+ });
160
+ });
161
+ });
@@ -0,0 +1,37 @@
1
+ // lighten: Increase lightness proportionally towards white
2
+ // Amount: 0-1 where 0.25 means 25% closer to white
3
+ //
4
+ // Algorithm: L' = L + (1 - L) * amount
5
+ // This ensures we approach white (L=1) proportionally.
6
+ //
7
+ // Input: Any color space (converted to OKLab internally)
8
+ // Output: OKLCH (working space)
9
+ // To get sRGB: lighten(color, 0.25).to.srgb()
10
+
11
+ variable input: List = {input};
12
+ variable color: Color.OKLab = input.get(0).to.oklab();
13
+
14
+ // Default amount is 0.25 (25%)
15
+ variable amount: Number = 0.25;
16
+ if (input.length() > 1) [
17
+ amount = input.get(1);
18
+ ];
19
+
20
+ // Calculate new lightness (move toward 1)
21
+ variable current_l: Number = color.l;
22
+ variable new_l: Number = current_l + (1 - current_l) * amount;
23
+
24
+ // Clamp to valid range
25
+ if (new_l > 1) [ new_l = 1; ];
26
+
27
+ // Create output in OKLab, return as OKLCH (working space)
28
+ variable result: Color.OKLab;
29
+ result.l = new_l;
30
+ result.a = color.a;
31
+ result.b = color.b;
32
+
33
+ return result.to.oklch();
34
+
35
+
36
+
37
+
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "Lighten",
3
+ "type": "function",
4
+ "description": "Makes a color lighter by increasing its lightness in OKLab space. Amount is 0-1 where 0.25 = 25% lighter.",
5
+ "keyword": "lighten",
6
+ "input": {
7
+ "type": "object",
8
+ "properties": {
9
+ "color": {
10
+ "type": "color",
11
+ "description": "The color to lighten"
12
+ },
13
+ "amount": {
14
+ "type": "number",
15
+ "description": "Amount to lighten (0-1). Default is 0.25"
16
+ }
17
+ }
18
+ },
19
+ "script": {
20
+ "type": "/api/v1/core/tokenscript/0/",
21
+ "script": "./lighten.tokenscript"
22
+ },
23
+ "requirements": ["/api/v1/core/oklab-color/0/", "/api/v1/core/srgb-color/0/"]
24
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Unit tests for the Lighten function
3
+ * Increases color lightness in OKLab perceptual space
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("Lighten Function", () => {
11
+ describe("Schema Definition", () => {
12
+ it("should have correct schema structure", async () => {
13
+ const schema = (await getBundledSchema("lighten", "function")) as FunctionSpecification;
14
+
15
+ expect(schema.name).toBe("Lighten");
16
+ expect(schema.type).toBe("function");
17
+ expect(schema.keyword).toBe("lighten");
18
+ });
19
+
20
+ it("should have script defined", async () => {
21
+ const schema = (await getBundledSchema("lighten", "function")) as FunctionSpecification;
22
+
23
+ expect(schema.script).toBeDefined();
24
+ expect(schema.script.script).toBeTruthy();
25
+ expect(schema.script.script).not.toContain("./");
26
+ });
27
+ });
28
+
29
+ describe("Function Execution", () => {
30
+ it("should lighten a dark color", async () => {
31
+ // Note: lighten() returns OKLCH, we chain .to.srgb() to get RGB values
32
+ const result = await executeWithSchema(
33
+ "lighten",
34
+ "function",
35
+ `
36
+ variable dark: Color.SRGB;
37
+ dark.r = 0.2; dark.g = 0.2; dark.b = 0.4;
38
+ lighten(dark, 0.2).to.srgb()
39
+ `,
40
+ );
41
+
42
+ expect(result?.constructor.name).toBe("ColorSymbol");
43
+ // Lightened color should have higher luminance
44
+ const r = (result as any).value.r.value;
45
+ const g = (result as any).value.g.value;
46
+ const b = (result as any).value.b.value;
47
+ expect(r).toBeGreaterThan(0.2);
48
+ expect(g).toBeGreaterThan(0.2);
49
+ expect(b).toBeGreaterThan(0.4);
50
+ });
51
+
52
+ it("should use default amount of 0.25", async () => {
53
+ const result = await executeWithSchema(
54
+ "lighten",
55
+ "function",
56
+ `
57
+ variable color: Color.SRGB;
58
+ color.r = 0.3; color.g = 0.3; color.b = 0.3;
59
+ lighten(color).to.srgb()
60
+ `,
61
+ );
62
+
63
+ expect(result?.constructor.name).toBe("ColorSymbol");
64
+ const r = (result as any).value.r.value;
65
+ expect(r).toBeGreaterThan(0.3);
66
+ });
67
+
68
+ it("should not exceed maximum lightness", async () => {
69
+ const result = await executeWithSchema(
70
+ "lighten",
71
+ "function",
72
+ `
73
+ variable bright: Color.SRGB;
74
+ bright.r = 0.9; bright.g = 0.9; bright.b = 0.9;
75
+ lighten(bright, 0.5).to.srgb()
76
+ `,
77
+ );
78
+
79
+ expect(result?.constructor.name).toBe("ColorSymbol");
80
+ const r = (result as any).value.r.value;
81
+ const g = (result as any).value.g.value;
82
+ const b = (result as any).value.b.value;
83
+ // Should be clamped to valid range
84
+ expect(r).toBeLessThanOrEqual(1);
85
+ expect(g).toBeLessThanOrEqual(1);
86
+ expect(b).toBeLessThanOrEqual(1);
87
+ });
88
+
89
+ it("should preserve hue when lightening", async () => {
90
+ const result = await executeWithSchema(
91
+ "lighten",
92
+ "function",
93
+ `
94
+ variable red: Color.SRGB;
95
+ red.r = 0.6; red.g = 0.1; red.b = 0.1;
96
+ lighten(red, 0.15).to.srgb()
97
+ `,
98
+ );
99
+
100
+ expect(result?.constructor.name).toBe("ColorSymbol");
101
+ const r = (result as any).value.r.value;
102
+ const g = (result as any).value.g.value;
103
+ const b = (result as any).value.b.value;
104
+ // Red should still dominate
105
+ expect(r).toBeGreaterThan(g);
106
+ expect(r).toBeGreaterThan(b);
107
+ });
108
+ });
109
+ });
@@ -0,0 +1,12 @@
1
+ // lightness: Extract perceptual lightness from a color
2
+ // Reference: OKLCH Color Space (Björn Ottosson)
3
+ // Reference: https://bottosson.github.io/posts/oklab/
4
+ //
5
+ // Returns the L component from OKLCH, which represents
6
+ // perceptually uniform lightness. Range: 0 (black) to 1 (white).
7
+
8
+ variable input: List = {input};
9
+ variable color: Color.OKLCH = input.get(0).to.oklch();
10
+
11
+ return color.l;
12
+