/** @type {ReadonlySet<string>} */
export const camelCaseFunctions = new Set([
	'translateX',
	'translateY',
	'translateZ',
	'scaleX',
	'scaleY',
	'scaleZ',
	'rotateX',
	'rotateY',
	'rotateZ',
	'skewX',
	'skewY',
]);

/** @type {ReadonlySet<string>} */
export const hueAsFirstComponentColorFunctions = new Set(['hsl', 'hsla', 'hwb']);

/** @type {ReadonlySet<string>} */
export const hueAsThirdComponentColorFunctions = new Set(['lch', 'oklch']);

/** @type {ReadonlySet<string>} */
export const hueColorFunctions = new Set([
	...hueAsFirstComponentColorFunctions,
	...hueAsThirdComponentColorFunctions,
]);

/** @type {ReadonlySet<string>} */
export const lightnessZeroToOneColorFunctions = new Set(['oklab', 'oklch']);

/** @type {ReadonlySet<string>} */
export const lightnessZeroToHundredColorFunctions = new Set(['lab', 'lch']);

/** @type {ReadonlySet<string>} */
export const lightnessColorFunctions = new Set([
	...lightnessZeroToOneColorFunctions,
	...lightnessZeroToHundredColorFunctions,
]);

/** @type {ReadonlySet<string>} */
export const withAlphaAliasColorFunctions = new Set(['hsla', 'rgba']);

/** @type {ReadonlySet<string>} */
export const withoutAlphaAliasColorFunctions = new Set(['hsl', 'rgb']);

/** @type {ReadonlySet<string>} */
export const legacyNotationColorFunctions = new Set([
	...withAlphaAliasColorFunctions,
	...withoutAlphaAliasColorFunctions,
]);

/** @type {ReadonlySet<string>} */
export const colorFunctions = new Set([
	'color',
	'color-contrast',
	'color-mix',
	'contrast-color',
	'device-cmyk',
	'hsl',
	'hsla',
	'hwb',
	'lab',
	'lch',
	'light-dark',
	'oklab',
	'oklch',
	'rgb',
	'rgba',
]);

/** @type {ReadonlySet<string>} */
const singleArgumentMathFunctions = new Set([
	'abs',
	'acos',
	'asin',
	'atan',
	'calc',
	'cos',
	'exp',
	'sign',
	'sin',
	'sqrt',
	'tan',
]);

/** @type {ReadonlySet<string>} */
export const mathFunctions = new Set([
	...singleArgumentMathFunctions,
	'atan2',
	'calc-size',
	'clamp',
	'hypot',
	'log',
	'max',
	'min',
	'mod',
	'pow',
	'rem',
	'round',
]);
