primer_view_components 0.0.50 → 0.0.54

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +136 -0
  3. data/app/components/primer/alpha/underline_nav.html.erb +15 -0
  4. data/app/components/primer/alpha/underline_nav.rb +143 -0
  5. data/app/components/primer/{underline_nav_component.html.erb → alpha/underline_panels.html.erb} +3 -8
  6. data/app/components/primer/alpha/underline_panels.rb +86 -0
  7. data/app/components/primer/base_component.rb +2 -2
  8. data/app/components/primer/beta/avatar_stack.rb +9 -9
  9. data/app/components/primer/{breadcrumb_component.html.erb → beta/breadcrumbs.html.erb} +0 -0
  10. data/app/components/primer/beta/breadcrumbs.rb +59 -0
  11. data/app/components/primer/beta/truncate.html.erb +5 -0
  12. data/app/components/primer/beta/truncate.rb +110 -0
  13. data/app/components/primer/border_box_component.rb +27 -1
  14. data/app/components/primer/clipboard_copy.rb +1 -1
  15. data/app/components/primer/dropdown.rb +7 -7
  16. data/app/components/primer/icon_button.rb +1 -1
  17. data/app/components/primer/navigation/tab_component.rb +7 -5
  18. data/app/components/primer/progress_bar_component.rb +0 -3
  19. data/app/components/primer/tab_nav_component.html.erb +1 -1
  20. data/app/components/primer/tab_nav_component.rb +1 -1
  21. data/app/lib/primer/fetch_or_fallback_helper.rb +2 -0
  22. data/app/lib/primer/tabbed_component_helper.rb +3 -3
  23. data/app/lib/primer/underline_nav_helper.rb +44 -0
  24. data/app/lib/primer/view_helper.rb +1 -0
  25. data/lib/primer/classify/flex.rb +1 -1
  26. data/lib/primer/classify/functional_colors.rb +1 -1
  27. data/lib/primer/classify/utilities.rb +19 -2
  28. data/lib/primer/classify/utilities.yml +2 -2
  29. data/lib/primer/classify/validation.rb +18 -0
  30. data/lib/primer/classify.rb +5 -15
  31. data/lib/primer/view_components/constants.rb +1 -1
  32. data/lib/primer/view_components/linters/argument_mappers/base.rb +34 -8
  33. data/lib/primer/view_components/linters/argument_mappers/button.rb +5 -6
  34. data/lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb +4 -3
  35. data/lib/primer/view_components/linters/argument_mappers/close_button.rb +43 -0
  36. data/lib/primer/view_components/linters/argument_mappers/flash.rb +32 -0
  37. data/lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb +48 -5
  38. data/lib/primer/view_components/linters/argument_mappers/label.rb +3 -4
  39. data/lib/primer/view_components/linters/argument_mappers/system_arguments.rb +5 -7
  40. data/lib/primer/view_components/linters/autocorrectable.rb +6 -4
  41. data/lib/primer/view_components/linters/{helpers.rb → base_linter.rb} +69 -29
  42. data/lib/primer/view_components/linters/button_component_migration_counter.rb +4 -3
  43. data/lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb +3 -4
  44. data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +110 -3
  45. data/lib/primer/view_components/linters/flash_component_migration_counter.rb +18 -3
  46. data/lib/primer/view_components/linters/label_component_migration_counter.rb +2 -3
  47. data/lib/primer/view_components/version.rb +1 -1
  48. data/lib/rubocop/config/default.yml +5 -0
  49. data/lib/rubocop/cop/primer/deprecated_arguments.rb +277 -0
  50. data/lib/rubocop/cop/primer/no_tag_memoize.rb +1 -0
  51. data/lib/rubocop/cop/primer/primer_octicon.rb +178 -0
  52. data/lib/rubocop/cop/primer/system_argument_instead_of_class.rb +12 -16
  53. data/lib/rubocop/cop/primer.rb +1 -2
  54. data/lib/tasks/coverage.rake +4 -0
  55. data/lib/tasks/docs.rake +7 -5
  56. data/lib/tasks/utilities.rake +5 -3
  57. data/lib/yard/docs_helper.rb +6 -3
  58. data/static/arguments.yml +62 -37
  59. data/static/classes.yml +9 -0
  60. data/static/constants.json +38 -23
  61. data/static/statuses.json +8 -5
  62. metadata +37 -15
  63. data/app/components/primer/auto_complete/auto_component.d.ts +0 -1
  64. data/app/components/primer/auto_complete/auto_component.js +0 -1
  65. data/app/components/primer/breadcrumb_component.rb +0 -57
  66. data/app/components/primer/underline_nav_component.rb +0 -187
