@tylertech/forge 3.10.5 → 3.12.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 (257) hide show
  1. package/custom-elements.json +594 -226
  2. package/dist/app-bar/forge-app-bar.css +13 -5
  3. package/dist/button/forge-button.css +14 -6
  4. package/dist/checkbox/forge-checkbox.css +23 -17
  5. package/dist/chips/forge-chips.css +12 -4
  6. package/dist/field/forge-field.css +7 -5
  7. package/dist/floating-action-button/forge-floating-action-button.css +12 -6
  8. package/dist/forge.css +6 -1
  9. package/dist/icon-button/forge-icon-button.css +12 -4
  10. package/dist/lib.js +22 -22
  11. package/dist/lib.js.map +4 -4
  12. package/dist/list/forge-list.css +59 -3
  13. package/dist/radio/forge-radio.css +22 -12
  14. package/dist/skip-link/forge-skip-link.css +38 -32
  15. package/dist/state-layer/forge-state-layer.css +2 -0
  16. package/dist/switch/forge-switch.css +9 -5
  17. package/dist/table/forge-table.css +6 -1
  18. package/dist/vscode.html-custom-data.json +104 -79
  19. package/esm/accordion/accordion.d.ts +2 -0
  20. package/esm/accordion/accordion.js +2 -0
  21. package/esm/app-bar/app-bar/app-bar-adapter.js +2 -2
  22. package/esm/app-bar/app-bar/app-bar.d.ts +1 -1
  23. package/esm/app-bar/app-bar/app-bar.js +1 -1
  24. package/esm/app-bar/help-button/app-bar-help-button.d.ts +1 -1
  25. package/esm/app-bar/help-button/app-bar-help-button.js +1 -1
  26. package/esm/app-bar/menu-button/app-bar-menu-button.d.ts +1 -1
  27. package/esm/app-bar/menu-button/app-bar-menu-button.js +1 -1
  28. package/esm/app-bar/notification-button/app-bar-notification-button.d.ts +2 -0
  29. package/esm/app-bar/notification-button/app-bar-notification-button.js +2 -0
  30. package/esm/app-bar/profile-button/app-bar-profile-button-adapter.d.ts +2 -1
  31. package/esm/app-bar/profile-button/app-bar-profile-button-adapter.js +2 -0
  32. package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +2 -0
  33. package/esm/app-bar/profile-button/app-bar-profile-button.js +2 -0
  34. package/esm/app-bar/search/app-bar-search.d.ts +2 -0
  35. package/esm/app-bar/search/app-bar-search.js +2 -0
  36. package/esm/autocomplete/autocomplete-core.js +16 -3
  37. package/esm/autocomplete/autocomplete.d.ts +2 -0
  38. package/esm/autocomplete/autocomplete.js +2 -0
  39. package/esm/avatar/avatar.d.ts +1 -1
  40. package/esm/avatar/avatar.js +1 -1
  41. package/esm/backdrop/backdrop.d.ts +2 -0
  42. package/esm/backdrop/backdrop.js +2 -0
  43. package/esm/badge/badge.d.ts +2 -0
  44. package/esm/badge/badge.js +2 -0
  45. package/esm/banner/banner.d.ts +1 -1
  46. package/esm/banner/banner.js +1 -1
  47. package/esm/button/base/base-button-adapter.js +2 -2
  48. package/esm/button/button.d.ts +1 -6
  49. package/esm/button/button.js +1 -6
  50. package/esm/button-area/button-area-adapter.js +2 -2
  51. package/esm/button-area/button-area.d.ts +1 -4
  52. package/esm/button-area/button-area.js +1 -4
  53. package/esm/button-toggle/button-toggle/button-toggle-adapter.js +2 -2
  54. package/esm/button-toggle/button-toggle/button-toggle.d.ts +2 -0
  55. package/esm/button-toggle/button-toggle/button-toggle.js +2 -0
  56. package/esm/button-toggle/button-toggle-group/button-toggle-group.d.ts +1 -1
  57. package/esm/button-toggle/button-toggle-group/button-toggle-group.js +1 -1
  58. package/esm/calendar/calendar-menu/calendar-menu.js +1 -1
  59. package/esm/calendar/calendar.d.ts +2 -0
  60. package/esm/calendar/calendar.js +3 -1
  61. package/esm/card/card.d.ts +2 -0
  62. package/esm/card/card.js +2 -0
  63. package/esm/chip-field/chip-field.d.ts +2 -0
  64. package/esm/chip-field/chip-field.js +2 -0
  65. package/esm/chips/chip/chip-adapter.d.ts +3 -0
  66. package/esm/chips/chip/chip-adapter.js +14 -4
  67. package/esm/chips/chip/chip-constants.d.ts +2 -0
  68. package/esm/chips/chip/chip-constants.js +2 -1
  69. package/esm/chips/chip/chip-core.d.ts +4 -0
  70. package/esm/chips/chip/chip-core.js +9 -0
  71. package/esm/chips/chip/chip.d.ts +6 -0
  72. package/esm/chips/chip/chip.js +10 -0
  73. package/esm/chips/chip-set/chip-set.d.ts +1 -1
  74. package/esm/chips/chip-set/chip-set.js +1 -1
  75. package/esm/circular-progress/circular-progress.d.ts +1 -2
  76. package/esm/circular-progress/circular-progress.js +1 -2
  77. package/esm/color-picker/color-picker.d.ts +2 -0
  78. package/esm/color-picker/color-picker.js +3 -1
  79. package/esm/core/utils/a11y-utils.js +17 -0
  80. package/esm/core/utils/utils.js +8 -2
  81. package/esm/date-picker/date-picker.d.ts +2 -0
  82. package/esm/date-picker/date-picker.js +2 -0
  83. package/esm/date-range-picker/date-range-picker.d.ts +2 -0
  84. package/esm/date-range-picker/date-range-picker.js +2 -0
  85. package/esm/deprecated/button/deprecated-button.js +3 -3
  86. package/esm/deprecated/icon-button/deprecated-icon-button.js +2 -2
  87. package/esm/dialog/dialog.d.ts +1 -1
  88. package/esm/dialog/dialog.js +1 -1
  89. package/esm/divider/divider.d.ts +1 -1
  90. package/esm/divider/divider.js +1 -1
  91. package/esm/drawer/base/base-drawer-adapter.d.ts +2 -0
  92. package/esm/drawer/base/base-drawer-adapter.js +3 -0
  93. package/esm/drawer/base/base-drawer-core.js +3 -0
  94. package/esm/drawer/drawer/drawer.d.ts +2 -0
  95. package/esm/drawer/drawer/drawer.js +3 -1
  96. package/esm/drawer/mini-drawer/mini-drawer.d.ts +2 -0
  97. package/esm/drawer/mini-drawer/mini-drawer.js +3 -1
  98. package/esm/drawer/modal-drawer/modal-drawer.d.ts +2 -0
  99. package/esm/drawer/modal-drawer/modal-drawer.js +3 -1
  100. package/esm/expansion-panel/expansion-panel.d.ts +1 -1
  101. package/esm/expansion-panel/expansion-panel.js +1 -1
  102. package/esm/field/field-adapter.js +2 -2
  103. package/esm/field/field-core.d.ts +3 -3
  104. package/esm/field/field.d.ts +1 -2
  105. package/esm/field/field.js +1 -2
  106. package/esm/file-picker/file-picker.d.ts +2 -3
  107. package/esm/file-picker/file-picker.js +2 -3
  108. package/esm/floating-action-button/floating-action-button.d.ts +1 -1
  109. package/esm/floating-action-button/floating-action-button.js +1 -1
  110. package/esm/focus-indicator/focus-indicator-constants.d.ts +1 -11
  111. package/esm/focus-indicator/focus-indicator-constants.js +2 -17
  112. package/esm/focus-indicator/focus-indicator.d.ts +53 -26
  113. package/esm/focus-indicator/focus-indicator.js +139 -62
  114. package/esm/focus-indicator/index.d.ts +0 -2
  115. package/esm/focus-indicator/index.js +0 -2
  116. package/esm/icon/icon.d.ts +1 -1
  117. package/esm/icon/icon.js +1 -1
  118. package/esm/icon-button/icon-button.d.ts +2 -0
  119. package/esm/icon-button/icon-button.js +2 -0
  120. package/esm/inline-message/inline-message.d.ts +1 -1
  121. package/esm/inline-message/inline-message.js +1 -1
  122. package/esm/keyboard-shortcut/keyboard-shortcut.d.ts +2 -0
  123. package/esm/keyboard-shortcut/keyboard-shortcut.js +2 -0
  124. package/esm/label/label.d.ts +1 -1
  125. package/esm/label/label.js +1 -1
  126. package/esm/label-value/label-value.d.ts +1 -1
  127. package/esm/label-value/label-value.js +1 -1
  128. package/esm/linear-progress/linear-progress.d.ts +1 -2
  129. package/esm/linear-progress/linear-progress.js +1 -2
  130. package/esm/list/list/list.d.ts +1 -1
  131. package/esm/list/list/list.js +2 -2
  132. package/esm/list/list-item/list-item-constants.js +1 -1
  133. package/esm/list/list-item/list-item-core.d.ts +2 -0
  134. package/esm/list/list-item/list-item-core.js +29 -6
  135. package/esm/list/list-item/list-item.d.ts +1 -0
  136. package/esm/list/list-item/list-item.js +2 -1
  137. package/esm/list-dropdown/list-dropdown-constants.d.ts +11 -1
  138. package/esm/list-dropdown/list-dropdown-constants.js +6 -1
  139. package/esm/list-dropdown/list-dropdown-utils.d.ts +3 -1
  140. package/esm/list-dropdown/list-dropdown-utils.js +69 -21
  141. package/esm/menu/menu-adapter.d.ts +2 -0
  142. package/esm/menu/menu-adapter.js +12 -8
  143. package/esm/menu/menu-constants.d.ts +1 -0
  144. package/esm/menu/menu-constants.js +3 -2
  145. package/esm/menu/menu-core.d.ts +5 -0
  146. package/esm/menu/menu-core.js +41 -2
  147. package/esm/menu/menu.d.ts +17 -0
  148. package/esm/menu/menu.js +15 -1
  149. package/esm/open-icon/open-icon.d.ts +2 -1
  150. package/esm/open-icon/open-icon.js +2 -1
  151. package/esm/overlay/overlay.d.ts +1 -2
  152. package/esm/overlay/overlay.js +1 -2
  153. package/esm/page-state/page-state.d.ts +2 -1
  154. package/esm/page-state/page-state.js +2 -1
  155. package/esm/paginator/paginator-core.d.ts +16 -0
  156. package/esm/paginator/paginator-core.js +29 -9
  157. package/esm/paginator/paginator.d.ts +38 -0
  158. package/esm/paginator/paginator.js +46 -0
  159. package/esm/popover/popover-adapter.js +1 -1
  160. package/esm/popover/popover-constants.d.ts +4 -0
  161. package/esm/popover/popover-constants.js +4 -2
  162. package/esm/popover/popover-core.d.ts +5 -1
  163. package/esm/popover/popover-core.js +13 -0
  164. package/esm/popover/popover.d.ts +6 -2
  165. package/esm/popover/popover.js +10 -2
  166. package/esm/profile-card/profile-card.d.ts +3 -0
  167. package/esm/profile-card/profile-card.js +3 -0
  168. package/esm/radio/radio/radio.d.ts +1 -2
  169. package/esm/radio/radio/radio.js +1 -2
  170. package/esm/scaffold/scaffold.d.ts +1 -1
  171. package/esm/scaffold/scaffold.js +1 -1
  172. package/esm/select/core/base-select-constants.d.ts +4 -0
  173. package/esm/select/core/base-select-core.d.ts +22 -2
  174. package/esm/select/core/base-select-core.js +217 -40
  175. package/esm/select/option/option.d.ts +2 -0
  176. package/esm/select/option/option.js +2 -0
  177. package/esm/select/option-group/option-group.d.ts +2 -0
  178. package/esm/select/option-group/option-group.js +2 -0
  179. package/esm/select/select/select-constants.d.ts +5 -0
  180. package/esm/select/select/select-constants.js +5 -2
  181. package/esm/select/select/select.d.ts +14 -2
  182. package/esm/select/select/select.js +23 -2
  183. package/esm/select/select-dropdown/select-dropdown.d.ts +2 -0
  184. package/esm/select/select-dropdown/select-dropdown.js +2 -0
  185. package/esm/skeleton/skeleton.d.ts +1 -1
  186. package/esm/skeleton/skeleton.js +1 -1
  187. package/esm/skip-link/skip-link.d.ts +1 -1
  188. package/esm/skip-link/skip-link.js +1 -1
  189. package/esm/slider/slider.d.ts +1 -1
  190. package/esm/slider/slider.js +1 -1
  191. package/esm/split-button/split-button.d.ts +1 -1
  192. package/esm/split-button/split-button.js +2 -2
  193. package/esm/split-view/split-view/split-view.d.ts +2 -0
  194. package/esm/split-view/split-view/split-view.js +2 -0
  195. package/esm/split-view/split-view-panel/split-view-panel.d.ts +2 -0
  196. package/esm/split-view/split-view-panel/split-view-panel.js +3 -1
  197. package/esm/stack/stack.d.ts +1 -8
  198. package/esm/stack/stack.js +1 -8
  199. package/esm/state-layer/state-layer.d.ts +1 -1
  200. package/esm/state-layer/state-layer.js +2 -2
  201. package/esm/stepper/step/step.d.ts +2 -0
  202. package/esm/stepper/step/step.js +3 -1
  203. package/esm/stepper/stepper/stepper.d.ts +2 -0
  204. package/esm/stepper/stepper/stepper.js +2 -0
  205. package/esm/table/table-adapter.d.ts +4 -4
  206. package/esm/table/table-adapter.js +4 -4
  207. package/esm/table/table-core.js +2 -2
  208. package/esm/table/table-utils.d.ts +2 -2
  209. package/esm/table/table-utils.js +25 -18
  210. package/esm/table/table.d.ts +3 -1
  211. package/esm/table/table.js +4 -1
  212. package/esm/tabs/tab/tab-adapter.js +2 -2
  213. package/esm/tabs/tab/tab.d.ts +2 -0
  214. package/esm/tabs/tab/tab.js +2 -0
  215. package/esm/tabs/tab-bar/tab-bar.d.ts +1 -1
  216. package/esm/tabs/tab-bar/tab-bar.js +1 -1
  217. package/esm/text-field/text-field-adapter.d.ts +6 -4
  218. package/esm/text-field/text-field-adapter.js +11 -4
  219. package/esm/text-field/text-field-core.d.ts +4 -0
  220. package/esm/text-field/text-field-core.js +13 -2
  221. package/esm/text-field/text-field.d.ts +1 -1
  222. package/esm/text-field/text-field.js +1 -1
  223. package/esm/time-picker/time-picker-adapter.js +1 -0
  224. package/esm/time-picker/time-picker-core.js +3 -3
  225. package/esm/time-picker/time-picker.d.ts +2 -0
  226. package/esm/time-picker/time-picker.js +2 -0
  227. package/esm/toast/toast-adapter.d.ts +20 -0
  228. package/esm/toast/toast-adapter.js +30 -0
  229. package/esm/toast/toast-core.d.ts +17 -0
  230. package/esm/toast/toast-core.js +66 -0
  231. package/esm/toast/toast.d.ts +9 -2
  232. package/esm/toast/toast.js +10 -1
  233. package/esm/toolbar/toolbar.d.ts +1 -3
  234. package/esm/toolbar/toolbar.js +1 -3
  235. package/esm/tooltip/tooltip-adapter.d.ts +6 -0
  236. package/esm/tooltip/tooltip-adapter.js +9 -0
  237. package/esm/tooltip/tooltip-constants.d.ts +1 -0
  238. package/esm/tooltip/tooltip-constants.js +2 -1
  239. package/esm/tooltip/tooltip-core.d.ts +20 -0
  240. package/esm/tooltip/tooltip-core.js +96 -2
  241. package/esm/tooltip/tooltip.d.ts +1 -1
  242. package/esm/tooltip/tooltip.js +2 -2
  243. package/esm/view-switcher/view/view.d.ts +2 -0
  244. package/esm/view-switcher/view/view.js +2 -0
  245. package/esm/view-switcher/view-switcher.d.ts +2 -0
  246. package/esm/view-switcher/view-switcher.js +2 -0
  247. package/package.json +4 -4
  248. package/sass/focus-indicator/focus-indicator.scss +1 -1
  249. package/sass/icon-button/forge-icon-button.scss +3 -3
  250. package/sass/list/forge-list.scss +6 -6
  251. package/sass/state-layer/_core.scss +2 -0
  252. package/sass/table/_core.scss +13 -1
  253. package/sass/tooltip/_core.scss +0 -2
  254. package/esm/focus-indicator/focus-indicator-adapter.d.ts +0 -29
  255. package/esm/focus-indicator/focus-indicator-adapter.js +0 -37
  256. package/esm/focus-indicator/focus-indicator-core.d.ts +0 -48
  257. package/esm/focus-indicator/focus-indicator-core.js +0 -129
