openproject-primer_view_components 0.36.2 → 0.37.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.
@@ -9,8 +9,8 @@ module Primer
9
9
  # Use to render a block inside the grid
10
10
  #
11
11
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
12
- renders_many :rows, lambda { |**system_arguments|
13
- Primer::OpenProject::BorderGrid::Cell.new(**system_arguments)
12
+ renders_many :rows, lambda { |**system_arguments, &block|
13
+ Primer::OpenProject::BorderGrid::Cell.new(**system_arguments, &block)
14
14
  }
15
15
 
16
16
  # @param spacious [Boolean] Whether to add margin to the bottom of the component.
@@ -0,0 +1 @@
1
+ .SidePanel-sectionHeader{align-items:center;display:flex;height:32px;margin-bottom:8px}.SidePanel-sectionCounter{margin-left:8px}.SidePanel-sectionAction{display:flex;flex:1;justify-content:right}.SidePanel-sectionContent,.SidePanel-sectionDescription{margin-top:0}.SidePanel-sectionContent:not(:last-child),.SidePanel-sectionDescription:not(:last-child){margin-bottom:16px}
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "open_project/side_panel/section",
3
+ "selectors": [
4
+ ".SidePanel-sectionHeader",
5
+ ".SidePanel-sectionCounter",
6
+ ".SidePanel-sectionAction",
7
+ ".SidePanel-sectionContent",
8
+ ".SidePanel-sectionDescription",
9
+ ".SidePanel-sectionContent:not(:last-child)",
10
+ ".SidePanel-sectionDescription:not(:last-child)"
11
+ ]
12
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["section.pcss"],"names":[],"mappings":"AAEA,yBAEE,kBAAmB,CADnB,YAAa,CAEb,WAAY,CACZ,iBACF,CAEA,0BACE,eACF,CAEA,yBAGE,YAAa,CADb,MAAO,CADP,qBAGF,CAEA,wDAEE,YAKF,CAHE,0FACE,kBACF","file":"section.css","sourcesContent":["/* CSS for OpenProject::SidePanel::Section */\n\n.SidePanel-sectionHeader {\n display: flex;\n align-items: center;\n height: 32px;\n margin-bottom: 8px;\n}\n\n.SidePanel-sectionCounter {\n margin-left: 8px;\n}\n\n.SidePanel-sectionAction {\n justify-content: right;\n flex: 1;\n display: flex;\n}\n\n.SidePanel-sectionContent,\n.SidePanel-sectionDescription {\n margin-top: 0;\n\n &:not(:last-child) {\n margin-bottom: 16px;\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
2
+ <div class="SidePanel-sectionHeader">
3
+ <%= title %>
4
+ <% if counter %>
5
+ <div class="SidePanel-sectionCounter">
6
+ <%= counter %>
7
+ </div>
8
+ <% end %>
9
+ <% if action %>
10
+ <div class="SidePanel-sectionAction">
11
+ <%= action %>
12
+ </div>
13
+ <% end %>
14
+ </div>
15
+
16
+ <% if description? %>
17
+ <div class="SidePanel-sectionDescription">
18
+ <%= description %>
19
+ </div>
20
+ <% end %>
21
+
22
+ <div class="SidePanel-sectionContent">
23
+ <%= content %>
24
+ </div>
25
+
26
+ <% if footer? %>
27
+ <%= footer %>
28
+ <% end %>
29
+ <% end %>
@@ -0,0 +1,27 @@
1
+ /* CSS for OpenProject::SidePanel::Section */
2
+
3
+ .SidePanel-sectionHeader {
4
+ display: flex;
5
+ align-items: center;
6
+ height: 32px;
7
+ margin-bottom: 8px;
8
+ }
9
+
10
+ .SidePanel-sectionCounter {
11
+ margin-left: 8px;
12
+ }
13
+
14
+ .SidePanel-sectionAction {
15
+ justify-content: right;
16
+ flex: 1;
17
+ display: flex;
18
+ }
19
+
20
+ .SidePanel-sectionContent,
21
+ .SidePanel-sectionDescription {
22
+ margin-top: 0;
23
+
24
+ &:not(:last-child) {
25
+ margin-bottom: 16px;
26
+ }
27
+ }
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module OpenProject
5
+ class SidePanel
6
+ # SidePanel::Section is an internal component that deals with individual sections of a sidepanel.
7
+ class Section < Primer::Component
8
+ status :open_project
9
+
10
+ TITLE_TAG_FALLBACK = :h4
11
+ TITLE_TAG_OPTIONS = [:h1, :h2, :h3, TITLE_TAG_FALLBACK, :h5, :h6].freeze
12
+
13
+ renders_one :title, lambda { |tag: TITLE_TAG_FALLBACK, **system_arguments, &block|
14
+ system_arguments[:tag] = fetch_or_fallback(TITLE_TAG_OPTIONS, tag, TITLE_TAG_FALLBACK)
15
+ Primer::BaseComponent.new(**system_arguments, &block)
16
+ }
17
+
18
+ renders_one :counter, Primer::Beta::Counter
19
+
20
+ renders_one :action, types: {
21
+ icon: lambda { |**system_arguments, &block|
22
+ system_arguments[:scheme] ||= :invisible
23
+ Primer::Beta::IconButton.new(**system_arguments, &block)
24
+ }
25
+ }
26
+
27
+ renders_one :description, lambda { |**system_arguments, &block|
28
+ system_arguments[:color] = :subtle
29
+ Primer::Beta::Text.new(**system_arguments, &block)
30
+ }
31
+
32
+ renders_one :footer, types: {
33
+ button: lambda { |**system_arguments, &block|
34
+ defaults = {
35
+ scheme: :link,
36
+ color: :default,
37
+ font_weight: :bold,
38
+ underline: false
39
+ }
40
+ system_arguments.reverse_merge!(defaults)
41
+
42
+ system_arguments[:classes] = class_names(
43
+ "SidePanel-sectionFooter",
44
+ system_arguments[:classes]
45
+ )
46
+
47
+ Primer::Beta::Button.new(**system_arguments, &block)
48
+ }
49
+ }
50
+
51
+ DEFAULT_TAG = :section
52
+ TAG_OPTIONS = [DEFAULT_TAG, :div, :span].freeze
53
+
54
+ def initialize(tag: DEFAULT_TAG, **system_arguments)
55
+ @system_arguments = system_arguments
56
+ @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG)
57
+ end
58
+
59
+ def render?
60
+ title? && content?
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1 @@
1
+ <%= render(@border_grid) %>
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module OpenProject
5
+ # Add a general description of component here
6
+ # Add additional usage considerations or best practices that may aid the user to use the component correctly.
7
+ # @accessibility Add any accessibility considerations
8
+ class SidePanel < Primer::Component
9
+ status :open_project
10
+
11
+ # @param grid_row_arguments [Hash] Arguments to pass to +Primer::OpenProject::BorderGrid::Cell+ %>
12
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
13
+ # A side panel consists of one or multiple sections
14
+ renders_many :sections, lambda { |component = nil, grid_row_arguments: {}, **system_arguments, &block|
15
+ if component.nil?
16
+ @border_grid.with_row(**grid_row_arguments) do
17
+ render(Primer::OpenProject::SidePanel::Section.new(**system_arguments)) do |section|
18
+ evaluate_block(section, &block)
19
+ end
20
+ end
21
+ elsif component.render?
22
+ @border_grid.with_row(**grid_row_arguments) do
23
+ render(component)
24
+ end
25
+ end
26
+ }
27
+
28
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
29
+ def initialize(**system_arguments)
30
+ @system_arguments = system_arguments
31
+ @system_arguments[:classes] = class_names(
32
+ "SidePanel",
33
+ @system_arguments[:classes]
34
+ )
35
+
36
+ @border_grid = Primer::OpenProject::BorderGrid.new(**@system_arguments)
37
+ end
38
+
39
+ def render?
40
+ sections.present?
41
+ end
42
+
43
+ def before_render
44
+ content
45
+ end
46
+ end
47
+ end
48
+ end
@@ -45,3 +45,4 @@
45
45
  @import "./open_project/border_grid.pcss";
46
46
  @import "./open_project/input_group.pcss";
47
47
  @import "./open_project/sub_header.pcss";
48
+ @import "./open_project/side_panel/section.pcss";
@@ -5,8 +5,8 @@ module Primer
5
5
  module ViewComponents
6
6
  module VERSION
7
7
  MAJOR = 0
8
- MINOR = 36
9
- PATCH = 2
8
+ MINOR = 37
9
+ PATCH = 1
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH].join(".")
12
12
  end