data/static/statuses.json CHANGED
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "Primer::Alpha::ButtonMarketing": "alpha",
3
+ "Primer::Alpha::UnderlineNav": "alpha",
4
+ "Primer::Alpha::UnderlinePanels": "alpha",
3
5
  "Primer::BaseButton": "beta",
4
6
  "Primer::BaseComponent": "beta",
5
7
  "Primer::Beta::AutoComplete": "beta",
@@ -7,15 +9,17 @@
7
9
  "Primer::Beta::AutoComplete::Item": "beta",
8
10
  "Primer::Beta::Avatar": "beta",
9
11
  "Primer::Beta::AvatarStack": "beta",
12
+ "Primer::Beta::Breadcrumbs": "beta",
13
+ "Primer::Beta::Breadcrumbs::Item": "alpha",
10
14
  "Primer::Beta::Text": "beta",
15
+ "Primer::Beta::Truncate": "beta",
16
+ "Primer::Beta::Truncate::TruncateText": "alpha",
11
17
  "Primer::BlankslateComponent": "beta",
12
18
  "Primer::BorderBoxComponent": "beta",
13
19
  "Primer::BoxComponent": "stable",
14
- "Primer::BreadcrumbComponent": "beta",
15
- "Primer::BreadcrumbComponent::ItemComponent": "alpha",
16
20
  "Primer::ButtonComponent": "beta",
17
21
  "Primer::ButtonGroup": "beta",
18
- "Primer::ClipboardCopy": "alpha",
22
+ "Primer::ClipboardCopy": "beta",
19
23
  "Primer::CloseButton": "beta",
20
24
  "Primer::CounterComponent": "beta",
21
25
  "Primer::DetailsComponent": "beta",
@@ -51,6 +55,5 @@
51
55
  "Primer::TimelineItemComponent": "beta",
52
56
  "Primer::TimelineItemComponent::BadgeComponent": "alpha",
53
57
  "Primer::Tooltip": "beta",
54
- "Primer::Truncate": "beta",
55
- "Primer::UnderlineNavComponent": "alpha"
58
+ "Primer::Truncate": "beta"
56
59
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primer_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.50
4
+ version: 0.0.54
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-03 00:00:00.000000000 Z
11
+ date: 2021-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -218,14 +218,14 @@ dependencies:
218
218
  requirements:
219
219
  - - '='
220
220
  - !ruby/object:Gem::Version
221
- version: '0.82'
221
+ version: 1.13.0
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
226
  - - '='
227
227
  - !ruby/object:Gem::Version
228
- version: '0.82'
228
+ version: 1.13.0
229
229
  - !ruby/object:Gem::Dependency
230
230
  name: rubocop-github
231
231
  requirement: !ruby/object:Gem::Requirement
@@ -324,6 +324,20 @@ dependencies:
324
324
  - - ">="
325
325
  - !ruby/object:Gem::Version
326
326
  version: '0'
327
+ - !ruby/object:Gem::Dependency
328
+ name: timecop
329
+ requirement: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - ">="
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ type: :development
335
+ prerelease: false
336
+ version_requirements: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - ">="
339
+ - !ruby/object:Gem::Version
340
+ version: '0'
327
341
  - !ruby/object:Gem::Dependency
328
342
  name: yard
329
343
  requirement: !ruby/object:Gem::Requirement
@@ -338,7 +352,7 @@ dependencies:
338
352
  - - "~>"
339
353
  - !ruby/object:Gem::Version
340
354
  version: 0.9.25
341
- description:
355
+ description:
342
356
  email:
343
357
  - opensource+primer_view_components@github.com
344
358
  executables: []
@@ -351,10 +365,12 @@ files:
351
365
  - app/assets/javascripts/primer_view_components.js
352
366
  - app/assets/javascripts/primer_view_components.js.map
353
367
  - app/components/primer/alpha/button_marketing.rb
