diff --git a/.changeset/tender-jokes-jump.md b/.changeset/tender-jokes-jump.md new file mode 100644 index 000000000..832a419aa --- /dev/null +++ b/.changeset/tender-jokes-jump.md @@ -0,0 +1,5 @@ +--- +"@tokens-studio/figma-plugin": patch +--- + +Fix ability to add a token with empty or nested empty token groups diff --git a/packages/tokens-studio-for-figma/src/app/components/EditTokenForm.tsx b/packages/tokens-studio-for-figma/src/app/components/EditTokenForm.tsx index b1e7becdd..8bb8f1764 100644 --- a/packages/tokens-studio-for-figma/src/app/components/EditTokenForm.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/EditTokenForm.tsx @@ -156,6 +156,15 @@ function EditTokenForm({ resolvedTokens }: Props) { [internalEditToken], ); + const hasEmptyGroups = React.useMemo(() => { + if (internalEditToken?.name) { + return internalEditToken.name.includes('..') + || internalEditToken.name.startsWith('.') + || internalEditToken.name.endsWith('.'); + } + return false; + }, [internalEditToken]); + React.useEffect(() => { if ((internalEditToken?.status !== EditTokenFormStatus.EDIT || nameWasChanged) && hasNameThatExistsAlready) { setError(t('tokenNamesMustBeUnique', { ns: 'errors' })); @@ -175,7 +184,10 @@ function EditTokenForm({ resolvedTokens }: Props) { if ((internalEditToken?.status || nameWasChanged) && hasCurlyBraces) { setError(t('tokenNamesCantContainCurlyBraces', { ns: 'errors' })); } - }, [internalEditToken, hasNameThatExistsAlready, nameWasChanged, hasAnotherTokenThatStartsWithName]); + if ((internalEditToken?.status || nameWasChanged) && hasEmptyGroups) { + setError(t('tokenNamesCantContainEmptyGroups', { ns: 'errors' })); + } + }, [internalEditToken, hasNameThatExistsAlready, nameWasChanged, hasAnotherTokenThatStartsWithName, hasEmptyGroups]); const handleChange = React.useCallback( (property: string, value: string) => { diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/en/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/en/errors.json index 1de6d1564..e3ca55be5 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/en/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/en/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "Can't create a group that shares a name with an existing token", "valueMustIncludePxOrRem": "Value must include either px or rem", "tokenNamesCantStartWithDollar": "Can't start with a dollar ($) sign", - "tokenNamesCantContainCurlyBraces": "Can't contain braces '{}'" + "tokenNamesCantContainCurlyBraces": "Can't contain braces '{}'", + "tokenNamesCantContainEmptyGroups": "Token names cannot contain empty groups" } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/es/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/es/errors.json index 0fb1f08bf..3e23c20c2 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/es/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/es/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "No se puede crear un grupo que comparta un nombre con un token existente", "valueMustIncludePxOrRem": "El valor debe incluir px o rem", "tokenNamesCantStartWithDollar": "No puedo comenzar con un signo de dólar ($)", - "tokenNamesCantContainCurlyBraces": "No puede contener llaves '{}'" + "tokenNamesCantContainCurlyBraces": "No puede contener llaves '{}'", + "tokenNamesCantContainEmptyGroups": "Los nombres de los tokens no pueden contener grupos vacíos" } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/fr/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/fr/errors.json index 5a96cebd6..18fe0f1e3 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/fr/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/fr/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "Impossible de créer un groupe partageant un nom avec un jeton existant", "valueMustIncludePxOrRem": "La valeur doit inclure px ou rem", "tokenNamesCantStartWithDollar": "Je ne peux pas commencer par un signe dollar ($)", - "tokenNamesCantContainCurlyBraces": "Ne peut pas contenir d'accolades '{}'" + "tokenNamesCantContainCurlyBraces": "Ne peut pas contenir d'accolades '{}'", + "tokenNamesCantContainEmptyGroups": "Les noms de jetons ne peuvent pas contenir de groupes vides" } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/hi/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/hi/errors.json index 1a8257309..31f9f716f 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/hi/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/hi/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "ऐसा समूह नहीं बनाया जा सकता जो किसी मौजूदा टोकन के साथ नाम साझा करता हो", "valueMustIncludePxOrRem": "मान में या तो px या rem शामिल होना चाहिए", "tokenNamesCantStartWithDollar": "डॉलर ($) चिह्न से प्रारंभ नहीं किया जा सकता", - "tokenNamesCantContainCurlyBraces": "ब्रेसिज़ शामिल नहीं हो सकते '{}'" + "tokenNamesCantContainCurlyBraces": "ब्रेसिज़ शामिल नहीं हो सकते '{}'", + "tokenNamesCantContainEmptyGroups": "टोकन नामों में खाली समूह नहीं हो सकते" } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/nl/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/nl/errors.json index a0ac44568..ba9bd84e5 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/nl/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/nl/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "Kan geen groep maken die een naam deelt met een bestaand token", "valueMustIncludePxOrRem": "De waarde moet px of rem bevatten", "tokenNamesCantStartWithDollar": "Kan niet beginnen met een dollarteken ($).", - "tokenNamesCantContainCurlyBraces": "Mag geen accolades '{}' bevatten" + "tokenNamesCantContainCurlyBraces": "Mag geen accolades '{}' bevatten", + "tokenNamesCantContainEmptyGroups": "Tokennamen mogen geen lege groepen bevatten" } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/zh/errors.json b/packages/tokens-studio-for-figma/src/i18n/lang/zh/errors.json index d51ef1b18..00b0323e5 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/zh/errors.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/zh/errors.json @@ -8,5 +8,6 @@ "cantCreateGroupThatSharesNameWithExistingToken": "无法创建与现有令Token享名称的组", "valueMustIncludePxOrRem": "值必须包含 px 或 rem", "tokenNamesCantStartWithDollar": "不能以美元 ($) 符号开头", - "tokenNamesCantContainCurlyBraces": "不能包含大括号“{}”" + "tokenNamesCantContainCurlyBraces": "不能包含大括号“{}”", + "tokenNamesCantContainEmptyGroups": "令牌名称不能包含空组" }