Skip to content

Commit 51defb0

Browse files
authored
Designer: Finished migration away from Token Definition wrapper (#239)
1 parent 9fadfa1 commit 51defb0

11 files changed

Lines changed: 97 additions & 244 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "minor",
3+
"comment": "Designer: Finished migration away from Token Definition wrapper",
4+
"packageName": "@adaptive-web/adaptive-ui-designer-core",
5+
"email": "47367562+bheston@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}

packages/adaptive-ui-designer-core/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ export {
1515
} from "./model.js";
1616
export { mapReplacer, mapReviver, deserializeMap, serializeMap } from "./serialization.js";
1717
export { State, StatesState, PluginNode, focusIndicatorNodeName, } from "./node.js";
18-
export { DesignTokenDefinition, DesignTokenRegistry, FormControlId } from "./registry/design-token-registry.js";
19-
export { nameToTitle, registerAppliableTokens, registerTokens } from "./registry/recipes.js";
18+
export { AdaptiveDesignToken, DesignTokenRegistry } from "./registry/design-token-registry.js";
19+
export { registerAppliableTokens, registerTokens } from "./registry/recipes.js";

packages/adaptive-ui-designer-core/src/registry/custom-recipes.ts

Lines changed: 0 additions & 89 deletions
This file was deleted.
Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,42 @@
1-
import { DesignToken, ValuesOf } from "@microsoft/fast-foundation";
2-
import { StyleProperty } from "@adaptive-web/adaptive-ui";
1+
import { CSSDesignToken, DesignToken } from "@microsoft/fast-foundation";
2+
import { DesignTokenMetadata, StyleProperty } from "@adaptive-web/adaptive-ui";
33

4-
export const FormControlId = {
5-
text: "text",
6-
color: "color",
7-
} as const;
8-
9-
export type FormControlId = ValuesOf<typeof FormControlId>;
10-
11-
/**
12-
* Defines a generic design token.
13-
*/
14-
export interface DesignTokenDefinition {
15-
/**
16-
* Display title for organizing design token sets.
17-
*/
18-
groupTitle?: string;
19-
20-
/**
21-
* Display title of the design token.
22-
*/
23-
title: string;
24-
25-
/**
26-
* Unique ID for the design token.
27-
*/
28-
id: string;
29-
30-
/**
31-
* Target style properties for the design token.
32-
*/
33-
intendedFor?: StyleProperty[];
34-
35-
/**
36-
* Type of form control to edit this value. Following convention from fast-tooling.
37-
*/
38-
formControlId?: FormControlId;
39-
40-
/**
41-
* Underlying {@link DesignToken} for the plugin definition.
42-
*/
43-
token: DesignToken<any>;
44-
}
4+
export type AdaptiveDesignToken = (DesignToken<any> | CSSDesignToken<any>) & DesignTokenMetadata;
455

466
export class DesignTokenRegistry {
47-
private _entries: { [id: string]: DesignTokenDefinition } = {};
7+
private _entries: { [id: string]: AdaptiveDesignToken } = {};
488

499
/**
5010
* Registers a new design token definition.
5111
* @param designToken The design token definition to register.
5212
*/
53-
public register(designToken: DesignTokenDefinition): void {
54-
const { id } = designToken;
13+
public register(designToken: AdaptiveDesignToken): void {
14+
const { name } = designToken;
5515

56-
if (this.isRegistered(id)) {
16+
if (this.isRegistered(name)) {
5717
throw new Error(
58-
`Design token ${id} has already been registered. You must unregister the design token before registering with that ID.`
18+
`Design token ${name} has already been registered. You must unregister the design token before registering with that ID.`
5919
);
6020
} else {
61-
this._entries[id] = designToken;
21+
this._entries[name] = designToken;
6222
}
6323
}
6424

6525
/**
6626
* Unregisters a design token definition.
67-
* @param id The ID of the design token definition to unregister.
27+
* @param name The ID of the design token definition to unregister.
6828
*/
69-
public unregister(id: string): void {
70-
delete this._entries[id];
29+
public unregister(name: string): void {
30+
delete this._entries[name];
7131
}
7232

7333
/**
7434
* Gets a design token definition by ID.
75-
* @param id The ID of the design token definition.
35+
* @param name The ID of the design token definition.
7636
*/
77-
public get(id: string): DesignTokenDefinition | null {
78-
if (this.isRegistered(id)) {
79-
return this._entries[id];
37+
public get(name: string): AdaptiveDesignToken | null {
38+
if (this.isRegistered(name)) {
39+
return this._entries[name];
8040
}
8141

8242
return null;
@@ -85,23 +45,23 @@ export class DesignTokenRegistry {
8545
/**
8646
* Gets all entries in this registry.
8747
*/
88-
public get entries(): DesignTokenDefinition[] {
48+
public get entries(): AdaptiveDesignToken[] {
8949
return Object.values(this._entries);
9050
}
9151

9252
/**
9353
* Determines if the design token definition has been registered.
94-
* @param id The ID of the design token definition.
54+
* @param name The ID of the design token definition.
9555
*/
96-
public isRegistered(id: string): boolean {
97-
return this._entries.hasOwnProperty(id);
56+
public isRegistered(name: string): boolean {
57+
return this._entries.hasOwnProperty(name);
9858
}
9959

10060
/**
10161
* Returns all entries that apply to a given style property type
10262
* @param target the style property type to return entries of
10363
*/
104-
public find(target: StyleProperty): DesignTokenDefinition[] {
64+
public find(target: StyleProperty): AdaptiveDesignToken[] {
10565
return Object.values(this._entries).filter(value => value.intendedFor?.includes(target));
10666
}
107-
}
67+
}

packages/adaptive-ui-designer-core/src/registry/recipes.ts

Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
import { sentenceCase } from "change-case";
2-
import type { DesignToken } from "@microsoft/fast-foundation";
3-
import {
4-
Color,
5-
densityAdjustmentUnits,
6-
DesignTokenMetadata,
7-
DesignTokenType,
8-
TypedCSSDesignToken
9-
} from "@adaptive-web/adaptive-ui"
1+
import { densityAdjustmentUnits } from "@adaptive-web/adaptive-ui"
102
import {
113
accentBaseColor,
124
accentFillDiscernible,
@@ -154,13 +146,12 @@ import {
154146
warningStrokeSubtle,
155147
wcagContrastLevel,
156148
} from "@adaptive-web/adaptive-ui/reference";
157-
import { DesignTokenDefinition, DesignTokenRegistry, FormControlId } from "./design-token-registry.js";
158-
import { blackOrWhiteDiscernibleRest, blackOrWhiteReadableRest, docBaseColor, docFill, docForeground } from "./custom-recipes.js";
149+
import { AdaptiveDesignToken, DesignTokenRegistry } from "./design-token-registry.js";
159150

160151
/**
161152
* A collection of DesignTokens for adding to a {@link DesignTokenRegistry}.
162153
*/
163-
type DesignTokenStore<T = any> = Array<DesignToken<T> & DesignTokenMetadata>;
154+
type DesignTokenStore = Array<AdaptiveDesignToken>;
164155

165156
const designTokens: DesignTokenStore = [
166157
accentBaseColor,
@@ -175,7 +166,6 @@ const designTokens: DesignTokenStore = [
175166
layerFillHoverDelta,
176167
layerFillActiveDelta,
177168
layerFillFocusDelta,
178-
docBaseColor,
179169
wcagContrastLevel,
180170
densityAdjustmentUnits,
181171
densityControl.horizontalPaddingUnits,
@@ -203,7 +193,7 @@ const designTokens: DesignTokenStore = [
203193
strokeStrongRestDelta,
204194
];
205195

206-
const colorTokens: DesignTokenStore<Color> = [
196+
const colorTokens: DesignTokenStore = [
207197
// Layer
208198
layerFillFixedMinus4,
209199
layerFillFixedMinus3,
@@ -297,19 +287,14 @@ const colorTokens: DesignTokenStore<Color> = [
297287
neutralStrokeDiscernible.rest,
298288
neutralStrokeReadable.rest,
299289
neutralStrokeStrong.rest,
300-
// Custom
301-
blackOrWhiteDiscernibleRest,
302-
blackOrWhiteReadableRest,
303-
docForeground,
304-
docFill,
305290
];
306291

307292
const strokeWidthTokens: DesignTokenStore = [
308293
strokeThickness,
309294
focusStrokeThickness,
310295
];
311296

312-
const densityTokens: DesignTokenStore<string> = [
297+
const densityTokens: DesignTokenStore = [
313298
densityControl.horizontalPadding,
314299
densityControl.verticalPadding,
315300
densityControl.horizontalGap,
@@ -324,7 +309,7 @@ const densityTokens: DesignTokenStore<string> = [
324309
densityLayer.verticalGap,
325310
];
326311

327-
const cornerRadiusTokens: DesignTokenStore<string> = [
312+
const cornerRadiusTokens: DesignTokenStore = [
328313
cornerRadiusControl,
329314
cornerRadiusLayer,
330315
];
@@ -366,34 +351,13 @@ const effectsTokens: DesignTokenStore = [
366351
elevationDialog,
367352
];
368353

369-
export function nameToTitle(name: string): string {
370-
const base = name.replace(/-/g, ' ').replace(/density_/, '');
371-
return sentenceCase(base);
372-
}
373-
374-
function registerStore<T>(
375-
store: DesignTokenStore<T>,
376-
groupTitle: string | undefined, // Phasing this out. Currently only used on the "Design Tokens" tab.
354+
function registerStore(
355+
store: DesignTokenStore,
377356
registry: DesignTokenRegistry
378357
): void {
379358
store.forEach((token) => {
380359
// console.log("registerStore", token);
381-
382-
// Handle legacy non-hierarchical format for `custom-recipes.ts`.
383-
const title = nameToTitle(token.name.indexOf(".") > -1 ? token.name.split(".").slice(1).join("-") : token.name);
384-
const intendedFor = (token instanceof TypedCSSDesignToken ? (token as TypedCSSDesignToken<any>).intendedFor : undefined);
385-
const formControlId = token.type === DesignTokenType.color ? FormControlId.color : FormControlId.text;
386-
387-
const definition: DesignTokenDefinition = {
388-
id: token.name,
389-
title,
390-
groupTitle,
391-
intendedFor,
392-
formControlId,
393-
token,
394-
};
395-
396-
registry.register(definition);
360+
registry.register(token);
397361
});
398362
}
399363

@@ -403,18 +367,18 @@ function registerStore<T>(
403367
// For now we've grouped the color tokens since by default those are all recipes/derived.
404368

405369
export const registerTokens = (registry: DesignTokenRegistry) => {
406-
registerStore(designTokens, "Global tokens", registry);
370+
registerStore(designTokens, registry);
407371
// This could be optimized, but some tokens are intended to be modified as well as applied as style properties.
408-
registerStore(strokeWidthTokens, "Stroke width", registry);
409-
registerStore(cornerRadiusTokens, "Corner radius", registry);
410-
registerStore(textTokens, "Text", registry);
411-
registerStore(effectsTokens, "Effects", registry);
372+
registerStore(strokeWidthTokens, registry);
373+
registerStore(cornerRadiusTokens, registry);
374+
registerStore(textTokens, registry);
375+
registerStore(effectsTokens, registry);
412376
};
413377

414378
export const registerAppliableTokens = (registry: DesignTokenRegistry) => {
415-
registerStore(colorTokens, undefined, registry);
416-
registerStore(strokeWidthTokens, undefined, registry);
417-
registerStore(densityTokens, undefined, registry);
418-
registerStore(cornerRadiusTokens, undefined, registry);
419-
registerStore(textTokens, undefined, registry);
379+
registerStore(colorTokens, registry);
380+
registerStore(strokeWidthTokens, registry);
381+
registerStore(densityTokens, registry);
382+
registerStore(cornerRadiusTokens, registry);
383+
registerStore(textTokens, registry);
420384
};

0 commit comments

Comments
 (0)