@@ -0,0 +1,40 @@
1
+ <%=
2
+ render(Primer::Alpha::Layout.new) do |component|
3
+ component.with_main do
4
+ "Main content"
5
+ end
6
+ component.with_sidebar(row_placement: :start, col_placement: :end) do
7
+ render(Primer::OpenProject::SidePanel.new) do |panel|
8
+ panel.with_section do |section|
9
+ section.with_title { "Attributes" }
10
+ section.with_counter(count: 5)
11
+ section.with_description do
12
+ "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes."
13
+ end
14
+
15
+ section.with_action_icon(icon: :pencil, 'aria-label': 'Edit')
16
+ section.with_footer_button(tag: :a, href: '#') do |button|
17
+ button.with_leading_visual_icon(icon: :pencil)
18
+ "Additional action"
19
+ end
20
+
21
+ "Section content"
22
+ end
23
+
24
+ panel.with_section do |section|
25
+ section.with_title { "Without counter" }
26
+ section.with_action_icon(icon: :gear, 'aria-label': 'Manage')
27
+
28
+ "Some more content here"
29
+ end
30
+
31
+ panel.with_section do |section|
32
+ section.with_title { "Without action" }
33
+
34
+ "Even more content here"
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ %>
@@ -0,0 +1,25 @@
1
+ <%=
2
+ render(Primer::Alpha::Layout.new) do |component|
3
+ component.with_main do
4
+ "Main content"
5
+ end
6
+
7
+ component.with_sidebar(row_placement: :start, col_placement: :end) do
8
+ render(Primer::OpenProject::SidePanel.new) do |panel|
9
+ panel.with_section do |section|
10
+ section.with_title { "Attributes" }
11
+ section.with_counter(count: counter)
12
+ section.with_description { description } if show_description
13
+
14
+ section.with_action_icon(icon: :pencil, 'aria-label': 'Edit') if show_action
15
+ section.with_footer_button(tag: :a, href: '#') do |button|
16
+ button.with_leading_visual_icon(icon: :pencil)
17
+ "Additional action"
18
+ end if show_footer_action
19
+
20
+ "Section content"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ %>
@@ -0,0 +1,36 @@
1
+ <%=
2
+ clazz = Class.new(ViewComponent::Base) do
3
+ def self.name
4
+ "CustomComponent"
5
+ end
6
+
7
+ def call
8
+ render(Primer::OpenProject::SidePanel::Section.new) do |section|
9
+ section.with_title { "My custom component" }
10
+ section.with_counter(count: 5)
11
+ section.with_description do
12
+ "Some text here"
13
+ end
14
+
15
+ section.with_action_icon(icon: :pencil, 'aria-label': 'Edit')
16
+ section.with_footer_button(tag: :a, href: '#') do |button|
17
+ button.with_leading_visual_icon(icon: :pencil)
18
+ "Additional action"
19
+ end
20
+
21
+ "Section content"
22
+ end
23
+ end
24
+ end
25
+
26
+ render(Primer::Alpha::Layout.new) do |component|
27
+ component.with_main do
28
+ "Main content"
29
+ end
30
+ component.with_sidebar(row_placement: :start, col_placement: :end) do
31
+ render(Primer::OpenProject::SidePanel.new) do |panel|
32
+ panel.with_section(clazz.new)
33
+ end
34
+ end
35
+ end
36
+ %>
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Setup Playground to use all available component props
4
+ # Setup Features to use individual component props and combinations
5
+
6
+ module Primer
7
+ module OpenProject
8
+ # @label SidePanel
9
+ class SidePanelPreview < ViewComponent::Preview
10
+ # @label Playground
11
+ # @param description text
12
+ # @param show_description toggle
13
+ # @param show_action toggle
14
+ # @param show_footer_action toggle
15
+ # @param counter number
16
+ def playground(description: "Some information", counter: 12, show_description: true, show_action: true, show_footer_action: true)
17
+ render_with_template(
18
+ locals: {
19
+ description: description,
20
+ counter: counter,
21
+ show_description: show_description,
22
+ show_action: show_action,
23
+ show_footer_action: show_footer_action
24
+ }
25
+ )
26
+ end
27
+
28
+ # @label Default
29
+ # @snapshot
30
+ def default
31
+ end
32
+
33
+ # @label With custom component
34
+ def with_component
35
+ end
36
+ end
37
+ end
38
+ end
@@ -5053,6 +5053,33 @@
5053
5053
  }
