openproject-primer_view_components 0.13.0 → 0.13.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.
@@ -101,6 +101,8 @@ let ActionBarElement = class ActionBarElement extends HTMLElement {
101
101
  };
102
102
  _ActionBarElement_initialBarWidth = new WeakMap(), _ActionBarElement_previousBarWidth = new WeakMap(), _ActionBarElement_focusZoneAbortController = new WeakMap(), _ActionBarElement_instances = new WeakSet(), _ActionBarElement_isVisible = function _ActionBarElement_isVisible(element) {
103
103
  // Safari doesn't support `checkVisibility` yet.
104
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
105
+ // @ts-ignore
104
106
  if (typeof element.checkVisibility === 'function')
105
107
  return element.checkVisibility();
106
108
  return Boolean(element.offsetParent || element.offsetWidth || element.offsetHeight);
@@ -93,6 +93,8 @@ class ActionBarElement extends HTMLElement {
93
93
 
94
94
  #isVisible(element: HTMLElement): boolean {
95
95
  // Safari doesn't support `checkVisibility` yet.
96
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
97
+ // @ts-ignore
96
98
  if (typeof element.checkVisibility === 'function') return element.checkVisibility()
97
99
 
98
100
  return Boolean(element.offsetParent || element.offsetWidth || element.offsetHeight)
@@ -15,7 +15,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
15
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
16
16
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
17
17
  };
18
- var _ActionMenuElement_instances, _ActionMenuElement_abortController, _ActionMenuElement_originalLabel, _ActionMenuElement_inputName, _ActionMenuElement_invokerBeingClicked, _ActionMenuElement_softDisableItems, _ActionMenuElement_potentiallyDisallowActivation, _ActionMenuElement_isKeyboardActivation, _ActionMenuElement_isMouseActivation, _ActionMenuElement_isActivation, _ActionMenuElement_handleInvokerActivated, _ActionMenuElement_handleDialogItemActivated, _ActionMenuElement_handleItemActivated, _ActionMenuElement_activateItem, _ActionMenuElement_handleIncludeFragmentReplaced, _ActionMenuElement_handleFocusOut, _ActionMenuElement_show, _ActionMenuElement_hide, _ActionMenuElement_isOpen, _ActionMenuElement_setDynamicLabel, _ActionMenuElement_updateInput, _ActionMenuElement_firstItem_get, _ActionMenuElement_items_get;
18
+ var _ActionMenuElement_instances, _ActionMenuElement_abortController, _ActionMenuElement_originalLabel, _ActionMenuElement_inputName, _ActionMenuElement_invokerBeingClicked, _ActionMenuElement_softDisableItems, _ActionMenuElement_potentiallyDisallowActivation, _ActionMenuElement_isKeyboardActivation, _ActionMenuElement_isKeyboardActivationViaEnter, _ActionMenuElement_isKeyboardActivationViaSpace, _ActionMenuElement_isMouseActivation, _ActionMenuElement_isActivation, _ActionMenuElement_handleInvokerActivated, _ActionMenuElement_handleDialogItemActivated, _ActionMenuElement_handleItemActivated, _ActionMenuElement_activateItem, _ActionMenuElement_handleIncludeFragmentReplaced, _ActionMenuElement_handleFocusOut, _ActionMenuElement_show, _ActionMenuElement_hide, _ActionMenuElement_isOpen, _ActionMenuElement_setDynamicLabel, _ActionMenuElement_updateInput, _ActionMenuElement_firstItem_get, _ActionMenuElement_items_get;
19
19
  import { controller, target } from '@github/catalyst';
20
20
  import '@oddbird/popover-polyfill';
21
21
  const validSelectors = ['[role="menuitem"]', '[role="menuitemcheckbox"]', '[role="menuitemradio"]'];
@@ -109,7 +109,7 @@ let ActionMenuElement = class ActionMenuElement extends HTMLElement {
109
109
  __classPrivateFieldGet(this, _ActionMenuElement_abortController, "f").abort();
110
110
  }
111
111
  handleEvent(event) {
112
- var _a;
112
+ var _a, _b;
113
113
  const targetIsInvoker = (_a = this.invokerElement) === null || _a === void 0 ? void 0 : _a.contains(event.target);
114
114
  const eventIsActivation = __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isActivation).call(this, event);
115
115
  if (targetIsInvoker && event.type === 'mousedown') {
@@ -151,6 +151,14 @@ let ActionMenuElement = class ActionMenuElement extends HTMLElement {
151
151
  }
152
152
  __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_activateItem).call(this, event, item);
153
153
  __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_handleItemActivated).call(this, event, item);
