@yahoo/uds-v5-wip 1.24.0 → 1.26.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 (57) hide show
  1. package/dist/config/dist/component-resolution.d.ts +1 -1
  2. package/dist/config/dist/consts/defaultColors.d.ts +2 -1
  3. package/dist/config/dist/createConfig.d.ts +55 -31
  4. package/dist/config/dist/createConfig.js +44 -22
  5. package/dist/config/dist/preset-merge.js +5 -3
  6. package/dist/config/dist/propertyGroups.d.ts +5 -0
  7. package/dist/config/dist/serialize.d.ts +9 -1
  8. package/dist/config/dist/serialize.js +17 -2
  9. package/dist/config/dist/types.d.ts +2 -1
  10. package/dist/config.d.ts +197 -197
  11. package/dist/config.js +1 -1
  12. package/dist/core/dist/compositeStyles.d.ts +22 -0
  13. package/dist/core/dist/compositeStyles.js +51 -0
  14. package/dist/core/dist/createComponent.d.ts +2 -1
  15. package/dist/core/dist/createComponentExample.d.ts +2 -1
  16. package/dist/core/dist/createProvider.d.ts +2 -1
  17. package/dist/core/dist/generated/stylePropsTwMap.d.ts +2 -1
  18. package/dist/core/dist/getComponentStyles.d.ts +2 -1
  19. package/dist/core/dist/getStyles.d.ts +2 -1
  20. package/dist/core/dist/getStyles.js +9 -9
  21. package/dist/core/dist/index.d.ts +1 -1
  22. package/dist/core/dist/index.js +1 -1
  23. package/dist/core/dist/propMappings.d.ts +2 -1
  24. package/dist/core/dist/resolveMotionState.d.ts +2 -1
  25. package/dist/core/dist/transformPreset.d.ts +2 -1
  26. package/dist/core/dist/withDefaultStyleProps.d.ts +2 -1
  27. package/dist/core.d.ts +2 -2
  28. package/dist/core.js +2 -2
  29. package/dist/foundational-presets/dist/boldVibrant.d.ts +198 -197
  30. package/dist/foundational-presets/dist/brutalist.d.ts +198 -197
  31. package/dist/foundational-presets/dist/candy.d.ts +198 -197
  32. package/dist/foundational-presets/dist/cleanMinimalist.d.ts +198 -197
  33. package/dist/foundational-presets/dist/corporate.d.ts +198 -197
  34. package/dist/foundational-presets/dist/darkMoody.d.ts +198 -197
  35. package/dist/foundational-presets/dist/defaultPreset.d.ts +198 -197
  36. package/dist/foundational-presets/dist/forest.d.ts +198 -197
  37. package/dist/foundational-presets/dist/highContrast.d.ts +198 -197
  38. package/dist/foundational-presets/dist/lavender.d.ts +198 -197
  39. package/dist/foundational-presets/dist/luxury.d.ts +198 -197
  40. package/dist/foundational-presets/dist/monochrome.d.ts +198 -197
  41. package/dist/foundational-presets/dist/motion.d.ts +2 -1
  42. package/dist/foundational-presets/dist/neonCyber.d.ts +198 -197
  43. package/dist/foundational-presets/dist/newspaper.d.ts +198 -197
  44. package/dist/foundational-presets/dist/ocean.d.ts +198 -197
  45. package/dist/foundational-presets/dist/slate.d.ts +198 -197
  46. package/dist/foundational-presets/dist/sunset.d.ts +198 -197
  47. package/dist/foundational-presets/dist/terminal.d.ts +198 -197
  48. package/dist/foundational-presets/dist/warmOrganic.d.ts +198 -197
  49. package/dist/loader/dist/loader/style-transform.js +8 -8
  50. package/dist/loader/dist/packages/core/dist/compositeStyles.js +43 -0
  51. package/dist/loader/dist/packages/core/dist/getStyles.js +1 -1
  52. package/dist/loader/dist/packages/core/dist/index.js +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +3 -3
  55. package/dist/core/dist/macros.d.ts +0 -21
  56. package/dist/core/dist/macros.js +0 -49
  57. package/dist/loader/dist/packages/core/dist/macros.js +0 -41
@@ -1 +1 @@
1
- import { ComponentsConfig } from "@uds/types";
1
+ export { };
@@ -1,4 +1,5 @@
1
1
  //#region ../config/dist/consts/defaultColors.d.ts
