2.6 KiB
token-gen
Generates Kotlin (Jetpack Compose) source files from design tokens and icons defined in the ds-tokens git submodule.
Making sure submodule is at the pinned commit
For the most cases (a fresh checkout, or making sure the submodule is at the pinned commit), use:
git submodule update --init --recursive
Updating tokens
Note: You only need
git submodule update --remotewhen you want to pull new design tokens from the remoteds-tokensrepository. If you're just regenerating Kotlin from the tokens already checked out (e.g. changing the generation script), skip step 1 — don't run it without the need, as it moves the submodule pointer to the latest remote commit and pulls in unrelated token changes. This checks out the submodule at the commit already recorded in the repo, without pulling anything new.
- (Only if you need newer tokens) Update the
ds-tokenssubmodule to the latest commit:git submodule update --remote core/ui/ds-tokens - Re-run the build:
cd core/ui/token-gen && npm run buildnpm run buildgenerates tokens, icons and assets. To regenerate only one of them:npm run build:tokens # node build-tokens.mjs (also runs icons + assets, folds their hashes into .tokens-hash) npm run build:icons # node build-icons.mjs (generates both icons and assets) - Commit the generated files (and the submodule pointer too, only if you ran step 1).
How it works
The build runs two scripts:
build-tokens.mjsuses Style Dictionary v5 with @tokens-studio/sd-transforms to read JSON token files fromcore/ui/ds-tokens/tokens/and generate Kotlin files intocore/ui/src/main/java/com/tangem/core/ui/res/generated/.build-icons.mjsgenerates ComposeImageVectorKotlin sources from two SVG folders:core/ui/ds-tokens/icons/→…/res/generated/icons/as extension properties on theIconsobject. Icons are single-color and tintable — the#0F0F0Fplaceholder is rewritten toColor.BlacksoIcon(tint = …)can re-color them.core/ui/ds-tokens/assets/→…/res/generated/assets/as extension properties on the sameIconsobject (imported from the icons package). Assets are illustrations that keep their own colors verbatim (no tint placeholder), reachable at call sites asIcons.il_token_custometc.
All generated files are written to com.tangem.core.ui.res.generated and should not be edited manually.