154
+ // Pressing the space key on a button will cause the page to scroll unless preventDefault()
155
+ // is called. Unfortunately, calling preventDefault() will also skip form submission. The
156
+ // code below therefore only calls preventDefault() if the button submits a form and the
157
+ // button is being activated by the space key.
158
+ if (item.getAttribute('type') === 'submit' && __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaSpace).call(this, event)) {
159
+ event.preventDefault();
160
+ (_b = item.closest('form')) === null || _b === void 0 ? void 0 : _b.submit();
161
+ }
154
162
  return;
155
163
  }
156
164
  if (event.type === 'include-fragment-replaced') {
@@ -176,10 +184,17 @@ _ActionMenuElement_abortController = new WeakMap(), _ActionMenuElement_originalL
176
184
  event.stopImmediatePropagation();
177
185
  }
178
186
  }, _ActionMenuElement_isKeyboardActivation = function _ActionMenuElement_isKeyboardActivation(event) {
187
+ return __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaEnter).call(this, event) || __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaSpace).call(this, event);
188
+ }, _ActionMenuElement_isKeyboardActivationViaEnter = function _ActionMenuElement_isKeyboardActivationViaEnter(event) {
189
+ return (event instanceof KeyboardEvent &&
190
+ event.type === 'keydown' &&
191
+ !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
192
+ event.key === 'Enter');
193
+ }, _ActionMenuElement_isKeyboardActivationViaSpace = function _ActionMenuElement_isKeyboardActivationViaSpace(event) {
179
194
  return (event instanceof KeyboardEvent &&
180
195
  event.type === 'keydown' &&
181
196
  !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
182
- (event.key === 'Enter' || event.key === ' '));
197
+ event.key === ' ');
183
198
  }, _ActionMenuElement_isMouseActivation = function _ActionMenuElement_isMouseActivation(event) {
184
199
  return event instanceof MouseEvent && event.type === 'click';
185
200
  }, _ActionMenuElement_isActivation = function _ActionMenuElement_isActivation(event) {
@@ -134,11 +134,24 @@ export class ActionMenuElement extends HTMLElement {
134
134
  }
135
135
 
136
136
  #isKeyboardActivation(event: Event): boolean {
137
+ return this.#isKeyboardActivationViaEnter(event) || this.#isKeyboardActivationViaSpace(event)
138
+ }
139
+
140
+ #isKeyboardActivationViaEnter(event: Event): boolean {
141
+ return (
142
+ event instanceof KeyboardEvent &&
143
+ event.type === 'keydown' &&
144
+ !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
145
+ event.key === 'Enter'
146
+ )
147
+ }
148
+
149
+ #isKeyboardActivationViaSpace(event: Event): boolean {
137
150
  return (
138
151
  event instanceof KeyboardEvent &&
139
152
  event.type === 'keydown' &&
140
153
  !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
141
- (event.key === 'Enter' || event.key === ' ')
154
+ event.key === ' '
142
155
  )
143
156
  }
144
157
 
@@ -202,6 +215,16 @@ export class ActionMenuElement extends HTMLElement {
202
215
 
203
216
  this.#activateItem(event, item)
204
217
  this.#handleItemActivated(event, item)
218
+
219
+ // Pressing the space key on a button will cause the page to scroll unless preventDefault()
220
+ // is called. Unfortunately, calling preventDefault() will also skip form submission. The
221
+ // code below therefore only calls preventDefault() if the button submits a form and the
222
+ // button is being activated by the space key.
223
+ if (item.getAttribute('type') === 'submit' && this.#isKeyboardActivationViaSpace(event)) {
224
+ event.preventDefault()
225
+ item.closest('form')?.submit()
226
+ }
227
+
205
228
  return
206
229
  }