@@ -190,6 +190,8 @@
190
190
  .forge-list-item label::before {
191
191
  opacity: 0;
192
192
  position: absolute;
193
+ backface-visibility: hidden;
194
+ transform: translateZ(0);
193
195
  background-color: var(--_state-layer-hover-color);
194
196
  inset: 0;
195
197
  transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;
@@ -243,8 +245,6 @@
243
245
  .forge-list-item--interactive:not(.forge-list-item--disabled),
244
246
  :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) .forge-list-item--interactive {
245
247
  cursor: pointer;
246
- outline: none;
247
- --forge-focus-indicator-shape: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));
248
248
  }
249
249
  @keyframes forge-focus-indicator-outward-grow {
250
250
  from {
@@ -276,6 +276,33 @@
276
276
  a,
277
277
  label,
278
278
  .forge-list-item--interactive:not(.forge-list-item--disabled),
279
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) a,
280
+ .forge-list-item:has(button:not(:disabled),
281
+ a,
282
+ label,
283
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
284
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) button,
285
+ .forge-list-item:has(button:not(:disabled),
286
+ a,
287
+ label,
288
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
289
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) label,
290
+ .forge-list-item:has(button:not(:disabled),
291
+ a,
292
+ label,
293
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
294
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled]),
295
+ .forge-list-item:has(button:not(:disabled),
296
+ a,
297
+ label,
298
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
299
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) .forge-list-item--interactive {
300
+ outline: none;
301
+ }
302
+ .forge-list-item:has(button:not(:disabled),
303
+ a,
304
+ label,
305
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
279
306
  :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) a:focus-visible::after,
