Skip to content

Commit

Permalink
feat: adds design token resultion for cfGap, cfWidth, cfHeight, and c…
Browse files Browse the repository at this point in the history
…fBackgroundColor
  • Loading branch information
ryunsong-contentful committed Dec 18, 2023
1 parent 0b5d122 commit ca95ac9
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@ export const defineDesignTokens = (designTokenDefinition: DesignTokensDefinition
});
};

export const getDesignTokenRegistrationForSpacing = (breakpointValue: string) => {
export const getDesignTokenRegistration = (breakpointValue: string) => {
let resolvedValue = '';
const values = breakpointValue.split(' ');
values.forEach((value) => {
let tokenValue = value;
if (isTemplateStringFormat(value)) tokenValue = resolveSpacingDesignToken(value);
if (isTemplateStringFormat(value)) tokenValue = resolveSimpleDesignToken(value);
resolvedValue += `${tokenValue} `;
});

return resolvedValue;
};

Expand All @@ -33,7 +34,7 @@ const isTemplateStringFormat = (str: string) => {
return templateStringRegex.test(str);
};

const resolveSpacingDesignToken = (templateString: string) => {
const resolveSimpleDesignToken = (templateString: string) => {
const nonTemplateValue = templateString.replace(templateStringRegex, '$1');
const designKeys = nonTemplateValue.split('.');
const spacingValues = designTokensRegistry[designKeys[0]] as DesignTokensDefinition;
Expand Down
23 changes: 18 additions & 5 deletions packages/experience-builder-sdk/src/hooks/useBreakpoints.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback, useEffect, useMemo, useState } from 'react';
import { Breakpoint, CompositionVariableValueType } from '../types';
import { getDesignTokenRegistrationForSpacing } from '../core/designTokenRegistry';
import { getDesignTokenRegistration } from '../core/designTokenRegistry';

export const MEDIA_QUERY_REGEXP = /(<|>)(\d{1,})(px|cm|mm|in|pt|pc)$/;

Expand Down Expand Up @@ -28,7 +28,14 @@ const toCSSMediaQuery = ({ query }: Breakpoint): string | undefined => {
return undefined;
};

const availableDesignTokenVariables = new Set(['cfPadding', 'cfMargin', 'cfGap']);
const availableDesignTokenVariables = new Set([
'cfPadding',
'cfMargin',
'cfGap',
'cfWidth',
'cfHeight',
'cfBackgroundColor',
]);

// Remove this helper when upgrading to TypeScript 5.0 - https://github.com/microsoft/TypeScript/issues/48829
const findLast = <T>(
Expand Down Expand Up @@ -59,9 +66,15 @@ export const getValueForBreakpoint = (
// Assume that the values are sorted by media query to apply the cascading CSS logic
for (let index = activeBreakpointIndex; index >= 0; index--) {
const breakpointId = breakpoints[index].id;
if (availableDesignTokenVariables.has(variableName)) {
if (variableName === 'cfMargin' || variableName === 'cfPadding' || variableName === 'cfGap')
return getDesignTokenRegistrationForSpacing(valuesByBreakpoint[breakpointId]);
if (
variableName === 'cfMargin' ||
variableName === 'cfPadding' ||
variableName === 'cfGap' ||
variableName === 'cfWidth' ||
variableName === 'cfHeight' ||
variableName === 'cfBackgroundColor'
) {
return getDesignTokenRegistration(valuesByBreakpoint[breakpointId]);
}
if (valuesByBreakpoint[breakpointId]) {
// If the value is defined, we use it and stop the breakpoints cascade
Expand Down

0 comments on commit ca95ac9

Please sign in to comment.