@primer/primitives 7.17.0-rc.60ab8d1a → 7.17.0-rc.6fa44402

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 (123) hide show
  1. package/build.js +578 -0
  2. package/dist/css/functional/themes/dark-colorblind.css +0 -10
  3. package/dist/css/functional/themes/dark-dimmed.css +0 -10
  4. package/dist/css/functional/themes/dark-high-contrast.css +0 -10
  5. package/dist/css/functional/themes/dark-tritanopia.css +0 -10
  6. package/dist/css/functional/themes/dark.css +0 -10
  7. package/dist/css/functional/themes/light-colorblind.css +0 -10
  8. package/dist/css/functional/themes/light-high-contrast.css +0 -10
  9. package/dist/css/functional/themes/light-tritanopia.css +0 -10
  10. package/dist/css/functional/themes/light.css +0 -10
  11. package/dist/docs/functional/themes/dark-colorblind.json +0 -145
  12. package/dist/docs/functional/themes/dark-dimmed.json +0 -145
  13. package/dist/docs/functional/themes/dark-high-contrast.json +0 -145
  14. package/dist/docs/functional/themes/dark-tritanopia.json +0 -145
  15. package/dist/docs/functional/themes/dark.json +0 -145
  16. package/dist/docs/functional/themes/light-colorblind.json +0 -145
  17. package/dist/docs/functional/themes/light-high-contrast.json +0 -145
  18. package/dist/docs/functional/themes/light-tritanopia.json +0 -145
  19. package/dist/docs/functional/themes/light.json +0 -145
  20. package/dist/docs/functional/typography/typography.json +3 -39
  21. package/dist/figma/figma.json +1 -10
  22. package/dist/figma/themes/dark-colorblind.json +0 -80
  23. package/dist/figma/themes/dark-dimmed.json +0 -80
  24. package/dist/figma/themes/dark-high-contrast.json +0 -80
  25. package/dist/figma/themes/dark-tritanopia.json +0 -80
  26. package/dist/figma/themes/dark.json +0 -80
  27. package/dist/figma/themes/light-colorblind.json +0 -80
  28. package/dist/figma/themes/light-high-contrast.json +0 -80
  29. package/dist/figma/themes/light-tritanopia.json +0 -80
  30. package/dist/figma/themes/light.json +0 -80
  31. package/dist/internalCss/dark-colorblind.css +0 -10
  32. package/dist/internalCss/dark-dimmed.css +0 -10
  33. package/dist/internalCss/dark-high-contrast.css +0 -10
  34. package/dist/internalCss/dark-tritanopia.css +0 -10
  35. package/dist/internalCss/dark.css +0 -10
  36. package/dist/internalCss/light-colorblind.css +0 -10
  37. package/dist/internalCss/light-high-contrast.css +0 -10
  38. package/dist/internalCss/light-tritanopia.css +0 -10
  39. package/dist/internalCss/light.css +0 -10
  40. package/dist/styleLint/functional/themes/dark-colorblind.json +0 -145
  41. package/dist/styleLint/functional/themes/dark-dimmed.json +0 -145
  42. package/dist/styleLint/functional/themes/dark-high-contrast.json +0 -145
  43. package/dist/styleLint/functional/themes/dark-tritanopia.json +0 -145
  44. package/dist/styleLint/functional/themes/dark.json +0 -145
  45. package/dist/styleLint/functional/themes/light-colorblind.json +0 -145
  46. package/dist/styleLint/functional/themes/light-high-contrast.json +0 -145
  47. package/dist/styleLint/functional/themes/light-tritanopia.json +0 -145
  48. package/dist/styleLint/functional/themes/light.json +0 -145
  49. package/dist/styleLint/functional/typography/typography.json +3 -39
  50. package/package.json +11 -4
  51. package/src/filters/index.ts +0 -1
  52. package/src/formats/jsonFigma.ts +0 -1
  53. package/src/platforms/figma.ts +1 -3
  54. package/src/tokens/functional/color/dark/display-dark.json5 +0 -66
  55. package/src/tokens/functional/color/light/display-light.json5 +0 -66
  56. package/src/tokens/functional/typography/typography.json +3 -21
  57. package/tokens/base/size/size.json +57 -0
  58. package/tokens/base/typography/typography.json +20 -0
  59. package/tokens/functional/size/border.json +48 -0
  60. package/tokens/functional/size/breakpoints.json +24 -0
  61. package/tokens/functional/size/size-coarse.json +27 -0
  62. package/tokens/functional/size/size-fine.json +27 -0
  63. package/tokens/functional/size/size.json +189 -0
  64. package/tokens/functional/size/viewport.json +24 -0
  65. package/tokens/functional/typography/typography.json +213 -0
  66. package/tokens/removed/color.json +421 -0
  67. package/tokens-v2-private/css/tokens/base/size/size.css +24 -0
  68. package/tokens-v2-private/css/tokens/base/typography/typography.css +11 -0
  69. package/tokens-v2-private/css/tokens/functional/size/border.css +17 -0
  70. package/tokens-v2-private/css/tokens/functional/size/breakpoints.css +13 -0
  71. package/tokens-v2-private/css/tokens/functional/size/size-coarse.css +11 -0
  72. package/tokens-v2-private/css/tokens/functional/size/size-fine.css +11 -0
  73. package/tokens-v2-private/css/tokens/functional/size/size.css +54 -0
  74. package/tokens-v2-private/css/tokens/functional/size/viewport.css +6 -0
  75. package/tokens-v2-private/css/tokens/functional/typography/typography.css +47 -0
  76. package/tokens-v2-private/docs/docValues.json +2209 -0
  77. package/tokens-v2-private/js/module/tokens/base/size/size.js +266 -0
  78. package/tokens-v2-private/js/module/tokens/base/typography/typography.js +77 -0
  79. package/tokens-v2-private/js/module/tokens/functional/size/border.js +165 -0
  80. package/tokens-v2-private/js/module/tokens/functional/size/breakpoints.js +101 -0
  81. package/tokens-v2-private/js/module/tokens/functional/size/size-coarse.js +73 -0
  82. package/tokens-v2-private/js/module/tokens/functional/size/size-fine.js +73 -0
  83. package/tokens-v2-private/js/module/tokens/functional/size/size.js +824 -0
  84. package/tokens-v2-private/js/module/tokens/functional/size/viewport.js +101 -0
  85. package/tokens-v2-private/js/module/tokens/functional/typography/typography.js +809 -0
  86. package/tokens-v2-private/js/tokens/base/size/size.js +22 -0
  87. package/tokens-v2-private/js/tokens/base/typography/typography.js +9 -0
  88. package/tokens-v2-private/js/tokens/functional/size/border.js +15 -0
  89. package/tokens-v2-private/js/tokens/functional/size/breakpoints.js +11 -0
  90. package/tokens-v2-private/js/tokens/functional/size/size-coarse.js +8 -0
  91. package/tokens-v2-private/js/tokens/functional/size/size-fine.js +8 -0
  92. package/tokens-v2-private/js/tokens/functional/size/size.js +52 -0
  93. package/tokens-v2-private/js/tokens/functional/size/viewport.js +11 -0
  94. package/tokens-v2-private/js/tokens/functional/typography/typography.js +45 -0
  95. package/tokens-v2-private/scss/tokens/base/size/size.scss +21 -0
  96. package/tokens-v2-private/scss/tokens/base/typography/typography.scss +8 -0
  97. package/tokens-v2-private/scss/tokens/functional/size/border.scss +14 -0
  98. package/tokens-v2-private/scss/tokens/functional/size/breakpoints.scss +10 -0
  99. package/tokens-v2-private/scss/tokens/functional/size/size-coarse.scss +7 -0
  100. package/tokens-v2-private/scss/tokens/functional/size/size-fine.scss +7 -0
  101. package/tokens-v2-private/scss/tokens/functional/size/size.scss +51 -0
  102. package/tokens-v2-private/scss/tokens/functional/size/viewport.scss +10 -0
  103. package/tokens-v2-private/scss/tokens/functional/typography/typography.scss +44 -0
  104. package/tokens-v2-private/ts/tokens/base/size/size.d.ts +31 -0
  105. package/tokens-v2-private/ts/tokens/base/size/size.js +30 -0
  106. package/tokens-v2-private/ts/tokens/base/typography/typography.d.ts +20 -0
  107. package/tokens-v2-private/ts/tokens/base/typography/typography.js +19 -0
  108. package/tokens-v2-private/ts/tokens/functional/size/border.d.ts +28 -0
  109. package/tokens-v2-private/ts/tokens/functional/size/border.js +27 -0
  110. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.d.ts +20 -0
  111. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.js +19 -0
  112. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.d.ts +29 -0
  113. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.js +28 -0
  114. package/tokens-v2-private/ts/tokens/functional/size/size-fine.d.ts +29 -0
  115. package/tokens-v2-private/ts/tokens/functional/size/size-fine.js +28 -0
  116. package/tokens-v2-private/ts/tokens/functional/size/size.d.ts +103 -0
  117. package/tokens-v2-private/ts/tokens/functional/size/size.js +102 -0
  118. package/tokens-v2-private/ts/tokens/functional/size/viewport.d.ts +20 -0
  119. package/tokens-v2-private/ts/tokens/functional/size/viewport.js +19 -0
  120. package/tokens-v2-private/ts/tokens/functional/typography/typography.d.ts +131 -0
  121. package/tokens-v2-private/ts/tokens/functional/typography/typography.js +130 -0
  122. package/dist/figma/typography/typography.json +0 -32
  123. package/src/filters/isNumber.ts +0 -8