368
+ - app/components/primer/alpha/underline_nav.html.erb
369
+ - app/components/primer/alpha/underline_nav.rb
370
+ - app/components/primer/alpha/underline_panels.html.erb
371
+ - app/components/primer/alpha/underline_panels.rb
354
372
  - app/components/primer/auto_complete/auto_complete.d.ts
355
373
  - app/components/primer/auto_complete/auto_complete.js
356
- - app/components/primer/auto_complete/auto_component.d.ts
357
- - app/components/primer/auto_complete/auto_component.js
358
374
  - app/components/primer/base_button.rb
359
375
  - app/components/primer/base_component.rb
360
376
  - app/components/primer/beta/auto_complete.rb
@@ -366,14 +382,16 @@ files:
366
382
  - app/components/primer/beta/avatar.rb
367
383
  - app/components/primer/beta/avatar_stack.html.erb
368
384
  - app/components/primer/beta/avatar_stack.rb
385
+ - app/components/primer/beta/breadcrumbs.html.erb
386
+ - app/components/primer/beta/breadcrumbs.rb
369
387
  - app/components/primer/beta/text.rb
388
+ - app/components/primer/beta/truncate.html.erb
389
+ - app/components/primer/beta/truncate.rb
370
390
  - app/components/primer/blankslate_component.html.erb
371
391
  - app/components/primer/blankslate_component.rb
372
392
  - app/components/primer/border_box_component.html.erb
373
393
  - app/components/primer/border_box_component.rb
374
394
  - app/components/primer/box_component.rb
375
- - app/components/primer/breadcrumb_component.html.erb
376
- - app/components/primer/breadcrumb_component.rb
377
395
  - app/components/primer/button_component.html.erb
378
396
  - app/components/primer/button_component.rb
379
397
  - app/components/primer/button_group.html.erb
@@ -456,8 +474,6 @@ files:
456
474
  - app/components/primer/timeline_item_component.rb
457
475
  - app/components/primer/tooltip.rb
458
476
  - app/components/primer/truncate.rb
459
- - app/components/primer/underline_nav_component.html.erb
460
- - app/components/primer/underline_nav_component.rb
461
477
  - app/lib/primer/class_name_helper.rb
462
478
  - app/lib/primer/fetch_or_fallback_helper.rb
463
479
  - app/lib/primer/join_style_arguments_helper.rb
@@ -465,6 +481,7 @@ files:
465
481
  - app/lib/primer/status/dsl.rb
466
482
  - app/lib/primer/tabbed_component_helper.rb
467
483
  - app/lib/primer/test_selector_helper.rb
484
+ - app/lib/primer/underline_nav_helper.rb
468
485
  - app/lib/primer/view_helper.rb
469
486
  - lib/primer/classify.rb
470
487
  - lib/primer/classify/cache.rb
@@ -476,6 +493,7 @@ files:
476
493
  - lib/primer/classify/grid.rb
477
494
  - lib/primer/classify/utilities.rb
478
495
  - lib/primer/classify/utilities.yml
496
+ - lib/primer/classify/validation.rb
479
497
  - lib/primer/view_components.rb
480
498
  - lib/primer/view_components/constants.rb
481
499
  - lib/primer/view_components/engine.rb
@@ -483,22 +501,26 @@ files:
483
501
  - lib/primer/view_components/linters/argument_mappers/base.rb
484
502
  - lib/primer/view_components/linters/argument_mappers/button.rb
485
503
  - lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb
504
+ - lib/primer/view_components/linters/argument_mappers/close_button.rb
486
505
  - lib/primer/view_components/linters/argument_mappers/conversion_error.rb
506
+ - lib/primer/view_components/linters/argument_mappers/flash.rb
487
507
  - lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb
488
508
  - lib/primer/view_components/linters/argument_mappers/label.rb
489
509
  - lib/primer/view_components/linters/argument_mappers/system_arguments.rb
490
510
  - lib/primer/view_components/linters/autocorrectable.rb
511
+ - lib/primer/view_components/linters/base_linter.rb
491
512
  - lib/primer/view_components/linters/button_component_migration_counter.rb
492
513
  - lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb
493
514
  - lib/primer/view_components/linters/close_button_component_migration_counter.rb
494
515
  - lib/primer/view_components/linters/flash_component_migration_counter.rb
