@telus-uds/theme-koodo 5.5.0 → 5.6.0

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 (237) hide show
  1. package/build/android/CarouselThumbnail.json +2 -2
  2. package/build/android/IconButton.json +10 -4
  3. package/build/android/Link.json +4 -4
  4. package/build/android/TermsAndConditions.json +51 -0
  5. package/build/android/schema.json +738 -673
  6. package/build/android/theme.json +68 -11
  7. package/build/ios/CarouselThumbnail.json +2 -2
  8. package/build/ios/IconButton.json +10 -4
  9. package/build/ios/Link.json +4 -4
  10. package/build/ios/TermsAndConditions.json +51 -0
  11. package/build/ios/schema.json +738 -673
  12. package/build/ios/theme.json +68 -11
  13. package/build/rn/ActivityIndicator.js +1 -1
  14. package/build/rn/Badge.js +1 -1
  15. package/build/rn/BlockQuote.js +1 -1
  16. package/build/rn/Box.js +1 -1
  17. package/build/rn/Breadcrumbs.js +1 -1
  18. package/build/rn/Button.js +3 -3
  19. package/build/rn/ButtonDropdown.js +3 -3
  20. package/build/rn/ButtonGroup.js +1 -1
  21. package/build/rn/ButtonGroupItem.js +3 -3
  22. package/build/rn/Callout.js +1 -1
  23. package/build/rn/Card.js +3 -3
  24. package/build/rn/Carousel.js +1 -1
  25. package/build/rn/CarouselTabsPanelItem.js +3 -3
  26. package/build/rn/CarouselThumbnail.js +5 -5
  27. package/build/rn/Checkbox.js +3 -3
  28. package/build/rn/CheckboxCard.js +3 -3
  29. package/build/rn/CheckboxCardGroup.js +1 -1
  30. package/build/rn/CheckboxGroup.js +1 -1
  31. package/build/rn/ChevronLink.js +3 -3
  32. package/build/rn/ColourToggle.js +3 -3
  33. package/build/rn/Countdown.js +1 -1
  34. package/build/rn/DatePicker.js +1 -1
  35. package/build/rn/Disclaimer.js +1 -1
  36. package/build/rn/Divider.js +1 -1
  37. package/build/rn/ExpandCollapse.js +1 -1
  38. package/build/rn/ExpandCollapseControl.js +1 -1
  39. package/build/rn/ExpandCollapseMini.js +1 -1
  40. package/build/rn/ExpandCollapseMiniControl.js +1 -1
  41. package/build/rn/ExpandCollapsePanel.js +1 -1
  42. package/build/rn/Feedback.js +1 -1
  43. package/build/rn/Fieldset.js +1 -1
  44. package/build/rn/Footnote.js +1 -1
  45. package/build/rn/FootnoteLink.js +1 -1
  46. package/build/rn/HorizontalScrollButton.js +3 -3
  47. package/build/rn/Icon.js +1 -1
  48. package/build/rn/IconButton.js +9 -5
  49. package/build/rn/Image.js +1 -1
  50. package/build/rn/InputLabel.js +1 -1
  51. package/build/rn/InputSupports.js +1 -1
  52. package/build/rn/Link.js +7 -7
  53. package/build/rn/List.js +1 -1
  54. package/build/rn/Listbox.js +3 -3
  55. package/build/rn/Modal.js +1 -1
  56. package/build/rn/MultiSelectFilter.js +1 -1
  57. package/build/rn/NavigationBar.js +3 -3
  58. package/build/rn/Notification.js +1 -1
  59. package/build/rn/OrderedList.js +1 -1
  60. package/build/rn/Pagination.js +1 -1
  61. package/build/rn/PaginationPageButton.js +3 -3
  62. package/build/rn/PaginationSideButton.js +3 -3
  63. package/build/rn/PreviewCard.js +4 -4
  64. package/build/rn/PriceLockup.js +1 -1
  65. package/build/rn/Progress.js +1 -1
  66. package/build/rn/ProgressBar.js +1 -1
  67. package/build/rn/QuantitySelector.js +1 -1
  68. package/build/rn/QuantitySelectorSideButton.js +1 -1
  69. package/build/rn/QuickLinks.js +1 -1
  70. package/build/rn/QuickLinksButton.js +3 -3
  71. package/build/rn/QuickLinksCard.js +1 -1
  72. package/build/rn/QuickLinksFeature.js +1 -1
  73. package/build/rn/QuickLinksFeatureItem.js +3 -3
  74. package/build/rn/QuickLinksList.js +3 -3
  75. package/build/rn/Radio.js +3 -3
  76. package/build/rn/RadioCard.js +3 -3
  77. package/build/rn/RadioCardGroup.js +1 -1
  78. package/build/rn/RadioGroup.js +1 -1
  79. package/build/rn/Ribbon.js +1 -1
  80. package/build/rn/Search.js +2 -2
  81. package/build/rn/SearchButton.js +3 -3
  82. package/build/rn/Select.js +2 -2
  83. package/build/rn/SideNav.js +1 -1
  84. package/build/rn/SideNavItem.js +3 -3
  85. package/build/rn/SideNavItemsGroup.js +1 -1
  86. package/build/rn/Skeleton.js +1 -1
  87. package/build/rn/SkipLink.js +2 -2
  88. package/build/rn/Spinner.js +1 -1
  89. package/build/rn/SplashButton.js +2 -2
  90. package/build/rn/SplashButtonWithDetails.js +2 -2
  91. package/build/rn/StackView.js +1 -1
  92. package/build/rn/StepTracker.js +1 -1
  93. package/build/rn/StoryCard.js +3 -3
  94. package/build/rn/Table.js +1 -1
  95. package/build/rn/Tabs.js +1 -1
  96. package/build/rn/TabsItem.js +3 -3
  97. package/build/rn/Tags.js +1 -1
  98. package/build/rn/TagsItem.js +3 -3
  99. package/build/rn/TermsAndConditions.js +56 -1
  100. package/build/rn/Testimonial.js +1 -1
  101. package/build/rn/TextArea.js +1 -1
  102. package/build/rn/TextInput.js +2 -2
  103. package/build/rn/Timeline.js +1 -1
  104. package/build/rn/Toast.js +1 -1
  105. package/build/rn/ToggleSwitch.js +3 -3
  106. package/build/rn/ToggleSwitchGroup.js +1 -1
  107. package/build/rn/Tooltip.js +1 -1
  108. package/build/rn/TooltipButton.js +3 -3
  109. package/build/rn/Typography.js +1 -1
  110. package/build/rn/Video.js +1 -1
  111. package/build/rn/VideoButton.js +1 -1
  112. package/build/rn/VideoControlBar.js +1 -1
  113. package/build/rn/VideoMenu.js +1 -1
  114. package/build/rn/VideoMiddleControlButton.js +1 -1
  115. package/build/rn/VideoPicker.js +1 -1
  116. package/build/rn/VideoPickerSlider.js +1 -1
  117. package/build/rn/VideoPickerThumbnail.js +3 -3
  118. package/build/rn/VideoProgressBar.js +1 -1
  119. package/build/rn/VideoVolumeSlider.js +1 -1
  120. package/build/rn/WaffleGrid.js +1 -1
  121. package/build/rn/schema.json +738 -673
  122. package/build/rn/spacingScale.js +1 -1
  123. package/build/rn/theme.js +138 -79
  124. package/build/web/ActivityIndicator.js +1 -1
  125. package/build/web/Badge.js +1 -1
  126. package/build/web/BlockQuote.js +1 -1
  127. package/build/web/Box.js +1 -1
  128. package/build/web/Breadcrumbs.js +1 -1
  129. package/build/web/Button.js +149 -1
  130. package/build/web/ButtonDropdown.js +48 -1
  131. package/build/web/ButtonGroup.js +1 -1
  132. package/build/web/ButtonGroupItem.js +34 -1
  133. package/build/web/Callout.js +1 -1
  134. package/build/web/Card.js +25 -2
  135. package/build/web/Carousel.js +1 -1
  136. package/build/web/CarouselTabsPanelItem.js +53 -1
  137. package/build/web/CarouselThumbnail.js +20 -3
  138. package/build/web/Checkbox.js +21 -1
  139. package/build/web/CheckboxCard.js +37 -1
  140. package/build/web/CheckboxCardGroup.js +1 -1
  141. package/build/web/CheckboxGroup.js +1 -1
  142. package/build/web/ChevronLink.js +49 -1
  143. package/build/web/ColourToggle.js +29 -1
  144. package/build/web/Countdown.js +1 -1
  145. package/build/web/DatePicker.js +1 -1
  146. package/build/web/Disclaimer.js +1 -1
  147. package/build/web/Divider.js +1 -1
  148. package/build/web/ExpandCollapse.js +1 -1
  149. package/build/web/ExpandCollapseControl.js +1 -1
  150. package/build/web/ExpandCollapseMini.js +1 -1
  151. package/build/web/ExpandCollapseMiniControl.js +1 -1
  152. package/build/web/ExpandCollapsePanel.js +1 -1
  153. package/build/web/Feedback.js +1 -1
  154. package/build/web/Fieldset.js +1 -1
  155. package/build/web/Footnote.js +1 -1
  156. package/build/web/FootnoteLink.js +1 -1
  157. package/build/web/HorizontalScrollButton.js +21 -1
  158. package/build/web/Icon.js +1 -1
  159. package/build/web/IconButton.js +56 -3
  160. package/build/web/Image.js +1 -1
  161. package/build/web/InputLabel.js +1 -1
  162. package/build/web/InputSupports.js +1 -1
  163. package/build/web/Link.js +70 -6
  164. package/build/web/List.js +1 -1
  165. package/build/web/Listbox.js +104 -1
  166. package/build/web/Modal.js +1 -1
  167. package/build/web/MultiSelectFilter.js +1 -1
  168. package/build/web/NavigationBar.js +44 -1
  169. package/build/web/Notification.js +1 -1
  170. package/build/web/OrderedList.js +1 -1
  171. package/build/web/Pagination.js +1 -1
  172. package/build/web/PaginationPageButton.js +26 -1
  173. package/build/web/PaginationSideButton.js +35 -1
  174. package/build/web/PreviewCard.js +43 -3
  175. package/build/web/PriceLockup.js +1 -1
  176. package/build/web/Progress.js +1 -1
  177. package/build/web/ProgressBar.js +1 -1
  178. package/build/web/QuantitySelector.js +1 -1
  179. package/build/web/QuantitySelectorSideButton.js +1 -1
  180. package/build/web/QuickLinks.js +1 -1
  181. package/build/web/QuickLinksButton.js +19 -1
  182. package/build/web/QuickLinksCard.js +1 -1
  183. package/build/web/QuickLinksFeature.js +1 -1
  184. package/build/web/QuickLinksFeatureItem.js +29 -1
  185. package/build/web/QuickLinksList.js +15 -1
  186. package/build/web/Radio.js +22 -1
  187. package/build/web/RadioCard.js +37 -1
  188. package/build/web/RadioCardGroup.js +1 -1
  189. package/build/web/RadioGroup.js +1 -1
  190. package/build/web/Ribbon.js +1 -1
  191. package/build/web/Search.js +8 -1
  192. package/build/web/SearchButton.js +30 -1
  193. package/build/web/Select.js +15 -1
  194. package/build/web/SideNav.js +1 -1
  195. package/build/web/SideNavItem.js +19 -1
  196. package/build/web/SideNavItemsGroup.js +1 -1
  197. package/build/web/Skeleton.js +1 -1
  198. package/build/web/SkipLink.js +13 -2
  199. package/build/web/Spinner.js +1 -1
  200. package/build/web/SplashButton.js +9 -2
  201. package/build/web/SplashButtonWithDetails.js +15 -3
  202. package/build/web/StackView.js +1 -1
  203. package/build/web/StepTracker.js +1 -1
  204. package/build/web/StoryCard.js +25 -2
  205. package/build/web/Table.js +1 -1
  206. package/build/web/Tabs.js +1 -1
  207. package/build/web/TabsItem.js +49 -1
  208. package/build/web/Tags.js +1 -1
  209. package/build/web/TagsItem.js +57 -1
  210. package/build/web/TermsAndConditions.js +56 -1
  211. package/build/web/Testimonial.js +1 -1
  212. package/build/web/TextArea.js +1 -1
  213. package/build/web/TextInput.js +30 -3
  214. package/build/web/Timeline.js +1 -1
  215. package/build/web/Toast.js +1 -1
  216. package/build/web/ToggleSwitch.js +63 -1
  217. package/build/web/ToggleSwitchGroup.js +1 -1
  218. package/build/web/Tooltip.js +1 -1
  219. package/build/web/TooltipButton.js +33 -1
  220. package/build/web/Typography.js +1 -1
  221. package/build/web/Video.js +1 -1
  222. package/build/web/VideoButton.js +1 -1
  223. package/build/web/VideoControlBar.js +1 -1
  224. package/build/web/VideoMenu.js +1 -1
  225. package/build/web/VideoMiddleControlButton.js +1 -1
  226. package/build/web/VideoPicker.js +1 -1
  227. package/build/web/VideoPickerSlider.js +1 -1
  228. package/build/web/VideoPickerThumbnail.js +25 -1
  229. package/build/web/VideoProgressBar.js +1 -1
  230. package/build/web/VideoVolumeSlider.js +1 -1
  231. package/build/web/WaffleGrid.js +1 -1
  232. package/build/web/index.js +1 -1
  233. package/build/web/schema.json +738 -673
  234. package/build/web/spacingScale.js +1 -1
  235. package/build/web/theme.js +1440 -34
  236. package/package.json +4 -4
  237. package/theme.json +59 -8
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  *
3
3
  * Do not edit directly