package/build.js ADDED
@@ -0,0 +1,578 @@
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
+ }
@@ -132,11 +132,6 @@
132
132
  --display-indigo-fgColor: #9899ec;
133
133
  --display-indigo-borderColor-muted: #25215f;
134
134
  --display-indigo-borderColor-emphasis: #7070e1;
135
- --display-pink-bgColor-muted: #2d1524;
136
- --display-pink-bgColor-emphasis: #d34591;
137
- --display-pink-fgColor: #e57bb2;
138
- --display-pink-borderColor-muted: #451c35;
139
- --display-pink-borderColor-emphasis: #d34591;
140
135
  --avatar-bgColor: #ffffff1a;
141
136
  --avatar-borderColor: #ffffff26;
142
137
  --avatar-shadow: 0px 0px 0px 2px #0d1117;
@@ -675,11 +670,6 @@
675
670
  --display-indigo-fgColor: #9899ec;
676
671
  --display-indigo-borderColor-muted: #25215f;
677
672
  --display-indigo-borderColor-emphasis: #7070e1;
678
- --display-pink-bgColor-muted: #2d1524;
679
- --display-pink-bgColor-emphasis: #d34591;
680
- --display-pink-fgColor: #e57bb2;
681
- --display-pink-borderColor-muted: #451c35;
682
- --display-pink-borderColor-emphasis: #d34591;
683
673
  --avatar-bgColor: #ffffff1a;
