@tokens-studio/graph-engine-nodes-figma
Version:
Figma-specific nodes for the graph engine
66 lines • 2.29 kB
JavaScript
import { Node } from '@tokens-studio/graph-engine';
import { TokenSchema } from '@tokens-studio/graph-engine-nodes-design-tokens/schemas/index.js';
import { mergeTokenExtensions } from '../utils/tokenMerge.js';
export default class NodeDefinition extends Node {
static title = 'Scope By Type';
static type = 'studio.tokens.figma.scopeByType';
static description = 'Automatically sets Figma scopes based on token type';
constructor(props) {
super(props);
this.addInput('token', {
type: {
...TokenSchema,
description: 'The design token to automatically scope'
}
});
this.addOutput('token', {
type: TokenSchema
});
}
getScopesByType(token) {
switch (token.type) {
case 'color':
return ['ALL_FILLS', 'STROKE_COLOR', 'EFFECT_COLOR'];
case 'dimension':
return [
'GAP',
'WIDTH_HEIGHT',
'CORNER_RADIUS',
'STROKE_FLOAT',
'EFFECT_FLOAT',
'PARAGRAPH_INDENT'
];
case 'spacing':
return ['GAP', 'WIDTH_HEIGHT'];
case 'borderRadius':
return ['CORNER_RADIUS'];
case 'fontFamilies':
return ['FONT_FAMILY'];
case 'fontWeights':
return ['FONT_WEIGHT'];
case 'fontSizes':
return ['FONT_SIZE'];
case 'lineHeights':
return ['LINE_HEIGHT'];
case 'letterSpacing':
return ['LETTER_SPACING'];
case 'paragraphSpacing':
return ['PARAGRAPH_SPACING'];
case 'opacity':
return ['OPACITY'];
case 'sizing':
return ['WIDTH_HEIGHT'];
default:
return [];
}
}
execute() {
const { token } = this.getAllInputs();
const newScopes = this.getScopesByType(token);
const modifiedToken = mergeTokenExtensions(token, {
scopes: newScopes
});
this.outputs.token.set(modifiedToken);
}
}
//# sourceMappingURL=scopeByType.js.map