@primer/primitives 7.17.0-rc.1685583f → 7.17.0-rc.61b28bca

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 (133) hide show
  1. package/package.json +1 -1
  2. package/src/filters/isBorder.test.ts +18 -0
  3. package/src/filters/isColor.test.ts +22 -0
  4. package/src/filters/isColorWithAlpha.test.ts +34 -0
  5. package/src/filters/isColorWithMix.test.ts +108 -0
  6. package/src/filters/isDeprecated.test.ts +56 -0
  7. package/src/filters/isDimension.test.ts +22 -0
  8. package/src/filters/isDuration.test.ts +22 -0
  9. package/src/filters/isFontFamily.test.ts +22 -0
  10. package/src/filters/isFontWeight.test.ts +22 -0
  11. package/src/filters/isFromFile.test.ts +34 -0
  12. package/src/filters/isShadow.test.ts +18 -0
  13. package/src/filters/isSource.test.ts +44 -0
  14. package/src/filters/isTypography.test.ts +18 -0
  15. package/src/formats/cssCustomMedia.test.ts +11 -0
  16. package/src/formats/cssThemed.test.ts +87 -0
  17. package/src/formats/cssWrapMediaQuery.test.ts +170 -0
  18. package/src/formats/javascriptCommonJs.test.ts +43 -0
  19. package/src/formats/javascriptEsm.test.ts +41 -0
  20. package/src/formats/jsonNestedPrefixed.test.ts +73 -0
  21. package/src/formats/jsonOneDimensional.test.ts +56 -0
  22. package/src/formats/typescriptExportDefinition.test.ts +178 -0
  23. package/src/formats/utilities/jsonToFlat.test.ts +47 -0
  24. package/src/formats/utilities/jsonToNestedValue.test.ts +39 -0
  25. package/src/formats/utilities/prefixTokens.test.ts +38 -0
  26. package/src/parsers/w3cJsonParser.test.ts +35 -0
  27. package/src/schemas/alphaValueSchema.test.ts +24 -0
  28. package/src/schemas/baseTokenSchema.test.ts +17 -0
  29. package/src/schemas/borderTokenSchema.test.ts +53 -0
  30. package/src/schemas/collectionSchema.test.ts +58 -0
  31. package/src/schemas/colorHexValueSchema.test.ts +26 -0
  32. package/src/schemas/colorTokenSchema.test.ts +27 -0
  33. package/src/schemas/dimensionTokenSchema.test.ts +28 -0
  34. package/src/schemas/dimensionValueSchema.test.ts +21 -0
  35. package/src/schemas/durationTokenSchema.test.ts +58 -0
  36. package/src/schemas/durationValueSchema.test.ts +25 -0
  37. package/src/schemas/fontFamilyTokenSchema.test.ts +82 -0
  38. package/src/schemas/fontWeightTokenSchema.test.ts +88 -0
  39. package/src/schemas/fontWeightValue.test.ts +17 -0
  40. package/src/schemas/numberTokenSchema.test.ts +82 -0
  41. package/src/schemas/referenceValueSchema.test.ts +20 -0
  42. package/src/schemas/schema.test.ts +33 -0
  43. package/src/schemas/scopeTokenSchema.test.ts +29 -0
  44. package/src/schemas/shadowTokenSchema.test.ts +163 -0
  45. package/src/schemas/stringTokenSchema.test.ts +81 -0
  46. package/src/schemas/tokenNameSchema.test.ts +33 -0
  47. package/src/schemas/typographyTokenSchema.test.ts +58 -0
  48. package/src/schemas/validTokenTypeSchema.test.ts +32 -0
  49. package/src/schemas/viewportRangeTokenSchema.test.ts +59 -0
  50. package/src/transformers/borderToCss.test.ts +58 -0
  51. package/src/transformers/colorToHex.test.ts +27 -0
  52. package/src/transformers/colorToHexAlpha.test.ts +30 -0
  53. package/src/transformers/colorToHexMix.test.ts +83 -0
  54. package/src/transformers/colorToRgbAlpha.test.ts +33 -0
  55. package/src/transformers/colorToRgbaFloat.test.ts +168 -0
  56. package/src/transformers/dimensionToPixelUnitless.test.ts +93 -0
  57. package/src/transformers/dimensionToRem.test.ts +81 -0
  58. package/src/transformers/durationToCss.test.ts +56 -0
  59. package/src/transformers/fontFamilyToCss.test.ts +71 -0
  60. package/src/transformers/fontWeightToNumbers.test.ts +117 -0
  61. package/src/transformers/jsonDeprecated.test.ts +31 -0
  62. package/src/transformers/namePathToCamelCase.test.ts +74 -0
  63. package/src/transformers/namePathToDotNotation.test.ts +74 -0
  64. package/src/transformers/namePathToFigma.test.ts +74 -0
  65. package/src/transformers/namePathToKebabCase.test.ts +74 -0
  66. package/src/transformers/namePathToSlashNotation.test.ts +74 -0
  67. package/src/transformers/shadowToCss.test.ts +175 -0
  68. package/src/transformers/typographyToCss.test.ts +164 -0
  69. package/src/transformers/utilities/alpha.test.ts +28 -0
  70. package/src/transformers/utilities/checkRequiredTokenProperties.test.ts +28 -0
  71. package/src/transformers/utilities/getTokenValue.test.ts +18 -0
  72. package/src/transformers/utilities/hexToRgbaFloat.test.ts +66 -0
  73. package/src/transformers/utilities/invalidTokenError.test.ts +21 -0
  74. package/src/transformers/utilities/isRgbaFloat.test.ts +20 -0
  75. package/src/transformers/utilities/rgbaFloatToHex.test.ts +16 -0
  76. package/src/utilities/getFlag.test.ts +31 -0
  77. package/src/utilities/joinFriendly.test.ts +15 -0
  78. package/src/utilities/toCamelCase.test.ts +27 -0
  79. package/src/utilities/treeWalker.test.ts +51 -0
  80. package/src/utilities/upperCaseFirstCharacter.test.ts +19 -0
  81. package/tokens-v2-private/css/tokens/base/size/size.css +1 -1
  82. package/tokens-v2-private/css/tokens/base/typography/typography.css +1 -1
  83. package/tokens-v2-private/css/tokens/functional/size/border.css +1 -1
  84. package/tokens-v2-private/css/tokens/functional/size/breakpoints.css +1 -1
  85. package/tokens-v2-private/css/tokens/functional/size/size-coarse.css +1 -1
  86. package/tokens-v2-private/css/tokens/functional/size/size-fine.css +1 -1
  87. package/tokens-v2-private/css/tokens/functional/size/size.css +1 -1
  88. package/tokens-v2-private/css/tokens/functional/typography/typography.css +1 -1
  89. package/tokens-v2-private/js/module/tokens/base/size/size.js +1 -1
  90. package/tokens-v2-private/js/module/tokens/base/typography/typography.js +1 -1
  91. package/tokens-v2-private/js/module/tokens/functional/size/border.js +1 -1
  92. package/tokens-v2-private/js/module/tokens/functional/size/breakpoints.js +1 -1
  93. package/tokens-v2-private/js/module/tokens/functional/size/size-coarse.js +1 -1
  94. package/tokens-v2-private/js/module/tokens/functional/size/size-fine.js +1 -1
  95. package/tokens-v2-private/js/module/tokens/functional/size/size.js +1 -1
  96. package/tokens-v2-private/js/module/tokens/functional/size/viewport.js +1 -1
  97. package/tokens-v2-private/js/module/tokens/functional/typography/typography.js +1 -1
  98. package/tokens-v2-private/js/tokens/base/size/size.js +1 -1
  99. package/tokens-v2-private/js/tokens/base/typography/typography.js +1 -1
  100. package/tokens-v2-private/js/tokens/functional/size/border.js +1 -1
  101. package/tokens-v2-private/js/tokens/functional/size/breakpoints.js +1 -1
  102. package/tokens-v2-private/js/tokens/functional/size/size-coarse.js +1 -1
  103. package/tokens-v2-private/js/tokens/functional/size/size-fine.js +1 -1
  104. package/tokens-v2-private/js/tokens/functional/size/size.js +1 -1
  105. package/tokens-v2-private/js/tokens/functional/size/viewport.js +1 -1
  106. package/tokens-v2-private/js/tokens/functional/typography/typography.js +1 -1
  107. package/tokens-v2-private/scss/tokens/base/size/size.scss +1 -1
  108. package/tokens-v2-private/scss/tokens/base/typography/typography.scss +1 -1
  109. package/tokens-v2-private/scss/tokens/functional/size/border.scss +1 -1
  110. package/tokens-v2-private/scss/tokens/functional/size/breakpoints.scss +1 -1
  111. package/tokens-v2-private/scss/tokens/functional/size/size-coarse.scss +1 -1
  112. package/tokens-v2-private/scss/tokens/functional/size/size-fine.scss +1 -1
  113. package/tokens-v2-private/scss/tokens/functional/size/size.scss +1 -1
  114. package/tokens-v2-private/scss/tokens/functional/size/viewport.scss +1 -1
  115. package/tokens-v2-private/scss/tokens/functional/typography/typography.scss +1 -1
  116. package/tokens-v2-private/ts/tokens/base/size/size.d.ts +1 -1
  117. package/tokens-v2-private/ts/tokens/base/size/size.js +1 -1
  118. package/tokens-v2-private/ts/tokens/base/typography/typography.d.ts +1 -1
  119. package/tokens-v2-private/ts/tokens/base/typography/typography.js +1 -1
  120. package/tokens-v2-private/ts/tokens/functional/size/border.d.ts +1 -1
  121. package/tokens-v2-private/ts/tokens/functional/size/border.js +1 -1
  122. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.d.ts +1 -1
  123. package/tokens-v2-private/ts/tokens/functional/size/breakpoints.js +1 -1
  124. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.d.ts +1 -1
  125. package/tokens-v2-private/ts/tokens/functional/size/size-coarse.js +1 -1
  126. package/tokens-v2-private/ts/tokens/functional/size/size-fine.d.ts +1 -1
  127. package/tokens-v2-private/ts/tokens/functional/size/size-fine.js +1 -1
  128. package/tokens-v2-private/ts/tokens/functional/size/size.d.ts +1 -1
  129. package/tokens-v2-private/ts/tokens/functional/size/size.js +1 -1
  130. package/tokens-v2-private/ts/tokens/functional/size/viewport.d.ts +1 -1
  131. package/tokens-v2-private/ts/tokens/functional/size/viewport.js +1 -1
  132. package/tokens-v2-private/ts/tokens/functional/typography/typography.d.ts +1 -1
  133. package/tokens-v2-private/ts/tokens/functional/typography/typography.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/primitives",