5054
5054
  ]
5055
5055
  },
5056
+ {
5057
+ "component": "OpenProject::SidePanel",
5058
+ "status": "open_project",
5059
+ "a11y_reviewed": false,
5060
+ "short_name": "OpenProjectSidePanel",
5061
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/side_panel.rb",
5062
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/side_panel/default/",
5063
+ "parameters": [
5064
+ {
5065
+ "name": "system_arguments",
5066
+ "type": "Hash",
5067
+ "default": "N/A",
5068
+ "description": "[System arguments](/system-arguments)"
5069
+ }
5070
+ ]
5071
+ },
5072
+ {
5073
+ "component": "OpenProject::SidePanel::Section",
5074
+ "status": "open_project",
5075
+ "a11y_reviewed": false,
5076
+ "short_name": "OpenProjectSidePanelSection",
5077
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/side_panel/section.rb",
5078
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/side_panel/section/default/",
5079
+ "parameters": [
5080
+
5081
+ ]
5082
+ },
5056
5083
  {
5057
5084
  "component": "OpenProject::SubHeader",
5058
5085
  "status": "open_project",
@@ -123,6 +123,8 @@
123
123
  "Primer::OpenProject::PageHeader": "",
124
124
  "Primer::OpenProject::PageHeader::Dialog": "",
125
125
  "Primer::OpenProject::PageHeader::Menu": "",
126
+ "Primer::OpenProject::SidePanel": "",
127
+ "Primer::OpenProject::SidePanel::Section": "",
126
128
  "Primer::OpenProject::SubHeader": "",
127
129
  "Primer::OpenProject::ZenModeButton": "",
128
130
  "Primer::Tooltip": "",
data/static/classes.json CHANGED
@@ -534,6 +534,21 @@
534
534
  "SegmentedControl-item": [
535
535
  "Primer::Alpha::SegmentedControl"
536
536
  ],
537
+ "SidePanel-sectionAction": [
538
+ "Primer::OpenProject::SidePanel::Section"
539
+ ],
540
+ "SidePanel-sectionContent": [
541
+ "Primer::OpenProject::SidePanel::Section"
542
+ ],
543
+ "SidePanel-sectionCounter": [
544
+ "Primer::OpenProject::SidePanel::Section"
545
+ ],
546
+ "SidePanel-sectionDescription": [
547
+ "Primer::OpenProject::SidePanel::Section"
548
+ ],
549
+ "SidePanel-sectionHeader": [
550
+ "Primer::OpenProject::SidePanel::Section"
551
+ ],
537
552
  "State": [
538
553
  "Primer::Beta::State"
539
554
  ],
@@ -1480,6 +1480,26 @@
1480
1480
  },