280
307
  .forge-list-item:has(button:not(:disabled),
281
308
  a,
@@ -358,6 +385,33 @@
358
385
  content: "";
359
386
  display: block;
360
387
  }
388
+ .forge-list-item:has(button:not(:disabled),
389
+ a,
390
+ label,
391
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
392
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) a,
393
+ .forge-list-item:has(button:not(:disabled),
394
+ a,
395
+ label,
396
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
397
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) button,
398
+ .forge-list-item:has(button:not(:disabled),
399
+ a,
400
+ label,
401
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
402
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) label,
403
+ .forge-list-item:has(button:not(:disabled),
404
+ a,
405
+ label,
406
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
407
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled]),
408
+ .forge-list-item:has(button:not(:disabled),
409
+ a,
410
+ label,
411
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
412
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])) .forge-list-item--interactive {
413
+ --forge-focus-indicator-shape: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));
414
+ }
361
415
  .forge-list-item__text {
362
416
  -moz-osx-font-smoothing: grayscale;
363
417
  -webkit-font-smoothing: antialiased;
@@ -434,7 +488,6 @@
434
488
  @layer selected {
435
489
  .forge-list-item--selected {
436
490
  color: var(--_list-item-selected-color);
437
- --forge-state-layer-color: var(--_list-item-selected-color);
438
491
  }
439
492
  .forge-list-item--selected::before {
440
493
  content: "";
@@ -445,6 +498,9 @@
445
498
  background-color: var(--_list-item-selected-background);
446
499
  pointer-events: none;
447
500
  }
501
+ .forge-list-item--selected {
502
+ --forge-state-layer-color: var(--_list-item-selected-color);
503
+ }
448
504
  .forge-list-item--selected .forge-list-item__start {
449
505
  color: var(--_list-item-start-selected-color);
450
506
  }
@@ -40,15 +40,6 @@
40
40
 
41
41
  .forge-radio {
42
42
  outline: none;
43
- --forge-focus-indicator-color: var(--_radio-primary-color);
44
- --forge-focus-indicator-outward-offset: 0px;
45
- --forge-focus-indicator-shape: var(--_radio-state-layer-shape);
46
- display: inline flex;
47
- position: relative;
48
- align-items: center;
49
- justify-content: center;
50
- inline-size: var(--_radio-state-layer-width);
51
- block-size: var(--_radio-state-layer-height);
52
43
  }
53
44
  .forge-radio:has(input[type=radio]:focus-visible)::after {
54
45
  --_focus-indicator-display: var(--forge-focus-indicator-display, flex);
@@ -88,6 +79,17 @@
88
79
  content: "";
89
80
  display: block;
90
81
  }
82
+ .forge-radio {
83
+ --forge-focus-indicator-color: var(--_radio-primary-color);
84
+ --forge-focus-indicator-outward-offset: 0px;
85
+ --forge-focus-indicator-shape: var(--_radio-state-layer-shape);
86
+ display: inline flex;
87
+ position: relative;
88
+ align-items: center;
89
+ justify-content: center;
90
+ inline-size: var(--_radio-state-layer-width);
91
+ block-size: var(--_radio-state-layer-height);
92
+ }
91
93
  .forge-radio input[type=radio] {
92
94
  position: absolute;
93
95
  appearance: none;
@@ -113,11 +115,12 @@
113
115
  --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);
114
116
  --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);
115
117
  --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);