3
- "version": "7.17.0-rc.1685583f",
3
+ "version": "7.17.0-rc.61b28bca",
4
4
  "description": "Typography, spacing, and color primitives for Primer design system",
5
5
  "files": [
6
6
  "dist",
@@ -0,0 +1,18 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isBorder} from './isBorder'
3
+
4
+ describe('Filter: isBorder', () => {
5
+ it('returns true if $type property is `border`', () => {
6
+ expect(isBorder(getMockToken({$type: 'border'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `border`', () => {
10
+ expect(isBorder(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is falsy', () => {
14
+ expect(isBorder(getMockToken({$type: false}))).toStrictEqual(false)
15
+ expect(isBorder(getMockToken({$type: undefined}))).toStrictEqual(false)
16
+ expect(isBorder(getMockToken({$type: null}))).toStrictEqual(false)
17
+ })
18
+ })
@@ -0,0 +1,22 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isColor} from './isColor'
3
+
4
+ describe('Filter: isColor', () => {
5
+ it('returns true if $type property is `color`', () => {
6
+ expect(isColor(getMockToken({$type: 'color'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `color`', () => {
10
+ expect(isColor(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isColor(getMockToken({alpha: 0.4}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is falsy', () => {
18
+ expect(isColor(getMockToken({$type: false}))).toStrictEqual(false)
19
+ expect(isColor(getMockToken({$type: undefined}))).toStrictEqual(false)
20
+ expect(isColor(getMockToken({$type: null}))).toStrictEqual(false)
21
+ })
22
+ })
@@ -0,0 +1,34 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isColorWithAlpha} from './isColorWithAlpha'
3
+
4
+ describe('Filter: isColorWithAlpha', () => {
5
+ it('returns true if $type property is `color` and `alpha` is number', () => {
6
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: 0.4}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `color`', () => {
10
+ expect(isColorWithAlpha(getMockToken({$type: 'pumpkin', alpha: 0.4}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isColorWithAlpha(getMockToken({alpha: 0.4}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type `color` but alpha is missing', () => {
18
+ expect(isColorWithAlpha(getMockToken({$type: 'color'}))).toStrictEqual(false)
19
+ })
20
+
21
+ it('returns false if $type `color` but alpha is not a number', () => {
22
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: true}))).toStrictEqual(false)
23
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: '0.4'}))).toStrictEqual(false)
24
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: false}))).toStrictEqual(false)
25
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: undefined}))).toStrictEqual(false)
26
+ expect(isColorWithAlpha(getMockToken({$type: 'color', alpha: null}))).toStrictEqual(false)
27
+ })
28
+
29
+ it('returns false if $type is falsy ', () => {
30
+ expect(isColorWithAlpha(getMockToken({$type: undefined, alpha: 0.2}))).toStrictEqual(false)
31
+ expect(isColorWithAlpha(getMockToken({$type: false, alpha: 0.2}))).toStrictEqual(false)
32
+ expect(isColorWithAlpha(getMockToken({$type: null, alpha: 0.2}))).toStrictEqual(false)
33
+ })
34
+ })
@@ -0,0 +1,108 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isColorWithMix} from './isColorWithMix'
3
+
4
+ describe('Filter: isColorWithMix', () => {
5
+ it('returns true if $type property is `color` and valid `mix` property exists', () => {
6
+ expect(isColorWithMix(getMockToken({$type: 'color', mix: {color: '#000', weight: 0.5}}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `color`', () => {
10
+ expect(isColorWithMix(getMockToken({$type: 'pumpkin', mix: {color: '#000', weight: 0.5}}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isColorWithMix(getMockToken({value: '#000'}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is missing', () => {
18
+ expect(isColorWithMix(getMockToken({value: '#000', mix: null}))).toStrictEqual(false)
19
+ })
20
+
21
+ it('returns false if $type `color` but mix is missing', () => {
22
+ expect(isColorWithMix(getMockToken({$type: 'color'}))).toStrictEqual(false)
23
+ })
24
+
25
+ it('throws error if $type `color` but mix is invalid', () => {
26
+ expect(() => isColorWithMix(getMockToken({$type: 'color', mix: true}))).toThrow()
27
+ expect(() => isColorWithMix(getMockToken({$type: 'color', mix: '#000'}))).toThrow()
28
+ })
29
+
30
+ it('throws error if $type `color` but mix has invalid properties', () => {
31
+ // missing weight
32
+ expect(() =>
33
+ isColorWithMix(
34
+ getMockToken({
35
+ $type: 'color',
36
+ mix: {
37
+ color: '#000',
38
+ },
39
+ }),
40
+ ),
41
+ ).toThrow()
42
+ // missing color
43
+ expect(() =>
44
+ isColorWithMix(
45
+ getMockToken({
46
+ $type: 'color',
47
+ mix: {
48
+ weight: 0.5,
49
+ },
50
+ }),
51
+ ),
52
+ ).toThrow()
53
+ // color is number
54
+ expect(() =>
55
+ isColorWithMix(
56
+ getMockToken({
57
+ $type: 'color',
58
+ mix: {
59
+ color: 1,
60
+ weight: 0.5,
61
+ },
62
+ }),
63
+ ),
64
+ ).toThrow()
65
+ // color is undefined
66
+ expect(() =>
67
+ isColorWithMix(
68
+ getMockToken({
69
+ $type: 'color',
70
+ mix: {
71
+ color: undefined,
72
+ weight: 0.5,
73
+ },
74
+ }),
75
+ ),
76
+ ).toThrow()
77
+ // weight is undefined
78
+ expect(() =>
79
+ isColorWithMix(
80
+ getMockToken({
81
+ $type: 'color',
82
+ mix: {
83
+ color: '#000',
84
+ weight: undefined,
85
+ },
86
+ }),
87
+ ),
88
+ ).toThrow()
89
+ // weight is a string
90
+ expect(() =>
91
+ isColorWithMix(
92
+ getMockToken({
93
+ $type: 'color',
94
+ mix: {
95
+ color: '#000',
96
+ weight: '0.7',
97
+ },
98
+ }),
99
+ ),
100
+ ).toThrow()
101
+ })
102
+
103
+ it('returns false if $type is falsy ', () => {
104
+ expect(isColorWithMix(getMockToken({$type: undefined, mix: {color: '#000', weight: 0.5}}))).toStrictEqual(false)
105
+ expect(isColorWithMix(getMockToken({$type: false, mix: {color: '#000', weight: 0.5}}))).toStrictEqual(false)
106
+ expect(isColorWithMix(getMockToken({$type: null, mix: {color: '#000', weight: 0.5}}))).toStrictEqual(false)
107
+ })
108
+ })
@@ -0,0 +1,56 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isDeprecated} from './isDeprecated'
3
+
4
+ describe('Filter: isDeprecated', () => {
5
+ it('Returns true if depreacted property is true', () => {
6
+ expect(isDeprecated(getMockToken({deprecated: true}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('Returns true if depreacted property is a string', () => {
10
+ expect(isDeprecated(getMockToken({deprecated: 'pumpkin'}))).toStrictEqual(true)
11
+ })
12
+
13
+ it('Returns false if deprecated is falsy', () => {
14
+ expect(isDeprecated(getMockToken({deprecated: false}))).toStrictEqual(false)
15
+ expect(isDeprecated(getMockToken({deprecated: null}))).toStrictEqual(false)
16
+ expect(isDeprecated(getMockToken({deprecated: undefined}))).toStrictEqual(false)
17
+ })
18
+
19
+ it('Returns false if no deprecated property exists', () => {
20
+ expect(isDeprecated(getMockToken({value: 'pumpkin'}))).toStrictEqual(false)
21
+ })
22
+
23
+ const inputArray = [
24
+ getMockToken({
25
+ deprecated: true,
26
+ }),
27
+ getMockToken({
28
+ deprecated: '{scale.yellow}',
29
+ }),
30
+ getMockToken({
31
+ deprecated: null,
32
+ }),
33
+ getMockToken({
34
+ deprecated: false,
35
+ }),
36
+ getMockToken({
37
+ deprecated: undefined,
38
+ }),
39
+ getMockToken({
40
+ value: 'pumpkin',
41
+ }),
42
+ ]
43
+
44
+ const expectedOutput = [
45
+ getMockToken({
46
+ deprecated: true,
47
+ }),
48
+ getMockToken({
49
+ deprecated: '{scale.yellow}',
50
+ }),
51
+ ]
52
+
53
+ it('Usage as a filter function', () => {
54
+ expect(inputArray.filter(isDeprecated)).toStrictEqual(expectedOutput)
55
+ })
56
+ })
@@ -0,0 +1,22 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isDimension} from './isDimension'
3
+
4
+ describe('Filter: isDimension', () => {
5
+ it('returns true if $type property is `dimension`', () => {
6
+ expect(isDimension(getMockToken({$type: 'dimension'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `dimension`', () => {
10
+ expect(isDimension(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isDimension(getMockToken({alpha: 0.4}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is falsy', () => {
18
+ expect(isDimension(getMockToken({$type: false}))).toStrictEqual(false)
19
+ expect(isDimension(getMockToken({$type: undefined}))).toStrictEqual(false)
20
+ expect(isDimension(getMockToken({$type: null}))).toStrictEqual(false)
21
+ })
22
+ })
@@ -0,0 +1,22 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isDuration} from './isDuration'
3
+
4
+ describe('Filter: isDuration', () => {
5
+ it('returns true if $type property is `duration`', () => {
6
+ expect(isDuration(getMockToken({$type: 'duration'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `duration`', () => {
10
+ expect(isDuration(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isDuration(getMockToken({value: '1000ms'}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is falsy', () => {
18
+ expect(isDuration(getMockToken({$type: false}))).toStrictEqual(false)
19
+ expect(isDuration(getMockToken({$type: undefined}))).toStrictEqual(false)
20
+ expect(isDuration(getMockToken({$type: null}))).toStrictEqual(false)
21
+ })
22
+ })
@@ -0,0 +1,22 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isFontFamily} from './isFontFamily'
3
+
4
+ describe('Filter: isFontFamily', () => {
5
+ it('returns true if $type property is `fontFamily`', () => {
6
+ expect(isFontFamily(getMockToken({$type: 'fontFamily'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `fontFamily`', () => {
10
+ expect(isFontFamily(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isFontFamily(getMockToken({alpha: 0.4}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is falsy', () => {
18
+ expect(isFontFamily(getMockToken({$type: false}))).toStrictEqual(false)
19
+ expect(isFontFamily(getMockToken({$type: undefined}))).toStrictEqual(false)
20
+ expect(isFontFamily(getMockToken({$type: null}))).toStrictEqual(false)
21
+ })
22
+ })
@@ -0,0 +1,22 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isFontWeight} from './isFontWeight'
3
+
4
+ describe('Filter: isFontWeight', () => {
5
+ it('returns true if $type property is `fontWeight`', () => {
6
+ expect(isFontWeight(getMockToken({$type: 'fontWeight'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `fontWeight`', () => {
10
+ expect(isFontWeight(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is missing', () => {
14
+ expect(isFontWeight(getMockToken({alpha: 0.4}))).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if $type property is falsy', () => {
18
+ expect(isFontWeight(getMockToken({$type: false}))).toStrictEqual(false)
19
+ expect(isFontWeight(getMockToken({$type: undefined}))).toStrictEqual(false)
20
+ expect(isFontWeight(getMockToken({$type: null}))).toStrictEqual(false)
21
+ })
22
+ })
@@ -0,0 +1,34 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isFromFile} from './isFromFile'
3
+
4
+ describe('Filter: isFromFile', () => {
5
+ it('returns true if token.filePath is in provided array of file paths', () => {
6
+ expect(isFromFile(getMockToken({filePath: 'src/tokens.json'}), ['src/tokens.json'])).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if token.filePath is NOT in provided array of file paths', () => {
10
+ expect(isFromFile(getMockToken({filePath: 'src/notTokens.json'}), ['src/tokens.json'])).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if token.filePath is undefined', () => {
14
+ expect(isFromFile(getMockToken({filePath: undefined}), ['src/tokens.json'])).toStrictEqual(false)
15
+ })
16
+
17
+ it('returns false if array of file paths is empty', () => {
18
+ expect(isFromFile(getMockToken({filePath: 'src/tokens.json'}), [])).toStrictEqual(false)
19
+ })
20
+
21
+ it('returns false if token.filePath is undefined and array is empty', () => {
22
+ expect(isFromFile(getMockToken({filePath: undefined}), [])).toStrictEqual(false)
23
+ })
24
+
25
+ it('returns false if file path array is undefined', () => {
26
+ // @ts-expect-error: path is missing
27
+ expect(isFromFile(getMockToken({path: 'src/tokens.json'}))).toStrictEqual(false)
28
+ })
29
+
30
+ it('returns false if token.filePath & file path array is undefined', () => {
31
+ // @ts-expect-error: path is missing
32
+ expect(isFromFile(getMockToken({filePath: undefined}))).toStrictEqual(false)
33
+ })
34
+ })
@@ -0,0 +1,18 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isShadow} from './isShadow'
3
+
4
+ describe('Filter: isShadow', () => {
5
+ it('returns true if $type property is `shadow`', () => {
6
+ expect(isShadow(getMockToken({$type: 'shadow'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `shadow`', () => {
10
+ expect(isShadow(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is falsy', () => {
14
+ expect(isShadow(getMockToken({$type: false}))).toStrictEqual(false)
15
+ expect(isShadow(getMockToken({$type: undefined}))).toStrictEqual(false)
16
+ expect(isShadow(getMockToken({$type: null}))).toStrictEqual(false)
17
+ })
18
+ })
@@ -0,0 +1,44 @@
1
+ import type StyleDictionary from 'style-dictionary'
2
+ import {getMockToken} from '../test-utilities'
3
+ import {isSource} from './isSource'
4
+
5
+ describe('Filter: isSource', () => {
6
+ it('Returns true if isSource property is true', () => {
7
+ expect(isSource(getMockToken({isSource: true}))).toStrictEqual(true)
8
+ })
9
+
10
+ it('Returns false if isSource property is falsy value', () => {
11
+ expect(isSource(getMockToken({isSource: false}))).toStrictEqual(false)
12
+ expect(isSource(getMockToken({isSource: null}))).toStrictEqual(false)
13
+ expect(isSource(getMockToken({isSource: undefined}))).toStrictEqual(false)
14
+ })
15
+
16
+ it('Returns false if isSource property is truthy non-boolean value', () => {
17
+ expect(isSource(getMockToken({isSource: 'pumpkin'}))).toStrictEqual(false)
18
+ expect(isSource(getMockToken({isSource: 1}))).toStrictEqual(false)
19
+ })
20
+
21
+ it('Returns false if no isSource property exists', () => {
22
+ expect(isSource({value: 'pumpkin'} as StyleDictionary.TransformedToken)).toStrictEqual(false)
23
+ })
24
+
25
+ it('Usage as a filter function', () => {
26
+ const inputArray = [
27
+ getMockToken({
28
+ value: 'red is source',
29
+ isSource: true,
30
+ }),
31
+ getMockToken({
32
+ value: 'blue is not source',
33
+ isSource: false,
34
+ }),
35
+ {
36
+ value: 'yellow is not source',
37
+ },
38
+ ] as StyleDictionary.TransformedToken[]
39
+
40
+ const expectedOutput = inputArray.filter(item => item.isSource === true)
41
+
42
+ expect(inputArray.filter(isSource)).toStrictEqual(expectedOutput)
43
+ })
44
+ })
@@ -0,0 +1,18 @@
1
+ import {getMockToken} from '../test-utilities'
2
+ import {isTypography} from './isTypography'
3
+
4
+ describe('Filter: isTypography', () => {
5
+ it('returns true if $type property is `typography`', () => {
6
+ expect(isTypography(getMockToken({$type: 'typography'}))).toStrictEqual(true)
7
+ })
8
+
9
+ it('returns false if $type property is not `typography`', () => {
10
+ expect(isTypography(getMockToken({$type: 'pumpkin'}))).toStrictEqual(false)
11
+ })
12
+
13
+ it('returns false if $type property is falsy', () => {
14
+ expect(isTypography(getMockToken({$type: false}))).toStrictEqual(false)
15
+ expect(isTypography(getMockToken({$type: undefined}))).toStrictEqual(false)
16
+ expect(isTypography(getMockToken({$type: null}))).toStrictEqual(false)
17
+ })
18
+ })
@@ -0,0 +1,11 @@
1
+ import {cssCustomMedia} from './cssCustomMedia'
2
+ import {getMockFormatterArguments} from '../test-utilities'
3
+ import {format} from 'prettier'
4
+
5
+ describe('Format: tokens to custom-media', () => {
6
+ it('Formats tokens with custom media', () => {
7
+ const input = getMockFormatterArguments()
8
+ const expectedOutput = format(`@custom-media --red transformedValue;`, {parser: 'css', printWidth: 500})
9
+ expect(cssCustomMedia(input)).toStrictEqual(expectedOutput)
10
+ })
11
+ })
@@ -0,0 +1,87 @@
1
+ import {cssThemed} from './cssThemed'
2
+ import {getMockFormatterArguments} from '../test-utilities'
3
+ import {format} from 'prettier'
4
+
5
+ describe('Format: Css Themed', () => {
6
+ it('Formats tokens', () => {
7
+ const input = getMockFormatterArguments()
8
+ const expectedOutput = format(
9
+ `:root {
10
+ --red: transformedValue;
11
+ }`,
12
+ {
13
+ parser: 'css',
14
+ printWidth: 500,
15
+ },
16
+ )
17
+ expect(cssThemed(input)).toStrictEqual(expectedOutput)
18
+ })
19
+
20
+ it('Formats tokens with custom selectors', () => {
21
+ const input = getMockFormatterArguments({
22
+ options: {
23
+ selector: `[data-color-mode="dark"][data-dark-theme="dark"]`,
24
+ selectorLight: `[data-color-mode="auto"][data-light-theme="dark"]`,
25
+ selectorDark: `[data-color-mode="auto"][data-dark-theme="dark"]`,
26
+ },
27
+ })
28
+ const expectedOutput = format(
29
+ ` [data-color-mode="dark"][data-dark-theme="dark"],
30
+ [data-color-mode="auto"][data-light-theme="dark"] {
31
+ --red: transformedValue;
32
+ }
33
+ @media (prefers-color-scheme: dark) {
34
+ [data-color-mode="auto"][data-dark-theme="dark"] {
35
+ --red: transformedValue;
36
+ }
37
+ }`,
38
+ {parser: 'css', printWidth: 500},
39
+ )
40
+ expect(cssThemed(input)).toStrictEqual(expectedOutput)
41
+ })
42
+
43
+ it('Formats tokens with only options.selector', () => {
44
+ const input = getMockFormatterArguments({
45
+ options: {
46
+ selector: `[data-color-mode="dark"]`,
47
+ },
48
+ })
49
+ const expectedOutput = format(
50
+ `[data-color-mode="dark"]{
51
+ --red: transformedValue;
52
+ }`,
53
+ {parser: 'css', printWidth: 500},
54
+ )
55
+ expect(cssThemed(input)).toStrictEqual(expectedOutput)
56
+ })
57
+
58
+ it('Formats tokens with only options.selectorLight', () => {
59
+ const input = getMockFormatterArguments({
60
+ options: {
61
+ selectorLight: `[data-color-mode="light"]`,
62
+ },
63
+ })
64
+ const expectedOutput = format(
65
+ `:root, [data-color-mode="light"]{
66
+ --red: transformedValue;
67
+ }`,
68
+ {parser: 'css', printWidth: 500},
69
+ )
70
+ expect(cssThemed(input)).toStrictEqual(expectedOutput)
71
+ })
72
+
73
+ it('Formats tokens with only options.selectorDark', () => {
74
+ const input = getMockFormatterArguments({
75
+ options: {
76
+ selectorLight: `[data-color-mode="dark"]`,
77
+ },
78
+ })
79
+ const expectedOutput = format(
80
+ `:root, [data-color-mode="dark"]{
81
+ --red: transformedValue;
82
+ }`,
83
+ {parser: 'css', printWidth: 500},
84
+ )
85
+ expect(cssThemed(input)).toStrictEqual(expectedOutput)
86
+ })
87
+ })