2
+ //#region src/consts/defaultColors.d.ts
2
3
  declare const defaultColors: {
3
4
  inherit: string;
4
5
  current: string;
@@ -247,6 +248,6 @@ declare const defaultColors: {
247
248
  'rose-800': string;
248
249
  'rose-900': string;
249
250
  'rose-950': string;
250
- };
251
+ }; //#endregion
251
252
  //#endregion
252
253
  export { defaultColors };
@@ -1,16 +1,23 @@
1
1
  import { PropertyGroupId } from "./propertyGroups.js";
2
2
  import { TokenType, VarsConfig } from "./types.js";
3
- import { BaseModifierProp, ComponentsConfig, ConfigurableProp, MacroConfig, ModifierProp, MotionPreset, RemotionComponentDef, RemotionConfig, RemotionTransitionDef, StyleProp } from "@uds/types";
3
+ import { BaseModifierProp, ComponentsConfig, CompositeStylesConfig, ConfigurableProp, ModifierProp, MotionPreset, RemotionComponentDef, RemotionConfig, RemotionTransitionDef, StyleProp } from "@uds/types";
4
4
 
5
5
  //#region ../config/dist/createConfig.d.ts
6
+ //#region src/createConfig.d.ts
6
7
  type MotionPresetsDef = Record<string, MotionPreset>;
7
8
  type MotionAliasValue<TMotion> = TMotion extends Record<string, infer V> ? Extract<V, string> : never;
8
9
  type EmptyMotion = {};
9
- type EmptyMacros = {};
10
- /** Transform macro config type into the reference shape passed to defineModifiers */
11
- type MacroReference<T> = { [K in keyof T]: { [V in keyof T[K]]: {
10
+ type EmptyCompositeStyles = {};
11
+ /**
12
+ * Transform composite-styles config type into the reference shape passed to
13
+ * defineModifiers. Walks `T[K]['styles'][V]` so the modifier callback can
14
+ * write `compositeStyles.elevation['1'].className` (flat for ergonomics).
15
+ */
16
+ type CompositeStylesReference<T> = { [K in keyof T]: T[K] extends {
17
+ styles: infer S;
18
+ } ? { [V in keyof S]: {
12
19
  className: string;
13
- } } };
20
+ } } : never };
14
21
  type ModifierNameShape = `_${string}`;
15
22
  /**
16
23
  * Check if a modifier overlaps with base reserved modifiers (not including custom ones)
@@ -70,6 +77,18 @@ interface AtomicToken<M extends ModifierNameShape = ModifierNameShape> {
70
77
  * generator.
71
78
  */
72
79
  description?: string;
80
+ /**
81
+ * Original `defineVars` namespace key, verbatim — e.g. `borderColor`,
82
+ * `spectrum`, `fontSize`. Distinct from {@link cssPrefix}, which is
83
+ * the kebab-cased form used in CSS-variable names. The Studio uses
84
+ * this to label tokens with the same identifier the author wrote in
85
+ * their config (`borderColor/accent`, not `border-color/accent`).
86
+ *
87
+ * Optional for backwards compatibility — older serialized configs
88
+ * predate the field; consumers should fall back to {@link cssPrefix}
89
+ * (kebab-cased) when this is absent.
90
+ */
91
+ namespace?: string;
73
92
  /**
74
93
  * Optional CSS variable prefix override
75
94
  *
@@ -113,6 +132,7 @@ type EmptyTokens = {};
113
132
  type EmptyVars = {};
114
133
  /** Build a structured token reference object from atomic tokens */
115
134
  declare function buildTokenReference(atomic: AtomicToken<ModifierNameShape>[], configPrefix: string): Record<string, Record<string, string>>;
135
+ /** Build a structured composite-styles reference object for use in defineModifiers context */
116
136
  /** Extract all modifiers from mode groups and check if any are reserved */
117
137
  type CheckForReservedModifiers<T extends readonly ModeGroup[]> = true extends HasReservedModifier<GetModifierName<T>> ? 'ERROR: Cannot use reserved modifier names from ModifierProp. Please use a different modifier name.' : T;
118
138
  /** Global styles definition — CSS selector → style props */
