@primer/primitives 7.16.0 → 7.17.0-rc.086cd658

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/dist/styleLint/base/size/size.json +427 -0
  2. package/dist/styleLint/base/typography/typography.json +54 -0
  3. package/dist/styleLint/functional/motion/motion.json +47 -0
  4. package/dist/styleLint/functional/size/border.json +234 -0
  5. package/dist/styleLint/functional/size/breakpoints.json +152 -0
  6. package/dist/styleLint/functional/size/size-coarse.json +41 -0
  7. package/dist/styleLint/functional/size/size-fine.json +41 -0
  8. package/dist/styleLint/functional/size/size.json +1838 -0
  9. package/dist/styleLint/functional/size/viewport.json +80 -0
  10. package/dist/styleLint/functional/themes/dark-colorblind.json +16155 -0
  11. package/dist/styleLint/functional/themes/dark-dimmed.json +16159 -0
  12. package/dist/styleLint/functional/themes/dark-high-contrast.json +16175 -0
  13. package/dist/styleLint/functional/themes/dark-tritanopia.json +16161 -0
  14. package/dist/styleLint/functional/themes/dark.json +16159 -0
  15. package/dist/styleLint/functional/themes/light-colorblind.json +16123 -0
  16. package/dist/styleLint/functional/themes/light-high-contrast.json +16125 -0
  17. package/dist/styleLint/functional/themes/light-tritanopia.json +16115 -0
  18. package/dist/styleLint/functional/themes/light.json +16113 -0
  19. package/dist/styleLint/functional/typography/typography.json +663 -0
  20. package/package.json +11 -9
  21. package/src/PrimerStyleDictionary.ts +226 -0
  22. package/src/filters/index.ts +12 -0
  23. package/src/filters/isBorder.ts +10 -0
  24. package/src/filters/isColor.ts +10 -0
  25. package/src/filters/isColorWithAlpha.ts +11 -0
  26. package/src/filters/isColorWithMix.ts +33 -0
  27. package/src/filters/isDeprecated.ts +10 -0
  28. package/src/filters/isDimension.ts +10 -0
  29. package/src/filters/isDuration.ts +10 -0
  30. package/src/filters/isFontFamily.ts +10 -0
  31. package/src/filters/isFontWeight.ts +10 -0
  32. package/src/filters/isFromFile.ts +12 -0
  33. package/src/filters/isShadow.ts +10 -0
  34. package/src/filters/isSource.ts +10 -0
  35. package/src/filters/isTypography.ts +10 -0
  36. package/src/formats/cssCustomMedia.ts +24 -0
  37. package/src/formats/cssThemed.ts +35 -0
  38. package/src/formats/cssVariables.ts +25 -0
  39. package/src/formats/cssWrapMediaQuery.ts +29 -0
  40. package/src/formats/index.ts +11 -0
  41. package/src/formats/javascriptCommonJs.ts +21 -0
  42. package/src/formats/javascriptEsm.ts +21 -0
  43. package/src/formats/jsonFigma.ts +131 -0
  44. package/src/formats/jsonNestedPrefixed.ts +23 -0
  45. package/src/formats/jsonOneDimensional.ts +18 -0
  46. package/src/formats/jsonPostCssFallback.ts +16 -0
  47. package/src/formats/typescriptExportDefinition.ts +170 -0
  48. package/src/formats/utilities/jsonToFlat.ts +10 -0
  49. package/src/formats/utilities/jsonToNestedValue.ts +20 -0
  50. package/src/formats/utilities/prefixTokens.ts +17 -0
  51. package/src/parsers/index.ts +1 -0
  52. package/src/parsers/w3cJsonParser.ts +25 -0
  53. package/src/platforms/css.ts +93 -0
  54. package/src/platforms/deprecatedJson.ts +16 -0
  55. package/src/platforms/docJson.ts +34 -0
  56. package/src/platforms/fallbacks.ts +34 -0
  57. package/src/platforms/figma.ts +48 -0
  58. package/src/platforms/index.ts +10 -0
  59. package/src/platforms/javascript.ts +30 -0
  60. package/src/platforms/json.ts +32 -0
  61. package/src/platforms/styleLint.ts +34 -0
  62. package/src/platforms/typeDefinitions.ts +30 -0
  63. package/src/platforms/typescript.ts +30 -0
  64. package/src/schemas/alphaValue.ts +12 -0
  65. package/src/schemas/baseToken.ts +7 -0
  66. package/src/schemas/borderToken.ts +19 -0
  67. package/src/schemas/collections.ts +47 -0
  68. package/src/schemas/colorHexValue.ts +18 -0
  69. package/src/schemas/colorToken.ts +50 -0
  70. package/src/schemas/designToken.ts +38 -0
  71. package/src/schemas/dimensionToken.ts +22 -0
  72. package/src/schemas/dimensionValue.ts +16 -0
  73. package/src/schemas/durationToken.ts +12 -0
  74. package/src/schemas/durationValue.ts +9 -0
  75. package/src/schemas/fontFamilyToken.ts +11 -0
  76. package/src/schemas/fontWeightToken.ts +12 -0
  77. package/src/schemas/fontWeightValue.ts +14 -0
  78. package/src/schemas/numberToken.ts +11 -0
  79. package/src/schemas/referenceValue.ts +12 -0
  80. package/src/schemas/scopes.ts +16 -0
  81. package/src/schemas/shadowToken.ts +45 -0
  82. package/src/schemas/stringToken.ts +11 -0
  83. package/src/schemas/tokenName.ts +12 -0
  84. package/src/schemas/tokenType.ts +4 -0
  85. package/src/schemas/typographyToken.ts +20 -0
  86. package/src/schemas/validTokenType.ts +44 -0
  87. package/src/schemas/viewportRangeToken.ts +11 -0
  88. package/src/test-utilities/getMockDictionary.ts +22 -0
  89. package/src/test-utilities/getMockFormatterArguments.ts +21 -0
  90. package/src/test-utilities/getMockParserInput.ts +72 -0
  91. package/src/test-utilities/getMockToken.ts +25 -0
  92. package/src/test-utilities/index.ts +4 -0
  93. package/src/tokens/base/color/dark/dark.dimmed.json5 +1326 -0
  94. package/src/tokens/base/color/dark/dark.high-contrast.json5 +856 -0
  95. package/src/tokens/base/color/dark/dark.json5 +866 -0
  96. package/src/tokens/base/color/dark/display-dark.json5 +1774 -0
  97. package/src/tokens/base/color/light/display-light.json5 +1774 -0
  98. package/src/tokens/base/color/light/light.high-contrast.json5 +847 -0
  99. package/src/tokens/base/color/light/light.json5 +866 -0
  100. package/src/tokens/base/size/size.json +176 -0
  101. package/src/tokens/base/typography/typography.json +24 -0
  102. package/src/tokens/fallback/color-fallbacks.json +260 -0
  103. package/src/tokens/functional/border/dark.json5 +12 -0
  104. package/src/tokens/functional/border/light.json5 +12 -0
  105. package/src/tokens/functional/color/dark/app-dark.json5 +554 -0
  106. package/src/tokens/functional/color/dark/data-vis-dark.json5 +144 -0
  107. package/src/tokens/functional/color/dark/display-dark.json5 +1060 -0
  108. package/src/tokens/functional/color/dark/overrides/dark.dimmed.json5 +57 -0
  109. package/src/tokens/functional/color/dark/overrides/dark.high-contrast.json5 +390 -0
  110. package/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 +314 -0
  111. package/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 +229 -0
  112. package/src/tokens/functional/color/dark/patterns-dark.json5 +3073 -0
  113. package/src/tokens/functional/color/dark/primitives-dark.json5 +1206 -0
  114. package/src/tokens/functional/color/dark/syntax-dark.json5 +559 -0
  115. package/src/tokens/functional/color/light/app-light.json5 +551 -0
  116. package/src/tokens/functional/color/light/data-vis-light.json5 +144 -0
  117. package/src/tokens/functional/color/light/display-light.json5 +1060 -0
  118. package/src/tokens/functional/color/light/overrides/light.high-contrast.json5 +440 -0
  119. package/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 +340 -0
  120. package/src/tokens/functional/color/light/overrides/light.tritanopia.json5 +249 -0
  121. package/src/tokens/functional/color/light/patterns-light.json5 +3070 -0
  122. package/src/tokens/functional/color/light/primitives-light.json5 +1196 -0
  123. package/src/tokens/functional/color/light/syntax-light.json5 +559 -0
  124. package/src/tokens/functional/motion/loading.json5 +17 -0
  125. package/src/tokens/functional/motion/patterns.json5 +28 -0
  126. package/src/tokens/functional/shadow/dark.json5 +383 -0
  127. package/src/tokens/functional/shadow/light.json5 +376 -0
  128. package/src/tokens/functional/size/border.json +98 -0
  129. package/src/tokens/functional/size/breakpoints.json +64 -0
  130. package/src/tokens/functional/size/size-coarse.json +28 -0
  131. package/src/tokens/functional/size/size-fine.json +28 -0
  132. package/src/tokens/functional/size/size.json +802 -0
  133. package/src/tokens/functional/size/viewport.json +28 -0
  134. package/src/tokens/functional/typography/typography.json +279 -0
  135. package/src/tokens/removed/color.json +421 -0
  136. package/src/transformers/borderToCss.ts +38 -0
  137. package/src/transformers/colorToHex.ts +16 -0
  138. package/src/transformers/colorToHexAlpha.ts +23 -0
  139. package/src/transformers/colorToHexMix.ts +19 -0
  140. package/src/transformers/colorToRgbAlpha.ts +19 -0
  141. package/src/transformers/colorToRgbaFloat.ts +45 -0
  142. package/src/transformers/dimensionToPixelUnitless.ts +60 -0
  143. package/src/transformers/dimensionToRem.ts +56 -0
  144. package/src/transformers/dimensionToRemPxArray.ts +60 -0
  145. package/src/transformers/durationToCss.ts +29 -0
  146. package/src/transformers/figmaAttributes.ts +55 -0
  147. package/src/transformers/fontFamilyToCss.ts +38 -0
  148. package/src/transformers/fontWeightToNumber.ts +53 -0
  149. package/src/transformers/index.ts +21 -0
  150. package/src/transformers/jsonDeprecated.ts +15 -0
  151. package/src/transformers/namePathToCamelCase.ts +14 -0
  152. package/src/transformers/namePathToDotNotation.ts +34 -0
  153. package/src/transformers/namePathToFigma.ts +28 -0
  154. package/src/transformers/namePathToKebabCase.ts +19 -0
  155. package/src/transformers/namePathToSlashNotation.ts +19 -0
  156. package/src/transformers/shadowToCss.ts +37 -0
  157. package/src/transformers/typographyToCss.ts +31 -0
  158. package/src/transformers/utilities/alpha.ts +23 -0
  159. package/src/transformers/utilities/checkRequiredTokenProperties.ts +16 -0
  160. package/src/transformers/utilities/getTokenValue.ts +18 -0
  161. package/src/transformers/utilities/hexToRgbaFloat.ts +31 -0
  162. package/src/transformers/utilities/invalidTokenError.ts +34 -0
  163. package/src/transformers/utilities/isRgbaFloat.ts +29 -0
  164. package/src/transformers/utilities/mix.ts +46 -0
  165. package/src/transformers/utilities/rgbaFloatToHex.ts +15 -0
  166. package/src/types/Border.d.ts +5 -0
  167. package/src/types/BorderTokenValue.d.ts +10 -0
  168. package/src/types/ColorHex.d.ts +4 -0
  169. package/src/types/PlatformInitializer.d.ts +11 -0
  170. package/src/types/Shadow.d.ts +5 -0
  171. package/src/types/ShadowTokenValue.d.ts +14 -0
  172. package/src/types/SizeEm.d.ts +4 -0
  173. package/src/types/SizePx.d.ts +4 -0
  174. package/src/types/SizeRem.d.ts +4 -0
  175. package/src/types/StyleDictionaryConfigGenerator.d.ts +15 -0
  176. package/src/types/TokenBuildInput.d.ts +8 -0
  177. package/src/types/TypographyTokenValue.d.ts +12 -0
  178. package/src/types/w3cTransformedToken.d.ts +8 -0
  179. package/src/utilities/copyFromDir.ts +21 -0
  180. package/src/utilities/getFlag.ts +12 -0
  181. package/src/utilities/index.ts +3 -0
  182. package/src/utilities/joinFriendly.ts +2 -0
  183. package/src/utilities/schemaErrorMessage.ts +2 -0
  184. package/src/utilities/toCamelCase.ts +29 -0
  185. package/src/utilities/treeWalker.ts +27 -0
  186. package/src/utilities/upperCaseFirstCharacter.ts +10 -0
  187. package/src/utils-v1.ts +36 -0
  188. package/tokens-next-private/styleLint/base/size/size.json +427 -0
  189. package/tokens-next-private/styleLint/base/typography/typography.json +54 -0
  190. package/tokens-next-private/styleLint/functional/motion/motion.json +47 -0
  191. package/tokens-next-private/styleLint/functional/size/border.json +234 -0
  192. package/tokens-next-private/styleLint/functional/size/breakpoints.json +152 -0
  193. package/tokens-next-private/styleLint/functional/size/size-coarse.json +41 -0
  194. package/tokens-next-private/styleLint/functional/size/size-fine.json +41 -0
  195. package/tokens-next-private/styleLint/functional/size/size.json +1838 -0
  196. package/tokens-next-private/styleLint/functional/size/viewport.json +80 -0
  197. package/tokens-next-private/styleLint/functional/themes/dark-colorblind.json +16155 -0
  198. package/tokens-next-private/styleLint/functional/themes/dark-dimmed.json +16159 -0
  199. package/tokens-next-private/styleLint/functional/themes/dark-high-contrast.json +16175 -0
  200. package/tokens-next-private/styleLint/functional/themes/dark-tritanopia.json +16161 -0
  201. package/tokens-next-private/styleLint/functional/themes/dark.json +16159 -0
  202. package/tokens-next-private/styleLint/functional/themes/light-colorblind.json +16123 -0
  203. package/tokens-next-private/styleLint/functional/themes/light-high-contrast.json +16125 -0
  204. package/tokens-next-private/styleLint/functional/themes/light-tritanopia.json +16115 -0
  205. package/tokens-next-private/styleLint/functional/themes/light.json +16113 -0
  206. package/tokens-next-private/styleLint/functional/typography/typography.json +663 -0
  207. package/tokens-v2-private/css/tokens/base/size/size.css +1 -1
  208. package/tokens-v2-private/css/tokens/base/typography/typography.css +1 -1
  209. package/tokens-v2-private/css/tokens/functional/size/border.css +1 -1
  210. package/tokens-v2-private/css/tokens/functional/size/breakpoints.css +1 -1
  211. package/tokens-v2-private/css/tokens/functional/size/size-coarse.css +1 -1
  212. package/tokens-v2-private/css/tokens/functional/size/size-fine.css +1 -1
  213. package/tokens-v2-private/css/tokens/functional/size/size.css +1 -1
  214. package/tokens-v2-private/css/tokens/functional/typography/typography.css +1 -1
  215. package/tokens-v2-private/js/module/tokens/base/size/size.js +1 -1
  216. package/tokens-v2-private/js/module/tokens/base/typography/typography.js +1 -1
  217. package/tokens-v2-private/js/module/tokens/functional/size/border.js +1 -1
  218. package/tokens-v2-private/js/module/tokens/functional/size/breakpoints.js +1 -1
  219. package/tokens-v2-private/js/module/tokens/functional/size/size-coarse.js +1 -1
  220. package/tokens-v2-private/js/module/tokens/functional/size/size-fine.js +1 -1
  221. package/tokens-v2-private/js/module/tokens/functional/size/size.js +1 -1
  222. package/tokens-v2-private/js/module/tokens/functional/size/viewport.js +1 -1
  223. package/tokens-v2-private/js/module/tokens/functional/typography/typography.js +1 -1
  224. package/tokens-v2-private/js/tokens/base/size/size.js +1 -1
  225. package/tokens-v2-private/js/tokens/base/typography/typography.js +1 -1
  226. package/tokens-v2-private/js/tokens/functional/size/border.js +1 -1
  227. package/tokens-v2-private/js/tokens/functional/size/breakpoints.js +1 -1
  228. package/tokens-v2-private/js/tokens/functional/size/size-coarse.js +1 -1
  229. package/tokens-v2-private/js/tokens/functional/size/size-fine.js +1 -1
  230. package/tokens-v2-private/js/tokens/functional/size/size.js +1 -1
  231. package/tokens-v2-private/js/tokens/functional/size/viewport.js +1 -1
  232. package/tokens-v2-private/js/tokens/functional/typography/typography.js +1 -1
  233. package/tokens-v2-private/scss/tokens/base/size/size.scss +1 -1
  234. package/tokens-v2-private/scss/tokens/base/typography/typography.scss +1 -1
  235. package/tokens-v2-private/scss/tokens/functional/size/border.scss +1 -1
  236. package/tokens-v2-private/scss/tokens/functional/size/breakpoints.scss +1 -1
  237. package/tokens-v2-private/scss/tokens/functional/size/size-coarse.scss +1 -1
  238. package/tokens-v2-private/scss/tokens/functional/size/size-fine.scss +1 -1
  239. package/tokens-v2-private/scss/tokens/functional/size/size.scss +1 -1
  240. package/tokens-v2-private/scss/tokens/functional/size/viewport.scss +1 -1
  241. package/tokens-v2-private/scss/tokens/functional/typography/typography.scss +1 -1
  242. package/tokens-v2-private/ts/tokens/base/size/size.d.ts +1 -1
  243. package/tokens-v2-private/ts/tokens/base/size/size.js +1 -1
  244. package/tokens-v2-private/ts/tokens/base/typography/typography.d.ts +1 -1
  245. package/tokens-v2-private/ts/tokens/base/typography/typography.js +1 -1
  246. package/tokens-v2-private/ts/tokens/functional/size/border.d.ts +1 -1
  247. package/tokens-v2-private/ts/tokens/functional/size/border.js +1 -1
  248. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.d.ts +1 -1
  249. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.js +1 -1
  250. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.d.ts +1 -1
  251. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.js +1 -1
  252. package/tokens-v2-private/ts/tokens/functional/size/size-fine.d.ts +1 -1
  253. package/tokens-v2-private/ts/tokens/functional/size/size-fine.js +1 -1
  254. package/tokens-v2-private/ts/tokens/functional/size/size.d.ts +1 -1
  255. package/tokens-v2-private/ts/tokens/functional/size/size.js +1 -1
  256. package/tokens-v2-private/ts/tokens/functional/size/viewport.d.ts +1 -1
  257. package/tokens-v2-private/ts/tokens/functional/size/viewport.js +1 -1
  258. package/tokens-v2-private/ts/tokens/functional/typography/typography.d.ts +1 -1
  259. package/tokens-v2-private/ts/tokens/functional/typography/typography.js +1 -1
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@primer/primitives",
3
- "version": "7.16.0",
3
+ "version": "7.17.0-rc.086cd658",
4
4
  "description": "Typography, spacing, and color primitives for Primer design system",
