@sxl-studio/token-transformer 1.0.0 → 2.0.0
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/README.en.md +77 -608
- package/README.md +77 -685
- package/config/sxl-transform.config.yaml +120 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +411 -141
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts +6 -0
- package/dist/config/loader.js +160 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +847 -0
- package/dist/config/schema.js +123 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/color-modifiers.d.ts +31 -0
- package/dist/core/color-modifiers.js +289 -0
- package/dist/core/color-modifiers.js.map +1 -0
- package/dist/core/color-parser.d.ts +24 -0
- package/dist/core/color-parser.js +281 -0
- package/dist/core/color-parser.js.map +1 -0
- package/dist/core/debug-report.d.ts +11 -0
- package/dist/core/debug-report.js +161 -0
- package/dist/core/debug-report.js.map +1 -0
- package/dist/core/incremental.d.ts +18 -0
- package/dist/core/incremental.js +105 -0
- package/dist/core/incremental.js.map +1 -0
- package/dist/core/math.d.ts +3 -0
- package/dist/core/math.js +261 -0
- package/dist/core/math.js.map +1 -0
- package/dist/core/parser.d.ts +4 -3
- package/dist/core/parser.js +68 -172
- package/dist/core/parser.js.map +1 -1
- package/dist/core/resolver.d.ts +26 -0
- package/dist/core/resolver.js +431 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/token-loader.d.ts +11 -0
- package/dist/core/token-loader.js +380 -0
- package/dist/core/token-loader.js.map +1 -0
- package/dist/core/token-parser.d.ts +9 -0
- package/dist/core/token-parser.js +138 -0
- package/dist/core/token-parser.js.map +1 -0
- package/dist/core/token-types.d.ts +7 -0
- package/dist/core/token-types.js +132 -0
- package/dist/core/token-types.js.map +1 -0
- package/dist/core/types.d.ts +154 -63
- package/dist/core/writer.d.ts +18 -5
- package/dist/core/writer.js +545 -91
- package/dist/core/writer.js.map +1 -1
- package/dist/emit/css.d.ts +2 -0
- package/dist/emit/css.js +538 -0
- package/dist/emit/css.js.map +1 -0
- package/dist/emit/kotlin.d.ts +2 -0
- package/dist/emit/kotlin.js +406 -0
- package/dist/emit/kotlin.js.map +1 -0
- package/dist/emit/shared.d.ts +13 -0
- package/dist/emit/shared.js +127 -0
- package/dist/emit/shared.js.map +1 -0
- package/dist/emit/swift.d.ts +2 -0
- package/dist/emit/swift.js +432 -0
- package/dist/emit/swift.js.map +1 -0
- package/dist/emit/typography.d.ts +17 -0
- package/dist/emit/typography.js +132 -0
- package/dist/emit/typography.js.map +1 -0
- package/dist/emit/xml.d.ts +2 -0
- package/dist/emit/xml.js +311 -0
- package/dist/emit/xml.js.map +1 -0
- package/dist/index.d.ts +15 -6
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/transformers/css.d.ts +1 -1
- package/dist/transformers/css.js +13 -482
- package/dist/transformers/css.js.map +1 -1
- package/dist/transformers/kotlin.d.ts +2 -2
- package/dist/transformers/kotlin.js +14 -442
- package/dist/transformers/kotlin.js.map +1 -1
- package/dist/transformers/swiftui.d.ts +2 -2
- package/dist/transformers/swiftui.js +14 -433
- package/dist/transformers/swiftui.js.map +1 -1
- package/dist/utils/color.d.ts +7 -5
- package/dist/utils/color.js +90 -86
- package/dist/utils/color.js.map +1 -1
- package/dist/utils/dimension.d.ts +8 -5
- package/dist/utils/dimension.js +54 -52
- package/dist/utils/dimension.js.map +1 -1
- package/dist/utils/naming.d.ts +10 -12
- package/dist/utils/naming.js +102 -44
- package/dist/utils/naming.js.map +1 -1
- package/package.json +30 -10
- package/config.example.json +0 -45
- package/dist/core/loader.d.ts +0 -8
- package/dist/core/loader.js +0 -105
- package/dist/core/loader.js.map +0 -1
- package/dist/transformers/vue3.d.ts +0 -28
- package/dist/transformers/vue3.js +0 -534
- package/dist/transformers/vue3.js.map +0 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { normalizeTokenTypeKey } from "../core/token-types.js";
|
|
2
|
+
import { parseColor, rgbaToSwift } from "../utils/color.js";
|
|
3
|
+
import { toSwiftNumber, trimFloat } from "../utils/dimension.js";
|
|
4
|
+
import { swiftIdentifier } from "../utils/naming.js";
|
|
5
|
+
import { normalizeTextCase, normalizeTextDecoration, normalizeVerticalTrimFromTypography, parseTypographyMetric, primaryFontFamily, toTypographyObject, } from "./typography.js";
|
|
6
|
+
import { buildNamedTokens } from "./shared.js";
|
|
7
|
+
export function emitSwift(input) {
|
|
8
|
+
const diagnostics = [];
|
|
9
|
+
const named = buildNamedTokens(input.tokens, {
|
|
10
|
+
platform: "swift",
|
|
11
|
+
prefix: input.prefix,
|
|
12
|
+
strategy: input.collisions,
|
|
13
|
+
diagnostics,
|
|
14
|
+
outputId: input.outputId,
|
|
15
|
+
});
|
|
16
|
+
const prefix = input.prefix ? swiftIdentifier(input.prefix, "upper") : "DS";
|
|
17
|
+
const colorsEnum = `${prefix}Colors`;
|
|
18
|
+
const dimensionsEnum = `${prefix}Dimensions`;
|
|
19
|
+
const typographyEnum = `${prefix}Typography`;
|
|
20
|
+
const typographySpecsEnum = `${prefix}TypographySpecs`;
|
|
21
|
+
const effectsEnum = `${prefix}Effects`;
|
|
22
|
+
const valuesEnum = `${prefix}Values`;
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push("import SwiftUI");
|
|
25
|
+
lines.push("");
|
|
26
|
+
lines.push("public struct SXLShadowLayer {");
|
|
27
|
+
lines.push(" public let inset: Bool");
|
|
28
|
+
lines.push(" public let x: CGFloat");
|
|
29
|
+
lines.push(" public let y: CGFloat");
|
|
30
|
+
lines.push(" public let blur: CGFloat");
|
|
31
|
+
lines.push(" public let spread: CGFloat");
|
|
32
|
+
lines.push(" public let color: Color");
|
|
33
|
+
lines.push("");
|
|
34
|
+
lines.push(" public init(inset: Bool, x: CGFloat, y: CGFloat, blur: CGFloat, spread: CGFloat, color: Color) {");
|
|
35
|
+
lines.push(" self.inset = inset");
|
|
36
|
+
lines.push(" self.x = x");
|
|
37
|
+
lines.push(" self.y = y");
|
|
38
|
+
lines.push(" self.blur = blur");
|
|
39
|
+
lines.push(" self.spread = spread");
|
|
40
|
+
lines.push(" self.color = color");
|
|
41
|
+
lines.push(" }");
|
|
42
|
+
lines.push("}");
|
|
43
|
+
lines.push("");
|
|
44
|
+
lines.push("public struct SXLEffectSpec {");
|
|
45
|
+
lines.push(" public let shadows: [SXLShadowLayer]");
|
|
46
|
+
lines.push(" public let blur: CGFloat?");
|
|
47
|
+
lines.push(" public let backdropBlur: CGFloat?");
|
|
48
|
+
lines.push("");
|
|
49
|
+
lines.push(" public init(shadows: [SXLShadowLayer] = [], blur: CGFloat? = nil, backdropBlur: CGFloat? = nil) {");
|
|
50
|
+
lines.push(" self.shadows = shadows");
|
|
51
|
+
lines.push(" self.blur = blur");
|
|
52
|
+
lines.push(" self.backdropBlur = backdropBlur");
|
|
53
|
+
lines.push(" }");
|
|
54
|
+
lines.push("}");
|
|
55
|
+
lines.push("");
|
|
56
|
+
lines.push("public enum SXLTextCase: String {");
|
|
57
|
+
lines.push(" case original");
|
|
58
|
+
lines.push(" case upper");
|
|
59
|
+
lines.push(" case lower");
|
|
60
|
+
lines.push(" case title");
|
|
61
|
+
lines.push(" case smallCaps");
|
|
62
|
+
lines.push(" case smallCapsForced");
|
|
63
|
+
lines.push("}");
|
|
64
|
+
lines.push("");
|
|
65
|
+
lines.push("public enum SXLTextDecoration: String {");
|
|
66
|
+
lines.push(" case none");
|
|
67
|
+
lines.push(" case underline");
|
|
68
|
+
lines.push(" case strikethrough");
|
|
69
|
+
lines.push(" case underlineStrikethrough");
|
|
70
|
+
lines.push("}");
|
|
71
|
+
lines.push("");
|
|
72
|
+
lines.push("public enum SXLVerticalTrim: String {");
|
|
73
|
+
lines.push(" case none");
|
|
74
|
+
lines.push(" case capHeight");
|
|
75
|
+
lines.push("}");
|
|
76
|
+
lines.push("");
|
|
77
|
+
lines.push("public struct SXLTypographySpec {");
|
|
78
|
+
lines.push(" public let font: Font");
|
|
79
|
+
lines.push(" public let fontFamily: String");
|
|
80
|
+
lines.push(" public let fontWeight: Font.Weight");
|
|
81
|
+
lines.push(" public let fontSize: CGFloat");
|
|
82
|
+
lines.push(" public let lineHeight: CGFloat");
|
|
83
|
+
lines.push(" public let letterSpacing: CGFloat?");
|
|
84
|
+
lines.push(" public let textCase: SXLTextCase");
|
|
85
|
+
lines.push(" public let textDecoration: SXLTextDecoration");
|
|
86
|
+
lines.push(" public let verticalTrim: SXLVerticalTrim");
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push(" public init(");
|
|
89
|
+
lines.push(" font: Font,");
|
|
90
|
+
lines.push(" fontFamily: String,");
|
|
91
|
+
lines.push(" fontWeight: Font.Weight,");
|
|
92
|
+
lines.push(" fontSize: CGFloat,");
|
|
93
|
+
lines.push(" lineHeight: CGFloat,");
|
|
94
|
+
lines.push(" letterSpacing: CGFloat? = nil,");
|
|
95
|
+
lines.push(" textCase: SXLTextCase = .original,");
|
|
96
|
+
lines.push(" textDecoration: SXLTextDecoration = .none,");
|
|
97
|
+
lines.push(" verticalTrim: SXLVerticalTrim = .none");
|
|
98
|
+
lines.push(" ) {");
|
|
99
|
+
lines.push(" self.font = font");
|
|
100
|
+
lines.push(" self.fontFamily = fontFamily");
|
|
101
|
+
lines.push(" self.fontWeight = fontWeight");
|
|
102
|
+
lines.push(" self.fontSize = fontSize");
|
|
103
|
+
lines.push(" self.lineHeight = lineHeight");
|
|
104
|
+
lines.push(" self.letterSpacing = letterSpacing");
|
|
105
|
+
lines.push(" self.textCase = textCase");
|
|
106
|
+
lines.push(" self.textDecoration = textDecoration");
|
|
107
|
+
lines.push(" self.verticalTrim = verticalTrim");
|
|
108
|
+
lines.push(" }");
|
|
109
|
+
lines.push("}");
|
|
110
|
+
lines.push("");
|
|
111
|
+
const colorLines = [];
|
|
112
|
+
const dimensionLines = [];
|
|
113
|
+
const typographyLines = [];
|
|
114
|
+
const typographySpecLines = [];
|
|
115
|
+
const effectsLines = [];
|
|
116
|
+
const valueLines = [];
|
|
117
|
+
for (const entry of named) {
|
|
118
|
+
const token = entry.token;
|
|
119
|
+
const normalizedType = normalizeTokenTypeKey(token.type);
|
|
120
|
+
const name = swiftIdentifier(entry.name, "lower");
|
|
121
|
+
const resolved = token.resolvedValue ?? token.value;
|
|
122
|
+
if (normalizedType === "color") {
|
|
123
|
+
const color = parseColor(resolved);
|
|
124
|
+
if (!color) {
|
|
125
|
+
diagnostics.push(unsupported(token, input.outputId, "SWIFT_COLOR_INVALID"));
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
appendDoc(colorLines, token.description, input.showDescriptions);
|
|
129
|
+
colorLines.push(` public static let ${name}: Color = ${rgbaToSwift(color)}`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (isDimensionType(normalizedType)) {
|
|
133
|
+
appendDoc(dimensionLines, token.description, input.showDescriptions);
|
|
134
|
+
dimensionLines.push(` public static let ${name}: CGFloat = ${toSwiftNumber(resolved)}`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (normalizedType === "typography") {
|
|
138
|
+
const typo = formatTypography(resolved, input.remBase ?? 16);
|
|
139
|
+
if (!typo) {
|
|
140
|
+
diagnostics.push(unsupported(token, input.outputId, "SWIFT_TYPOGRAPHY_INVALID"));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
appendDoc(typographyLines, token.description, input.showDescriptions);
|
|
144
|
+
typographyLines.push(` public static let ${name}: Font = ${typo.fontExpr}`);
|
|
145
|
+
appendDoc(typographySpecLines, token.description, input.showDescriptions);
|
|
146
|
+
typographySpecLines.push(` public static let ${name}: SXLTypographySpec = ${serializeTypography(typo)}`);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (normalizedType === "shadow" || normalizedType === "effects" || normalizedType === "blur" || normalizedType === "backdrop-blur" || normalizedType === "glass") {
|
|
150
|
+
const effect = formatEffect(resolved, normalizedType);
|
|
151
|
+
if (!effect) {
|
|
152
|
+
diagnostics.push(unsupported(token, input.outputId, "SWIFT_EFFECT_INVALID"));
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
appendDoc(effectsLines, token.description, input.showDescriptions);
|
|
156
|
+
effectsLines.push(` public static let ${name}: SXLEffectSpec = ${serializeEffect(effect)}`);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const generic = formatGenericValue(resolved, normalizedType);
|
|
160
|
+
if (!generic) {
|
|
161
|
+
diagnostics.push(unsupported(token, input.outputId, `SWIFT_UNSUPPORTED_${normalizedType}`));
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
appendDoc(valueLines, token.description, input.showDescriptions);
|
|
165
|
+
valueLines.push(` public static let ${name} = ${generic}`);
|
|
166
|
+
}
|
|
167
|
+
emitEnum(lines, colorsEnum, colorLines);
|
|
168
|
+
emitEnum(lines, dimensionsEnum, dimensionLines);
|
|
169
|
+
emitEnum(lines, typographyEnum, typographyLines);
|
|
170
|
+
emitEnum(lines, typographySpecsEnum, typographySpecLines);
|
|
171
|
+
emitEnum(lines, effectsEnum, effectsLines);
|
|
172
|
+
emitEnum(lines, valuesEnum, valueLines);
|
|
173
|
+
return {
|
|
174
|
+
content: `${lines.join("\n")}\n`,
|
|
175
|
+
diagnostics,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function isDimensionType(type) {
|
|
179
|
+
return [
|
|
180
|
+
"dimension",
|
|
181
|
+
"sizing",
|
|
182
|
+
"spacing",
|
|
183
|
+
"borderRadius",
|
|
184
|
+
"borderWidth",
|
|
185
|
+
"fontSize",
|
|
186
|
+
"lineHeight",
|
|
187
|
+
"letterSpacing",
|
|
188
|
+
"paragraphSpacing",
|
|
189
|
+
"paragraphIndent",
|
|
190
|
+
].includes(type);
|
|
191
|
+
}
|
|
192
|
+
function formatTypography(value, remBase) {
|
|
193
|
+
const obj = toTypographyObject(value);
|
|
194
|
+
if (!obj)
|
|
195
|
+
return null;
|
|
196
|
+
const family = primaryFontFamily(obj.fontFamily ?? "System");
|
|
197
|
+
const sizeValue = parseTypographyMetric(obj.fontSize ?? 16, remBase);
|
|
198
|
+
const parsedLineHeight = parseTypographyMetric(obj.lineHeight ?? obj.fontSize ?? 16, remBase);
|
|
199
|
+
const lineHeightValue = parsedLineHeight ?? sizeValue;
|
|
200
|
+
const letterSpacingValue = obj.letterSpacing !== undefined
|
|
201
|
+
? parseTypographyMetric(obj.letterSpacing, remBase)
|
|
202
|
+
: null;
|
|
203
|
+
const weight = mapSwiftWeight(obj.fontWeight);
|
|
204
|
+
if (sizeValue === null || lineHeightValue === null)
|
|
205
|
+
return null;
|
|
206
|
+
const size = trimFloat(sizeValue);
|
|
207
|
+
const lineHeight = trimFloat(lineHeightValue);
|
|
208
|
+
const letterSpacing = letterSpacingValue === null ? null : trimFloat(letterSpacingValue);
|
|
209
|
+
const escapedFamily = escapeSwiftString(family);
|
|
210
|
+
const fontExpr = family.toLowerCase() === "system"
|
|
211
|
+
? `.system(size: ${size}, weight: ${weight})`
|
|
212
|
+
: `.custom("${escapedFamily}", size: ${size}).weight(${weight})`;
|
|
213
|
+
return {
|
|
214
|
+
fontExpr,
|
|
215
|
+
fontFamily: escapedFamily,
|
|
216
|
+
fontWeight: weight,
|
|
217
|
+
fontSize: size,
|
|
218
|
+
lineHeight,
|
|
219
|
+
letterSpacing,
|
|
220
|
+
textCase: mapTextCaseForSwift(obj.textCase),
|
|
221
|
+
textDecoration: mapTextDecorationForSwift(obj.textDecoration),
|
|
222
|
+
verticalTrim: mapVerticalTrimForSwift(obj),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function mapTextCaseForSwift(value) {
|
|
226
|
+
const normalized = normalizeTextCase(value);
|
|
227
|
+
if (normalized === "upper")
|
|
228
|
+
return ".upper";
|
|
229
|
+
if (normalized === "lower")
|
|
230
|
+
return ".lower";
|
|
231
|
+
if (normalized === "title")
|
|
232
|
+
return ".title";
|
|
233
|
+
if (normalized === "small-caps")
|
|
234
|
+
return ".smallCaps";
|
|
235
|
+
if (normalized === "small-caps-forced")
|
|
236
|
+
return ".smallCapsForced";
|
|
237
|
+
return ".original";
|
|
238
|
+
}
|
|
239
|
+
function mapTextDecorationForSwift(value) {
|
|
240
|
+
const normalized = normalizeTextDecoration(value);
|
|
241
|
+
if (normalized === "underline")
|
|
242
|
+
return ".underline";
|
|
243
|
+
if (normalized === "strikethrough")
|
|
244
|
+
return ".strikethrough";
|
|
245
|
+
if (normalized === "underline-strikethrough")
|
|
246
|
+
return ".underlineStrikethrough";
|
|
247
|
+
return ".none";
|
|
248
|
+
}
|
|
249
|
+
function mapVerticalTrimForSwift(value) {
|
|
250
|
+
const normalized = normalizeVerticalTrimFromTypography(value);
|
|
251
|
+
if (normalized === "cap-height")
|
|
252
|
+
return ".capHeight";
|
|
253
|
+
return ".none";
|
|
254
|
+
}
|
|
255
|
+
function serializeTypography(value) {
|
|
256
|
+
const letterSpacing = value.letterSpacing === null ? "nil" : value.letterSpacing;
|
|
257
|
+
return `SXLTypographySpec(` +
|
|
258
|
+
`font: ${value.fontExpr}, ` +
|
|
259
|
+
`fontFamily: "${value.fontFamily}", ` +
|
|
260
|
+
`fontWeight: ${value.fontWeight}, ` +
|
|
261
|
+
`fontSize: ${value.fontSize}, ` +
|
|
262
|
+
`lineHeight: ${value.lineHeight}, ` +
|
|
263
|
+
`letterSpacing: ${letterSpacing}, ` +
|
|
264
|
+
`textCase: ${value.textCase}, ` +
|
|
265
|
+
`textDecoration: ${value.textDecoration}, ` +
|
|
266
|
+
`verticalTrim: ${value.verticalTrim}` +
|
|
267
|
+
`)`;
|
|
268
|
+
}
|
|
269
|
+
function mapSwiftWeight(value) {
|
|
270
|
+
const normalized = String(value ?? "regular").trim().toLowerCase().replace(/\s+/g, "");
|
|
271
|
+
const map = {
|
|
272
|
+
"100": ".ultraLight",
|
|
273
|
+
thin: ".thin",
|
|
274
|
+
hairline: ".ultraLight",
|
|
275
|
+
ultralight: ".ultraLight",
|
|
276
|
+
extralight: ".thin",
|
|
277
|
+
"200": ".thin",
|
|
278
|
+
"300": ".light",
|
|
279
|
+
light: ".light",
|
|
280
|
+
"400": ".regular",
|
|
281
|
+
regular: ".regular",
|
|
282
|
+
normal: ".regular",
|
|
283
|
+
"500": ".medium",
|
|
284
|
+
medium: ".medium",
|
|
285
|
+
"600": ".semibold",
|
|
286
|
+
semibold: ".semibold",
|
|
287
|
+
"700": ".bold",
|
|
288
|
+
bold: ".bold",
|
|
289
|
+
"800": ".heavy",
|
|
290
|
+
extrabold: ".heavy",
|
|
291
|
+
"900": ".black",
|
|
292
|
+
black: ".black",
|
|
293
|
+
heavy: ".heavy",
|
|
294
|
+
};
|
|
295
|
+
return map[normalized] ?? ".regular";
|
|
296
|
+
}
|
|
297
|
+
function formatEffect(value, tokenType) {
|
|
298
|
+
if (tokenType === "blur") {
|
|
299
|
+
const blur = pickBlur(value);
|
|
300
|
+
if (!blur)
|
|
301
|
+
return null;
|
|
302
|
+
return { shadows: [], blur };
|
|
303
|
+
}
|
|
304
|
+
if (tokenType === "backdrop-blur") {
|
|
305
|
+
const backdropBlur = pickBlur(value);
|
|
306
|
+
if (!backdropBlur)
|
|
307
|
+
return null;
|
|
308
|
+
return { shadows: [], backdropBlur };
|
|
309
|
+
}
|
|
310
|
+
const effects = Array.isArray(value) ? value : [value];
|
|
311
|
+
const output = { shadows: [] };
|
|
312
|
+
for (const effect of effects) {
|
|
313
|
+
if (typeof effect !== "object" || effect === null || Array.isArray(effect))
|
|
314
|
+
continue;
|
|
315
|
+
const obj = effect;
|
|
316
|
+
const type = String(obj.type ?? "dropShadow");
|
|
317
|
+
if (type === "dropShadow" || type === "innerShadow") {
|
|
318
|
+
const layer = formatShadowLayer(obj);
|
|
319
|
+
if (!layer)
|
|
320
|
+
return null;
|
|
321
|
+
output.shadows.push(layer);
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
if (type === "layerBlur") {
|
|
325
|
+
const blur = pickBlur(obj);
|
|
326
|
+
if (blur)
|
|
327
|
+
output.blur = blur;
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (type === "backgroundBlur") {
|
|
331
|
+
const blur = pickBlur(obj);
|
|
332
|
+
if (blur)
|
|
333
|
+
output.backdropBlur = blur;
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return output;
|
|
338
|
+
}
|
|
339
|
+
function pickBlur(value) {
|
|
340
|
+
if (typeof value === "number" || typeof value === "string")
|
|
341
|
+
return toSwiftNumber(value);
|
|
342
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
343
|
+
return null;
|
|
344
|
+
const obj = value;
|
|
345
|
+
const radius = obj.blur ?? obj.radius;
|
|
346
|
+
if (radius === undefined)
|
|
347
|
+
return null;
|
|
348
|
+
return toSwiftNumber(radius);
|
|
349
|
+
}
|
|
350
|
+
function formatShadowLayer(obj) {
|
|
351
|
+
const color = parseColor(obj.color);
|
|
352
|
+
if (!color)
|
|
353
|
+
return null;
|
|
354
|
+
return {
|
|
355
|
+
inset: String(obj.type ?? "dropShadow") === "innerShadow",
|
|
356
|
+
x: toSwiftNumber(obj.offsetX ?? 0),
|
|
357
|
+
y: toSwiftNumber(obj.offsetY ?? 0),
|
|
358
|
+
blur: toSwiftNumber(obj.blur ?? 0),
|
|
359
|
+
spread: toSwiftNumber(obj.spread ?? 0),
|
|
360
|
+
color: rgbaToSwift(color),
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
function serializeEffect(effect) {
|
|
364
|
+
const shadowItems = effect.shadows
|
|
365
|
+
.map((layer) => `SXLShadowLayer(inset: ${layer.inset ? "true" : "false"}, x: ${layer.x}, y: ${layer.y}, blur: ${layer.blur}, spread: ${layer.spread}, color: ${layer.color})`)
|
|
366
|
+
.join(", ");
|
|
367
|
+
const shadows = `[${shadowItems}]`;
|
|
368
|
+
const blur = effect.blur ? `blur: ${effect.blur}` : "blur: nil";
|
|
369
|
+
const backdrop = effect.backdropBlur ? `backdropBlur: ${effect.backdropBlur}` : "backdropBlur: nil";
|
|
370
|
+
return `SXLEffectSpec(shadows: ${shadows}, ${blur}, ${backdrop})`;
|
|
371
|
+
}
|
|
372
|
+
function formatGenericValue(value, type) {
|
|
373
|
+
if (type === "boolean")
|
|
374
|
+
return String(Boolean(value));
|
|
375
|
+
if (type === "text" || type === "fontFamily") {
|
|
376
|
+
return `"${escapeSwiftString(String(value))}"`;
|
|
377
|
+
}
|
|
378
|
+
if (type === "fontWeight") {
|
|
379
|
+
return `"${escapeSwiftString(String(value))}"`;
|
|
380
|
+
}
|
|
381
|
+
if (type === "duration") {
|
|
382
|
+
if (typeof value === "number") {
|
|
383
|
+
const seconds = value > 10 ? value / 1000 : value;
|
|
384
|
+
return `${seconds}`;
|
|
385
|
+
}
|
|
386
|
+
if (typeof value === "string") {
|
|
387
|
+
const trimmed = value.trim().toLowerCase();
|
|
388
|
+
if (trimmed.endsWith("ms"))
|
|
389
|
+
return `${Number.parseFloat(trimmed) / 1000}`;
|
|
390
|
+
if (trimmed.endsWith("s"))
|
|
391
|
+
return `${Number.parseFloat(trimmed)}`;
|
|
392
|
+
}
|
|
393
|
+
return "0.2";
|
|
394
|
+
}
|
|
395
|
+
if (type === "cubicBezier") {
|
|
396
|
+
if (Array.isArray(value) && value.length === 4) {
|
|
397
|
+
return `UnitCurve.bezier(startControlPoint: UnitPoint(x: ${value[0]}, y: ${value[1]}), endControlPoint: UnitPoint(x: ${value[2]}, y: ${value[3]}))`;
|
|
398
|
+
}
|
|
399
|
+
return "UnitCurve.easeInOut";
|
|
400
|
+
}
|
|
401
|
+
if (typeof value === "number")
|
|
402
|
+
return `${value}`;
|
|
403
|
+
if (typeof value === "string")
|
|
404
|
+
return `"${escapeSwiftString(value)}"`;
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
function escapeSwiftString(value) {
|
|
408
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
409
|
+
}
|
|
410
|
+
function appendDoc(lines, description, enabled) {
|
|
411
|
+
if (!enabled || !description)
|
|
412
|
+
return;
|
|
413
|
+
lines.push(` /// ${description}`);
|
|
414
|
+
}
|
|
415
|
+
function emitEnum(lines, enumName, body) {
|
|
416
|
+
if (body.length === 0)
|
|
417
|
+
return;
|
|
418
|
+
lines.push(`public enum ${enumName} {`);
|
|
419
|
+
lines.push(...body);
|
|
420
|
+
lines.push("}");
|
|
421
|
+
lines.push("");
|
|
422
|
+
}
|
|
423
|
+
function unsupported(token, outputId, code) {
|
|
424
|
+
return {
|
|
425
|
+
level: "warn",
|
|
426
|
+
code,
|
|
427
|
+
message: `Unsupported or invalid token for Swift: ${token.path}`,
|
|
428
|
+
tokenPath: token.path,
|
|
429
|
+
outputId,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=swift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/emit/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type NormalizedTextCase = "original" | "upper" | "lower" | "title" | "small-caps" | "small-caps-forced";
|
|
2
|
+
export type NormalizedTextDecoration = "none" | "underline" | "strikethrough" | "underline-strikethrough";
|
|
3
|
+
export type NormalizedVerticalTrim = "none" | "cap-height";
|
|
4
|
+
export type CssTextCaseMapping = {
|
|
5
|
+
textTransform: string;
|
|
6
|
+
fontVariantCaps: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function toTypographyObject(value: unknown): Record<string, unknown> | null;
|
|
9
|
+
export declare function parseTypographyMetric(raw: unknown, remBase: number): number | null;
|
|
10
|
+
export declare function formatCssTypographyMetric(raw: unknown, remBase: number): string | null;
|
|
11
|
+
export declare function normalizeTextCase(value: unknown): NormalizedTextCase;
|
|
12
|
+
export declare function textCaseToCss(value: unknown): CssTextCaseMapping;
|
|
13
|
+
export declare function normalizeTextDecoration(value: unknown): NormalizedTextDecoration;
|
|
14
|
+
export declare function textDecorationToCss(value: unknown): string;
|
|
15
|
+
export declare function normalizeVerticalTrim(value: unknown): NormalizedVerticalTrim;
|
|
16
|
+
export declare function normalizeVerticalTrimFromTypography(obj: Record<string, unknown>): NormalizedVerticalTrim;
|
|
17
|
+
export declare function primaryFontFamily(value: unknown): string;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { trimFloat } from "../utils/dimension.js";
|
|
2
|
+
const DIMENSION_RE = /^(-?\d+(?:\.\d+)?)\s*(px|rem|em|%|pt|dp|sp|ms|s|vw|vh|vmin|vmax|ch|ex|cm|mm|in|pc)?$/i;
|
|
3
|
+
export function toTypographyObject(value) {
|
|
4
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
5
|
+
return null;
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export function parseTypographyMetric(raw, remBase) {
|
|
9
|
+
if (typeof raw === "number") {
|
|
10
|
+
return Number.isFinite(raw) ? raw : null;
|
|
11
|
+
}
|
|
12
|
+
if (typeof raw !== "string")
|
|
13
|
+
return null;
|
|
14
|
+
const trimmed = raw.trim();
|
|
15
|
+
if (!trimmed)
|
|
16
|
+
return null;
|
|
17
|
+
const lower = trimmed.toLowerCase();
|
|
18
|
+
if (lower === "normal" || lower === "auto")
|
|
19
|
+
return null;
|
|
20
|
+
const match = trimmed.match(DIMENSION_RE);
|
|
21
|
+
if (!match)
|
|
22
|
+
return null;
|
|
23
|
+
const value = Number.parseFloat(match[1]);
|
|
24
|
+
if (!Number.isFinite(value))
|
|
25
|
+
return null;
|
|
26
|
+
const unit = (match[2] ?? "").toLowerCase();
|
|
27
|
+
if (unit === "rem" || unit === "em")
|
|
28
|
+
return value * remBase;
|
|
29
|
+
if (unit === "s")
|
|
30
|
+
return value * 1000;
|
|
31
|
+
if (unit === "%")
|
|
32
|
+
return (value / 100) * remBase;
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
export function formatCssTypographyMetric(raw, remBase) {
|
|
36
|
+
void remBase;
|
|
37
|
+
if (typeof raw === "string") {
|
|
38
|
+
const trimmed = raw.trim();
|
|
39
|
+
const lower = trimmed.toLowerCase();
|
|
40
|
+
if (lower === "normal" || lower === "auto")
|
|
41
|
+
return "normal";
|
|
42
|
+
if (DIMENSION_RE.test(trimmed)) {
|
|
43
|
+
const unitMatch = trimmed.match(DIMENSION_RE);
|
|
44
|
+
if (!unitMatch)
|
|
45
|
+
return null;
|
|
46
|
+
const metric = Number.parseFloat(unitMatch[1]);
|
|
47
|
+
if (!Number.isFinite(metric))
|
|
48
|
+
return null;
|
|
49
|
+
const unit = (unitMatch[2] ?? "").toLowerCase();
|
|
50
|
+
return `${trimFloat(metric)}${unit || "px"}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const metric = parseTypographyMetric(raw, remBase);
|
|
54
|
+
if (metric === null)
|
|
55
|
+
return null;
|
|
56
|
+
return `${trimFloat(metric)}px`;
|
|
57
|
+
}
|
|
58
|
+
export function normalizeTextCase(value) {
|
|
59
|
+
const raw = String(value ?? "").trim().toLowerCase();
|
|
60
|
+
if (raw === "uppercase" || raw === "upper")
|
|
61
|
+
return "upper";
|
|
62
|
+
if (raw === "lowercase" || raw === "lower")
|
|
63
|
+
return "lower";
|
|
64
|
+
if (raw === "capitalize" || raw === "title" || raw === "titlecase")
|
|
65
|
+
return "title";
|
|
66
|
+
if (raw === "small-caps" || raw === "small_caps" || raw === "smallcaps")
|
|
67
|
+
return "small-caps";
|
|
68
|
+
if (raw === "small-caps-forced" || raw === "small_caps_forced")
|
|
69
|
+
return "small-caps-forced";
|
|
70
|
+
return "original";
|
|
71
|
+
}
|
|
72
|
+
export function textCaseToCss(value) {
|
|
73
|
+
const normalized = normalizeTextCase(value);
|
|
74
|
+
if (normalized === "upper") {
|
|
75
|
+
return { textTransform: "uppercase", fontVariantCaps: "normal" };
|
|
76
|
+
}
|
|
77
|
+
if (normalized === "lower") {
|
|
78
|
+
return { textTransform: "lowercase", fontVariantCaps: "normal" };
|
|
79
|
+
}
|
|
80
|
+
if (normalized === "title") {
|
|
81
|
+
return { textTransform: "capitalize", fontVariantCaps: "normal" };
|
|
82
|
+
}
|
|
83
|
+
if (normalized === "small-caps") {
|
|
84
|
+
return { textTransform: "none", fontVariantCaps: "small-caps" };
|
|
85
|
+
}
|
|
86
|
+
if (normalized === "small-caps-forced") {
|
|
87
|
+
return { textTransform: "none", fontVariantCaps: "all-small-caps" };
|
|
88
|
+
}
|
|
89
|
+
return { textTransform: "none", fontVariantCaps: "normal" };
|
|
90
|
+
}
|
|
91
|
+
export function normalizeTextDecoration(value) {
|
|
92
|
+
const raw = String(value ?? "").trim().toLowerCase();
|
|
93
|
+
if (!raw || raw === "none" || raw === "original")
|
|
94
|
+
return "none";
|
|
95
|
+
const hasUnderline = raw.includes("underline");
|
|
96
|
+
const hasStrike = raw.includes("line-through") || raw.includes("strikethrough") || raw.includes("strike-through") || raw.includes("strike");
|
|
97
|
+
if (hasUnderline && hasStrike)
|
|
98
|
+
return "underline-strikethrough";
|
|
99
|
+
if (hasUnderline)
|
|
100
|
+
return "underline";
|
|
101
|
+
if (hasStrike)
|
|
102
|
+
return "strikethrough";
|
|
103
|
+
return "none";
|
|
104
|
+
}
|
|
105
|
+
export function textDecorationToCss(value) {
|
|
106
|
+
const normalized = normalizeTextDecoration(value);
|
|
107
|
+
if (normalized === "underline")
|
|
108
|
+
return "underline";
|
|
109
|
+
if (normalized === "strikethrough")
|
|
110
|
+
return "line-through";
|
|
111
|
+
if (normalized === "underline-strikethrough")
|
|
112
|
+
return "underline line-through";
|
|
113
|
+
return "none";
|
|
114
|
+
}
|
|
115
|
+
export function normalizeVerticalTrim(value) {
|
|
116
|
+
const raw = String(value ?? "").trim().toLowerCase();
|
|
117
|
+
if (raw === "cap-height" || raw === "cap_height" || raw === "capheight")
|
|
118
|
+
return "cap-height";
|
|
119
|
+
return "none";
|
|
120
|
+
}
|
|
121
|
+
export function normalizeVerticalTrimFromTypography(obj) {
|
|
122
|
+
return normalizeVerticalTrim(obj.verticalTrim ?? obj.leadingTrim);
|
|
123
|
+
}
|
|
124
|
+
export function primaryFontFamily(value) {
|
|
125
|
+
const raw = String(value ?? "").trim();
|
|
126
|
+
if (!raw)
|
|
127
|
+
return "System";
|
|
128
|
+
const first = raw.split(",")[0]?.trim() ?? "System";
|
|
129
|
+
const unquoted = first.replace(/^["']|["']$/g, "");
|
|
130
|
+
return unquoted || "System";
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=typography.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typography.js","sourceRoot":"","sources":["../../src/emit/typography.ts"],"names":[],"mappings":"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"}
|