@@ -137,7 +157,7 @@ interface UdsConfigData {
137
157
  modes: ModeGroup[];
138
158
  modifiers: ModifierDef[];
139
159
  atomic: AtomicToken<ModifierNameShape>[];
140
- macros: MacroConfig;
160
+ compositeStyles: CompositeStylesConfig;
141
161
  motion: MotionPresetsDef;
142
162
  components: ComponentsConfig<string>;
143
163
  globalStyles: GlobalStylesDef;
@@ -198,49 +218,49 @@ type RemotionComponentInput<TTokens, TMotion> = RemotionComponentDef | ((ctx: {
198
218
  components: Record<string, any>;
199
219
  }) => RemotionComponentDef);
200
220
  /** Helper type: builder result includes both the UdsConfig interface and any extensions */
201
- type ConfigResult<TModifier extends ModifierNameShape, TTokens, TMotion, TExt extends Record<string, any> = {}, TMacros = EmptyMacros, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars> = UdsConfig<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars> & TExt;
202
- interface UdsConfig<TModifier extends ModifierNameShape = ModifierProp, TTokens = EmptyTokens, TMotion = EmptyMotion, TExt extends Record<string, any> = {}, TMacros = EmptyMacros, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars> {
221
+ type ConfigResult<TModifier extends ModifierNameShape, TTokens, TMotion, TExt extends Record<string, any> = {}, TCompositeStyles = EmptyCompositeStyles, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars> = UdsConfig<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars> & TExt;
222
+ interface UdsConfig<TModifier extends ModifierNameShape = ModifierProp, TTokens = EmptyTokens, TMotion = EmptyMotion, TExt extends Record<string, any> = {}, TCompositeStyles = EmptyCompositeStyles, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars> {
203
223
  modes: ModeGroup[];
204
224
  atomic: AtomicToken<ModifierNameShape>[];
205
225
  components: ComponentsConfig;
206
- preflight(enabled?: boolean): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
207
- prefix(value: string): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
208
- buildOptions(options: BuildOptions): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
209
- defineModes<const NewModes extends readonly ModeGroup[]>(params: CheckForReservedModifiers<NewModes>): ConfigResult<TModifier | GetModifierName<NewModes>, TTokens, TMotion, TExt, TMacros, TModeModifiers | GetModifierName<NewModes>, TVars>;
226
+ preflight(enabled?: boolean): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
227
+ prefix(value: string): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
228
+ buildOptions(options: BuildOptions): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
229
+ defineModes<const NewModes extends readonly ModeGroup[]>(params: CheckForReservedModifiers<NewModes>): ConfigResult<TModifier | GetModifierName<NewModes>, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers | GetModifierName<NewModes>, TVars>;
210
230
  defineModifiers<const Defs extends readonly ModifierDef[]>(params: Defs | ((ctx: {
211
231
  tokens: TTokens;
212
- macros: MacroReference<TMacros>;
213
- }) => Defs)): ConfigResult<TModifier | Defs[number]['modifier'], TTokens, TMotion, TExt, TMacros, TModeModifiers | Defs[number]['modifier'], TVars>;
214
- defineMacro<const M extends MacroConfig>(params: M | ((ctx: {
232
+ compositeStyles: CompositeStylesReference<TCompositeStyles>;
233
+ }) => Defs)): ConfigResult<TModifier | Defs[number]['modifier'], TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers | Defs[number]['modifier'], TVars>;
234
+ defineCompositeStyles<const M extends CompositeStylesConfig>(params: M | ((ctx: {
215
235
  tokens: TTokens;
216
- }) => M)): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros & M, TModeModifiers, TVars>;
217
- defineArbitraryTokens(params: ArbitraryTokenGroup[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
218
- defineMotion<const M extends MotionPresetsDef>(presets: M | ((tokens: TTokens) => M)): ConfigResult<TModifier, TTokens, { [K in keyof M]: string }, TExt, TMacros, TModeModifiers, TVars>;
236
+ }) => M)): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles & M, TModeModifiers, TVars>;
237
+ defineArbitraryTokens(params: ArbitraryTokenGroup[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
238
+ defineMotion<const M extends MotionPresetsDef>(presets: M | ((tokens: TTokens) => M)): ConfigResult<TModifier, TTokens, { [K in keyof M]: string }, TExt, TCompositeStyles, TModeModifiers, TVars>;
219
239
  defineComponents(params: ComponentsConfig<MotionAliasValue<TMotion> | string> | ((ctx: {
220
240
  tokens: TTokens;
221
241
  motion: TMotion;
222
242
  components: Record<string, any>;
223
- }) => ComponentsConfig<MotionAliasValue<TMotion> | string>)): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
224
- defineGlobalStyles(params: GlobalStylesDef | ((tokens: TTokens) => GlobalStylesDef)): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
225
- defineDesignPrinciples(principles: string[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
226
- defineExample(name: string, examples: ExampleDef): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
227
- compose(...presets: (ComponentConfig | UdsConfig | Partial<UdsConfigData>)[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
243
+ }) => ComponentsConfig<MotionAliasValue<TMotion> | string>)): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
244
+ defineGlobalStyles(params: GlobalStylesDef | ((tokens: TTokens) => GlobalStylesDef)): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
245
+ defineDesignPrinciples(principles: string[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
246
+ defineExample(name: string, examples: ExampleDef): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
247
+ compose(...presets: (ComponentConfig | UdsConfig | Partial<UdsConfigData>)[]): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
228
248
  defineComponent<const TName extends string, const TComponent extends SingleComponentDef<MotionAliasValue<TMotion> | string>, const TPresetMotion extends MotionPresetsDef = EmptyMotionPresetsDef>(name: TName, component: DefineComponentInput<TTokens, TMotion, TComponent>, motion?: DefineComponentMotionInput<TTokens, TPresetMotion>): ComponentConfig<SingleComponentDefinitionRecord<TName, TComponent>, TPresetMotion>;
229
- from(data: Partial<UdsConfigData>): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
230
- extend<const NewExt extends Record<string, any>>(ext: NewExt): ConfigResult<TModifier, TTokens, TMotion, TExt & NewExt, TMacros, TModeModifiers, TVars>;
249
+ from(data: Partial<UdsConfigData>): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
250
+ extend<const NewExt extends Record<string, any>>(ext: NewExt): ConfigResult<TModifier, TTokens, TMotion, TExt & NewExt, TCompositeStyles, TModeModifiers, TVars>;
231
251
  defineRemotionComponents(params: RemotionConfig | ((ctx: {
232
252
  tokens: TTokens;
233
253
  motion: TMotion;
234
254
  components: Record<string, any>;
235
- }) => RemotionConfig)): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
255
+ }) => RemotionConfig)): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
236
256
  defineRemotionComponent<const TName extends string, const TComponent extends SingleComponentDef<MotionAliasValue<TMotion> | string>, const TPresetMotion extends MotionPresetsDef = EmptyMotionPresetsDef>(name: TName, def: RemotionComponentInput<TTokens, TMotion>, motion?: DefineComponentMotionInput<TTokens, TPresetMotion>): ComponentConfig<SingleComponentDefinitionRecord<TName, TComponent>, TPresetMotion>;
237
257
  defineRemotionTransition(name: string, def: RemotionTransitionDef | ((ctx: {
238
258
  tokens: TTokens;
239
259
  }) => RemotionTransitionDef)): ComponentConfig;
240
260
  defineRemotionTransitions(params: Record<string, RemotionTransitionDef> | ((ctx: {
241
261
  tokens: TTokens;
242
- }) => Record<string, RemotionTransitionDef>)): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
243
- defineVars<const TVarsNew extends VarsConfig<[TModeModifiers] extends [never] ? `_${string}` : TModeModifiers>>(vars: TVarsNew): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars & TVarsNew>;
262
+ }) => Record<string, RemotionTransitionDef>)): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
263
+ defineVars<const TVarsNew extends VarsConfig<[TModeModifiers] extends [never] ? `_${string}` : TModeModifiers>>(vars: TVarsNew): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars & TVarsNew>;
244
264
  /**
245
265
  * Map each ConfigurableProp to a CSS class prefix.
246
266
  * Falls back to kebab-case of the property name when not specified.
@@ -258,7 +278,7 @@ interface UdsConfig<TModifier extends ModifierNameShape = ModifierProp, TTokens
258
278
  * })
259
279
  * ```
260
280
  */