5
5
  "files": [
6
6
  "dist",
7
7
  "tokens-v2-private",
8
8
  "tokens-next-private",
9
9
  "build.js",
10
- "tokens/"
10
+ "tokens/",
11
+ "src/**/*",
12
+ "!src/**/*.test.ts"
11
13
  ],
12
14
  "main": "dist/js/index.js",
13
15
  "types": "dist/js/index.d.ts",
@@ -54,11 +56,11 @@
54
56
  },
55
57
  "prettier": "@github/prettier-config",
56
58
  "devDependencies": {
57
- "@actions/github": "^5.1.1",
58
- "@changesets/changelog-github": "^0.4.8",
59
- "@changesets/cli": "^2.22.0",
59
+ "@actions/github": "^6.0.0",
60
+ "@changesets/changelog-github": "^0.5.0",
61
+ "@changesets/cli": "^2.27.1",
60
62
  "@github/prettier-config": "^0.0.6",
61
- "@playwright/test": "^1.42.1",
63
+ "@playwright/test": "^1.43.0",
62
64
  "@types/flat": "^5.0.1",
63
65
  "@types/jest": "^29.5.2",
64
66
  "@types/lodash": "^4.14.195",
@@ -89,9 +91,9 @@
89
91
  "mkdirp": "^3.0.1",
90
92
  "prettier": "^2.7.1",
91
93
  "style-dictionary": "^3.9.2",
92
- "ts-jest": "^29.1.1",
93
- "ts-node": "^10.9.1",
94
- "typescript": "^5.4.4",
94
+ "ts-jest": "^29.1.2",
95
+ "ts-node": "^10.9.2",
96
+ "typescript": "^5.4.5",
95
97
  "zod": "^3.22.4",
96
98
  "zod-validation-error": "^3.1.0"
97
99
  }
