@yahoo/uds-v5-wip 1.24.0 → 1.25.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/dist/config/dist/component-resolution.d.ts +1 -1
- package/dist/config/dist/consts/defaultColors.d.ts +2 -1
- package/dist/config/dist/createConfig.d.ts +55 -31
- package/dist/config/dist/createConfig.js +45 -23
- package/dist/config/dist/preset-merge.js +5 -3
- package/dist/config/dist/propertyGroups.d.ts +5 -0
- package/dist/config/dist/serialize.d.ts +9 -1
- package/dist/config/dist/serialize.js +17 -2
- package/dist/config/dist/types.d.ts +2 -1
- package/dist/config.d.ts +197 -197
- package/dist/config.js +1 -1
- package/dist/core/dist/compositeStyles.d.ts +22 -0
- package/dist/core/dist/compositeStyles.js +51 -0
- package/dist/core/dist/createComponent.d.ts +2 -1
- package/dist/core/dist/createComponent.js +1 -1
- package/dist/core/dist/createComponentExample.d.ts +2 -1
- package/dist/core/dist/createProvider.d.ts +2 -1
- package/dist/core/dist/generated/stylePropsTwMap.d.ts +2 -1
- package/dist/core/dist/getComponentStyles.d.ts +2 -1
- package/dist/core/dist/getStyles.d.ts +2 -1
- package/dist/core/dist/getStyles.js +9 -9
- package/dist/core/dist/index.d.ts +1 -1
- package/dist/core/dist/index.js +1 -1
- package/dist/core/dist/propMappings.d.ts +2 -1
- package/dist/core/dist/resolveMotionState.d.ts +2 -1
- package/dist/core/dist/transformPreset.d.ts +2 -1
- package/dist/core/dist/withDefaultStyleProps.d.ts +2 -1
- package/dist/core.d.ts +2 -2
- package/dist/core.js +2 -2
- package/dist/foundational-presets/dist/boldVibrant.d.ts +198 -197
- package/dist/foundational-presets/dist/brutalist.d.ts +198 -197
- package/dist/foundational-presets/dist/candy.d.ts +198 -197
- package/dist/foundational-presets/dist/cleanMinimalist.d.ts +198 -197
- package/dist/foundational-presets/dist/corporate.d.ts +198 -197
- package/dist/foundational-presets/dist/darkMoody.d.ts +198 -197
- package/dist/foundational-presets/dist/defaultPreset.d.ts +198 -197
- package/dist/foundational-presets/dist/forest.d.ts +198 -197
- package/dist/foundational-presets/dist/highContrast.d.ts +198 -197
- package/dist/foundational-presets/dist/lavender.d.ts +198 -197
- package/dist/foundational-presets/dist/luxury.d.ts +198 -197
- package/dist/foundational-presets/dist/monochrome.d.ts +198 -197
- package/dist/foundational-presets/dist/motion.d.ts +2 -1
- package/dist/foundational-presets/dist/neonCyber.d.ts +198 -197
- package/dist/foundational-presets/dist/newspaper.d.ts +198 -197
- package/dist/foundational-presets/dist/ocean.d.ts +198 -197
- package/dist/foundational-presets/dist/slate.d.ts +198 -197
- package/dist/foundational-presets/dist/sunset.d.ts +198 -197
- package/dist/foundational-presets/dist/terminal.d.ts +198 -197
- package/dist/foundational-presets/dist/warmOrganic.d.ts +198 -197
- package/dist/loader/dist/loader/style-transform.js +8 -8
- package/dist/loader/dist/packages/core/dist/compositeStyles.js +43 -0
- package/dist/loader/dist/packages/core/dist/getStyles.js +1 -1
- package/dist/loader/dist/packages/core/dist/index.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/core/dist/macros.d.ts +0 -21
- package/dist/core/dist/macros.js +0 -49
- package/dist/loader/dist/packages/core/dist/macros.js +0 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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,
|
|
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
|
|
10
|
-
/**
|
|
11
|
-
|
|
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
|
-
|
|
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> = {},
|
|
202
|
-
interface UdsConfig<TModifier extends ModifierNameShape = ModifierProp, TTokens = EmptyTokens, TMotion = EmptyMotion, TExt extends Record<string, any> = {},
|
|
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,
|
|
207
|
-
prefix(value: string): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
208
|
-
buildOptions(options: BuildOptions): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
209
|
-
defineModes<const NewModes extends readonly ModeGroup[]>(params: CheckForReservedModifiers<NewModes>): ConfigResult<TModifier | GetModifierName<NewModes>, TTokens, TMotion, TExt,
|
|
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
|
-
|
|
213
|
-
}) => Defs)): ConfigResult<TModifier | Defs[number]['modifier'], TTokens, TMotion, TExt,
|
|
214
|
-
|
|
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,
|
|
217
|
-
defineArbitraryTokens(params: ArbitraryTokenGroup[]): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
218
|
-
defineMotion<const M extends MotionPresetsDef>(presets: M | ((tokens: TTokens) => M)): ConfigResult<TModifier, TTokens, { [K in keyof M]: string }, TExt,
|
|
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,
|
|
224
|
-
defineGlobalStyles(params: GlobalStylesDef | ((tokens: TTokens) => GlobalStylesDef)): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
225
|
-
defineDesignPrinciples(principles: string[]): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
226
|
-
defineExample(name: string, examples: ExampleDef): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
227
|
-
compose(...presets: (ComponentConfig | UdsConfig | Partial<UdsConfigData>)[]): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
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,
|
|
230
|
-
extend<const NewExt extends Record<string, any>>(ext: NewExt): ConfigResult<TModifier, TTokens, TMotion, TExt & NewExt,
|
|
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,
|
|
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,
|
|
243
|
-
defineVars<const TVarsNew extends VarsConfig<[TModeModifiers] extends [never] ? `_${string}` : TModeModifiers>>(vars: TVarsNew): ConfigResult<TModifier, TTokens, TMotion, TExt,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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[];
|
|
@@ -4,9 +4,9 @@ import "../../utils/dist/index.js";
|
|
|
4
4
|
import { getConfigurablePropMapping } from "../../core/dist/propMappings.js";
|
|
5
5
|
import "../../core/dist/index.js";
|
|
6
6
|
import { buildMotionReference, resolveComponentMotionAliases, validateComponentVariants } from "./component-resolution.js";
|
|
7
|
+
import { applyPresetToData, deepMerge, mergeAtomic } from "./preset-merge.js";
|
|
7
8
|
import { expandPropertyGroups } from "./propertyGroups.js";
|
|
8
9
|
import { resolveTokenType, sniffTokenTypeFromValue } from "./resolveTokenTypes.js";
|
|
9
|
-
import { applyPresetToData, deepMerge, mergeAtomic } from "./preset-merge.js";
|
|
10
10
|
//#region ../config/dist/createConfig.js
|
|
11
11
|
/** biome-ignore-all lint/suspicious/noExplicitAny: necessary for dynamic builder to work correctly */
|
|
12
12
|
/** Build a structured token reference object from atomic tokens */
|
|
@@ -31,16 +31,37 @@ function buildTokenReference(atomic, configPrefix) {
|
|
|
31
31
|
}
|
|
32
32
|
return result;
|
|
33
33
|
}
|
|
34
|
-
/** Build a structured
|
|
35
|
-
function
|
|
34
|
+
/** Build a structured composite-styles reference object for use in defineModifiers context */
|
|
35
|
+
function buildCompositeStylesReference(compositeStyles) {
|
|
36
36
|
const result = {};
|
|
37
|
-
for (const [
|
|
38
|
-
result[
|
|
39
|
-
for (const valueName of Object.keys(def)) result[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
386
|
-
...data.
|
|
407
|
+
const allCompositeStyles = {
|
|
408
|
+
...data.compositeStyles,
|
|
387
409
|
...resolved
|
|
388
410
|
};
|
|
389
411
|
const edges = /* @__PURE__ */ new Map();
|
|
390
|
-
for (const [
|
|
412
|
+
for (const [groupName, def] of Object.entries(allCompositeStyles)) {
|
|
391
413
|
const targets = /* @__PURE__ */ new Set();
|
|
392
|
-
for (const bag of Object.values(
|
|
393
|
-
for (const key of Object.keys(bag)) if (key in
|
|
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(
|
|
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
|
|
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
|
-
|
|
418
|
-
...data.
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
165
|
-
...base.
|
|
166
|
-
...preset.
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|