495
- - lib/primer/view_components/linters/helpers.rb
496
516
  - lib/primer/view_components/linters/label_component_migration_counter.rb
497
517
  - lib/primer/view_components/statuses.rb
498
518
  - lib/primer/view_components/version.rb
499
519
  - lib/rubocop/config/default.yml
500
520
  - lib/rubocop/cop/primer.rb
521
+ - lib/rubocop/cop/primer/deprecated_arguments.rb
501
522
  - lib/rubocop/cop/primer/no_tag_memoize.rb
523
+ - lib/rubocop/cop/primer/primer_octicon.rb
502
524
  - lib/rubocop/cop/primer/system_argument_instead_of_class.rb
503
525
  - lib/tasks/constants.rake
504
526
  - lib/tasks/coverage.rake
@@ -518,7 +540,7 @@ licenses:
518
540
  - MIT
519
541
  metadata:
520
542
  allowed_push_host: https://rubygems.org
521
- post_install_message:
543
+ post_install_message:
522
544
  rdoc_options: []
523
545
  require_paths:
524
546
  - lib
@@ -534,7 +556,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
534
556
  version: '0'
535
557
  requirements: []
536
558
  rubygems_version: 3.1.2
537
- signing_key:
559
+ signing_key:
538
560
  specification_version: 4
539
561
  summary: ViewComponents for the Primer Design System
540
562
  test_files: []