207
230
 
@@ -32,8 +32,9 @@ const isPopoverOpen = (() => {
32
32
  }
33
33
  return (el) => (selector ? el.matches(selector) : setSelector(el));
34
34
  })();
35
+ const TOOLTIP_ARROW_EDGE_OFFSET = 6;
35
36
  const TOOLTIP_SR_ONLY_CLASS = 'sr-only';
36
- const TOOLTIP_OFFSET = 4;
37
+ const TOOLTIP_OFFSET = 10;
37
38
  const DIRECTION_CLASSES = [
38
39
  'tooltip-n',
39
40
  'tooltip-s',
@@ -106,15 +107,33 @@ class ToolTipElement extends HTMLElement {
106
107
  text-wrap: balance;
107
108
  }
108
109
 
110
+ :host:before{
111
+ position: absolute;
112
+ z-index: 1000001;
113
+ color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
114
+ content: "";
115
+ border: 6px solid transparent;
116
+ opacity: 0;
117
+ }
118
+
109
119
  @keyframes tooltip-appear {
110
120
  from {
111
121
  opacity: 0;
112
122
  }
113
123
  to {
114
- opacity: 1
124
+ opacity: 1;
115
125
  }
116
126
  }
117
127
 
128
+ :host:after{
129
+ position: absolute;
130
+ display: block;
131
+ right: 0;
132
+ left: 0;
133
+ height: 12px;
134
+ content: "";
135
+ }
136
+
118
137
  :host(:popover-open),
119
138
  :host(:popover-open):before {
120
139
  animation-name: tooltip-appear;
@@ -123,11 +142,65 @@ class ToolTipElement extends HTMLElement {
123
142
  animation-timing-function: ease-in;
124
143
  }
125
144
 
126
- :host(.\\:popover-open) {
145
+ :host(.\\:popover-open),
146
+ :host(.\\:popover-open):before {
127
147
  animation-name: tooltip-appear;
128
148
  animation-duration: .1s;
129
149
  animation-fill-mode: forwards;
130
150
  animation-timing-function: ease-in;
151
+ animation-delay: .4s;
152
+ }
153
+
154
+ :host(.tooltip-s):before,
155
+ :host(.tooltip-n):before {
156
+ right: 50%;
157
+ margin-right: -${TOOLTIP_ARROW_EDGE_OFFSET}px;
158
+ }
159
+ :host(.tooltip-s):before,
160
+ :host(.tooltip-se):before,
161
+ :host(.tooltip-sw):before {
162
+ bottom: 100%;
163
+ border-bottom-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
164
+ }
165
+ :host(.tooltip-s):after,
166
+ :host(.tooltip-se):after,
167
+ :host(.tooltip-sw):after {
168
+ bottom: 100%
169
+ }
170
+ :host(.tooltip-n):before,
171
+ :host(.tooltip-ne):before,
172
+ :host(.tooltip-nw):before {
173
+ top: 100%;
174
+ border-top-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
175
+ }
176
+ :host(.tooltip-n):after,
177
+ :host(.tooltip-ne):after,
178
+ :host(.tooltip-nw):after {
179
+ top: 100%;
180
+ }
181
+ :host(.tooltip-se):before,
182
+ :host(.tooltip-ne):before {
183
+ left: 0;
184
+ margin-left: ${TOOLTIP_ARROW_EDGE_OFFSET}px;
185
+ }
186
+ :host(.tooltip-sw):before,
187
+ :host(.tooltip-nw):before {
188
+ right: 0;
189
+ margin-right: ${TOOLTIP_ARROW_EDGE_OFFSET}px;
190
+ }
191
+ :host(.tooltip-w):before {
192
+ top: 50%;
193
+ bottom: 50%;
194
+ left: 100%;
195
+ margin-top: -6px;
196
+ border-left-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
197
+ }
198
+ :host(.tooltip-e):before {
199
+ top: 50%;
200
+ right: 100%;
201
+ bottom: 50%;
202
+ margin-top: -6px;
203
+ border-right-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
131
204
  }
132
205
  `;
133
206
  }
@@ -21,8 +21,9 @@ const isPopoverOpen = (() => {
21
21
  return (el: Element) => (selector ? el.matches(selector) : setSelector(el))
22
22
  })()
23
23
 
24
+ const TOOLTIP_ARROW_EDGE_OFFSET = 6
24
25
  const TOOLTIP_SR_ONLY_CLASS = 'sr-only'
25
- const TOOLTIP_OFFSET = 4
26
+ const TOOLTIP_OFFSET = 10
26
27
 
27
28
  type Direction = 'n' | 's' | 'e' | 'w' | 'ne' | 'se' | 'nw' | 'sw'
28
29
 
@@ -91,15 +92,33 @@ class ToolTipElement extends HTMLElement {
91
92
  text-wrap: balance;
92
93
  }
93
94
 
95
+ :host:before{
96
+ position: absolute;
97
+ z-index: 1000001;
98
+ color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
99
+ content: "";
100
+ border: 6px solid transparent;
101
+ opacity: 0;
102
+ }
103
+
94
104
  @keyframes tooltip-appear {
95
105
  from {
96
106
  opacity: 0;
97
107
  }
98
108
  to {
99
- opacity: 1
109
+ opacity: 1;
100
110
  }
101
111
  }
102
112
 
113
+ :host:after{
114
+ position: absolute;
115
+ display: block;
116
+ right: 0;
117
+ left: 0;
118
+ height: 12px;
119
+ content: "";
120
+ }
121
+
103
122
  :host(:popover-open),
104
123
  :host(:popover-open):before {
105
124
  animation-name: tooltip-appear;
@@ -108,11 +127,65 @@ class ToolTipElement extends HTMLElement {
108
127
  animation-timing-function: ease-in;
109
128
  }
110
129
 
111
- :host(.\\:popover-open) {
130
+ :host(.\\:popover-open),
131
+ :host(.\\:popover-open):before {
112
132
  animation-name: tooltip-appear;
113
133
  animation-duration: .1s;
114
134
  animation-fill-mode: forwards;
115
135
  animation-timing-function: ease-in;
136
+ animation-delay: .4s;
137
+ }
138
+
139
+ :host(.tooltip-s):before,
140
+ :host(.tooltip-n):before {
141
+ right: 50%;
142
+ margin-right: -${TOOLTIP_ARROW_EDGE_OFFSET}px;
143
+ }
144
+ :host(.tooltip-s):before,
145
+ :host(.tooltip-se):before,
146
+ :host(.tooltip-sw):before {
147
+ bottom: 100%;
148
+ border-bottom-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
149
+ }
150
+ :host(.tooltip-s):after,
151
+ :host(.tooltip-se):after,
152
+ :host(.tooltip-sw):after {
153
+ bottom: 100%
154
+ }
155
+ :host(.tooltip-n):before,
156
+ :host(.tooltip-ne):before,
157
+ :host(.tooltip-nw):before {
158
+ top: 100%;
159
+ border-top-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
160
+ }
161
+ :host(.tooltip-n):after,
162
+ :host(.tooltip-ne):after,
163
+ :host(.tooltip-nw):after {
164
+ top: 100%;
165
+ }
166
+ :host(.tooltip-se):before,
167
+ :host(.tooltip-ne):before {
168
+ left: 0;
169
+ margin-left: ${TOOLTIP_ARROW_EDGE_OFFSET}px;
170
+ }
171
+ :host(.tooltip-sw):before,
172
+ :host(.tooltip-nw):before {
173
+ right: 0;
174
+ margin-right: ${TOOLTIP_ARROW_EDGE_OFFSET}px;
175
+ }
176
+ :host(.tooltip-w):before {
177
+ top: 50%;
178
+ bottom: 50%;
179
+ left: 100%;
180
+ margin-top: -6px;
181
+ border-left-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
182
+ }
183
+ :host(.tooltip-e):before {
184
+ top: 50%;
185
+ right: 100%;
186
+ bottom: 50%;
187
+ margin-top: -6px;
188
+ border-right-color: var(--bgColor-emphasis, var(--color-neutral-emphasis-plus));
116
189
  }
117
190
  `
118
191
  }
@@ -8,9 +8,7 @@ module Primer
8
8
  # Do not add to this list for any other reason!
9
9
  IGNORED_PREVIEWS = [
10
10
  Primer::Beta::MarkdownPreview,
11
- Primer::Beta::AutoCompleteItemPreview,
12
- Primer::Alpha::RadioButtonPreview,
13
- Primer::Alpha::CheckBoxPreview
11
+ Primer::Beta::AutoCompleteItemPreview
14
12
  ].freeze
15
13
 
16
14
  # Skip `:region` which relates to preview page structure rather than individual component.
@@ -6,7 +6,7 @@ module Primer
6
6
  module VERSION
7
7
  MAJOR = 0
8
8
  MINOR = 13
9
- PATCH = 0
9
+ PATCH = 1
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH].join(".")
12
12
  end
@@ -7,7 +7,6 @@ module Primer
7
7
  # @label Playground
8
8
  #
9
9
  # @param name text
10
- # @param id text
11
10
  # @param value text
12
11
  # @param label text
13
12
  # @param caption text
@@ -15,7 +14,6 @@ module Primer
15
14
  # @param disabled toggle
16
15
  def playground(
17
16
  name: "my-check-box",
18
- id: nil,
19
17
  value: "picard",
20
18
  label: "Jean-Luc Picard",
21
19
  caption: "Make it so",
@@ -24,7 +22,6 @@ module Primer
24
22
  )
25
23
  system_arguments = {
26
24
  name: name,
27
- id: id,
28
25
  value: value,
29
26
  label: label,
30
27
  caption: caption,
@@ -4,7 +4,8 @@
4
4
  <p>Dialog One!</p>
5
5
 
6
6
  <form>
7
- <input type="text" value="Some text goes in here">
7
+ <label for="dialog-text-input-example">Example input</label>
8
+ <input id="dialog-text-input-example" type="text" value="Some text goes in here">
8
9
  </form>
9
10
  <% end %>
10
11
  <% end %>
@@ -7,7 +7,6 @@ module Primer
7
7
  # @label Playground
8
8
  #
9
9
  # @param name text
10
- # @param id text
11
10
  # @param value text
12
11
  # @param label text
13
12
  # @param caption text
@@ -15,7 +14,6 @@ module Primer
15
14
  # @param disabled toggle
16
15
  def playground(
17
16
  name: "my-radio-button",
18
- id: nil,
19
17
  value: "bsg",
20
18
  label: "Battlestar Galactica",
21
19
  caption: "A pretty good show",
@@ -24,7 +22,6 @@ module Primer
24
22
  )
25
23
  system_arguments = {
26
24
  name: name,
27
- id: id,
28
25
  value: value,
29
26
  label: label,
30
27
  caption: caption,
@@ -2589,7 +2589,84 @@
2589
2589
 
2590
2590
  ],
2591
2591
  "previews": [
2592
-
2592
+ {
2593
+ "preview_path": "primer/alpha/check_box/playground",
2594
+ "name": "playground",
2595
+ "snapshot": "false",
2596
+ "skip_rules": {
2597
+ "wont_fix": [
2598
+ "region"
2599
+ ],
2600
+ "will_fix": [
2601
+ "color-contrast"
2602
+ ]
2603
+ }
2604
+ },
2605
+ {
2606
+ "preview_path": "primer/alpha/check_box/default",
2607
+ "name": "default",
2608
+ "snapshot": "false",
2609
+ "skip_rules": {
2610
+ "wont_fix": [
2611
+ "region"
2612
+ ],
2613
+ "will_fix": [
2614
+ "color-contrast"
2615
+ ]
2616
+ }
2617
+ },
2618
+ {
2619
+ "preview_path": "primer/alpha/check_box/with_caption",
2620
+ "name": "with_caption",
2621
+ "snapshot": "true",
2622
+ "skip_rules": {
2623
+ "wont_fix": [
2624
+ "region"
2625
+ ],
2626
+ "will_fix": [
2627
+ "color-contrast"
2628
+ ]
2629
+ }
2630
+ },
2631
+ {
2632
+ "preview_path": "primer/alpha/check_box/checked",
2633
+ "name": "checked",
2634
+ "snapshot": "false",
2635
+ "skip_rules": {
2636
+ "wont_fix": [
2637
+ "region"
2638
+ ],
2639
+ "will_fix": [
2640
+ "color-contrast"
2641
+ ]
2642
+ }
2643
+ },
2644
+ {
2645
+ "preview_path": "primer/alpha/check_box/visually_hide_label",
2646
+ "name": "visually_hide_label",
2647
+ "snapshot": "false",
2648
+ "skip_rules": {
2649
+ "wont_fix": [
2650
+ "region"
2651
+ ],
2652
+ "will_fix": [
2653
+ "color-contrast"
2654
+ ]
2655
+ }
2656
+ },
2657
+ {
2658
+ "preview_path": "primer/alpha/check_box/disabled",
2659
+ "name": "disabled",
2660
+ "snapshot": "false",
2661
+ "skip_rules": {
2662
+ "wont_fix": [
2663
+ "region"
2664
+ ],
2665
+ "will_fix": [
2666
+ "color-contrast"
2667
+ ]
2668
+ }
2669
+ }
2593
2670
  ],
2594
2671
  "subcomponents": [
2595
2672
 
@@ -5937,7 +6014,84 @@
5937
6014
 
5938
6015
  ],
5939
6016
  "previews": [
5940
-
6017
+ {
6018
+ "preview_path": "primer/alpha/radio_button/playground",
6019
+ "name": "playground",
6020
+ "snapshot": "false",
6021
+ "skip_rules": {
6022
+ "wont_fix": [
6023
+ "region"
6024
+ ],
6025
+ "will_fix": [
6026
+ "color-contrast"
6027
+ ]
6028
+ }
6029
+ },
6030
+ {
6031
+ "preview_path": "primer/alpha/radio_button/default",
6032
+ "name": "default",
6033
+ "snapshot": "true",
6034
+ "skip_rules": {
6035
+ "wont_fix": [
6036
+ "region"
6037
+ ],
6038
+ "will_fix": [
6039
+ "color-contrast"
6040
+ ]
6041
+ }
6042
+ },
6043
+ {
6044
+ "preview_path": "primer/alpha/radio_button/with_caption",
6045
+ "name": "with_caption",
6046
+ "snapshot": "true",
6047
+ "skip_rules": {
6048
+ "wont_fix": [
6049
+ "region"
6050
+ ],
6051
+ "will_fix": [
6052
+ "color-contrast"
6053
+ ]
6054
+ }
6055
+ },
6056
+ {
6057
+ "preview_path": "primer/alpha/radio_button/checked",
6058
+ "name": "checked",
6059
+ "snapshot": "true",
6060
+ "skip_rules": {
6061
+ "wont_fix": [
6062
+ "region"
6063
+ ],
6064
+ "will_fix": [
6065
+ "color-contrast"
6066
+ ]
6067
+ }
6068
+ },
6069
+ {
6070
+ "preview_path": "primer/alpha/radio_button/visually_hide_label",
6071
+ "name": "visually_hide_label",
6072
+ "snapshot": "true",
6073
+ "skip_rules": {
6074
+ "wont_fix": [
6075
+ "region"
6076
+ ],
6077
+ "will_fix": [
6078
+ "color-contrast"
6079
+ ]
6080
+ }
6081
+ },
6082
+ {
6083
+ "preview_path": "primer/alpha/radio_button/disabled",
6084
+ "name": "disabled",
6085
+ "snapshot": "true",
6086
+ "skip_rules": {
6087
+ "wont_fix": [
6088
+ "region"
6089
+ ],
6090
+ "will_fix": [
6091
+ "color-contrast"
6092
+ ]
6093
+ }
6094
+ }
5941
6095
  ],
5942
6096
  "subcomponents": [
5943
6097