116
- border-radius: var(--_radio-state-layer-shape) !important;
117
118
  }
118
119
  .forge-radio input[type=radio]:not(:disabled) {
119
120
  opacity: 0;
120
121
  position: absolute;
122
+ backface-visibility: hidden;
123
+ transform: translateZ(0);
121
124
  background-color: var(--_state-layer-hover-color);
122
125
  inset: 0;
123
126
  transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;
@@ -134,6 +137,9 @@
134
137
  transition-duration: var(--_state-layer-pressed-duration);
135
138
  --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);
136
139
  }
140
+ .forge-radio input[type=radio]:not(:disabled) {
141
+ border-radius: var(--_radio-state-layer-shape) !important;
142
+ }
137
143
  .forge-radio::before {
138
144
  position: relative;
139
145
  align-items: center;
@@ -159,7 +165,6 @@
159
165
  inline-size: var(--_radio-width);
160
166
  block-size: var(--_radio-height);
161
167
  background: var(--_radio-background);
162
- content: "";
163
168
  }
164
169
  .forge-radio::before::after {
165
170
  content: "";
@@ -179,14 +184,19 @@
179
184
  scale: 0.5;
180
185
  opacity: 0;
181
186
  }
187
+ .forge-radio::before {
188
+ content: "";
189
+ }
182
190
  .forge-radio:has(input[type=radio]:checked)::before {
183
191
  border-color: var(--_radio-checked-border-color);
184
- background: radial-gradient(circle, var(--_radio-mark-color) 0%, var(--_radio-mark-color) calc(calc(var(--_radio-mark-size) / 1.4) - 0.2px), transparent calc(calc(var(--_radio-mark-size) / 1.4) + 0.2px), transparent 100%);
185
192
  }
