@telus-uds/theme-koodo 5.4.0 → 5.5.1

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/Footnote.json +2 -0
  2. package/build/android/FootnoteLink.json +1 -0
  3. package/build/android/IconButton.json +10 -4
  4. package/build/android/TermsAndConditions.json +51 -0
  5. package/build/android/schema.json +760 -674
  6. package/build/android/theme.json +65 -5
  7. package/build/ios/Footnote.json +2 -0
  8. package/build/ios/FootnoteLink.json +1 -0
  9. package/build/ios/IconButton.json +10 -4
  10. package/build/ios/TermsAndConditions.json +51 -0
  11. package/build/ios/schema.json +760 -674
  12. package/build/ios/theme.json +65 -5
  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 +3 -3
  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 +3 -1
  45. package/build/rn/FootnoteLink.js +2 -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 +3 -3
  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 +760 -674
  122. package/build/rn/spacingScale.js +1 -1
  123. package/build/rn/theme.js +135 -73
  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 +18 -1
  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 +3 -1
  156. package/build/web/FootnoteLink.js +2 -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 +66 -2
  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 +760 -674
  234. package/build/web/spacingScale.js +1 -1
  235. package/build/web/theme.js +1437 -28
  236. package/package.json +4 -4
  237. package/theme.json +55 -1
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  *
3
3
  * Do not edit directly
4
- * Generated on Mon, 08 Jan 2024 20:06:25 GMT
4
+ * Generated on Mon, 29 Jan 2024 18:23:27 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',
@@ -1090,6 +1417,11 @@ const theme = {
1090
1417
  if: { viewport: [ 'xs', 'sm' ] },
1091
1418
  tokens: { alignItems: 'flex-start', size: 48 }
1092
1419
  },