@@ -0,0 +1,226 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import {w3cJsonParser} from './parsers'
3
+ import {
4
+ borderToCss,
5
+ colorToHexAlpha,
6
+ colorToRgbAlpha,
7
+ colorToHex,
8
+ colorToHexMix,
9
+ colorToRgbaFloat,
10
+ dimensionToRem,
11
+ dimensionToPixelUnitless,
12
+ durationToCss,
13
+ figmaAttributes,
14
+ fontFamilyToCss,
15
+ fontWeightToNumber,
16
+ jsonDeprecated,
17
+ namePathToDotNotation,
18
+ namePathToCamelCase,
19
+ namePathToKebabCase,
20
+ namePathToSlashNotation,
21
+ namePathToFigma,
22
+ shadowToCss,
23
+ typographyToCss,
24
+ dimensionToRemPxArray,
25
+ } from './transformers'
26
+ import {
27
+ javascriptCommonJs,
28
+ javascriptEsm,
29
+ typescriptExportDefinition,
30
+ jsonNestedPrefixed,
31
+ cssThemed,
32
+ cssCustomMedia,
33
+ jsonOneDimensional,
34
+ jsonPostCssFallback,
35
+ cssWrapMediaQuery,
36
+ cssVariables,
37
+ jsonFigma,
38
+ } from './formats'
39
+
40
+ /**
41
+ * Parsers
42
+ *
43
+ */
44
+ StyleDictionary.registerParser(w3cJsonParser)
45
+
46
+ /**
47
+ * Formats
48
+ *
49
+ */
50
+ StyleDictionary.registerFormat({
51
+ name: 'css/themed',
52
+ formatter: cssThemed,
53
+ })
54
+
55
+ StyleDictionary.registerFormat({
56
+ name: 'css/customMedia',
57
+ formatter: cssCustomMedia,
58
+ })
59
+
60
+ StyleDictionary.registerFormat({
61
+ name: 'css/wrapMediaQuery',
62
+ formatter: cssWrapMediaQuery,
63
+ })
64
+
65
+ StyleDictionary.registerFormat({
66
+ name: 'css/variables',
67
+ formatter: cssVariables,
68
+ })
69
+
70
+ StyleDictionary.registerFormat({
71
+ name: 'javascript/esm',
72
+ formatter: javascriptEsm,
73
+ })
74
+
75
+ StyleDictionary.registerFormat({
76
+ name: 'javascript/commonJs',
77
+ formatter: javascriptCommonJs,
78
+ })
79
+
80
+ StyleDictionary.registerFormat({
81
+ name: 'typescript/export-definition',
82
+ formatter: typescriptExportDefinition,
83
+ })
84
+
85
+ StyleDictionary.registerFormat({
86
+ name: 'json/nested-prefixed',
87
+ formatter: jsonNestedPrefixed,
88
+ })
89
+
90
+ StyleDictionary.registerFormat({
91
+ name: 'json/one-dimensional',
92
+ formatter: jsonOneDimensional,
93
+ })
94
+
95
+ StyleDictionary.registerFormat({
96
+ name: 'json/postCss-fallback',
97
+ formatter: jsonPostCssFallback,
98
+ })
99
+
100
+ StyleDictionary.registerFormat({
101
+ name: 'json/figma',
102
+ formatter: jsonFigma,
103
+ })
104
+
105
+ /**
106
+ * Transformers
107
+ *
108
+ */
109
+ StyleDictionary.registerTransform({
110
+ name: 'color/rgbAlpha',
111
+ ...colorToRgbAlpha,
112
+ })
113
+
114
+ StyleDictionary.registerTransform({
115
+ name: 'color/rgbaFloat',
116
+ ...colorToRgbaFloat,
117
+ })
118
+
119
+ StyleDictionary.registerTransform({
120
+ name: 'color/hexAlpha',
121
+ ...colorToHexAlpha,
122
+ })
123
+
124
+ StyleDictionary.registerTransform({
125
+ name: 'color/hexMix',
126
+ ...colorToHexMix,
127
+ })
128
+
129
+ StyleDictionary.registerTransform({
130
+ name: 'color/hex',
131
+ ...colorToHex,
132
+ })
133
+
134
+ StyleDictionary.registerTransform({
135
+ name: 'dimension/rem',
136
+ ...dimensionToRem,
137
+ })
138
+
139
+ StyleDictionary.registerTransform({
140
+ name: 'dimension/remPxArray',
141
+ ...dimensionToRemPxArray,
142
+ })
143
+
144
+ StyleDictionary.registerTransform({
145
+ name: 'dimension/pixelUnitless',
146
+ ...dimensionToPixelUnitless,
147
+ })
148
+
149
+ StyleDictionary.registerTransform({
150
+ name: 'duration/css',
151
+ ...durationToCss,
152
+ })
153
+
154
+ StyleDictionary.registerTransform({
155
+ name: 'figma/attributes',
156
+ ...figmaAttributes,
157
+ })
158
+
159
+ StyleDictionary.registerTransform({
160
+ name: 'json/deprecated',
161
+ ...jsonDeprecated,
162
+ })
163
+
164
+ StyleDictionary.registerTransform({
165
+ name: 'name/pathToCamelCase',
166
+ ...namePathToCamelCase,
167
+ })
168
+
169
+ StyleDictionary.registerTransform({
170
+ name: 'name/pathToDotNotation',
171
+ ...namePathToDotNotation,
172
+ })
173
+
174
+ StyleDictionary.registerTransform({
175
+ name: 'name/pathToFigma',
176
+ ...namePathToFigma,
177
+ })
178
+
179
+ StyleDictionary.registerTransform({
180
+ name: 'name/pathToCamelCase',
181
+ ...namePathToCamelCase,
182
+ })
183
+
184
+ StyleDictionary.registerTransform({
185
+ name: 'name/pathToKebabCase',
186
+ ...namePathToKebabCase,
187
+ })
188
+
189
+ StyleDictionary.registerTransform({
190
+ name: 'name/pathToSlashNotation',
191
+ ...namePathToSlashNotation,
192
+ })
193
+
194
+ StyleDictionary.registerTransform({
195
+ name: 'shadow/css',
196
+ ...shadowToCss,
197
+ })
198
+
199
+ StyleDictionary.registerTransform({
200
+ name: 'border/css',
201
+ ...borderToCss,
202
+ })
203
+
204
+ StyleDictionary.registerTransform({
205
+ name: 'typography/css',
206
+ ...typographyToCss,
207
+ })
208
+
209
+ StyleDictionary.registerTransform({
210
+ name: 'fontWeight/number',
211
+ ...fontWeightToNumber,
212
+ })
213
+
214
+ StyleDictionary.registerTransform({
215
+ name: 'fontFamily/css',
216
+ ...fontFamilyToCss,
217
+ })
218
+
219
+ /**
220
+ * @name {@link PrimerStyleDictionary}
221
+ * @description Returns style dictionary object with primer preset that includes parsers, formats and transformers
222
+ * @parsers [w3cJsonParser](https://github.com/primer/primitives/blob/main/config//parsers/w3c-json-parser.ts)
223
+ * @formats [javascript/esm](https://github.com/primer/primitives/blob/main/config/formats/javascript-esm.ts), [javascript/commonJs](https://github.com/primer/primitives/blob/main/config/formats/javascript-commonJs.ts), [typescript/export-definition](https://github.com/primer/primitives/blob/main/config/formats/typescript-export-defition.ts)
224
+ * @transformers [color/rgbAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-rgb-alpha.ts), [color/hexAlpha](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex-alpha.ts), [color/hex](https://github.com/primer/primitives/blob/main/config/tranformers/color-to-hex6.ts), [json/deprecated](https://github.com/primer/primitives/blob/main/config/tranformers/json-deprecated.ts), [name/pathToDotNotation](https://github.com/primer/primitives/blob/main/config/tranformers/name-path-to-dot-notation.ts)
225
+ */
226
+ export const PrimerStyleDictionary: StyleDictionary.Core = StyleDictionary
@@ -0,0 +1,12 @@
1
+ export {isBorder} from './isBorder'
2
+ export {isColor} from './isColor'
3
+ export {isColorWithAlpha} from './isColorWithAlpha'
4
+ export {isColorWithMix} from './isColorWithMix'
5
+ export {isDimension} from './isDimension'
6
+ export {isDeprecated} from './isDeprecated'
7
+ export {isFromFile} from './isFromFile'
8
+ export {isFontFamily} from './isFontFamily'
9
+ export {isFontWeight} from './isFontWeight'
10
+ export {isShadow} from './isShadow'
11
+ export {isSource} from './isSource'
12
+ export {isTypography} from './isTypography'
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `border`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isBorder = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'border'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `color`
5
+ * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isColor = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'color'
10
+ }
@@ -0,0 +1,11 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+ import {isColor} from './isColor'
3
+
4
+ /**
5
+ * @description Checks if token is color with an alpha value
6
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
7
+ * @returns boolean
8
+ */
9
+ export const isColorWithAlpha = (token: StyleDictionary.TransformedToken): boolean => {
10
+ return isColor(token) && token.alpha !== undefined && typeof token.alpha === 'number'
11
+ }
@@ -0,0 +1,33 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+ import {isColor} from './isColor'
3
+
4
+ const throwError = (token: StyleDictionary.TransformedToken) => {
5
+ throw new Error(
6
+ `Invalid mix property on token: ${token.name}. "mix.color": ${token.mix.color}, "mix.weight": ${
7
+ typeof token.mix.weight === 'string' ? `"${token.mix.weight}" (string)` : token.mix.weight
8
+ } must be a number between 0 and 1. In file: "${token.filePath}".`,
9
+ )
10
+ }
11
+
12
+ /**
13
+ * @description Checks if token is color and has a mix property
14
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
15
+ * @returns boolean
16
+ */
17
+ export const isColorWithMix = (token: StyleDictionary.TransformedToken): boolean => {
18
+ // no color or no mix property
19
+ if (!isColor(token) || token.mix === undefined || token.mix === null) {
20
+ return false
21
+ }
22
+ // invalid mix property
23
+ if (
24
+ typeof token.mix.color !== 'string' ||
25
+ typeof token.mix.weight !== 'number' ||
26
+ token.mix.weight < 0 ||
27
+ token.mix.weight > 1
28
+ ) {
29
+ throwError(token)
30
+ }
31
+ // valid mix property
32
+ return true
33
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token has a valid `deprecated` property
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isDeprecated = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.deprecated === true || typeof token.deprecated === 'string'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `dimension`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isDimension = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'dimension'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `duration`
5
+ * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isDuration = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'duration'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `isFontFamily`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isFontFamily = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'fontFamily'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `fontWeight`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isFontWeight = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'fontWeight'
10
+ }
@@ -0,0 +1,12 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token comes from a specific file
5
+ * @param token [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @param files - array of file paths
7
+ * @returns boolean
8
+ */
9
+ export const isFromFile = (token: StyleDictionary.TransformedToken, files: string[]): boolean => {
10
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
11
+ return files?.includes(token.filePath) === true
12
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `shadow`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isShadow = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'shadow'
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is source token
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isSource = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.isSource === true
10
+ }
@@ -0,0 +1,10 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+
3
+ /**
4
+ * @description Checks if token is of $type `typography`
5
+ * @param arguments [StyleDictionary.TransformedToken](https://github.com/amzn/style-dictionary/blob/main/types/TransformedToken.d.ts)
6
+ * @returns boolean
7
+ */
8
+ export const isTypography = (token: StyleDictionary.TransformedToken): boolean => {
9
+ return token.$type === 'typography'
10
+ }
@@ -0,0 +1,24 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
3
+ import {format} from 'prettier'
4
+ const {fileHeader} = StyleDictionary.formatHelpers
5
+
6
+ /**
7
+ * @description Converts `StyleDictionary.dictionary.tokens` to css with @custom-media
8
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
9
+ * @returns formatted `string`
10
+ */
11
+ export const cssCustomMedia: StyleDictionary.Formatter = ({
12
+ dictionary,
13
+ options: _options,
14
+ file,
15
+ }: FormatterArguments) => {
16
+ // add file header
17
+ const output = [fileHeader({file})]
18
+ // add single theme css
19
+ dictionary.allTokens.map(({name, value}) => {
20
+ output.push(`@custom-media --${name} ${value};`)
21
+ })
22
+ // return prettified
23
+ return format(output.join('\n'), {parser: 'css', printWidth: 500})
24
+ }
@@ -0,0 +1,35 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
3
+ import {format} from 'prettier'
4
+ import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
5
+ const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
6
+
7
+ /**
8
+ * @description Converts `StyleDictionary.dictionary.tokens` to css with prefers dark and light section
9
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
10
+ * @param arguments.options outputReferences `boolean`, selector `string`, selectorLight `string`, selectorDark `string`
11
+ * @returns formatted `string`
12
+ */
13
+ export const cssThemed: StyleDictionary.Formatter = ({dictionary, options = {}, file}: FormatterArguments) => {
14
+ const {selector, selectorLight, selectorDark} = options
15
+ const {outputReferences, descriptions} = options
16
+ const formatting: LineFormatting = {
17
+ commentStyle: descriptions ? 'long' : 'none',
18
+ }
19
+ // add file header
20
+ const output = [fileHeader({file})]
21
+ // add single theme css
22
+ output.push(`${selector || ':root'}${selectorLight ? `, ${selectorLight}` : ''}{
23
+ ${formattedVariables({format: 'css', dictionary, outputReferences, formatting})}
24
+ }`)
25
+ // add auto dark theme css
26
+ if (selectorDark) {
27
+ output.push(`@media (prefers-color-scheme: dark) {
28
+ ${selectorDark} {
29
+ ${formattedVariables({format: 'css', dictionary, outputReferences, formatting})}
30
+ }
31
+ }`)
32
+ }
33
+ // return prettified
34
+ return format(output.join('\n'), {parser: 'css', printWidth: 500})
35
+ }
@@ -0,0 +1,25 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
3
+ import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
4
+ const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
5
+
6
+ /**
7
+ * @description Converts `StyleDictionary.dictionary.tokens` to css with prefers dark and light section
8
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
9
+ * @param arguments.options outputReferences `boolean`, selector `string`, selectorLight `string`, selectorDark `string`
10
+ * @returns formatted `string`
11
+ */
12
+ export const cssVariables: StyleDictionary.Formatter = ({dictionary, options = {}, file}: FormatterArguments) => {
13
+ const selector = options.selector ? options.selector : `:root`
14
+ const {outputReferences, descriptions} = options
15
+ const formatting: LineFormatting = {
16
+ commentStyle: descriptions ? 'long' : 'none',
17
+ }
18
+
19
+ return `${fileHeader({file})}${selector} {\n${formattedVariables({
20
+ format: 'css',
21
+ dictionary,
22
+ outputReferences,
23
+ formatting,
24
+ })}\n}\n`
25
+ }
@@ -0,0 +1,29 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
3
+ import {format} from 'prettier'
4
+ import type {LineFormatting} from 'style-dictionary/types/FormatHelpers'
5
+ const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
6
+
7
+ /**
8
+ * @description Converts `StyleDictionary.dictionary.tokens` to css with @custom-media
9
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
10
+ * @returns formatted `string`
11
+ */
12
+ export const cssWrapMediaQuery: StyleDictionary.Formatter = ({dictionary, options, file}: FormatterArguments) => {
13
+ const {outputReferences, descriptions} = options
14
+ const formatting: LineFormatting = {
15
+ commentStyle: descriptions ? 'long' : 'none',
16
+ }
17
+ // get specific media query or use screen
18
+ const mediaQuery = options.mediaQuery?.[file.destination] || 'screen'
19
+ // add file header
20
+ const output = [fileHeader({file})]
21
+ // add meadia query
22
+ output.push(`@media ${mediaQuery} {\n:root {`)
23
+ // add tokens
24
+ output.push(formattedVariables({format: 'css', dictionary, outputReferences, formatting}))
25
+ // close media query
26
+ output.push(`}\n}`)
27
+ // return prettified
28
+ return format(output.join('\n'), {parser: 'css', printWidth: 500})
29
+ }
@@ -0,0 +1,11 @@
1
+ export {cssThemed} from './cssThemed'
2
+ export {cssCustomMedia} from './cssCustomMedia'
3
+ export {cssWrapMediaQuery} from './cssWrapMediaQuery'
4
+ export {cssVariables} from './cssVariables'
5
+ export {jsonFigma} from './jsonFigma'
6
+ export {javascriptCommonJs} from './javascriptCommonJs'
7
+ export {javascriptEsm} from './javascriptEsm'
8
+ export {jsonNestedPrefixed} from './jsonNestedPrefixed'
9
+ export {jsonOneDimensional} from './jsonOneDimensional'
10
+ export {jsonPostCssFallback} from './jsonPostCssFallback'
11
+ export {typescriptExportDefinition} from './typescriptExportDefinition'
@@ -0,0 +1,21 @@
1
+ import {format} from 'prettier'
2
+ import {jsonToNestedValue} from './utilities/jsonToNestedValue'
3
+ import {prefixTokens} from './utilities/prefixTokens'
4
+ import StyleDictionary from 'style-dictionary'
5
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
6
+
7
+ const {fileHeader} = StyleDictionary.formatHelpers
8
+
9
+ /**
10
+ * @description Converts `StyleDictionary.dictionary.tokens` to javascript commonJS module
11
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
12
+ * @returns formatted `string`
13
+ */
14
+ export const javascriptCommonJs: StyleDictionary.Formatter = ({dictionary, file, platform}: FormatterArguments) => {
15
+ // add prefix if defined
16
+ const tokens = prefixTokens(dictionary.tokens, platform)
17
+ // add file header and convert output
18
+ const output = `${fileHeader({file})}exports.default = ${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n`
19
+ // return prettified
20
+ return format(output, {parser: 'typescript', printWidth: 500})
21
+ }
@@ -0,0 +1,21 @@
1
+ import StyleDictionary from 'style-dictionary'
2
+ import {format} from 'prettier'
3
+ import {jsonToNestedValue} from './utilities/jsonToNestedValue'
4
+ import {prefixTokens} from './utilities/prefixTokens'
5
+ import type {FormatterArguments} from 'style-dictionary/types/Format'
6
+
7
+ const {fileHeader} = StyleDictionary.formatHelpers
8
+
9
+ /**
10
+ * @description Converts `StyleDictionary.dictionary.tokens` to javascript esm (javascript export statement)
11
+ * @param arguments [FormatterArguments](https://github.com/amzn/style-dictionary/blob/main/types/Format.d.ts)
12
+ * @returns formatted `string`
13
+ */
14
+ export const javascriptEsm: StyleDictionary.Formatter = ({dictionary, file, platform}: FormatterArguments) => {
15
+ // add prefix if defined
16
+ const tokens = prefixTokens(dictionary.tokens, platform)
17
+ // add file header and convert output
18
+ const output = `${fileHeader({file})}export default \n${JSON.stringify(jsonToNestedValue(tokens), null, 2)}\n`
19
+ // return prettified
20
+ return format(output, {parser: 'typescript', printWidth: 500})
21
+ }