186
193
  .forge-radio:has(input[type=radio]:checked)::before::after {
187
194
  scale: 1;
188
195
  opacity: 1;
189
196
  }
197
+ .forge-radio:has(input[type=radio]:checked)::before {
198
+ background: radial-gradient(circle, var(--_radio-mark-color) 0%, var(--_radio-mark-color) calc(calc(var(--_radio-mark-size) / 1.4) - 0.2px), transparent calc(calc(var(--_radio-mark-size) / 1.4) + 0.2px), transparent 100%);
199
+ }
190
200
  .forge-radio:has(input[type=radio]:disabled) {
191
201
  opacity: var(--_radio-disabled-opacity);
192
202
  }
@@ -28,42 +28,12 @@ a.forge-skip-link {
28
28
  --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);
29
29
  --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);
30
30
  --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);
31
- outline: none;
32
- --forge-focus-indicator-color: var(--_skip-link-background);
33
- transition-property: opacity, transform;
34
- transition-duration: var(--_skip-link-transition-duration);
35
- transition-timing-function: var(--_skip-link-transition-timing-function);
36
- display: block;
37
- position: fixed;
38
- inset: var(--_skip-link-inset);
39
- z-index: var(--_skip-link-z-index);
40
- block-size: fit-content;
41
- inline-size: fit-content;
42
- opacity: 0;
43
- transform: translateY(-100%);
44
- -moz-osx-font-smoothing: grayscale;
45
- -webkit-font-smoothing: antialiased;
46
- font-family: var(--forge-typography-body2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));
47
- font-size: var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1)));
48
- font-weight: var(--forge-typography-body2-font-weight, 400);
49
- line-height: var(--forge-typography-body2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.375)));
50
- letter-spacing: var(--forge-typography-body2-letter-spacing, 0.015625em);
51
- text-transform: var(--forge-typography-body2-text-transform, inherit);
52
- text-decoration: var(--forge-typography-body2-text-decoration, inherit);
53
- display: block;
54
- outline: none;
55
- box-shadow: var(--_skip-link-elevation);
56
- border-radius: var(--_skip-link-shape);
57
- background: var(--_skip-link-background);
58
- padding-block: var(--_skip-link-padding-block);
59
- padding-inline: var(--_skip-link-padding-inline);
60
- cursor: pointer;
61
- color: var(--_skip-link-color);
62
- text-decoration: underline;
63
31
  }
