This commit is contained in:
Jonathan Summers-Muir committed 2023-01-19 17:50:49 +01:00
1 parent 0d53c05b54
commit 4553a288cc
14 files changed
+5314 -623

No files matched your search

+130 -11
View File
@@ -13451,6 +13451,7 @@
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -13579,6 +13580,11 @@
"color-support": "bin.js"
}
},
"node_modules/color2k": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.1.tgz",
"integrity": "sha512-iCg+xrEqtYISsSJZN1z44fyhv4EfX8lSkcDhodt6VnMf1+iMwZxAtmGXchTCeMUnTbXunGvUVK6E3skkApPnZw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -13875,6 +13881,7 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz",
"integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==",
"dev": true,
"dependencies": {
"glob": "^7.0.5",
"minimatch": "^3.0.3",
@@ -13893,6 +13900,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
"bin": {
"mkdirp": "bin/cmd.js"
},
@@ -13904,6 +13912,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true,
"engines": {
"node": ">=8"
}
@@ -17511,6 +17520,11 @@
"@types/yargs-parser": "*"
}
},
"node_modules/expr-eval": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz",
"integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg=="
},
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -18497,6 +18511,7 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
@@ -26110,6 +26125,7 @@
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
"integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==",
"dev": true,
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "~1.0.31"
@@ -26118,12 +26134,14 @@
"node_modules/noms/node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
"node_modules/noms/node_modules/readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
"dev": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -26134,7 +26152,8 @@
"node_modules/noms/node_modules/string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
"dev": true
},
"node_modules/non-layered-tidy-tree-layout": {
"version": "2.0.2",
@@ -32092,6 +32111,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -37118,6 +37138,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -37227,6 +37248,7 @@
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"engines": {
"node": ">=10"
}
@@ -37256,6 +37278,7 @@
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -37273,6 +37296,7 @@
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
"engines": {
"node": ">=10"
}
@@ -37427,9 +37451,11 @@
"@tailwindcss/forms": "^0.4.0",
"@tailwindcss/typography": "^0.5.0",
"autoprefixer": "^10.4.2",
"copyfiles": "^2.4.1",
"color2k": "^2.0.1",
"deepmerge": "^4.2.2",
"expr-eval": "^2.0.2",
"formik": "^2.2.9",
"glob": "^8.1.0",
"lodash": "^4.17.20",
"postcss": "^8.4.5",
"prop-types": "^15.7.2",
@@ -37440,6 +37466,7 @@
"devDependencies": {
"@types/react": "^17.0.37",
"@types/react-dom": "^17.0.11",
"copyfiles": "^2.4.1",
"style-dictionary": "^3.7.1",
"typescript": "4.3.4"
}
@@ -37708,6 +37735,43 @@
"csstype": "^3.0.2"
}
},
"packages/ui/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"packages/ui/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"packages/ui/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"packages/ui/node_modules/typescript": {
"version": "4.3.4",
"dev": true,
@@ -47760,6 +47824,7 @@
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -47851,6 +47916,11 @@
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"dev": true
},
"color2k": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.1.tgz",
"integrity": "sha512-iCg+xrEqtYISsSJZN1z44fyhv4EfX8lSkcDhodt6VnMf1+iMwZxAtmGXchTCeMUnTbXunGvUVK6E3skkApPnZw=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -48147,6 +48217,7 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz",
"integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==",
"dev": true,
"requires": {
"glob": "^7.0.5",
"minimatch": "^3.0.3",
@@ -48160,12 +48231,14 @@
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
"untildify": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true
}
}
},
@@ -51523,6 +51596,11 @@
}
}
},
"expr-eval": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz",
"integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg=="
},
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -52288,7 +52366,8 @@
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-intrinsic": {
"version": "1.1.3",
@@ -58009,6 +58088,7 @@
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz",
"integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"readable-stream": "~1.0.31"
@@ -58017,12 +58097,14 @@
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
"dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -58033,7 +58115,8 @@
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
"dev": true
}
}
},
@@ -62372,7 +62455,8 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true
},
"require-from-string": {
"version": "2.0.2",
@@ -65110,9 +65194,12 @@
"@types/react": "^17.0.37",
"@types/react-dom": "^17.0.11",
"autoprefixer": "^10.4.2",
"color2k": "^2.0.1",
"copyfiles": "^2.4.1",
"deepmerge": "^4.2.2",
"expr-eval": "^2.0.2",
"formik": "^2.2.9",
"glob": "*",
"lodash": "^4.17.20",
"postcss": "^8.4.5",
"prop-types": "^15.7.2",
@@ -65338,6 +65425,34 @@
"csstype": "^3.0.2"
}
},
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
}
},
"minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": {
"brace-expansion": "^2.0.1"
}
},
"typescript": {
"version": "4.3.4",
"dev": true
@@ -66904,6 +67019,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -67150,7 +67266,8 @@
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
},
"yaeti": {
"version": "0.0.6",
@@ -67171,6 +67288,7 @@
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -67184,7 +67302,8 @@
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true
},
"yn": {
"version": "3.1.1",
-491
View File
@@ -1,491 +0,0 @@
const glob = require('glob')
const StyleDictionary = require('style-dictionary')
const baseFiles = glob.sync(`tokens/01_base/**/*.json`)
const themeFiles = glob.sync(`tokens/02_themes/**/*.json`)
const semanticFiles = glob.sync(`tokens/03_semantic/**/*.json`)
const componentFiles = glob.sync('tokens/04_component/**/*.json')
const { Parser } = require('expr-eval')
const { parseToRgba } = require('color2k')
const fs = require('fs')
console.log('Build started...')
console.log('\n==============================================')
const fontWeightMap = {
thin: 100,
extralight: 200,
ultralight: 200,
extraleicht: 200,
light: 300,
leicht: 300,
normal: 400,
regular: 400,
buch: 400,
medium: 500,
kraeftig: 500,
kräftig: 500,
semibold: 600,
demibold: 600,
halbfett: 600,
bold: 700,
dreiviertelfett: 700,
extrabold: 800,
ultabold: 800,
fett: 800,
black: 900,
heavy: 900,
super: 900,
extrafett: 900,
}
/**
* Helper: Transforms math like Figma Tokens
*/
const parser = new Parser()
function checkAndEvaluateMath(expr) {
try {
parser.evaluate(expr)
return +parser.evaluate(expr).toFixed(3)
} catch (ex) {
return expr
}
}
/**
* Helper: Transforms dimensions to px
*/
function transformDimension(value) {
if (value.endsWith('px')) {
return value
}
return value + 'px'
}
/**
* Helper: Transforms letter spacing % to em
*/
function transformLetterSpacing(value) {
if (value.endsWith('%')) {
const percentValue = value.slice(0, -1)
return `${percentValue / 100}em`
}
return value
}
/**
* Helper: Transforms letter spacing % to em
*/
function transformFontWeights(value) {
const mapped = fontWeightMap[value.toLowerCase()]
return `${mapped}`
}
/**
* Helper: Transforms hex rgba colors used in figma tokens: rgba(#ffffff, 0.5) =? rgba(255, 255, 255, 0.5). This is kind of like an alpha() function.
*/
function transformHEXRGBa(value) {
if (value.startsWith('rgba(#')) {
const [hex, alpha] = value.replace(')', '').split('rgba(').pop().split(', ')
const [r, g, b] = parseToRgba(hex)
return `rgba(${r}, ${g}, ${b}, ${alpha})`
} else {
return value
}
}
/**
* Helper: Transforms boxShadow object to shadow shorthand
* This currently works fine if every value uses an alias, but if any one of these use a raw value, it will not be transformed.
*/
function transformShadow(shadow) {
const { x, y, blur, spread, color } = shadow
return `${x} ${y} ${blur} ${spread} ${color}`
}
/**
* Helper: Transforms typography object to typography shorthand
* This currently works fine if every value uses an alias, but if any one of these use a raw value, it will not be transformed.
* If you'd like to output all typography values, you'd rather need to return the typography properties itself
*/
function transformTypography(value) {
const { fontWeight, fontSize, lineHeight, fontFamily } = value
return `${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`
}
/**
* Transform typography shorthands for css variables
*/
StyleDictionary.registerTransform({
name: 'typography/shorthand',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'typography',
transformer: (token) => transformTypography(token.original.value),
})
/**
* Transform shadow shorthands for css variables
*/
StyleDictionary.registerTransform({
name: 'shadow/shorthand',
type: 'value',
transitive: true,
matcher: (token) => ['boxShadow'].includes(token.type),
transformer: (token) => {
return Array.isArray(token.original.value)
? token.original.value.map((single) => transformShadow(single)).join(', ')
: transformShadow(token.original.value)
},
})
/**
* Transform fontSizes to px
*/
StyleDictionary.registerTransform({
name: 'size/px',
type: 'value',
transitive: true,
matcher: (token) => ['fontSizes', 'dimension', 'borderRadius', 'spacing'].includes(token.type),
transformer: (token) => transformDimension(token.value),
})
/**
* Transform letterSpacing to em
*/
StyleDictionary.registerTransform({
name: 'size/letterspacing',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'letterSpacing',
transformer: (token) => transformLetterSpacing(token.value),
})
/**
* Transform fontWeights to numerical
*/
StyleDictionary.registerTransform({
name: 'type/fontWeight',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'fontWeights',
transformer: (token) => transformFontWeights(token.value),
})
/**
* Transform rgba colors to usable rgba
*/
StyleDictionary.registerTransform({
name: 'color/hexrgba',
type: 'value',
transitive: true,
matcher: (token) => typeof token.value === 'string' && token.value.startsWith('rgba(#'),
transformer: (token) => transformHEXRGBa(token.value),
})
/**
* Transform to resolve math across all tokens
*/
StyleDictionary.registerTransform({
name: 'resolveMath',
type: 'value',
transitive: true,
matcher: (token) => token,
// Putting this in strings seems to be required
transformer: (token) => `${checkAndEvaluateMath(token.value)}`,
})
/**
* Format for css variables
*/
StyleDictionary.registerFormat({
name: 'css/variables',
formatter: function (dictionary, config) {
return `${this.selector} {
${dictionary.allProperties.map((prop) => ` --${prop.name}: ${prop.value};`).join('\n')}
}`
},
})
function convertToVariableIfNeeded(value) {
if (value.startsWith('{') && value.endsWith('}')) {
return `var(--${value.slice(1, -1).split('.').join('-')})`
}
return value
}
function mapPropertyToCSSOutput(key, inputValue) {
let value = convertCompositionValue(key, inputValue)
switch (key) {
case 'paddingTop':
return `padding-top: ${value};`
case 'paddingRight':
return `padding-right: ${value};`
case 'paddingBottom':
return `padding-bottom: ${value};`
case 'paddingLeft':
return `padding-left: ${value};`
case 'spacing':
return `padding: ${value};`
case 'itemSpacing':
return `gap: ${value};`
case 'horizontalPadding':
return `padding-left: ${value};\n padding-right: ${value};`
case 'verticalPadding':
return `padding-top: ${value};\n padding-bottom: ${value};`
case 'fontSize':
return `font-size: ${value};`
case 'lineHeight':
return `line-height: ${value};`
case 'fontWeight':
return `font-weight: ${value};`
case 'fontFamily':
return `font-family: ${value};`
case 'letterSpacing':
return `letter-spacing: ${value};`
case 'boxShadow':
return `box-shadow: ${value};`
case 'typography':
return `font: ${value};`
case 'fill':
return `background-color: ${value};`
case 'border':
return `border-color: ${value};`
case 'borderRadius':
return `border-radius: ${value};`
case 'borderRadiusTopLeft':
return `border-top-left-radius: ${value};`
case 'borderRadiusTopRight':
return `border-top-right-radius: ${value};`
case 'borderRadiusBottomRight':
return `border-bottom-right-radius: ${value};`
case 'borderRadiusBottomLeft':
return `border-bottom-left-radius: ${value};`
case 'borderWidth':
return `border-width: ${value};`
case 'borderWidthTop':
return `border-top-width: ${value};`
case 'borderWidthRight':
return `border-right-width: ${value};`
case 'borderWidthBottom':
return `border-bottom-width: ${value};`
case 'borderWidthLeft':
return `border-left-width: ${value};`
// Note: For border style we'd also need to set a border-style property to work correctly, which will be part of an upcoming release.
// For now I'd suggest to have that in your composition token JSON even though we can't use it in Figma just yet.
// Or keep this following line which hard-codes it to solid.
case 'borderStyle':
return `border-style: solid;`
}
}
function convertCompositionValue(key, value) {
if (value.startsWith('{') && value.endsWith('}')) {
console.log('converting comp value', value.slice(1, -1).split('.').join('-'))
return `var(--${value.slice(1, -1).split('.').join('-')})`
}
// If we're not using an alias we need to transform values.
// As composition tokens don't have a dedicated type defined for each value,
// we can use the name of the property to determine what transformation needs to take place.
// All used properties can be found here: https://github.com/six7/figma-tokens/blob/main/src/constants/Properties.ts
// Each of these can only be of a specific type, so this can be safely done.
switch (key) {
case 'fontSize':
case 'padding':
case 'paddingTop':
case 'paddingRight':
case 'paddingBottom':
case 'paddingLeft':
case 'itemSpacing':
case 'horizontalPadding':
case 'verticalPadding':
case 'width':
case 'height':
case 'sizing':
case 'borderRadius':
case 'borderRadiusTopLeft':
case 'borderRadiusTopRight':
case 'borderRadiusBottomRight':
case 'borderRadiusBottomLeft':
case 'borderWidth':
case 'borderWidthTop':
case 'borderWidthRight':
case 'borderWidthBottom':
case 'borderWidthLeft':
return transformDimension(value)
case 'letterSpacing':
return transformLetterSpacing(value)
case 'fontWeight':
return transformFontWeights(value)
case 'color':
case 'border':
return transformHEXRGBa(value)
case 'boxShadow':
return transformShadow(value)
case 'typography':
return transformTypography(value)
default:
return value
}
}
/**
* Format for css typography classes
* This generates theme-independent css classes so we're fine with just using css variables here
*/
StyleDictionary.registerFormat({
name: 'css/typographyClasses',
formatter: (dictionary, config) =>
dictionary.allProperties
.map(
(prop) => `
.${prop.name} {
font: var(--${prop.name});
letter-spacing: ${convertToVariableIfNeeded(prop.original.value.letterSpacing)};
text-transform: ${convertToVariableIfNeeded(prop.original.value.textCase)};
text-decoration: ${convertToVariableIfNeeded(prop.original.value.textDecoration)};
}`
)
.join('\n'),
})
/**
* Format for css compisition classes
* This generates theme-independent css classes so we're fine with just using css variables here
*/
StyleDictionary.registerFormat({
name: 'css/compositionClasses',
formatter: (dictionary, config) =>
dictionary.allProperties.map(
(prop) => `
.${prop.name} {
${Object.entries(prop.original.value)
.map((property) => {
const [key, value] = property
return mapPropertyToCSSOutput(key, value)
})
.join('\n ')}
}`
),
})
function getTypographyConfig() {
return {
source: ['tokens/01_base/**/*.+(json)', 'tokens/03_semantic/typography.json'],
platforms: {
css: {
transforms: [
'resolveMath',
'size/px',
'type/fontWeight',
'size/letterspacing',
'name/cti/kebab',
],
buildPath: `dist/css/`,
files: [
{
destination: `v2/base/typography-classes.css`,
format: 'css/typographyClasses',
selector: ':root',
filter: (token) => token.type === 'typography',
},
],
},
},
}
}
function getCompositionConfig() {
return {
source: [
'tokens/01_base/**/*.+(json)',
'tokens/02_themes/**/*.+(json)',
'tokens/03_semantic/**/*.+(json)',
'tokens/04_components/button.json',
],
platforms: {
css: {
transforms: [
'resolveMath',
'size/px',
'type/fontWeight',
'size/letterspacing',
'name/cti/kebab',
],
buildPath: `dist/css/`,
files: [
{
destination: `v2/base/compositions.css`,
format: 'css/compositionClasses',
selector: ':root',
filter: (token) => token.type === 'composition',
},
],
},
},
}
}
function getStyleDictionaryConfig(themePath, baseOnly = false) {
console.log('Building: ', themePath, `${baseOnly ? 'Base Only' : 'All sets'}`)
const fileName = themePath.split('/').pop().replace('.json', '')
const sourceFiles = baseOnly
? ['tokens/01_base/**/*.+(json)']
: [
'tokens/01_base/**/*.+(json)',
themePath,
...semanticFiles,
'tokens/04_component/**/*.+(json)',
]
return {
source: sourceFiles,
platforms: {
css: {
transforms: [
'resolveMath',
'size/px',
'size/letterspacing',
'type/fontWeight',
'color/hexrgba',
'typography/shorthand',
'shadow/shorthand',
'name/cti/kebab',
],
buildPath: `dist/css/`,
files: [
{
destination: baseOnly ? `v2/base/${fileName}.css` : `v2/themes/${fileName}.css`,
format: 'css/variables',
selector: baseOnly ? ':root' : `.${fileName}-theme`,
filter: (token) =>
[themePath, ...semanticFiles, ...componentFiles].includes(token.filePath),
},
],
},
},
}
}
themeFiles.map(function (theme) {
const SD = StyleDictionary.extend(getStyleDictionaryConfig(theme))
SD.buildAllPlatforms()
})
baseFiles.map(function (file) {
const SD = StyleDictionary.extend(getStyleDictionaryConfig(file, true))
SD.buildAllPlatforms()
})
let typographyBuild = StyleDictionary.extend(getTypographyConfig())
typographyBuild.buildAllPlatforms()
const compositionBuild = StyleDictionary.extend(getCompositionConfig())
compositionBuild.buildAllPlatforms()
console.log('\n==============================================')
console.log('\nBuild completed!')
+153
View File
@@ -0,0 +1,153 @@
/* eslint-disable no-console */
const StyleDictionaryPackage = require('style-dictionary')
const global = require('./styles/tokens/global.json')
const typography = require('./styles/tokens/typography.json')
const light = require('./styles/tokens/light.json')
const dark = require('./styles/tokens/dark.json')
const supportedTokenTypeList = ['color', 'typography']
const formatValue = (tokenType, value) => {
let formattedValue
switch (tokenType) {
case 'color':
default:
formattedValue = value
}
return formattedValue
}
/**
* Custom format that handle reference in css variables
*/
StyleDictionaryPackage.registerFormat({
name: 'css/variables',
formatter({ dictionary }) {
return `${this.selectorName} {
${dictionary.allProperties
.map((token) => {
const value = formatValue(token.type, token.value)
if (dictionary.usesReference(token.original.value)) {
const reference = dictionary.getReferences(token.original.value)
const referenceName = reference[0].name
return ` --${token.name}: var(--${referenceName}, ${value});`
}
return ` --${token.name}: ${value};`
})
.join('\n')}
}`
},
})
/**
* Custom format that generate tailwind color config based on css variables
*/
StyleDictionaryPackage.registerFormat({
name: 'tw/css-variables',
formatter({ dictionary }) {
return (
'module.exports = ' +
`{\n${dictionary.allProperties
.map((token) => {
const value = formatValue(token.type, token.value)
return ` "UI-${token.path.slice(1).join('-')}": "var(--${token.name}, ${value});"`
})
.join(',\n')}\n}`
)
},
})
/**
* Returns the files configuration
* for generating seperated tailwind files.
*/
function getConfigTailwindFilesByType(typeList) {
console.log('typeList', typeList)
return typeList.map((typeName) => {
return {
destination: `tw-extend/${typeName}.js`,
format: 'tw/css-variables',
filter: {
type: typeName,
},
}
})
}
// HAVE THE STYLE DICTIONARY CONFIG DYNAMICALLY GENERATED
function getStyleDictionaryConfig(tokensConfig = {}) {
const { brand, buildTailwindFiles, tokens, selectorName } = tokensConfig
let configTailwindFilesByType = []
if (buildTailwindFiles) {
configTailwindFilesByType = getConfigTailwindFilesByType(supportedTokenTypeList)
}
return {
tokens,
platforms: {
web: {
transformGroup: 'web',
prefix: 'ui',
buildPath: './styles/',
files: [
{
destination: `${brand}-variables.css`,
format: 'css/variables',
selectorName,
},
...configTailwindFilesByType,
],
},
},
}
}
console.log('Build started...')
const configs = [
// PROCESS THE DESIGN TOKENS FOR THE DIFFEREN BRANDS AND PLATFORMS
{
brand: 'global',
buildTailwindFiles: false,
selectorName: ':root',
tokens: global,
},
{
brand: 'typography',
buildTailwindFiles: true,
selectorName: ':root',
tokens: typography,
},
{
brand: 'dark',
buildTailwindFiles: true,
// selectorName: '[data-theme="dark"]',
selectorName: '.dark',
tokens: dark,
},
{
brand: 'light',
buildTailwindFiles: false,
// selectorName: '[data-theme="light"]',
selectorName: ':root',
tokens: light,
},
]
configs.map((config) => {
console.log('\n==============================================')
console.log(`\nProcessing: [Web] [${config.brand}]`)
const StyleDictionary = StyleDictionaryPackage.extend(getStyleDictionaryConfig(config))
StyleDictionary.buildPlatform('web')
console.log('\nEnd processing')
})
console.log('\n==============================================')
console.log('\nBuild completed!')
+461 -121
View File
@@ -1,153 +1,493 @@
/* eslint-disable no-console */
const StyleDictionaryPackage = require('style-dictionary')
const global = require('./styles/tokens/global.json')
const typography = require('./styles/tokens/typography.json')
const light = require('./styles/tokens/light.json')
const dark = require('./styles/tokens/dark.json')
const glob = require('glob')
const StyleDictionary = require('style-dictionary')
const baseFiles = glob.sync(`styles/tokens/01_base/**/*.json`)
const themeFiles = glob.sync(`styles/tokens/02_themes/**/*.json`)
const semanticFiles = glob.sync(`styles/tokens/03_semantic/**/*.json`)
const componentFiles = glob.sync('styles/tokens/04_component/**/*.json')
const { Parser } = require('expr-eval')
const { parseToRgba } = require('color2k')
const fs = require('fs')
const supportedTokenTypeList = ['color', 'typography']
const basePath = 'styles-v2/'
const formatValue = (tokenType, value) => {
let formattedValue
switch (tokenType) {
case 'color':
default:
formattedValue = value
}
return formattedValue
console.log('Build started...')
console.log('\n==============================================')
const fontWeightMap = {
thin: 100,
extralight: 200,
ultralight: 200,
extraleicht: 200,
light: 300,
leicht: 300,
normal: 400,
regular: 400,
buch: 400,
medium: 500,
kraeftig: 500,
kräftig: 500,
semibold: 600,
demibold: 600,
halbfett: 600,
bold: 700,
dreiviertelfett: 700,
extrabold: 800,
ultabold: 800,
fett: 800,
black: 900,
heavy: 900,
super: 900,
extrafett: 900,
}
/**
* Custom format that handle reference in css variables
* Helper: Transforms math like Figma Tokens
*/
StyleDictionaryPackage.registerFormat({
const parser = new Parser()
function checkAndEvaluateMath(expr) {
try {
parser.evaluate(expr)
return +parser.evaluate(expr).toFixed(3)
} catch (ex) {
return expr
}
}
/**
* Helper: Transforms dimensions to px
*/
function transformDimension(value) {
if (value.endsWith('px')) {
return value
}
return value + 'px'
}
/**
* Helper: Transforms letter spacing % to em
*/
function transformLetterSpacing(value) {
if (value.endsWith('%')) {
const percentValue = value.slice(0, -1)
return `${percentValue / 100}em`
}
return value
}
/**
* Helper: Transforms letter spacing % to em
*/
function transformFontWeights(value) {
const mapped = fontWeightMap[value.toLowerCase()]
return `${mapped}`
}
/**
* Helper: Transforms hex rgba colors used in figma tokens: rgba(#ffffff, 0.5) =? rgba(255, 255, 255, 0.5). This is kind of like an alpha() function.
*/
function transformHEXRGBa(value) {
if (value.startsWith('rgba(#')) {
const [hex, alpha] = value.replace(')', '').split('rgba(').pop().split(', ')
const [r, g, b] = parseToRgba(hex)
return `rgba(${r}, ${g}, ${b}, ${alpha})`
} else {
return value
}
}
/**
* Helper: Transforms boxShadow object to shadow shorthand
* This currently works fine if every value uses an alias, but if any one of these use a raw value, it will not be transformed.
*/
function transformShadow(shadow) {
const { x, y, blur, spread, color } = shadow
return `${x} ${y} ${blur} ${spread} ${color}`
}
/**
* Helper: Transforms typography object to typography shorthand
* This currently works fine if every value uses an alias, but if any one of these use a raw value, it will not be transformed.
* If you'd like to output all typography values, you'd rather need to return the typography properties itself
*/
function transformTypography(value) {
const { fontWeight, fontSize, lineHeight, fontFamily } = value
return `${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`
}
/**
* Transform typography shorthands for css variables
*/
StyleDictionary.registerTransform({
name: 'typography/shorthand',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'typography',
transformer: (token) => transformTypography(token.original.value),
})
/**
* Transform shadow shorthands for css variables
*/
StyleDictionary.registerTransform({
name: 'shadow/shorthand',
type: 'value',
transitive: true,
matcher: (token) => ['boxShadow'].includes(token.type),
transformer: (token) => {
return Array.isArray(token.original.value)
? token.original.value.map((single) => transformShadow(single)).join(', ')
: transformShadow(token.original.value)
},
})
/**
* Transform fontSizes to px
*/
StyleDictionary.registerTransform({
name: 'size/px',
type: 'value',
transitive: true,
matcher: (token) => ['fontSizes', 'dimension', 'borderRadius', 'spacing'].includes(token.type),
transformer: (token) => transformDimension(token.value),
})
/**
* Transform letterSpacing to em
*/
StyleDictionary.registerTransform({
name: 'size/letterspacing',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'letterSpacing',
transformer: (token) => transformLetterSpacing(token.value),
})
/**
* Transform fontWeights to numerical
*/
StyleDictionary.registerTransform({
name: 'type/fontWeight',
type: 'value',
transitive: true,
matcher: (token) => token.type === 'fontWeights',
transformer: (token) => transformFontWeights(token.value),
})
/**
* Transform rgba colors to usable rgba
*/
StyleDictionary.registerTransform({
name: 'color/hexrgba',
type: 'value',
transitive: true,
matcher: (token) => typeof token.value === 'string' && token.value.startsWith('rgba(#'),
transformer: (token) => transformHEXRGBa(token.value),
})
/**
* Transform to resolve math across all tokens
*/
StyleDictionary.registerTransform({
name: 'resolveMath',
type: 'value',
transitive: true,
matcher: (token) => token,
// Putting this in strings seems to be required
transformer: (token) => `${checkAndEvaluateMath(token.value)}`,
})
/**
* Format for css variables
*/
StyleDictionary.registerFormat({
name: 'css/variables',
formatter({ dictionary }) {
return `${this.selectorName} {
${dictionary.allProperties
.map((token) => {
const value = formatValue(token.type, token.value)
if (dictionary.usesReference(token.original.value)) {
const reference = dictionary.getReferences(token.original.value)
const referenceName = reference[0].name
return ` --${token.name}: var(--${referenceName}, ${value});`
}
return ` --${token.name}: ${value};`
})
.join('\n')}
}`
formatter: function (dictionary, config) {
return `${this.selector} {
${dictionary.allProperties.map((prop) => ` --${prop.name}: ${prop.value};`).join('\n')}
}`
},
})
/**
* Custom format that generate tailwind color config based on css variables
*/
StyleDictionaryPackage.registerFormat({
name: 'tw/css-variables',
formatter({ dictionary }) {
return (
'module.exports = ' +
`{\n${dictionary.allProperties
.map((token) => {
const value = formatValue(token.type, token.value)
return ` "UI-${token.path.slice(1).join('-')}": "var(--${token.name}, ${value});"`
})
.join(',\n')}\n}`
)
},
})
/**
* Returns the files configuration
* for generating seperated tailwind files.
*/
function getConfigTailwindFilesByType(typeList) {
console.log('typeList', typeList)
return typeList.map((typeName) => {
return {
destination: `tw-extend/${typeName}.js`,
format: 'tw/css-variables',
filter: {
type: typeName,
},
}
})
function convertToVariableIfNeeded(value) {
if (value.startsWith('{') && value.endsWith('}')) {
return `var(--${value.slice(1, -1).split('.').join('-')})`
}
return value
}
// HAVE THE STYLE DICTIONARY CONFIG DYNAMICALLY GENERATED
function getStyleDictionaryConfig(tokensConfig = {}) {
const { brand, buildTailwindFiles, tokens, selectorName } = tokensConfig
let configTailwindFilesByType = []
if (buildTailwindFiles) {
configTailwindFilesByType = getConfigTailwindFilesByType(supportedTokenTypeList)
function mapPropertyToCSSOutput(key, inputValue) {
let value = convertCompositionValue(key, inputValue)
switch (key) {
case 'paddingTop':
return `padding-top: ${value};`
case 'paddingRight':
return `padding-right: ${value};`
case 'paddingBottom':
return `padding-bottom: ${value};`
case 'paddingLeft':
return `padding-left: ${value};`
case 'spacing':
return `padding: ${value};`
case 'itemSpacing':
return `gap: ${value};`
case 'horizontalPadding':
return `padding-left: ${value};\n padding-right: ${value};`
case 'verticalPadding':
return `padding-top: ${value};\n padding-bottom: ${value};`
case 'fontSize':
return `font-size: ${value};`
case 'lineHeight':
return `line-height: ${value};`
case 'fontWeight':
return `font-weight: ${value};`
case 'fontFamily':
return `font-family: ${value};`
case 'letterSpacing':
return `letter-spacing: ${value};`
case 'boxShadow':
return `box-shadow: ${value};`
case 'typography':
return `font: ${value};`
case 'fill':
return `background-color: ${value};`
case 'border':
return `border-color: ${value};`
case 'borderRadius':
return `border-radius: ${value};`
case 'borderRadiusTopLeft':
return `border-top-left-radius: ${value};`
case 'borderRadiusTopRight':
return `border-top-right-radius: ${value};`
case 'borderRadiusBottomRight':
return `border-bottom-right-radius: ${value};`
case 'borderRadiusBottomLeft':
return `border-bottom-left-radius: ${value};`
case 'borderWidth':
return `border-width: ${value};`
case 'borderWidthTop':
return `border-top-width: ${value};`
case 'borderWidthRight':
return `border-right-width: ${value};`
case 'borderWidthBottom':
return `border-bottom-width: ${value};`
case 'borderWidthLeft':
return `border-left-width: ${value};`
// Note: For border style we'd also need to set a border-style property to work correctly, which will be part of an upcoming release.
// For now I'd suggest to have that in your composition token JSON even though we can't use it in Figma just yet.
// Or keep this following line which hard-codes it to solid.
case 'borderStyle':
return `border-style: solid;`
}
}
function convertCompositionValue(key, value) {
if (value.startsWith('{') && value.endsWith('}')) {
console.log('converting comp value', value.slice(1, -1).split('.').join('-'))
return `var(--${value.slice(1, -1).split('.').join('-')})`
}
// If we're not using an alias we need to transform values.
// As composition tokens don't have a dedicated type defined for each value,
// we can use the name of the property to determine what transformation needs to take place.
// All used properties can be found here: https://github.com/six7/figma-tokens/blob/main/src/constants/Properties.ts
// Each of these can only be of a specific type, so this can be safely done.
switch (key) {
case 'fontSize':
case 'padding':
case 'paddingTop':
case 'paddingRight':
case 'paddingBottom':
case 'paddingLeft':
case 'itemSpacing':
case 'horizontalPadding':
case 'verticalPadding':
case 'width':
case 'height':
case 'sizing':
case 'borderRadius':
case 'borderRadiusTopLeft':
case 'borderRadiusTopRight':
case 'borderRadiusBottomRight':
case 'borderRadiusBottomLeft':
case 'borderWidth':
case 'borderWidthTop':
case 'borderWidthRight':
case 'borderWidthBottom':
case 'borderWidthLeft':
return transformDimension(value)
case 'letterSpacing':
return transformLetterSpacing(value)
case 'fontWeight':
return transformFontWeights(value)
case 'color':
case 'border':
return transformHEXRGBa(value)
case 'boxShadow':
return transformShadow(value)
case 'typography':
return transformTypography(value)
default:
return value
}
}
/**
* Format for css typography classes
* This generates theme-independent css classes so we're fine with just using css variables here
*/
StyleDictionary.registerFormat({
name: 'css/typographyClasses',
formatter: (dictionary, config) =>
dictionary.allProperties
.map(
(prop) => `
.${prop.name} {
font: var(--${prop.name});
letter-spacing: ${convertToVariableIfNeeded(prop.original.value.letterSpacing)};
text-transform: ${convertToVariableIfNeeded(prop.original.value.textCase)};
text-decoration: ${convertToVariableIfNeeded(prop.original.value.textDecoration)};
}`
)
.join('\n'),
})
/**
* Format for css compisition classes
* This generates theme-independent css classes so we're fine with just using css variables here
*/
StyleDictionary.registerFormat({
name: 'css/compositionClasses',
formatter: (dictionary, config) =>
dictionary.allProperties.map(
(prop) => `
.${prop.name} {
${Object.entries(prop.original.value)
.map((property) => {
const [key, value] = property
return mapPropertyToCSSOutput(key, value)
})
.join('\n ')}
}`
),
})
function getTypographyConfig() {
console.log('Building: typography')
return {
tokens,
source: ['tokens/01_base/**/*.+(json)', 'tokens/03_semantic/typography.json'],
platforms: {
web: {
transformGroup: 'web',
prefix: 'ui',
buildPath: './styles/',
css: {
transforms: [
'resolveMath',
'size/px',
'type/fontWeight',
'size/letterspacing',
'name/cti/kebab',
],
buildPath: basePath,
files: [
{
destination: `${brand}-variables.css`,
format: 'css/variables',
selectorName,
destination: `base/typography-classes.css`,
format: 'css/typographyClasses',
selector: ':root',
filter: (token) => token.type === 'typography',
},
...configTailwindFilesByType,
],
},
},
}
}
console.log('Build started...')
function getCompositionConfig() {
return {
source: [
'tokens/01_base/**/*.+(json)',
'tokens/02_themes/**/*.+(json)',
'tokens/03_semantic/**/*.+(json)',
'tokens/04_components/button.json',
],
platforms: {
css: {
transforms: [
'resolveMath',
'size/px',
'type/fontWeight',
'size/letterspacing',
'name/cti/kebab',
],
buildPath: basePath,
files: [
{
destination: `base/compositions.css`,
format: 'css/compositionClasses',
selector: ':root',
filter: (token) => token.type === 'composition',
},
],
},
},
}
}
const configs = [
// PROCESS THE DESIGN TOKENS FOR THE DIFFEREN BRANDS AND PLATFORMS
{
brand: 'global',
buildTailwindFiles: false,
selectorName: ':root',
tokens: global,
},
{
brand: 'typography',
buildTailwindFiles: true,
selectorName: ':root',
tokens: typography,
},
{
brand: 'dark',
buildTailwindFiles: true,
// selectorName: '[data-theme="dark"]',
selectorName: '.dark',
tokens: dark,
},
{
brand: 'light',
buildTailwindFiles: false,
// selectorName: '[data-theme="light"]',
selectorName: ':root',
tokens: light,
},
]
function getStyleDictionaryConfig(themePath, baseOnly = false) {
console.log('Building: ', themePath, `${baseOnly ? 'Base Only' : 'All sets'}`)
const fileName = themePath.split('/').pop().replace('.json', '')
const sourceFiles = baseOnly
? ['tokens/01_base/**/*.+(json)']
: [
'tokens/01_base/**/*.+(json)',
themePath,
...semanticFiles,
'tokens/04_component/**/*.+(json)',
]
configs.map((config) => {
console.log('\n==============================================')
console.log(`\nProcessing: [Web] [${config.brand}]`)
return {
source: sourceFiles,
platforms: {
css: {
transforms: [
'resolveMath',
'size/px',
'size/letterspacing',
'type/fontWeight',
'color/hexrgba',
'typography/shorthand',
'shadow/shorthand',
'name/cti/kebab',
],
buildPath: basePath,
files: [
{
destination: baseOnly ? `base/${fileName}.css` : `themes/${fileName}.css`,
format: 'css/variables',
selector: baseOnly ? ':root' : `.${fileName}-theme`,
filter: (token) =>
[themePath, ...semanticFiles, ...componentFiles].includes(token.filePath),
},
],
},
},
}
}
const StyleDictionary = StyleDictionaryPackage.extend(getStyleDictionaryConfig(config))
StyleDictionary.buildPlatform('web')
console.log('\nEnd processing')
baseFiles.map(function (file) {
const SD = StyleDictionary.extend(getStyleDictionaryConfig(file, true))
SD.buildAllPlatforms()
})
themeFiles.map(function (theme) {
const SD = StyleDictionary.extend(getStyleDictionaryConfig(theme))
SD.buildAllPlatforms()
})
let typographyBuild = StyleDictionary.extend(getTypographyConfig())
typographyBuild.buildAllPlatforms()
const compositionBuild = StyleDictionary.extend(getCompositionConfig())
compositionBuild.buildAllPlatforms()
console.log('\n==============================================')
console.log('\nBuild completed!')
+117
View File
@@ -0,0 +1,117 @@
.dark-theme {
--variables-form-input-error-bg: #1f1315;
--variables-form-input-error-border: #822025;
--variables-form-input-bg: #ffffff08;
--variables-form-input-border: #3e3e3e;
--variables-form-input-disabled-bg: #ffffff14;
--variables-form-input-icon: #8f8f8f;
--variables-form-label: #ededed;
--variables-form-label-secondary: #707070;
--variables-text-body: #ededed;
--variables-text-secondary: #a0a0a0;
--variables-text-light: #707070;
--variables-text-link: #3ecf8e;
--variables-text-gradient: linear-gradient(90deg, #fcfcfc 0%, #fcfcfc80 100%);
--variables-text-green-gradient: linear-gradient(45deg, #34B97D 0%, #3ECF8E 100%);
--variables-panel-bg: #232323;
--variables-panel-border: #282828;
--variables-panel-bg-alt: #282828;
--variables-panel-border-alt: #2e2e2e;
--variables-panel-bg-accent: #262626;
--variables-panel-divider: linear-gradient(90deg, #16161680 0%, #505050 100%);
--variables-panel-warning-bg: #ffb224;
--variables-panel-warning-text: #271700;
--variables-panel-warning-text-secondary: #824e00;
--variables-panel-danger-bg: #e5484d;
--variables-panel-danger-text: #FFFCFC;
--variables-panel-danger-text-secondary: #f9c6c6;
--variables-background-primary: #1c1c1c;
--variables-background-border: #282828;
--variables-background-alt: #161616;
--variables-button-danger-bg: #e5484d;
--variables-button-danger-border: #822025;
--variables-button-danger-text: #ededed;
--variables-button-warning-bg: #3f2200;
--variables-button-warning-border: #693f05;
--variables-button-warning-text: #ffb224;
--variables-button-default-bg: #2e2e2e;
--variables-button-default-border: #3e3e3e;
--variables-button-default-text: #ededed;
--variables-button-outline-border: #343434;
--variables-datatable-input-default: #ededed;
--variables-datatable-header-label: #a0a0a0;
--variables-datatable-header-bg: #282828;
--variables-datatable-header-icon: #707070;
--variables-datatable-row-bg: #232323;
--variables-datatable-separator: #2e2e2e;
--variables-illustration-background: #232323;
--variables-illustration-background-lighter: #343434;
--variables-illustration-background-lighter-low-opacity: #343434;
--variables-illustration-border: #3e3e3e;
--variables-illustration-text: #ecedee;
--variables-illustration-text-gray: #a0a0a0;
--variables-illustration-dialog-box-light: #282828;
--variables-illustration-dialog-box-2: #282828;
--variables-illustration-dialog-box-1: #2e2e2e;
--variables-illustration-gradient-line: linear-gradient(90deg, #232323 0%, #ecedee 100%);
--variables-icon-background: #232323;
--variables-icon-outline: #707070;
--variables-icon-fill-1: #1c1c1c;
--variables-icon-fill-2: #2e2e2e;
--variables-icon-outline-green: #4cc38a;
--variables-icon-fill-1-green: #133929;
--variables-icon-fill-2-green: #1b543a;
--variables-icon-negative-icons: linear-gradient(45deg, #ededed80 0%, #ffffff 100%);
--variables-code-highlight1: #98C1FE;
--variables-code-highlight2: #F2AFE3;
--variables-code-highlight3: #3ecf8e;
--variables-code-highlight4: #D4D4D4;
--variables-charts-primary: #cbf5ff;
--variables-charts-warning: #ffa600db;
--variables-charts-danger: #e5484d;
--variables-charts-multi-1: #7ff4f0;
--variables-charts-multi-2: #cb77fd;
--variables-badge-text: #4cc38a;
--variables-badge-background: #113123;
--variables-badge-secondary-background: #2e2e2e;
--variables-badge-secondary-text: #707070;
--variables-card-alt-background: #121212;
--variables-card-border: linear-gradient(30deg, #2e2e2e 0%, #232323 100%);
--variables-card-border-active: linear-gradient(30deg, #3e3e3e 0%, #232323 100%);
--variables-card-background-active: #232323;
--variables-card-text: linear-gradient(45deg, #ffffff 0%, #CCEBD7 100%);
--variables-card-pill-label: linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%);
--variables-card-pill-label-border: linear-gradient(90deg, #3432321a 0%, #ffffff00 100%);
--variables-card-lw6-illustration-dark-fill: linear-gradient(60deg, #121212 0%, #232323 100%);
--variables-card-lw6-illustration-border-highlight: linear-gradient(45deg, #232323 50%, #3fcfb5 100%);
--variables-card-lw6-illustration-teal-fill: linear-gradient(45deg, #12121200 0%, #08b8b24d 100%);
--variables-card-lw6-illustration-accent-color: #4DA08B;
--164430: #164430;
--button-default-shadow: 0 -1 0 1 #343434;
--button-primary-shadow: 0 -1 0 1 #62dba5;
--typography-h1-bold: Medium 48/48 Circular Std;
--typography-h1-regular: Book 48/48 Circular Std;
--typography-h2-bold: Medium 36/40 Circular Std;
--typography-h2-regular: Book 36/40 Circular Std;
--typography-h3-bold: Medium 30/36 Circular Std;
--typography-h3-regular: Book 30/36 Circular Std;
--typography-h4-bold: Medium 24/32 Circular Std;
--typography-h4-regular: Book 24/32 Circular Std;
--typography-h4-mono: Medium 24/32 Office Code Pro;
--typography-h5-bold: Medium 20/28 Circular Std;
--typography-h5-regular: Book 20/28 Circular Std;
--typography-body-base-normal: Book 16/24 Circular Std;
--typography-body-lg-normal: Book 18/28 Circular Std;
--typography-body-lg-mono: Medium 18/32 Office Code Pro;
--typography-body-xs-normal: Book 12/16 Circular Std;
--typography-body-xs-code-header: Medium 12/20 Office Code Pro;
--typography-body-sm-normal: Book 14/20 Circular Std;
--typography-body-sm-code-header: Regular 14/20 Office Code Pro;
--typography-body-sm-code-normal: Regular 14/20 Office Code Pro;
--typography-body-sm-bullet-points: Book 14/20 Circular Std;
--typography-button-xs: Book 12/16 Circular Std;
--typography-button-sm: Book 14/20 Circular Std;
--typography-form-label: Book 14/20 Circular Std;
--typography-form-label-secondary: Book 14/20 Circular Std;
--typography-table-header: Book 12/20 Circular Std;
}
+99
View File
@@ -0,0 +1,99 @@
.light-theme {
--variables-form-input-error-bg: #FFFCFC;
--variables-form-input-error-border: #f3aeaf;
--variables-form-input-bg: #fbfcfd;
--variables-form-input-border: #d7dbdf;
--variables-form-input-disabled-bg: #021c3714;
--variables-form-input-icon: #889096;
--variables-form-label: #11181c;
--variables-form-label-secondary: #889096;
--variables-text-body: #11181c;
--variables-text-secondary: #7e868c;
--variables-text-light: #889096;
--variables-text-link: #4cc38a;
--variables-text-gradient: linear-gradient(90deg, #161616 0%, #16161680 100%);
--variables-text-green-gradient: linear-gradient(45deg, #3cb179 0%, #62ffb3bd 100%);
--variables-panel-bg: #fbfcfd;
--variables-panel-border: #eceef0;
--variables-panel-bg-alt: #f8f8f8;
--variables-panel-border-alt: #dfe3e6;
--variables-panel-divider: linear-gradient(90deg, #ededed80 0%, #232323 100%);
--variables-panel-warning-bg: #ffb224;
--variables-panel-warning-text: #4e2009;
--variables-panel-warning-bg-alt: #ffecbc;
--variables-panel-danger-bg: #dc3d43;
--variables-panel-danger-bg-alt: #eb9091;
--variables-panel-danger-text: #FFFCFC;
--variables-background-primary: #f8f9fa;
--variables-background-border: #e6e8eb;
--variables-background-alt: #ffffff;
--variables-button-danger-bg: #e5484d;
--variables-button-danger-border: #822025;
--variables-button-danger-text: #11181c;
--variables-button-warning-bg: #3f2200;
--variables-button-warning-border: #693f05;
--variables-button-warning-text: #ffb224;
--variables-button-default-bg: #fbfcfd;
--variables-button-default-border: #e6e8eb;
--variables-button-default-text: #11181c;
--variables-button-outline-border: #313538;
--variables-datatable-input-default: #11181c;
--variables-datatable-header-label: #687076;
--variables-datatable-header-bg: #f1f3f5;
--variables-datatable-header-icon: #889096;
--variables-datatable-row-bg: #f1f3f5;
--variables-datatable-separator: #e6e8eb;
--variables-illustration-background: #f1f3f5;
--variables-illustration-background-lighter: #ffffff;
--variables-illustration-border: #eceef0;
--variables-illustration-text: #202425;
--variables-illustration-text-gray: #9ba1a6;
--variables-illustration-dialog-box-light: #d7dbdf;
--variables-illustration-dialog-box-2: #e6e8eb;
--variables-illustration-dialog-box-1: #eceef0;
--variables-icon-background: #fcfcfc;
--variables-icon-outline: #c7c7c7;
--variables-icon-fill-1: #e8e8e8;
--variables-icon-fill-2: #dbdbdb;
--variables-icon-background-green: #b4dfc4;
--variables-icon-outline-green: #299764;
--variables-icon-fill-1-green: #92ceac;
--variables-icon-fill-2-green: #92ceac;
--variables-icon-negative-icons: linear-gradient(45deg, #17171780 0%, #000000 100%);
--variables-badge-text: #4cc38a;
--variables-badge-background: #ddf3e4;
--variables-card-alt-background: #ffffff;
--variables-card-pill-label: linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%);
--variables-card-text: linear-gradient(45deg, #000000 0%, #82978D 100%);
--variables-card-lw6-illustration-dark-fill: linear-gradient(60deg, #ffffff1a 0%, #08b8b24d 100%);
--variables-card-lw6-illustration-border-highlight: linear-gradient(45deg, #4040401a 50%, #3fcfb5 100%);
--variables-card-lw6-illustration-teal-fill: linear-gradient(45deg, #ffffff80 0%, #08b8b24d 100%);
--variables-card-lw6-illustration-accent-color: #249C95;
--button-default-shadow: 0 -1 0 1 #313538;
--button-primary-shadow: 0 -1 0 1 #62dba5;
--typography-h1-bold: Medium 48/48 Circular Std;
--typography-h1-regular: Book 48/48 Circular Std;
--typography-h2-bold: Medium 36/40 Circular Std;
--typography-h2-regular: Book 36/40 Circular Std;
--typography-h3-bold: Medium 30/36 Circular Std;
--typography-h3-regular: Book 30/36 Circular Std;
--typography-h4-bold: Medium 24/32 Circular Std;
--typography-h4-regular: Book 24/32 Circular Std;
--typography-h4-mono: Medium 24/32 Office Code Pro;
--typography-h5-bold: Medium 20/28 Circular Std;
--typography-h5-regular: Book 20/28 Circular Std;
--typography-body-base-normal: Book 16/24 Circular Std;
--typography-body-lg-normal: Book 18/28 Circular Std;
--typography-body-lg-mono: Medium 18/32 Office Code Pro;
--typography-body-xs-normal: Book 12/16 Circular Std;
--typography-body-xs-code-header: Medium 12/20 Office Code Pro;
--typography-body-sm-normal: Book 14/20 Circular Std;
--typography-body-sm-code-header: Regular 14/20 Office Code Pro;
--typography-body-sm-code-normal: Regular 14/20 Office Code Pro;
--typography-body-sm-bullet-points: Book 14/20 Circular Std;
--typography-button-xs: Book 12/16 Circular Std;
--typography-button-sm: Book 14/20 Circular Std;
--typography-form-label: Book 14/20 Circular Std;
--typography-form-label-secondary: Book 14/20 Circular Std;
--typography-table-header: Book 12/20 Circular Std;
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,432 @@
{
"variables": {
"form": {
"input": {
"error": {
"bg": {
"value": "#1f1315",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
}
},
"bg": {
"value": "#ffffff08",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"disabled": {
"bg": {
"value": "#ffffff14",
"type": "color"
}
},
"icon": {
"value": "#8f8f8f",
"type": "color"
}
},
"label": {
"value": "#ededed",
"type": "color"
},
"labelSecondary": {
"value": "#707070",
"type": "color"
}
},
"text": {
"body": {
"value": "#ededed",
"type": "color"
},
"secondary": {
"value": "#a0a0a0",
"type": "color"
},
"light": {
"value": "#707070",
"type": "color"
},
"link": {
"value": "#3ecf8e",
"type": "color"
},
"gradient": {
"value": "linear-gradient(90deg, #fcfcfc 0%, #fcfcfc80 100%)",
"type": "color"
},
"green-gradient": {
"value": "linear-gradient(45deg, #34B97D 0%, #3ECF8E 100%)",
"type": "color"
}
},
"panel": {
"bg": {
"value": "#232323",
"type": "color"
},
"border": {
"value": "#282828",
"type": "color"
},
"bg-alt": {
"value": "#282828",
"type": "color"
},
"border-alt": {
"value": "#2e2e2e",
"type": "color"
},
"bg-accent": {
"value": "#262626",
"type": "color"
},
"divider": {
"value": "linear-gradient(90deg, #16161680 0%, #505050 100%)",
"type": "color"
},
"warning": {
"bg": {
"value": "#ffb224",
"type": "color"
},
"text": {
"value": "#271700",
"type": "color"
},
"text-secondary": {
"value": "#824e00",
"type": "color"
}
},
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"text": {
"value": "#FFFCFC",
"type": "color"
},
"text-secondary": {
"value": "#f9c6c6",
"type": "color"
}
}
},
"background": {
"primary": {
"value": "#1c1c1c",
"type": "color"
},
"border": {
"value": "#282828",
"type": "color"
},
"alt": {
"value": "#161616",
"type": "color"
}
},
"button": {
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
},
"text": {
"value": "#ededed",
"type": "color"
}
},
"warning": {
"bg": {
"value": "#3f2200",
"type": "color"
},
"border": {
"value": "#693f05",
"type": "color"
},
"text": {
"value": "#ffb224",
"type": "color"
}
},
"default": {
"bg": {
"value": "#2e2e2e",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"text": {
"value": "#ededed",
"type": "color"
}
},
"outline": {
"border": {
"value": "#343434",
"type": "color"
}
}
},
"datatable": {
"input": {
"default": {
"value": "#ededed",
"type": "color"
}
},
"header": {
"label": {
"value": "#a0a0a0",
"type": "color"
},
"bg": {
"value": "#282828",
"type": "color"
},
"icon": {
"value": "#707070",
"type": "color"
}
},
"row": {
"bg": {
"value": "#232323",
"type": "color"
}
},
"separator": {
"value": "#2e2e2e",
"type": "color"
}
},
"illustration": {
"background": {
"value": "#232323",
"type": "color"
},
"background-lighter": {
"value": "#343434",
"type": "color"
},
"background-lighter-low-opacity": {
"value": "#343434",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"text": {
"value": "#ecedee",
"type": "color"
},
"text-gray": {
"value": "#a0a0a0",
"type": "color"
},
"dialog-box-light": {
"value": "#282828",
"type": "color"
},
"dialog-box-2": {
"value": "#282828",
"type": "color"
},
"dialog-box-1": {
"value": "#2e2e2e",
"type": "color"
},
"gradientLine": {
"value": "linear-gradient(90deg, #232323 0%, #ecedee 100%)",
"type": "color"
}
},
"icon": {
"background": {
"value": "#232323",
"type": "color"
},
"outline": {
"value": "#707070",
"type": "color"
},
"fill-1": {
"value": "#1c1c1c",
"type": "color"
},
"fill-2": {
"value": "#2e2e2e",
"type": "color"
},
"outline-green": {
"value": "#4cc38a",
"type": "color"
},
"fill-1-green": {
"value": "#133929",
"type": "color"
},
"fill-2-green": {
"value": "#1b543a",
"type": "color"
},
"negative-icons": {
"value": "linear-gradient(45deg, #ededed80 0%, #ffffff 100%)",
"type": "color"
}
},
"code": {
"highlight1": {
"value": "#98C1FE",
"type": "color"
},
"highlight2": {
"value": "#F2AFE3",
"type": "color"
},
"highlight3": {
"value": "#3ecf8e",
"type": "color"
},
"highlight4": {
"value": "#D4D4D4",
"type": "color"
}
},
"charts": {
"primary": {
"value": "#cbf5ff",
"type": "color"
},
"warning": {
"value": "#ffa600db",
"type": "color"
},
"danger": {
"value": "#e5484d",
"type": "color"
},
"multi": {
"1": {
"value": "#7ff4f0",
"type": "color"
},
"2": {
"value": "#cb77fd",
"type": "color"
}
}
},
"badge": {
"text": {
"value": "#4cc38a",
"type": "color"
},
"background": {
"value": "#113123",
"type": "color"
},
"secondary-background": {
"value": "#2e2e2e",
"type": "color"
},
"secondary-text": {
"value": "#707070",
"type": "color"
}
},
"card": {
"alt-background": {
"value": "#121212",
"type": "color"
},
"border": {
"value": "linear-gradient(30deg, #2e2e2e 0%, #232323 100%)",
"type": "color"
},
"border-active": {
"value": "linear-gradient(30deg, #3e3e3e 0%, #232323 100%)",
"type": "color"
},
"background-active": {
"value": "#232323",
"type": "color"
},
"text": {
"value": "linear-gradient(45deg, #ffffff 0%, #CCEBD7 100%)",
"type": "color"
},
"pill-label": {
"value": "linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%)",
"type": "color"
},
"pill-label-border": {
"value": "linear-gradient(90deg, #3432321a 0%, #ffffff00 100%)",
"type": "color"
},
"lw6-illustration": {
"dark-fill": {
"value": "linear-gradient(60deg, #121212 0%, #232323 100%)",
"type": "color"
},
"border-highlight": {
"value": "linear-gradient(45deg, #232323 50%, #3fcfb5 100%)",
"type": "color"
},
"teal-fill": {
"value": "linear-gradient(45deg, #12121200 0%, #08b8b24d 100%)",
"type": "color"
},
"accent-color": {
"value": "#4DA08B",
"type": "color"
}
}
}
},
"#164430": {
"value": "#164430",
"type": "color"
},
"Button": {
"DefaultShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#343434",
"type": "innerShadow"
},
"type": "boxShadow"
},
"PrimaryShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#62dba5",
"type": "innerShadow"
},
"type": "boxShadow"
}
}
}
@@ -0,0 +1,354 @@
{
"variables": {
"form": {
"input": {
"error": {
"bg": {
"value": "#FFFCFC",
"type": "color"
},
"border": {
"value": "#f3aeaf",
"type": "color"
}
},
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#d7dbdf",
"type": "color"
},
"disabled": {
"bg": {
"value": "#021c3714",
"type": "color"
}
},
"icon": {
"value": "#889096",
"type": "color"
}
},
"label": {
"value": "#11181c",
"type": "color"
},
"labelSecondary": {
"value": "#889096",
"type": "color"
}
},
"text": {
"body": {
"value": "#11181c",
"type": "color"
},
"secondary": {
"value": "#7e868c",
"type": "color"
},
"light": {
"value": "#889096",
"type": "color"
},
"link": {
"value": "#4cc38a",
"type": "color"
},
"gradient": {
"value": "linear-gradient(90deg, #161616 0%, #16161680 100%)",
"type": "color"
},
"green-gradient": {
"value": "linear-gradient(45deg, #3cb179 0%, #62ffb3bd 100%)",
"type": "color"
}
},
"panel": {
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#eceef0",
"type": "color"
},
"bg-alt": {
"value": "#f8f8f8",
"type": "color"
},
"border-alt": {
"value": "#dfe3e6",
"type": "color"
},
"divider": {
"value": "linear-gradient(90deg, #ededed80 0%, #232323 100%)",
"type": "color"
},
"warning": {
"bg": {
"value": "#ffb224",
"type": "color"
},
"text": {
"value": "#4e2009",
"type": "color"
},
"bg-alt": {
"value": "#ffecbc",
"type": "color"
}
},
"danger": {
"bg": {
"value": "#dc3d43",
"type": "color"
},
"bg-alt": {
"value": "#eb9091",
"type": "color"
},
"text": {
"value": "#FFFCFC",
"type": "color"
}
}
},
"background": {
"primary": {
"value": "#f8f9fa",
"type": "color"
},
"border": {
"value": "#e6e8eb",
"type": "color"
},
"alt": {
"value": "#ffffff",
"type": "color"
}
},
"button": {
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
},
"text": {
"value": "#11181c",
"type": "color"
}
},
"warning": {
"bg": {
"value": "#3f2200",
"type": "color"
},
"border": {
"value": "#693f05",
"type": "color"
},
"text": {
"value": "#ffb224",
"type": "color"
}
},
"default": {
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#e6e8eb",
"type": "color"
},
"text": {
"value": "#11181c",
"type": "color"
}
},
"outline": {
"border": {
"value": "#313538",
"type": "color"
}
}
},
"datatable": {
"input": {
"default": {
"value": "#11181c",
"type": "color"
}
},
"header": {
"label": {
"value": "#687076",
"type": "color"
},
"bg": {
"value": "#f1f3f5",
"type": "color"
},
"icon": {
"value": "#889096",
"type": "color"
}
},
"row": {
"bg": {
"value": "#f1f3f5",
"type": "color"
}
},
"separator": {
"value": "#e6e8eb",
"type": "color"
}
},
"illustration": {
"background": {
"value": "#f1f3f5",
"type": "color"
},
"background-lighter": {
"value": "#ffffff",
"type": "color"
},
"border": {
"value": "#eceef0",
"type": "color"
},
"text": {
"value": "#202425",
"type": "color"
},
"text-gray": {
"value": "#9ba1a6",
"type": "color"
},
"dialog-box-light": {
"value": "#d7dbdf",
"type": "color"
},
"dialog-box-2": {
"value": "#e6e8eb",
"type": "color"
},
"dialog-box-1": {
"value": "#eceef0",
"type": "color"
}
},
"icon": {
"background": {
"value": "#fcfcfc",
"type": "color"
},
"outline": {
"value": "#c7c7c7",
"type": "color"
},
"fill-1": {
"value": "#e8e8e8",
"type": "color"
},
"fill-2": {
"value": "#dbdbdb",
"type": "color"
},
"background-green": {
"value": "#b4dfc4",
"type": "color"
},
"outline-green": {
"value": "#299764",
"type": "color"
},
"fill-1-green": {
"value": "#92ceac",
"type": "color"
},
"fill-2-green": {
"value": "#92ceac",
"type": "color"
},
"negative-icons": {
"value": "linear-gradient(45deg, #17171780 0%, #000000 100%)",
"type": "color"
}
},
"badge": {
"text": {
"value": "#4cc38a",
"type": "color"
},
"background": {
"value": "#ddf3e4",
"type": "color"
}
},
"card": {
"alt-background": {
"value": "#ffffff",
"type": "color"
},
"pill-label": {
"value": "linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%)",
"type": "color"
},
"text": {
"value": "linear-gradient(45deg, #000000 0%, #82978D 100%)",
"type": "color"
},
"lw6-illustration": {
"dark-fill": {
"value": "linear-gradient(60deg, #ffffff1a 0%, #08b8b24d 100%)",
"type": "color"
},
"border-highlight": {
"value": "linear-gradient(45deg, #4040401a 50%, #3fcfb5 100%)",
"type": "color"
},
"teal-fill": {
"value": "linear-gradient(45deg, #ffffff80 0%, #08b8b24d 100%)",
"type": "color"
},
"accent-color": {
"value": "#249C95",
"type": "color"
}
}
}
},
"Button": {
"DefaultShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#313538",
"type": "innerShadow"
},
"type": "boxShadow"
},
"PrimaryShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#62dba5",
"type": "innerShadow"
},
"type": "boxShadow"
}
}
}
@@ -0,0 +1,355 @@
{
"typography": {
"H1": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 48,
"fontSize": 48,
"letterSpacing": "-2%",
"paragraphSpacing": 32,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 48,
"fontSize": 48,
"letterSpacing": "-2%",
"paragraphSpacing": 32,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H2": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 40,
"fontSize": 36,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 40,
"fontSize": 36,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H3": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 36,
"fontSize": 30,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 36,
"fontSize": 30,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H4": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"mono": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"textCase": "uppercase",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%"
},
"type": "typography"
}
},
"H5": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 28,
"fontSize": 20,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 28,
"fontSize": 20,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"body": {
"base": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 24,
"fontSize": 16,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
},
"lg": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 28,
"fontSize": 18,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"mono": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"lineHeight": 32,
"fontSize": 18,
"letterSpacing": "8%",
"textCase": "uppercase"
},
"type": "typography"
}
},
"xs": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 16,
"fontSize": 12,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"code": {
"header": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"lineHeight": 20,
"fontSize": 12,
"letterSpacing": "10%",
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
}
},
"sm": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"code": {
"header": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Regular",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "10%",
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"normal": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Regular",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
},
"bullet-points": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 12,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
}
},
"button": {
"xs": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 16,
"fontSize": 12,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"sm": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"form": {
"label": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"label-secondary": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"table": {
"header": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 12,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
}
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,432 @@
{
"variables": {
"form": {
"input": {
"error": {
"bg": {
"value": "#1f1315",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
}
},
"bg": {
"value": "#ffffff08",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"disabled": {
"bg": {
"value": "#ffffff14",
"type": "color"
}
},
"icon": {
"value": "#8f8f8f",
"type": "color"
}
},
"label": {
"value": "#ededed",
"type": "color"
},
"labelSecondary": {
"value": "#707070",
"type": "color"
}
},
"text": {
"body": {
"value": "#ededed",
"type": "color"
},
"secondary": {
"value": "#a0a0a0",
"type": "color"
},
"light": {
"value": "#707070",
"type": "color"
},
"link": {
"value": "#3ecf8e",
"type": "color"
},
"gradient": {
"value": "linear-gradient(90deg, #fcfcfc 0%, #fcfcfc80 100%)",
"type": "color"
},
"green-gradient": {
"value": "linear-gradient(45deg, #34B97D 0%, #3ECF8E 100%)",
"type": "color"
}
},
"panel": {
"bg": {
"value": "#232323",
"type": "color"
},
"border": {
"value": "#282828",
"type": "color"
},
"bg-alt": {
"value": "#282828",
"type": "color"
},
"border-alt": {
"value": "#2e2e2e",
"type": "color"
},
"bg-accent": {
"value": "#262626",
"type": "color"
},
"divider": {
"value": "linear-gradient(90deg, #16161680 0%, #505050 100%)",
"type": "color"
},
"warning": {
"bg": {
"value": "#ffb224",
"type": "color"
},
"text": {
"value": "#271700",
"type": "color"
},
"text-secondary": {
"value": "#824e00",
"type": "color"
}
},
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"text": {
"value": "#FFFCFC",
"type": "color"
},
"text-secondary": {
"value": "#f9c6c6",
"type": "color"
}
}
},
"background": {
"primary": {
"value": "#1c1c1c",
"type": "color"
},
"border": {
"value": "#282828",
"type": "color"
},
"alt": {
"value": "#161616",
"type": "color"
}
},
"button": {
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
},
"text": {
"value": "#ededed",
"type": "color"
}
},
"warning": {
"bg": {
"value": "#3f2200",
"type": "color"
},
"border": {
"value": "#693f05",
"type": "color"
},
"text": {
"value": "#ffb224",
"type": "color"
}
},
"default": {
"bg": {
"value": "#2e2e2e",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"text": {
"value": "#ededed",
"type": "color"
}
},
"outline": {
"border": {
"value": "#343434",
"type": "color"
}
}
},
"datatable": {
"input": {
"default": {
"value": "#ededed",
"type": "color"
}
},
"header": {
"label": {
"value": "#a0a0a0",
"type": "color"
},
"bg": {
"value": "#282828",
"type": "color"
},
"icon": {
"value": "#707070",
"type": "color"
}
},
"row": {
"bg": {
"value": "#232323",
"type": "color"
}
},
"separator": {
"value": "#2e2e2e",
"type": "color"
}
},
"illustration": {
"background": {
"value": "#232323",
"type": "color"
},
"background-lighter": {
"value": "#343434",
"type": "color"
},
"background-lighter-low-opacity": {
"value": "#343434",
"type": "color"
},
"border": {
"value": "#3e3e3e",
"type": "color"
},
"text": {
"value": "#ecedee",
"type": "color"
},
"text-gray": {
"value": "#a0a0a0",
"type": "color"
},
"dialog-box-light": {
"value": "#282828",
"type": "color"
},
"dialog-box-2": {
"value": "#282828",
"type": "color"
},
"dialog-box-1": {
"value": "#2e2e2e",
"type": "color"
},
"gradientLine": {
"value": "linear-gradient(90deg, #232323 0%, #ecedee 100%)",
"type": "color"
}
},
"icon": {
"background": {
"value": "#232323",
"type": "color"
},
"outline": {
"value": "#707070",
"type": "color"
},
"fill-1": {
"value": "#1c1c1c",
"type": "color"
},
"fill-2": {
"value": "#2e2e2e",
"type": "color"
},
"outline-green": {
"value": "#4cc38a",
"type": "color"
},
"fill-1-green": {
"value": "#133929",
"type": "color"
},
"fill-2-green": {
"value": "#1b543a",
"type": "color"
},
"negative-icons": {
"value": "linear-gradient(45deg, #ededed80 0%, #ffffff 100%)",
"type": "color"
}
},
"code": {
"highlight1": {
"value": "#98C1FE",
"type": "color"
},
"highlight2": {
"value": "#F2AFE3",
"type": "color"
},
"highlight3": {
"value": "#3ecf8e",
"type": "color"
},
"highlight4": {
"value": "#D4D4D4",
"type": "color"
}
},
"charts": {
"primary": {
"value": "#cbf5ff",
"type": "color"
},
"warning": {
"value": "#ffa600db",
"type": "color"
},
"danger": {
"value": "#e5484d",
"type": "color"
},
"multi": {
"1": {
"value": "#7ff4f0",
"type": "color"
},
"2": {
"value": "#cb77fd",
"type": "color"
}
}
},
"badge": {
"text": {
"value": "#4cc38a",
"type": "color"
},
"background": {
"value": "#113123",
"type": "color"
},
"secondary-background": {
"value": "#2e2e2e",
"type": "color"
},
"secondary-text": {
"value": "#707070",
"type": "color"
}
},
"card": {
"alt-background": {
"value": "#121212",
"type": "color"
},
"border": {
"value": "linear-gradient(30deg, #2e2e2e 0%, #232323 100%)",
"type": "color"
},
"border-active": {
"value": "linear-gradient(30deg, #3e3e3e 0%, #232323 100%)",
"type": "color"
},
"background-active": {
"value": "#232323",
"type": "color"
},
"text": {
"value": "linear-gradient(45deg, #ffffff 0%, #CCEBD7 100%)",
"type": "color"
},
"pill-label": {
"value": "linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%)",
"type": "color"
},
"pill-label-border": {
"value": "linear-gradient(90deg, #3432321a 0%, #ffffff00 100%)",
"type": "color"
},
"lw6-illustration": {
"dark-fill": {
"value": "linear-gradient(60deg, #121212 0%, #232323 100%)",
"type": "color"
},
"border-highlight": {
"value": "linear-gradient(45deg, #232323 50%, #3fcfb5 100%)",
"type": "color"
},
"teal-fill": {
"value": "linear-gradient(45deg, #12121200 0%, #08b8b24d 100%)",
"type": "color"
},
"accent-color": {
"value": "#4DA08B",
"type": "color"
}
}
}
},
"#164430": {
"value": "#164430",
"type": "color"
},
"Button": {
"DefaultShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#343434",
"type": "innerShadow"
},
"type": "boxShadow"
},
"PrimaryShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#62dba5",
"type": "innerShadow"
},
"type": "boxShadow"
}
}
}
@@ -0,0 +1,354 @@
{
"variables": {
"form": {
"input": {
"error": {
"bg": {
"value": "#FFFCFC",
"type": "color"
},
"border": {
"value": "#f3aeaf",
"type": "color"
}
},
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#d7dbdf",
"type": "color"
},
"disabled": {
"bg": {
"value": "#021c3714",
"type": "color"
}
},
"icon": {
"value": "#889096",
"type": "color"
}
},
"label": {
"value": "#11181c",
"type": "color"
},
"labelSecondary": {
"value": "#889096",
"type": "color"
}
},
"text": {
"body": {
"value": "#11181c",
"type": "color"
},
"secondary": {
"value": "#7e868c",
"type": "color"
},
"light": {
"value": "#889096",
"type": "color"
},
"link": {
"value": "#4cc38a",
"type": "color"
},
"gradient": {
"value": "linear-gradient(90deg, #161616 0%, #16161680 100%)",
"type": "color"
},
"green-gradient": {
"value": "linear-gradient(45deg, #3cb179 0%, #62ffb3bd 100%)",
"type": "color"
}
},
"panel": {
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#eceef0",
"type": "color"
},
"bg-alt": {
"value": "#f8f8f8",
"type": "color"
},
"border-alt": {
"value": "#dfe3e6",
"type": "color"
},
"divider": {
"value": "linear-gradient(90deg, #ededed80 0%, #232323 100%)",
"type": "color"
},
"warning": {
"bg": {
"value": "#ffb224",
"type": "color"
},
"text": {
"value": "#4e2009",
"type": "color"
},
"bg-alt": {
"value": "#ffecbc",
"type": "color"
}
},
"danger": {
"bg": {
"value": "#dc3d43",
"type": "color"
},
"bg-alt": {
"value": "#eb9091",
"type": "color"
},
"text": {
"value": "#FFFCFC",
"type": "color"
}
}
},
"background": {
"primary": {
"value": "#f8f9fa",
"type": "color"
},
"border": {
"value": "#e6e8eb",
"type": "color"
},
"alt": {
"value": "#ffffff",
"type": "color"
}
},
"button": {
"danger": {
"bg": {
"value": "#e5484d",
"type": "color"
},
"border": {
"value": "#822025",
"type": "color"
},
"text": {
"value": "#11181c",
"type": "color"
}
},
"warning": {
"bg": {
"value": "#3f2200",
"type": "color"
},
"border": {
"value": "#693f05",
"type": "color"
},
"text": {
"value": "#ffb224",
"type": "color"
}
},
"default": {
"bg": {
"value": "#fbfcfd",
"type": "color"
},
"border": {
"value": "#e6e8eb",
"type": "color"
},
"text": {
"value": "#11181c",
"type": "color"
}
},
"outline": {
"border": {
"value": "#313538",
"type": "color"
}
}
},
"datatable": {
"input": {
"default": {
"value": "#11181c",
"type": "color"
}
},
"header": {
"label": {
"value": "#687076",
"type": "color"
},
"bg": {
"value": "#f1f3f5",
"type": "color"
},
"icon": {
"value": "#889096",
"type": "color"
}
},
"row": {
"bg": {
"value": "#f1f3f5",
"type": "color"
}
},
"separator": {
"value": "#e6e8eb",
"type": "color"
}
},
"illustration": {
"background": {
"value": "#f1f3f5",
"type": "color"
},
"background-lighter": {
"value": "#ffffff",
"type": "color"
},
"border": {
"value": "#eceef0",
"type": "color"
},
"text": {
"value": "#202425",
"type": "color"
},
"text-gray": {
"value": "#9ba1a6",
"type": "color"
},
"dialog-box-light": {
"value": "#d7dbdf",
"type": "color"
},
"dialog-box-2": {
"value": "#e6e8eb",
"type": "color"
},
"dialog-box-1": {
"value": "#eceef0",
"type": "color"
}
},
"icon": {
"background": {
"value": "#fcfcfc",
"type": "color"
},
"outline": {
"value": "#c7c7c7",
"type": "color"
},
"fill-1": {
"value": "#e8e8e8",
"type": "color"
},
"fill-2": {
"value": "#dbdbdb",
"type": "color"
},
"background-green": {
"value": "#b4dfc4",
"type": "color"
},
"outline-green": {
"value": "#299764",
"type": "color"
},
"fill-1-green": {
"value": "#92ceac",
"type": "color"
},
"fill-2-green": {
"value": "#92ceac",
"type": "color"
},
"negative-icons": {
"value": "linear-gradient(45deg, #17171780 0%, #000000 100%)",
"type": "color"
}
},
"badge": {
"text": {
"value": "#4cc38a",
"type": "color"
},
"background": {
"value": "#ddf3e4",
"type": "color"
}
},
"card": {
"alt-background": {
"value": "#ffffff",
"type": "color"
},
"pill-label": {
"value": "linear-gradient(90deg, #3432321a 0%, #d0d0d01a 100%)",
"type": "color"
},
"text": {
"value": "linear-gradient(45deg, #000000 0%, #82978D 100%)",
"type": "color"
},
"lw6-illustration": {
"dark-fill": {
"value": "linear-gradient(60deg, #ffffff1a 0%, #08b8b24d 100%)",
"type": "color"
},
"border-highlight": {
"value": "linear-gradient(45deg, #4040401a 50%, #3fcfb5 100%)",
"type": "color"
},
"teal-fill": {
"value": "linear-gradient(45deg, #ffffff80 0%, #08b8b24d 100%)",
"type": "color"
},
"accent-color": {
"value": "#249C95",
"type": "color"
}
}
}
},
"Button": {
"DefaultShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#313538",
"type": "innerShadow"
},
"type": "boxShadow"
},
"PrimaryShadow": {
"value": {
"x": 0,
"y": -1,
"blur": 0,
"spread": 1,
"color": "#62dba5",
"type": "innerShadow"
},
"type": "boxShadow"
}
}
}
@@ -0,0 +1,355 @@
{
"typography": {
"H1": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 48,
"fontSize": 48,
"letterSpacing": "-2%",
"paragraphSpacing": 32,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 48,
"fontSize": 48,
"letterSpacing": "-2%",
"paragraphSpacing": 32,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H2": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 40,
"fontSize": 36,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 40,
"fontSize": 36,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H3": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 36,
"fontSize": 30,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 36,
"fontSize": 30,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"H4": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"mono": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"textCase": "uppercase",
"lineHeight": 32,
"fontSize": 24,
"letterSpacing": "-2%"
},
"type": "typography"
}
},
"H5": {
"Bold": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Medium",
"lineHeight": 28,
"fontSize": 20,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"Regular": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 28,
"fontSize": 20,
"letterSpacing": "-2%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"body": {
"base": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 24,
"fontSize": 16,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
},
"lg": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 28,
"fontSize": 18,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"mono": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"lineHeight": 32,
"fontSize": 18,
"letterSpacing": "8%",
"textCase": "uppercase"
},
"type": "typography"
}
},
"xs": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 16,
"fontSize": 12,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"code": {
"header": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Medium",
"lineHeight": 20,
"fontSize": 12,
"letterSpacing": "10%",
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
}
},
"sm": {
"normal": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"code": {
"header": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Regular",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "10%",
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
},
"normal": {
"value": {
"fontFamily": "Office Code Pro",
"fontWeight": "Regular",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 26,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
},
"bullet-points": {
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": 0,
"paragraphSpacing": 12,
"textDecoration": "none",
"textCase": "none"
},
"type": "typography"
}
}
},
"button": {
"xs": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 16,
"fontSize": 12,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"sm": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"form": {
"label": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
},
"label-secondary": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 14,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
},
"table": {
"header": {
"type": "typography",
"value": {
"fontFamily": "Circular Std",
"fontWeight": "Book",
"lineHeight": 20,
"fontSize": 12,
"letterSpacing": "0%",
"paragraphSpacing": 26,
"textCase": "none",
"textDecoration": "none"
}
}
}
}
}