@telus-uds/components-base 0.0.2-prerelease.6 → 0.0.2-prerelease.7

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 (155) hide show
  1. package/.ultra.cache.json +1 -1
  2. package/CHANGELOG.md +20 -0
  3. package/__fixtures__/testTheme.js +424 -37
  4. package/__tests__/Button/ButtonBase.test.jsx +2 -31
  5. package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
  6. package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
  7. package/__tests__/List/List.test.jsx +60 -0
  8. package/__tests__/Radio/Radio.test.jsx +87 -0
  9. package/__tests__/Select/Select.test.jsx +93 -0
  10. package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
  11. package/__tests__/Tags/Tags.test.jsx +328 -0
  12. package/__tests__/TextInput/TextArea.test.jsx +34 -0
  13. package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +20 -46
  14. package/jest.config.js +3 -1
  15. package/lib/Button/Button.js +10 -3
  16. package/lib/Button/ButtonBase.js +73 -59
  17. package/lib/Button/ButtonGroup.js +11 -27
  18. package/lib/Button/ButtonLink.js +5 -0
  19. package/lib/Checkbox/Checkbox.js +308 -0
  20. package/lib/Checkbox/CheckboxInput.native.js +6 -0
  21. package/lib/Checkbox/CheckboxInput.web.js +57 -0
  22. package/lib/Checkbox/index.js +2 -0
  23. package/lib/Feedback/Feedback.js +20 -3
  24. package/lib/Icon/Icon.js +8 -5
  25. package/lib/Icon/IconText.js +72 -0
  26. package/lib/Icon/index.js +2 -1
  27. package/lib/InputSupports/InputSupports.js +90 -0
  28. package/lib/InputSupports/index.js +2 -0
  29. package/lib/InputSupports/propTypes.js +55 -0
  30. package/lib/Link/ChevronLink.js +23 -20
  31. package/lib/Link/InlinePressable.native.js +78 -0
  32. package/lib/Link/InlinePressable.web.js +32 -0
  33. package/lib/Link/Link.js +11 -10
  34. package/lib/Link/LinkBase.js +62 -123
  35. package/lib/Link/TextButton.js +20 -9
  36. package/lib/Link/index.js +2 -1
  37. package/lib/List/List.js +52 -0
  38. package/lib/List/ListItem.js +207 -0
  39. package/lib/List/index.js +2 -0
  40. package/lib/Pagination/PageButton.js +2 -25
  41. package/lib/Pagination/SideButton.js +27 -37
  42. package/lib/Radio/Radio.js +291 -0
  43. package/lib/Radio/RadioInput.native.js +6 -0
  44. package/lib/Radio/RadioInput.web.js +59 -0
  45. package/lib/Radio/index.js +2 -0
  46. package/lib/Select/Group.native.js +14 -0
  47. package/lib/Select/Group.web.js +18 -0
  48. package/lib/Select/Item.native.js +9 -0
  49. package/lib/Select/Item.web.js +15 -0
  50. package/lib/Select/Picker.native.js +87 -0
  51. package/lib/Select/Picker.web.js +63 -0
  52. package/lib/Select/Select.js +272 -0
  53. package/lib/Select/index.js +6 -0
  54. package/lib/Skeleton/Skeleton.js +119 -0
  55. package/lib/Skeleton/index.js +2 -0
  56. package/lib/Tags/Tags.js +217 -0
  57. package/lib/Tags/index.js +2 -0
  58. package/lib/TextInput/TextArea.js +82 -0
  59. package/lib/TextInput/TextInput.js +23 -304
  60. package/lib/TextInput/TextInputBase.js +229 -0
  61. package/lib/TextInput/index.js +2 -1
  62. package/lib/TextInput/propTypes.js +31 -0
  63. package/lib/ThemeProvider/useThemeTokens.js +54 -3
  64. package/lib/ToggleSwitch/ToggleSwitch.js +1 -1
  65. package/lib/Typography/Typography.js +4 -19
  66. package/lib/index.js +8 -1
  67. package/lib/utils/a11y/index.js +1 -0
  68. package/lib/utils/a11y/textSize.js +33 -0
  69. package/lib/utils/index.js +3 -0
  70. package/lib/utils/info/index.js +7 -0
  71. package/lib/utils/info/platform/index.js +11 -0
  72. package/lib/utils/info/platform/platform.android.js +1 -0
  73. package/lib/utils/info/platform/platform.ios.js +1 -0
  74. package/lib/utils/info/platform/platform.native.js +4 -0
  75. package/lib/utils/info/platform/platform.web.js +1 -0
  76. package/lib/utils/info/versions.js +5 -0
  77. package/lib/utils/pressability.js +92 -0
  78. package/lib/utils/propTypes.js +78 -17
  79. package/package.json +5 -4
  80. package/release-context.json +4 -4
  81. package/src/Button/Button.jsx +6 -3
  82. package/src/Button/ButtonBase.jsx +66 -57
  83. package/src/Button/ButtonGroup.jsx +9 -22
  84. package/src/Button/ButtonLink.jsx +11 -2
  85. package/src/Checkbox/Checkbox.jsx +275 -0
  86. package/src/Checkbox/CheckboxInput.native.jsx +6 -0
  87. package/src/Checkbox/CheckboxInput.web.jsx +55 -0
  88. package/src/Checkbox/index.js +3 -0
  89. package/src/Feedback/Feedback.jsx +13 -4
  90. package/src/Icon/Icon.jsx +9 -5
  91. package/src/Icon/IconText.jsx +63 -0
  92. package/src/Icon/index.js +2 -1
  93. package/src/InputSupports/InputSupports.jsx +86 -0
  94. package/src/InputSupports/index.js +3 -0
  95. package/src/InputSupports/propTypes.js +44 -0
  96. package/src/Link/ChevronLink.jsx +20 -17
  97. package/src/Link/InlinePressable.native.jsx +73 -0
  98. package/src/Link/InlinePressable.web.jsx +37 -0
  99. package/src/Link/Link.jsx +17 -13
  100. package/src/Link/LinkBase.jsx +57 -140
  101. package/src/Link/TextButton.jsx +25 -11
  102. package/src/Link/index.js +2 -1
  103. package/src/List/List.jsx +47 -0
  104. package/src/List/ListItem.jsx +187 -0
  105. package/src/List/index.js +3 -0
  106. package/src/Pagination/PageButton.jsx +2 -16
  107. package/src/Pagination/SideButton.jsx +23 -34
  108. package/src/Radio/Radio.jsx +270 -0
  109. package/src/Radio/RadioInput.native.jsx +6 -0
  110. package/src/Radio/RadioInput.web.jsx +57 -0
  111. package/src/Radio/index.js +3 -0
  112. package/src/Select/Group.native.jsx +14 -0
  113. package/src/Select/Group.web.jsx +15 -0
  114. package/src/Select/Item.native.jsx +10 -0
  115. package/src/Select/Item.web.jsx +11 -0
  116. package/src/Select/Picker.native.jsx +95 -0
  117. package/src/Select/Picker.web.jsx +67 -0
  118. package/src/Select/Select.jsx +265 -0
  119. package/src/Select/index.js +8 -0
  120. package/src/Skeleton/Skeleton.jsx +101 -0
  121. package/src/Skeleton/index.js +3 -0
  122. package/src/Tags/Tags.jsx +206 -0
  123. package/src/Tags/index.js +3 -0
  124. package/src/TextInput/TextArea.jsx +78 -0
  125. package/src/TextInput/TextInput.jsx +17 -284
  126. package/src/TextInput/TextInputBase.jsx +220 -0
  127. package/src/TextInput/index.js +2 -1
  128. package/src/TextInput/propTypes.js +29 -0
  129. package/src/ThemeProvider/useThemeTokens.js +54 -3
  130. package/src/ToggleSwitch/ToggleSwitch.jsx +1 -1
  131. package/src/Typography/Typography.jsx +4 -15
  132. package/src/index.js +8 -1
  133. package/src/utils/a11y/index.js +1 -0
  134. package/src/utils/a11y/textSize.js +30 -0
  135. package/src/utils/index.js +3 -0
  136. package/src/utils/info/index.js +8 -0
  137. package/src/utils/info/platform/index.js +11 -0
  138. package/src/utils/info/platform/platform.android.js +1 -0
  139. package/src/utils/info/platform/platform.ios.js +1 -0
  140. package/src/utils/info/platform/platform.native.js +4 -0
  141. package/src/utils/info/platform/platform.web.js +1 -0
  142. package/src/utils/info/versions.js +6 -0
  143. package/src/utils/pressability.js +92 -0
  144. package/src/utils/propTypes.js +97 -22
  145. package/stories/Button/Button.stories.jsx +5 -0
  146. package/stories/Checkbox/Checkbox.stories.jsx +71 -0
  147. package/stories/Feedback/Feedback.stories.jsx +5 -6
  148. package/stories/Link/Link.stories.jsx +15 -1
  149. package/stories/List/List.stories.jsx +117 -0
  150. package/stories/Radio/Radio.stories.jsx +113 -0
  151. package/stories/Select/Select.stories.jsx +55 -0
  152. package/stories/Skeleton/Skeleton.stories.jsx +36 -0
  153. package/stories/Tags/Tags.stories.jsx +69 -0
  154. package/stories/TextInput/TextArea.stories.jsx +100 -0
  155. package/stories/supports.jsx +1 -1