64
32
  a.forge-skip-link::before {
65
33
  opacity: 0;
66
34
  position: absolute;
35
+ backface-visibility: hidden;
36
+ transform: translateZ(0);
67
37
  background-color: var(--_state-layer-hover-color);
68
38
  inset: 0;
69
39
  transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;
@@ -81,6 +51,9 @@ a.forge-skip-link:active::before {
81
51
  transition-duration: var(--_state-layer-pressed-duration);
82
52
  --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);
83
53
  }
54
+ a.forge-skip-link {
55
+ outline: none;
56
+ }
84
57
  a.forge-skip-link:focus-visible::after {
85
58
  --_focus-indicator-display: var(--forge-focus-indicator-display, flex);
86
59
  --_focus-indicator-width: var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));
@@ -119,6 +92,39 @@ a.forge-skip-link:focus-visible::after {
119
92
  content: "";
120
93
  display: block;
121
94
  }
95
+ a.forge-skip-link {
96
+ --forge-focus-indicator-color: var(--_skip-link-background);
97
+ transition-property: opacity, transform;
98
+ transition-duration: var(--_skip-link-transition-duration);
99
+ transition-timing-function: var(--_skip-link-transition-timing-function);
100
+ display: block;
101
+ position: fixed;
102
+ inset: var(--_skip-link-inset);
103
+ z-index: var(--_skip-link-z-index);
104
+ block-size: fit-content;
105
+ inline-size: fit-content;
106
+ opacity: 0;
107
+ transform: translateY(-100%);
108
+ -moz-osx-font-smoothing: grayscale;
109
+ -webkit-font-smoothing: antialiased;
110
+ font-family: var(--forge-typography-body2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));
111
+ font-size: var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1)));
112
+ font-weight: var(--forge-typography-body2-font-weight, 400);
113
+ line-height: var(--forge-typography-body2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.375)));
114
+ letter-spacing: var(--forge-typography-body2-letter-spacing, 0.015625em);
115
+ text-transform: var(--forge-typography-body2-text-transform, inherit);
116
+ text-decoration: var(--forge-typography-body2-text-decoration, inherit);
117
+ display: block;
118
+ outline: none;
119
+ box-shadow: var(--_skip-link-elevation);
120
+ border-radius: var(--_skip-link-shape);
121
+ background: var(--_skip-link-background);
122
+ padding-block: var(--_skip-link-padding-block);
123
+ padding-inline: var(--_skip-link-padding-inline);
124
+ cursor: pointer;
125
+ color: var(--_skip-link-color);
126
+ text-decoration: underline;
127
+ }
122
128
  a.forge-skip-link:where(:focus-within, .forge-skip-link--persistent) {
123
129
  transition-property: opacity, transform;
124
130
  transition-duration: var(--_skip-link-transition-duration);
@@ -17,6 +17,8 @@
17
17
  .forge-state-layer::before {
18
18
  opacity: 0;
19
19
  position: absolute;
20
+ backface-visibility: hidden;
21
+ transform: translateZ(0);
20
22
  background-color: var(--_state-layer-hover-color);
21
23
  inset: 0;
22
24
  transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;
@@ -81,11 +81,6 @@
81
81
  block-size: max(var(--_switch-handle-height), var(--_switch-track-height), var(--_switch-current-state-layer-height));
82
82
  cursor: pointer;
83
83
  outline: none;
84
- --forge-focus-indicator-shape: var(--_switch-track-shape);
85
- --forge-focus-indicator-outward-offset: 0px;
86
- --_switch-current-state-layer-width: var(--_switch-state-layer-width);
87
- --_switch-current-state-layer-height: var(--_switch-state-layer-height);
88
- display: inline flex;
89
84
  }
90
85
  .forge-switch:has(input[type=checkbox][switch]:focus-visible)::after {
91
86
  --_focus-indicator-display: var(--forge-focus-indicator-display, flex);
@@ -125,6 +120,13 @@
125
120
  content: "";
126
121
  display: block;
127
122
  }
123
+ .forge-switch {
124
+ --forge-focus-indicator-shape: var(--_switch-track-shape);
125
+ --forge-focus-indicator-outward-offset: 0px;
126
+ --_switch-current-state-layer-width: var(--_switch-state-layer-width);
127
+ --_switch-current-state-layer-height: var(--_switch-state-layer-height);
128
+ display: inline flex;
129
+ }
128
130
  .forge-switch input[type=checkbox][switch] {
129
131
  display: block;
130
132
  position: absolute;
@@ -244,6 +246,8 @@
244
246
  .forge-switch:has(input[type=checkbox][switch]:not(:disabled)) .forge-switch__thumb::after {
245
247
  opacity: 0;
246
248
  position: absolute;
249
+ backface-visibility: hidden;
250
+ transform: translateZ(0);
247
251
  background-color: var(--_state-layer-hover-color);
248
252
  inset: 0;
249
253
  transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;
@@ -111,7 +111,12 @@ forge-table {
111
111
  font: inherit;
112
112
  color: inherit;
113
113
  width: 100%;
114
- outline-offset: var(--forge-spacing-xxsmall, 4px);
114
+ outline: none;
115
+ position: relative;
116
+ }
117
+ .forge-table-head__cell--sortable button forge-focus-indicator {
118
+ border-radius: 4px;
119
+ --forge-focus-indicator-offset-inline: -4px;
115
120
  }
116
121
  .forge-table-head__cell--sortable.forge-table-head__cell--sorted-ascending .forge-table-head__cell-sort-icon {
117
122
  transform: rotate(180deg);