@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.
Files changed (93) hide show
  1. package/README.en.md +77 -608
  2. package/README.md +77 -685
  3. package/config/sxl-transform.config.yaml +120 -0
  4. package/dist/cli.d.ts +1 -1
  5. package/dist/cli.js +411 -141
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/loader.d.ts +6 -0
  8. package/dist/config/loader.js +160 -0
  9. package/dist/config/loader.js.map +1 -0
  10. package/dist/config/schema.d.ts +847 -0
  11. package/dist/config/schema.js +123 -0
  12. package/dist/config/schema.js.map +1 -0
  13. package/dist/core/color-modifiers.d.ts +31 -0
  14. package/dist/core/color-modifiers.js +289 -0
  15. package/dist/core/color-modifiers.js.map +1 -0
  16. package/dist/core/color-parser.d.ts +24 -0
  17. package/dist/core/color-parser.js +281 -0
  18. package/dist/core/color-parser.js.map +1 -0
  19. package/dist/core/debug-report.d.ts +11 -0
  20. package/dist/core/debug-report.js +161 -0
  21. package/dist/core/debug-report.js.map +1 -0
  22. package/dist/core/incremental.d.ts +18 -0
  23. package/dist/core/incremental.js +105 -0
  24. package/dist/core/incremental.js.map +1 -0
  25. package/dist/core/math.d.ts +3 -0
  26. package/dist/core/math.js +261 -0
  27. package/dist/core/math.js.map +1 -0
  28. package/dist/core/parser.d.ts +4 -3
  29. package/dist/core/parser.js +68 -172
  30. package/dist/core/parser.js.map +1 -1
  31. package/dist/core/resolver.d.ts +26 -0
  32. package/dist/core/resolver.js +431 -0
  33. package/dist/core/resolver.js.map +1 -0
  34. package/dist/core/token-loader.d.ts +11 -0
  35. package/dist/core/token-loader.js +380 -0
  36. package/dist/core/token-loader.js.map +1 -0
  37. package/dist/core/token-parser.d.ts +9 -0
  38. package/dist/core/token-parser.js +138 -0
  39. package/dist/core/token-parser.js.map +1 -0
  40. package/dist/core/token-types.d.ts +7 -0
  41. package/dist/core/token-types.js +132 -0
  42. package/dist/core/token-types.js.map +1 -0
  43. package/dist/core/types.d.ts +154 -63
  44. package/dist/core/writer.d.ts +18 -5
  45. package/dist/core/writer.js +545 -91
  46. package/dist/core/writer.js.map +1 -1
  47. package/dist/emit/css.d.ts +2 -0
  48. package/dist/emit/css.js +538 -0
  49. package/dist/emit/css.js.map +1 -0
  50. package/dist/emit/kotlin.d.ts +2 -0
  51. package/dist/emit/kotlin.js +406 -0
  52. package/dist/emit/kotlin.js.map +1 -0
  53. package/dist/emit/shared.d.ts +13 -0
  54. package/dist/emit/shared.js +127 -0
  55. package/dist/emit/shared.js.map +1 -0
  56. package/dist/emit/swift.d.ts +2 -0
  57. package/dist/emit/swift.js +432 -0
  58. package/dist/emit/swift.js.map +1 -0
  59. package/dist/emit/typography.d.ts +17 -0
  60. package/dist/emit/typography.js +132 -0
  61. package/dist/emit/typography.js.map +1 -0
  62. package/dist/emit/xml.d.ts +2 -0
  63. package/dist/emit/xml.js +311 -0
  64. package/dist/emit/xml.js.map +1 -0
  65. package/dist/index.d.ts +15 -6
  66. package/dist/index.js +13 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/transformers/css.d.ts +1 -1
  69. package/dist/transformers/css.js +13 -482
  70. package/dist/transformers/css.js.map +1 -1
  71. package/dist/transformers/kotlin.d.ts +2 -2
  72. package/dist/transformers/kotlin.js +14 -442
  73. package/dist/transformers/kotlin.js.map +1 -1
  74. package/dist/transformers/swiftui.d.ts +2 -2
  75. package/dist/transformers/swiftui.js +14 -433
  76. package/dist/transformers/swiftui.js.map +1 -1
  77. package/dist/utils/color.d.ts +7 -5
  78. package/dist/utils/color.js +90 -86
  79. package/dist/utils/color.js.map +1 -1
  80. package/dist/utils/dimension.d.ts +8 -5
  81. package/dist/utils/dimension.js +54 -52
  82. package/dist/utils/dimension.js.map +1 -1
  83. package/dist/utils/naming.d.ts +10 -12
  84. package/dist/utils/naming.js +102 -44
  85. package/dist/utils/naming.js.map +1 -1
  86. package/package.json +30 -10
  87. package/config.example.json +0 -45
  88. package/dist/core/loader.d.ts +0 -8
  89. package/dist/core/loader.js +0 -105
  90. package/dist/core/loader.js.map +0 -1
  91. package/dist/transformers/vue3.d.ts +0 -28
  92. package/dist/transformers/vue3.js +0 -534
  93. package/dist/transformers/vue3.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ import { z } from "zod";
