@primer/primitives 7.17.0-rc.3f0bd2a1 → 7.17.0-rc.4dfa9cdd

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 (283) hide show
  1. package/README.md +1 -1
  2. package/dist/css/functional/themes/dark-colorblind.css +10 -0
  3. package/dist/css/functional/themes/dark-dimmed.css +10 -0
  4. package/dist/css/functional/themes/dark-high-contrast.css +10 -0
  5. package/dist/css/functional/themes/dark-tritanopia.css +10 -0
  6. package/dist/css/functional/themes/dark.css +10 -0
  7. package/dist/css/functional/themes/light-colorblind.css +10 -0
  8. package/dist/css/functional/themes/light-high-contrast.css +10 -0
  9. package/dist/css/functional/themes/light-tritanopia.css +10 -0
  10. package/dist/css/functional/themes/light.css +10 -0
  11. package/dist/css/functional/typography/typography.css +1 -1
  12. package/dist/docs/base/typography/typography.json +52 -4
  13. package/dist/docs/functional/themes/dark-colorblind.json +145 -0
  14. package/dist/docs/functional/themes/dark-dimmed.json +145 -0
  15. package/dist/docs/functional/themes/dark-high-contrast.json +145 -0
  16. package/dist/docs/functional/themes/dark-tritanopia.json +145 -0
  17. package/dist/docs/functional/themes/dark.json +145 -0
  18. package/dist/docs/functional/themes/light-colorblind.json +145 -0
  19. package/dist/docs/functional/themes/light-high-contrast.json +145 -0
  20. package/dist/docs/functional/themes/light-tritanopia.json +145 -0
  21. package/dist/docs/functional/themes/light.json +145 -0
  22. package/dist/docs/functional/typography/typography.json +494 -36
  23. package/dist/fallbacks/functional/typography/typography.json +1 -1
  24. package/dist/figma/figma.json +18 -1
  25. package/dist/figma/themes/dark-colorblind.json +80 -0
  26. package/dist/figma/themes/dark-dimmed.json +80 -0
  27. package/dist/figma/themes/dark-high-contrast.json +80 -0
  28. package/dist/figma/themes/dark-tritanopia.json +80 -0
  29. package/dist/figma/themes/dark.json +80 -0
  30. package/dist/figma/themes/light-colorblind.json +80 -0
  31. package/dist/figma/themes/light-high-contrast.json +80 -0
  32. package/dist/figma/themes/light-tritanopia.json +80 -0
  33. package/dist/figma/themes/light.json +80 -0
  34. package/dist/figma/typography/typography.json +370 -0
  35. package/dist/internalCss/dark-colorblind.css +10 -0
  36. package/dist/internalCss/dark-dimmed.css +10 -0
  37. package/dist/internalCss/dark-high-contrast.css +10 -0
  38. package/dist/internalCss/dark-tritanopia.css +10 -0
  39. package/dist/internalCss/dark.css +10 -0
  40. package/dist/internalCss/light-colorblind.css +10 -0
  41. package/dist/internalCss/light-high-contrast.css +10 -0
  42. package/dist/internalCss/light-tritanopia.css +10 -0
  43. package/dist/internalCss/light.css +10 -0
  44. package/dist/styleLint/base/typography/typography.json +52 -4
  45. package/dist/styleLint/functional/themes/dark-colorblind.json +145 -0
  46. package/dist/styleLint/functional/themes/dark-dimmed.json +145 -0
  47. package/dist/styleLint/functional/themes/dark-high-contrast.json +145 -0
  48. package/dist/styleLint/functional/themes/dark-tritanopia.json +145 -0
  49. package/dist/styleLint/functional/themes/dark.json +145 -0
  50. package/dist/styleLint/functional/themes/light-colorblind.json +145 -0
  51. package/dist/styleLint/functional/themes/light-high-contrast.json +145 -0
  52. package/dist/styleLint/functional/themes/light-tritanopia.json +145 -0
  53. package/dist/styleLint/functional/themes/light.json +145 -0
  54. package/dist/styleLint/functional/typography/typography.json +494 -36
  55. package/package.json +5 -13
  56. package/src/PrimerStyleDictionary.ts +12 -0
  57. package/src/filters/index.ts +1 -0
  58. package/src/filters/isNumber.ts +8 -0
  59. package/src/formats/jsonFigma.ts +1 -0
  60. package/src/platforms/figma.ts +10 -1
  61. package/src/schemas/numberToken.ts +17 -0
  62. package/src/tokens/base/typography/typography.json +28 -4
  63. package/src/tokens/functional/color/dark/display-dark.json5 +66 -0
  64. package/src/tokens/functional/color/light/display-light.json5 +66 -0
  65. package/src/tokens/functional/typography/typography.json +263 -34
  66. package/src/transformers/floatToPixel.ts +33 -0
  67. package/src/transformers/fontFamilyToCss.ts +3 -4
  68. package/src/transformers/fontFamilyToFigma.ts +47 -0
  69. package/src/transformers/index.ts +2 -0
  70. package/src/transformers/utilities/hasSpaceInString.ts +6 -0
  71. package/build.js +0 -578
  72. package/dist/deprecated/colors.json +0 -7
  73. package/dist/js/colors/dark.d.ts +0 -516
  74. package/dist/js/colors/dark.js +0 -616
  75. package/dist/js/colors/dark_colorblind.d.ts +0 -516
  76. package/dist/js/colors/dark_colorblind.js +0 -616
  77. package/dist/js/colors/dark_dimmed.d.ts +0 -516
  78. package/dist/js/colors/dark_dimmed.js +0 -616
  79. package/dist/js/colors/dark_high_contrast.d.ts +0 -516
  80. package/dist/js/colors/dark_high_contrast.js +0 -616
  81. package/dist/js/colors/dark_tritanopia.d.ts +0 -516
  82. package/dist/js/colors/dark_tritanopia.js +0 -616
  83. package/dist/js/colors/index.d.ts +0 -4638
  84. package/dist/js/colors/index.js +0 -15
  85. package/dist/js/colors/light.d.ts +0 -516
  86. package/dist/js/colors/light.js +0 -616
  87. package/dist/js/colors/light_colorblind.d.ts +0 -516
  88. package/dist/js/colors/light_colorblind.js +0 -616
  89. package/dist/js/colors/light_high_contrast.d.ts +0 -516
  90. package/dist/js/colors/light_high_contrast.js +0 -616
  91. package/dist/js/colors/light_tritanopia.d.ts +0 -516
  92. package/dist/js/colors/light_tritanopia.js +0 -616
  93. package/dist/js/index.d.ts +0 -4655
  94. package/dist/js/index.js +0 -9
  95. package/dist/js/spacing/index.d.ts +0 -6
  96. package/dist/js/spacing/index.js +0 -7
  97. package/dist/js/spacing/normal.d.ts +0 -4
  98. package/dist/js/spacing/normal.js +0 -13
  99. package/dist/js/typography/index.d.ts +0 -11
  100. package/dist/js/typography/index.js +0 -7
  101. package/dist/js/typography/normal.d.ts +0 -9
  102. package/dist/js/typography/normal.js +0 -19
  103. package/dist/json/colors/dark.json +0 -614
  104. package/dist/json/colors/dark_colorblind.json +0 -614
  105. package/dist/json/colors/dark_dimmed.json +0 -614
  106. package/dist/json/colors/dark_high_contrast.json +0 -614
  107. package/dist/json/colors/dark_tritanopia.json +0 -614
  108. package/dist/json/colors/light.json +0 -614
  109. package/dist/json/colors/light_colorblind.json +0 -614
  110. package/dist/json/colors/light_high_contrast.json +0 -614
  111. package/dist/json/colors/light_tritanopia.json +0 -614
  112. package/dist/json/spacing/normal.json +0 -11
  113. package/dist/json/typography/normal.json +0 -17
  114. package/dist/removed/colors.json +0 -432
  115. package/dist/scss/colors/_dark.scss +0 -452
  116. package/dist/scss/colors/_dark_colorblind.scss +0 -452
  117. package/dist/scss/colors/_dark_dimmed.scss +0 -452
  118. package/dist/scss/colors/_dark_high_contrast.scss +0 -452
  119. package/dist/scss/colors/_dark_tritanopia.scss +0 -452
  120. package/dist/scss/colors/_light.scss +0 -452
  121. package/dist/scss/colors/_light_colorblind.scss +0 -452
  122. package/dist/scss/colors/_light_high_contrast.scss +0 -452
  123. package/dist/scss/colors/_light_tritanopia.scss +0 -452
  124. package/dist/scss/spacing/_normal.scss +0 -11
  125. package/dist/scss/typography/_normal.scss +0 -15
  126. package/dist/ts/colors/dark.ts +0 -614
  127. package/dist/ts/colors/dark_colorblind.ts +0 -614
  128. package/dist/ts/colors/dark_dimmed.ts +0 -614
  129. package/dist/ts/colors/dark_high_contrast.ts +0 -614
  130. package/dist/ts/colors/dark_tritanopia.ts +0 -614
  131. package/dist/ts/colors/index.ts +0 -10
  132. package/dist/ts/colors/light.ts +0 -614
  133. package/dist/ts/colors/light_colorblind.ts +0 -614
  134. package/dist/ts/colors/light_high_contrast.ts +0 -614
  135. package/dist/ts/colors/light_tritanopia.ts +0 -614
  136. package/dist/ts/index.ts +0 -4
  137. package/dist/ts/spacing/index.ts +0 -2
  138. package/dist/ts/spacing/normal.ts +0 -11
  139. package/dist/ts/typography/index.ts +0 -2
  140. package/dist/ts/typography/normal.ts +0 -17
  141. package/tokens/base/size/size.json +0 -57
  142. package/tokens/base/typography/typography.json +0 -20
  143. package/tokens/functional/size/border.json +0 -48
  144. package/tokens/functional/size/breakpoints.json +0 -24
  145. package/tokens/functional/size/size-coarse.json +0 -27
  146. package/tokens/functional/size/size-fine.json +0 -27
  147. package/tokens/functional/size/size.json +0 -189
  148. package/tokens/functional/size/viewport.json +0 -24
  149. package/tokens/functional/typography/typography.json +0 -213
  150. package/tokens/removed/color.json +0 -421
  151. package/tokens-next-private/css/base/size/size.css +0 -19
  152. package/tokens-next-private/css/base/typography/typography.css +0 -6
  153. package/tokens-next-private/css/functional/motion/motion.css +0 -5
  154. package/tokens-next-private/css/functional/size/border.css +0 -14
  155. package/tokens-next-private/css/functional/size/breakpoints.css +0 -8
  156. package/tokens-next-private/css/functional/size/size-coarse.css +0 -7
  157. package/tokens-next-private/css/functional/size/size-fine.css +0 -7
  158. package/tokens-next-private/css/functional/size/size.css +0 -74
  159. package/tokens-next-private/css/functional/size/viewport.css +0 -6
  160. package/tokens-next-private/css/functional/themes/dark-colorblind.css +0 -1078
  161. package/tokens-next-private/css/functional/themes/dark-dimmed.css +0 -1078
  162. package/tokens-next-private/css/functional/themes/dark-high-contrast.css +0 -1078
  163. package/tokens-next-private/css/functional/themes/dark-tritanopia.css +0 -1078
  164. package/tokens-next-private/css/functional/themes/dark.css +0 -1078
  165. package/tokens-next-private/css/functional/themes/light-colorblind.css +0 -1078
  166. package/tokens-next-private/css/functional/themes/light-high-contrast.css +0 -1078
  167. package/tokens-next-private/css/functional/themes/light-tritanopia.css +0 -1078
  168. package/tokens-next-private/css/functional/themes/light.css +0 -1078
  169. package/tokens-next-private/css/functional/typography/typography.css +0 -47
  170. package/tokens-next-private/docs/base/size/size.json +0 -427
  171. package/tokens-next-private/docs/base/typography/typography.json +0 -54
  172. package/tokens-next-private/docs/functional/motion/motion.json +0 -47
  173. package/tokens-next-private/docs/functional/size/border.json +0 -234
  174. package/tokens-next-private/docs/functional/size/breakpoints.json +0 -152
  175. package/tokens-next-private/docs/functional/size/size-coarse.json +0 -41
  176. package/tokens-next-private/docs/functional/size/size-fine.json +0 -41
  177. package/tokens-next-private/docs/functional/size/size.json +0 -1838
  178. package/tokens-next-private/docs/functional/size/viewport.json +0 -80
  179. package/tokens-next-private/docs/functional/themes/dark-colorblind.json +0 -16155
  180. package/tokens-next-private/docs/functional/themes/dark-dimmed.json +0 -16159
  181. package/tokens-next-private/docs/functional/themes/dark-high-contrast.json +0 -16175
  182. package/tokens-next-private/docs/functional/themes/dark-tritanopia.json +0 -16161
  183. package/tokens-next-private/docs/functional/themes/dark.json +0 -16159
  184. package/tokens-next-private/docs/functional/themes/light-colorblind.json +0 -16123
  185. package/tokens-next-private/docs/functional/themes/light-high-contrast.json +0 -16125
  186. package/tokens-next-private/docs/functional/themes/light-tritanopia.json +0 -16115
  187. package/tokens-next-private/docs/functional/themes/light.json +0 -16113
  188. package/tokens-next-private/docs/functional/typography/typography.json +0 -663
  189. package/tokens-next-private/fallbacks/base/size/size.json +0 -19
  190. package/tokens-next-private/fallbacks/base/typography/typography.json +0 -6
  191. package/tokens-next-private/fallbacks/color-fallbacks.json +0 -260
  192. package/tokens-next-private/fallbacks/functional/motion/motion.json +0 -5
  193. package/tokens-next-private/fallbacks/functional/size/border.json +0 -14
  194. package/tokens-next-private/fallbacks/functional/size/breakpoints.json +0 -8
  195. package/tokens-next-private/fallbacks/functional/size/size-coarse.json +0 -5
  196. package/tokens-next-private/fallbacks/functional/size/size-fine.json +0 -5
  197. package/tokens-next-private/fallbacks/functional/size/size.json +0 -74
  198. package/tokens-next-private/fallbacks/functional/size/viewport.json +0 -8
  199. package/tokens-next-private/fallbacks/functional/typography/typography.json +0 -47
  200. package/tokens-next-private/internalCss/dark-colorblind.css +0 -1648
  201. package/tokens-next-private/internalCss/dark-dimmed.css +0 -1648
  202. package/tokens-next-private/internalCss/dark-high-contrast.css +0 -1648
  203. package/tokens-next-private/internalCss/dark-tritanopia.css +0 -1648
  204. package/tokens-next-private/internalCss/dark.css +0 -1648
  205. package/tokens-next-private/internalCss/light-colorblind.css +0 -1648
  206. package/tokens-next-private/internalCss/light-high-contrast.css +0 -1648
  207. package/tokens-next-private/internalCss/light-tritanopia.css +0 -1648
  208. package/tokens-next-private/internalCss/light.css +0 -1648
  209. package/tokens-next-private/removed/color.json +0 -421
  210. package/tokens-next-private/styleLint/base/size/size.json +0 -427
  211. package/tokens-next-private/styleLint/base/typography/typography.json +0 -54
  212. package/tokens-next-private/styleLint/functional/motion/motion.json +0 -47
  213. package/tokens-next-private/styleLint/functional/size/border.json +0 -234
  214. package/tokens-next-private/styleLint/functional/size/breakpoints.json +0 -152
  215. package/tokens-next-private/styleLint/functional/size/size-coarse.json +0 -41
  216. package/tokens-next-private/styleLint/functional/size/size-fine.json +0 -41
  217. package/tokens-next-private/styleLint/functional/size/size.json +0 -1838
  218. package/tokens-next-private/styleLint/functional/size/viewport.json +0 -80
  219. package/tokens-next-private/styleLint/functional/themes/dark-colorblind.json +0 -16155
  220. package/tokens-next-private/styleLint/functional/themes/dark-dimmed.json +0 -16159
  221. package/tokens-next-private/styleLint/functional/themes/dark-high-contrast.json +0 -16175
  222. package/tokens-next-private/styleLint/functional/themes/dark-tritanopia.json +0 -16161
  223. package/tokens-next-private/styleLint/functional/themes/dark.json +0 -16159
  224. package/tokens-next-private/styleLint/functional/themes/light-colorblind.json +0 -16123
  225. package/tokens-next-private/styleLint/functional/themes/light-high-contrast.json +0 -16125
  226. package/tokens-next-private/styleLint/functional/themes/light-tritanopia.json +0 -16115
  227. package/tokens-next-private/styleLint/functional/themes/light.json +0 -16113
  228. package/tokens-next-private/styleLint/functional/typography/typography.json +0 -663
  229. package/tokens-v2-private/css/tokens/base/size/size.css +0 -24
  230. package/tokens-v2-private/css/tokens/base/typography/typography.css +0 -11
  231. package/tokens-v2-private/css/tokens/functional/size/border.css +0 -17
  232. package/tokens-v2-private/css/tokens/functional/size/breakpoints.css +0 -13
  233. package/tokens-v2-private/css/tokens/functional/size/size-coarse.css +0 -11
  234. package/tokens-v2-private/css/tokens/functional/size/size-fine.css +0 -11
  235. package/tokens-v2-private/css/tokens/functional/size/size.css +0 -54
  236. package/tokens-v2-private/css/tokens/functional/size/viewport.css +0 -6
  237. package/tokens-v2-private/css/tokens/functional/typography/typography.css +0 -47
  238. package/tokens-v2-private/docs/docValues.json +0 -2209
  239. package/tokens-v2-private/js/module/tokens/base/size/size.js +0 -266
  240. package/tokens-v2-private/js/module/tokens/base/typography/typography.js +0 -77
  241. package/tokens-v2-private/js/module/tokens/functional/size/border.js +0 -165
  242. package/tokens-v2-private/js/module/tokens/functional/size/breakpoints.js +0 -101
  243. package/tokens-v2-private/js/module/tokens/functional/size/size-coarse.js +0 -73
  244. package/tokens-v2-private/js/module/tokens/functional/size/size-fine.js +0 -73
  245. package/tokens-v2-private/js/module/tokens/functional/size/size.js +0 -824
  246. package/tokens-v2-private/js/module/tokens/functional/size/viewport.js +0 -101
  247. package/tokens-v2-private/js/module/tokens/functional/typography/typography.js +0 -809
  248. package/tokens-v2-private/js/tokens/base/size/size.js +0 -22
  249. package/tokens-v2-private/js/tokens/base/typography/typography.js +0 -9
  250. package/tokens-v2-private/js/tokens/functional/size/border.js +0 -15
  251. package/tokens-v2-private/js/tokens/functional/size/breakpoints.js +0 -11
  252. package/tokens-v2-private/js/tokens/functional/size/size-coarse.js +0 -8
  253. package/tokens-v2-private/js/tokens/functional/size/size-fine.js +0 -8
  254. package/tokens-v2-private/js/tokens/functional/size/size.js +0 -52
  255. package/tokens-v2-private/js/tokens/functional/size/viewport.js +0 -11
  256. package/tokens-v2-private/js/tokens/functional/typography/typography.js +0 -45
  257. package/tokens-v2-private/scss/tokens/base/size/size.scss +0 -21
  258. package/tokens-v2-private/scss/tokens/base/typography/typography.scss +0 -8
  259. package/tokens-v2-private/scss/tokens/functional/size/border.scss +0 -14
  260. package/tokens-v2-private/scss/tokens/functional/size/breakpoints.scss +0 -10
  261. package/tokens-v2-private/scss/tokens/functional/size/size-coarse.scss +0 -7
  262. package/tokens-v2-private/scss/tokens/functional/size/size-fine.scss +0 -7
  263. package/tokens-v2-private/scss/tokens/functional/size/size.scss +0 -51
  264. package/tokens-v2-private/scss/tokens/functional/size/viewport.scss +0 -10
  265. package/tokens-v2-private/scss/tokens/functional/typography/typography.scss +0 -44
  266. package/tokens-v2-private/ts/tokens/base/size/size.d.ts +0 -31
  267. package/tokens-v2-private/ts/tokens/base/size/size.js +0 -30
  268. package/tokens-v2-private/ts/tokens/base/typography/typography.d.ts +0 -20
  269. package/tokens-v2-private/ts/tokens/base/typography/typography.js +0 -19
  270. package/tokens-v2-private/ts/tokens/functional/size/border.d.ts +0 -28
  271. package/tokens-v2-private/ts/tokens/functional/size/border.js +0 -27
  272. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.d.ts +0 -20
  273. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.js +0 -19
  274. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.d.ts +0 -29
  275. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.js +0 -28
  276. package/tokens-v2-private/ts/tokens/functional/size/size-fine.d.ts +0 -29
  277. package/tokens-v2-private/ts/tokens/functional/size/size-fine.js +0 -28
  278. package/tokens-v2-private/ts/tokens/functional/size/size.d.ts +0 -103
  279. package/tokens-v2-private/ts/tokens/functional/size/size.js +0 -102
  280. package/tokens-v2-private/ts/tokens/functional/size/viewport.d.ts +0 -20
  281. package/tokens-v2-private/ts/tokens/functional/size/viewport.js +0 -19
  282. package/tokens-v2-private/ts/tokens/functional/typography/typography.d.ts +0 -131
  283. package/tokens-v2-private/ts/tokens/functional/typography/typography.js +0 -130
