@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
@@ -2,34 +2,83 @@
2
2
  "fontStack": {
3
3
  "system": {
4
4
  "$value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'",
5
- "$type": "fontFamily"
5
+ "$type": "fontFamily",
6
+ "$extensions": {
7
+ "org.primer.figma": {
8
+ "collection": "typography",
9
+ "scopes": ["all"]
10
+ }
11
+ }
6
12
  },
7
13
  "sansSerif": {
8
14
  "$value": "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'",
9
- "$type": "fontFamily"
15
+ "$type": "fontFamily",
16
+ "$extensions": {
17
+ "org.primer.figma": {
18
+ "collection": "typography",
19
+ "scopes": ["all"]
20
+ }
21
+ }
10
22
  },
11
23
  "monospace": {
12
24
  "$value": "ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace",
13
- "$type": "fontFamily"
25
+ "$type": "fontFamily",
26
+ "$extensions": {
27
+ "org.primer.figma": {
28
+ "collection": "typography",
29
+ "scopes": ["all"]
30
+ }
31
+ }
14
32
  }
15
33
  },
16
34
  "text": {
17
35
  "display": {
18
36
  "lineBoxHeight": {
19
- "$value": "56px",
20
- "$type": "dimension"
37
+ "$value": 1.4,
38
+ "$type": "number",
39
+ "$extensions": {
40
+ "org.primer.data": {
41
+ "fontSize": 40
42
+ },
43
+ "org.primer.figma": {
44
+ "collection": "typography",
45
+ "scopes": ["all"],
46
+ "fontSizeInPx": 40
47
+ }
48
+ }
21
49
  },
22
50
  "size": {
23
51
  "$value": "40px",
24
- "$type": "dimension"
52
+ "$type": "dimension",
53
+ "$extensions": {
54
+ "org.primer.figma": {
55
+ "collection": "typography",
56
+ "scopes": ["all"]
57
+ }
58
+ }
25
59
  },
26
60
  "lineHeight": {
27
61
  "$value": 1.4,
28
- "$type": "number"
62
+ "$type": "number",
63
+ "$extensions": {
64
+ "org.primer.data": {
65
+ "fontSize": 40
66
+ },
67
+ "org.primer.figma": {
68
+ "collection": "typography",
69
+ "scopes": ["all"]
70
+ }
71
+ }
29
72
  },
30
73
  "weight": {
31
74
  "$value": "{base.text.weight.medium}",
32
- "$type": "fontWeight"
75
+ "$type": "fontWeight",
76
+ "$extensions": {
77
+ "org.primer.figma": {
78
+ "collection": "typography",
79
+ "scopes": ["all"]
80
+ }
81
+ }
33
82
  },
34
83
  "shorthand": {
35
84
  "$value": {
@@ -46,43 +95,106 @@
46
95
  "size": {
47
96
  "large": {
48
97
  "$value": "32px",
49
- "$type": "dimension"
98
+ "$type": "dimension",
99
+ "$extensions": {
100
+ "org.primer.figma": {
101
+ "collection": "typography",
102
+ "scopes": ["all"]
103
+ }
104
+ }
50
105
  },
51
106
  "medium": {
52
107
  "$value": "20px",
53
- "$type": "dimension"
108
+ "$type": "dimension",
109
+ "$extensions": {
110
+ "org.primer.figma": {
111
+ "collection": "typography",
112
+ "scopes": ["all"]
113
+ }
114
+ }
54
115
  },
55
116
  "small": {
56
117
  "$value": "16px",
57
- "$type": "dimension"
118
+ "$type": "dimension",
119
+ "$extensions": {
120
+ "org.primer.figma": {
121
+ "collection": "typography",
122
+ "scopes": ["all"]
123
+ }
124
+ }
58
125
  }
59
126
  },
60
127
  "lineHeight": {
61
128
  "large": {
62
129
  "$value": 1.5,
63
- "$type": "number"
130
+ "$type": "number",
131
+ "$extensions": {
132
+ "org.primer.data": {
133
+ "fontSize": 32
134
+ },
135
+ "org.primer.figma": {
136
+ "collection": "typography",
137
+ "scopes": ["all"]
138
+ }
139
+ }
64
140
  },
65
141
  "medium": {
66
142
  "$value": 1.6,
67
- "$type": "number"
143
+ "$type": "number",
144
+ "$extensions": {
145
+ "org.primer.data": {
146
+ "fontSize": 20
147
+ },
148
+ "org.primer.figma": {
149
+ "collection": "typography",
150
+ "scopes": ["all"]
151
+ }
152
+ }
68
153
  },
69
154
  "small": {
70
155
  "$value": 1.5,
71
- "$type": "number"
156
+ "$type": "number",
157
+ "$extensions": {
158
+ "org.primer.data": {
159
+ "fontSize": 16
160
+ },
161
+ "org.primer.figma": {
162
+ "collection": "typography",
163
+ "scopes": ["all"]
164
+ }
165
+ }
72
166
  }
73
167
  },
74
168
  "weight": {
75
169
  "large": {
76
170
  "$value": "{base.text.weight.semibold}",
77
- "$type": "fontWeight"
171
+ "$type": "fontWeight",
172
+ "$extensions": {
173
+ "org.primer.figma": {
174
+ "collection": "typography",
175
+ "scopes": ["all"]
176
+ }
177
+ }
78
178
  },
79
179
  "medium": {
80
180
  "$value": "{base.text.weight.semibold}",
81
- "$type": "fontWeight"
181
+ "$type": "fontWeight",
182
+ "$extensions": {
183
+ "org.primer.figma": {
184
+ "collection": "typography",
185
+ "scopes": ["all"]
186
+ }
187
+ }
82
188
  },
83
189
  "small": {
84
190
  "$value": "{base.text.weight.semibold}",
85
- "$type": "fontWeight"
191
+ "$type": "fontWeight",
192
+ "$extensions": {
193
+ "org.primer.figma": {
194
+ "collection": "typography",
195
+ "scopes": ["all"]
196
+ }
197
+ }
86
198
  }
87
199
  },
88
200
  "shorthand": {
@@ -121,15 +233,33 @@
121
233
  "subtitle": {
122
234
  "size": {
123
235
  "$value": "20px",
124
- "$type": "dimension"
236
+ "$type": "dimension",
237
+ "$extensions": {
238
+ "org.primer.figma": {
239
+ "collection": "typography",
240
+ "scopes": ["all"]
241
+ }
242
+ }
125
243
  },
126
244
  "lineHeight": {
127
245
  "$value": 1.6,
128
- "$type": "number"
246
+ "$type": "number",
247
+ "$extensions": {
248
+ "org.primer.figma": {
249
+ "collection": "typography",
250
+ "scopes": ["all"]
251
+ }
252
+ }
129
253
  },
130
254
  "weight": {
131
255
  "$value": "{base.text.weight.normal}",
132
- "$type": "fontWeight"
256
+ "$type": "fontWeight",
257
+ "$extensions": {
258
+ "org.primer.figma": {
259
+ "collection": "typography",
260
+ "scopes": ["all"]
261
+ }
262
+ }
133
263
  },
134
264
  "shorthand": {
135
265
  "$value": {
@@ -146,29 +276,74 @@
146
276
  "size": {
147
277
  "large": {
148
278
  "$value": "16px",
149
- "$type": "dimension"
279
+ "$type": "dimension",
280
+ "$extensions": {
281
+ "org.primer.figma": {
282
+ "collection": "typography",
283
+ "scopes": ["all"]
284
+ }
285
+ }
150
286
  },
151
287
  "medium": {
152
288
  "$value": "14px",
153
- "$type": "dimension"
289
+ "$type": "dimension",
290
+ "$extensions": {
291
+ "org.primer.figma": {
292
+ "collection": "typography",
293
+ "scopes": ["all"]
294
+ }
295
+ }
154
296
  },
155
297
  "small": {
156
298
  "$value": "12px",
157
- "$type": "dimension"
299
+ "$type": "dimension",
300
+ "$extensions": {
301
+ "org.primer.figma": {
302
+ "collection": "typography",
303
+ "scopes": ["all"]
304
+ }
305
+ }
158
306
  }
159
307
  },
160
308
  "lineHeight": {
161
309
  "large": {
162
310
  "$value": 1.5,
163
- "$type": "number"
311
+ "$type": "number",
312
+ "$extensions": {
313
+ "org.primer.data": {
314
+ "fontSize": 16
315
+ },
316
+ "org.primer.figma": {
317
+ "collection": "typography",
318
+ "scopes": ["all"]
319
+ }
320
+ }
164
321
  },
165
322
  "medium": {
166
323
  "$value": 1.4285,
167
- "$type": "number"
324
+ "$type": "number",
325
+ "$extensions": {
326
+ "org.primer.data": {
327
+ "fontSize": 14
328
+ },
329
+ "org.primer.figma": {
330
+ "collection": "typography",
331
+ "scopes": ["all"]
332
+ }
333
+ }
168
334
  },
169
335
  "small": {
170
336
  "$value": 1.6666,
171
- "$type": "number"
337
+ "$type": "number",
338
+ "$extensions": {
339
+ "org.primer.data": {
340
+ "fontSize": 12
341
+ },
342
+ "org.primer.figma": {
343
+ "collection": "typography",
344
+ "scopes": ["all"]
345
+ }
346
+ }
172
347
  }
173
348
  },
174
349
  "weight": {
@@ -211,15 +386,36 @@
211
386
  "caption": {
212
387
  "size": {
213
388
  "$value": "12px",
214
- "$type": "dimension"
389
+ "$type": "dimension",
390
+ "$extensions": {
391
+ "org.primer.figma": {
392
+ "collection": "typography",
393
+ "scopes": ["all"]
394
+ }
395
+ }
215
396
  },
216
397
  "lineHeight": {
217
398
  "$value": 1.3333,
218
- "$type": "number"
399
+ "$type": "number",
400
+ "$extensions": {
401
+ "org.primer.data": {
402
+ "fontSize": 12
403
+ },
404
+ "org.primer.figma": {
405
+ "collection": "typography",
406
+ "scopes": ["all"]
407
+ }
408
+ }
219
409
  },
220
410
  "weight": {
221
411
  "$value": "{base.text.weight.normal}",
222
- "$type": "fontWeight"
412
+ "$type": "fontWeight",
413
+ "$extensions": {
414
+ "org.primer.figma": {
415
+ "collection": "typography",
416
+ "scopes": ["all"]
417
+ }
418
+ }
223
419
  },
224
420
  "shorthand": {
225
421
  "$value": {
@@ -235,15 +431,36 @@
235
431
  "codeBlock": {
236
432
  "size": {
237
433
  "$value": "13px",
238
- "$type": "dimension"
434
+ "$type": "dimension",
435
+ "$extensions": {
436
+ "org.primer.figma": {
437
+ "collection": "typography",
438
+ "scopes": ["all"]
439
+ }
440
+ }
239
441
  },
240
442
  "lineHeight": {
241
443
  "$value": 1.5385,
242
- "$type": "number"
444
+ "$type": "number",
445
+ "$extensions": {
446
+ "org.primer.data": {
447
+ "fontSize": 13
448
+ },
449
+ "org.primer.figma": {
450
+ "collection": "typography",
451
+ "scopes": ["all"]
452
+ }
453
+ }
243
454
  },
244
455
  "weight": {
245
456
  "$value": "{base.text.weight.normal}",
246
- "$type": "fontWeight"
457
+ "$type": "fontWeight",
458
+ "$extensions": {
459
+ "org.primer.figma": {
460
+ "collection": "typography",
461
+ "scopes": ["all"]
462
+ }
463
+ }
247
464
  },
248
465
  "shorthand": {
249
466
  "$value": {
@@ -259,11 +476,23 @@
259
476
  "codeInline": {
260
477
  "size": {
261
478
  "$value": "0.9285em",
262
- "$type": "dimension"
479
+ "$type": "dimension",
480
+ "$extensions": {
481
+ "org.primer.figma": {
482
+ "collection": "typography",
483
+ "scopes": ["all"]
484
+ }
485
+ }
263
486
  },
264
487
  "weight": {
265
488
  "$value": "{base.text.weight.normal}",
266
- "$type": "fontWeight"
489
+ "$type": "fontWeight",
490
+ "$extensions": {
491
+ "org.primer.figma": {
492
+ "collection": "typography",
493
+ "scopes": ["all"]
494
+ }
495
+ }
267
496
  },
268
497
  "shorthand": {
269
498
  "$value": {
@@ -0,0 +1,33 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+ import {isNumber} from '../filters'
3
+ /**
4
+ * takes a value and returns it if its a px string if it is a float and the token has a fontSize value in extensions['org.primer.data']
5
+ * @param value
6
+ * @returns string
7
+ */
8
+ export const convertFloatToPixel = (token: StyleDictionary.TransformedToken) => {
9
+ // short circut if value is not a number
10
+ if (
11
+ typeof token.value !== 'number' ||
12
+ !token.$extensions?.['org.primer.data']?.fontSize ||
13
+ typeof token.$extensions?.['org.primer.data']?.fontSize !== 'number'
14
+ ) {
15
+ return token.value
16
+ }
17
+ // convert value
18
+ const convertedValue = token.$extensions?.['org.primer.data']?.fontSize * token.value
19
+ // return converted value
20
+ return convertedValue === 0 ? 0 : `${Math.round(convertedValue)}px`
21
+ }
22
+ /**
23
+ * @description converts a float value to a pixel value based on the provided fontSize on the tokersn extension
24
+ * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts)
25
+ * @matcher matches all tokens of $type `isNumber`
26
+ * @transformer returns a pixel string
27
+ */
28
+ export const floatToPixel: StyleDictionary.Transform = {
29
+ type: `value`,
30
+ transitive: true,
31
+ matcher: isNumber,
32
+ transformer: (token: StyleDictionary.TransformedToken): string => convertFloatToPixel(token),
33
+ }
@@ -1,8 +1,7 @@
1
1
  import type StyleDictionary from 'style-dictionary'
2
2
  import {isFontFamily} from '../filters'
3
3
  import {getTokenValue} from './utilities/getTokenValue'
4
-
5
- const hasSpaceInName = (string: string) => /\s/g.test(string)
4
+ import {hasSpaceInString} from './utilities/hasSpaceInString'
6
5
  /**
7
6
  * takes a value and returns it if its a string or concats strings in an array quoting strings with spaces
8
7
  * @param value
@@ -18,7 +17,7 @@ export const parseFontFamily = (value: unknown): string => {
18
17
  if (typeof string !== 'string') {
19
18
  throw new Error(`Invalid value in array ${string}, must be a string`)
20
19
  }
21
- return hasSpaceInName(string) ? `'${string}'` : string
20
+ return hasSpaceInString(string) ? `'${string}'` : string
22
21
  })
23
22
  .join(', ')
24
23
  }
@@ -28,7 +27,7 @@ export const parseFontFamily = (value: unknown): string => {
28
27
  * @description converts fontFamily tokens value to string
29
28
  * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts)
30
29
  * @matcher matches all tokens of $type `fontFamily`
31
- * @transformer returns a number
30
+ * @transformer returns a string
32
31
  */
33
32
  export const fontFamilyToCss: StyleDictionary.Transform = {
34
33
  type: `value`,
@@ -0,0 +1,47 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+ import {isFontFamily} from '../filters'
3
+ import {hasSpaceInString} from './utilities/hasSpaceInString'
4
+ /**
5
+ * takes a value and returns it if its a string or concats strings in an array quoting strings with spaces
6
+ * @param value
7
+ * @returns string
8
+ */
9
+ export const parseFontFamily = (
10
+ token: StyleDictionary.TransformedToken,
11
+ fontFamilies: Record<string, string> = {},
12
+ ): string => {
13
+ // return value from fontFamilies
14
+ if (token.name in fontFamilies) {
15
+ return fontFamilies[token.name]
16
+ }
17
+ // return string
18
+ if (typeof token.value === 'string') {
19
+ return token.value
20
+ }
21
+ // return stringified array
22
+ if (Array.isArray(token.value)) {
23
+ return token.value
24
+ .map((string: string) => {
25
+ if (typeof string !== 'string') {
26
+ throw new Error(`Invalid value in array ${string}, must be a string`)
27
+ }
28
+ return hasSpaceInString(string) ? `'${string}'` : string
29
+ })
30
+ .join(', ')
31
+ }
32
+ // invalid value
33
+ throw new Error(`Invalid value ${token.value}, should be a string or array of strings`)
34
+ }
35
+ /**
36
+ * @description converts fontFamily tokens value to string
37
+ * @type value transformer — [StyleDictionary.ValueTransform](https://github.com/amzn/style-dictionary/blob/main/types/Transform.d.ts)
38
+ * @matcher matches all tokens of $type `fontFamily`
39
+ * @transformer returns a string
40
+ */
41
+ export const fontFamilyToFigma: StyleDictionary.Transform = {
42
+ type: `value`,
43
+ transitive: true,
44
+ matcher: isFontFamily,
45
+ transformer: (token: StyleDictionary.TransformedToken, platform: StyleDictionary.Platform): string =>
46
+ parseFontFamily(token, platform.options?.fontFamilies),
47
+ }
@@ -4,12 +4,14 @@ export {colorToHexAlpha} from './colorToHexAlpha'
4
4
  export {colorToHexMix} from './colorToHexMix'
5
5
  export {colorToRgbAlpha} from './colorToRgbAlpha'
6
6
  export {colorToRgbaFloat} from './colorToRgbaFloat'
7
+ export {floatToPixel} from './floatToPixel'
7
8
  export {dimensionToRem} from './dimensionToRem'
8
9
  export {dimensionToRemPxArray} from './dimensionToRemPxArray'
9
10
  export {dimensionToPixelUnitless} from './dimensionToPixelUnitless'
10
11
  export {durationToCss} from './durationToCss'
11
12
  export {figmaAttributes} from './figmaAttributes'
12
13
  export {fontFamilyToCss} from './fontFamilyToCss'
14
+ export {fontFamilyToFigma} from './fontFamilyToFigma'
13
15
  export {fontWeightToNumber} from './fontWeightToNumber'
14
16
  export {jsonDeprecated} from './jsonDeprecated'
15
17
  export {namePathToCamelCase} from './namePathToCamelCase'
@@ -0,0 +1,6 @@
1
+ export const hasSpaceInString = (string: string): boolean => {
2
+ if (typeof string !== 'string') {
3
+ throw new TypeError(`Invalid input. Input must be a string, ${typeof string} provided`)
4
+ }
5
+ return /\s/g.test(string)
6
+ }