1481
1481
  "Primer::OpenProject::PageHeader::Menu": {
1482
1482
  },
1483
+ "Primer::OpenProject::SidePanel": {
1484
+ "Section": "Primer::OpenProject::SidePanel::Section"
1485
+ },
1486
+ "Primer::OpenProject::SidePanel::Section": {
1487
+ "DEFAULT_TAG": "section",
1488
+ "TAG_OPTIONS": [
1489
+ "section",
1490
+ "div",
1491
+ "span"
1492
+ ],
1493
+ "TITLE_TAG_FALLBACK": "h4",
1494
+ "TITLE_TAG_OPTIONS": [
1495
+ "h1",
1496
+ "h2",
1497
+ "h3",
1498
+ "h4",
1499
+ "h5",
1500
+ "h6"
1501
+ ]
1502
+ },
1483
1503
  "Primer::OpenProject::SubHeader": {
1484
1504
  "HIDDEN_FILTER_TARGET_SELECTOR": "sub-header.hiddenItemsOnExpandedFilter",
1485
1505
  "SHOWN_FILTER_TARGET_SELECTOR": "sub-header.shownItemsOnExpandedFilter"
@@ -17138,6 +17138,158 @@
17138
17138
 
17139
17139
  ]
17140
17140
  },
17141
+ {
17142
+ "fully_qualified_name": "Primer::OpenProject::SidePanel",
17143
+ "description": "Add a general description of component here\nAdd additional usage considerations or best practices that may aid the user to use the component correctly.",
17144
+ "accessibility_docs": "Add any accessibility considerations",
17145
+ "is_form_component": false,
17146
+ "is_published": true,
17147
+ "requires_js": false,
17148
+ "component": "OpenProject::SidePanel",
17149
+ "status": "open_project",
17150
+ "a11y_reviewed": false,
17151
+ "short_name": "OpenProjectSidePanel",
17152
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/side_panel.rb",
17153
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/side_panel/default/",
17154
+ "parameters": [
17155
+ {
17156
+ "name": "system_arguments",
17157
+ "type": "Hash",
17158
+ "default": "N/A",
17159
+ "description": "{{link_to_system_arguments_docs}}"
17160
+ }
17161
+ ],
17162
+ "slots": [
17163
+ {
17164
+ "name": "sections",
17165
+ "description": "A side panel consists of one or multiple sections",
17166
+ "parameters": [
17167
+ {
17168
+ "name": "grid_row_arguments",
17169
+ "type": "Hash",
17170
+ "default": "N/A",
17171
+ "description": "Arguments to pass to +Primer::OpenProject::BorderGrid::Cell+ %>"
17172
+ },
17173
+ {
17174
+ "name": "system_arguments",
17175
+ "type": "Hash",
17176
+ "default": "N/A",
17177
+ "description": "{{link_to_system_arguments_docs}}"
17178
+ }
17179
+ ]
17180
+ }
17181
+ ],
17182
+ "methods": [
17183
+
17184
+ ],
17185
+ "previews": [
17186
+ {
17187
+ "preview_path": "primer/open_project/side_panel/playground",
17188
+ "name": "playground",
17189
+ "snapshot": "false",
17190
+ "skip_rules": {
17191
+ "wont_fix": [
17192
+ "region"
17193
+ ],
17194
+ "will_fix": [
17195
+ "color-contrast"
17196
+ ]
17197
+ }
17198
+ },
17199
+ {
17200
+ "preview_path": "primer/open_project/side_panel/default",
17201
+ "name": "default",
17202
+ "snapshot": "true",
17203
+ "skip_rules": {
17204
+ "wont_fix": [
17205
+ "region"
17206
+ ],
17207
+ "will_fix": [
17208
+ "color-contrast"
17209
+ ]
17210
+ }
17211
+ },
17212
+ {
17213
+ "preview_path": "primer/open_project/side_panel/with_component",
17214
+ "name": "with_component",
17215
+ "snapshot": "false",
17216
+ "skip_rules": {
17217
+ "wont_fix": [
17218
+ "region"
17219
+ ],
17220
+ "will_fix": [
17221
+ "color-contrast"
17222
+ ]
17223
+ }
17224
+ }
17225
+ ],
17226
+ "subcomponents": [
17227
+
17228
+ ]
17229
+ },
17230
+ {
17231
+ "fully_qualified_name": "Primer::OpenProject::SidePanel::Section",
17232
+ "description": "SidePanel::Section is an internal component that deals with individual sections of a sidepanel.",
17233
+ "accessibility_docs": null,
17234
+ "is_form_component": false,
17235
+ "is_published": true,
17236
+ "requires_js": false,
17237
+ "component": "OpenProject::SidePanel::Section",
17238
+ "status": "open_project",
17239
+ "a11y_reviewed": false,
17240
+ "short_name": "OpenProjectSidePanelSection",
17241
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/side_panel/section.rb",
17242
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/side_panel/section/default/",
17243
+ "parameters": [
17244
+
17245
+ ],
17246
+ "slots": [
17247
+ {
17248
+ "name": "title",
17249
+ "description": null,
17250
+ "parameters": [
17251
+
17252
+ ]
17253
+ },
17254
+ {
17255
+ "name": "counter",
17256
+ "description": null,
17257
+ "parameters": [
17258
+
17259
+ ]
17260
+ },
17261
+ {
17262
+ "name": "action",
17263
+ "description": null,
17264
+ "parameters": [
17265
+
17266
+ ]
17267
+ },
17268
+ {
17269
+ "name": "description",
17270
+ "description": null,
17271
+ "parameters": [
17272
+
17273
+ ]
17274
+ },
17275
+ {
17276
+ "name": "footer",
17277
+ "description": null,
17278
+ "parameters": [
17279
+
17280
+ ]
17281
+ }
17282
+ ],
17283
+ "methods": [
17284
+
17285
+ ],
17286
+ "previews": [
17287
+
17288
+ ],
17289
+ "subcomponents": [
17290
+
17291
+ ]
17292
+ },
17141
17293
  {
17142
17294
  "fully_qualified_name": "Primer::OpenProject::SubHeader",
17143
17295
  "description": "The SubHeader contains specific actions to modify the page content below, e.g a filter button or a create button\nIt should not be used stand alone, but in combination with a PageHeader, either as a direct sibling or as part of a tab content",
data/static/previews.json CHANGED
@@ -6307,6 +6307,53 @@
6307
6307
  }