261
- defineClassNames(classNames: { [K in StyleProp]?: string }): ConfigResult<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars>;
281
+ defineClassNames(classNames: { [K in StyleProp]?: string }): ConfigResult<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
262
282
  /**
263
283
  * Map var namespaces to property groups, defining which tokens each property
264
284
  * group can reference. This is the canonical scope definition — the Studio UI
@@ -277,12 +297,16 @@ interface UdsConfig<TModifier extends ModifierNameShape = ModifierProp, TTokens
277
297
  * })
278
298
  * ```
279
299
  */
280
- defineScopes(scopes: [keyof TVars] extends [never] ? Record<string, PropertyGroupId[]> : { [K in keyof TVars]?: PropertyGroupId[] }): ConfigResult<TModifier, MergeTokens<TTokens, VarsToTokens<TVars>>, TMotion, TExt, TMacros, TModeModifiers, TVars>;
300
+ defineScopes(scopes: [keyof TVars] extends [never] ? Record<string, PropertyGroupId[]> : { [K in keyof TVars]?: PropertyGroupId[] }): ConfigResult<TModifier, MergeTokens<TTokens, VarsToTokens<TVars>>, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars>;
281
301
  }
282
302
  type AnyUdsConfig = UdsConfig<ModifierNameShape, any, any, any, any, any, any>;