4
- * Generated on Thu, 18 Jan 2024 22:41:20 GMT
4
+ * Generated on Wed, 07 Feb 2024 19:07:57 GMT
5
5
  *
6
6
  */
7
7
 
@@ -336,6 +336,18 @@ const theme = {
336
336
  type: 'variant',
337
337
  values: [ true ]
338
338
  },
339
+ focus: {
340
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
341
+ platforms: [ 'rn', 'web' ],
342
+ type: 'state',
343
+ values: [ true, false ]
344
+ },
345
+ hover: {
346
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
347
+ platforms: [ 'rn', 'web' ],
348
+ type: 'state',
349
+ values: [ true, false ]
350
+ },
339
351
  inactive: {
340
352
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
341
353
  type: 'state',
@@ -409,10 +421,77 @@ const theme = {
409
421
  outerBackgroundColor: 'rgba(0, 0, 0, 0)'
410
422
  }
411
423
  },
424
+ {
425
+ if: { hover: true },
426
+ tokens: { backgroundColor: '#404040', color: '#ffffff' }
427
+ },
428
+ {
429
+ if: { focus: true },
430
+ tokens: {
431
+ borderBottomWidth: 1,
432
+ borderColor: '#000000',
433
+ borderLeftWidth: 1,
434
+ borderRightWidth: 1,
435
+ borderTopWidth: 1,
436
+ color: '#ffffff',
437
+ outerBorderColor: '#000000',
438
+ outerBorderGap: 4,
439
+ outerBorderWidth: 1
440
+ }
441
+ },
442
+ {
443
+ if: { hover: true, priority: 'low' },
444
+ tokens: { borderBottomWidth: 1, outerBorderColor: '#000000' }
445
+ },
446
+ {
447
+ if: { focus: true, priority: 'low' },
448
+ tokens: { color: '#000000' }
449
+ },
450
+ {
451
+ if: { focus: true, hover: true, priority: 'low' },
452
+ tokens: { color: '#ffffff' }
453
+ },
454
+ {
455
+ if: { danger: true, focus: true },
456
+ tokens: {
457
+ borderBottomWidth: 1,
458
+ borderColor: '#c9370b',
459
+ borderLeftWidth: 1,
460
+ borderRightWidth: 1,
461
+ borderTopWidth: 1,
462
+ borderWidth: 1,
463
+ color: '#c9370b',
464
+ outerBorderColor: '#c9370b',
465
+ outerBorderGap: 2
466
+ }
467
+ },
468
+ {
469
+ if: { hover: true, inverse: true },
470
+ tokens: {
471
+ backgroundColor: '#c9c8c8',
472
+ borderColor: 'rgba(0, 0, 0, 0)',
473
+ color: '#404040',
474
+ outerBorderColor: 'rgba(0, 0, 0, 0)',
475
+ outerBorderWidth: 1
476
+ }
477
+ },
412
478
  {
413
479
  if: { inverse: true, pressed: true },
414
480
  tokens: { backgroundColor: '#c9c8c8', color: '#666666' }
415
481
  },