package/build.js DELETED
@@ -1,578 +0,0 @@
1
- const glob = require('fast-glob')
2
- const StyleDictionary = require('style-dictionary')
3
-
4
- const {fileHeader, formattedVariables} = StyleDictionary.formatHelpers
5
-
6
- //-----
7
- // functions to be extracted
8
- // TODO: extract to a separate files
9
-
10
- const pathToKebabCase = token => token.path.join('-')
11
-
12
- const pathToDotNotation = token => token.path.join('.')
13
-
14
- const capitalize = string => string[0].toUpperCase() + string.slice(1)
15
-
16
- const pathToPascalCase = token => token.path.map(tokenPathItems => capitalize(tokenPathItems)).join('')
17
-
18
- // REGISTER THE CUSTOM TRANFORMS
19
-
20
- /**
21
- * transform: scss variable names
22
- * example: `$namespace-item-variant-property-modifier`
23
- */
24
- StyleDictionary.registerTransform({
25
- name: 'name/scss',
26
- type: 'name',
27
- transformer: pathToKebabCase,
28
- })
29
-
30
- /**
31
- * transform: css variable names
32
- * example: `--namespace-item-variant-property-modifier`
33
- */
34
- StyleDictionary.registerTransform({
35
- name: 'name/css',
36
- type: 'name',
37
- transformer: pathToKebabCase,
38
- })
39
-
40
- /**
41
- * transform: js variable names
42
- * example: `namespace.item.variant.property.modifier`
43
- */
44
- StyleDictionary.registerTransform({
45
- name: 'name/js',
46
- type: 'name',
47
- transformer: pathToDotNotation,
48
- })
49
-
50
- /**
51
- * transform: js es6 variable names
52
- * example: `NamespaceItemVariantPropertyModifier`
53
- */
54
- StyleDictionary.registerTransform({
55
- name: 'name/js/es6',
56
- type: 'name',
57
- transformer: pathToPascalCase,
58
- })
59
-
60
- // find values with px unit
61
- function isPx(value) {
62
- return /[\d.]+px$/.test(value)
63
- }
64
-
65
- // transform: px to rem
66
- StyleDictionary.registerTransform({
67
- name: 'pxToRem',
68
- type: 'value',
69
- transformer: token => {
70
- if (isPx(token.value)) {
71
- const baseFontSize = 16
72
- const floatValue = parseFloat(token.value.replace('px', ''))
73
-
74
- if (isNaN(floatValue)) {
75
- return token.value
76
- }
77
-
78
- if (floatValue === 0) {
79
- return '0'
80
- }
81
-
82
- if (token.name.includes('lineHeight')) {
83
- return `${floatValue / baseFontSize}`
84
- }
85
-
86
- return `${floatValue / baseFontSize}rem`
87
- }
88
- return token.value
89
- },
90
- })
91
-
92
- //-----
93
-
94
- // ts output
95
- StyleDictionary.registerTransform({
96
- name: 'attribute/typescript',
97
- type: 'attribute',
98
- transformer: token => {
99
- return {
100
- typescript: {
101
- // these transforms will need to match the ones you use for typescript
102
- // or you can "chain" the transforms and use token.name and token.value
103
- // like scss and less transforms do.
104
- name: token.path.slice(1).join('.'),
105
- value: token.value,
106
- },
107
- }
108
- },
109
- })
110
-
111
- // css output
112
- StyleDictionary.registerTransform({
113
- name: 'attribute/css',
114
- type: 'attribute',
115
- transformer: token => {
116
- const tokenName = token.path.slice(1).join('-')
117
- return {
118
- css: {
119
- name: `--${tokenName}`,
120
- value: token.value,
121
- },
122
- }
123
- },
124
- })
125
-
126
- // transform: composite typography to shorthands
127
- StyleDictionary.registerTransform({
128
- name: 'typography/shorthand',
129
- type: 'value',
130
- transitive: true,
131
- matcher: token => token.type === 'typography',
132
- transformer: token => {
133
- const {value} = token
134
-
135
- // if lineHeight has value, include in shorthand
136
- if (value.lineHeight) {
137
- return `${value.fontWeight} ${value.fontSize}/${value.lineHeight} ${value.fontFamily}`
138
- }
139
-
140
- return `${value.fontWeight} ${value.fontSize} ${value.fontFamily}`
141
- },
142
- })
143
-
144
- // REGISTER THE CUSTOM TRANFORM GROUPS
145
-
146
- StyleDictionary.registerTransformGroup({
147
- name: 'css',
148
- transforms: ['name/css', 'pxToRem', 'typography/shorthand'],
149
- })
150
-
151
- StyleDictionary.registerTransformGroup({
152
- name: 'scss',
153
- transforms: ['name/scss', 'pxToRem', 'typography/shorthand'],
154
- })
155
-
156
- // REGISTER A CUSTOM FORMAT
157
-
158
- // wrap mobile tokens in media query
159
- StyleDictionary.registerFormat({
160
- name: 'css/touch-target-mobile',
161
- formatter({dictionary, file, options}) {
162
- const {outputReferences} = options
163
- return `${fileHeader({file})}
164
- @media (pointer: coarse) { :root {\n${formattedVariables({
165
- format: 'css',
166
- dictionary,
167
- outputReferences,
168
- })}\n}}\n`
169
- },
170
- })
171
-
172
- // wrap desktop tokens in media query
173
- StyleDictionary.registerFormat({
174
- name: 'css/touch-target-desktop',
175
- formatter({dictionary, file, options}) {
176
- const {outputReferences} = options
177
- return `${fileHeader({file})}
178
- @media (pointer: fine) { :root {\n${formattedVariables({
179
- format: 'css',
180
- dictionary,
181
- outputReferences,
182
- })}\n}}\n`
183
- },
184
- })
185
-
186
- StyleDictionary.registerFormat({
187
- name: 'custom/format/custom-media',
188
- formatter({dictionary}) {
189
- return dictionary.allProperties
190
- .map(prop => {
191
- const {value, name} = prop
192
-
193
- return `@custom-media --${name}-viewport ${value};`
194
- })
195
- .join('\n')
196
- },
197
- })
198
-
199
- // format docs
200
- StyleDictionary.registerFormat({
201
- name: 'json/docs',
202
- formatter({dictionary}) {
203
- const groupedTokens = groupBy(dictionary.allProperties, 'filePath')
204
-
205
- return JSON.stringify(groupedTokens, null, 2)
206
- },
207
- })
208
-
209
- /**
210
- * Replacement format for javascript/module
211
- */
212
- StyleDictionary.registerFormat({
213
- name: 'javascript/module-v2',
214
- formatter({dictionary, file}) {
215
- const recursiveleyFlattenDictionary = obj => {
216
- const tree = {}
217
- if (typeof obj !== 'object' || Array.isArray(obj)) {
218
- return obj
219
- }
220
-
221
- if (obj.hasOwnProperty('value')) {
222
- return obj.value
223
- } else {
224
- for (const name in obj) {
225
- if (obj.hasOwnProperty(name)) {
226
- tree[name] = recursiveleyFlattenDictionary(obj[name])
227
- }
228
- }
229
- }
230
- return tree
231
- }
232
-
233
- return `${fileHeader({file})}
234
-
235
- module.exports = ${JSON.stringify(recursiveleyFlattenDictionary(dictionary.tokens), null, 2)}`
236
- },
237
- })
238
-
239
- /**
240
- * Replacement format for typescript/module-declarations
241
- * Type schema corresponds to javascript/module-v2 format
242
- */
243
- StyleDictionary.registerFormat({
244
- name: 'typescript/module-declarations-v2',
245
- formatter({dictionary, options, file}) {
246
- const {moduleName = `tokens`} = options
247
-
248
- const getType = value => {
249
- switch (typeof value) {
250
- case 'string':
251
- return 'string'
252
- case 'number':
253
- return 'number'
254
- default:
255
- return 'any'
256
- }
257
- }
258
-
259
- const recursiveTypeGeneration = obj => {
260
- const tree = {}
261
- const shortHandSizes = ['large', 'medium', 'small']
262
- if (typeof obj !== 'object' || Array.isArray(obj)) {
263
- return obj
264
- }
265
-
266
- if (obj.hasOwnProperty('value') && typeof obj.value === 'string') {
267
- return getType(obj.value)
268
- } else {
269
- for (const name in obj) {
270
- if ((obj.hasOwnProperty(name) && obj.name === 'shorthand') || shortHandSizes.includes(obj.name)) {
271
- for (const shorthandKey in obj.value) {
272
- tree[shorthandKey] = getType(obj.value[shorthandKey])
273
- }
274
- return tree
275
- } else if (obj.hasOwnProperty(name)) {
276
- tree[name] = recursiveTypeGeneration(obj[name])
277
- }
278
- }
279
- }
280
- return tree
281
- }
282
-
283
- const output = `${fileHeader({file})}
284
-
285
- declare const ${moduleName}: ${JSON.stringify(recursiveTypeGeneration(dictionary.tokens), null, 2)}
286
- export default ${moduleName};`
287
-
288
- return output
289
- .replace(/"any"/g, 'any')
290
- .replace(/"string"/g, 'string')
291
- .replace(/"number"/g, 'number')
292
- },
293
- })
294
-
295
- /**
296
- * @name groupBy
297
- * @description Equivalent to lodash _.groupBy, to avoid creating another package dependency for users
298
- * @param {Array|Object} The collection to iterate over.
299
- * @param {Function} The iteratee to transform keys.
300
- * @returns {Object} Returns the composed aggregate object.
301
- */
302
- function groupBy(collection, iteratee = x => x) {
303
- const current = typeof iteratee === 'function' ? iteratee : ({[iteratee]: prop}) => prop
304
-
305
- const array = Array.isArray(collection) ? collection : Object.values(collection)
306
-
307
- return array.reduce((acc, item) => {
308
- const value = current(item)
309
-
310
- acc[value] = acc[value] || []
311
-
312
- acc[value].push(item)
313
-
314
- return acc
315
- }, {})
316
- }
317
-
318
- /**
319
- * @name build
320
- * @description
321
- * Used to generate design tokens programmatically using StyleDictionary
322
- * Called internally to build primitives and exported for self-serve use
323
- *
324
- * @param {Object} options
325
- * @param {string} options.source glob or file path to a JSON object of tokens
326
- * @param {string} options.outputPath location to write the output files
327
- * @param {string} options.namespace a custom namespace to use for the output files
328
- * @param {Platform} options.platforms add custom platform configurations to style-dictionary
329
- * @example
330
- * buildPrimitives({
331
- * source: [`src/colors.json`],
332
- * outputPath: 'dist',
333
- * namespace: 'primer',
334
- * platforms: {...}
335
- * })
336
- */
337
- function buildPrimitives(
338
- {source, outputPath = 'tokens-v2-private', include, platforms, namespace = 'primer'},
339
- _StyleDictionary = StyleDictionary,
340
- ) {
341
- // eslint-disable-next-line no-console
342
- console.log('Build started...')
343
- // eslint-disable-next-line no-console
344
- console.log('\n==============================================')
345
-
346
- const customParseConfig = {
347
- parsers: [
348
- {
349
- pattern: /\.json$/,
350
- parse: ({contents, filePath}) => {
351
- try {
352
- let mutableContent = JSON.stringify(contents)
353
-
354
- if (filePath.includes('/functional/')) {
355
- mutableContent = mutableContent.replace(/<namespace>/g, namespace)
356
- }
357
-
358
- const parsed = JSON.parse(mutableContent)
359
-
360
- return JSON.parse(parsed)
361
- } catch (error) {
362
- // eslint-disable-next-line no-console
363
- console.log(error)
364
- }
365
- },
366
- },
367
- ],
368
- }
369
-
370
- const getConfig = files => {
371
- const defaultPlatformConfig = {
372
- css: {
373
- buildPath: `${outputPath}/css/`,
374
- transformGroup: 'css',
375
- // map the array of token file paths to style dictionary output files
376
- files: files.map(filePath => {
377
- return {
378
- format: `css/variables`,
379
- destination: filePath.replace(`.json`, `.css`),
380
- filter: token => token.filePath === filePath,
381
- options: {
382
- outputReferences: true,
383
- },
384
- }
385
- }),
386
- },
387
- cssViewport: {
388
- buildPath: `${outputPath}/css/tokens/functional/size/`,
389
- transformGroup: 'css',
390
- files: [
391
- {
392
- filter: token => token.filePath.includes('viewport'),
393
- format: 'custom/format/custom-media',
394
- destination: 'viewport.css',
395
- },
396
- ],
397
- },
398
- scss: {
399
- buildPath: `${outputPath}/scss/`,
400
- transformGroup: 'scss',
401
- // map the array of token file paths to style dictionary output files
402
- files: files.map(filePath => {
403
- return {
404
- format: `scss/variables`,
405
- destination: filePath.replace(`.json`, `.scss`),
406
- filter: token => token.filePath === filePath,
407
- options: {
408
- outputReferences: true,
409
- },
410
- }
411
- }),
412
- },
413
- js: {
414
- buildPath: `${outputPath}/js/`,
415
- transforms: ['name/js/es6', 'pxToRem'],
416
- // map the array of token file paths to style dictionary output files
417
- files: files.map(filePath => {
418
- return {
419
- format: `javascript/es6`,
420
- destination: filePath.replace(`.json`, `.js`),
421
- filter: token => token.filePath === filePath,
422
- }
423
- }),
424
- },
425
- jsModule: {
426
- buildPath: `${outputPath}/js/module/`,
427
- transforms: ['pxToRem'],
428
- // map the array of token file paths to style dictionary output files
429
- files: files.map(filePath => {
430
- return {
431
- format: `javascript/module`,
432
- destination: filePath.replace(`.json`, `.js`),
433
- filter: token => token.filePath === filePath,
434
- }
435
- }),
436
- },
437
- tsTypes: {
438
- buildPath: `${outputPath}/ts/`,
439
- transforms: ['pxToRem'],
440
- // map the array of token file paths to style dictionary output files
441
- files: files.map(filePath => {
442
- return {
443
- format: `typescript/module-declarations-v2`,
444
- destination: filePath.replace(`.json`, `.d.ts`),
445
- filter: token => token.filePath === filePath,
446
- }
447
- }),
448
- },
449
- ts: {
450
- buildPath: `${outputPath}/ts/`,
451
- transforms: ['pxToRem'],
452
- // map the array of token file paths to style dictionary output files
453
- files: files.map(filePath => {
454
- return {
455
- format: `javascript/module-v2`,
456
- destination: filePath.replace(`.json`, `.js`),
457
- filter: token => token.filePath === filePath,
458
- }
459
- }),
460
- },
461
- }
462
-
463
- const config = {
464
- ...{include: include ? [include] : undefined},
465
- source: files,
466
- ...customParseConfig,
467
- platforms: platforms ? platforms : defaultPlatformConfig,
468
- }
469
- return config
470
- }
471
-
472
- //build all tokens
473
- _StyleDictionary
474
- .extend({
475
- ...getConfig(glob.sync([...source])),
476
- })
477
- .buildAllPlatforms()
478
- }
479
-
480
- /**
481
- * @name init
482
- * @description
483
- * Triggers the build for @primer/primitive default tokens
484
- * from an npm script. Internal use only. Use `build` for self-serve.
485
- * @private
486
- */
487
- function _init() {
488
- const outputPath = 'tokens-v2-private'
489
- //build all tokens
490
- buildPrimitives({
491
- source: [`tokens/**/*.json`, `!tokens/**/size-*.json`, `!tokens/**/color/*.json`, `!tokens/**/shadow/*.json`],
492
- outputPath,
493
- })
494
-
495
- //build size fine
496
- buildPrimitives({
497
- source: [`tokens/functional/size/size-fine.json`, `tokens/base/size/size.json`],
498
- outputPath,
499
- })
500
-
501
- //build size coarse
502
- buildPrimitives({
503
- source: [`tokens/functional/size/size-coarse.json`, `tokens/base/size/size.json`],
504
- outputPath,
505
- })
506
-
507
- buildPrimitives({
508
- source: [`tokens/base/size/size.json`, `tokens/functional/size/size-fine.json`],
509
- outputPath,
510
- platforms: {
511
- css: {
512
- buildPath: `${outputPath}/css/`,
513
- transformGroup: 'css',
514
- files: [
515
- {
516
- destination: `tokens/functional/size/size-fine.css`,
517
- format: `css/touch-target-desktop`,
518
- filter: token => token.filePath.includes('fine'),
519
- options: {
520
- outputReferences: true,
521
- },
522
- },
523
- ],
524
- },
525
- },
526
- })
527
-
528
- buildPrimitives({
529
- source: [`tokens/base/size/size.json`, `tokens/functional/size/size-coarse.json`],
530
- platforms: {
531
- css: {
532
- buildPath: `${outputPath}/css/`,
533
- transformGroup: 'css',
534
- files: [
535
- {
536
- destination: `tokens/functional/size/size-coarse.css`,
537
- format: `css/touch-target-mobile`,
538
- filter: token => token.filePath.includes('coarse'),
539
- options: {
540
- outputReferences: true,
541
- },
542
- },
543
- ],
544
- },
545
- },
546
- })
547
-
548
- //build docs data
549
- buildPrimitives({
550
- source: [`tokens/**/*.json`, `!tokens/**/color/*.json`, `!tokens/**/shadow/*.json`],
551
- outputPath,
552
- platforms: {
553
- docs: {
554
- buildPath: `${outputPath}/docs/`,
555
- transformGroup: 'css',
556
- files: [
557
- {
558
- format: 'json/docs',
559
- destination: 'docValues.json',
560
- options: {
561
- outputReferences: false,
562
- },
563
- },
564
- ],
565
- },
566
- },
567
- })
568
- }
569
-
570
- module.exports = {
571
- buildPrimitives,
572
- _init,
573
- StyleDictionary,
574
- pathToKebabCase,
575
- pathToDotNotation,
576
- capitalize,
577
- pathToPascalCase,
578
- }
@@ -1,7 +0,0 @@
1
- {
2
- "mktg.btn.bg": null,
3
- "mktg.btn.shadow.outline": null,
4
- "mktg.btn.shadow.focus": null,
5
- "mktg.btn.shadow.hover": null,
6
- "mktg.btn.shadow.hoverMuted": null
7
- }