283
303
  /** Extract the raw config data from a builder instance */
284
304
  declare function resolveConfig(config: AnyUdsConfig): UdsConfigData;
285
- declare function createConfigBuilder<TModifier extends ModifierNameShape = ModifierProp, TTokens = EmptyTokens, TMotion = EmptyMotion, TExt extends Record<string, any> = {}, TMacros = EmptyMacros, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars>(data: UdsConfigData, extensions?: TExt): UdsConfig<TModifier, TTokens, TMotion, TExt, TMacros, TModeModifiers, TVars> & TExt;
305
+ /**
306
+ * Resolve configuration with all token references replaced by their raw values.
307
+ * Useful for tools that need the actual values (e.g. anatomy generation).
308
+ */
309
+ declare function createConfigBuilder<TModifier extends ModifierNameShape = ModifierProp, TTokens = EmptyTokens, TMotion = EmptyMotion, TExt extends Record<string, any> = {}, TCompositeStyles = EmptyCompositeStyles, TModeModifiers extends ModifierNameShape = never, TVars extends VarsConfig = EmptyVars>(data: UdsConfigData, extensions?: TExt): UdsConfig<TModifier, TTokens, TMotion, TExt, TCompositeStyles, TModeModifiers, TVars> & TExt;
286
310
  interface InterpolateMarker {
287
311
  __type: 'interpolate';
288
312
  output: number[];
@@ -31,16 +31,37 @@ function buildTokenReference(atomic, configPrefix) {
31
31
  }
32
32
  return result;
33
33
  }
