@primer/primitives 7.17.0-rc.132f02a7 → 7.17.0-rc.34cd1021

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 (162) 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 +223 -78
  14. package/dist/docs/functional/themes/dark-dimmed.json +218 -73
  15. package/dist/docs/functional/themes/dark-high-contrast.json +220 -75
  16. package/dist/docs/functional/themes/dark-tritanopia.json +223 -78
  17. package/dist/docs/functional/themes/dark.json +218 -73
  18. package/dist/docs/functional/themes/light-colorblind.json +221 -76
  19. package/dist/docs/functional/themes/light-high-contrast.json +215 -70
  20. package/dist/docs/functional/themes/light-tritanopia.json +221 -76
  21. package/dist/docs/functional/themes/light.json +216 -71
  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/scales/dark-dimmed.json +20 -20
  26. package/dist/figma/scales/dark-high-constrast.json +20 -20
  27. package/dist/figma/scales/dark.json +20 -20
  28. package/dist/figma/scales/light-high-constrast.json +20 -20
  29. package/dist/figma/scales/light.json +20 -20
  30. package/dist/figma/themes/dark-colorblind.json +150 -70
  31. package/dist/figma/themes/dark-dimmed.json +145 -65
  32. package/dist/figma/themes/dark-high-contrast.json +149 -69
  33. package/dist/figma/themes/dark-tritanopia.json +150 -70
  34. package/dist/figma/themes/dark.json +145 -65
  35. package/dist/figma/themes/light-colorblind.json +139 -59
  36. package/dist/figma/themes/light-high-contrast.json +135 -55
  37. package/dist/figma/themes/light-tritanopia.json +139 -59
  38. package/dist/figma/themes/light.json +134 -54
  39. package/dist/figma/typography/typography.json +370 -0
  40. package/dist/internalCss/dark-colorblind.css +30 -20
  41. package/dist/internalCss/dark-dimmed.css +30 -20
  42. package/dist/internalCss/dark-high-contrast.css +30 -20
  43. package/dist/internalCss/dark-tritanopia.css +30 -20
  44. package/dist/internalCss/dark.css +30 -20
  45. package/dist/internalCss/light-colorblind.css +30 -20
  46. package/dist/internalCss/light-high-contrast.css +30 -20
  47. package/dist/internalCss/light-tritanopia.css +30 -20
  48. package/dist/internalCss/light.css +30 -20
  49. package/dist/styleLint/base/typography/typography.json +52 -4
  50. package/dist/styleLint/functional/themes/dark-colorblind.json +223 -78
  51. package/dist/styleLint/functional/themes/dark-dimmed.json +218 -73
  52. package/dist/styleLint/functional/themes/dark-high-contrast.json +220 -75
  53. package/dist/styleLint/functional/themes/dark-tritanopia.json +223 -78
  54. package/dist/styleLint/functional/themes/dark.json +218 -73
  55. package/dist/styleLint/functional/themes/light-colorblind.json +221 -76
  56. package/dist/styleLint/functional/themes/light-high-contrast.json +215 -70
  57. package/dist/styleLint/functional/themes/light-tritanopia.json +221 -76
  58. package/dist/styleLint/functional/themes/light.json +216 -71
  59. package/dist/styleLint/functional/typography/typography.json +494 -36
  60. package/package.json +4 -11
  61. package/src/PrimerStyleDictionary.ts +12 -0
  62. package/src/filters/index.ts +1 -0
  63. package/src/filters/isNumber.ts +8 -0
  64. package/src/formats/jsonFigma.ts +1 -0
  65. package/src/platforms/figma.ts +10 -1
  66. package/src/schemas/numberToken.ts +17 -0
  67. package/src/tokens/base/color/dark/dark.dimmed.json5 +1 -1
  68. package/src/tokens/base/color/dark/dark.high-contrast.json5 +1 -1
  69. package/src/tokens/base/color/dark/dark.json5 +1 -1
  70. package/src/tokens/base/color/light/light.high-contrast.json5 +1 -1
  71. package/src/tokens/base/color/light/light.json5 +1 -1
  72. package/src/tokens/base/typography/typography.json +28 -4
  73. package/src/tokens/functional/color/dark/app-dark.json5 +5 -5
  74. package/src/tokens/functional/color/dark/display-dark.json5 +66 -0
  75. package/src/tokens/functional/color/dark/overrides/dark.high-contrast.json5 +17 -17
  76. package/src/tokens/functional/color/dark/overrides/dark.protanopia-deuteranopia.json5 +5 -5
  77. package/src/tokens/functional/color/dark/overrides/dark.tritanopia.json5 +5 -5
  78. package/src/tokens/functional/color/dark/patterns-dark.json5 +42 -42
  79. package/src/tokens/functional/color/dark/primitives-dark.json5 +16 -16
  80. package/src/tokens/functional/color/dark/syntax-dark.json5 +13 -13
  81. package/src/tokens/functional/color/light/app-light.json5 +5 -5
  82. package/src/tokens/functional/color/light/display-light.json5 +66 -0
  83. package/src/tokens/functional/color/light/overrides/light.high-contrast.json5 +25 -25
  84. package/src/tokens/functional/color/light/overrides/light.protanopia-deuteranopia.json5 +5 -5
  85. package/src/tokens/functional/color/light/overrides/light.tritanopia.json5 +5 -5
  86. package/src/tokens/functional/color/light/patterns-light.json5 +30 -30
  87. package/src/tokens/functional/color/light/primitives-light.json5 +15 -15
  88. package/src/tokens/functional/color/light/syntax-light.json5 +14 -14
  89. package/src/tokens/functional/shadow/dark.json5 +1 -1
  90. package/src/tokens/functional/shadow/light.json5 +11 -11
  91. package/src/tokens/functional/typography/typography.json +263 -34
  92. package/src/transformers/floatToPixel.ts +33 -0
  93. package/src/transformers/fontFamilyToCss.ts +3 -4
  94. package/src/transformers/fontFamilyToFigma.ts +47 -0
  95. package/src/transformers/index.ts +2 -0
  96. package/src/transformers/utilities/hasSpaceInString.ts +6 -0
  97. package/build.js +0 -578
  98. package/tokens/base/size/size.json +0 -57
  99. package/tokens/base/typography/typography.json +0 -20
  100. package/tokens/functional/size/border.json +0 -48
  101. package/tokens/functional/size/breakpoints.json +0 -24
  102. package/tokens/functional/size/size-coarse.json +0 -27
  103. package/tokens/functional/size/size-fine.json +0 -27
  104. package/tokens/functional/size/size.json +0 -189
  105. package/tokens/functional/size/viewport.json +0 -24
  106. package/tokens/functional/typography/typography.json +0 -213
  107. package/tokens/removed/color.json +0 -421
  108. package/tokens-v2-private/css/tokens/base/size/size.css +0 -24
  109. package/tokens-v2-private/css/tokens/base/typography/typography.css +0 -11
  110. package/tokens-v2-private/css/tokens/functional/size/border.css +0 -17
  111. package/tokens-v2-private/css/tokens/functional/size/breakpoints.css +0 -13
  112. package/tokens-v2-private/css/tokens/functional/size/size-coarse.css +0 -11
  113. package/tokens-v2-private/css/tokens/functional/size/size-fine.css +0 -11
  114. package/tokens-v2-private/css/tokens/functional/size/size.css +0 -54
  115. package/tokens-v2-private/css/tokens/functional/size/viewport.css +0 -6
  116. package/tokens-v2-private/css/tokens/functional/typography/typography.css +0 -47
  117. package/tokens-v2-private/docs/docValues.json +0 -2209
  118. package/tokens-v2-private/js/module/tokens/base/size/size.js +0 -266
  119. package/tokens-v2-private/js/module/tokens/base/typography/typography.js +0 -77
  120. package/tokens-v2-private/js/module/tokens/functional/size/border.js +0 -165
  121. package/tokens-v2-private/js/module/tokens/functional/size/breakpoints.js +0 -101
  122. package/tokens-v2-private/js/module/tokens/functional/size/size-coarse.js +0 -73
  123. package/tokens-v2-private/js/module/tokens/functional/size/size-fine.js +0 -73
  124. package/tokens-v2-private/js/module/tokens/functional/size/size.js +0 -824
  125. package/tokens-v2-private/js/module/tokens/functional/size/viewport.js +0 -101
  126. package/tokens-v2-private/js/module/tokens/functional/typography/typography.js +0 -809
  127. package/tokens-v2-private/js/tokens/base/size/size.js +0 -22
  128. package/tokens-v2-private/js/tokens/base/typography/typography.js +0 -9
  129. package/tokens-v2-private/js/tokens/functional/size/border.js +0 -15
  130. package/tokens-v2-private/js/tokens/functional/size/breakpoints.js +0 -11
  131. package/tokens-v2-private/js/tokens/functional/size/size-coarse.js +0 -8
  132. package/tokens-v2-private/js/tokens/functional/size/size-fine.js +0 -8
  133. package/tokens-v2-private/js/tokens/functional/size/size.js +0 -52
  134. package/tokens-v2-private/js/tokens/functional/size/viewport.js +0 -11
  135. package/tokens-v2-private/js/tokens/functional/typography/typography.js +0 -45
  136. package/tokens-v2-private/scss/tokens/base/size/size.scss +0 -21
  137. package/tokens-v2-private/scss/tokens/base/typography/typography.scss +0 -8
  138. package/tokens-v2-private/scss/tokens/functional/size/border.scss +0 -14
  139. package/tokens-v2-private/scss/tokens/functional/size/breakpoints.scss +0 -10
  140. package/tokens-v2-private/scss/tokens/functional/size/size-coarse.scss +0 -7
  141. package/tokens-v2-private/scss/tokens/functional/size/size-fine.scss +0 -7
  142. package/tokens-v2-private/scss/tokens/functional/size/size.scss +0 -51
  143. package/tokens-v2-private/scss/tokens/functional/size/viewport.scss +0 -10
  144. package/tokens-v2-private/scss/tokens/functional/typography/typography.scss +0 -44
  145. package/tokens-v2-private/ts/tokens/base/size/size.d.ts +0 -31
  146. package/tokens-v2-private/ts/tokens/base/size/size.js +0 -30
  147. package/tokens-v2-private/ts/tokens/base/typography/typography.d.ts +0 -20
  148. package/tokens-v2-private/ts/tokens/base/typography/typography.js +0 -19
  149. package/tokens-v2-private/ts/tokens/functional/size/border.d.ts +0 -28
  150. package/tokens-v2-private/ts/tokens/functional/size/border.js +0 -27
  151. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.d.ts +0 -20
  152. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.js +0 -19
  153. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.d.ts +0 -29
  154. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.js +0 -28
  155. package/tokens-v2-private/ts/tokens/functional/size/size-fine.d.ts +0 -29
  156. package/tokens-v2-private/ts/tokens/functional/size/size-fine.js +0 -28
  157. package/tokens-v2-private/ts/tokens/functional/size/size.d.ts +0 -103
  158. package/tokens-v2-private/ts/tokens/functional/size/size.js +0 -102
  159. package/tokens-v2-private/ts/tokens/functional/size/viewport.d.ts +0 -20
  160. package/tokens-v2-private/ts/tokens/functional/size/viewport.js +0 -19
  161. package/tokens-v2-private/ts/tokens/functional/typography/typography.d.ts +0 -131
  162. package/tokens-v2-private/ts/tokens/functional/typography/typography.js +0 -130