684
674
  --avatar-borderColor: #ffffff26;
685
675
  --avatar-shadow: 0px 0px 0px 2px #0d1117;
@@ -132,11 +132,6 @@
132
132
  --display-indigo-fgColor: #9899ec;
133
133
  --display-indigo-borderColor-muted: #25215f;
134
134
  --display-indigo-borderColor-emphasis: #7070e1;
135
- --display-pink-bgColor-muted: #2d1524;
136
- --display-pink-bgColor-emphasis: #d34591;
137
- --display-pink-fgColor: #e57bb2;
138
- --display-pink-borderColor-muted: #451c35;
139
- --display-pink-borderColor-emphasis: #d34591;
140
135
  --avatar-bgColor: #cdd9e51a;
141
136
  --avatar-borderColor: #cdd9e526;
142
137
  --avatar-shadow: 0px 0px 0px 2px #22272e;
@@ -675,11 +670,6 @@
675
670
  --display-indigo-fgColor: #9899ec;
676
671
  --display-indigo-borderColor-muted: #25215f;
677
672
  --display-indigo-borderColor-emphasis: #7070e1;
678
- --display-pink-bgColor-muted: #2d1524;
679
- --display-pink-bgColor-emphasis: #d34591;
680
- --display-pink-fgColor: #e57bb2;
681
- --display-pink-borderColor-muted: #451c35;
682
- --display-pink-borderColor-emphasis: #d34591;
683
673
  --avatar-bgColor: #cdd9e51a;
684
674
  --avatar-borderColor: #cdd9e526;
685
675
  --avatar-shadow: 0px 0px 0px 2px #22272e;
@@ -132,11 +132,6 @@
132
132
  --display-indigo-fgColor: #9899ec;
133
133
  --display-indigo-borderColor-muted: #25215f;
