@terrazzo/token-tools 0.0.4 → 0.0.6
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.
- package/CHANGELOG.md +7 -0
- package/dist/color.d.ts +20 -2
- package/dist/color.js +70 -4
- package/dist/color.js.map +1 -1
- package/dist/css/color.js +13 -60
- package/dist/css/color.js.map +1 -1
- package/dist/css/cubic-bezier.d.ts +2 -2
- package/dist/css/index.js.map +1 -1
- package/dist/id.d.ts +2 -0
- package/dist/id.js +8 -0
- package/dist/id.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/types.d.ts +18 -15
- package/package.json +13 -11
- package/src/color.ts +0 -102
- package/src/css/boolean.ts +0 -15
- package/src/css/border.ts +0 -46
- package/src/css/color.ts +0 -86
- package/src/css/cubic-bezier.ts +0 -23
- package/src/css/dimension.ts +0 -15
- package/src/css/duration.ts +0 -15
- package/src/css/font-family.ts +0 -32
- package/src/css/font-weight.ts +0 -12
- package/src/css/gradient.ts +0 -42
- package/src/css/index.ts +0 -117
- package/src/css/lib.ts +0 -54
- package/src/css/link.ts +0 -12
- package/src/css/number.ts +0 -9
- package/src/css/shadow.ts +0 -75
- package/src/css/string.ts +0 -11
- package/src/css/stroke-style.ts +0 -13
- package/src/css/transition.ts +0 -41
- package/src/css/typography.ts +0 -44
- package/src/id.ts +0 -41
- package/src/index.ts +0 -5
- package/src/js/index.ts +0 -31
- package/src/string.ts +0 -27
- package/src/transform.ts +0 -23
- package/src/types.ts +0 -524
package/src/css/color.ts
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type Color,
|
|
3
|
-
displayable,
|
|
4
|
-
formatCss,
|
|
5
|
-
// @ts-expect-error: types missing
|
|
6
|
-
toGamut,
|
|
7
|
-
} from 'culori';
|
|
8
|
-
import { CSS_TO_CULORI, parseColor } from '../color.js';
|
|
9
|
-
import type { ColorValue } from '../types.js';
|
|
10
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
11
|
-
|
|
12
|
-
export type WideGamutColorValue = { '.': string; srgb: string; p3: string; rec2020: string };
|
|
13
|
-
|
|
14
|
-
/** Convert color value to CSS string */
|
|
15
|
-
export function transformColorValue(
|
|
16
|
-
value: string | ColorValue,
|
|
17
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
18
|
-
): string | WideGamutColorValue {
|
|
19
|
-
if (aliasOf) {
|
|
20
|
-
return transformAlias(aliasOf);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const { colorSpace, channels, alpha } = typeof value === 'string' ? parseColor(value) : value;
|
|
24
|
-
const color = { mode: CSS_TO_CULORI[colorSpace], alpha } as Color;
|
|
25
|
-
switch (color.mode) {
|
|
26
|
-
case 'a98':
|
|
27
|
-
case 'rec2020':
|
|
28
|
-
case 'p3':
|
|
29
|
-
case 'prophoto':
|
|
30
|
-
case 'lrgb':
|
|
31
|
-
case 'rgb': {
|
|
32
|
-
color.r = channels[0];
|
|
33
|
-
color.g = channels[1];
|
|
34
|
-
color.b = channels[2];
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
case 'hsl': {
|
|
38
|
-
color.h = channels[0];
|
|
39
|
-
color.s = channels[1];
|
|
40
|
-
color.l = channels[2];
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
case 'hsv': {
|
|
44
|
-
color.h = channels[0];
|
|
45
|
-
color.s = channels[1];
|
|
46
|
-
color.v = channels[2];
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
case 'hwb': {
|
|
50
|
-
color.h = channels[0];
|
|
51
|
-
color.w = channels[1];
|
|
52
|
-
color.b = channels[2];
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
case 'lab':
|
|
56
|
-
case 'oklab': {
|
|
57
|
-
color.l = channels[0];
|
|
58
|
-
color.a = channels[1];
|
|
59
|
-
color.b = channels[2];
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
case 'lch':
|
|
63
|
-
case 'oklch': {
|
|
64
|
-
color.l = channels[0];
|
|
65
|
-
color.c = channels[1];
|
|
66
|
-
color.h = channels[2];
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
case 'xyz50':
|
|
70
|
-
case 'xyz65': {
|
|
71
|
-
color.x = channels[0];
|
|
72
|
-
color.y = channels[1];
|
|
73
|
-
color.z = channels[2];
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return displayable(color)
|
|
79
|
-
? formatCss(color)
|
|
80
|
-
: {
|
|
81
|
-
'.': formatCss(color),
|
|
82
|
-
srgb: (typeof value === 'object' && value.hex) || formatCss(toGamut('rgb')(color) as Color),
|
|
83
|
-
p3: formatCss(toGamut('p3')(color) as Color),
|
|
84
|
-
rec2020: formatCss(toGamut('rec2020')(color) as Color),
|
|
85
|
-
};
|
|
86
|
-
}
|
package/src/css/cubic-bezier.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { CubicBézierValue } from '../types.js';
|
|
2
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
3
|
-
|
|
4
|
-
/** Convert cubicBezier value to CSS */
|
|
5
|
-
export function transformCubicBezierValue(
|
|
6
|
-
value: CubicBézierValue,
|
|
7
|
-
{
|
|
8
|
-
aliasOf,
|
|
9
|
-
partialAliasOf,
|
|
10
|
-
transformAlias = defaultAliasTransform,
|
|
11
|
-
}: {
|
|
12
|
-
aliasOf?: string;
|
|
13
|
-
partialAliasOf?: [string | undefined, string | undefined, string | undefined, string | undefined];
|
|
14
|
-
transformAlias?: IDGenerator;
|
|
15
|
-
} = {},
|
|
16
|
-
): string {
|
|
17
|
-
if (aliasOf) {
|
|
18
|
-
return transformAlias(aliasOf);
|
|
19
|
-
}
|
|
20
|
-
return `cubic-bezier(${value
|
|
21
|
-
.map((v, i) => (partialAliasOf?.[i] ? transformAlias(partialAliasOf[i]!) : v))
|
|
22
|
-
.join(', ')})`;
|
|
23
|
-
}
|
package/src/css/dimension.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert dimension value to CSS */
|
|
4
|
-
export function transformDimensionValue(
|
|
5
|
-
value: number | string,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
if (aliasOf) {
|
|
9
|
-
return transformAlias(aliasOf);
|
|
10
|
-
}
|
|
11
|
-
if (typeof value === 'number') {
|
|
12
|
-
return value === 0 ? '0' : `${value}px`;
|
|
13
|
-
}
|
|
14
|
-
return value === '0' || Number.parseFloat(value) === 0 ? '0' : value;
|
|
15
|
-
}
|
package/src/css/duration.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert duration value to CSS */
|
|
4
|
-
export function transformDurationValue(
|
|
5
|
-
value: number | string,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
if (aliasOf) {
|
|
9
|
-
return transformAlias(aliasOf);
|
|
10
|
-
}
|
|
11
|
-
if (typeof value === 'number' || String(Number.parseFloat(value)) === value) {
|
|
12
|
-
return `${value}ms`;
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
package/src/css/font-family.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
export const FONT_FAMILY_KEYWORDS = new Set([
|
|
4
|
-
'sans-serif',
|
|
5
|
-
'serif',
|
|
6
|
-
'monospace',
|
|
7
|
-
'system-ui',
|
|
8
|
-
'ui-monospace',
|
|
9
|
-
'-apple-system',
|
|
10
|
-
]);
|
|
11
|
-
|
|
12
|
-
export function transformFontFamilyValue(
|
|
13
|
-
value: string | string[],
|
|
14
|
-
{
|
|
15
|
-
aliasOf,
|
|
16
|
-
partialAliasOf,
|
|
17
|
-
transformAlias = defaultAliasTransform,
|
|
18
|
-
}: { aliasOf?: string; partialAliasOf?: string[]; transformAlias?: IDGenerator } = {},
|
|
19
|
-
): string {
|
|
20
|
-
if (aliasOf) {
|
|
21
|
-
return transformAlias(aliasOf);
|
|
22
|
-
}
|
|
23
|
-
return (typeof value === 'string' ? [value] : value)
|
|
24
|
-
.map((fontName, i) =>
|
|
25
|
-
partialAliasOf?.[i]
|
|
26
|
-
? transformAlias(partialAliasOf[i]!)
|
|
27
|
-
: FONT_FAMILY_KEYWORDS.has(fontName)
|
|
28
|
-
? fontName
|
|
29
|
-
: `"${fontName}"`,
|
|
30
|
-
)
|
|
31
|
-
.join(', ');
|
|
32
|
-
}
|
package/src/css/font-weight.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert fontWeight value to CSS */
|
|
4
|
-
export function transformFontWeightValue(
|
|
5
|
-
value: number | string,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
if (aliasOf) {
|
|
9
|
-
return transformAlias(aliasOf);
|
|
10
|
-
}
|
|
11
|
-
return String(value);
|
|
12
|
-
}
|
package/src/css/gradient.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { GradientStopNormalized, GradientValueNormalized } from '../types';
|
|
2
|
-
import { transformColorValue, type WideGamutColorValue } from './color.js';
|
|
3
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
4
|
-
|
|
5
|
-
/** Convert gradient value to CSS */
|
|
6
|
-
export function transformGradientValue(
|
|
7
|
-
value: GradientValueNormalized,
|
|
8
|
-
{
|
|
9
|
-
aliasOf,
|
|
10
|
-
partialAliasOf,
|
|
11
|
-
transformAlias = defaultAliasTransform,
|
|
12
|
-
}: {
|
|
13
|
-
aliasOf?: string;
|
|
14
|
-
partialAliasOf?: Partial<Record<keyof GradientStopNormalized, string>>[];
|
|
15
|
-
transformAlias?: IDGenerator;
|
|
16
|
-
} = {},
|
|
17
|
-
): string | WideGamutColorValue {
|
|
18
|
-
if (aliasOf) {
|
|
19
|
-
return transformAlias(aliasOf);
|
|
20
|
-
}
|
|
21
|
-
const colors = value.map(({ color }, i) =>
|
|
22
|
-
partialAliasOf?.[i]?.color ? transformAlias(partialAliasOf[i]!.color as string) : transformColorValue(color),
|
|
23
|
-
);
|
|
24
|
-
const positions = value.map(({ position }, i) =>
|
|
25
|
-
partialAliasOf?.[i]?.position ? transformAlias(String(partialAliasOf[i]!.position)) : `${100 * position}%`,
|
|
26
|
-
);
|
|
27
|
-
const isHDR = colors.some((c) => typeof c === 'object');
|
|
28
|
-
const formatStop = (index: number, colorKey = '.') =>
|
|
29
|
-
[
|
|
30
|
-
typeof colors[index] === 'string' ? colors[index] : colors[index]![colorKey as keyof (typeof colors)[number]],
|
|
31
|
-
positions[index]!,
|
|
32
|
-
].join(' ');
|
|
33
|
-
|
|
34
|
-
return !isHDR
|
|
35
|
-
? value.map((_, i) => formatStop(i, positions[i]!)).join(', ')
|
|
36
|
-
: {
|
|
37
|
-
'.': value.map((_, i) => formatStop(i, '.')).join(', '),
|
|
38
|
-
srgb: value.map((_, i) => formatStop(i, 'srgb')).join(', '),
|
|
39
|
-
p3: value.map((_, i) => formatStop(i, 'p3')).join(', '),
|
|
40
|
-
rec2020: value.map((_, i) => formatStop(i, 'rec2020')).join(', '),
|
|
41
|
-
};
|
|
42
|
-
}
|
package/src/css/index.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import type { TokenNormalized } from '../types.js';
|
|
2
|
-
import { transformBooleanValue } from './boolean.js';
|
|
3
|
-
import type { IDGenerator } from './lib.js';
|
|
4
|
-
import { transformBorderValue } from './border.js';
|
|
5
|
-
import { transformColorValue } from './color.js';
|
|
6
|
-
import { transformCubicBezierValue } from './cubic-bezier.js';
|
|
7
|
-
import { transformDimensionValue } from './dimension.js';
|
|
8
|
-
import { transformDurationValue } from './duration.js';
|
|
9
|
-
import { transformFontFamilyValue } from './font-family.js';
|
|
10
|
-
import { transformFontWeightValue } from './font-weight.js';
|
|
11
|
-
import { transformGradientValue } from './gradient.js';
|
|
12
|
-
import { transformNumberValue } from './number.js';
|
|
13
|
-
import { transformLinkValue } from './link.js';
|
|
14
|
-
import { transformShadowValue } from './shadow.js';
|
|
15
|
-
import { transformStringValue } from './string.js';
|
|
16
|
-
import { transformTypographyValue } from './typography.js';
|
|
17
|
-
import { transformTransitionValue } from './transition.js';
|
|
18
|
-
import { transformStrokeStyleValue } from './stroke-style.js';
|
|
19
|
-
|
|
20
|
-
export * from './boolean.js';
|
|
21
|
-
export * from './border.js';
|
|
22
|
-
export * from './color.js';
|
|
23
|
-
export * from './cubic-bezier.js';
|
|
24
|
-
export * from './dimension.js';
|
|
25
|
-
export * from './duration.js';
|
|
26
|
-
export * from './font-family.js';
|
|
27
|
-
export * from './font-weight.js';
|
|
28
|
-
export * from './gradient.js';
|
|
29
|
-
export * from './lib.js';
|
|
30
|
-
export * from './link.js';
|
|
31
|
-
export * from './number.js';
|
|
32
|
-
export * from './shadow.js';
|
|
33
|
-
export * from './string.js';
|
|
34
|
-
export * from './stroke-style.js';
|
|
35
|
-
export * from './transition.js';
|
|
36
|
-
export * from './typography.js';
|
|
37
|
-
|
|
38
|
-
export interface TransformCSSValueOptions {
|
|
39
|
-
mode: string;
|
|
40
|
-
transformAlias: IDGenerator;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Main CSS Transform */
|
|
44
|
-
export function transformCSSValue<T extends TokenNormalized>(
|
|
45
|
-
token: T,
|
|
46
|
-
{ mode, transformAlias }: TransformCSSValueOptions,
|
|
47
|
-
) {
|
|
48
|
-
if (!token.mode[mode]) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
switch (token.$type) {
|
|
52
|
-
case 'boolean': {
|
|
53
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
54
|
-
return transformBooleanValue($value, { aliasOf, transformAlias });
|
|
55
|
-
}
|
|
56
|
-
case 'border': {
|
|
57
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
58
|
-
return transformBorderValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
59
|
-
}
|
|
60
|
-
case 'color': {
|
|
61
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
62
|
-
return transformColorValue($value, { aliasOf, transformAlias });
|
|
63
|
-
}
|
|
64
|
-
case 'cubicBezier': {
|
|
65
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
66
|
-
return transformCubicBezierValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
67
|
-
}
|
|
68
|
-
case 'dimension': {
|
|
69
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
70
|
-
return transformDimensionValue($value, { aliasOf, transformAlias });
|
|
71
|
-
}
|
|
72
|
-
case 'duration': {
|
|
73
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
74
|
-
return transformDurationValue($value, { aliasOf, transformAlias });
|
|
75
|
-
}
|
|
76
|
-
case 'fontFamily': {
|
|
77
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
78
|
-
return transformFontFamilyValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
79
|
-
}
|
|
80
|
-
case 'fontWeight': {
|
|
81
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
82
|
-
return transformFontWeightValue($value, { aliasOf, transformAlias });
|
|
83
|
-
}
|
|
84
|
-
case 'gradient': {
|
|
85
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
86
|
-
return transformGradientValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
87
|
-
}
|
|
88
|
-
case 'link': {
|
|
89
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
90
|
-
return transformLinkValue($value, { aliasOf, transformAlias });
|
|
91
|
-
}
|
|
92
|
-
case 'number': {
|
|
93
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
94
|
-
return transformNumberValue($value, { aliasOf, transformAlias });
|
|
95
|
-
}
|
|
96
|
-
case 'shadow': {
|
|
97
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
98
|
-
return transformShadowValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
99
|
-
}
|
|
100
|
-
case 'string': {
|
|
101
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
102
|
-
return transformStringValue($value, { aliasOf, transformAlias });
|
|
103
|
-
}
|
|
104
|
-
case 'strokeStyle': {
|
|
105
|
-
const { $value, aliasOf } = token.mode[mode]!;
|
|
106
|
-
return transformStrokeStyleValue($value, { aliasOf, transformAlias });
|
|
107
|
-
}
|
|
108
|
-
case 'transition': {
|
|
109
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
110
|
-
return transformTransitionValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
111
|
-
}
|
|
112
|
-
case 'typography': {
|
|
113
|
-
const { $value, aliasOf, partialAliasOf } = token.mode[mode]!;
|
|
114
|
-
return transformTypographyValue($value, { aliasOf, partialAliasOf, transformAlias });
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
package/src/css/lib.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { kebabCase } from 'scule';
|
|
2
|
-
|
|
3
|
-
/** Function that generates a var(…) statement */
|
|
4
|
-
export type IDGenerator = (id: string) => string;
|
|
5
|
-
|
|
6
|
-
export const defaultAliasTransform = (id: string) => `var(${makeCSSVar(id)})`;
|
|
7
|
-
|
|
8
|
-
/** Generate shorthand CSS for select token types */
|
|
9
|
-
export function generateShorthand({ $type, localID }: { $type: string; localID: string }): string | undefined {
|
|
10
|
-
switch ($type) {
|
|
11
|
-
case 'transition': {
|
|
12
|
-
return ['duration', 'delay', 'timing-function']
|
|
13
|
-
.map((p) => makeCSSVar(`${localID}-${p}`, { wrapVar: true }))
|
|
14
|
-
.join(' ');
|
|
15
|
-
}
|
|
16
|
-
// note: "typography" is not set in shorthand because it can often unset values unintentionally.
|
|
17
|
-
// @see https://developer.mozilla.org/en-US/docs/Web/CSS/font
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Build object of alias values */
|
|
22
|
-
export function transformCompositeAlias<T extends {}>(
|
|
23
|
-
value: T,
|
|
24
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf: string; transformAlias?: IDGenerator },
|
|
25
|
-
): Record<string, string> {
|
|
26
|
-
const output: Record<string, string> = {};
|
|
27
|
-
for (const key in value) {
|
|
28
|
-
output[kebabCase(key)] = transformAlias(`${aliasOf}-${key}`);
|
|
29
|
-
}
|
|
30
|
-
return output as Record<keyof T, string>;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const CSS_VAR_RE =
|
|
34
|
-
/(?:(\p{Uppercase_Letter}?\p{Lowercase_Letter}+|\p{Uppercase_Letter}+|\p{Number}+|[\u{80}-\u{10FFFF}]+|_)|.)/u;
|
|
35
|
-
|
|
36
|
-
export interface MakeCSSVarOptions {
|
|
37
|
-
/** Prefix with string */
|
|
38
|
-
prefix?: string;
|
|
39
|
-
/** Wrap with `var(…)` (default: false) */
|
|
40
|
-
wrapVar?: boolean;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Generate a valid CSS variable from any string
|
|
45
|
-
* Code by @dfrankland
|
|
46
|
-
*/
|
|
47
|
-
export function makeCSSVar(name: string, { prefix, wrapVar = false }: MakeCSSVarOptions = {}): string {
|
|
48
|
-
let property = name.split(CSS_VAR_RE).filter(Boolean).join('-');
|
|
49
|
-
if (prefix && !property.startsWith(`${prefix}-`)) {
|
|
50
|
-
property = `${prefix}-${property}`;
|
|
51
|
-
}
|
|
52
|
-
const finalProperty = `--${property}`.toLocaleLowerCase();
|
|
53
|
-
return wrapVar ? `var(${finalProperty})` : finalProperty;
|
|
54
|
-
}
|
package/src/css/link.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert link value to CSS */
|
|
4
|
-
export function transformLinkValue(
|
|
5
|
-
value: string,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
if (aliasOf) {
|
|
9
|
-
return transformAlias(aliasOf);
|
|
10
|
-
}
|
|
11
|
-
return `url("${value}")`;
|
|
12
|
-
}
|
package/src/css/number.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert number value to CSS */
|
|
4
|
-
export function transformNumberValue(
|
|
5
|
-
value: number,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
return aliasOf ? transformAlias(aliasOf) : String(value);
|
|
9
|
-
}
|
package/src/css/shadow.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { ShadowTokenNormalized, ShadowValueNormalized } from '../types';
|
|
2
|
-
import { transformColorValue } from './color.js';
|
|
3
|
-
import { transformDimensionValue } from './dimension.js';
|
|
4
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
5
|
-
|
|
6
|
-
/** Convert shadow subvalue to CSS */
|
|
7
|
-
export function transformShadowLayer(
|
|
8
|
-
value: ShadowValueNormalized,
|
|
9
|
-
{
|
|
10
|
-
color,
|
|
11
|
-
partialAliasOf,
|
|
12
|
-
transformAlias = defaultAliasTransform,
|
|
13
|
-
}: {
|
|
14
|
-
color: string;
|
|
15
|
-
partialAliasOf?: Partial<Record<keyof ShadowValueNormalized, string>>;
|
|
16
|
-
transformAlias?: IDGenerator;
|
|
17
|
-
},
|
|
18
|
-
): string | Record<string, string> {
|
|
19
|
-
const offsetX = partialAliasOf?.offsetX
|
|
20
|
-
? transformAlias(partialAliasOf.offsetX)
|
|
21
|
-
: transformDimensionValue(value.offsetX, { transformAlias });
|
|
22
|
-
const offsetY = partialAliasOf?.offsetY
|
|
23
|
-
? transformAlias(partialAliasOf.offsetY)
|
|
24
|
-
: transformDimensionValue(value.offsetY, { transformAlias });
|
|
25
|
-
const blur = partialAliasOf?.blur
|
|
26
|
-
? transformAlias(partialAliasOf.blur)
|
|
27
|
-
: transformDimensionValue(value.blur, { transformAlias });
|
|
28
|
-
const spread = partialAliasOf?.spread
|
|
29
|
-
? transformAlias(partialAliasOf.spread)
|
|
30
|
-
: transformDimensionValue(value.spread, { transformAlias });
|
|
31
|
-
|
|
32
|
-
return [offsetX, offsetY, blur, spread, color].join(' ');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** Convert shadow value to CSS */
|
|
36
|
-
export function transformShadowValue(
|
|
37
|
-
value: ShadowTokenNormalized['$value'],
|
|
38
|
-
{
|
|
39
|
-
aliasOf,
|
|
40
|
-
partialAliasOf,
|
|
41
|
-
transformAlias = defaultAliasTransform,
|
|
42
|
-
}: {
|
|
43
|
-
aliasOf?: string;
|
|
44
|
-
partialAliasOf?: Partial<Record<keyof ShadowValueNormalized, string>>[];
|
|
45
|
-
transformAlias?: IDGenerator;
|
|
46
|
-
} = {},
|
|
47
|
-
): string | Record<string, string> {
|
|
48
|
-
if (aliasOf) {
|
|
49
|
-
return transformAlias(aliasOf);
|
|
50
|
-
}
|
|
51
|
-
const colors = value.map(({ color }, i) =>
|
|
52
|
-
partialAliasOf?.[i]?.color
|
|
53
|
-
? transformAlias(partialAliasOf[i]!.color!)
|
|
54
|
-
: transformColorValue(color, { transformAlias }),
|
|
55
|
-
);
|
|
56
|
-
const isHDR = colors.some((c) => typeof c === 'object');
|
|
57
|
-
|
|
58
|
-
const formatShadow = (colorKey: string) =>
|
|
59
|
-
value
|
|
60
|
-
.map((v, i) =>
|
|
61
|
-
transformShadowLayer(v, {
|
|
62
|
-
color:
|
|
63
|
-
typeof colors[i] === 'string'
|
|
64
|
-
? (colors[i] as string)
|
|
65
|
-
: colors[i]![colorKey as keyof (typeof colors)[number]]!,
|
|
66
|
-
partialAliasOf: partialAliasOf?.[i],
|
|
67
|
-
transformAlias,
|
|
68
|
-
}),
|
|
69
|
-
)
|
|
70
|
-
.join(', ');
|
|
71
|
-
|
|
72
|
-
return !isHDR
|
|
73
|
-
? formatShadow('.')
|
|
74
|
-
: { '.': formatShadow('.'), srgb: formatShadow('srgb'), p3: formatShadow('p3'), rec2020: formatShadow('rec2020') };
|
|
75
|
-
}
|
package/src/css/string.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
2
|
-
|
|
3
|
-
/** Convert string value to CSS */
|
|
4
|
-
export function transformStringValue(
|
|
5
|
-
value: string | number | boolean,
|
|
6
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
7
|
-
): string {
|
|
8
|
-
// this seems like a useless function—because it is—but this is a placeholder
|
|
9
|
-
// that can handle unexpected values in the future should any arise
|
|
10
|
-
return aliasOf ? transformAlias(aliasOf) : String(value);
|
|
11
|
-
}
|
package/src/css/stroke-style.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { StrokeStyleValue } from '../types.js';
|
|
2
|
-
import { type IDGenerator, defaultAliasTransform } from './lib.js';
|
|
3
|
-
|
|
4
|
-
/** Convert strokeStyle value to CSS */
|
|
5
|
-
export function transformStrokeStyleValue(
|
|
6
|
-
value: string | StrokeStyleValue,
|
|
7
|
-
{ aliasOf, transformAlias = defaultAliasTransform }: { aliasOf?: string; transformAlias?: IDGenerator } = {},
|
|
8
|
-
): string {
|
|
9
|
-
if (aliasOf) {
|
|
10
|
-
return transformAlias(aliasOf);
|
|
11
|
-
}
|
|
12
|
-
return typeof value === 'string' ? value : 'dashed'; // CSS doesn’t have `dash-array`; it’s just "dashed"
|
|
13
|
-
}
|
package/src/css/transition.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { TransitionValueNormalized } from '../types.js';
|
|
2
|
-
import { transformCubicBezierValue } from './cubic-bezier.js';
|
|
3
|
-
import { transformDurationValue } from './duration.js';
|
|
4
|
-
import { type IDGenerator, defaultAliasTransform, transformCompositeAlias } from './lib.js';
|
|
5
|
-
|
|
6
|
-
/** Convert transition value to multiple CSS values */
|
|
7
|
-
export function transformTransitionValue(
|
|
8
|
-
value: TransitionValueNormalized,
|
|
9
|
-
{
|
|
10
|
-
aliasOf,
|
|
11
|
-
partialAliasOf,
|
|
12
|
-
transformAlias = defaultAliasTransform,
|
|
13
|
-
}: {
|
|
14
|
-
aliasOf?: string;
|
|
15
|
-
partialAliasOf?: Partial<Record<keyof typeof value, string>>;
|
|
16
|
-
transformAlias?: IDGenerator;
|
|
17
|
-
} = {},
|
|
18
|
-
): {
|
|
19
|
-
duration: ReturnType<typeof transformDurationValue>;
|
|
20
|
-
delay: ReturnType<typeof transformDurationValue>;
|
|
21
|
-
'timing-function': ReturnType<typeof transformCubicBezierValue>;
|
|
22
|
-
} {
|
|
23
|
-
if (aliasOf) {
|
|
24
|
-
return transformCompositeAlias(value, { aliasOf, transformAlias }) as {
|
|
25
|
-
duration: ReturnType<typeof transformDurationValue>;
|
|
26
|
-
delay: ReturnType<typeof transformDurationValue>;
|
|
27
|
-
'timing-function': ReturnType<typeof transformCubicBezierValue>;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
duration: partialAliasOf?.duration
|
|
32
|
-
? transformAlias(partialAliasOf.duration)
|
|
33
|
-
: transformDurationValue(value.duration, { transformAlias }),
|
|
34
|
-
delay: partialAliasOf?.delay
|
|
35
|
-
? transformAlias(partialAliasOf.delay)
|
|
36
|
-
: transformDurationValue(value.delay, { transformAlias }),
|
|
37
|
-
'timing-function': partialAliasOf?.timingFunction
|
|
38
|
-
? transformAlias(partialAliasOf.timingFunction)
|
|
39
|
-
: transformCubicBezierValue(value.timingFunction, { transformAlias }),
|
|
40
|
-
};
|
|
41
|
-
}
|
package/src/css/typography.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { kebabCase } from 'scule';
|
|
2
|
-
import { transformFontFamilyValue } from './font-family.js';
|
|
3
|
-
import { transformFontWeightValue } from './font-weight.js';
|
|
4
|
-
import { type IDGenerator, defaultAliasTransform, transformCompositeAlias } from './lib.js';
|
|
5
|
-
import { transformStringValue } from './string.js';
|
|
6
|
-
|
|
7
|
-
/** Convert typography value to multiple CSS values */
|
|
8
|
-
export function transformTypographyValue(
|
|
9
|
-
value: Record<string, string | string[]>,
|
|
10
|
-
{
|
|
11
|
-
aliasOf,
|
|
12
|
-
partialAliasOf,
|
|
13
|
-
transformAlias = defaultAliasTransform,
|
|
14
|
-
}: { aliasOf?: string; partialAliasOf?: Record<keyof typeof value, string>; transformAlias?: IDGenerator } = {},
|
|
15
|
-
): Record<string, string> {
|
|
16
|
-
const output: Record<string, string> = {};
|
|
17
|
-
if (aliasOf) {
|
|
18
|
-
return transformCompositeAlias(value, { aliasOf, transformAlias });
|
|
19
|
-
}
|
|
20
|
-
for (const [property, subvalue] of Object.entries(value)) {
|
|
21
|
-
let transformedValue: string;
|
|
22
|
-
if (partialAliasOf?.[property]) {
|
|
23
|
-
transformedValue = transformAlias(partialAliasOf[property]!);
|
|
24
|
-
} else {
|
|
25
|
-
switch (property) {
|
|
26
|
-
case 'fontFamily': {
|
|
27
|
-
transformedValue = transformFontFamilyValue(subvalue as string[], { transformAlias });
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
case 'fontSize':
|
|
31
|
-
case 'fontWeight': {
|
|
32
|
-
transformedValue = transformFontWeightValue(subvalue as string, { transformAlias });
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
default: {
|
|
36
|
-
transformedValue = transformStringValue(subvalue as string, { transformAlias });
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
output[kebabCase(property)] = transformedValue;
|
|
42
|
-
}
|
|
43
|
-
return output;
|
|
44
|
-
}
|
package/src/id.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import wcmatch from 'wildcard-match';
|
|
2
|
-
|
|
3
|
-
const ALIAS_RE = /^\{([^}]+)\}$/;
|
|
4
|
-
|
|
5
|
-
/** Is this token an alias of another? */
|
|
6
|
-
export function isAlias(value: unknown): boolean {
|
|
7
|
-
if (typeof value !== 'string') {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
return ALIAS_RE.test(value);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/** Match token against globs */
|
|
14
|
-
export function isTokenMatch(tokenID: string, globPatterns: string[]): boolean {
|
|
15
|
-
return wcmatch(globPatterns)(tokenID);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/** Make an alias */
|
|
19
|
-
export function makeAlias(input: string): string {
|
|
20
|
-
return input.replace(/^\{?([^}]+)\}?$/, '{$1}');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Parse an alias */
|
|
24
|
-
export function parseAlias(input: string): { id: string; mode?: string } {
|
|
25
|
-
const match = input.match(ALIAS_RE);
|
|
26
|
-
if (!match) {
|
|
27
|
-
return { id: input };
|
|
28
|
-
}
|
|
29
|
-
const rawID = match[1] ?? match[0];
|
|
30
|
-
const hashI = rawID.indexOf('#');
|
|
31
|
-
return hashI === -1 ? { id: rawID } : { id: rawID.substring(0, hashI), mode: rawID.substring(hashI + 1) };
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** split a token ID into a local ID and group ID */
|
|
35
|
-
export function splitID(id: string): { local: string; group?: string } {
|
|
36
|
-
const lastSeparatorI = id.lastIndexOf('.');
|
|
37
|
-
if (lastSeparatorI === -1) {
|
|
38
|
-
return { local: id };
|
|
39
|
-
}
|
|
40
|
-
return { local: id.substring(lastSeparatorI + 1), group: id.substring(0, lastSeparatorI) };
|
|
41
|
-
}
|