@@ -1,12 +1,4 @@
1
- const {
2
- buttonAppearances,
3
- linkAppearances,
4
- sideNavItemAppearances,
5
- toggleSwitchAppearances,
6
- textInputAppearances,
7
- feedbackAppearances
8
- } = require('@telus-uds/tools-theme')
9
- const { appearances: systemAppearances } = require('@telus-uds/system-constants')
1
+ import { appearances } from '@telus-uds/system-themes/schema'
10
2
 
11
3
  // This is a dev-only file so we don't need to make @telus-uds/palette-allium a dependency.
12
4
  // eslint-disable-next-line import/no-extraneous-dependencies
@@ -16,11 +8,13 @@ const chevronLeft = require('@telus-uds/palette-allium/build/rn/icons/chevron-le
16
8
  const chevronRight = require('@telus-uds/palette-allium/build/rn/icons/chevron-right.icon.svg')
17
9
  .default
18
10
  // eslint-disable-next-line import/no-extraneous-dependencies
11
+ const checkmarkIcon = require('@telus-uds/palette-allium/build/rn/icons/checkmark.icon.svg').default
12
+ // eslint-disable-next-line import/no-extraneous-dependencies
19
13
  const questionIcon = require('@telus-uds/palette-allium/build/rn/icons/question.icon.svg').default
20
14
 
21
15
  const transparent = 'rgba(0, 0, 0, 0)'
22
16
 
23
- module.exports = {
17
+ export default {
24
18
  metadata: {
25
19
  name: 'test'
26
20
  },
@@ -116,7 +110,9 @@ module.exports = {
116
110
  values: [true],
117
111
  type: 'variant'
118
112
  },
119
- ...buttonAppearances
113
+ focus: appearances.Button.focus,
114
+ hover: appearances.Button.hover,
115
+ pressed: appearances.Button.pressed
120
116
  },
121
117
  tokens: {
122
118
  borderColor: '#0e6ac8',
@@ -133,6 +129,7 @@ module.exports = {
133
129
  color: '#0e6ac8',
134
130
  lineHeight: 1.5,
135
131
  fontWeight: '600',
132
+ alignSelf: 'flex-start',
136
133
 
137
134
  backgroundColor: '#ffffff',
138
135
  opacity: 1,
@@ -292,10 +289,73 @@ module.exports = {
292
289
  },
293
290
  ButtonGroup: {
294
291
  tokens: {
295
- gap: 8,
296
- direction: 'row'
292
+ space: 2,
293
+ direction: 'row',
294
+ alignItems: 'flex-start',
295
+ justifyContent: 'flex-start',
296
+ flexGrow: 1
297
297
  }
298
298
  },
299
+ ButtonGroupItem: {
300
+ appearances: {
301
+ focus: appearances.ButtonGroupItem.focus,
302
+ hover: appearances.ButtonGroupItem.hover,
303
+ pressed: appearances.ButtonGroupItem.pressed,
304
+ selected: appearances.ButtonGroupItem.selected
305
+ },
306
+ tokens: {
307
+ borderColor: '#0e6ac8',
308
+ borderWidth: 2,
309
+ borderRadius: 0,
310
+ shadow: null,
311
+
312
+ outerBorderColor: transparent,
313
+ outerBorderWidth: 4,
314
+ outerBorderGap: 2,
315
+ outerBorderRadius: 2,
316
+
317
+ fontSize: 16,
318
+ color: '#0e6ac8',
319
+ lineHeight: 1.5,
320
+ fontWeight: '600',
321
+ alignSelf: 'flex-start',
322
+
323
+ backgroundColor: '#ffffff',
324
+ opacity: 1,
325
+ paddingLeft: 24,
326
+ paddingRight: 24,
327
+ paddingTop: 8,
328
+ paddingBottom: 8,
329
+
330
+ width: null
331
+ },
332
+ rules: [
333
+ {
334
+ if: { focus: true },
335
+ tokens: {
336
+ borderWidth: 4,
337
+ outerBorderColor: '#0e6ac8',
338
+ opacity: 0.5
339
+ }
340
+ },
341
+ {
342
+ if: { hover: true },
343
+ tokens: {
344
+ borderWidth: 6
345
+ }
346
+ },
347
+ {
348
+ if: { pressed: true },
349
+ tokens: {
350
+ borderWidth: 8
351
+ }
352
+ },
353
+ {
354
+ if: { selected: true },
355
+ tokens: { backgroundColor: '#0e6ac8', color: '#ffffff', opacity: 1 }
356
+ }
357
+ ]
358
+ },
299
359
  Card: {
300
360
  appearances: {
301
361
  background: {
@@ -306,7 +366,7 @@ module.exports = {
306
366
  values: ['narrow', 'intermediate', 'compact', 'custom'],
307
367
  type: 'variant'
308
368
  },
309
- viewport: systemAppearances.viewport
369
+ viewport: appearances.system.viewport
310
370
  },
311
371
  tokens: {
312
372
  backgroundColor: '#ffffff',
@@ -390,6 +450,70 @@ module.exports = {
390
450
  }
391
451
  ]
392
452
  },
453
+ Checkbox: {
454
+ appearances: {
455
+ error: appearances.Checkbox.error,
456
+ focus: appearances.Checkbox.focus,
457
+ inactive: appearances.Checkbox.inactive
458
+ },
459
+ tokens: {
460
+ containerBackgroundColor: transparent,
461
+ containerMarginBottom: 8,
462
+ feedbackMarginBottom: 0,
463
+ feedbackMarginTop: 2,
464
+ feedbackPosition: 'bottom',
465
+ icon: checkmarkIcon,
466
+ iconBackgroundColor: '#7c53a5',
467
+ iconColor: '#ffffff',
468
+ iconSize: 18,
469
+ inputBackgroundColor: '#ffffff',
470
+ inputBorderColor: '#676e73',
471
+ inputBorderRadius: 4,
472
+ inputBorderWidth: 1,
473
+ inputHeight: 20,
474
+ inputOutlineColor: null,
475
+ inputOutlineWidth: 0,
476
+ inputShadow: {
477
+ color: '#00000044',
478
+ offsetY: 1,
479
+ offsetX: 1,
480
+ spread: 0,
481
+ blur: 1,
482
+ inset: false
483
+ },
484
+ inputWidth: 20,
485
+ labelColor: '#414547',
486
+ labelFontSize: 18,
487
+ labelFontWeight: '500',
488
+ labelLineHeight: 1.5,
489
+ labelMarginLeft: 8
490
+ },
491
+ rules: [
492
+ {
493
+ if: { error: true },
494
+ tokens: {
495
+ inputBorderColor: '#e12339'
496
+ }
497
+ },
498
+ {
499
+ if: { focus: true },
500
+ tokens: {
501
+ inputBorderColor: '#7c53a5',
502
+ inputBorderWidth: 3
503
+ }
504
+ },
505
+ {
506
+ if: { inactive: true },
507
+ tokens: {
508
+ inputBorderColor: 'transparent',
509
+ inputBackgroundColor: '#e3e6e8',
510
+ iconBackgroundColor: '#e3e6e8',
511
+ iconColor: 'rgba(103, 110, 115, 1)',
512
+ labelColor: '#676e73'
513
+ }
514
+ }
515
+ ]
516
+ },
393
517
  ChevronLink: {
394
518
  appearances: {},
395
519
  tokens: {
@@ -504,7 +628,7 @@ module.exports = {
504
628
  values: [true],
505
629
  type: 'variant'
506
630
  },
507
- viewport: systemAppearances.viewport
631
+ viewport: appearances.system.viewport
508
632
  },
509
633
  tokens: {
510
634
  fontWeight: '400',
@@ -735,7 +859,7 @@ module.exports = {
735
859
  values: [true],
736
860
  type: 'state'
737
861
  },
738
- iconPosition: linkAppearances.iconPosition
862
+ iconPosition: appearances.Link.iconPosition
739
863
  },
740
864
  tokens: {
741
865
  color: '#0000ff',
@@ -753,9 +877,7 @@ module.exports = {
753
877
  textLineStyle: 'solid',
754
878
 
755
879
  iconSize: 18,
756
- iconGapBefore: 4,
757
- iconGapAfter: 4,
758
- iconScale: 1
880
+ iconSpace: 1
759
881
  },
760
882
  rules: [
761
883
  {
@@ -777,14 +899,6 @@ module.exports = {
777
899
  color: '#ff0000',
778
900
  textLine: 'none'
779
901
  }
780
- },
781
- {
782
- if: { component: 'ChevronLink', iconPosition: 'left' },
783
- tokens: { icon: chevronLeft }
784
- },
785
- {
786
- if: { component: 'ChevronLink', iconPosition: 'right' },
787
- tokens: { icon: chevronRight }
788
902
  }
789
903
  ]
790
904
  },
@@ -834,10 +948,71 @@ module.exports = {
834
948
  }
835
949
  ]
836
950
  },
951
+ Radio: {
952
+ appearances: {
953
+ checked: appearances.Radio.checked,
954
+ error: appearances.Radio.error,
955
+ focus: appearances.Radio.focus,
956
+ hover: appearances.Radio.hover,
957
+ inactive: appearances.Radio.inactive
958
+ },
959
+ tokens: {
960
+ checkedBackgroundColor: '#7c53a5',
961
+ checkedSize: 12,
962
+ containerBackgroundColor: '#ffffff',
963
+ containerBorderRadius: 12,
964
+ containerMarginBottom: 0,
965
+ containerOpacity: 1,
966
+ containerPaddingBottom: 12,
967
+ containerPaddingLeft: 18,
968
+ containerPaddingRight: 18,
969
+ containerPaddingTop: 12,
970
+ containerShadow: null,
971
+ descriptionFontSize: 14,
972
+ descriptionLineHeight: 1.4,
973
+ descriptionMarginLeft: null,
974
+ inputBackgroundColor: '#ffffff',
975
+ inputBorderColor: '#676e73',
976
+ inputBorderWidth: 1,
977
+ inputOutlineColor: null,
978
+ inputOutlineWidth: 0,
979
+ inputSize: 20,
980
+ inputShadow: null,
981
+ labelColor: '#414547',
982
+ labelFontName: '',
983
+ labelFontSize: 18,
984
+ labelFontWeight: '500',
985
+ labelLineHeight: 1.5,
986
+ labelMarginLeft: 8
987
+ },
988
+ rules: [
989
+ {
990
+ if: { error: true },
991
+ tokens: {
992
+ inputBorderColor: '#e12339'
993
+ }
994
+ },
995
+ {
996
+ if: { focus: true },
997
+ tokens: {
998
+ inputBorderColor: '#7c53a5',
999
+ inputBorderWidth: 3
1000
+ }
1001
+ },
1002
+ {
1003
+ if: { inactive: true },
1004
+ tokens: {
1005
+ inputBorderColor: 'transparent',
1006
+ inputBackgroundColor: '#e3e6e8',
1007
+ labelColor: '#676e73'
1008
+ }
1009
+ }
1010
+ ]
1011
+ },
837
1012
  SideNav: {},
838
1013
  SideNavItem: {
839
1014
  appearances: {
840
- ...sideNavItemAppearances
1015
+ type: appearances.SideNavItem.type
841
1016
  },
842
1017
  rules: [
843
1018
  {
@@ -856,11 +1031,11 @@ module.exports = {
856
1031
  },
857
1032
  ToggleSwitch: {
858
1033
  appearances: {
859
- focus: toggleSwitchAppearances.focus,
860
- hover: toggleSwitchAppearances.hover,
861
- pressed: toggleSwitchAppearances.pressed,
862
- inactive: toggleSwitchAppearances.inactive,
863
- selected: toggleSwitchAppearances.selected
1034
+ focus: appearances.ToggleSwitch.focus,
1035
+ hover: appearances.ToggleSwitch.hover,
1036
+ pressed: appearances.ToggleSwitch.pressed,
1037
+ inactive: appearances.ToggleSwitch.inactive,
1038
+ selected: appearances.ToggleSwitch.selected
864
1039
  },
865
1040
  tokens: {
866
1041
  outerBorderColor: '#000000',
@@ -877,6 +1052,7 @@ module.exports = {
877
1052
  paddingRight: 2,
878
1053
  paddingTop: 2,
879
1054
  paddingBottom: 2,
1055
+ alignSelf: 'flex-start',
880
1056
 
881
1057
  trackBorderWidth: 2,
882
1058
  trackBorderColor: '#bbbbbb',
@@ -931,7 +1107,10 @@ module.exports = {
931
1107
  },
932
1108
  TextInput: {
933
1109
  appearances: {
934
- ...textInputAppearances
1110
+ validation: appearances.TextInput.validation,
1111
+ focus: appearances.TextInput.focus,
1112
+ hover: appearances.TextInput.hover,
1113
+ inactive: appearances.TextInput.inactive
935
1114
  },
936
1115
  tokens: {
937
1116
  borderRadius: 4,
@@ -987,7 +1166,7 @@ module.exports = {
987
1166
  },
988
1167
  Feedback: {
989
1168
  appearances: {
990
- ...feedbackAppearances
1169
+ validation: appearances.Feedback.validation
991
1170
  },
992
1171
  tokens: {
993
1172
  borderColor: '#eee',
@@ -1001,8 +1180,156 @@ module.exports = {
1001
1180
  paddingRight: 12
1002
1181
  },
1003
1182
  rules: [
1004
- { if: { state: 'success' }, tokens: { color: 'green' } },
1005
- { if: { state: 'error' }, tokens: { color: 'red' } }
1183
+ { if: { validation: 'success' }, tokens: { color: 'green' } },
1184
+ { if: { validation: 'error' }, tokens: { color: 'red' } }
1185
+ ]
1186
+ },
1187
+ List: {
1188
+ appearances: {
1189
+ size: {
1190
+ values: ['large', 'small'],
1191
+ type: 'variant'
1192
+ },
1193
+ compact: {
1194
+ values: [true],
1195
+ type: 'variant'
1196
+ }
1197
+ },
1198
+ tokens: {
1199
+ interItemMargin: 8,
1200
+ interItemMarginWithDivider: 16,
1201
+ dividerColor: '#666666',
1202
+ dividerSize: 1,
1203
+ itemBulletContainerWidth: 16,
1204
+ itemBulletContainerAlign: 'center',
1205
+ itemBulletWidth: 4,
1206
+ itemBulletHeight: 4,
1207
+ itemBulletColor: '#6666cc',
1208
+ itemIconSize: 16,
1209
+ itemIconColor: '#6666cc',
1210
+ listGutter: 10,
1211
+ itemLineHeight: 1.5
1212
+ },
1213
+ rules: [
1214
+ {
1215
+ if: { size: 'large' },
1216
+ tokens: {
1217
+ itemFontSize: 20,
1218
+ itemLineHeight: 1.6,
1219
+ listGutter: 16
1220
+ }
1221
+ },
1222
+ {
1223
+ if: { size: 'small' },
1224
+ tokens: {
1225
+ itemFontSize: 14,
1226
+ itemLineHeight: 1.42857142857,
1227
+ listGutter: 10
1228
+ }
1229
+ },
1230
+ {
1231
+ if: { compact: true },
1232
+ tokens: {
1233
+ itemLineHeight: 1.25
1234
+ }
1235
+ },
1236
+ {
1237
+ if: { compact: true, size: 'small' },
1238
+ tokens: {
1239
+ itemLineHeight: 1.14285714286
1240
+ }
1241
+ },
1242
+ {
1243
+ if: { compact: true, size: 'large' },
1244
+ tokens: {
1245
+ itemLineHeight: 1.2
1246
+ }
1247
+ }
1248
+ ]
1249
+ },
1250
+ Tags: {
1251
+ space: 2,
1252
+ direction: 'row',
1253
+ alignItems: 'flex-start',
1254
+ justifyContent: 'flex-start',
1255
+ flexGrow: 1
1256
+ },
1257
+ TagsItem: {
1258
+ appearances: {
1259
+ focus: appearances.ButtonGroupItem.focus,
1260
+ hover: appearances.ButtonGroupItem.hover,
1261
+ pressed: appearances.ButtonGroupItem.pressed,
1262
+ selected: appearances.ButtonGroupItem.selected
1263
+ },
1264
+ tokens: {
1265
+ icon: checkmarkIcon,
1266
+ iconSize: 16,
1267
+ iconColor: '#ffffff',
1268
+ iconTranslateX: 0,
1269
+ iconTranslateY: 0,
1270
+
1271
+ iconPosition: 'right',
1272
+ iconSpace: 2,
1273
+ iconBackground: '#ffffff',
1274
+ iconBorderRadius: 0,
1275
+ iconAlignSelf: 'center',
1276
+ iconPadding: 0,
1277
+
1278
+ borderColor: '#0e6ac8',
1279
+ borderWidth: 2,
1280
+ borderRadius: 0,
1281
+ shadow: null,
1282
+
1283
+ outerBorderColor: transparent,
1284
+ outerBorderWidth: 4,
1285
+ outerBorderGap: 2,
1286
+ outerBorderRadius: 2,
1287
+
1288
+ fontSize: 16,
1289
+ color: '#0e6ac8',
1290
+ lineHeight: 1.5,
1291
+ fontWeight: '600',
1292
+ alignSelf: 'flex-start',
1293
+
1294
+ backgroundColor: '#ffffff',
1295
+ opacity: 1,
1296
+ paddingLeft: 24,
1297
+ paddingRight: 24,
1298
+ paddingTop: 8,
1299
+ paddingBottom: 8,
1300
+
1301
+ width: null
1302
+ },
1303
+ rules: [
1304
+ {
1305
+ if: { focus: true },
1306
+ tokens: {
1307
+ borderWidth: 4,
1308
+ outerBorderColor: '#0e6ac8',
1309
+ opacity: 0.5
1310
+ }
1311
+ },
1312
+ {
1313
+ if: { hover: true },
1314
+ tokens: {
1315
+ borderWidth: 6
1316
+ }
1317
+ },
1318
+ {
1319
+ if: { pressed: true },
1320
+ tokens: {
1321
+ borderWidth: 8
1322
+ }
1323
+ },
1324
+ {
1325
+ if: { selected: true },
1326
+ tokens: {
1327
+ backgroundColor: '#0e6ac8',
1328
+ color: '#ffffff',
1329
+ opacity: 1,
1330
+ iconBackground: '#0e6ac8'
1331
+ }
1332
+ }
1006
1333
  ]
1007
1334
  },
1008
1335
  Tooltip: {
@@ -1022,6 +1349,66 @@ module.exports = {
1022
1349
  iconColor: 'black',
1023
1350
  iconSize: 16
1024
1351
  }
1352
+ },
1353
+ TextArea: {},
1354
+ InputSupports: {},
1355
+ Skeleton: {
1356
+ tokens: {
1357
+ color: '#b2b9bf',
1358
+ radius: 100,
1359
+ size: 3,
1360
+ baseWidth: 40,
1361
+ characters: 10,
1362
+ spaceBetweenLines: 2,
1363
+ squareRadius: 4
1364
+ }
1365
+ },
1366
+ Select: {
1367
+ tokens: {
1368
+ borderRadius: 4,
1369
+ borderWidth: 1,
1370
+ borderColor: '#00000044',
1371
+ paddingTop: 6,
1372
+ paddingBottom: 6,
1373
+ paddingLeft: 6,
1374
+ paddingRight: 6,
1375
+ outerBorderWidth: 1,
1376
+ outerBorderColor: transparent,
1377
+ outerBorderRadius: 4
1378
+ },
1379
+ rules: [
1380
+ {
1381
+ if: { validation: 'success' },
1382
+ tokens: {
1383
+ outerBorderColor: '#99ff99'
1384
+ }
1385
+ },
1386
+ {
1387
+ if: { validation: 'error' },
1388
+ tokens: {
1389
+ outerBorderColor: '#990000'
1390
+ }
1391
+ },
1392
+ {
1393
+ if: { focus: true },
1394
+ tokens: {
1395
+ outerBorderColor: '#debc06'
1396
+ }
1397
+ },
1398
+ {
1399
+ if: { hover: true },
1400
+ tokens: {
1401
+ outerBorderColor: '#6666cc'
1402
+ }
1403
+ },
1404
+ {
1405
+ if: { inactive: true },
1406
+ tokens: {
1407
+ outerBorderColor: transparent,
1408
+ backgroundColor: '#00000044'
1409
+ }
1410
+ }
1411
+ ]
1025
1412
  }
1026
1413
  }
1027
1414
  }
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-console */
2
1
  import React from 'react'
3
2
  import { render } from '@testing-library/react-native'
4
3
  import { Platform, Text } from 'react-native'
@@ -9,41 +8,13 @@ import ButtonBase from '../../src/Button/ButtonBase'
9
8
 
10
9
  beforeEach(() => jest.clearAllMocks())
11
10
 
12
- describe('ButtonBase', () => {
13
- it('throws if both href and onPress are provided', async () => {
14
- jest.spyOn(console, 'error').mockImplementation()
15
- expect(() =>
16
- render(
17
- <Theme>
18
- <ButtonBase href="example.com" onPress={jest.fn()}>
19
- click me
20
- </ButtonBase>
21
- </Theme>
22
- )
23
- ).toThrow()
24
- expect(console.error).toHaveBeenCalledTimes(1)
25
- })
26
-
27
- it('throws if neither href nor onPress are provided', async () => {
28
- jest.spyOn(console, 'error').mockImplementation()
29
- expect(() =>
30
- render(
31
- <Theme>
32
- <ButtonBase>click me</ButtonBase>
33
- </Theme>
34
- )
35
- ).toThrow()
36
- expect(console.error).toHaveBeenCalledTimes(1)
37
- })
38
- })
39
-
40
11
  describe('ButtonBase with render function child', () => {
41
- it('receives text styles in render function from button theme', () => {
12
+ it('receives tokens in render function child', () => {
42
13
  const { tokens } = testTheme.components.Button
43
14
  const arbitraryWeight = '300'
44
15
  const { getByText } = render(
45
16
  <Theme>
46
- <ButtonBase onPress={() => {}} tokens={{ fontWeight: arbitraryWeight }}>
17
+ <ButtonBase onPress={() => {}} tokens={{ ...tokens, fontWeight: arbitraryWeight }}>
47
18
  {({ textStyles }) => <Text style={textStyles}>Function child</Text>}
48
19
  </ButtonBase>
49
20
  </Theme>