34
- /** Build a structured macro reference object for use in defineModifiers context */
35
- function buildMacroReference(macros) {
34
+ /** Build a structured composite-styles reference object for use in defineModifiers context */
35
+ function buildCompositeStylesReference(compositeStyles) {
36
36
  const result = {};
37
- for (const [macroName, def] of Object.entries(macros)) {
38
- result[macroName] = {};
39
- for (const valueName of Object.keys(def)) result[macroName][valueName] = { className: `${macroName}-${safeTokenName(valueName)}` };
37
+ for (const [groupName, def] of Object.entries(compositeStyles)) {
38
+ result[groupName] = {};
39
+ for (const valueName of Object.keys(def.styles)) result[groupName][valueName] = { className: `${groupName}-${safeTokenName(valueName)}` };
40
40
  }
41
41
  return result;
42
42
  }
43
43
  /**
44
+ * Migrate legacy `macros` JSON (the pre-rename shape) into the new
45
+ * `compositeStyles` shape. Each old key (`elevation`) becomes a `{ label,
46
+ * styles }` def so older serialized configs (in `uds.config.json`,
47
+ * `draft_base_configs.baseConfig`) keep loading until they're rewritten.
48
+ *
49
+ * Returns `undefined` when no legacy data is present so callers can chain
50
+ * a fallback (`?? {}`).
51
+ */
52
+ function upgradeLegacyMacros(legacy) {
53
+ if (!legacy || typeof legacy !== "object") return void 0;
54
+ const out = {};
55
+ for (const [name, variants] of Object.entries(legacy)) {
56
+ if (!variants || typeof variants !== "object") continue;
57
+ out[name] = {
58
+ label: name,
59
+ styles: variants
60
+ };
61
+ }
62
+ return Object.keys(out).length > 0 ? out : void 0;
63
+ }
64
+ /**
44
65
  * Convert a VarGroupDef into AtomicToken tokens, extracting modifier overrides.
45
66
  *
46
67
  * Also extracts group-level metadata:
@@ -123,6 +144,7 @@ function synthesizeAtomicFromScopesAndVars(vars, scopes, modes) {
123
144
  result.push({
124
145
  properties: sorted,
125
146
  tokens,
147
+ namespace,
126
148
  cssPrefix: cssPfx,
127
149
  ...resolvedGroupType ? { type: resolvedGroupType } : {},
128
150
  ...groupDescription ? { description: groupDescription } : {}
@@ -197,7 +219,7 @@ function resolveConfig(config) {
197
219
  modes: config.modes ?? [],
198
220
  modifiers: config.modifiers ?? [],
199
221
  atomic: config.atomic ?? [],
200
- macros: config.macros ?? {},
222
+ compositeStyles: config.compositeStyles ?? upgradeLegacyMacros(config.macros) ?? {},
201
223
  motion: config.motion ?? {},
202
224
  components: config.components ?? {},
203
225
  globalStyles: config.globalStyles ?? {},
@@ -247,7 +269,7 @@ function resolvePresetData(input) {
247
269
  modes: [],
248
270
  modifiers: [],
249
271
  atomic: [],
250
- macros: {},
272
+ compositeStyles: {},
251
273
  motion: input.motion ?? {},
252
274
  components: input.components,
253
275
  globalStyles: {},
@@ -260,7 +282,7 @@ function resolvePresetData(input) {
260
282
  modes: input.modes ?? [],
261
283
  modifiers: input.modifiers ?? [],
262
284
  atomic: input.atomic ?? [],
263
- macros: input.macros ?? {},
285
+ compositeStyles: input.compositeStyles ?? {},
264
286
  motion: input.motion ?? {},
265
287
  components: input.components ?? {},
266
288
  globalStyles: input.globalStyles ?? {},
@@ -372,27 +394,27 @@ function createConfigBuilder(data, extensions) {
372
394
  defineModifiers(params) {
373
395
  const resolved = typeof params === "function" ? params({
374
396
  tokens: buildTokenReference(data.atomic, data.prefix),
375
- macros: buildMacroReference(data.macros)
397
+ compositeStyles: buildCompositeStylesReference(data.compositeStyles)
376
398
  }) : params;
377
399
  return createConfigBuilder({
378
400
  ...data,
379
401
  modifiers: [...data.modifiers, ...resolved]
380
402
  }, extensions);
381
403
  },
382
- defineMacro(params) {
404
+ defineCompositeStyles(params) {
383
405
  const tokenReference = buildTokenReference(data.atomic, data.prefix);
384
406
  const resolved = typeof params === "function" ? params({ tokens: tokenReference }) : params;
385
- const allMacros = {
386
- ...data.macros,
407
+ const allCompositeStyles = {
408
+ ...data.compositeStyles,
387
409
  ...resolved
388
410
  };
389
411
  const edges = /* @__PURE__ */ new Map();
390
- for (const [macroName, macroDef] of Object.entries(allMacros)) {
412
+ for (const [groupName, def] of Object.entries(allCompositeStyles)) {
391
413
  const targets = /* @__PURE__ */ new Set();
392
- for (const bag of Object.values(macroDef)) if (bag && typeof bag === "object") {
393
- for (const key of Object.keys(bag)) if (key in allMacros) targets.add(key);
414
+ for (const bag of Object.values(def.styles)) if (bag && typeof bag === "object") {
415
+ for (const key of Object.keys(bag)) if (key in allCompositeStyles) targets.add(key);
394
416
  }
395
- if (targets.size > 0) edges.set(macroName, targets);
417
+ if (targets.size > 0) edges.set(groupName, targets);
396
418
  }
397
419
  const visited = /* @__PURE__ */ new Set();
398
420
  const stack = /* @__PURE__ */ new Set();
@@ -400,7 +422,7 @@ function createConfigBuilder(data, extensions) {
400
422
  function dfs(node) {
401
423
  if (stack.has(node)) {
402
424
  const cycleStart = path.indexOf(node);
403
- throw new Error(`Circular macro reference: ${[...path.slice(cycleStart), node].join(" → ")}`);
425
+ throw new Error(`Circular composite style reference: ${[...path.slice(cycleStart), node].join(" → ")}`);
404
426
  }
405
427
  if (visited.has(node)) return;
406
428
  visited.add(node);
@@ -414,8 +436,8 @@ function createConfigBuilder(data, extensions) {
414
436
  for (const node of edges.keys()) dfs(node);
415
437
  return createConfigBuilder({
416
438
  ...data,
417
- macros: {
418
- ...data.macros,
439
+ compositeStyles: {
440
+ ...data.compositeStyles,
419
441
  ...resolved
420
442
  }
421
443
  }, extensions);
@@ -509,7 +531,7 @@ function createConfigBuilder(data, extensions) {
509
531
  modes: input.modes ?? data.modes,
510
532
  modifiers: input.modifiers ?? data.modifiers,
511
533
  atomic: input.atomic ?? data.atomic,
512
- macros: input.macros ?? data.macros,
534
+ compositeStyles: input.compositeStyles ?? data.compositeStyles,
513
535
  motion: input.motion ?? data.motion,
514
536
  components: input.components ?? data.components,
515
537
  globalStyles: input.globalStyles ?? data.globalStyles,
@@ -656,7 +678,7 @@ const uds = createConfigBuilder({
656
678
  atomic: [],
657
679
  modes: [],
658
680
  modifiers: [],
659
- macros: {},
681
+ compositeStyles: {},
660
682
  motion: {},
661
683
  components: {},
662
684
  globalStyles: {},
@@ -665,4 +687,4 @@ const uds = createConfigBuilder({
665
687
  remotion: void 0
666
688
  });
667
689
  //#endregion
668
- export { buildMacroReference, buildTokenReference, createConfigBuilder, darker, interpolate, lighter, rem, resolveConfig, uds };
690
+ export { buildCompositeStylesReference, buildTokenReference, createConfigBuilder, darker, interpolate, lighter, rem, resolveConfig, uds };
@@ -14,6 +14,7 @@ function flattenAtomic(atomic) {
14
14
  for (const group of atomic) for (const property of group.properties) for (const token of group.tokens) entries.push({
15
15
  property,
16
16
  cssPrefix: group.cssPrefix,
17
+ namespace: group.namespace,
17
18
  groupType: group.type,
18
19
  groupDescription: group.description,
19
20
  token
@@ -47,6 +48,7 @@ function mergeAtomic(base, incoming, mode) {
47
48
  }
48
49
  regrouped.set(groupKey, {
49
50
  properties: [entry.property],
51
+ ...entry.namespace ? { namespace: entry.namespace } : {},
50
52
  ...entry.cssPrefix ? { cssPrefix: entry.cssPrefix } : {},
51
53
  ...entry.groupType ? { type: entry.groupType } : {},
52
54
  ...entry.groupDescription ? { description: entry.groupDescription } : {},
@@ -161,9 +163,9 @@ function applyPresetToData(base, preset, strategy) {
161
163
  modes: mergeModes(base.modes, preset.modes, s.modes),
162
164
  modifiers: mergeModifiers(base.modifiers, preset.modifiers, s.modifiers),
163
165
  atomic: mergeAtomic(base.atomic, preset.atomic, s.tokens),
164
- macros: {
165
- ...base.macros,
166
- ...preset.macros
166
+ compositeStyles: {
167
+ ...base.compositeStyles,
168
+ ...preset.compositeStyles
167
169
  },
168
170
  motion: mergeRecordByKey(base.motion, preset.motion, s.motion),
169
171
  components: mergeRecordByKey(base.components, preset.components, s.components),
@@ -1,6 +1,11 @@
1
1
  import { ConfigurableProp } from "@uds/types";
2
2
 
3
3
  //#region ../config/dist/propertyGroups.d.ts
4
+ //#region src/propertyGroups.d.ts
4
5
  type PropertyGroupId = 'textColor' | 'background' | 'borderColor' | 'outlineColor' | 'ringColor' | 'divideColor' | 'shadowColor' | 'svgFill' | 'svgStroke' | 'caretColor' | 'textDecorationColor' | 'opacity' | 'colorOpacity' | 'bgOpacity' | 'borderColorOpacity' | 'divideColorOpacity' | 'outlineColorOpacity' | 'ringColorOpacity' | 'textDecorationColorOpacity' | 'svgFillOpacity' | 'svgStrokeOpacity' | 'shadowColorOpacity' | 'caretColorOpacity' | 'fontFamily' | 'fontSize' | 'fontWeight' | 'lineHeight' | 'letterSpacing' | 'blur' | 'backdropBlur' | 'animation' | 'shadow' | 'textShadow' | 'zIndex' | 'borderWidth' | 'borderRadius' | 'outlineWidth' | 'divideWidth' | 'ringWidth' | 'padding' | 'margin' | 'offset' | 'gap' | 'indent' | 'scrollSnapGap' | 'scrollSnapSpacing' | 'tableBorderSpacing' | 'width' | 'height' | 'aspectRatio' | 'positionPlacement' | 'flex' | 'transform' | 'strokeWidth';
6
+ /**
7
+ * A logical grouping of ConfigurableProps with a human-readable label.
8
+ * Used by the Studio UI to let users scope token groups to specific properties.
9
+ */
5
10
  //#endregion
6
11
  export { PropertyGroupId };
@@ -1,6 +1,8 @@
1
1
  import { ArbitraryTokenGroup, AtomicToken, ExampleDef, ModeGroup, ModifierDef, MotionPresetsDef, UdsConfig } from "./createConfig.js";
2
+ import { CompositeStylesConfig } from "@uds/types";
2
3
 
3
4
  //#region ../config/dist/serialize.d.ts
5
+ //#region src/serialize.d.ts
4
6
  type ModifierNameShape = `_${string}`;
5
7
  type TokenRef = {
6
8
  $ref: string;
@@ -9,6 +11,12 @@ interface SerializedConfig {
9
11
  modes: ModeGroup[];
10
12
  modifiers?: ModifierDef[];
11
13
  atomic: AtomicToken<ModifierNameShape>[];
14
+ compositeStyles?: CompositeStylesConfig;
15
+ /**
16
+ * Legacy field name. Kept on the wire format so older serialized configs
17
+ * (and `draft_base_configs.baseConfig` blobs) continue to deserialize
18
+ * until they're rewritten. New code should populate `compositeStyles`.
19
+ */
12
20
  macros?: Record<string, Record<string, Record<string, unknown>>>;
13
21
  arbitraryTokens?: ArbitraryTokenGroup[];
14
22
  motion?: MotionPresetsDef;
@@ -52,6 +60,6 @@ declare function serializeConfig(config: UdsConfig): SerializedConfig;
52
60
  * Resolves `$ref` markers back to `var()` strings using the atomic token
53
61
  * definitions, then reconstructs the builder chain.
54
62
  */
55
- declare function deserializeConfig(data: SerializedConfig): UdsConfig;
63
+ declare function deserializeConfig(data: SerializedConfig): UdsConfig; //#endregion
56
64
  //#endregion
57
65
  export { SerializedConfig, TokenRef, buildReverseMap, deserializeConfig, serializeConfig };
@@ -10,6 +10,21 @@ import { buildTokenReference, createConfigBuilder, resolveConfig } from "./creat
10
10
  * serializeConfig: UdsConfig → SerializedConfig (var() → $ref markers)
11
11
  * deserializeConfig: SerializedConfig → UdsConfig ($ref markers → var())
12
12
  */
13
+ /**
14
+ * Migrate the legacy serialized `macros` field into the new
15
+ * `compositeStyles` shape. Each old key (`elevation`) becomes a
16
+ * `{ label, styles }` def. Returns an empty object when there's
17
+ * nothing to migrate so the field is always populated.
18
+ */
19
+ function upgradeLegacyMacros(legacy) {
20
+ if (!legacy) return {};
21
+ const out = {};
22
+ for (const [name, variants] of Object.entries(legacy)) out[name] = {
23
+ label: name,
24
+ styles: variants
25
+ };
26
+ return out;
27
+ }
13
28
  function isTokenRef(val) {
14
29
  return typeof val === "object" && val !== null && "$ref" in val && typeof val.$ref === "string";
15
30
  }
@@ -93,7 +108,7 @@ function serializeConfig(config) {
93
108
  modes: data.modes,
94
109
  modifiers: data.modifiers.length > 0 ? data.modifiers : void 0,
95
110
  atomic: data.atomic,
96
- macros: Object.keys(data.macros).length > 0 ? data.macros : void 0,
111
+ compositeStyles: Object.keys(data.compositeStyles).length > 0 ? data.compositeStyles : void 0,
97
112
  arbitraryTokens: data.arbitraryTokens && data.arbitraryTokens.length > 0 ? data.arbitraryTokens : void 0,
98
113
  motion: Object.keys(data.motion).length > 0 ? data.motion : void 0,
99
114
  components,
@@ -136,7 +151,7 @@ function deserializeConfig(data) {
136
151
  modes: data.modes,
137
152
  modifiers: data.modifiers ?? [],
138
153
  atomic: data.atomic,
139
- macros: data.macros ?? {},
154
+ compositeStyles: data.compositeStyles ?? upgradeLegacyMacros(data.macros),
140
155
  motion: data.motion ?? {},
141
156
  components,
142
157
  preflight: data.preflight,
@@ -1,4 +1,5 @@
1
1
  //#region ../config/dist/types.d.ts
2
+ //#region src/types.d.ts
2
3
  /**
3
4
  * Scalar DTCG-aligned token types. Composite types (shadow, gradient,
4
5
  * typography, border, transition, cubicBezier) are intentionally deferred
@@ -59,6 +60,6 @@ type VarGroupDef<M extends `_${string}` = `_${string}`> = {
59
60
  * spacing: { $type: 'dimension', 1: { value: '0.25rem' }, 2: { value: '0.5rem' } },
60
61
  * }
61
62
  */
62
- type VarsConfig<M extends `_${string}` = `_${string}`> = Record<string, VarGroupDef<M>>;
63
+ type VarsConfig<M extends `_${string}` = `_${string}`> = Record<string, VarGroupDef<M>>; //#endregion
63
64
  //#endregion
64
65
  export { TokenType, VarGroupDef, VarTokenDef, VarsConfig };