@@ -2,7 +2,7 @@
2
2
  color: {
3
3
  ansi: {
4
4
  black: {
5
- $value: '{base.color.gray.9}',
5
+ $value: '{base.color.neutral.9}',
6
6
  $type: 'color',
7
7
  $extensions: {
8
8
  'org.primer.figma': {
@@ -13,7 +13,7 @@
13
13
  },
14
14
  },
15
15
  'black-bright': {
16
- $value: '{base.color.gray.6}',
16
+ $value: '{base.color.neutral.6}',
17
17
  $type: 'color',
18
18
  $extensions: {
19
19
  'org.primer.figma': {
@@ -24,7 +24,7 @@
24
24
  },
25
25
  },
26
26
  white: {
27
- $value: '{base.color.gray.5}',
27
+ $value: '{base.color.neutral.5}',
28
28
  $type: 'color',
29
29
  $extensions: {
30
30
  'org.primer.figma': {
@@ -35,7 +35,7 @@
35
35
  },
36
36
  },
37
37
  'white-bright': {
38
- $value: '{base.color.gray.4}',
38
+ $value: '{base.color.neutral.4}',
39
39
  $type: 'color',
40
40
  $extensions: {
41
41
  'org.primer.figma': {
@@ -46,7 +46,7 @@
46
46
  },
47
47
  },
48
48
  gray: {
49
- $value: '{base.color.gray.5}',
49
+ $value: '{base.color.neutral.5}',
50
50
  $type: 'color',
51
51
  $extensions: {
52
52
  'org.primer.figma': {
@@ -192,7 +192,7 @@
192
192
  prettylights: {
193
193
  syntax: {
194
194
  comment: {
195
- $value: '{base.color.gray.6}',
195
+ $value: '{base.color.neutral.6}',
196
196
  $type: 'color',
197
197
  $extensions: {
198
198
  'org.primer.figma': {
@@ -238,7 +238,7 @@
238
238
  storage: {
239
239
  modifier: {
240
240
  import: {
241
- $value: '{base.color.gray.9}',
241
+ $value: '{base.color.neutral.9}',
242
242
  $type: 'color',
243
243
  $extensions: {
244
244
  'org.primer.figma': {
@@ -307,7 +307,7 @@
307
307
  },
308
308
  },
309
309
  angle: {
310
- $value: '{base.color.gray.6}',
310
+ $value: '{base.color.neutral.6}',
311
311
  $type: 'color',
312
312
  $extensions: {
313
313
  'org.primer.figma': {
@@ -321,7 +321,7 @@
321
321
  invalid: {
322
322
  illegal: {
323
323
  text: {
324
- $value: '{base.color.gray.0}',
324
+ $value: '{base.color.neutral.0}',
325
325
  $type: 'color',
326
326
  $extensions: {
327
327
  'org.primer.figma': {
@@ -347,7 +347,7 @@
347
347
  carriage: {
348
348
  return: {
349
349
  text: {
350
- $value: '{base.color.gray.0}',
350
+ $value: '{base.color.neutral.0}',
351
351
  $type: 'color',
352
352
  $extensions: {
353
353
  'org.primer.figma': {
@@ -405,7 +405,7 @@
405
405
  },
406
406
  },
407
407
  italic: {
408
- $value: '{base.color.gray.9}',
408
+ $value: '{base.color.neutral.9}',
409
409
  $type: 'color',
410
410
  $extensions: {
411
411
  'org.primer.figma': {
@@ -416,7 +416,7 @@
416
416
  },
417
417
  },
418
418
  bold: {
419
- $value: '{base.color.gray.9}',
419
+ $value: '{base.color.neutral.9}',
420
420
  $type: 'color',
421
421
  $extensions: {
422
422
  'org.primer.figma': {
@@ -500,7 +500,7 @@
500
500
  },
501
501
  ignored: {
502
502
  text: {
503
- $value: '{base.color.gray.1}',
503
+ $value: '{base.color.neutral.1}',
504
504
  $type: 'color',
505
505
  $extensions: {
506
506
  'org.primer.figma': {
@@ -541,7 +541,7 @@
541
541
  sublimelinter: {
542
542
  gutter: {
543
543
  mark: {
544
- $value: '{base.color.gray.4}',
544
+ $value: '{base.color.neutral.4}',
545
545
  $type: 'color',
546
546
  $extensions: {
547
547
  'org.primer.figma': {
@@ -3,7 +3,7 @@
3
3
  shadow: {
4
4
  $value: [
5
5
  {
6
- color: '{base.color.gray.9}',
6
+ color: '{base.color.neutral.9}',
7
7
  alpha: 1,
8
8
  offsetX: '0px',
9
9
  offsetY: '0px',
@@ -187,7 +187,7 @@
187
187
  medium: {
188
188
  $value: [
189
189
  {
190
- color: '{base.color.gray.7}',
190
+ color: '{base.color.neutral.7}',
191
191
  alpha: 0.12,
192
192
  offsetX: '0px',
193
193
  offsetY: '3px',
@@ -217,7 +217,7 @@
217
217
  spread: '1px',
218
218
  },
219
219
  {
220
- color: '{base.color.gray.7}',
220
+ color: '{base.color.neutral.7}',
221
221
  alpha: 0.04,
222
222
  offsetX: '0px',
223
223
  offsetY: '6px',
@@ -225,7 +225,7 @@
225
225
  spread: '-3px',
226
226
  },
227
227
  {
228
- color: '{base.color.gray.7}',
228
+ color: '{base.color.neutral.7}',
229
229
  alpha: 0.12,
230
230
  offsetX: '0px',
231
231
  offsetY: '6px',
@@ -253,7 +253,7 @@
253
253
  spread: '1px',
254
254
  },
255
255
  {
256
- color: '{base.color.gray.7}',
256
+ color: '{base.color.neutral.7}',
257
257
  alpha: 0.08,
258
258
  offsetX: '0px',
259
259
  offsetY: '8px',
@@ -261,7 +261,7 @@
261
261
  spread: '-4px',
262
262
  },
263
263
  {
264
- color: '{base.color.gray.7}',
264
+ color: '{base.color.neutral.7}',
265
265
  alpha: 0.08,
266
266
  offsetX: '0px',
267
267
  offsetY: '4px',
@@ -269,7 +269,7 @@
269
269
  spread: '-4px',
270
270
  },
271
271
  {
272
- color: '{base.color.gray.7}',
272
+ color: '{base.color.neutral.7}',
273
273
  alpha: 0.08,
274
274
  offsetX: '0px',
275
275
  offsetY: '24px',
@@ -277,7 +277,7 @@
277
277
  spread: '-12px',
278
278
  },
279
279
  {
280
- color: '{base.color.gray.7}',
280
+ color: '{base.color.neutral.7}',
281
281
  alpha: 0.08,
282
282
  offsetX: '0px',
283
283
  offsetY: '48px',
@@ -305,7 +305,7 @@
305
305
  spread: '1px',
306
306
  },
307
307
  {
308
- color: '{base.color.gray.7}',
308
+ color: '{base.color.neutral.7}',
309
309
  alpha: 0.24,
310
310
  offsetX: '0px',
311
311
  offsetY: '40px',
@@ -333,7 +333,7 @@
333
333
  spread: '1px',
334
334
  },
335
335
  {
336
- color: '{base.color.gray.7}',
336
+ color: '{base.color.neutral.7}',
337
337
  alpha: 0.32,
338
338
  offsetX: '0px',
339
339
  offsetY: '56px',
@@ -353,7 +353,7 @@
353
353
  legacy: {
354
354
  $value: [
355
355
  {
356
- color: '{base.color.gray.7}',
356
+ color: '{base.color.neutral.7}',
357
357
  alpha: 0.04,
358
358
  offsetX: '0px',
359
359
  offsetY: '6px',
@@ -361,7 +361,7 @@
361
361
  spread: '-3px',
362
362
  },
363
363
  {
364
- color: '{base.color.gray.7}',
364
+ color: '{base.color.neutral.7}',
365
365
  alpha: 0.12,
366
366
  offsetX: '0px',
367
367
  offsetY: '6px',
@@ -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
+ }