Skip to content

Commit b71a327

Browse files
authored
Designer: Added support for applying interactive groups (#247)
1 parent 3cb3954 commit b71a327

17 files changed

Lines changed: 443 additions & 320 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "Updated style properties to readonly, adjusted token group types",
4+
"packageName": "@adaptive-web/adaptive-ui",
5+
"email": "47367562+bheston@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "Added support for registering interactive token groups",
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: 1 addition & 1 deletion
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 { AdaptiveDesignToken, DesignTokenRegistry } from "./registry/design-token-registry.js";
18+
export { AdaptiveDesignToken, AdaptiveDesignTokenOrGroup, DesignTokenRegistry } from "./registry/design-token-registry.js";
1919
export { registerAppliableTokens, registerTokens } from "./registry/recipes.js";

packages/adaptive-ui-designer-core/src/registry/design-token-registry.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import { CSSDesignToken, DesignToken } from "@microsoft/fast-foundation";
2-
import { DesignTokenMetadata, StyleProperty } from "@adaptive-web/adaptive-ui";
2+
import { DesignTokenMetadata, InteractiveTokenGroup, StyleProperty } from "@adaptive-web/adaptive-ui";
33

44
export type AdaptiveDesignToken = (DesignToken<any> | CSSDesignToken<any>) & DesignTokenMetadata;
55

6-
export class DesignTokenRegistry {
7-
private _entries: { [id: string]: AdaptiveDesignToken } = {};
6+
export type AdaptiveDesignTokenOrGroup = (DesignToken<any> | CSSDesignToken<any> | InteractiveTokenGroup<any>) & DesignTokenMetadata;
7+
8+
export class DesignTokenRegistry<T extends { name: string } & DesignTokenMetadata> {
9+
private _entries: { [id: string]: T } = {};
810

911
/**
1012
* Registers a new design token definition.
1113
* @param designToken The design token definition to register.
1214
*/
13-
public register(designToken: AdaptiveDesignToken): void {
15+
public register(designToken: T): void {
1416
const { name } = designToken;
1517

1618
if (this.isRegistered(name)) {
@@ -34,7 +36,7 @@ export class DesignTokenRegistry {
3436
* Gets a design token definition by ID.
3537
* @param name The ID of the design token definition.
3638
*/
37-
public get(name: string): AdaptiveDesignToken | null {
39+
public get(name: string): T | null {
3840
if (this.isRegistered(name)) {
3941
return this._entries[name];
4042
}
@@ -45,7 +47,7 @@ export class DesignTokenRegistry {
4547
/**
4648
* Gets all entries in this registry.
4749
*/
48-
public get entries(): AdaptiveDesignToken[] {
50+
public get entries(): T[] {
4951
return Object.values(this._entries);
5052
}
5153

@@ -61,7 +63,7 @@ export class DesignTokenRegistry {
6163
* Returns all entries that apply to a given style property type
6264
* @param target the style property type to return entries of
6365
*/
64-
public find(target: StyleProperty): AdaptiveDesignToken[] {
66+
public find(target: StyleProperty): T[] {
6567
return Object.values(this._entries).filter(value => value.intendedFor?.includes(target));
6668
}
6769
}

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

Lines changed: 84 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { densityAdjustmentUnits } from "@adaptive-web/adaptive-ui"
1+
import { densityAdjustmentUnits, DesignTokenMetadata } from "@adaptive-web/adaptive-ui"
22
import {
33
accentBaseColor,
44
accentFillDiscernible,
@@ -148,12 +148,16 @@ import {
148148
warningStrokeSubtle,
149149
wcagContrastLevel,
150150
} from "@adaptive-web/adaptive-ui/reference";
151-
import { AdaptiveDesignToken, DesignTokenRegistry } from "./design-token-registry.js";
151+
import { AdaptiveDesignToken, AdaptiveDesignTokenOrGroup, DesignTokenRegistry } from "./design-token-registry.js";
152152

153153
/**
154154
* A collection of DesignTokens for adding to a {@link DesignTokenRegistry}.
155155
*/
156-
type DesignTokenStore = Array<AdaptiveDesignToken>;
156+
type Store<T extends { name: string } & DesignTokenMetadata> = Array<T>;
157+
158+
type DesignTokenStore = Store<AdaptiveDesignToken>;
159+
160+
type DesignTokenOrGroupStore = Store<AdaptiveDesignTokenOrGroup>;
157161

158162
const designTokens: DesignTokenStore = [
159163
accentBaseColor,
@@ -203,7 +207,7 @@ const designTokens: DesignTokenStore = [
203207
strokeStrongRestDelta,
204208
];
205209

206-
const colorTokens: DesignTokenStore = [
210+
const colorTokens: DesignTokenOrGroupStore = [
207211
// Layer
208212
layerFillFixedMinus4,
209213
layerFillFixedMinus3,
@@ -214,89 +218,89 @@ const colorTokens: DesignTokenStore = [
214218
layerFillFixedPlus2,
215219
layerFillFixedPlus3,
216220
layerFillFixedPlus4,
217-
layerFillInteractive.rest,
221+
layerFillInteractive,
218222
// Fill
219223
accentBaseColor,
220-
accentFillStealth.rest,
221-
accentFillSubtle.rest,
222-
accentFillIdeal.rest,
223-
accentFillDiscernible.rest,
224-
accentFillReadable.rest,
224+
accentFillStealth,
225+
accentFillSubtle,
226+
accentFillIdeal,
227+
accentFillDiscernible,
228+
accentFillReadable,
225229
highlightBaseColor,
226-
highlightFillStealth.rest,
227-
highlightFillSubtle.rest,
228-
highlightFillIdeal.rest,
229-
highlightFillDiscernible.rest,
230-
highlightFillReadable.rest,
230+
highlightFillStealth,
231+
highlightFillSubtle,
232+
highlightFillIdeal,
233+
highlightFillDiscernible,
234+
highlightFillReadable,
231235
criticalBaseColor,
232-
criticalFillStealth.rest,
233-
criticalFillSubtle.rest,
234-
criticalFillIdeal.rest,
235-
criticalFillDiscernible.rest,
236-
criticalFillReadable.rest,
236+
criticalFillStealth,
237+
criticalFillSubtle,
238+
criticalFillIdeal,
239+
criticalFillDiscernible,
240+
criticalFillReadable,
237241
warningBaseColor,
238-
warningFillStealth.rest,
239-
warningFillSubtle.rest,
240-
warningFillIdeal.rest,
241-
warningFillDiscernible.rest,
242-
warningFillReadable.rest,
242+
warningFillStealth,
243+
warningFillSubtle,
244+
warningFillIdeal,
245+
warningFillDiscernible,
246+
warningFillReadable,
243247
successBaseColor,
244-
successFillStealth.rest,
245-
successFillSubtle.rest,
246-
successFillIdeal.rest,
247-
successFillDiscernible.rest,
248-
successFillReadable.rest,
248+
successFillStealth,
249+
successFillSubtle,
250+
successFillIdeal,
251+
successFillDiscernible,
252+
successFillReadable,
249253
infoBaseColor,
250-
infoFillStealth.rest,
251-
infoFillSubtle.rest,
252-
infoFillIdeal.rest,
253-
infoFillDiscernible.rest,
254-
infoFillReadable.rest,
254+
infoFillStealth,
255+
infoFillSubtle,
256+
infoFillIdeal,
257+
infoFillDiscernible,
258+
infoFillReadable,
255259
neutralBaseColor,
256-
neutralFillStealth.rest,
257-
neutralFillSubtle.rest,
258-
neutralFillIdeal.rest,
259-
neutralFillDiscernible.rest,
260-
neutralFillReadable.rest,
260+
neutralFillStealth,
261+
neutralFillSubtle,
262+
neutralFillIdeal,
263+
neutralFillDiscernible,
264+
neutralFillReadable,
261265
// Stroke
262266
focusStroke,
263267
focusStrokeOuter,
264268
focusStrokeInner,
265-
accentStrokeSafety.rest,
266-
accentStrokeSubtle.rest,
267-
accentStrokeDiscernible.rest,
268-
accentStrokeReadable.rest,
269-
accentStrokeStrong.rest,
270-
highlightStrokeSafety.rest,
271-
highlightStrokeSubtle.rest,
272-
highlightStrokeDiscernible.rest,
273-
highlightStrokeReadable.rest,
274-
highlightStrokeStrong.rest,
275-
criticalStrokeSafety.rest,
276-
criticalStrokeSubtle.rest,
277-
criticalStrokeDiscernible.rest,
278-
criticalStrokeReadable.rest,
279-
criticalStrokeStrong.rest,
280-
warningStrokeSafety.rest,
281-
warningStrokeSubtle.rest,
282-
warningStrokeDiscernible.rest,
283-
warningStrokeReadable.rest,
284-
warningStrokeStrong.rest,
285-
successStrokeSafety.rest,
286-
successStrokeSubtle.rest,
287-
successStrokeDiscernible.rest,
288-
successStrokeReadable.rest,
289-
successStrokeStrong.rest,
290-
infoStrokeSafety.rest,
291-
infoStrokeSubtle.rest,
292-
infoStrokeDiscernible.rest,
293-
infoStrokeReadable.rest,
294-
infoStrokeStrong.rest,
295-
neutralStrokeSafety.rest,
296-
neutralStrokeSubtle.rest,
297-
neutralStrokeDiscernible.rest,
298-
neutralStrokeReadable.rest,
299-
neutralStrokeStrong.rest,
269+
accentStrokeSafety,
270+
accentStrokeSubtle,
271+
accentStrokeDiscernible,
272+
accentStrokeReadable,
273+
accentStrokeStrong,
274+
highlightStrokeSafety,
275+
highlightStrokeSubtle,
276+
highlightStrokeDiscernible,
277+
highlightStrokeReadable,
278+
highlightStrokeStrong,
279+
criticalStrokeSafety,
280+
criticalStrokeSubtle,
281+
criticalStrokeDiscernible,
282+
criticalStrokeReadable,
283+
criticalStrokeStrong,
284+
warningStrokeSafety,
285+
warningStrokeSubtle,
286+
warningStrokeDiscernible,
287+
warningStrokeReadable,
288+
warningStrokeStrong,
289+
successStrokeSafety,
290+
successStrokeSubtle,
291+
successStrokeDiscernible,
292+
successStrokeReadable,
293+
successStrokeStrong,
294+
infoStrokeSafety,
295+
infoStrokeSubtle,
296+
infoStrokeDiscernible,
297+
infoStrokeReadable,
298+
infoStrokeStrong,
299+
neutralStrokeSafety,
300+
neutralStrokeSubtle,
301+
neutralStrokeDiscernible,
302+
neutralStrokeReadable,
303+
neutralStrokeStrong,
300304
];
301305

302306
const strokeWidthTokens: DesignTokenStore = [
@@ -369,9 +373,9 @@ const effectsTokens: DesignTokenStore = [
369373
elevationDialog,
370374
];
371375

372-
function registerStore(
373-
store: DesignTokenStore,
374-
registry: DesignTokenRegistry
376+
function registerStore<T extends { name: string } & DesignTokenMetadata>(
377+
store: Store<T>,
378+
registry: DesignTokenRegistry<T>
375379
): void {
376380
store.forEach((token) => {
377381
// console.log("registerStore", token);
@@ -384,7 +388,7 @@ function registerStore(
384388
// interface for mapping tokens to other recipes or fixed values as well.
385389
// For now we've grouped the color tokens since by default those are all recipes/derived.
386390

387-
export const registerTokens = (registry: DesignTokenRegistry) => {
391+
export const registerTokens = (registry: DesignTokenRegistry<AdaptiveDesignToken>) => {
388392
registerStore(designTokens, registry);
389393
// This could be optimized, but some tokens are intended to be modified as well as applied as style properties.
390394
registerStore(strokeWidthTokens, registry);
@@ -393,7 +397,7 @@ export const registerTokens = (registry: DesignTokenRegistry) => {
393397
registerStore(effectsTokens, registry);
394398
};
395399

396-
export const registerAppliableTokens = (registry: DesignTokenRegistry) => {
400+
export const registerAppliableTokens = (registry: DesignTokenRegistry<AdaptiveDesignTokenOrGroup>) => {
397401
registerStore(colorTokens, registry);
398402
registerStore(strokeWidthTokens, registry);
399403
registerStore(densityTokens, registry);

0 commit comments

Comments
 (0)