- From: Ryan Johnson via GitHub <sysbot+gh@w3.org>
- Date: Fri, 15 Jul 2022 21:00:47 +0000
- To: public-design-tokens-log@w3.org
Having `$deprecated` be an object makes sense, but I'd argue that a `$value` prop seems both redundant and conflicts with the definition of a Token. If `$deprecated` is _present_, it's assumed to be truthy, so there's no need for a `$value` that would always be set to `true`. Tokens are defined as JSON objects containing a `$value` property, so it'd be confusing if seen within deprecation metadata.
Having a deprecation message in isolation of the token description also makes sense, but I wonder if using `$description` would overload the term. I'd be more inclined to use `$message`, but this is just my personal opinion.
Lastly, I agree that there should be some degree of flexibility in allowing additional metadata for various use cases (e.g., documenting a potential replacement). However, `$extensions` within `$deprecated` seems overloaded. The way I interpreted the spec in regards to extension metadata seems like it's focused more on providing information on how to transform a token _value_, rather than how to document token _metadata_. `$deprecated` provides _documentation_ metadata, not _transformation_ metadata (regardless of its presence, it won't affect the transformed value of a token).
If the problem is the need to isolate transformation metadata (i.e., extensions) from documentation metadata, why not be explicit about it and have a `$docs` or `$info` Token property as a sibling to `$extensions`?
## Example
```javascript
{
"gray": {
"$value": "#808080",
"$description": "Neutral 50% Gray"
},
"grey": {
"$value": "{gray}",
"$description": "An optional description of the token, 'grey'.",
// Transformation metadata (free-form props)
// This data is used specifically to configure how to transform a token's value.
"$extensions": {
"com.foo.bar": {
// if language supports it, define by reference, not by value
// (Sass) $grey: $gray;
// (JS) const grey = gray;
// etc.
"retainAlias": true
}
},
// Documentation metadata (free-form props)
// This data has no affect on transformed value.
"$info": {
// Might be preferred, to keep all docs-specific data organized within a single object.
// Overrides #/grey/$description
"description": "Optional description of token 'grey'.",
/* Deprecation Examples */
// FORMAT 1: boolean
// (Answers nothing other than "Is it deprecated?")
"deprecated": true,
// FORMAT 2: string
// (Extends format 1, by providing a human-readable message about the deprecation)
"deprecated": "'grey' has been deprecated.",
// FORMAT 3: object
// (Further extends format 2 by providing a "next of kin" replacement.)
"deprecated": {
"message": "'grey' has been deprecated.",
// An alias is necessary in order to document the resolved, token name based on the transformation language.
"replacement": "{gray}"
}
}
}
}
```
* You might argue that properties of `#/grey/$info` could just be properties of `#/grey/$extensions/com.foo.bar`, but at least this format clearly separates transformation vs documentation metadata.
--
GitHub Notification of comment by CITguy
Please view or discuss this issue at https://github.com/design-tokens/community-group/issues/118#issuecomment-1185933635 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 15 July 2022 21:00:49 UTC