134
134
  --display-indigo-borderColor-emphasis: #7070e1;
135
- --display-pink-bgColor-muted: #2d1524;
136
- --display-pink-bgColor-emphasis: #d34591;
137
- --display-pink-fgColor: #e57bb2;
138
- --display-pink-borderColor-muted: #451c35;
139
- --display-pink-borderColor-emphasis: #d34591;
140
135
  --avatar-bgColor: #ffffff1a;
141
136
  --avatar-borderColor: #ffffffe6;
142
137
  --avatar-shadow: 0px 0px 0px 2px #0a0c10;
@@ -675,11 +670,6 @@
675
670
  --display-indigo-fgColor: #9899ec;
676
671
  --display-indigo-borderColor-muted: #25215f;
677
672
  --display-indigo-borderColor-emphasis: #7070e1;
678
- --display-pink-bgColor-muted: #2d1524;
679
- --display-pink-bgColor-emphasis: #d34591;
680
- --display-pink-fgColor: #e57bb2;
681
- --display-pink-borderColor-muted: #451c35;
682
- --display-pink-borderColor-emphasis: #d34591;
683
673
  --avatar-bgColor: #ffffff1a;
684
674
  --avatar-borderColor: #ffffffe6;
685
675
  --avatar-shadow: 0px 0px 0px 2px #0a0c10;
@@ -132,11 +132,6 @@
132
132
  --display-indigo-fgColor: #9899ec;
133
133
  --display-indigo-borderColor-muted: #25215f;
134
134
  --display-indigo-borderColor-emphasis: #7070e1;
135
- --display-pink-bgColor-muted: #2d1524;
136
- --display-pink-bgColor-emphasis: #d34591;
137
- --display-pink-fgColor: #e57bb2;
138
- --display-pink-borderColor-muted: #451c35;
139
- --display-pink-borderColor-emphasis: #d34591;
140
135
  --avatar-bgColor: #ffffff1a;
141
136
  --avatar-borderColor: #ffffff26;
142
137
  --avatar-shadow: 0px 0px 0px 2px #0d1117;
@@ -675,11 +670,6 @@
675
670
  --display-indigo-fgColor: #9899ec;
676
671
  --display-indigo-borderColor-muted: #25215f;
677
672
  --display-indigo-borderColor-emphasis: #7070e1;
678
- --display-pink-bgColor-muted: #2d1524;
679
- --display-pink-bgColor-emphasis: #d34591;
680
- --display-pink-fgColor: #e57bb2;
681
- --display-pink-borderColor-muted: #451c35;
682
- --display-pink-borderColor-emphasis: #d34591;
683
673
  --avatar-bgColor: #ffffff1a;
684
674
  --avatar-borderColor: #ffffff26;
685
675
  --avatar-shadow: 0px 0px 0px 2px #0d1117;
@@ -132,11 +132,6 @@
132
132
  --display-indigo-fgColor: #9899ec;
133
133
  --display-indigo-borderColor-muted: #25215f;
134
134
  --display-indigo-borderColor-emphasis: #7070e1;
135
- --display-pink-bgColor-muted: #2d1524;
136
- --display-pink-bgColor-emphasis: #d34591;
137
- --display-pink-fgColor: #e57bb2;
138
- --display-pink-borderColor-muted: #451c35;
139
- --display-pink-borderColor-emphasis: #d34591;
140
135
  --avatar-bgColor: #ffffff1a;
141
136
  --avatar-borderColor: #ffffff26;
142
137
  --avatar-shadow: 0px 0px 0px 2px #0d1117;
@@ -675,11 +670,6 @@
675
670
  --display-indigo-fgColor: #9899ec;
676
671
  --display-indigo-borderColor-muted: #25215f;
677
672
  --display-indigo-borderColor-emphasis: #7070e1;
678
- --display-pink-bgColor-muted: #2d1524;
679
- --display-pink-bgColor-emphasis: #d34591;
680
- --display-pink-fgColor: #e57bb2;
681
- --display-pink-borderColor-muted: #451c35;
682
- --display-pink-borderColor-emphasis: #d34591;
683
673
  --avatar-bgColor: #ffffff1a;
684
674
  --avatar-borderColor: #ffffff26;
685
675
  --avatar-shadow: 0px 0px 0px 2px #0d1117;