1420
+ { if: { hover: true }, tokens: { borderColor: '#404040' } },
1421
+ {
1422
+ if: { focus: true },
1423
+ tokens: { borderColor: '#000000', borderWidth: 2 }
1424
+ },
1093
1425
  {
1094
1426
  if: { pressed: true },
1095
1427
  tokens: { borderColor: '#666666', borderWidth: 2 }
@@ -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: {
@@ -1959,7 +2423,9 @@ const theme = {
1959
2423
  headerLineHeight: 1.25,
1960
2424
  headerMargin: 16,
1961
2425
  listItemColor: '#000000',
2426
+ listItemFontName: 'StagSans',
1962
2427
  listItemFontSize: 14,
2428
+ listItemFontWeight: '400',
1963
2429
  listItemLineHeight: 1.42857142857,
1964
2430
  listItemMarkerFontSize: 14,
1965
2431
  listItemMarkerLineHeight: 1.45,
@@ -1973,6 +2439,7 @@ const theme = {
1973
2439
  tokens: {
1974
2440
  color: null,
1975
2441
  fontName: 'StagSans',
2442
+ fontSize: 16,
1976
2443
  fontWeight: '600',
1977
2444
  lineHeight: 1,
1978
2445
  paddingLeft: 2,
@@ -1981,6 +2448,18 @@ const theme = {
1981
2448
  },
1982
2449
  HorizontalScrollButton: {
1983
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
+ },
1984
2463
  pressed: {
1985
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.',
1986
2465
  type: 'state',
@@ -1988,6 +2467,14 @@ const theme = {
1988
2467
  }
1989
2468
  },
1990
2469
  rules: [
2470
+ {
2471
+ if: { hover: true },
2472
+ tokens: {
2473
+ backgroundColor: '#000000',
2474
+ borderColor: '#000000',
2475
+ iconColor: '#ffffff'
2476
+ }
2477
+ },
1991
2478
  {
1992
2479
  if: { pressed: true },
1993
2480
  tokens: {
@@ -2075,6 +2562,18 @@ const theme = {
2075
2562
  type: 'variant',
2076
2563
  values: [ true ]
2077
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
+ },
2078
2577
  inactive: {
2079
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.',
2080
2579
  type: 'state',
@@ -2171,12 +2670,55 @@ const theme = {
2171
2670
  },
2172
2671
  {
2173
2672
  if: { inverse: true },
2174
- 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
+ }
2175
2709
  },
2176
2710
  {
2177
2711
  if: { password: true },
2178
2712
  tokens: { borderColor: 'transparent' }
2179
2713
  },
2714
+ {
2715
+ if: { focus: true, password: true },
2716
+ tokens: {
2717
+ borderColor: '#000000',
2718
+ borderWidth: 3,
2719
+ outerBorderWidth: 0
2720
+ }
2721
+ },
2180
2722
  {
2181
2723
  if: { inactive: null, pressed: true },
2182
2724
  tokens: { backgroundColor: '#404040', iconColor: '#666666' }
@@ -2219,11 +2761,16 @@ const theme = {
2219
2761
  }
2220
2762
  }
2221
2763
  },
2764
+ { if: { hover: true, raised: true }, tokens: {} },
2222
2765
  {
2223
2766
  if: { raised: true, size: 'large' },
2224
2767
  tokens: { iconSize: 24, padding: 12 }
2225
2768
  },
2226
2769
  { if: { raised: true, size: 'small' }, tokens: { padding: 8 } },
2770
+ {
2771
+ if: { focus: true, raised: true },
2772
+ tokens: { borderWidth: 3 }
2773
+ },
2227
2774
  {
2228
2775
  if: { pressed: true, raised: true },
2229
2776
  tokens: { backgroundColor: '#000000', iconColor: '#666666' }
@@ -2240,7 +2787,7 @@ const theme = {
2240
2787
  }
2241
2788
  ],
2242
2789
  tokens: {
2243
- backgroundColor: 'transparent',
2790
+ backgroundColor: '#ffffff',
2244
2791
  borderBottomLeftRadius: null,
2245
2792
  borderBottomRightRadius: null,
2246
2793
  borderBottomWidth: null,
@@ -2289,6 +2836,18 @@ const theme = {
2289
2836
  Link: {
2290
2837
  appearances: {
2291
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
+ },
2292
2851
  iconPosition: {
2293
2852
  description: 'Theme styles to be applied to icon links depending on where the icon is in relation to the link text',
2294
2853
  type: 'state',
@@ -2313,16 +2872,56 @@ const theme = {
2313
2872
  },
2314
2873
  rules: [
2315
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
+ },
2316
2891
  {
2317
2892
  if: { pressed: true },
2318
2893
  tokens: { color: '#666666', textLine: 'none' }
2319
2894
  },
2320
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
+ },
2321
2904
  {
2322
2905
  if: { alternative: true, pressed: true },
2323
2906
  tokens: { color: '#666666' }
2324
2907
  },
2908
+ {
2909
+ if: { alternative: true, focus: true, pressed: true },
2910
+ tokens: { color: '#666666', outerBorderColor: '#666666' }
2911
+ },
2325
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
+ },
2326
2925
  {
2327
2926
  if: { inverse: true, pressed: true },
2328
2927
  tokens: { color: '#c9c8c8' }
@@ -2349,7 +2948,19 @@ const theme = {
2349
2948
  if: { size: 'large' },
2350
2949
  tokens: { blockFontSize: 20, blockLineHeight: 1.4, iconSize: 24 }
2351
2950
  },
2352
- { 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
+ }
2353
2964
  ],
2354
2965
  tokens: {
2355
2966
  alignSelf: 'flex-start',
@@ -2449,6 +3060,18 @@ const theme = {
2449
3060
  type: 'state',
2450
3061
  values: [ true, false ]
2451
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
+ },
2452
3075
  isChild: {
2453
3076
  description: 'when the item is child of another child',
2454
3077
  type: 'state',
@@ -2461,6 +3084,25 @@ const theme = {
2461
3084
  }
2462
3085
  },
2463
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
+ },
2464
3106
  {
2465
3107
  if: { current: true },
2466
3108
  tokens: {
@@ -2487,28 +3129,100 @@ const theme = {
2487
3129
  {
2488
3130
  if: { isChild: true, pressed: true },
2489
3131
  tokens: {
2490
- itemBorderBottomWidth: 0,
2491
- itemBorderLeftColor: '#595959',
2492
- itemBorderTopWidth: 0,
2493
- 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'
2494
3203
  }
2495
3204
  },
2496
3205
  {
2497
- if: { expanded: true },
3206
+ if: { current: true, expanded: true, hover: true },
2498
3207
  tokens: {
2499
- groupBackgroundColor: 'rgba(0, 0, 0, 0)',
2500
- groupBorderColor: 'rgba(0, 0, 0, 0)',
2501
- groupColor: '#ffffff',
2502
- groupIcon: PaletteIconChevronUp,
2503
- itemColor: '#595959'
3208
+ groupBackgroundColor: '#efefef',
3209
+ groupColor: '#666666',
3210
+ itemBackgroundColor: '#efefef',
3211
+ itemColor: '#666666'
2504
3212
  }
2505
3213
  },
2506
3214
  {
2507
- if: { current: true, isChild: true },
3215
+ if: { focus: true },
2508
3216
  tokens: {
2509
- itemBackgroundColor: '#000000',
2510
- itemBorderLeftColor: '#000000',
2511
- 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'
2512
3226
  }
2513
3227
  },
2514
3228
  {
@@ -2771,6 +3485,18 @@ const theme = {
2771
3485
  type: 'state',
2772
3486
  values: [ true, false ]
2773
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
+ },
2774
3500
  pressed: {
2775
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.',
2776
3502
  type: 'state',
@@ -2799,6 +3525,27 @@ const theme = {
2799
3525
  outerBorderColor: '#000000'
2800
3526
  }
2801
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
+ },
2802
3549
  {
2803
3550
  if: { pressed: true },
2804
3551
  tokens: {
@@ -2812,6 +3559,16 @@ const theme = {
2812
3559
  if: { viewport: [ 'xs', 'sm', 'md' ] },
2813
3560
  tokens: { textAlign: 'space-between', width: 288 }
2814
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
+ },
2815
3572
  {
2816
3573
  if: { pressed: true, selected: true },
2817
3574
  tokens: {
@@ -3049,6 +3806,18 @@ const theme = {
3049
3806
  },
3050
3807
  PaginationPageButton: {
3051
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
+ },
3052
3821
  pressed: {
3053
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.',
3054
3823
  type: 'state',
@@ -3061,6 +3830,11 @@ const theme = {
3061
3830
  }
3062
3831
  },
3063
3832
  rules: [
3833
+ {
3834
+ if: { hover: true },
3835
+ tokens: { borderColor: '#000000', textLine: 'none' }
3836
+ },
3837
+ { if: { focus: true }, tokens: { borderColor: '#000000' } },
3064
3838
  {
3065
3839
  if: { selected: true },
3066
3840
  tokens: {
@@ -3069,6 +3843,14 @@ const theme = {
3069
3843
  textLine: 'none'
3070
3844
  }
3071
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
+ },
3072
3854
  {
3073
3855
  if: { pressed: true },
3074
3856
  tokens: {
@@ -3116,6 +3898,18 @@ const theme = {
3116
3898
  type: 'state',
3117
3899
  values: [ 'previous', 'next' ]
3118
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
+ },
3119
3913
  pressed: {
3120
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.',
3121
3915
  type: 'state',
@@ -3145,6 +3939,28 @@ const theme = {
3145
3939
  paddingTop: 8
3146
3940
  }
3147
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
+ },
3148
3964
  {
3149
3965
  if: { pressed: true },
3150
3966
  tokens: { backgroundColor: '#000000', color: '#666666' }
@@ -3188,8 +4004,48 @@ const theme = {
3188
4004
  }
3189
4005
  },
3190
4006
  PreviewCard: {
3191
- appearances: {},
3192
- 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
+ ],
3193
4049
  tokens: {
3194
4050
  backgroundColor: '#ffffff',
3195
4051
  borderColor: '#efefef',
@@ -3494,6 +4350,18 @@ const theme = {
3494
4350
  },
3495
4351
  QuickLinksButton: {
3496
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
+ },
3497
4365
  pressed: {
3498
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.',
3499
4367
  type: 'state',
@@ -3501,6 +4369,7 @@ const theme = {
3501
4369
  }
3502
4370
  },
3503
4371
  rules: [
4372
+ { if: { hover: true }, tokens: { borderWidth: 3 } },
3504
4373
  {
3505
4374
  if: { pressed: true },
3506
4375
  tokens: {
@@ -3508,6 +4377,14 @@ const theme = {
3508
4377
  borderColor: '#666666',
3509
4378
  iconColor: '#666666'
3510
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' }
3511
4388
  }
3512
4389
  ],
3513
4390
  tokens: {
@@ -3564,6 +4441,18 @@ const theme = {
3564
4441
  },
3565
4442
  QuickLinksFeatureItem: {
3566
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
+ },
3567
4456
  pressed: {
3568
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.',
3569
4458
  type: 'state',
@@ -3580,6 +4469,18 @@ const theme = {
3580
4469
  if: { viewport: 'xl' },
3581
4470
  tokens: { contentMaxDimension: 184, imageDimension: 168 }
3582
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
+ },
3583
4484
  {
3584
4485
  if: { pressed: true },
3585
4486
  tokens: {
@@ -3587,6 +4488,14 @@ const theme = {
3587
4488
  outerBorderColor: '#595959',
3588
4489
  textLine: 'underline'
3589
4490
  }
4491
+ },
4492
+ {
4493
+ if: { focus: true, pressed: true },
4494
+ tokens: {
4495
+ color: '#595959',
4496
+ outerBorderColor: '#595959',
4497
+ textLine: 'underline'
4498
+ }
3590
4499
  }
3591
4500
  ],
3592
4501
  tokens: {
@@ -3607,6 +4516,18 @@ const theme = {
3607
4516
  },
3608
4517
  QuickLinksList: {
3609
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
+ },
3610
4531
  pressed: {
3611
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.',
3612
4533
  type: 'state',
@@ -3614,6 +4535,8 @@ const theme = {
3614
4535
  }
3615
4536
  },
3616
4537
  rules: [
4538
+ { if: { hover: true }, tokens: { backgroundColor: '#efefef' } },
4539
+ { if: { focus: true }, tokens: { backgroundColor: '#efefef' } },
3617
4540
  {
3618
4541
  if: { pressed: true },
3619
4542
  tokens: { backgroundColor: '#c9c8c8', itemIconColor: '#000000' }
@@ -3654,6 +4577,18 @@ const theme = {
3654
4577
  values: [ true ]
3655
4578
  },
3656
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
+ },
3657
4592
  inactive: {
3658
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.',
3659
4594
  type: 'state',
@@ -3672,6 +4607,18 @@ const theme = {
3672
4607
  outerBorderWidth: 0
3673
4608
  }
3674
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
+ },
3675
4622
  {
3676
4623
  if: { inactive: true },
3677
4624
  tokens: {
@@ -3737,6 +4684,18 @@ const theme = {
3737
4684
  values: [ true ]
3738
4685
  },
3739
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
+ },
3740
4699
  inactive: {
3741
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.',
3742
4701
  type: 'state',
@@ -3765,6 +4724,17 @@ const theme = {
3765
4724
  paddingTop: 16
3766
4725
  }
3767
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
+ },
3768
4738
  {
3769
4739
  if: { checked: true },
3770
4740
  tokens: {
@@ -3774,6 +4744,19 @@ const theme = {
3774
4744
  radioInputBorderWidth: 2
3775
4745
  }
3776
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
+ },
3777
4760
  {
3778
4761
  description: 'Pressed state matches hover state plus light grey background',
3779
4762
  if: { pressed: true },
@@ -3962,6 +4945,12 @@ const theme = {
3962
4945
  type: 'state',
3963
4946
  values: [ true ]
3964
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
+ },
3965
4954
  inactive: {
3966
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.',
3967
4956
  type: 'state',
@@ -3969,6 +4958,7 @@ const theme = {
3969
4958
  }
3970
4959
  },
3971
4960
  rules: [
4961
+ { if: { hover: true, inactive: null }, tokens: {} },
3972
4962
  {
3973
4963
  if: { focus: true },
3974
4964
  tokens: {
@@ -4013,6 +5003,18 @@ const theme = {
4013
5003
  },
4014
5004
  SearchButton: {
4015
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
+ },
4016
5018
  inactive: {
4017
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.',
4018
5020
  type: 'state',
@@ -4030,6 +5032,23 @@ const theme = {
4030
5032
  if: { priority: 'high' },
4031
5033
  tokens: { backgroundColor: '#000000', iconColor: '#ffffff' }
4032
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
+ },
4033
5052
  {
4034
5053
  if: { pressed: true },
4035
5054
  tokens: {
@@ -4076,6 +5095,12 @@ const theme = {
4076
5095
  type: 'state',
4077
5096
  values: [ true ]
4078
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
+ },
4079
5104
  inactive: {
4080
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.',
4081
5106
  type: 'state',
@@ -4110,6 +5135,14 @@ const theme = {
4110
5135
  validationIconColor: '#c9370b'
4111
5136
  }
4112
5137
  },
5138
+ {
5139
+ if: { hover: true },
5140
+ tokens: {
5141
+ backgroundColor: '#efefef',
5142
+ borderColor: '#000000',
5143
+ outerBorderWidth: null
5144
+ }
5145
+ },
4113
5146
  {
4114
5147
  if: { inactive: true },
4115
5148
  tokens: {
@@ -4162,6 +5195,18 @@ const theme = {
4162
5195
  type: 'state',
4163
5196
  values: [ true, false ]
4164
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
+ },
4165
5210
  type: {
4166
5211
  description: '`parent` being the toggle button for an ItemsGroup, and `child` an element of the ItemGroup',
4167
5212
  type: 'state',
@@ -4197,6 +5242,8 @@ const theme = {
4197
5242
  backgroundColor: 'rgba(0, 0, 0, 0)'
4198
5243
  }
4199
5244
  },
5245
+ { if: { hover: true }, tokens: { backgroundColor: '#efefef' } },
5246
+ { if: { focus: true }, tokens: { backgroundColor: '#efefef' } },
4200
5247
  {
4201
5248
  if: { active: true, type: 'child' },
4202
5249
  tokens: {
@@ -4210,6 +5257,10 @@ const theme = {
4210
5257
  paddingBottom: 13,
4211
5258
  paddingTop: 13
4212
5259
  }
5260
+ },
5261
+ {
5262
+ if: { active: false, hover: true, type: 'child' },
5263
+ tokens: { accentBackgroundColor: 'rgba(0, 0, 0, 0)' }
4213
5264
  }
4214
5265
  ],
4215
5266
  tokens: {
@@ -4280,13 +5331,24 @@ const theme = {
4280
5331
  },
4281
5332
  SkipLink: {
4282
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
+ },
4283
5340
  pressed: {
4284
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.',
4285
5342
  type: 'state',
4286
5343
  values: [ true, false ]
4287
5344
  }
4288
5345
  },
4289
- rules: [],
5346
+ rules: [
5347
+ {
5348
+ if: { focus: true, pressed: true },
5349
+ tokens: { color: '#595959', outlineColor: '#595959' }
5350
+ }
5351
+ ],
4290
5352
  tokens: {
4291
5353
  backgroundColor: '#ffffff',
4292
5354
  borderRadius: 4,
@@ -4314,7 +5376,14 @@ const theme = {
4314
5376
  }
4315
5377
  },
4316
5378
  SplashButton: {
4317
- 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
+ },
4318
5387
  rules: [],
4319
5388
  tokens: {
4320
5389
  buttonContentBackground: null,
@@ -4324,8 +5393,20 @@ const theme = {
4324
5393
  }
4325
5394
  },
4326
5395
  SplashButtonWithDetails: {
4327
- appearances: {},
4328
- 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
+ ],
4329
5410
  tokens: {
4330
5411
  buttonBackground: '#ffffff',
4331
5412
  buttonBorderColor: null,
@@ -4447,6 +5528,18 @@ const theme = {
4447
5528
  },
4448
5529
  StoryCard: {
4449
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
+ },
4450
5543
  pressed: {
4451
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.',
4452
5545
  type: 'state',
@@ -4454,9 +5547,18 @@ const theme = {
4454
5547
  }
4455
5548
  },
4456
5549
  rules: [
5550
+ { if: { hover: true }, tokens: { borderWidth: 2 } },
4457
5551
  {
4458
5552
  if: { pressed: true },
4459
5553
  tokens: { backgroundColor: '#efefef' }
5554
+ },
5555
+ {
5556
+ if: { focus: true },
5557
+ tokens: {
5558
+ outerBorderColor: '#000000',
5559
+ outerBorderGap: 2,
5560
+ outerBorderWidth: 2
5561
+ }
4460
5562
  }
4461
5563
  ],
4462
5564
  tokens: {
@@ -4657,6 +5759,18 @@ const theme = {
4657
5759
  type: 'variant',
4658
5760
  values: [ true ]
4659
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
+ },
4660
5774
  inverse: { type: 'variant', values: [ true ] },
4661
5775
  pressed: {
4662
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.',
@@ -4680,10 +5794,32 @@ const theme = {
4680
5794
  highlightColor: '#000000'
4681
5795
  }
4682
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
+ },
4683
5815
  {
4684
5816
  if: { pressed: true },
4685
5817
  tokens: { backgroundColor: '#c9c8c8', highlightBarBorderWidth: 0 }
4686
5818
  },
5819
+ {
5820
+ if: { focus: true, selected: true },
5821
+ tokens: { backgroundColor: '#ffffff', highlightColor: '#000000' }
5822
+ },
4687
5823
  {
4688
5824
  if: { inverse: true },
4689
5825
  tokens: { backgroundColor: 'transparent', color: '#ffffff' }
@@ -4697,10 +5833,27 @@ const theme = {
4697
5833
  highlightColor: '#c9c8c8'
4698
5834
  }
4699
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
+ },
4700
5849
  {
4701
5850
  if: { inverse: true, pressed: true },
4702
5851
  tokens: { color: '#c9c8c8', highlightBarBorderWidth: 0 }
4703
5852
  },
5853
+ {
5854
+ if: { focus: true, inverse: true, selected: true },
5855
+ tokens: {}
5856
+ },
4704
5857
  { if: { equalWidth: true }, tokens: { maxWidth: null } }
4705
5858
  ],
4706
5859
  tokens: {
@@ -4748,6 +5901,18 @@ const theme = {
4748
5901
  },
4749
5902
  TagsItem: {
4750
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
+ },
4751
5916
  inactive: {
4752
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.',
4753
5918
  type: 'state',
@@ -4778,6 +5943,30 @@ const theme = {
4778
5943
  outerBorderWidth: 0
4779
5944
  }
4780
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
+ },
4781
5970
  {
4782
5971
  if: { selected: true },
4783
5972
  tokens: {
@@ -4792,6 +5981,26 @@ const theme = {
4792
5981
  outerBorderWidth: 0
4793
5982
  }
4794
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
+ },
4795
6004
  {
4796
6005
  if: { inactive: true },
4797
6006
  tokens: {
@@ -4846,6 +6055,23 @@ const theme = {
4846
6055
  type: 'state',
4847
6056
  values: [ true, false ]
4848
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
+ },
4849
6075
  viewport: {
4850
6076
  description: 'The size label for the current screen viewport based on the current screen width',
4851
6077
  type: 'state',
@@ -4864,6 +6090,38 @@ const theme = {
4864
6090
  {
4865
6091
  if: { expanded: true },
4866
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
+ }
4867
6125
  }
4868
6126
  ],
4869
6127
  tokens: {
@@ -4897,6 +6155,12 @@ const theme = {
4897
6155
  expandTitlePaddingLeft: 0,
4898
6156
  expandTitleUnderline: 'none',
4899
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,
4900
6164
  listColor: '#000000',
4901
6165
  listFontName: 'StagSans',
4902
6166
  listFontSize: 14,
@@ -4974,6 +6238,12 @@ const theme = {
4974
6238
  type: 'state',
4975
6239
  values: [ true ]
4976
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
+ },
4977
6247
  inactive: {
4978
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.',
4979
6249
  type: 'state',
@@ -4997,7 +6267,28 @@ const theme = {
4997
6267
  },
4998
6268
  rules: [
4999
6269
  {
5000
- 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' },
5001
6292
  tokens: {
5002
6293
  borderColor: '#1c7b2b',
5003
6294
  icon: PaletteIconCheckCircleFilled,
@@ -5005,7 +6296,7 @@ const theme = {
5005
6296
  }
5006
6297
  },
5007
6298
  {
5008
- if: { validation: 'error' },
6299
+ if: { hover: false, validation: 'error' },
5009
6300
  tokens: {
5010
6301
  borderColor: '#c9370b',
5011
6302
  icon: PaletteIconExclamationOctagon,
@@ -5142,6 +6433,18 @@ const theme = {
5142
6433
  },
5143
6434
  ToggleSwitch: {
5144
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
+ },
5145
6448
  inactive: {
5146
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.',
5147
6450
  type: 'state',
@@ -5159,10 +6462,24 @@ const theme = {
5159
6462
  }
5160
6463
  },
5161
6464
  rules: [
6465
+ {
6466
+ if: { hover: true },
6467
+ tokens: { backgroundColor: '#c9c8c8', switchColor: '#666666' }
6468
+ },
5162
6469
  {
5163
6470
  if: { pressed: true },
5164
6471
  tokens: { backgroundColor: '#c9c8c8', switchColor: '#595959' }
5165
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
+ },
5166
6483
  {
5167
6484
  if: { selected: true },
5168
6485
  tokens: {
@@ -5173,10 +6490,46 @@ const theme = {
5173
6490
  switchColor: '#000000'
5174
6491
  }
5175
6492
  },
6493
+ {
6494
+ if: { hover: true, selected: true },
6495
+ tokens: { backgroundColor: '#efefef', switchColor: '#404040' }
6496
+ },
5176
6497
  {
5177
6498
  if: { pressed: true, selected: true },
5178
6499
  tokens: { backgroundColor: '#c9c8c8', switchColor: '#666666' }
5179
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
+ },
5180
6533
  {
5181
6534
  if: { inactive: true },
5182
6535
  tokens: {
@@ -5299,6 +6652,18 @@ const theme = {
5299
6652
  },
5300
6653
  TooltipButton: {
5301
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
+ },
5302
6667
  inverse: { type: 'variant', values: [ true ] },
5303
6668
  pressed: {
5304
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.',
@@ -5307,10 +6672,30 @@ const theme = {
5307
6672
  }
5308
6673
  },
5309
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
+ },
5310
6683
  {
5311
6684
  if: { inverse: true },
5312
6685
  tokens: { backgroundColor: 'rgba(0, 0, 0, 0)', iconColor: '#ffffff' }
5313
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
+ },
5314
6699
  {
5315
6700
  if: { inverse: true, pressed: true },
5316
6701
  tokens: {
@@ -5667,6 +7052,18 @@ const theme = {
5667
7052
  },
5668
7053
  VideoPickerThumbnail: {
5669
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
+ },
5670
7067
  pressed: {
5671
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.',
5672
7069
  type: 'state',
@@ -5679,6 +7076,18 @@ const theme = {
5679
7076
  }
5680
7077
  },
5681
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
+ },
5682
7091
  {
5683
7092
  if: { pressed: true },
5684
7093
  tokens: {
@@ -5820,6 +7229,6 @@ const theme = {
5820
7229
  tokens: { size: 96 }
5821
7230
  }
5822
7231
  },
5823
- metadata: { name: 'theme-koodo', themeTokensVersion: '2.49.0' }
7232
+ metadata: { name: 'theme-koodo', themeTokensVersion: '2.50.1' }
5824
7233
  }
5825
7234
  export default theme