2
+ export const PlatformSchema = z.enum(["css", "swift", "kotlin", "xml"]);
3
+ export const CollisionStrategySchema = z.enum(["error", "suffix", "namespace-by-file", "namespace-by-mode"]);
4
+ export const UnsupportedTypeActionSchema = z.enum(["skip", "warn", "error"]);
5
+ export const UnresolvedAliasActionSchema = z.enum(["error", "warn", "ignore"]);
6
+ export const SourceSchema = z
7
+ .object({
8
+ tokenDir: z.string().min(1),
9
+ configFile: z.string().min(1).default("config.json"),
10
+ include: z.array(z.string().min(1)).default(["**/*.json"]),
11
+ exclude: z.array(z.string().min(1)).default(["config.json", "**/diff-id*.json"]),
12
+ })
13
+ .strict();
14
+ export const TokenSetSelectorSchema = z
15
+ .object({
16
+ collection: z.string().min(1).optional(),
17
+ mode: z.string().min(1).optional(),
18
+ files: z.array(z.string().min(1)).optional(),
19
+ include: z.array(z.string().min(1)).optional(),
20
+ exclude: z.array(z.string().min(1)).default([]),
21
+ includeRefs: z.boolean().default(true),
22
+ refModeMap: z.record(z.string().min(1)).default({}),
23
+ })
24
+ .strict()
25
+ .superRefine((value, ctx) => {
26
+ const hasCollectionMode = Boolean(value.collection && value.mode);
27
+ const hasFileSelection = Boolean((value.files && value.files.length > 0) || (value.include && value.include.length > 0));
28
+ if (!hasCollectionMode && !hasFileSelection) {
29
+ ctx.addIssue({
30
+ code: z.ZodIssueCode.custom,
31
+ message: "Selector must define either collection+mode or files/include",
32
+ });
33
+ }
34
+ if ((value.collection && !value.mode) || (!value.collection && value.mode)) {
35
+ ctx.addIssue({
36
+ code: z.ZodIssueCode.custom,
37
+ message: "Selector with collection must also define mode (and vice versa)",
38
+ });
39
+ }
40
+ });
41
+ export const TokenSetSchema = z
42
+ .object({
43
+ id: z.string().min(1),
44
+ selectors: z.array(TokenSetSelectorSchema).min(1),
45
+ unresolvedAliases: UnresolvedAliasActionSchema.default("error"),
46
+ })
47
+ .strict();
48
+ export const TokenFilterSchema = z
49
+ .object({
50
+ types: z.array(z.string().min(1)).optional(),
51
+ paths: z.array(z.string().min(1)).optional(),
52
+ excludePaths: z.array(z.string().min(1)).optional(),
53
+ })
54
+ .strict();
55
+ export const SplitBySourceFileSchema = z
56
+ .object({
57
+ include: z.array(z.string().min(1)).default(["**/*.style.json"]),
58
+ exclude: z.array(z.string().min(1)).default([]),
59
+ outputPattern: z.string().min(1),
60
+ prefixPattern: z.string().min(1).optional(),
61
+ })
62
+ .strict();
63
+ export const OutputFileSchema = z
64
+ .object({
65
+ tokenSet: z.string().min(1),
66
+ output: z.string().min(1).optional(),
67
+ prefix: z.string().nullable().optional(),
68
+ filter: TokenFilterSchema.optional(),
69
+ splitBySourceFile: SplitBySourceFileSchema.optional(),
70
+ })
71
+ .strict()
72
+ .superRefine((value, ctx) => {
73
+ const hasStaticOutput = typeof value.output === "string" && value.output.trim().length > 0;
74
+ const hasSplitBySource = Boolean(value.splitBySourceFile);
75
+ if (!hasStaticOutput && !hasSplitBySource) {
76
+ ctx.addIssue({
77
+ code: z.ZodIssueCode.custom,
78
+ message: "Output file mapping must define either output or splitBySourceFile",
79
+ });
80
+ }
81
+ });
82
+ export const OutputSchema = z
83
+ .object({
84
+ id: z.string().min(1),
85
+ platform: PlatformSchema,
86
+ outputDir: z.string().min(1),
87
+ prefix: z.string().nullable().optional(),
88
+ resolveAliases: z.boolean().optional(),
89
+ splitEffects: z.boolean().optional(),
90
+ showDescriptions: z.boolean().optional(),
91
+ files: z.array(OutputFileSchema).min(1),
92
+ options: z.record(z.unknown()).default({}),
93
+ })
94
+ .strict();
95
+ export const UnsupportedTypesSchema = z
96
+ .object({
97
+ default: UnsupportedTypeActionSchema.default("warn"),
98
+ types: z.record(UnsupportedTypeActionSchema).default({}),
99
+ })
100
+ .strict();
101
+ export const OptionsSchema = z
102
+ .object({
103
+ remBase: z.number().positive().default(16),
104
+ collisionStrategy: CollisionStrategySchema.default("error"),
105
+ unsupportedTypes: UnsupportedTypesSchema.default({ default: "warn", types: {} }),
106
+ maxAliasDepth: z.number().int().positive().default(20),
107
+ })
108
+ .strict();
109
+ export const TransformerConfigSchema = z
110
+ .object({
111
+ version: z.literal(1),
112
+ source: SourceSchema,
113
+ options: OptionsSchema.default({
114
+ remBase: 16,
115
+ collisionStrategy: "error",
116
+ unsupportedTypes: { default: "warn", types: {} },
117
+ maxAliasDepth: 20,
118
+ }),
119
+ tokenSets: z.array(TokenSetSchema).min(1),
120
+ outputs: z.array(OutputSchema).min(1),
121
+ })
122
+ .strict();
123
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC7G,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;CACjF,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzH,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,8DAA8D;SACxE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,iEAAiE;SAC3E,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,iBAAiB,EAAE,2BAA2B,CAAC,OAAO,CAAC,OAAO,CAAC;CAChE,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,uBAAuB,CAAC,QAAQ,EAAE;CACtD,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,eAAe,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3F,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE1D,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,oEAAoE;SAC9E,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,OAAO,EAAE,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACzD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,iBAAiB,EAAE,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3D,gBAAgB,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,EAAE;QACX,iBAAiB,EAAE,OAAO;QAC1B,gBAAgB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAChD,aAAa,EAAE,EAAE;KAClB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACtC,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Color Modifiers — lighten, darken, alpha, mix.
3
+ *
4
+ * Applied via `$extensions.figma.modify` on color tokens.
5
+ * Computes the final color at export time — the result is a plain RGBA value
6
+ * stored in the Figma Variable (NOT an alias).
7
+ *
8
+ * Supported color spaces: srgb, hsl, lch, oklch, p3
9
+ * Each modifier operates in the specified space for perceptual accuracy.
10
+ */
11
+ import type { FigmaRGBA } from "./color-parser.js";
12
+ import type { FigmaModify } from "./types.js";
13
+ export type NumericResolverFn = (path: string) => number | null;
14
+ export type ColorResolverFn = (path: string) => FigmaRGBA | null;
15
+ export type ModifierResolvers = {
16
+ resolveNumeric?: NumericResolverFn;
17
+ resolveColor?: ColorResolverFn;
18
+ };
19
+ /**
20
+ * Apply a color modifier to a base color.
21
+ *
22
+ * @param baseColor The resolved base color (from alias or literal)
23
+ * @param modify The modifier spec from $extensions.figma.modify
24
+ * @param resolvers Optional alias resolvers for {variable} references in value/color
25
+ * @returns Modified color as Figma RGBA, or null on error
26
+ */
27
+ export declare function applyColorModifier(baseColor: FigmaRGBA, modify: FigmaModify, resolvers?: ModifierResolvers): FigmaRGBA | null;
28
+ /**
29
+ * Последовательное применение модификаторов (chain в `$extensions.figma.modify`).
30
+ */
31
+ export declare function applyColorModifierChain(baseColor: FigmaRGBA, modify: FigmaModify | FigmaModify[] | undefined, resolvers?: ModifierResolvers): FigmaRGBA | null;
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Color Modifiers — lighten, darken, alpha, mix.
3
+ *
4
+ * Applied via `$extensions.figma.modify` on color tokens.
5
+ * Computes the final color at export time — the result is a plain RGBA value
6
+ * stored in the Figma Variable (NOT an alias).
7
+ *
8
+ * Supported color spaces: srgb, hsl, lch, oklch, p3
9
+ * Each modifier operates in the specified space for perceptual accuracy.
10
+ */
11
+ import { parseCSSColor } from "./color-parser.js";
12
+ // ─── sRGB ↔ HSL conversions ───
13
+ function rgbToHsl(r, g, b) {
14
+ const max = Math.max(r, g, b);
15
+ const min = Math.min(r, g, b);
16
+ const l = (max + min) / 2;
17
+ if (max === min)
18
+ return [0, 0, l];
19
+ const d = max - min;
20
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
21
+ let h = 0;
22
+ if (max === r)
23
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
24
+ else if (max === g)
25
+ h = ((b - r) / d + 2) / 6;
26
+ else
27
+ h = ((r - g) / d + 4) / 6;
28
+ return [h * 360, s, l];
29
+ }
30
+ function hslToRgb(h, s, l) {
31
+ h = ((h % 360) + 360) % 360;
32
+ if (s === 0)
33
+ return [l, l, l];
34
+ const c = (1 - Math.abs(2 * l - 1)) * s;
35
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
36
+ const m = l - c / 2;
37
+ let r = 0, g = 0, b = 0;
38
+ if (h < 60) {
39
+ r = c;
40
+ g = x;
41
+ }
42
+ else if (h < 120) {
43
+ r = x;
44
+ g = c;
45
+ }
46
+ else if (h < 180) {
47
+ g = c;
48
+ b = x;
49
+ }
50
+ else if (h < 240) {
51
+ g = x;
52
+ b = c;
53
+ }
54
+ else if (h < 300) {
55
+ r = x;
56
+ b = c;
57
+ }
58
+ else {
59
+ r = c;
60
+ b = x;
61
+ }
62
+ return [r + m, g + m, b + m];
63
+ }
64
+ // ─── sRGB ↔ OKLab/OKLCH conversions ───
65
+ function srgbToLinear(c) {
66
+ return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
67
+ }
68
+ function linearToSrgb(c) {
69
+ return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;
70
+ }
71
+ function rgbToOklab(r, g, b) {
72
+ const lr = srgbToLinear(r);
73
+ const lg = srgbToLinear(g);
74
+ const lb = srgbToLinear(b);
75
+ const l = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb;
76
+ const m = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb;
77
+ const s = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb;
78
+ const l_ = Math.cbrt(l);
79
+ const m_ = Math.cbrt(m);
80
+ const s_ = Math.cbrt(s);
81
+ return [
82
+ 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,
83
+ 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,
84
+ 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,
85
+ ];
86
+ }
87
+ function oklabToRgb(L, a, b) {
88
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
89
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
90
+ const s_ = L - 0.0894841775 * a - 1.2914855480 * b;
91
+ const l = l_ * l_ * l_;
92
+ const m = m_ * m_ * m_;
93
+ const s = s_ * s_ * s_;
94
+ return [
95
+ linearToSrgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),
96
+ linearToSrgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),
97
+ linearToSrgb(-0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s),
98
+ ];
99
+ }
100
+ function oklabToOklch(L, a, b) {
101
+ const C = Math.sqrt(a * a + b * b);
102
+ let H = (Math.atan2(b, a) * 180) / Math.PI;
103
+ if (H < 0)
104
+ H += 360;
105
+ return [L, C, H];
106
+ }
107
+ function oklchToOklab(L, C, H) {
108
+ const hRad = (H * Math.PI) / 180;
109
+ return [L, C * Math.cos(hRad), C * Math.sin(hRad)];
110
+ }
111
+ // ─── Lighten/Darken in different spaces ───
112
+ function lightenInSpace(rgba, amount, space) {
113
+ switch (space) {
114
+ case "hsl": {
115
+ const [h, s, l] = rgbToHsl(rgba.r, rgba.g, rgba.b);
116
+ const newL = Math.min(1, l + amount * (1 - l));
117
+ const [r, g, b] = hslToRgb(h, s, newL);
118
+ return { r: clamp(r), g: clamp(g), b: clamp(b), a: rgba.a };
119
+ }
120
+ case "oklch":
121
+ case "lch": {
122
+ const [L, a, b] = rgbToOklab(rgba.r, rgba.g, rgba.b);
123
+ const newL = Math.min(1, L + amount * (1 - L));
124
+ const [r, g, bb] = oklabToRgb(newL, a, b);
125
+ return { r: clamp(r), g: clamp(g), b: clamp(bb), a: rgba.a };
126
+ }
127
+ default: {
128
+ // srgb / p3: simple linear interpolation toward white
129
+ return {
130
+ r: clamp(rgba.r + amount * (1 - rgba.r)),
131
+ g: clamp(rgba.g + amount * (1 - rgba.g)),
132
+ b: clamp(rgba.b + amount * (1 - rgba.b)),
133
+ a: rgba.a,
134
+ };
135
+ }
136
+ }
137
+ }
138
+ function darkenInSpace(rgba, amount, space) {
139
+ switch (space) {
140
+ case "hsl": {
141
+ const [h, s, l] = rgbToHsl(rgba.r, rgba.g, rgba.b);
142
+ const newL = Math.max(0, l - amount * l);
143
+ const [r, g, b] = hslToRgb(h, s, newL);
144
+ return { r: clamp(r), g: clamp(g), b: clamp(b), a: rgba.a };
145
+ }
146
+ case "oklch":
147
+ case "lch": {
148
+ const [L, a, b] = rgbToOklab(rgba.r, rgba.g, rgba.b);
149
+ const newL = Math.max(0, L - amount * L);
150
+ const [r, g, bb] = oklabToRgb(newL, a, b);
151
+ return { r: clamp(r), g: clamp(g), b: clamp(bb), a: rgba.a };
152
+ }
153
+ default: {
154
+ return {
155
+ r: clamp(rgba.r * (1 - amount)),
156
+ g: clamp(rgba.g * (1 - amount)),
157
+ b: clamp(rgba.b * (1 - amount)),
158
+ a: rgba.a,
159
+ };
160
+ }
161
+ }
162
+ }
163
+ function mixInSpace(rgba, mixColor, amount, space) {
164
+ switch (space) {
165
+ case "oklch":
166
+ case "lch": {
167
+ const [L1, a1, b1] = rgbToOklab(rgba.r, rgba.g, rgba.b);
168
+ const [C1, H1] = oklabToOklch(L1, a1, b1).slice(1);
169
+ const [L2, a2, b2] = rgbToOklab(mixColor.r, mixColor.g, mixColor.b);
170
+ const [C2, H2] = oklabToOklch(L2, a2, b2).slice(1);
171
+ const L = L1 + amount * (L2 - L1);
172
+ const C = C1 + amount * (C2 - C1);
173
+ // Hue interpolation (shortest path)
174
+ let dH = H2 - H1;
175
+ if (dH > 180)
176
+ dH -= 360;
177
+ if (dH < -180)
178
+ dH += 360;
179
+ const H = H1 + amount * dH;
180
+ const [oL, oA, oB] = oklchToOklab(L, C, H);
181
+ const [r, g, b] = oklabToRgb(oL, oA, oB);
182
+ return { r: clamp(r), g: clamp(g), b: clamp(b), a: rgba.a + amount * (mixColor.a - rgba.a) };
183
+ }
184
+ case "hsl": {
185
+ const [h1, s1, l1] = rgbToHsl(rgba.r, rgba.g, rgba.b);
186
+ const [h2, s2, l2] = rgbToHsl(mixColor.r, mixColor.g, mixColor.b);
187
+ let dH = h2 - h1;
188
+ if (dH > 180)
189
+ dH -= 360;
190
+ if (dH < -180)
191
+ dH += 360;
192
+ const h = h1 + amount * dH;
193
+ const s = s1 + amount * (s2 - s1);
194
+ const l = l1 + amount * (l2 - l1);
195
+ const [r, g, b] = hslToRgb(h, s, l);
196
+ return { r: clamp(r), g: clamp(g), b: clamp(b), a: rgba.a + amount * (mixColor.a - rgba.a) };
197
+ }
198
+ default: {
199
+ // sRGB / p3: linear interpolation
200
+ return {
201
+ r: clamp(rgba.r + amount * (mixColor.r - rgba.r)),
202
+ g: clamp(rgba.g + amount * (mixColor.g - rgba.g)),
203
+ b: clamp(rgba.b + amount * (mixColor.b - rgba.b)),
204
+ a: clamp(rgba.a + amount * (mixColor.a - rgba.a)),
205
+ };
206
+ }
207
+ }
208
+ }
209
+ function clamp(v) {
210
+ return Math.max(0, Math.min(1, v));
211
+ }
212
+ // ─── Alias helpers ───
213
+ function isAliasRef(v) {
214
+ if (typeof v !== "string")
215
+ return false;
216
+ const s = v.trim();
217
+ return s.startsWith("{") && s.endsWith("}");
218
+ }
219
+ function extractPath(ref) {
220
+ return ref.trim().slice(1, -1);
221
+ }
222
+ /**
223
+ * Apply a color modifier to a base color.
224
+ *
225
+ * @param baseColor The resolved base color (from alias or literal)
226
+ * @param modify The modifier spec from $extensions.figma.modify
227
+ * @param resolvers Optional alias resolvers for {variable} references in value/color
228
+ * @returns Modified color as Figma RGBA, or null on error
229
+ */
230
+ export function applyColorModifier(baseColor, modify, resolvers) {
231
+ // Resolve modify.value — may be a number, a literal string, or an alias like "{core.alpha.4}"
232
+ let amount;
233
+ if (typeof modify.value === "number") {
234
+ amount = modify.value;
235
+ }
236
+ else if (isAliasRef(modify.value) && resolvers?.resolveNumeric) {
237
+ const resolved = resolvers.resolveNumeric(extractPath(modify.value));
238
+ if (resolved === null)
239
+ return null;
240
+ amount = resolved;
241
+ }
242
+ else {
243
+ amount = parseFloat(String(modify.value));
244
+ }
245
+ if (isNaN(amount))
246
+ return null;
247
+ const space = modify.space || "oklch";
248
+ switch (modify.type) {
249
+ case "lighten":
250
+ return lightenInSpace(baseColor, clamp(amount), space);
251
+ case "darken":
252
+ return darkenInSpace(baseColor, clamp(amount), space);
253
+ case "alpha":
254
+ return { ...baseColor, a: clamp(amount) };
255
+ case "mix": {
256
+ if (!modify.color)
257
+ return null;
258
+ let mixTarget = null;
259
+ if (isAliasRef(modify.color) && resolvers?.resolveColor) {
260
+ mixTarget = resolvers.resolveColor(extractPath(modify.color));
261
+ }
262
+ if (!mixTarget) {
263
+ mixTarget = parseCSSColor(modify.color);
264
+ }
265
+ if (!mixTarget)
266
+ return null;
267
+ return mixInSpace(baseColor, mixTarget, clamp(amount), space);
268
+ }
269
+ default:
270
+ return null;
271
+ }
272
+ }
273
+ /**
274
+ * Последовательное применение модификаторов (chain в `$extensions.figma.modify`).
275
+ */
276
+ export function applyColorModifierChain(baseColor, modify, resolvers) {
277
+ if (!modify)
278
+ return baseColor;
279
+ const list = Array.isArray(modify) ? modify : [modify];
280
+ let c = baseColor;
281
+ for (const m of list) {
282
+ const next = applyColorModifier(c, m, resolvers);
283
+ if (!next)
284
+ return null;
285
+ c = next;
286
+ }
287
+ return c;
288
+ }
289
+ //# sourceMappingURL=color-modifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-modifiers.js","sourceRoot":"","sources":["../../src/core/color-modifiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CSS Color Parser — converts any CSS color format to Figma RGBA.
3
+ *
4
+ * Supports: HEX (#RGB, #RRGGBB), HEX8 (#RRGGBBAA),
5
+ * rgba(), hsla(), color(srgb ...), color(display-p3 ...),
6
+ * lch(), oklch(), named colors.
7
+ *
8
+ * All outputs are Figma-compatible { r, g, b, a } where r/g/b are 0..1.
9
+ */
10
+ export type FigmaRGBA = {
11
+ r: number;
12
+ g: number;
13
+ b: number;
14
+ a: number;
15
+ };
16
+ /**
17
+ * Parse any CSS color string into Figma RGBA.
18
+ * Returns null if the format is not recognized.
19
+ */
20
+ export declare function parseCSSColor(value: string): FigmaRGBA | null;
21
+ /**
22
+ * Clear the parse cache (useful between export runs).
23
+ */
24
+ export declare function clearColorCache(): void;