6308
6308
  ]
6309
6309
  },
6310
+ {
6311
+ "name": "side_panel",
6312
+ "component": "OpenProject::SidePanel",
6313
+ "status": "open_project",
6314
+ "lookup_path": "primer/open_project/side_panel",
6315
+ "examples": [
6316
+ {
6317
+ "preview_path": "primer/open_project/side_panel/playground",
6318
+ "name": "playground",
6319
+ "snapshot": "false",
6320
+ "skip_rules": {
6321
+ "wont_fix": [
6322
+ "region"
6323
+ ],
6324
+ "will_fix": [
6325
+ "color-contrast"
6326
+ ]
6327
+ }
6328
+ },
6329
+ {
6330
+ "preview_path": "primer/open_project/side_panel/default",
6331
+ "name": "default",
6332
+ "snapshot": "true",
6333
+ "skip_rules": {
6334
+ "wont_fix": [
6335
+ "region"
6336
+ ],
6337
+ "will_fix": [
6338
+ "color-contrast"
6339
+ ]
6340
+ }
6341
+ },
6342
+ {
6343
+ "preview_path": "primer/open_project/side_panel/with_component",
6344
+ "name": "with_component",
6345
+ "snapshot": "false",
6346
+ "skip_rules": {
6347
+ "wont_fix": [
6348
+ "region"
6349
+ ],
6350
+ "will_fix": [
6351
+ "color-contrast"
6352
+ ]
6353
+ }
6354
+ }
6355
+ ]
6356
+ },
6310
6357
  {
6311
6358
  "name": "spinner",
6312
6359
  "component": "Spinner",