@@ -1 +0,0 @@
1
- import '@github/auto-complete-element';
@@ -1 +0,0 @@
1
- import '@github/auto-complete-element';
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Primer
4
- # Use `Breadcrumb` to display page hierarchy within a section of the site. All of the items in the breadcrumb "trail" are links except for the final item, which is a plain string indicating the current page.
5
- class BreadcrumbComponent < Primer::Component
6
- status :beta
7
-
8
- # _Note: if both `href` and `selected: true` are passed in, `href` will be ignored and the item will not be rendered as a link._
9
- #
10
- # @param href [String] The URL to link to.
11
- # @param selected [Boolean] Whether or not the item is selected and not rendered as a link.
12
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
13
- renders_many :items, "ItemComponent"
14
-
15
- # @example Basic
16
- # <%= render(Primer::BreadcrumbComponent.new) do |component| %>
17
- # <% component.item(href: "/") do %>Home<% end %>
18
- # <% component.item(href: "/about") do %>About<% end %>
19
- # <% component.item(selected: true) do %>Team<% end %>
20
- # <% end %>
21
- #
22
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
23
- def initialize(**system_arguments)
24
- @system_arguments = system_arguments
25
- @system_arguments[:tag] = :nav
26
- @system_arguments[:aria] = { label: "Breadcrumb" }
27
- end
28
-
29
- def render?
30
- items.any?
31
- end
32
-
33
- # This component is part of `Primer::BreadcrumbComponent` and should not be
34
- # used as a standalone component.
35
- class ItemComponent < Primer::Component
36
- def initialize(href: nil, selected: false, **system_arguments)
37
- @href = href
38
- @system_arguments = system_arguments
39
-
40
- @href = nil if selected
41
- @system_arguments[:tag] = :li
42
- @system_arguments[:"aria-current"] = "page" if selected
43
- @system_arguments[:classes] = "breadcrumb-item #{@system_arguments[:classes]}"
44
- end
45
-
46
- def call
47
- render(Primer::BaseComponent.new(**@system_arguments)) do
48
- if @href.present?
49
- render(Primer::LinkComponent.new(href: @href)) { content }
50
- else
51
- content
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,187 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Primer
4
- # Use `UnderlineNav` to style navigation with a minimal
5
- # underlined selected state, typically used for navigation placed at the top
6
- # of the page.
7
- class UnderlineNavComponent < Primer::Component
8
- include Primer::TabbedComponentHelper
9
-
10
- ALIGN_DEFAULT = :left
11
- ALIGN_OPTIONS = [ALIGN_DEFAULT, :right].freeze
12
-
13
- BODY_TAG_DEFAULT = :div
14
- BODY_TAG_OPTIONS = [BODY_TAG_DEFAULT, :ul].freeze
15
-
16
- ACTIONS_TAG_DEFAULT = :div
17
- ACTIONS_TAG_OPTIONS = [ACTIONS_TAG_DEFAULT, :span].freeze
18
-
19
- # Use the tabs to list navigation items. When `with_panel` is set on the parent, a button is rendered for panel navigation. Otherwise,
20
- # an anchor tag is rendered for page navigation. For more information, refer to <%= link_to_component(Primer::Navigation::TabComponent) %>.
21
- #
22
- # @param panel_id [String] Only applies if `with_panel` is `true`. Unique id of panel.
23
- # @param selected [Boolean] Whether the tab is selected.
24
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
25
- renders_many :tabs, lambda { |selected: false, **system_arguments|
26
- system_arguments[:classes] = class_names(
27
- "UnderlineNav-item",
28
- system_arguments[:classes]
29
- )
30
-
31
- Primer::Navigation::TabComponent.new(
32
- list: list?,
33
- selected: selected,
34
- with_panel: @with_panel,
35
- icon_classes: "UnderlineNav-octicon",
36
- **system_arguments
37
- )
38
- }
39
-
40
- # Use actions for a call to action.
41
- #
42
- # @param tag [Symbol] (Primer::UnderlineNavComponent::ACTIONS_TAG_DEFAULT) <%= one_of(Primer::UnderlineNavComponent::ACTIONS_TAG_OPTIONS) %>
43
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
44
- renders_one :actions, lambda { |tag: ACTIONS_TAG_DEFAULT, **system_arguments|
45
- system_arguments[:tag] = fetch_or_fallback(ACTIONS_TAG_OPTIONS, tag, ACTIONS_TAG_DEFAULT)
46
- system_arguments[:classes] = class_names("UnderlineNav-actions", system_arguments[:classes])
47
-
48
- Primer::BaseComponent.new(**system_arguments)
49
- }
50
-
51
- # @example Default
52
- # <%= render(Primer::UnderlineNavComponent.new(label: "Default")) do |component| %>
53
- # <% component.tab(href: "#", selected: true) { "Item 1" } %>
54
- # <% component.tab(href: "#") { "Item 2" } %>
55
- # <% component.actions do %>
56
- # <%= render(Primer::ButtonComponent.new) { "Button!" } %>
57
- # <% end %>
58
- # <% end %>
59
- #
60
- # @example With icons and counters
61
- # <%= render(Primer::UnderlineNavComponent.new(label: "With icons and counters")) do |component| %>
62
- # <% component.tab(href: "#", selected: true) do |t| %>
63
- # <% t.icon(icon: :star) %>
64
- # <% t.text { "Item 1" } %>
65
- # <% end %>
66
- # <% component.tab(href: "#") do |t| %>
67
- # <% t.icon(icon: :star) %>
68
- # <% t.text { "Item 2" } %>
69
- # <% t.counter(count: 10) %>
70
- # <% end %>
71
- # <% component.tab(href: "#") do |t| %>
72
- # <% t.text { "Item 3" } %>
73
- # <% t.counter(count: 10) %>
74
- # <% end %>
75
- # <% component.actions do %>
76
- # <%= render(Primer::ButtonComponent.new) { "Button!" } %>
77
- # <% end %>
78
- # <% end %>
79
- #
80
- # @example Align right
81
- # <%= render(Primer::UnderlineNavComponent.new(label: "Align right", align: :right)) do |component| %>
82
- # <% component.tab(href: "#", selected: true) do |t| %>
83
- # <% t.text { "Item 1" } %>
84
- # <% end %>
85
- # <% component.tab(href: "#") do |t| %>
86
- # <% t.text { "Item 2" } %>
87
- # <% end %>
88
- # <% component.actions do %>
89
- # <%= render(Primer::ButtonComponent.new) { "Button!" } %>
90
- # <% end %>
91
- # <% end %>
92
- #
93
- # @example As a list
94
- # <%= render(Primer::UnderlineNavComponent.new(label: "As a list", body_arguments: { tag: :ul })) do |component| %>
95
- # <% component.tab(href: "#", selected: true) do |t| %>
96
- # <% t.text { "Item 1" } %>
97
- # <% end %>
98
- # <% component.tab(href: "#") do |t| %>
99
- # <% t.text { "Item 2" } %>
100
- # <% end %>
101
- # <% component.actions do %>
102
- # <%= render(Primer::ButtonComponent.new) { "Button!" } %>
103
- # <% end %>
104
- # <% end %>
105
- #
106
- # @example With panels
107
- # <%= render(Primer::UnderlineNavComponent.new(label: "With panels", with_panel: true)) do |component| %>
108
- # <% component.tab(selected: true, id: "tab-1", panel_id: "panel-1") do |t| %>
109
- # <% t.text { "Item 1" } %>
110
- # <% t.panel do %>
111
- # Panel 1
112
- # <% end %>
113
- # <% end %>
114
- # <% component.tab(id: "tab-2", panel_id: "panel-2") do |t| %>
115
- # <% t.text { "Item 2" } %>
116
- # <% t.panel do %>
117
- # Panel 2
118
- # <% end %>
119
- # <% end %>
120
- # <% component.actions do %>
121
- # <%= render(Primer::ButtonComponent.new) { "Button!" } %>
122
- # <% end %>
123
- # <% end %>
124
- #
125
- # @example Customizing the body
126
- # <%= render(Primer::UnderlineNavComponent.new(label: "Default", body_arguments: { tag: :ul, classes: "custom-class", border: true, border_color: :info })) do |c| %>
127
- # <% c.tab(selected: true, href: "#") { "Tab 1" }%>
128
- # <% c.tab(href: "#") { "Tab 2" } %>
129
- # <% c.tab(href: "#") { "Tab 3" } %>
130
- # <% end %>
131
- #
132
- # @example Customizing the wrapper
133
- # <%= render(Primer::UnderlineNavComponent.new(label: "Default", wrapper_arguments: { classes: "custom-class", border: true, border_color: :info })) do |c| %>
134
- # <% c.tab(selected: true, href: "#") { "Tab 1" }%>
135
- # <% c.tab(href: "#") { "Tab 2" } %>
136
- # <% c.tab(href: "#") { "Tab 3" } %>
137
- # <% end %>
138
- #
139
- # @param label [String] The `aria-label` on top level `<nav>` element.
140
- # @param with_panel [Boolean] Whether the `UnderlineNav` should navigate through pages or panels. When true, <%= link_to_component(Primer::TabContainerComponent) %> is
141
- # rendered along with JavaScript behavior.
142
- # @param align [Symbol] <%= one_of(Primer::UnderlineNavComponent::ALIGN_OPTIONS) %> - Defaults to <%= Primer::UnderlineNavComponent::ALIGN_DEFAULT %>
143
- # @param body_arguments [Hash] <%= link_to_system_arguments_docs %> for the body wrapper.
144
- # @param wrapper_arguments [Hash] <%= link_to_system_arguments_docs %> for the `TabContainer` wrapper. Only applies if `with_panel` is `true`.
145
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
146
- def initialize(label:, with_panel: false, align: ALIGN_DEFAULT, body_arguments: { tag: BODY_TAG_DEFAULT }, wrapper_arguments: {}, **system_arguments)
147
- @with_panel = with_panel
148
- @align = fetch_or_fallback(ALIGN_OPTIONS, align, ALIGN_DEFAULT)
149
- @wrapper_arguments = wrapper_arguments
150
-
151
- @system_arguments = system_arguments
152
- @system_arguments[:tag] = navigation_tag(with_panel)
153
- @system_arguments[:classes] = class_names(
154
- @system_arguments[:classes],
155
- "UnderlineNav",
156
- "UnderlineNav--right" => @align == :right
157
- )
158
-
159
- @body_arguments = body_arguments
160
- @body_tag = fetch_or_fallback(BODY_TAG_OPTIONS, body_arguments[:tag]&.to_sym, BODY_TAG_DEFAULT)
161
-
162
- @body_arguments[:tag] = @body_tag
163
- @body_arguments[:classes] = class_names(
164
- "UnderlineNav-body",
165
- @body_arguments[:classes],
166
- "list-style-none" => list?
167
- )
168
-
169
- if with_panel
170
- @body_arguments[:role] = :tablist
171
- @body_arguments[:"aria-label"] = label
172
- else
173
- @system_arguments[:"aria-label"] = label
174
- end
175
- end
176
-
177
- private
178
-
179
- def list?
180
- @body_tag == :ul
181
- end
182
-
183
- def body
184
- Primer::BaseComponent.new(**@body_arguments)
185
- end
186
- end
187
- end