482
+ {
483
+ if: { focus: true, inverse: true },
484
+ tokens: {
485
+ borderBottomWidth: 1,
486
+ borderColor: 'rgba(0, 0, 0, 0)',
487
+ borderLeftWidth: 1,
488
+ borderRightWidth: 1,
489
+ borderTopWidth: 1,
490
+ color: '#000000',
491
+ outerBorderColor: '#ffffff',
492
+ outerBorderGap: 2
493
+ }
494
+ },
416
495
  {
417
496
  if: { danger: true, inverse: true },
418
497
  tokens: {
@@ -425,6 +504,15 @@ const theme = {
425
504
  color: '#c9370b'
426
505
  }
427
506
  },
507
+ {
508
+ if: { focus: true, inverse: true, pressed: true },
509
+ tokens: {
510
+ backgroundColor: '#c9c8c8',
511
+ borderColor: '#c9c8c8',
512
+ color: '#666666',
513
+ outerBorderGap: 2
514
+ }
515
+ },
428
516
  { if: { width: 'full' }, tokens: { width: '100%' } },
429
517
  {
430
518
  if: { viewport: [ 'xs' ], width: 'responsive' },
@@ -453,10 +541,34 @@ const theme = {
453
541
  textLine: 'underline'
454
542
  }
455
543
  },
544
+ {
545
+ if: { focus: true, text: true },
546
+ tokens: {
547
+ borderColor: 'rgba(0, 0, 0, 0)',
548
+ color: '#000000',
549
+ outerBorderColor: '#000000'
550
+ }
551
+ },
552
+ {
553
+ if: { hover: true, text: true },
554
+ tokens: { color: '#404040', textLine: 'none' }
555
+ },
456
556
  {
457
557
  if: { danger: true, text: true },
458
558
  tokens: { color: '#c9370b' }
459
559
  },
560
+ {
561
+ if: { danger: true, focus: true, text: true },
562
+ tokens: {
563
+ borderColor: 'rgba(0, 0, 0, 0)',
564
+ color: '#c9370b',
565
+ outerBorderColor: '#c9370b'
566
+ }
567
+ },
568
+ {
569
+ if: { hover: true, priority: 'low' },
570
+ tokens: { borderColor: 'rgba(0, 0, 0, 0)', borderWidth: 0 }
571
+ },
460
572
  {
461
573
  if: { pressed: true, text: true },
462
574
  tokens: {
@@ -465,6 +577,18 @@ const theme = {
465
577
  textLine: 'none'
466
578
  }
467
579
  },
580
+ {
581
+ if: { danger: true, hover: true },
582
+ tokens: { backgroundColor: '#f3592b', color: '#ffffff' }
583
+ },
584
+ {
585
+ if: { danger: true, hover: true, text: true },
586
+ tokens: {
587
+ backgroundColor: 'rgba(0, 0, 0, 0)',
588
+ color: '#f3592b',
589
+ outerBorderColor: 'rgba(0, 0, 0, 0)'
590
+ }
591
+ },
468
592
  {
469
593
  if: { danger: true, pressed: true },
470
594
  tokens: {
@@ -487,6 +611,18 @@ const theme = {
487
611
  if: { inverse: true, text: true },
488
612
  tokens: { backgroundColor: 'rgba(0, 0, 0, 0)', color: '#ffffff' }
489
613
  },
614
+ {
615
+ if: { focus: true, inverse: true, text: true },
616
+ tokens: {
617
+ borderColor: 'rgba(0, 0, 0, 0)',
618
+ color: '#ffffff',
619
+ outerBorderColor: '#ffffff'
620
+ }
621
+ },
622
+ {
623
+ if: { hover: true, inverse: true, text: true },
624
+ tokens: { color: '#c9c8c8' }
625
+ },
490
626
  {
491
627
  if: { inverse: true, pressed: true, text: true },
492
628
  tokens: {
@@ -522,6 +658,18 @@ const theme = {
522
658
  if: { priority: 'low', text: true },
523
659
  tokens: { color: '#7a3dfc' }
524
660
  },
661
+ {
662
+ if: { hover: true, priority: 'low', text: true },
663
+ tokens: { color: '#5b2bc2', outerBorderColor: 'rgba(0, 0, 0, 0)' }
664
+ },
665
+ {
666
+ if: { focus: true, priority: 'low', text: true },
667
+ tokens: {
668
+ color: '#7a3dfc',
669
+ outerBorderColor: '#7a3dfc',
670
+ outerBorderWidth: 1
671
+ }
672
+ },
525
673
  {
526
674
  if: { pressed: true, priority: 'low', text: true },
527
675
  tokens: {
@@ -578,6 +726,18 @@ const theme = {
578
726
  },
579
727
  ButtonDropdown: {
580
728
  appearances: {
729
+ focus: {
730
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
731
+ platforms: [ 'rn', 'web' ],
732
+ type: 'state',
733
+ values: [ true, false ]
734
+ },
735
+ hover: {
736
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
737
+ platforms: [ 'rn', 'web' ],
738
+ type: 'state',
739
+ values: [ true, false ]
740
+ },
581
741
  inactive: {
582
742
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
583
743
  type: 'state',
@@ -604,6 +764,10 @@ const theme = {
604
764
  if: { open: true },
605
765
  tokens: { icon: PaletteIconChevronUp }
606
766
  },
767
+ {
768
+ if: { focus: true },
769
+ tokens: { outerBorderColor: '#000000' }
770
+ },
607
771
  {
608
772
  if: { pressed: true },
609
773
  tokens: {
@@ -613,6 +777,20 @@ const theme = {
613
777
  iconColor: '#666666'
614
778
  }
615
779
  },
780
+ {
781
+ if: { focus: false, hover: true, pressed: false },
782
+ tokens: {
783
+ backgroundColor: '#404040',
784
+ borderColor: 'rgba(0, 0, 0, 0)'
785
+ }
786
+ },
787
+ {
788
+ if: { focus: true, hover: true, pressed: false },
789
+ tokens: {
790
+ backgroundColor: '#404040',
791
+ borderColor: 'rgba(0, 0, 0, 0)'
792
+ }
793
+ },
616
794
  {
617
795
  if: { inactive: true },
618
796
  tokens: {
@@ -630,6 +808,32 @@ const theme = {
630
808
  iconColor: '#ffffff',
631
809
  outerBorderColor: 'transparent'
632
810
  }
811
+ },
812
+ {
813
+ if: { hover: true, selected: true },
814
+ tokens: { backgroundColor: '#404040' }
815
+ },
816
+ {
817
+ if: { focus: true, hover: false, selected: true },
818
+ tokens: {
819
+ backgroundColor: '#000000',
820
+ outerBorderColor: '#000000',
821
+ outerBorderGap: 2,
822
+ outerBorderWidth: 1
823
+ }
824
+ },
825
+ {
826
+ if: { hover: true, pressed: true, selected: true },
827
+ tokens: {
828
+ backgroundColor: '#404040',
829
+ borderColor: 'rgba(0, 0, 0, 0)',
830
+ color: '#666666',
831
+ iconColor: '#666666'
832
+ }
833
+ },
834
+ {
835
+ if: { focus: true, pressed: true, selected: true },
836
+ tokens: { backgroundColor: '#404040', outerBorderColor: '#404040' }
633
837
  }
634
838
  ],
635
839
  tokens: {
@@ -707,6 +911,18 @@ const theme = {
707
911
  },
708
912
  ButtonGroupItem: {
709
913
  appearances: {
914
+ focus: {
915
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
916
+ platforms: [ 'rn', 'web' ],
917
+ type: 'state',
918
+ values: [ true, false ]
919
+ },
920
+ hover: {
921
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
922
+ platforms: [ 'rn', 'web' ],
923
+ type: 'state',
924
+ values: [ true, false ]
925
+ },
710
926
  iconPosition: {
711
927
  description: 'Theme styles to be applied to icon links depending on where the icon is in relation to the link text',
712
928
  type: 'state',
@@ -734,6 +950,18 @@ const theme = {
734
950
  }
735
951
  },
736
952
  rules: [
953
+ {
954
+ if: { focus: true },
955
+ tokens: { outerBorderColor: '#000000' }
956
+ },
957
+ {
958
+ if: { hover: true },
959
+ tokens: {
960
+ backgroundColor: '#404040',
961
+ borderColor: '#404040',
962
+ color: '#ffffff'
963
+ }
964
+ },
737
965
  {
738
966
  if: { selected: true },
739
967
  tokens: { backgroundColor: '#7a3dfc', color: '#ffffff' }
@@ -742,6 +970,18 @@ const theme = {
742
970
  if: { pressed: true },
743
971
  tokens: { backgroundColor: '#404040', color: '#666666' }
744
972
  },
973
+ {
974
+ if: { focus: true, selected: true },
975
+ tokens: {
976
+ backgroundColor: '#7a3dfc',
977
+ color: '#ffffff',
978
+ outerBorderColor: '#7a3dfc'
979
+ }
980
+ },
981
+ {
982
+ if: { hover: true, selected: true },
983
+ tokens: { backgroundColor: '#5b2bc2', color: '#ffffff' }
984
+ },
745
985
  {
746
986
  if: { pressed: true, selected: true },
747
987
  tokens: { backgroundColor: '#404040', color: '#666666' }
@@ -817,6 +1057,18 @@ const theme = {
817
1057
  values: [ 'alternative', 'subtle', 'grid', 'feature' ]
818
1058
  },
819
1059
  borderRadius: { type: 'variant', values: [ 'none', 'small', 'large' ] },
1060
+ focus: {
1061
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1062
+ platforms: [ 'rn', 'web' ],
1063
+ type: 'state',
1064
+ values: [ true, false ]
1065
+ },
1066
+ hover: {
1067
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1068
+ platforms: [ 'rn', 'web' ],
1069
+ type: 'state',
1070
+ values: [ true, false ]
1071
+ },
820
1072
  interactive: { type: 'variant', values: [ true ] },
821
1073
  padding: {
822
1074
  type: 'variant',
@@ -925,9 +1177,20 @@ const theme = {
925
1177
  }
926
1178
  },
927
1179
  {
928
- if: { interactive: true, pressed: false },
1180
+ if: { focus: false, interactive: true, pressed: false },
929
1181
  tokens: { borderColor: '#ffffff', borderWidth: 2 }
930
1182
  },
1183
+ {
1184
+ if: { hover: true, interactive: true },
1185
+ tokens: {
1186
+ backgroundColor: 'rgba(0, 0, 0, 0.1)',
1187
+ borderColor: 'transparent'
1188
+ }
1189
+ },
1190
+ {
1191
+ if: { focus: true, interactive: true },
1192
+ tokens: { borderColor: '#000000', borderWidth: 2 }
1193
+ },
931
1194
  {
932
1195
  if: { interactive: true, pressed: true },
933
1196
  tokens: {
@@ -984,6 +1247,18 @@ const theme = {
984
1247
  },
985
1248
  CarouselTabsPanelItem: {
986
1249
  appearances: {
1250
+ focus: {
1251
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1252
+ platforms: [ 'rn', 'web' ],
1253
+ type: 'state',
1254
+ values: [ true, false ]
1255
+ },
1256
+ hover: {
1257
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1258
+ platforms: [ 'rn', 'web' ],
1259
+ type: 'state',
1260
+ values: [ true, false ]
1261
+ },
987
1262
  inactive: {
988
1263
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
989
1264
  type: 'state',
@@ -1002,6 +1277,22 @@ const theme = {
1002
1277
  }
1003
1278
  },
1004
1279
  rules: [
1280
+ {
1281
+ if: { hover: true },
1282
+ tokens: {
1283
+ borderBottomColor: '#404040',
1284
+ borderBottomWidth: 2,
1285
+ color: '#404040'
1286
+ }
1287
+ },
1288
+ {
1289
+ if: { focus: true },
1290
+ tokens: {
1291
+ borderBottomColor: '#000000',
1292
+ borderBottomWidth: 4,
1293
+ color: '#000000'
1294
+ }
1295
+ },
1005
1296
  {
1006
1297
  if: { pressed: true },
1007
1298
  tokens: {
@@ -1010,6 +1301,10 @@ const theme = {
1010
1301
  color: '#666666'
1011
1302
  }
1012
1303
  },
1304
+ {
1305
+ if: { focus: true, pressed: true },
1306
+ tokens: { borderBottomWidth: 4 }
1307
+ },
1013
1308
  {
1014
1309
  if: { inactive: true },
1015
1310
  tokens: {
@@ -1026,6 +1321,22 @@ const theme = {
1026
1321
  color: '#000000'
1027
1322
  }
1028
1323
  },
1324
+ {
1325
+ if: { hover: true, inverse: true },
1326
+ tokens: {
1327
+ borderBottomColor: '#ffffff',
1328
+ borderBottomWidth: 2,
1329
+ color: '#ffffff'
1330
+ }
1331
+ },
1332
+ {
1333
+ if: { focus: true, inverse: true },
1334
+ tokens: {
1335
+ borderBottomColor: '#ffffff',
1336
+ borderBottomWidth: 4,
1337
+ color: '#ffffff'
1338
+ }
1339
+ },
1029
1340
  {
1030
1341
  if: { inverse: true, pressed: true },
1031
1342
  tokens: {
@@ -1035,6 +1346,10 @@ const theme = {
1035
1346
  }
1036
1347
  },
1037
1348
  { if: { inverse: true }, tokens: { color: '#ffffff' } },
1349
+ {
1350
+ if: { focus: true, inverse: true, pressed: true },
1351
+ tokens: { borderBottomWidth: 4 }
1352
+ },
1038
1353
  {
1039
1354
  if: { inactive: true, inverse: true },
1040
1355
  tokens: {
@@ -1074,6 +1389,18 @@ const theme = {
1074
1389
  },
1075
1390
  CarouselThumbnail: {
1076
1391
  appearances: {
1392
+ focus: {
1393
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1394
+ platforms: [ 'rn', 'web' ],
1395
+ type: 'state',
1396
+ values: [ true, false ]
1397
+ },
1398
+ hover: {
1399
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1400
+ platforms: [ 'rn', 'web' ],
1401
+ type: 'state',
1402
+ values: [ true, false ]
1403
+ },
1077
1404
  pressed: {
1078
1405
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
1079
1406
  type: 'state',
@@ -1088,7 +1415,12 @@ const theme = {
1088
1415
  rules: [
1089
1416
  {
1090
1417
  if: { viewport: [ 'xs', 'sm' ] },
1091
- tokens: { alignItems: 'flex-start', size: 48 }
1418
+ tokens: { alignItems: 'flex-start', size: 32 }
1419
+ },
1420
+ { if: { hover: true }, tokens: { borderColor: '#404040' } },
1421
+ {
1422
+ if: { focus: true },
1423
+ tokens: { borderColor: '#000000', borderWidth: 2 }
1092
1424
  },
1093
1425
  {
1094
1426
  if: { pressed: true },
@@ -1105,7 +1437,7 @@ const theme = {
1105
1437
  padding: 8,
1106
1438
  selectedBorderColor: '#000000',
1107
1439
  selectedBorderWidth: 2,
1108
- size: 72
1440
+ size: 56
1109
1441
  }
1110
1442
  },
1111
1443
  Checkbox: {
@@ -1116,6 +1448,18 @@ const theme = {
1116
1448
  values: [ true ]
1117
1449
  },
1118
1450
  error: { type: 'state', values: [ true ] },
1451
+ focus: {
1452
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1453
+ platforms: [ 'rn', 'web' ],
1454
+ type: 'state',
1455
+ values: [ true, false ]
1456
+ },
1457
+ hover: {
1458
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1459
+ platforms: [ 'rn', 'web' ],
1460
+ type: 'state',
1461
+ values: [ true, false ]
1462
+ },
1119
1463
  inactive: {
1120
1464
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
1121
1465
  type: 'state',
@@ -1123,6 +1467,14 @@ const theme = {
1123
1467
  }
1124
1468
  },
1125
1469
  rules: [
1470
+ {
1471
+ if: { focus: true },
1472
+ tokens: { inputOutlineColor: '#000000', inputOutlineWidth: 1 }
1473
+ },
1474
+ {
1475
+ if: { hover: true },
1476
+ tokens: { inputOutlineColor: '#000000', inputOutlineWidth: 1 }
1477
+ },
1126
1478
  {
1127
1479
  if: { inactive: true },
1128
1480
  tokens: {
@@ -1171,6 +1523,18 @@ const theme = {
1171
1523
  values: [ true ]
1172
1524
  },
1173
1525
  error: { type: 'state', values: [ true ] },
1526
+ focus: {
1527
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1528
+ platforms: [ 'rn', 'web' ],
1529
+ type: 'state',
1530
+ values: [ true, false ]
1531
+ },
1532
+ hover: {
1533
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1534
+ platforms: [ 'rn', 'web' ],
1535
+ type: 'state',
1536
+ values: [ true, false ]
1537
+ },
1174
1538
  inactive: {
1175
1539
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
1176
1540
  type: 'state',
@@ -1199,6 +1563,17 @@ const theme = {
1199
1563
  paddingTop: 16
1200
1564
  }
1201
1565
  },
1566
+ {
1567
+ if: { hover: true },
1568
+ tokens: {
1569
+ borderColor: '#666666',
1570
+ checkboxOuterBorderColor: '#000000',
1571
+ checkboxOuterBorderGap: 2,
1572
+ checkboxOuterBorderWidth: 1,
1573
+ outerBorderColor: '#c9c8c8',
1574
+ outerBorderWidth: 2
1575
+ }
1576
+ },
1202
1577
  {
1203
1578
  if: { checked: true },
1204
1579
  tokens: {
@@ -1208,6 +1583,19 @@ const theme = {
1208
1583
  checkboxInputBorderWidth: 2
1209
1584
  }
1210
1585
  },
1586
+ {
1587
+ if: { focus: true },
1588
+ tokens: {
1589
+ borderColor: '#666666',
1590
+ checkboxInputBorderColor: '#000000',
1591
+ checkboxOuterBorderColor: '#000000',
1592
+ checkboxOuterBorderGap: 2,
1593
+ checkboxOuterBorderWidth: 1,
1594
+ outerBorderColor: '#000000',
1595
+ outerBorderGap: 2,
1596
+ outerBorderWidth: 2
1597
+ }
1598
+ },
1211
1599
  {
1212
1600
  description: 'Pressed state matches hover state plus light grey background',
1213
1601
  if: { pressed: true },
@@ -1340,6 +1728,18 @@ const theme = {
1340
1728
  ChevronLink: {
1341
1729
  appearances: {
1342
1730
  alternative: { type: 'variant', values: [ true ] },
1731
+ focus: {
1732
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1733
+ platforms: [ 'rn', 'web' ],
1734
+ type: 'state',
1735
+ values: [ true, false ]
1736
+ },
1737
+ hover: {
1738
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1739
+ platforms: [ 'rn', 'web' ],
1740
+ type: 'state',
1741
+ values: [ true, false ]
1742
+ },
1343
1743
  inverse: { type: 'variant', values: [ true ] },
1344
1744
  pressed: {
1345
1745
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
@@ -1353,17 +1753,53 @@ const theme = {
1353
1753
  }
1354
1754
  },
1355
1755
  rules: [
1756
+ {
1757
+ if: { hover: true },
1758
+ tokens: { color: '#404040', iconDisplace: 4 }
1759
+ },
1356
1760
  { if: { pressed: true }, tokens: { color: '#666666' } },
1761
+ {
1762
+ if: { focus: true },
1763
+ tokens: { color: '#000000', outerBorderColor: '#000000' }
1764
+ },
1765
+ {
1766
+ if: { focus: true, pressed: true },
1767
+ tokens: { color: '#666666', outerBorderColor: '#666666' }
1768
+ },
1357
1769
  { if: { alternative: true }, tokens: { color: '#7a3dfc' } },
1770
+ {
1771
+ if: { alternative: true, hover: true },
1772
+ tokens: { color: '#5b2bc2' }
1773
+ },
1358
1774
  {
1359
1775
  if: { alternative: true, pressed: true },
1360
1776
  tokens: { color: '#666666' }
1361
1777
  },
1778
+ {
1779
+ if: { alternative: true, focus: true },
1780
+ tokens: { color: '#7a3dfc', outerBorderColor: '#7a3dfc' }
1781
+ },
1782
+ {
1783
+ if: { alternative: true, focus: true, pressed: true },
1784
+ tokens: { color: '#666666', outerBorderColor: '#666666' }
1785
+ },
1362
1786
  { if: { inverse: true }, tokens: { color: '#ffffff' } },
1787
+ {
1788
+ if: { hover: true, inverse: true },
1789
+ tokens: { color: '#efefef' }
1790
+ },
1363
1791
  {
1364
1792
  if: { inverse: true, pressed: true },
1365
1793
  tokens: { color: '#c9c8c8' }
1366
1794
  },
1795
+ {
1796
+ if: { focus: true, inverse: true },
1797
+ tokens: { color: '#ffffff', outerBorderColor: '#ffffff' }
1798
+ },
1799
+ {
1800
+ if: { focus: true, inverse: true, pressed: true },
1801
+ tokens: { color: '#c9c8c8', outerBorderColor: '#c9c8c8' }
1802
+ },
1367
1803
  {
1368
1804
  if: { size: 'large' },
1369
1805
  tokens: { blockLineHeight: 1.4, fontSize: 20, iconSize: 20 }
@@ -1400,6 +1836,18 @@ const theme = {
1400
1836
  },
1401
1837
  ColourToggle: {
1402
1838
  appearances: {
1839
+ focus: {
1840
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
1841
+ platforms: [ 'rn', 'web' ],
1842
+ type: 'state',
1843
+ values: [ true, false ]
1844
+ },
1845
+ hover: {
1846
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
1847
+ platforms: [ 'rn', 'web' ],
1848
+ type: 'state',
1849
+ values: [ true, false ]
1850
+ },
1403
1851
  pressed: {
1404
1852
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
1405
1853
  type: 'state',
@@ -1412,6 +1860,22 @@ const theme = {
1412
1860
  }
1413
1861
  },
1414
1862
  rules: [
1863
+ {
1864
+ if: { hover: true },
1865
+ tokens: {
1866
+ bubbleBorderColor: '#c9c8c8',
1867
+ bubbleBorderRadius: 45,
1868
+ bubbleBorderWidth: 1
1869
+ }
1870
+ },
1871
+ {
1872
+ if: { focus: true },
1873
+ tokens: {
1874
+ bubbleBorderColor: '#7a3dfc',
1875
+ bubbleBorderRadius: 45,
1876
+ bubbleBorderWidth: 1
1877
+ }
1878
+ },
1415
1879
  {
1416
1880
  if: { pressed: true },
1417
1881
  tokens: {
@@ -1984,6 +2448,18 @@ const theme = {
1984
2448
  },
1985
2449
  HorizontalScrollButton: {
1986
2450
  appearances: {
2451
+ focus: {
2452
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
2453
+ platforms: [ 'rn', 'web' ],
2454
+ type: 'state',
2455
+ values: [ true, false ]
2456
+ },
2457
+ hover: {
2458
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
2459
+ platforms: [ 'rn', 'web' ],
2460
+ type: 'state',
2461
+ values: [ true, false ]
2462
+ },
1987
2463
  pressed: {
1988
2464
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
1989
2465
  type: 'state',
@@ -1991,6 +2467,14 @@ const theme = {
1991
2467
  }
1992
2468
  },
1993
2469
  rules: [
2470
+ {
2471
+ if: { hover: true },
2472
+ tokens: {
2473
+ backgroundColor: '#000000',
2474
+ borderColor: '#000000',
2475
+ iconColor: '#ffffff'
2476
+ }
2477
+ },
1994
2478
  {
1995
2479
  if: { pressed: true },
1996
2480
  tokens: {
@@ -2078,6 +2562,18 @@ const theme = {
2078
2562
  type: 'variant',
2079
2563
  values: [ true ]
2080
2564
  },
2565
+ focus: {
2566
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
2567
+ platforms: [ 'rn', 'web' ],
2568
+ type: 'state',
2569
+ values: [ true, false ]
2570
+ },
2571
+ hover: {
2572
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
2573
+ platforms: [ 'rn', 'web' ],
2574
+ type: 'state',
2575
+ values: [ true, false ]
2576
+ },
2081
2577
  inactive: {
2082
2578
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
2083
2579
  type: 'state',
@@ -2174,12 +2670,55 @@ const theme = {
2174
2670
  },
2175
2671
  {
2176
2672
  if: { inverse: true },
2177
- tokens: { borderColor: 'rgba(0, 0, 0, 0)', iconColor: '#ffffff' }
2673
+ tokens: {
2674
+ backgroundColor: 'rgba(0, 0, 0, 0)',
2675
+ borderColor: 'rgba(0, 0, 0, 0)',
2676
+ iconColor: '#ffffff'
2677
+ }
2678
+ },
2679
+ {
2680
+ if: { hover: true },
2681
+ tokens: {
2682
+ backgroundColor: '#000000',
2683
+ iconColor: '#ffffff',
2684
+ iconScale: 1.1
2685
+ }
2686
+ },
2687
+ {
2688
+ if: { hover: true, inverse: true },
2689
+ tokens: { backgroundColor: '#ffffff', iconColor: '#000000' }
2690
+ },
2691
+ {
2692
+ if: { focus: true },
2693
+ tokens: {
2694
+ backgroundColor: 'transparent',
2695
+ borderColor: '#000000',
2696
+ iconColor: '#000000',
2697
+ outerBorderColor: 'rgba(0, 0, 0, 0)'
2698
+ }
2699
+ },
2700
+ {
2701
+ if: { focus: true, inverse: true },
2702
+ tokens: {
2703
+ backgroundColor: 'transparent',
2704
+ borderColor: '#ffffff',
2705
+ iconColor: '#ffffff',
2706
+ outerBorderColor: 'rgba(0, 0, 0, 0)',
2707
+ outerBorderWidth: 0
2708
+ }
2178
2709
  },
2179
2710
  {
2180
2711
  if: { password: true },
2181
2712
  tokens: { borderColor: 'transparent' }
2182
2713
  },
2714
+ {
2715
+ if: { focus: true, password: true },
2716
+ tokens: {
2717
+ borderColor: '#000000',
2718
+ borderWidth: 3,
2719
+ outerBorderWidth: 0
2720
+ }
2721
+ },
2183
2722
  {
2184
2723
  if: { inactive: null, pressed: true },
2185
2724
  tokens: { backgroundColor: '#404040', iconColor: '#666666' }
@@ -2222,11 +2761,16 @@ const theme = {
2222
2761
  }
2223
2762
  }
2224
2763
  },
2764
+ { if: { hover: true, raised: true }, tokens: {} },
2225
2765
  {
2226
2766
  if: { raised: true, size: 'large' },
2227
2767
  tokens: { iconSize: 24, padding: 12 }
2228
2768
  },
2229
2769
  { if: { raised: true, size: 'small' }, tokens: { padding: 8 } },
2770
+ {
2771
+ if: { focus: true, raised: true },
2772
+ tokens: { borderWidth: 3 }
2773
+ },
2230
2774
  {
2231
2775
  if: { pressed: true, raised: true },
2232
2776
  tokens: { backgroundColor: '#000000', iconColor: '#666666' }
@@ -2243,7 +2787,7 @@ const theme = {
2243
2787
  }
2244
2788
  ],
2245
2789
  tokens: {
2246
- backgroundColor: 'transparent',
2790
+ backgroundColor: '#ffffff',
2247
2791
  borderBottomLeftRadius: null,
2248
2792
  borderBottomRightRadius: null,
2249
2793
  borderBottomWidth: null,
@@ -2292,6 +2836,18 @@ const theme = {
2292
2836
  Link: {
2293
2837
  appearances: {
2294
2838
  alternative: { type: 'variant', values: [ true ] },
2839
+ focus: {
2840
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
2841
+ platforms: [ 'rn', 'web' ],
2842
+ type: 'state',
2843
+ values: [ true, false ]
2844
+ },
2845
+ hover: {
2846
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
2847
+ platforms: [ 'rn', 'web' ],
2848
+ type: 'state',
2849
+ values: [ true, false ]
2850
+ },
2295
2851
  iconPosition: {
2296
2852
  description: 'Theme styles to be applied to icon links depending on where the icon is in relation to the link text',
2297
2853
  type: 'state',
@@ -2316,16 +2872,56 @@ const theme = {
2316
2872
  },
2317
2873
  rules: [
2318
2874
  { if: { iconPosition: 'left' }, tokens: { iconSpace: 2 } },
2875
+ {
2876
+ if: { focus: true },
2877
+ tokens: {
2878
+ color: '#000000',
2879
+ outerBorderColor: '#000000',
2880
+ outerBorderOutline: 'none'
2881
+ }
2882
+ },
2883
+ {
2884
+ if: { focus: true, pressed: true },
2885
+ tokens: { color: '#666666', outerBorderColor: '#666666' }
2886
+ },
2887
+ {
2888
+ if: { hover: true },
2889
+ tokens: { color: '#404040', textLine: 'none' }
2890
+ },
2319
2891
  {
2320
2892
  if: { pressed: true },
2321
2893
  tokens: { color: '#666666', textLine: 'none' }
2322
2894
  },
2323
2895
  { if: { alternative: true }, tokens: { color: '#7a3dfc' } },
2896
+ {
2897
+ if: { alternative: true, focus: true },
2898
+ tokens: { color: '#7a3dfc', outerBorderColor: '#7a3dfc' }
2899
+ },
2900
+ {
2901
+ if: { alternative: true, hover: true },
2902
+ tokens: { color: '#5b2bc2' }
2903
+ },
2324
2904
  {
2325
2905
  if: { alternative: true, pressed: true },
2326
2906
  tokens: { color: '#666666' }
2327
2907
  },
2908
+ {
2909
+ if: { alternative: true, focus: true, pressed: true },
2910
+ tokens: { color: '#666666', outerBorderColor: '#666666' }
2911
+ },
2328
2912
  { if: { inverse: true }, tokens: { color: '#ffffff' } },
2913
+ {
2914
+ if: { focus: true, inverse: true },
2915
+ tokens: { color: '#ffffff', outerBorderColor: '#ffffff' }
2916
+ },
2917
+ {
2918
+ if: { focus: true, inverse: true, pressed: true },
2919
+ tokens: { color: '#c9c8c8', outerBorderColor: '#c9c8c8' }
2920
+ },
2921
+ {
2922
+ if: { hover: true, inverse: true },
2923
+ tokens: { color: '#efefef' }
2924
+ },
2329
2925
  {
2330
2926
  if: { inverse: true, pressed: true },
2331
2927
  tokens: { color: '#c9c8c8' }
@@ -2336,8 +2932,8 @@ const theme = {
2336
2932
  blockFontName: 'StagSans',
2337
2933
  blockFontSize: 12,
2338
2934
  blockFontWeight: '600',
2339
- blockLineHeight: 1.6,
2340
- iconSize: 16
2935
+ blockLineHeight: 1.33333333333,
2936
+ iconSize: 12
2341
2937
  }
2342
2938
  },
2343
2939
  {
@@ -2345,14 +2941,26 @@ const theme = {
2345
2941
  tokens: {
2346
2942
  blockFontSize: 14,
2347
2943
  blockLineHeight: 1.42857142857,
2348
- iconSize: 20
2944
+ iconSize: 14
2349
2945
  }
2350
2946
  },
2351
2947
  {
2352
2948
  if: { size: 'large' },
2353
2949
  tokens: { blockFontSize: 20, blockLineHeight: 1.4, iconSize: 24 }
2354
2950
  },
2355
- { if: { quiet: true }, tokens: { textLine: 'none' } }
2951
+ { if: { quiet: true }, tokens: { textLine: 'none' } },
2952
+ {
2953
+ if: { hover: true, quiet: true },
2954
+ tokens: { color: '#404040', textLine: 'underline' }
2955
+ },
2956
+ {
2957
+ if: { alternative: true, hover: true, quiet: true },
2958
+ tokens: { color: '#5b2bc2', textLine: 'underline' }
2959
+ },
2960
+ {
2961
+ if: { hover: true, inverse: true, quiet: true },
2962
+ tokens: { color: '#efefef', textLine: 'underline' }
2963
+ }
2356
2964
  ],
2357
2965
  tokens: {
2358
2966
  alignSelf: 'flex-start',
@@ -2363,7 +2971,7 @@ const theme = {
2363
2971
  borderRadius: 4,
2364
2972
  color: '#000000',
2365
2973
  icon: null,
2366
- iconSize: 24,
2974
+ iconSize: 16,
2367
2975
  iconSpace: 1,
2368
2976
  iconTranslateX: 0,
2369
2977
  iconTranslateY: 0,
@@ -2452,6 +3060,18 @@ const theme = {
2452
3060
  type: 'state',
2453
3061
  values: [ true, false ]
2454
3062
  },
3063
+ focus: {
3064
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
3065
+ platforms: [ 'rn', 'web' ],
3066
+ type: 'state',
3067
+ values: [ true, false ]
3068
+ },
3069
+ hover: {
3070
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
3071
+ platforms: [ 'rn', 'web' ],
3072
+ type: 'state',
3073
+ values: [ true, false ]
3074
+ },
2455
3075
  isChild: {
2456
3076
  description: 'when the item is child of another child',
2457
3077
  type: 'state',
@@ -2464,6 +3084,25 @@ const theme = {
2464
3084
  }
2465
3085
  },
2466
3086
  rules: [
3087
+ {
3088
+ if: { focus: false, hover: true, pressed: false },
3089
+ tokens: {
3090
+ groupBackgroundColor: '#efefef',
3091
+ groupBorderColor: 'rgba(0, 0, 0, 0)',
3092
+ itemBackgroundColor: '#efefef'
3093
+ }
3094
+ },
3095
+ {
3096
+ if: { focus: true, pressed: false },
3097
+ tokens: {
3098
+ groupBorderColor: '#7a3dfc',
3099
+ groupColor: '#7a3dfc',
3100
+ itemBorderBottomColor: '#7a3dfc',
3101
+ itemBorderLeftColor: '#7a3dfc',
3102
+ itemBorderRightColor: '#7a3dfc',
3103
+ itemBorderTopColor: '#7a3dfc'
3104
+ }
3105
+ },
2467
3106
  {
2468
3107
  if: { current: true },
2469
3108
  tokens: {
@@ -2490,28 +3129,100 @@ const theme = {
2490
3129
  {
2491
3130
  if: { isChild: true, pressed: true },
2492
3131
  tokens: {
2493
- itemBorderBottomWidth: 0,
2494
- itemBorderLeftColor: '#595959',
2495
- itemBorderTopWidth: 0,
2496
- itemColor: '#595959'
3132
+ itemBorderBottomWidth: 0,
3133
+ itemBorderLeftColor: '#595959',
3134
+ itemBorderTopWidth: 0,
3135
+ itemColor: '#595959'
3136
+ }
3137
+ },
3138
+ {
3139
+ if: { expanded: true },
3140
+ tokens: {
3141
+ groupBackgroundColor: 'rgba(0, 0, 0, 0)',
3142
+ groupBorderColor: 'rgba(0, 0, 0, 0)',
3143
+ groupColor: '#ffffff',
3144
+ groupIcon: PaletteIconChevronUp,
3145
+ itemColor: '#595959'
3146
+ }
3147
+ },
3148
+ {
3149
+ if: { current: true, isChild: true },
3150
+ tokens: {
3151
+ itemBackgroundColor: '#000000',
3152
+ itemBorderLeftColor: '#000000',
3153
+ itemColor: '#ffffff'
3154
+ }
3155
+ },
3156
+ {
3157
+ if: { current: true, focus: false, hover: true },
3158
+ tokens: {
3159
+ itemBackgroundColor: '#efefef',
3160
+ itemBorderLeftColor: '#efefef',
3161
+ itemColor: '#666666'
3162
+ }
3163
+ },
3164
+ {
3165
+ if: { current: true, focus: true, hover: true },
3166
+ tokens: {
3167
+ itemBackgroundColor: '#ffffff',
3168
+ itemBorderLeftColor: '#7a3dfc'
3169
+ }
3170
+ },
3171
+ {
3172
+ if: { focus: true, isChild: true },
3173
+ tokens: {
3174
+ itemBackgroundColor: '#ffffff',
3175
+ itemBorderBottomColor: '#7a3dfc',
3176
+ itemBorderBottomWidth: 1,
3177
+ itemBorderLeftColor: '#7a3dfc',
3178
+ itemBorderRightColor: '#7a3dfc',
3179
+ itemBorderRightWidth: 1,
3180
+ itemBorderTopColor: '#7a3dfc',
3181
+ itemBorderTopWidth: 1,
3182
+ itemColor: '#666666'
3183
+ }
3184
+ },
3185
+ {
3186
+ if: { hover: true, isChild: true },
3187
+ tokens: {
3188
+ itemBackgroundColor: '#efefef',
3189
+ itemBorderBottomWidth: 0,
3190
+ itemBorderLeftColor: '#666666',
3191
+ itemBorderRightWidth: 0,
3192
+ itemBorderTopWidth: 0,
3193
+ itemColor: '#666666'
3194
+ }
3195
+ },
3196
+ {
3197
+ if: { current: true, expanded: true, focus: true },
3198
+ tokens: {
3199
+ groupBackgroundColor: '#000000',
3200
+ groupBorderColor: '#7a3dfc',
3201
+ itemBorderLeftColor: '#7a3dfc',
3202
+ itemColor: '#666666'
2497
3203
  }
2498
3204
  },
2499
3205
  {
2500
- if: { expanded: true },
3206
+ if: { current: true, expanded: true, hover: true },
2501
3207
  tokens: {
2502
- groupBackgroundColor: 'rgba(0, 0, 0, 0)',
2503
- groupBorderColor: 'rgba(0, 0, 0, 0)',
2504
- groupColor: '#ffffff',
2505
- groupIcon: PaletteIconChevronUp,
2506
- itemColor: '#595959'
3208
+ groupBackgroundColor: '#efefef',
3209
+ groupColor: '#666666',
3210
+ itemBackgroundColor: '#efefef',
3211
+ itemColor: '#666666'
2507
3212
  }
2508
3213
  },
2509
3214
  {
2510
- if: { current: true, isChild: true },
3215
+ if: { focus: true },
2511
3216
  tokens: {
2512
- itemBackgroundColor: '#000000',
2513
- itemBorderLeftColor: '#000000',
2514
- itemColor: '#ffffff'
3217
+ groupBackgroundColor: '#ffffff',
3218
+ groupBorderColor: '#7a3dfc',
3219
+ groupColor: '#666666',
3220
+ itemBackgroundColor: '#ffffff',
3221
+ itemBorderBottomColor: '#7a3dfc',
3222
+ itemBorderLeftColor: '#7a3dfc',
3223
+ itemBorderRightColor: '#7a3dfc',
3224
+ itemBorderTopColor: '#7a3dfc',
3225
+ itemColor: '#666666'
2515
3226
  }
2516
3227
  },
2517
3228
  {
@@ -2774,6 +3485,18 @@ const theme = {
2774
3485
  type: 'state',
2775
3486
  values: [ true, false ]
2776
3487
  },
3488
+ focus: {
3489
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
3490
+ platforms: [ 'rn', 'web' ],
3491
+ type: 'state',
3492
+ values: [ true, false ]
3493
+ },
3494
+ hover: {
3495
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
3496
+ platforms: [ 'rn', 'web' ],
3497
+ type: 'state',
3498
+ values: [ true, false ]
3499
+ },
2777
3500
  pressed: {
2778
3501
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
2779
3502
  type: 'state',
@@ -2802,6 +3525,27 @@ const theme = {
2802
3525
  outerBorderColor: '#000000'
2803
3526
  }
2804
3527
  },
3528
+ {
3529
+ if: { focus: true },
3530
+ tokens: { borderColor: '#000000', borderWidth: 4 }
3531
+ },
3532
+ {
3533
+ if: { focus: true, pressed: true },
3534
+ tokens: {
3535
+ backgroundColor: '#595959',
3536
+ borderColor: '#595959',
3537
+ borderWidth: 1,
3538
+ color: '#c9c8c8'
3539
+ }
3540
+ },
3541
+ {
3542
+ if: { hover: true },
3543
+ tokens: {
3544
+ backgroundColor: '#404040',
3545
+ borderColor: '#404040',
3546
+ color: '#ffffff'
3547
+ }
3548
+ },
2805
3549
  {
2806
3550
  if: { pressed: true },
2807
3551
  tokens: {
@@ -2815,6 +3559,16 @@ const theme = {
2815
3559
  if: { viewport: [ 'xs', 'sm', 'md' ] },
2816
3560
  tokens: { textAlign: 'space-between', width: 288 }
2817
3561
  },
3562
+ {
3563
+ if: { hover: true, selected: true },
3564
+ tokens: {
3565
+ backgroundColor: '#404040',
3566
+ borderColor: '#404040',
3567
+ color: '#ffffff',
3568
+ fontName: 'StagSans',
3569
+ fontWeight: '600'
3570
+ }
3571
+ },
2818
3572
  {
2819
3573
  if: { pressed: true, selected: true },
2820
3574
  tokens: {
@@ -3052,6 +3806,18 @@ const theme = {
3052
3806
  },
3053
3807
  PaginationPageButton: {
3054
3808
  appearances: {
3809
+ focus: {
3810
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
3811
+ platforms: [ 'rn', 'web' ],
3812
+ type: 'state',
3813
+ values: [ true, false ]
3814
+ },
3815
+ hover: {
3816
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
3817
+ platforms: [ 'rn', 'web' ],
3818
+ type: 'state',
3819
+ values: [ true, false ]
3820
+ },
3055
3821
  pressed: {
3056
3822
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
3057
3823
  type: 'state',
@@ -3064,6 +3830,11 @@ const theme = {
3064
3830
  }
3065
3831
  },
3066
3832
  rules: [
3833
+ {
3834
+ if: { hover: true },
3835
+ tokens: { borderColor: '#000000', textLine: 'none' }
3836
+ },
3837
+ { if: { focus: true }, tokens: { borderColor: '#000000' } },
3067
3838
  {
3068
3839
  if: { selected: true },
3069
3840
  tokens: {
@@ -3072,6 +3843,14 @@ const theme = {
3072
3843
  textLine: 'none'
3073
3844
  }
3074
3845
  },
3846
+ {
3847
+ if: { hover: true, selected: true },
3848
+ tokens: { borderColor: '#7a3dfc' }
3849
+ },
3850
+ {
3851
+ if: { focus: true, selected: true },
3852
+ tokens: { borderColor: '#7a3dfc' }
3853
+ },
3075
3854
  {
3076
3855
  if: { pressed: true },
3077
3856
  tokens: {
@@ -3119,6 +3898,18 @@ const theme = {
3119
3898
  type: 'state',
3120
3899
  values: [ 'previous', 'next' ]
3121
3900
  },
3901
+ focus: {
3902
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
3903
+ platforms: [ 'rn', 'web' ],
3904
+ type: 'state',
3905
+ values: [ true, false ]
3906
+ },
3907
+ hover: {
3908
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
3909
+ platforms: [ 'rn', 'web' ],
3910
+ type: 'state',
3911
+ values: [ true, false ]
3912
+ },
3122
3913
  pressed: {
3123
3914
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
3124
3915
  type: 'state',
@@ -3148,6 +3939,28 @@ const theme = {
3148
3939
  paddingTop: 8
3149
3940
  }
3150
3941
  },
3942
+ {
3943
+ if: { hover: true },
3944
+ tokens: {
3945
+ borderBottomWidth: 1,
3946
+ borderColor: '#000000',
3947
+ borderLeftWidth: 1,
3948
+ borderRightWidth: 1,
3949
+ borderTopWidth: 1,
3950
+ iconDisplace: 4,
3951
+ textLine: 'none'
3952
+ }
3953
+ },
3954
+ {
3955
+ if: { focus: true },
3956
+ tokens: {
3957
+ borderBottomWidth: 1,
3958
+ borderColor: '#000000',
3959
+ borderLeftWidth: 1,
3960
+ borderRightWidth: 1,
3961
+ borderTopWidth: 1
3962
+ }
3963
+ },
3151
3964
  {
3152
3965
  if: { pressed: true },
3153
3966
  tokens: { backgroundColor: '#000000', color: '#666666' }
@@ -3191,8 +4004,48 @@ const theme = {
3191
4004
  }
3192
4005
  },
3193
4006
  PreviewCard: {
3194
- appearances: {},
3195
- rules: [],
4007
+ appearances: {
4008
+ focus: {
4009
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4010
+ platforms: [ 'rn', 'web' ],
4011
+ type: 'state',
4012
+ values: [ true, false ]
4013
+ },
4014
+ hover: {
4015
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4016
+ platforms: [ 'rn', 'web' ],
4017
+ type: 'state',
4018
+ values: [ true, false ]
4019
+ },
4020
+ pressed: {
4021
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4022
+ platforms: [ 'rn', 'web' ],
4023
+ type: 'state',
4024
+ values: [ true, false ]
4025
+ }
4026
+ },
4027
+ rules: [
4028
+ {
4029
+ if: { hover: true },
4030
+ tokens: { borderColor: '#efefef', borderWidth: 3 }
4031
+ },
4032
+ {
4033
+ if: { focus: true },
4034
+ tokens: {
4035
+ outerBorderColor: '#000000',
4036
+ outerBorderGap: 2,
4037
+ outerBorderWidth: 2
4038
+ }
4039
+ },
4040
+ {
4041
+ if: { pressed: true },
4042
+ tokens: {
4043
+ backgroundColor: '#efefef',
4044
+ borderColor: 'transparent',
4045
+ outerBorderColor: '#000000'
4046
+ }
4047
+ }
4048
+ ],
3196
4049
  tokens: {
3197
4050
  backgroundColor: '#ffffff',
3198
4051
  borderColor: '#efefef',
@@ -3497,6 +4350,18 @@ const theme = {
3497
4350
  },
3498
4351
  QuickLinksButton: {
3499
4352
  appearances: {
4353
+ focus: {
4354
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4355
+ platforms: [ 'rn', 'web' ],
4356
+ type: 'state',
4357
+ values: [ true, false ]
4358
+ },
4359
+ hover: {
4360
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4361
+ platforms: [ 'rn', 'web' ],
4362
+ type: 'state',
4363
+ values: [ true, false ]
4364
+ },
3500
4365
  pressed: {
3501
4366
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
3502
4367
  type: 'state',
@@ -3504,6 +4369,7 @@ const theme = {
3504
4369
  }
3505
4370
  },
3506
4371
  rules: [
4372
+ { if: { hover: true }, tokens: { borderWidth: 3 } },
3507
4373
  {
3508
4374
  if: { pressed: true },
3509
4375
  tokens: {
@@ -3511,6 +4377,14 @@ const theme = {
3511
4377
  borderColor: '#666666',
3512
4378
  iconColor: '#666666'
3513
4379
  }
4380
+ },
4381
+ {
4382
+ if: { focus: true },
4383
+ tokens: { outerBorderColor: '#666666' }
4384
+ },
4385
+ {
4386
+ if: { focus: true, pressed: true },
4387
+ tokens: { borderWidth: 1, outerBorderColor: '#666666' }
3514
4388
  }
3515
4389
  ],
3516
4390
  tokens: {
@@ -3567,6 +4441,18 @@ const theme = {
3567
4441
  },
3568
4442
  QuickLinksFeatureItem: {
3569
4443
  appearances: {
4444
+ focus: {
4445
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4446
+ platforms: [ 'rn', 'web' ],
4447
+ type: 'state',
4448
+ values: [ true, false ]
4449
+ },
4450
+ hover: {
4451
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4452
+ platforms: [ 'rn', 'web' ],
4453
+ type: 'state',
4454
+ values: [ true, false ]
4455
+ },
3570
4456
  pressed: {
3571
4457
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
3572
4458
  type: 'state',
@@ -3583,6 +4469,18 @@ const theme = {
3583
4469
  if: { viewport: 'xl' },
3584
4470
  tokens: { contentMaxDimension: 184, imageDimension: 168 }
3585
4471
  },
4472
+ {
4473
+ if: { hover: true },
4474
+ tokens: {
4475
+ color: '#404040',
4476
+ imageDimension: 140,
4477
+ textLine: 'underline'
4478
+ }
4479
+ },
4480
+ {
4481
+ if: { focus: true },
4482
+ tokens: { color: '#000000', outerBorderColor: '#000000' }
4483
+ },
3586
4484
  {
3587
4485
  if: { pressed: true },
3588
4486
  tokens: {
@@ -3590,6 +4488,14 @@ const theme = {
3590
4488
  outerBorderColor: '#595959',
3591
4489
  textLine: 'underline'
3592
4490
  }
4491
+ },
4492
+ {
4493
+ if: { focus: true, pressed: true },
4494
+ tokens: {
4495
+ color: '#595959',
4496
+ outerBorderColor: '#595959',
4497
+ textLine: 'underline'
4498
+ }
3593
4499
  }
3594
4500
  ],
3595
4501
  tokens: {
@@ -3610,6 +4516,18 @@ const theme = {
3610
4516
  },
3611
4517
  QuickLinksList: {
3612
4518
  appearances: {
4519
+ focus: {
4520
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4521
+ platforms: [ 'rn', 'web' ],
4522
+ type: 'state',
4523
+ values: [ true, false ]
4524
+ },
4525
+ hover: {
4526
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4527
+ platforms: [ 'rn', 'web' ],
4528
+ type: 'state',
4529
+ values: [ true, false ]
4530
+ },
3613
4531
  pressed: {
3614
4532
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
3615
4533
  type: 'state',
@@ -3617,6 +4535,8 @@ const theme = {
3617
4535
  }
3618
4536
  },
3619
4537
  rules: [
4538
+ { if: { hover: true }, tokens: { backgroundColor: '#efefef' } },
4539
+ { if: { focus: true }, tokens: { backgroundColor: '#efefef' } },
3620
4540
  {
3621
4541
  if: { pressed: true },
3622
4542
  tokens: { backgroundColor: '#c9c8c8', itemIconColor: '#000000' }
@@ -3657,6 +4577,18 @@ const theme = {
3657
4577
  values: [ true ]
3658
4578
  },
3659
4579
  error: { type: 'state', values: [ true ] },
4580
+ focus: {
4581
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4582
+ platforms: [ 'rn', 'web' ],
4583
+ type: 'state',
4584
+ values: [ true, false ]
4585
+ },
4586
+ hover: {
4587
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4588
+ platforms: [ 'rn', 'web' ],
4589
+ type: 'state',
4590
+ values: [ true, false ]
4591
+ },
3660
4592
  inactive: {
3661
4593
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
3662
4594
  type: 'state',
@@ -3675,6 +4607,18 @@ const theme = {
3675
4607
  outerBorderWidth: 0
3676
4608
  }
3677
4609
  },
4610
+ {
4611
+ if: { focus: true },
4612
+ tokens: {
4613
+ outerBorderColor: '#000000',
4614
+ outerBorderGap: 5,
4615
+ outerBorderWidth: 1
4616
+ }
4617
+ },
4618
+ {
4619
+ if: { hover: true },
4620
+ tokens: { outerBorderColor: '#000000' }
4621
+ },
3678
4622
  {
3679
4623
  if: { inactive: true },
3680
4624
  tokens: {
@@ -3740,6 +4684,18 @@ const theme = {
3740
4684
  values: [ true ]
3741
4685
  },
3742
4686
  error: { type: 'state', values: [ true ] },
4687
+ focus: {
4688
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
4689
+ platforms: [ 'rn', 'web' ],
4690
+ type: 'state',
4691
+ values: [ true, false ]
4692
+ },
4693
+ hover: {
4694
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4695
+ platforms: [ 'rn', 'web' ],
4696
+ type: 'state',
4697
+ values: [ true, false ]
4698
+ },
3743
4699
  inactive: {
3744
4700
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
3745
4701
  type: 'state',
@@ -3768,6 +4724,17 @@ const theme = {
3768
4724
  paddingTop: 16
3769
4725
  }
3770
4726
  },
4727
+ {
4728
+ if: { hover: true },
4729
+ tokens: {
4730
+ borderColor: '#666666',
4731
+ outerBorderColor: '#c9c8c8',
4732
+ outerBorderWidth: 2,
4733
+ radioOuterBorderColor: '#000000',
4734
+ radioOuterBorderGap: 2,
4735
+ radioOuterBorderWidth: 1
4736
+ }
4737
+ },
3771
4738
  {
3772
4739
  if: { checked: true },
3773
4740
  tokens: {
@@ -3777,6 +4744,19 @@ const theme = {
3777
4744
  radioInputBorderWidth: 2
3778
4745
  }
3779
4746
  },
4747
+ {
4748
+ if: { focus: true },
4749
+ tokens: {
4750
+ borderColor: '#666666',
4751
+ outerBorderColor: '#000000',
4752
+ outerBorderGap: 2,
4753
+ outerBorderWidth: 2,
4754
+ radioInputBorderColor: '#000000',
4755
+ radioOuterBorderColor: '#000000',
4756
+ radioOuterBorderGap: 2,
4757
+ radioOuterBorderWidth: 1
4758
+ }
4759
+ },
3780
4760
  {
3781
4761
  description: 'Pressed state matches hover state plus light grey background',
3782
4762
  if: { pressed: true },
@@ -3965,6 +4945,12 @@ const theme = {
3965
4945
  type: 'state',
3966
4946
  values: [ true ]
3967
4947
  },
4948
+ hover: {
4949
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
4950
+ platforms: [ 'rn', 'web' ],
4951
+ type: 'state',
4952
+ values: [ true, false ]
4953
+ },
3968
4954
  inactive: {
3969
4955
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
3970
4956
  type: 'state',
@@ -3972,6 +4958,7 @@ const theme = {
3972
4958
  }
3973
4959
  },
3974
4960
  rules: [
4961
+ { if: { hover: true, inactive: null }, tokens: {} },
3975
4962
  {
3976
4963
  if: { focus: true },
3977
4964
  tokens: {
@@ -4016,6 +5003,18 @@ const theme = {
4016
5003
  },
4017
5004
  SearchButton: {
4018
5005
  appearances: {
5006
+ focus: {
5007
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5008
+ platforms: [ 'rn', 'web' ],
5009
+ type: 'state',
5010
+ values: [ true, false ]
5011
+ },
5012
+ hover: {
5013
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5014
+ platforms: [ 'rn', 'web' ],
5015
+ type: 'state',
5016
+ values: [ true, false ]
5017
+ },
4019
5018
  inactive: {
4020
5019
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
4021
5020
  type: 'state',
@@ -4033,6 +5032,23 @@ const theme = {
4033
5032
  if: { priority: 'high' },
4034
5033
  tokens: { backgroundColor: '#000000', iconColor: '#ffffff' }
4035
5034
  },
5035
+ {
5036
+ if: { hover: true },
5037
+ tokens: {
5038
+ backgroundColor: '#000000',
5039
+ borderWidth: 0,
5040
+ iconColor: '#ffffff'
5041
+ }
5042
+ },
5043
+ {
5044
+ if: { focus: true },
5045
+ tokens: {
5046
+ backgroundColor: 'transparent',
5047
+ borderColor: '#000000',
5048
+ borderWidth: 3,
5049
+ iconColor: '#000000'
5050
+ }
5051
+ },
4036
5052
  {
4037
5053
  if: { pressed: true },
4038
5054
  tokens: {
@@ -4079,6 +5095,12 @@ const theme = {
4079
5095
  type: 'state',
4080
5096
  values: [ true ]
4081
5097
  },
5098
+ hover: {
5099
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5100
+ platforms: [ 'rn', 'web' ],
5101
+ type: 'state',
5102
+ values: [ true, false ]
5103
+ },
4082
5104
  inactive: {
4083
5105
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
4084
5106
  type: 'state',
@@ -4113,6 +5135,14 @@ const theme = {
4113
5135
  validationIconColor: '#c9370b'
4114
5136
  }
4115
5137
  },
5138
+ {
5139
+ if: { hover: true },
5140
+ tokens: {
5141
+ backgroundColor: '#efefef',
5142
+ borderColor: '#000000',
5143
+ outerBorderWidth: null
5144
+ }
5145
+ },
4116
5146
  {
4117
5147
  if: { inactive: true },
4118
5148
  tokens: {
@@ -4165,6 +5195,18 @@ const theme = {
4165
5195
  type: 'state',
4166
5196
  values: [ true, false ]
4167
5197
  },
5198
+ focus: {
5199
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5200
+ platforms: [ 'rn', 'web' ],
5201
+ type: 'state',
5202
+ values: [ true, false ]
5203
+ },
5204
+ hover: {
5205
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5206
+ platforms: [ 'rn', 'web' ],
5207
+ type: 'state',
5208
+ values: [ true, false ]
5209
+ },
4168
5210
  type: {
4169
5211
  description: '`parent` being the toggle button for an ItemsGroup, and `child` an element of the ItemGroup',
4170
5212
  type: 'state',
@@ -4200,6 +5242,8 @@ const theme = {
4200
5242
  backgroundColor: 'rgba(0, 0, 0, 0)'
4201
5243
  }
4202
5244
  },
5245
+ { if: { hover: true }, tokens: { backgroundColor: '#efefef' } },
5246
+ { if: { focus: true }, tokens: { backgroundColor: '#efefef' } },
4203
5247
  {
4204
5248
  if: { active: true, type: 'child' },
4205
5249
  tokens: {
@@ -4213,6 +5257,10 @@ const theme = {
4213
5257
  paddingBottom: 13,
4214
5258
  paddingTop: 13
4215
5259
  }
5260
+ },
5261
+ {
5262
+ if: { active: false, hover: true, type: 'child' },
5263
+ tokens: { accentBackgroundColor: 'rgba(0, 0, 0, 0)' }
4216
5264
  }
4217
5265
  ],
4218
5266
  tokens: {
@@ -4283,13 +5331,24 @@ const theme = {
4283
5331
  },
4284
5332
  SkipLink: {
4285
5333
  appearances: {
5334
+ focus: {
5335
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5336
+ platforms: [ 'rn', 'web' ],
5337
+ type: 'state',
5338
+ values: [ true, false ]
5339
+ },
4286
5340
  pressed: {
4287
5341
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
4288
5342
  type: 'state',
4289
5343
  values: [ true, false ]
4290
5344
  }
4291
5345
  },
4292
- rules: [],
5346
+ rules: [
5347
+ {
5348
+ if: { focus: true, pressed: true },
5349
+ tokens: { color: '#595959', outlineColor: '#595959' }
5350
+ }
5351
+ ],
4293
5352
  tokens: {
4294
5353
  backgroundColor: '#ffffff',
4295
5354
  borderRadius: 4,
@@ -4317,7 +5376,14 @@ const theme = {
4317
5376
  }
4318
5377
  },
4319
5378
  SplashButton: {
4320
- appearances: {},
5379
+ appearances: {
5380
+ hover: {
5381
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5382
+ platforms: [ 'rn', 'web' ],
5383
+ type: 'state',
5384
+ values: [ true, false ]
5385
+ }
5386
+ },
4321
5387
  rules: [],
4322
5388
  tokens: {
4323
5389
  buttonContentBackground: null,
@@ -4327,8 +5393,20 @@ const theme = {
4327
5393
  }
4328
5394
  },
4329
5395
  SplashButtonWithDetails: {
4330
- appearances: {},
4331
- rules: [],
5396
+ appearances: {
5397
+ hover: {
5398
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5399
+ platforms: [ 'rn', 'web' ],
5400
+ type: 'state',
5401
+ values: [ true, false ]
5402
+ }
5403
+ },
5404
+ rules: [
5405
+ {
5406
+ if: { hover: true },
5407
+ tokens: { buttonContentChildrenBackground: null }
5408
+ }
5409
+ ],
4332
5410
  tokens: {
4333
5411
  buttonBackground: '#ffffff',
4334
5412
  buttonBorderColor: null,
@@ -4450,6 +5528,18 @@ const theme = {
4450
5528
  },
4451
5529
  StoryCard: {
4452
5530
  appearances: {
5531
+ focus: {
5532
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5533
+ platforms: [ 'rn', 'web' ],
5534
+ type: 'state',
5535
+ values: [ true, false ]
5536
+ },
5537
+ hover: {
5538
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5539
+ platforms: [ 'rn', 'web' ],
5540
+ type: 'state',
5541
+ values: [ true, false ]
5542
+ },
4453
5543
  pressed: {
4454
5544
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
4455
5545
  type: 'state',
@@ -4457,9 +5547,18 @@ const theme = {
4457
5547
  }
4458
5548
  },
4459
5549
  rules: [
5550
+ { if: { hover: true }, tokens: { borderWidth: 2 } },
4460
5551
  {
4461
5552
  if: { pressed: true },
4462
5553
  tokens: { backgroundColor: '#efefef' }
5554
+ },
5555
+ {
5556
+ if: { focus: true },
5557
+ tokens: {
5558
+ outerBorderColor: '#000000',
5559
+ outerBorderGap: 2,
5560
+ outerBorderWidth: 2
5561
+ }
4463
5562
  }
4464
5563
  ],
4465
5564
  tokens: {
@@ -4660,6 +5759,18 @@ const theme = {
4660
5759
  type: 'variant',
4661
5760
  values: [ true ]
4662
5761
  },
5762
+ focus: {
5763
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5764
+ platforms: [ 'rn', 'web' ],
5765
+ type: 'state',
5766
+ values: [ true, false ]
5767
+ },
5768
+ hover: {
5769
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5770
+ platforms: [ 'rn', 'web' ],
5771
+ type: 'state',
5772
+ values: [ true, false ]
5773
+ },
4663
5774
  inverse: { type: 'variant', values: [ true ] },
4664
5775
  pressed: {
4665
5776
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
@@ -4683,10 +5794,32 @@ const theme = {
4683
5794
  highlightColor: '#000000'
4684
5795
  }
4685
5796
  },
5797
+ {
5798
+ if: { hover: true },
5799
+ tokens: {
5800
+ backgroundColor: '#efefef',
5801
+ highlightBarBorderWidth: 1,
5802
+ highlightBarHeight: 1,
5803
+ highlightColor: '#c9c8c8'
5804
+ }
5805
+ },
5806
+ {
5807
+ if: { focus: true },
5808
+ tokens: {
5809
+ backgroundColor: '#ffffff',
5810
+ highlightBarBorderWidth: 1,
5811
+ highlightBarHeight: 1,
5812
+ highlightColor: '#666666'
5813
+ }
5814
+ },
4686
5815
  {
4687
5816
  if: { pressed: true },
4688
5817
  tokens: { backgroundColor: '#c9c8c8', highlightBarBorderWidth: 0 }
4689
5818
  },
5819
+ {
5820
+ if: { focus: true, selected: true },
5821
+ tokens: { backgroundColor: '#ffffff', highlightColor: '#000000' }
5822
+ },
4690
5823
  {
4691
5824
  if: { inverse: true },
4692
5825
  tokens: { backgroundColor: 'transparent', color: '#ffffff' }
@@ -4700,10 +5833,27 @@ const theme = {
4700
5833
  highlightColor: '#c9c8c8'
4701
5834
  }
4702
5835
  },
5836
+ {
5837
+ if: { hover: true, inverse: true },
5838
+ tokens: { color: '#efefef' }
5839
+ },
5840
+ {
5841
+ if: { focus: true, inverse: true },
5842
+ tokens: {
5843
+ color: '#ffffff',
5844
+ highlightBarBorderWidth: 1,
5845
+ highlightBarHeight: 1,
5846
+ highlightColor: '#ffffff'
5847
+ }
5848
+ },
4703
5849
  {
4704
5850
  if: { inverse: true, pressed: true },
4705
5851
  tokens: { color: '#c9c8c8', highlightBarBorderWidth: 0 }
4706
5852
  },
5853
+ {
5854
+ if: { focus: true, inverse: true, selected: true },
5855
+ tokens: {}
5856
+ },
4707
5857
  { if: { equalWidth: true }, tokens: { maxWidth: null } }
4708
5858
  ],
4709
5859
  tokens: {
@@ -4751,6 +5901,18 @@ const theme = {
4751
5901
  },
4752
5902
  TagsItem: {
4753
5903
  appearances: {
5904
+ focus: {
5905
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
5906
+ platforms: [ 'rn', 'web' ],
5907
+ type: 'state',
5908
+ values: [ true, false ]
5909
+ },
5910
+ hover: {
5911
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
5912
+ platforms: [ 'rn', 'web' ],
5913
+ type: 'state',
5914
+ values: [ true, false ]
5915
+ },
4754
5916
  inactive: {
4755
5917
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
4756
5918
  type: 'state',
@@ -4781,6 +5943,30 @@ const theme = {
4781
5943
  outerBorderWidth: 0
4782
5944
  }
4783
5945
  },
5946
+ {
5947
+ if: { focus: true },
5948
+ tokens: {
5949
+ backgroundColor: 'rgba(0, 0, 0, 0)',
5950
+ borderColor: '#000000',
5951
+ color: '#000000',
5952
+ iconBackground: 'rgba(0, 0, 0, 0)',
5953
+ iconColor: '#000000',
5954
+ outerBorderColor: '#000000',
5955
+ outerBorderGap: 3,
5956
+ outerBorderWidth: 1
5957
+ }
5958
+ },
5959
+ {
5960
+ if: { hover: true },
5961
+ tokens: {
5962
+ backgroundColor: '#404040',
5963
+ borderColor: '#404040',
5964
+ borderWidth: 0,
5965
+ color: '#ffffff',
5966
+ iconBackground: '#404040',
5967
+ iconColor: '#ffffff'
5968
+ }
5969
+ },
4784
5970
  {
4785
5971
  if: { selected: true },
4786
5972
  tokens: {
@@ -4795,6 +5981,26 @@ const theme = {
4795
5981
  outerBorderWidth: 0
4796
5982
  }
4797
5983
  },
5984
+ {
5985
+ if: { hover: true, selected: true },
5986
+ tokens: { backgroundColor: '#404040', iconBackground: '#404040' }
5987
+ },
5988
+ {
5989
+ if: { focus: true, selected: true },
5990
+ tokens: {
5991
+ backgroundColor: '#000000',
5992
+ outerBorderColor: '#000000',
5993
+ outerBorderWidth: 1
5994
+ }
5995
+ },
5996
+ {
5997
+ if: { focus: true, hover: true, selected: true },
5998
+ tokens: { backgroundColor: '#404040', iconBackground: '#404040' }
5999
+ },
6000
+ {
6001
+ if: { focus: true, pressed: true, selected: true },
6002
+ tokens: { backgroundColor: '#404040', iconBackground: '#404040' }
6003
+ },
4798
6004
  {
4799
6005
  if: { inactive: true },
4800
6006
  tokens: {
@@ -4849,6 +6055,23 @@ const theme = {
4849
6055
  type: 'state',
4850
6056
  values: [ true, false ]
4851
6057
  },
6058
+ focus: {
6059
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
6060
+ platforms: [ 'rn', 'web' ],
6061
+ type: 'state',
6062
+ values: [ true, false ]
6063
+ },
6064
+ hover: {
6065
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
6066
+ platforms: [ 'rn', 'web' ],
6067
+ type: 'state',
6068
+ values: [ true, false ]
6069
+ },
6070
+ pressed: {
6071
+ description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
6072
+ type: 'state',
6073
+ values: [ true, false ]
6074
+ },
4852
6075
  viewport: {
4853
6076
  description: 'The size label for the current screen viewport based on the current screen width',
4854
6077
  type: 'state',
@@ -4867,6 +6090,38 @@ const theme = {
4867
6090
  {
4868
6091
  if: { expanded: true },
4869
6092
  tokens: { icon: PaletteIconChevronUp }
6093
+ },
6094
+ {
6095
+ if: { hover: true },
6096
+ tokens: {
6097
+ iconBackgroundColor: '#000000',
6098
+ iconColor: '#ffffff',
6099
+ iconOuterBorderGap: 2
6100
+ }
6101
+ },
6102
+ {
6103
+ if: { pressed: true },
6104
+ tokens: {
6105
+ iconBackgroundColor: '#404040',
6106
+ iconColor: '#ffffff',
6107
+ iconOuterBorderGap: 2
6108
+ }
6109
+ },
6110
+ {
6111
+ if: { focus: true },
6112
+ tokens: {
6113
+ iconOuterBorderColor: '#000000',
6114
+ iconOuterBorderGap: 2,
6115
+ iconOuterBorderWidth: 1
6116
+ }
6117
+ },
6118
+ {
6119
+ if: { focus: true, pressed: true },
6120
+ tokens: {
6121
+ iconBackgroundColor: '#404040',
6122
+ iconColor: '#404040',
6123
+ iconOuterBorderGap: 2
6124
+ }
4870
6125
  }
4871
6126
  ],
4872
6127
  tokens: {
@@ -4900,6 +6155,12 @@ const theme = {
4900
6155
  expandTitlePaddingLeft: 0,
4901
6156
  expandTitleUnderline: 'none',
4902
6157
  icon: PaletteIconChevronDown,
6158
+ iconBackgroundColor: 'rgba(0, 0, 0, 0)',
6159
+ iconBorderColor: 'rgba(0, 0, 0, 0)',
6160
+ iconColor: '#000000',
6161
+ iconOuterBorderColor: 'rgba(0, 0, 0, 0)',
6162
+ iconOuterBorderGap: 0,
6163
+ iconOuterBorderWidth: 0,
4903
6164
  listColor: '#000000',
4904
6165
  listFontName: 'StagSans',
4905
6166
  listFontSize: 14,
@@ -4977,6 +6238,12 @@ const theme = {
4977
6238
  type: 'state',
4978
6239
  values: [ true ]
4979
6240
  },
6241
+ hover: {
6242
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
6243
+ platforms: [ 'rn', 'web' ],
6244
+ type: 'state',
6245
+ values: [ true, false ]
6246
+ },
4980
6247
  inactive: {
4981
6248
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
4982
6249
  type: 'state',
@@ -5000,7 +6267,28 @@ const theme = {
5000
6267
  },
5001
6268
  rules: [
5002
6269
  {
5003
- if: { validation: 'success' },
6270
+ if: { hover: true, inactive: null },
6271
+ tokens: { backgroundColor: '#efefef', borderColor: '#000000' }
6272
+ },
6273
+ {
6274
+ if: { hover: true, validation: 'success' },
6275
+ tokens: {
6276
+ backgroundColor: '#efefef',
6277
+ borderColor: '#000000',
6278
+ icon: PaletteIconCheckCircleFilled,
6279
+ iconColor: '#1c7b2b'
6280
+ }
6281
+ },
6282
+ {
6283
+ if: { hover: true, validation: 'error' },
6284
+ tokens: {
6285
+ backgroundColor: '#efefef',
6286
+ borderColor: '#000000',
6287
+ iconColor: '#c9370b'
6288
+ }
6289
+ },
6290
+ {
6291
+ if: { hover: false, validation: 'success' },
5004
6292
  tokens: {
5005
6293
  borderColor: '#1c7b2b',
5006
6294
  icon: PaletteIconCheckCircleFilled,
@@ -5008,7 +6296,7 @@ const theme = {
5008
6296
  }
5009
6297
  },
5010
6298
  {
5011
- if: { validation: 'error' },
6299
+ if: { hover: false, validation: 'error' },
5012
6300
  tokens: {
5013
6301
  borderColor: '#c9370b',
5014
6302
  icon: PaletteIconExclamationOctagon,
@@ -5145,6 +6433,18 @@ const theme = {
5145
6433
  },
5146
6434
  ToggleSwitch: {
5147
6435
  appearances: {
6436
+ focus: {
6437
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
6438
+ platforms: [ 'rn', 'web' ],
6439
+ type: 'state',
6440
+ values: [ true, false ]
6441
+ },
6442
+ hover: {
6443
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
6444
+ platforms: [ 'rn', 'web' ],
6445
+ type: 'state',
6446
+ values: [ true, false ]
6447
+ },
5148
6448
  inactive: {
5149
6449
  description: 'Prevents an interactive component from being interacted with and applies accessibility attributes to indicate to the user that this component cannot be used.',
5150
6450
  type: 'state',
@@ -5162,10 +6462,24 @@ const theme = {
5162
6462
  }
5163
6463
  },
5164
6464
  rules: [
6465
+ {
6466
+ if: { hover: true },
6467
+ tokens: { backgroundColor: '#c9c8c8', switchColor: '#666666' }
6468
+ },
5165
6469
  {
5166
6470
  if: { pressed: true },
5167
6471
  tokens: { backgroundColor: '#c9c8c8', switchColor: '#595959' }
5168
6472
  },
6473
+ {
6474
+ if: { focus: true },
6475
+ tokens: {
6476
+ backgroundColor: '#c9c8c8',
6477
+ outerBorderColor: '#000000',
6478
+ outerBorderGap: 3,
6479
+ outerBorderWidth: 1,
6480
+ switchColor: '#666666'
6481
+ }
6482
+ },
5169
6483
  {
5170
6484
  if: { selected: true },
5171
6485
  tokens: {
@@ -5176,10 +6490,46 @@ const theme = {
5176
6490
  switchColor: '#000000'
5177
6491
  }
5178
6492
  },
6493
+ {
6494
+ if: { hover: true, selected: true },
6495
+ tokens: { backgroundColor: '#efefef', switchColor: '#404040' }
6496
+ },
5179
6497
  {
5180
6498
  if: { pressed: true, selected: true },
5181
6499
  tokens: { backgroundColor: '#c9c8c8', switchColor: '#666666' }
5182
6500
  },
6501
+ {
6502
+ if: { focus: true, selected: true },
6503
+ tokens: {
6504
+ backgroundColor: '#efefef',
6505
+ icon: PaletteIconCheck,
6506
+ iconColor: '#ffffff',
6507
+ outerBorderColor: '#000000',
6508
+ outerBorderWidth: 1,
6509
+ switchBorderColor: 'rgba(0, 0, 0, 0)',
6510
+ switchColor: '#000000'
6511
+ }
6512
+ },
6513
+ {
6514
+ if: { focus: true, pressed: true },
6515
+ tokens: {
6516
+ outerBorderColor: '#000000',
6517
+ outerBorderGap: 3,
6518
+ outerBorderWidth: 1
6519
+ }
6520
+ },
6521
+ {
6522
+ if: { focus: true, pressed: true, selected: true },
6523
+ tokens: {
6524
+ backgroundColor: '#c9c8c8',
6525
+ icon: PaletteIconCheck,
6526
+ iconColor: '#ffffff',
6527
+ outerBorderColor: '#000000',
6528
+ outerBorderGap: 3,
6529
+ outerBorderWidth: 1,
6530
+ switchColor: '#666666'
6531
+ }
6532
+ },
5183
6533
  {
5184
6534
  if: { inactive: true },
5185
6535
  tokens: {
@@ -5302,6 +6652,18 @@ const theme = {
5302
6652
  },
5303
6653
  TooltipButton: {
5304
6654
  appearances: {
6655
+ focus: {
6656
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
6657
+ platforms: [ 'rn', 'web' ],
6658
+ type: 'state',
6659
+ values: [ true, false ]
6660
+ },
6661
+ hover: {
6662
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
6663
+ platforms: [ 'rn', 'web' ],
6664
+ type: 'state',
6665
+ values: [ true, false ]
6666
+ },
5305
6667
  inverse: { type: 'variant', values: [ true ] },
5306
6668
  pressed: {
5307
6669
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
@@ -5310,10 +6672,30 @@ const theme = {
5310
6672
  }
5311
6673
  },
5312
6674
  rules: [
6675
+ {
6676
+ if: { hover: true },
6677
+ tokens: {
6678
+ backgroundColor: 'rgba(0, 0, 0, 0)',
6679
+ iconColor: '#7a3dfc',
6680
+ iconScale: 1.25
6681
+ }
6682
+ },
5313
6683
  {
5314
6684
  if: { inverse: true },
5315
6685
  tokens: { backgroundColor: 'rgba(0, 0, 0, 0)', iconColor: '#ffffff' }
5316
6686
  },
6687
+ {
6688
+ if: { hover: true, inverse: true },
6689
+ tokens: { iconColor: '#ffffff' }
6690
+ },
6691
+ {
6692
+ if: { focus: true, inverse: true },
6693
+ tokens: { outerBorderColor: '#ffffff' }
6694
+ },
6695
+ {
6696
+ if: { focus: true, inverse: null },
6697
+ tokens: { outerBorderColor: '#000000' }
6698
+ },
5317
6699
  {
5318
6700
  if: { inverse: true, pressed: true },
5319
6701
  tokens: {
@@ -5670,6 +7052,18 @@ const theme = {
5670
7052
  },
5671
7053
  VideoPickerThumbnail: {
5672
7054
  appearances: {
7055
+ focus: {
7056
+ description: "Currently only web has good support for this. Applies when an interactive component's focus handler is triggered, such as keyboard tabbing or selection.",
7057
+ platforms: [ 'rn', 'web' ],
7058
+ type: 'state',
7059
+ values: [ true, false ]
7060
+ },
7061
+ hover: {
7062
+ description: "Currently web only. Applies when an interactive component's hover handler is triggered, such as on mouseover.",
7063
+ platforms: [ 'rn', 'web' ],
7064
+ type: 'state',
7065
+ values: [ true, false ]
7066
+ },
5673
7067
  pressed: {
5674
7068
  description: 'Applies while an interactive component is being physically pressed. Most visible on touchscreen taps; in React Native Web, this is visible on web mouse clicks only if the pressable is held down.',
5675
7069
  type: 'state',
@@ -5682,6 +7076,18 @@ const theme = {
5682
7076
  }
5683
7077
  },
5684
7078
  rules: [
7079
+ {
7080
+ if: { focus: true },
7081
+ tokens: {
7082
+ borderColor: '#595959',
7083
+ borderWidth: 1,
7084
+ outerBorderColor: '#000000'
7085
+ }
7086
+ },
7087
+ {
7088
+ if: { hover: true },
7089
+ tokens: { borderColor: '#c9c8c8', borderWidth: 3 }
7090
+ },
5685
7091
  {
5686
7092
  if: { pressed: true },
5687
7093
  tokens: {
@@ -5823,6 +7229,6 @@ const theme = {
5823
7229
  tokens: { size: 96 }
5824
7230
  }
5825
7231
  },
5826
- metadata: { name: 'theme-koodo', themeTokensVersion: '2.50.0' }
7232
+ metadata: { name: 'theme-koodo', themeTokensVersion: '2.50.1' }
5827
7233
  }
5828
7234
  export default theme