diff --git a/.changeset/orange-countries-try.md b/.changeset/orange-countries-try.md new file mode 100644 index 0000000000..b7cc2b404d --- /dev/null +++ b/.changeset/orange-countries-try.md @@ -0,0 +1,5 @@ +--- +'@primer/view-components': minor +--- + +Add support for `target` attribute on links of Primer::Beta::Breadcrumbs diff --git a/app/components/primer/beta/breadcrumbs.rb b/app/components/primer/beta/breadcrumbs.rb index e0a20de005..500e047f4c 100644 --- a/app/components/primer/beta/breadcrumbs.rb +++ b/app/components/primer/beta/breadcrumbs.rb @@ -48,8 +48,9 @@ def render? class Item < Primer::Component attr_accessor :selected, :href - def initialize(href:, **system_arguments) + def initialize(href:, target: "_self", **system_arguments) @href = href + @target = target @system_arguments = deny_tag_argument(**system_arguments) @selected = false @@ -58,7 +59,7 @@ def initialize(href:, **system_arguments) end def call - link_arguments = { href: @href } + link_arguments = { href: @href, target: @target } if selected link_arguments[:"aria-current"] = "page" diff --git a/previews/primer/beta/breadcrumbs_preview.rb b/previews/primer/beta/breadcrumbs_preview.rb index 589178a669..9823282818 100644 --- a/previews/primer/beta/breadcrumbs_preview.rb +++ b/previews/primer/beta/breadcrumbs_preview.rb @@ -38,6 +38,15 @@ def with_beta_truncate def with_deprecated_truncate render_with_template end + + # @label With a specific link target + def with_link_target(number_of_links: 2) + render(Primer::Beta::Breadcrumbs.new) do |component| + Array.new(number_of_links&.to_i || 3) do |i| + component.with_item(href: "##{i}", target: "_blank") { "Breadcrumb Item #{i + 1}" } + end + end + end end end end diff --git a/test/components/breadcrumbs_test.rb b/test/components/breadcrumbs_test.rb index 8f0adeb0ad..27098ed871 100644 --- a/test/components/breadcrumbs_test.rb +++ b/test/components/breadcrumbs_test.rb @@ -68,6 +68,16 @@ def test_automatically_selects_last_item assert_selector("li.breadcrumb-item-selected a[aria-current='page']", text: "About") end + def test_renders_target_attribute + render_inline(Primer::Beta::Breadcrumbs.new) do |component| + component.with_item(href: "/", target: "_blank") { "Home" } + component.with_item(href: "/about") { "About" } + end + + assert_selector(".breadcrumb-item a[target='_blank']", text: "Home") + assert_selector(".breadcrumb-item a[target='_self']", text: "About") + end + def test_status assert_component_state(Primer::Beta::Breadcrumbs, :beta) end