From af4c0862b643b927dd3b81fc7c2e6ebb22234ab0 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Mon, 1 Aug 2022 11:50:12 -0500 Subject: [PATCH 01/16] inital move and rename into Beta::BorderBox --- .../border_box.html.erb} | 0 app/components/primer/beta/border_box.rb | 149 ++++++++++++++++++ app/components/primer/border_box_component.rb | 145 ----------------- .../cop/primer/component_name_migration.rb | 1 + static/arguments.yml | 26 +-- static/audited_at.json | 2 +- static/constants.json | 32 ++-- static/statuses.json | 2 +- .../border_box_stories.rb} | 2 + test/components/beta/border_box_test.rb | 112 +++++++++++++ 10 files changed, 295 insertions(+), 176 deletions(-) rename app/components/primer/{border_box_component.html.erb => beta/border_box.html.erb} (100%) create mode 100644 app/components/primer/beta/border_box.rb delete mode 100644 app/components/primer/border_box_component.rb rename stories/primer/{border_box_component_stories.rb => beta/border_box_stories.rb} (98%) create mode 100644 test/components/beta/border_box_test.rb diff --git a/app/components/primer/border_box_component.html.erb b/app/components/primer/beta/border_box.html.erb similarity index 100% rename from app/components/primer/border_box_component.html.erb rename to app/components/primer/beta/border_box.html.erb diff --git a/app/components/primer/beta/border_box.rb b/app/components/primer/beta/border_box.rb new file mode 100644 index 0000000000..cc9908f9b3 --- /dev/null +++ b/app/components/primer/beta/border_box.rb @@ -0,0 +1,149 @@ +# frozen_string_literal: true + +module Primer + module Beta + # `BorderBox` is a Box component with a border. + class BorderBox < Primer::Component + status :beta + + DEFAULT_PADDING = :default + PADDING_MAPPINGS = { + DEFAULT_PADDING => "", + :condensed => "Box--condensed", + :spacious => "Box--spacious" + }.freeze + PADDING_SUGGESTION = "Perhaps you could consider using :padding options of #{PADDING_MAPPINGS.keys.to_sentence}?" + + DEFAULT_ROW_SCHEME = :default + ROW_SCHEME_MAPPINGS = { + DEFAULT_ROW_SCHEME => "", + :neutral => "Box-row--gray", + :info => "Box-row--blue", + :warning => "Box-row--yellow" + }.freeze + + # Optional Header. + # + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + # @accessibility + # When using header.title, the recommended tag is a heading tag, such as h1, h2, h3, etc. + renders_one :header, "Primer::Alpha::BorderBox::Header" + + # Optional Body. + # + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_one :body, lambda { |**system_arguments| + system_arguments[:tag] = :div + system_arguments[:classes] = class_names( + "Box-body", + system_arguments[:classes] + ) + + Primer::BaseComponent.new(**system_arguments) + } + + # Optional Footer. + # + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_one :footer, lambda { |**system_arguments| + system_arguments[:tag] = :div + system_arguments[:classes] = class_names( + "Box-footer", + system_arguments[:classes] + ) + + Primer::BaseComponent.new(**system_arguments) + } + + # Use Rows to add rows with borders and maintain the same padding. + # + # @param scheme [Symbol] Color scheme. <%= one_of(Primer::BorderBoxComponent::ROW_SCHEME_MAPPINGS.keys) %> + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_many :rows, lambda { |scheme: DEFAULT_ROW_SCHEME, **system_arguments| + system_arguments[:tag] = :li + system_arguments[:classes] = class_names( + "Box-row", + ROW_SCHEME_MAPPINGS[fetch_or_fallback(ROW_SCHEME_MAPPINGS.keys, scheme, DEFAULT_ROW_SCHEME)], + system_arguments[:classes] + ) + + Primer::BaseComponent.new(**system_arguments) + } + + # @example Header with title, body, rows, and footer + # <%= render(Primer::BorderBoxComponent.new) do |component| %> + # <% component.header do |h| %> + # <% h.title(tag: :h2) do %> + # Header + # <% end %> + # <% end %> + # <% component.body do %> + # Body + # <% end %> + # <% component.row do %> + # <% if true %> + # Row one + # <% end %> + # <% end %> + # <% component.row do %> + # Row two + # <% end %> + # <% component.footer do %> + # Footer + # <% end %> + # <% end %> + # + # @example Padding density + # <%= render(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| %> + # <% component.header do %> + # Header + # <% end %> + # <% component.body do %> + # Body + # <% end %> + # <% component.row do %> + # Row two + # <% end %> + # <% component.footer do %> + # Footer + # <% end %> + # <% end %> + # + # @example Row colors + # <%= render(Primer::BorderBoxComponent.new) do |component| %> + # <% component.row do %> + # Default + # <% end %> + # <% component.row(scheme: :neutral) do %> + # Neutral + # <% end %> + # <% component.row(scheme: :info) do %> + # Info + # <% end %> + # <% component.row(scheme: :warning) do %> + # Warning + # <% end %> + # <% end %> + # + # @param padding [Symbol] <%= one_of(Primer::BorderBoxComponent::PADDING_MAPPINGS.keys) %> + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + def initialize(padding: DEFAULT_PADDING, **system_arguments) + @system_arguments = deny_tag_argument(**system_arguments) + @system_arguments[:tag] = :div + @system_arguments[:classes] = class_names( + "Box", + PADDING_MAPPINGS[fetch_or_fallback(PADDING_MAPPINGS.keys, padding, DEFAULT_PADDING)], + system_arguments[:classes] + ) + + @system_arguments[:system_arguments_denylist] = { [:p, :pt, :pb, :pr, :pl] => PADDING_SUGGESTION } + end + + def render? + rows.any? || header.present? || body.present? || footer.present? + end + end + end +end + +Primer::BorderBoxComponent = Primer::Beta::BorderBox diff --git a/app/components/primer/border_box_component.rb b/app/components/primer/border_box_component.rb deleted file mode 100644 index 280fc110c9..0000000000 --- a/app/components/primer/border_box_component.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -module Primer - # `BorderBox` is a Box component with a border. - class BorderBoxComponent < Primer::Component - status :beta - - DEFAULT_PADDING = :default - PADDING_MAPPINGS = { - DEFAULT_PADDING => "", - :condensed => "Box--condensed", - :spacious => "Box--spacious" - }.freeze - PADDING_SUGGESTION = "Perhaps you could consider using :padding options of #{PADDING_MAPPINGS.keys.to_sentence}?" - - DEFAULT_ROW_SCHEME = :default - ROW_SCHEME_MAPPINGS = { - DEFAULT_ROW_SCHEME => "", - :neutral => "Box-row--gray", - :info => "Box-row--blue", - :warning => "Box-row--yellow" - }.freeze - - # Optional Header. - # - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - # @accessibility - # When using header.title, the recommended tag is a heading tag, such as h1, h2, h3, etc. - renders_one :header, "Primer::Alpha::BorderBox::Header" - - # Optional Body. - # - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :body, lambda { |**system_arguments| - system_arguments[:tag] = :div - system_arguments[:classes] = class_names( - "Box-body", - system_arguments[:classes] - ) - - Primer::BaseComponent.new(**system_arguments) - } - - # Optional Footer. - # - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :footer, lambda { |**system_arguments| - system_arguments[:tag] = :div - system_arguments[:classes] = class_names( - "Box-footer", - system_arguments[:classes] - ) - - Primer::BaseComponent.new(**system_arguments) - } - - # Use Rows to add rows with borders and maintain the same padding. - # - # @param scheme [Symbol] Color scheme. <%= one_of(Primer::BorderBoxComponent::ROW_SCHEME_MAPPINGS.keys) %> - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_many :rows, lambda { |scheme: DEFAULT_ROW_SCHEME, **system_arguments| - system_arguments[:tag] = :li - system_arguments[:classes] = class_names( - "Box-row", - ROW_SCHEME_MAPPINGS[fetch_or_fallback(ROW_SCHEME_MAPPINGS.keys, scheme, DEFAULT_ROW_SCHEME)], - system_arguments[:classes] - ) - - Primer::BaseComponent.new(**system_arguments) - } - - # @example Header with title, body, rows, and footer - # <%= render(Primer::BorderBoxComponent.new) do |component| %> - # <% component.header do |h| %> - # <% h.title(tag: :h2) do %> - # Header - # <% end %> - # <% end %> - # <% component.body do %> - # Body - # <% end %> - # <% component.row do %> - # <% if true %> - # Row one - # <% end %> - # <% end %> - # <% component.row do %> - # Row two - # <% end %> - # <% component.footer do %> - # Footer - # <% end %> - # <% end %> - # - # @example Padding density - # <%= render(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| %> - # <% component.header do %> - # Header - # <% end %> - # <% component.body do %> - # Body - # <% end %> - # <% component.row do %> - # Row two - # <% end %> - # <% component.footer do %> - # Footer - # <% end %> - # <% end %> - # - # @example Row colors - # <%= render(Primer::BorderBoxComponent.new) do |component| %> - # <% component.row do %> - # Default - # <% end %> - # <% component.row(scheme: :neutral) do %> - # Neutral - # <% end %> - # <% component.row(scheme: :info) do %> - # Info - # <% end %> - # <% component.row(scheme: :warning) do %> - # Warning - # <% end %> - # <% end %> - # - # @param padding [Symbol] <%= one_of(Primer::BorderBoxComponent::PADDING_MAPPINGS.keys) %> - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - def initialize(padding: DEFAULT_PADDING, **system_arguments) - @system_arguments = deny_tag_argument(**system_arguments) - @system_arguments[:tag] = :div - @system_arguments[:classes] = class_names( - "Box", - PADDING_MAPPINGS[fetch_or_fallback(PADDING_MAPPINGS.keys, padding, DEFAULT_PADDING)], - system_arguments[:classes] - ) - - @system_arguments[:system_arguments_denylist] = { [:p, :pt, :pb, :pr, :pl] => PADDING_SUGGESTION } - end - - def render? - rows.any? || header.present? || body.present? || footer.present? - end - end -end diff --git a/lib/rubocop/cop/primer/component_name_migration.rb b/lib/rubocop/cop/primer/component_name_migration.rb index c5adeab81f..286bd6b48b 100644 --- a/lib/rubocop/cop/primer/component_name_migration.rb +++ b/lib/rubocop/cop/primer/component_name_migration.rb @@ -15,6 +15,7 @@ module Primer # Primer::Beta::ComponentName.new() class ComponentNameMigration < BaseCop DEPRECATIONS = { + "Primer::BorderBoxComponent" => "Primer::Beta::BorderBox", "Primer::BaseButton" => "Primer::Beta::BaseButton", "Primer::TestComponent" => "Primer::Beta::Test" }.freeze diff --git a/static/arguments.yml b/static/arguments.yml index 735fcbd075..5fa820f9fc 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -350,6 +350,17 @@ type: Hash default: N/A description: "[System arguments](/system-arguments)" +- component: BorderBox + source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/border_box.rb + parameters: + - name: padding + type: Symbol + default: "`:default`" + description: One of `:condensed`, `:default`, or `:spacious`. + - name: system_arguments + type: Hash + default: N/A + description: "[System arguments](/system-arguments)" - component: Breadcrumbs source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/breadcrumbs.rb parameters: @@ -402,17 +413,6 @@ type: Hash default: N/A description: "[System arguments](/system-arguments)" -- component: BorderBox - source: https://github.com/primer/view_components/tree/main/app/components/primer/border_box_component.rb - parameters: - - name: padding - type: Symbol - default: "`:default`" - description: One of `:condensed`, `:default`, or `:spacious`. - - name: system_arguments - type: Hash - default: N/A - description: "[System arguments](/system-arguments)" - component: Box source: https://github.com/primer/view_components/tree/main/app/components/primer/box_component.rb parameters: @@ -692,8 +692,8 @@ - name: box type: Boolean default: "`false`" - description: Whether the button is in a [BorderBox](/components/borderbox). If - `true`, the button will have the `Box-btn-octicon` class. + description: Whether the button is in a [BorderBox](/components/beta/borderbox). + If `true`, the button will have the `Box-btn-octicon` class. - name: system_arguments type: Hash default: N/A diff --git a/static/audited_at.json b/static/audited_at.json index 751f957c46..f56c2dbcad 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -18,6 +18,7 @@ "Primer::Beta::AvatarStack": "", "Primer::Beta::BaseButton": "", "Primer::Beta::Blankslate": "", + "Primer::Beta::BorderBox": "", "Primer::Beta::Breadcrumbs": "", "Primer::Beta::Breadcrumbs::Item": "", "Primer::Beta::Flash": "", @@ -25,7 +26,6 @@ "Primer::Beta::Truncate": "", "Primer::Beta::Truncate::TruncateText": "", "Primer::BlankslateComponent": "", - "Primer::BorderBoxComponent": "", "Primer::BoxComponent": "", "Primer::ButtonComponent": "", "Primer::ButtonGroup": "", diff --git a/static/constants.json b/static/constants.json index b4842f1139..4fbbd3fe64 100644 --- a/static/constants.json +++ b/static/constants.json @@ -265,6 +265,22 @@ "image" ] }, + "Primer::Beta::BorderBox": { + "DEFAULT_PADDING": "default", + "DEFAULT_ROW_SCHEME": "default", + "PADDING_MAPPINGS": { + "default": "", + "condensed": "Box--condensed", + "spacious": "Box--spacious" + }, + "PADDING_SUGGESTION": "Perhaps you could consider using :padding options of default, condensed, and spacious?", + "ROW_SCHEME_MAPPINGS": { + "default": "", + "neutral": "Box-row--gray", + "info": "Box-row--blue", + "warning": "Box-row--yellow" + } + }, "Primer::Beta::Breadcrumbs": { "ARGS_DENYLIST": { "[:p, :pt, :pb, :pr, :pl, :px, :py]": "Padding system arguments are not allowed on Breadcrumbs. Consider using margins instead.", @@ -298,22 +314,6 @@ }, "Primer::BlankslateComponent": { }, - "Primer::BorderBoxComponent": { - "DEFAULT_PADDING": "default", - "DEFAULT_ROW_SCHEME": "default", - "PADDING_MAPPINGS": { - "default": "", - "condensed": "Box--condensed", - "spacious": "Box--spacious" - }, - "PADDING_SUGGESTION": "Perhaps you could consider using :padding options of default, condensed, and spacious?", - "ROW_SCHEME_MAPPINGS": { - "default": "", - "neutral": "Box-row--gray", - "info": "Box-row--blue", - "warning": "Box-row--yellow" - } - }, "Primer::BoxComponent": { }, "Primer::ButtonComponent": { diff --git a/static/statuses.json b/static/statuses.json index 0e3178a6f1..51ae612253 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -18,6 +18,7 @@ "Primer::Beta::AvatarStack": "beta", "Primer::Beta::BaseButton": "beta", "Primer::Beta::Blankslate": "beta", + "Primer::Beta::BorderBox": "beta", "Primer::Beta::Breadcrumbs": "beta", "Primer::Beta::Breadcrumbs::Item": "alpha", "Primer::Beta::Flash": "beta", @@ -25,7 +26,6 @@ "Primer::Beta::Truncate": "beta", "Primer::Beta::Truncate::TruncateText": "alpha", "Primer::BlankslateComponent": "deprecated", - "Primer::BorderBoxComponent": "beta", "Primer::BoxComponent": "stable", "Primer::ButtonComponent": "beta", "Primer::ButtonGroup": "beta", diff --git a/stories/primer/border_box_component_stories.rb b/stories/primer/beta/border_box_stories.rb similarity index 98% rename from stories/primer/border_box_component_stories.rb rename to stories/primer/beta/border_box_stories.rb index 5559ca62da..43af00ba59 100644 --- a/stories/primer/border_box_component_stories.rb +++ b/stories/primer/beta/border_box_stories.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "primer/beta/border_box" + class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories layout "storybook_preview" diff --git a/test/components/beta/border_box_test.rb b/test/components/beta/border_box_test.rb new file mode 100644 index 0000000000..472fb1ae60 --- /dev/null +++ b/test/components/beta/border_box_test.rb @@ -0,0 +1,112 @@ +# frozen_string_literal: true + +require "test_helper" + +class PrimerBetaBorderBoxTest < Minitest::Test + include Primer::ComponentTestHelpers + + def test_does_not_render_an_empty_box + render_inline(Primer::BorderBoxComponent.new) + + refute_selector("div.Box") + refute_selector(".Box-header") + refute_selector(".Box-body") + refute_selector(".Box-row") + refute_selector(".Box-footer") + end + + def test_renders_header + render_inline(Primer::BorderBoxComponent.new) do |component| + component.header { "Header" } + end + + assert_selector("div.Box-header", text: "Header") + end + + def test_renders_body + render_inline(Primer::BorderBoxComponent.new) do |component| + component.body { "Body" } + end + + assert_selector("div.Box-body", text: "Body") + end + + def test_renders_footer + render_inline(Primer::BorderBoxComponent.new) do |component| + component.footer { "Footer" } + end + + assert_selector("div.Box-footer", text: "Footer") + end + + def test_renders_multiple_rows + render_inline(Primer::BorderBoxComponent.new) do |component| + component.row { "First" } + component.row { "Second" } + component.row { "Third" } + end + + assert_selector("ul", count: 1) + assert_selector("li.Box-row", count: 3) + end + + def test_renders_condensed + render_inline(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| + component.body { "Body" } + end + + assert_selector("div.Box.Box--condensed") + end + + def test_renders_spacious + render_inline(Primer::BorderBoxComponent.new(padding: :spacious)) do |component| + component.body { "Body" } + end + + assert_selector("div.Box.Box--spacious") + end + + def test_status + assert_component_state(Primer::BorderBoxComponent, :beta) + end + + def test_restricts_allowed_system_arguments + with_raise_on_invalid_options(true) do + error = assert_raises(ArgumentError) do + render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + component.body { "Body" } + end + end + + assert_includes(error.message, "Perhaps you could consider using") + end + end + + def test_strips_denied_system_arguments + with_raise_on_invalid_options(false) do + render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + component.body { "Body" } + end + end + + refute_selector(".p-4") + end + + def test_renders_row_with_schemes + { neutral: "gray", info: "blue", warning: "yellow" }.each_pair do |scheme, color| + render_inline(Primer::BorderBoxComponent.new) do |component| + component.row(scheme: scheme) { "Row, row, row your boat" } + end + + assert_selector(".Box .Box-row--#{color}") + end + end + + def test_renders_row_with_default_scheme + render_inline(Primer::BorderBoxComponent.new) do |component| + component.row { "Row, row, row your boat" } + end + + assert_selector(".Box .Box-row") + end +end From 4b806c69ebbe89841106439e8f84f1c50e7c741f Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Mon, 1 Aug 2022 12:02:58 -0500 Subject: [PATCH 02/16] update all references --- app/components/primer/beta/border_box.rb | 12 ++++------ app/components/primer/icon_button.rb | 4 ++-- .../cop/primer/component_name_migration.rb | 2 +- lib/tasks/docs.rake | 2 +- stories/primer/beta/border_box_stories.rb | 14 +++++------ test/components/beta/border_box_test.rb | 24 +++++++++---------- test/components/border_box_component_test.rb | 24 +++++++++---------- test/components/component_test.rb | 2 +- 8 files changed, 41 insertions(+), 43 deletions(-) diff --git a/app/components/primer/beta/border_box.rb b/app/components/primer/beta/border_box.rb index cc9908f9b3..6970f5e68f 100644 --- a/app/components/primer/beta/border_box.rb +++ b/app/components/primer/beta/border_box.rb @@ -57,7 +57,7 @@ class BorderBox < Primer::Component # Use Rows to add rows with borders and maintain the same padding. # - # @param scheme [Symbol] Color scheme. <%= one_of(Primer::BorderBoxComponent::ROW_SCHEME_MAPPINGS.keys) %> + # @param scheme [Symbol] Color scheme. <%= one_of(Primer::Beta::BorderBox::ROW_SCHEME_MAPPINGS.keys) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> renders_many :rows, lambda { |scheme: DEFAULT_ROW_SCHEME, **system_arguments| system_arguments[:tag] = :li @@ -71,7 +71,7 @@ class BorderBox < Primer::Component } # @example Header with title, body, rows, and footer - # <%= render(Primer::BorderBoxComponent.new) do |component| %> + # <%= render(Primer::Beta::BorderBox.new) do |component| %> # <% component.header do |h| %> # <% h.title(tag: :h2) do %> # Header @@ -94,7 +94,7 @@ class BorderBox < Primer::Component # <% end %> # # @example Padding density - # <%= render(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| %> + # <%= render(Primer::Beta::BorderBox.new(padding: :condensed)) do |component| %> # <% component.header do %> # Header # <% end %> @@ -110,7 +110,7 @@ class BorderBox < Primer::Component # <% end %> # # @example Row colors - # <%= render(Primer::BorderBoxComponent.new) do |component| %> + # <%= render(Primer::Beta::BorderBox.new) do |component| %> # <% component.row do %> # Default # <% end %> @@ -125,7 +125,7 @@ class BorderBox < Primer::Component # <% end %> # <% end %> # - # @param padding [Symbol] <%= one_of(Primer::BorderBoxComponent::PADDING_MAPPINGS.keys) %> + # @param padding [Symbol] <%= one_of(Primer::Beta::BorderBox::PADDING_MAPPINGS.keys) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize(padding: DEFAULT_PADDING, **system_arguments) @system_arguments = deny_tag_argument(**system_arguments) @@ -145,5 +145,3 @@ def render? end end end - -Primer::BorderBoxComponent = Primer::Beta::BorderBox diff --git a/app/components/primer/icon_button.rb b/app/components/primer/icon_button.rb index 6de530c259..552793755c 100644 --- a/app/components/primer/icon_button.rb +++ b/app/components/primer/icon_button.rb @@ -29,7 +29,7 @@ class IconButton < Primer::Component # # @example In a BorderBox # - # <%= render(Primer::BorderBoxComponent.new) do |component| %> + # <%= render(Primer::Beta::BorderBox.new) do |component| %> # <% component.body do %> # <%= render(Primer::Beta::Text.new(pr: 2)) { "Body" } %> # <%= render(Primer::IconButton.new(icon: :pencil, box: true, "aria-label": "Edit")) %> @@ -40,7 +40,7 @@ class IconButton < Primer::Component # @param icon [String] Name of <%= link_to_octicons %> to use. # @param tag [Symbol] <%= one_of(Primer::Beta::BaseButton::TAG_OPTIONS) %> # @param type [Symbol] <%= one_of(Primer::Beta::BaseButton::TYPE_OPTIONS) %> - # @param box [Boolean] Whether the button is in a <%= link_to_component(Primer::BorderBoxComponent) %>. If `true`, the button will have the `Box-btn-octicon` class. + # @param box [Boolean] Whether the button is in a <%= link_to_component(Primer::Beta::BorderBox) %>. If `true`, the button will have the `Box-btn-octicon` class. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize(icon:, scheme: DEFAULT_SCHEME, box: false, **system_arguments) @icon = icon diff --git a/lib/rubocop/cop/primer/component_name_migration.rb b/lib/rubocop/cop/primer/component_name_migration.rb index 286bd6b48b..faf51d4820 100644 --- a/lib/rubocop/cop/primer/component_name_migration.rb +++ b/lib/rubocop/cop/primer/component_name_migration.rb @@ -15,7 +15,7 @@ module Primer # Primer::Beta::ComponentName.new() class ComponentNameMigration < BaseCop DEPRECATIONS = { - "Primer::BorderBoxComponent" => "Primer::Beta::BorderBox", + "Primer::Beta::BorderBox" => "Primer::Beta::BorderBox", "Primer::BaseButton" => "Primer::Beta::BaseButton", "Primer::TestComponent" => "Primer::Beta::Test" }.freeze diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index 0d4ccc2b65..f3bf861101 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -43,7 +43,7 @@ namespace :docs do Primer::Beta::AvatarStack, Primer::Beta::BaseButton, Primer::Beta::Blankslate, - Primer::BorderBoxComponent, + Primer::Beta::BorderBox, Primer::BoxComponent, Primer::Beta::Breadcrumbs, Primer::ButtonComponent, diff --git a/stories/primer/beta/border_box_stories.rb b/stories/primer/beta/border_box_stories.rb index 43af00ba59..ae7ca65c0f 100644 --- a/stories/primer/beta/border_box_stories.rb +++ b/stories/primer/beta/border_box_stories.rb @@ -2,12 +2,12 @@ require "primer/beta/border_box" -class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories +class Primer::Beta::BorderBoxStories < ViewComponent::Storybook::Stories layout "storybook_preview" story(:full_box) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| @@ -22,7 +22,7 @@ class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories story(:header) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| @@ -32,7 +32,7 @@ class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories story(:header_title) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| @@ -44,7 +44,7 @@ class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories story(:body) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| @@ -54,7 +54,7 @@ class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories story(:footer) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| @@ -64,7 +64,7 @@ class Primer::BorderBoxComponentStories < ViewComponent::Storybook::Stories story(:rows) do controls do - select(:padding, Primer::BorderBoxComponent::PADDING_MAPPINGS.keys, Primer::BorderBoxComponent::DEFAULT_PADDING) + select(:padding, Primer::Beta::BorderBox::PADDING_MAPPINGS.keys, Primer::Beta::BorderBox::DEFAULT_PADDING) end content do |component| diff --git a/test/components/beta/border_box_test.rb b/test/components/beta/border_box_test.rb index 472fb1ae60..e8556a82f6 100644 --- a/test/components/beta/border_box_test.rb +++ b/test/components/beta/border_box_test.rb @@ -6,7 +6,7 @@ class PrimerBetaBorderBoxTest < Minitest::Test include Primer::ComponentTestHelpers def test_does_not_render_an_empty_box - render_inline(Primer::BorderBoxComponent.new) + render_inline(Primer::Beta::BorderBox.new) refute_selector("div.Box") refute_selector(".Box-header") @@ -16,7 +16,7 @@ def test_does_not_render_an_empty_box end def test_renders_header - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.header { "Header" } end @@ -24,7 +24,7 @@ def test_renders_header end def test_renders_body - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.body { "Body" } end @@ -32,7 +32,7 @@ def test_renders_body end def test_renders_footer - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.footer { "Footer" } end @@ -40,7 +40,7 @@ def test_renders_footer end def test_renders_multiple_rows - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row { "First" } component.row { "Second" } component.row { "Third" } @@ -51,7 +51,7 @@ def test_renders_multiple_rows end def test_renders_condensed - render_inline(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| + render_inline(Primer::Beta::BorderBox.new(padding: :condensed)) do |component| component.body { "Body" } end @@ -59,7 +59,7 @@ def test_renders_condensed end def test_renders_spacious - render_inline(Primer::BorderBoxComponent.new(padding: :spacious)) do |component| + render_inline(Primer::Beta::BorderBox.new(padding: :spacious)) do |component| component.body { "Body" } end @@ -67,13 +67,13 @@ def test_renders_spacious end def test_status - assert_component_state(Primer::BorderBoxComponent, :beta) + assert_component_state(Primer::Beta::BorderBox, :beta) end def test_restricts_allowed_system_arguments with_raise_on_invalid_options(true) do error = assert_raises(ArgumentError) do - render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| component.body { "Body" } end end @@ -84,7 +84,7 @@ def test_restricts_allowed_system_arguments def test_strips_denied_system_arguments with_raise_on_invalid_options(false) do - render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| component.body { "Body" } end end @@ -94,7 +94,7 @@ def test_strips_denied_system_arguments def test_renders_row_with_schemes { neutral: "gray", info: "blue", warning: "yellow" }.each_pair do |scheme, color| - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row(scheme: scheme) { "Row, row, row your boat" } end @@ -103,7 +103,7 @@ def test_renders_row_with_schemes end def test_renders_row_with_default_scheme - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row { "Row, row, row your boat" } end diff --git a/test/components/border_box_component_test.rb b/test/components/border_box_component_test.rb index d8780c5c0e..5736c397c5 100644 --- a/test/components/border_box_component_test.rb +++ b/test/components/border_box_component_test.rb @@ -6,7 +6,7 @@ class PrimerBorderBoxComponentTest < Minitest::Test include Primer::ComponentTestHelpers def test_does_not_render_an_empty_box - render_inline(Primer::BorderBoxComponent.new) + render_inline(Primer::Beta::BorderBox.new) refute_selector("div.Box") refute_selector(".Box-header") @@ -16,7 +16,7 @@ def test_does_not_render_an_empty_box end def test_renders_header - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.header { "Header" } end @@ -24,7 +24,7 @@ def test_renders_header end def test_renders_body - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.body { "Body" } end @@ -32,7 +32,7 @@ def test_renders_body end def test_renders_footer - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.footer { "Footer" } end @@ -40,7 +40,7 @@ def test_renders_footer end def test_renders_multiple_rows - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row { "First" } component.row { "Second" } component.row { "Third" } @@ -51,7 +51,7 @@ def test_renders_multiple_rows end def test_renders_condensed - render_inline(Primer::BorderBoxComponent.new(padding: :condensed)) do |component| + render_inline(Primer::Beta::BorderBox.new(padding: :condensed)) do |component| component.body { "Body" } end @@ -59,7 +59,7 @@ def test_renders_condensed end def test_renders_spacious - render_inline(Primer::BorderBoxComponent.new(padding: :spacious)) do |component| + render_inline(Primer::Beta::BorderBox.new(padding: :spacious)) do |component| component.body { "Body" } end @@ -67,13 +67,13 @@ def test_renders_spacious end def test_status - assert_component_state(Primer::BorderBoxComponent, :beta) + assert_component_state(Primer::Beta::BorderBox, :beta) end def test_restricts_allowed_system_arguments with_raise_on_invalid_options(true) do error = assert_raises(ArgumentError) do - render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| component.body { "Body" } end end @@ -84,7 +84,7 @@ def test_restricts_allowed_system_arguments def test_strips_denied_system_arguments with_raise_on_invalid_options(false) do - render_inline(Primer::BorderBoxComponent.new(p: 4)) do |component| + render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| component.body { "Body" } end end @@ -94,7 +94,7 @@ def test_strips_denied_system_arguments def test_renders_row_with_schemes { neutral: "gray", info: "blue", warning: "yellow" }.each_pair do |scheme, color| - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row(scheme: scheme) { "Row, row, row your boat" } end @@ -103,7 +103,7 @@ def test_renders_row_with_schemes end def test_renders_row_with_default_scheme - render_inline(Primer::BorderBoxComponent.new) do |component| + render_inline(Primer::Beta::BorderBox.new) do |component| component.row { "Row, row, row your boat" } end diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 152d4a374f..e0ca6f2aee 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -34,7 +34,7 @@ class PrimerComponentTest < Minitest::Test [Primer::Beta::Blankslate, {}, proc { |component| component.heading(tag: :h2) { "Foo" } }], - [Primer::BorderBoxComponent, {}, proc { |component| component.header { "Foo" } }], + [Primer::Beta::BorderBox, {}, proc { |component| component.header { "Foo" } }], [Primer::BoxComponent, {}], [Primer::Beta::Breadcrumbs, {}, proc { |component| component.item(href: "/") { "Foo" } }], [Primer::ButtonComponent, {}, proc { "Button" }], From b032cfa8840c6a1faa0639abcce2c39e98bba611 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Mon, 1 Aug 2022 12:03:25 -0500 Subject: [PATCH 03/16] add deprecated border box component --- app/components/primer/border_box_component.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 app/components/primer/border_box_component.rb diff --git a/app/components/primer/border_box_component.rb b/app/components/primer/border_box_component.rb new file mode 100644 index 0000000000..12eb98a1be --- /dev/null +++ b/app/components/primer/border_box_component.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module Primer + class BorderBoxComponent < Primer::Beta::BorderBox + status :deprecated + end +end From 7924933ece8d54c3190d1051a4d9475f2d7a77cb Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Mon, 1 Aug 2022 12:21:21 -0500 Subject: [PATCH 04/16] deprecate references to beta:borderboxcomponent --- .../linters/helpers/deprecated_components_helpers.rb | 1 + static/audited_at.json | 1 + static/constants.json | 5 ++++- static/statuses.json | 1 + test/components/component_test.rb | 7 ++++++- test/rubocop/deprecated_components_test.rb | 3 ++- 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb b/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb index de8b89917d..1cf872f596 100644 --- a/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +++ b/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb @@ -10,6 +10,7 @@ module DeprecatedComponentsHelpers "Primer::Alpha::AutoComplete::Item" => "Primer::Beta::AutoComplete::Item", "Primer::Alpha::AutoComplete" => "Primer::Beta::AutoComplete", "Primer::BlankslateComponent" => "Primer::Beta::Blankslate", + "Primer::BorderBoxComponent" => "Primer::Beta::BorderBox", "Primer::DropdownMenuComponent" => nil, "Primer::Tooltip" => "Primer::Alpha::Tooltip", "Primer::FlexComponent" => nil, diff --git a/static/audited_at.json b/static/audited_at.json index f56c2dbcad..5f5dcb5b7a 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -26,6 +26,7 @@ "Primer::Beta::Truncate": "", "Primer::Beta::Truncate::TruncateText": "", "Primer::BlankslateComponent": "", + "Primer::BorderBoxComponent": "", "Primer::BoxComponent": "", "Primer::ButtonComponent": "", "Primer::ButtonGroup": "", diff --git a/static/constants.json b/static/constants.json index 4fbbd3fe64..89204f3615 100644 --- a/static/constants.json +++ b/static/constants.json @@ -314,6 +314,8 @@ }, "Primer::BlankslateComponent": { }, + "Primer::BorderBoxComponent": { + }, "Primer::BoxComponent": { }, "Primer::ButtonComponent": { @@ -395,7 +397,8 @@ } }, "Primer::Dropdown": { - "Menu": "Primer::Dropdown::Menu" + "Menu": "Primer::Dropdown::Menu", + "MenuTest": "Primer::Dropdown::MenuTest" }, "Primer::Dropdown::Menu": { "AS_DEFAULT": "default", diff --git a/static/statuses.json b/static/statuses.json index 51ae612253..d5111a5337 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -26,6 +26,7 @@ "Primer::Beta::Truncate": "beta", "Primer::Beta::Truncate::TruncateText": "alpha", "Primer::BlankslateComponent": "deprecated", + "Primer::BorderBoxComponent": "deprecated", "Primer::BoxComponent": "stable", "Primer::ButtonComponent": "beta", "Primer::ButtonGroup": "beta", diff --git a/test/components/component_test.rb b/test/components/component_test.rb index e0ca6f2aee..50446a9269 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -85,7 +85,12 @@ class PrimerComponentTest < Minitest::Test ].freeze def test_registered_components - ignored_components = ["Primer::Component", "Primer::OcticonsSymbolComponent", "Primer::Content"] + ignored_components = [ + "Primer::Component", + "Primer::OcticonsSymbolComponent", + "Primer::Content", + "Primer::BorderBoxComponent" + ] primer_component_files_count = Dir["app/components/**/*.rb"].count assert_equal primer_component_files_count, COMPONENTS_WITH_ARGS.length + ignored_components.count, "Primer component added. Please update this test with an entry for your new component <3" diff --git a/test/rubocop/deprecated_components_test.rb b/test/rubocop/deprecated_components_test.rb index da36ad047d..b55395d96a 100644 --- a/test/rubocop/deprecated_components_test.rb +++ b/test/rubocop/deprecated_components_test.rb @@ -28,9 +28,10 @@ def test_raises_offense_if_calling_legacy_component Primer::Tooltip.new Primer::BlankslateComponent.new Primer::FlexComponent.new + Primer::BorderBoxComponent.new RUBY - assert_equal 3, cop.offenses.count + assert_equal 4, cop.offenses.count end def test_raises_offense_if_calling_legacy_component_with_args From 0f454ead824f18276e37686b43833a620e29d70e Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Mon, 1 Aug 2022 17:30:49 +0000 Subject: [PATCH 05/16] docs: build docs --- static/constants.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/static/constants.json b/static/constants.json index 89204f3615..7811a3aa89 100644 --- a/static/constants.json +++ b/static/constants.json @@ -397,8 +397,7 @@ } }, "Primer::Dropdown": { - "Menu": "Primer::Dropdown::Menu", - "MenuTest": "Primer::Dropdown::MenuTest" + "Menu": "Primer::Dropdown::Menu" }, "Primer::Dropdown::Menu": { "AS_DEFAULT": "default", From 0aeeb7425a1dfe18367eefd0888a9141639e8985 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Mon, 1 Aug 2022 12:45:56 -0500 Subject: [PATCH 06/16] moving border box header into beta folder --- app/components/primer/beta/border_box.rb | 2 +- .../border_box/header.html.erb | 0 .../{alpha => beta}/border_box/header.rb | 8 +++---- lib/tasks/docs.rake | 2 +- static/audited_at.json | 2 +- static/constants.json | 22 +++++++++---------- static/statuses.json | 2 +- .../primer/alpha/border_box/header_stories.rb | 2 +- test/components/component_test.rb | 2 +- .../primer/alpha/border_box/header_test.rb | 6 ++--- 10 files changed, 24 insertions(+), 24 deletions(-) rename app/components/primer/{alpha => beta}/border_box/header.html.erb (100%) rename app/components/primer/{alpha => beta}/border_box/header.rb (86%) diff --git a/app/components/primer/beta/border_box.rb b/app/components/primer/beta/border_box.rb index 6970f5e68f..10dfc25c10 100644 --- a/app/components/primer/beta/border_box.rb +++ b/app/components/primer/beta/border_box.rb @@ -27,7 +27,7 @@ class BorderBox < Primer::Component # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> # @accessibility # When using header.title, the recommended tag is a heading tag, such as h1, h2, h3, etc. - renders_one :header, "Primer::Alpha::BorderBox::Header" + renders_one :header, "Primer::Beta::BorderBox::Header" # Optional Body. # diff --git a/app/components/primer/alpha/border_box/header.html.erb b/app/components/primer/beta/border_box/header.html.erb similarity index 100% rename from app/components/primer/alpha/border_box/header.html.erb rename to app/components/primer/beta/border_box/header.html.erb diff --git a/app/components/primer/alpha/border_box/header.rb b/app/components/primer/beta/border_box/header.rb similarity index 86% rename from app/components/primer/alpha/border_box/header.rb rename to app/components/primer/beta/border_box/header.rb index 3bdf5588e0..21e33f4135 100644 --- a/app/components/primer/alpha/border_box/header.rb +++ b/app/components/primer/beta/border_box/header.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Primer - module Alpha + module Beta module BorderBox # `BorderBox::Header` is used inside `BorderBox` to render its header slot. # @@ -12,7 +12,7 @@ class Header < Primer::Component # Optional Title. # - # @param tag [Symbol] <%= one_of(Primer::Alpha::BorderBox::Header::TITLE_TAG_OPTIONS) %> + # @param tag [Symbol] <%= one_of(Primer::Beta::BorderBox::Header::TITLE_TAG_OPTIONS) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> renders_one :title, lambda { |tag:, **system_arguments| system_arguments[:tag] = fetch_or_fallback(TITLE_TAG_OPTIONS, tag, TITLE_TAG_FALLBACK) @@ -26,12 +26,12 @@ class Header < Primer::Component # @example default use case # - # <%= render(Primer::Alpha::BorderBox::Header.new) do %> + # <%= render(Primer::Beta::BorderBox::Header.new) do %> # Header # <% end %> # # @example with title - # <%= render(Primer::Alpha::BorderBox::Header.new) do |h| %> + # <%= render(Primer::Beta::BorderBox::Header.new) do |h| %> # <% h.title(tag: :h3) do %>I am a title<% end %> # <% end %> # diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index f3bf861101..883961b03f 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -31,7 +31,6 @@ namespace :docs do components = [ Primer::Alpha::Layout, Primer::HellipButton, - Primer::Alpha::BorderBox::Header, Primer::Image, Primer::LocalTime, Primer::OcticonSymbolsComponent, @@ -44,6 +43,7 @@ namespace :docs do Primer::Beta::BaseButton, Primer::Beta::Blankslate, Primer::Beta::BorderBox, + Primer::Beta::BorderBox::Header, Primer::BoxComponent, Primer::Beta::Breadcrumbs, Primer::ButtonComponent, diff --git a/static/audited_at.json b/static/audited_at.json index 5f5dcb5b7a..01f3cdaba3 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -1,7 +1,6 @@ { "Primer::Alpha::AutoComplete": "", "Primer::Alpha::AutoComplete::Item": "", - "Primer::Alpha::BorderBox::Header": "", "Primer::Alpha::ButtonMarketing": "", "Primer::Alpha::Layout": "", "Primer::Alpha::Layout::Main": "", @@ -19,6 +18,7 @@ "Primer::Beta::BaseButton": "", "Primer::Beta::Blankslate": "", "Primer::Beta::BorderBox": "", + "Primer::Beta::BorderBox::Header": "", "Primer::Beta::Breadcrumbs": "", "Primer::Beta::Breadcrumbs::Item": "", "Primer::Beta::Flash": "", diff --git a/static/constants.json b/static/constants.json index 89204f3615..4b21fd05a3 100644 --- a/static/constants.json +++ b/static/constants.json @@ -4,17 +4,6 @@ }, "Primer::Alpha::AutoComplete::Item": { }, - "Primer::Alpha::BorderBox::Header": { - "TITLE_TAG_FALLBACK": "h2", - "TITLE_TAG_OPTIONS": [ - "h1", - "h2", - "h3", - "h4", - "h5", - "h6" - ] - }, "Primer::Alpha::ButtonMarketing": { "DEFAULT_SCHEME": "default", "DEFAULT_TAG": "button", @@ -281,6 +270,17 @@ "warning": "Box-row--yellow" } }, + "Primer::Beta::BorderBox::Header": { + "TITLE_TAG_FALLBACK": "h2", + "TITLE_TAG_OPTIONS": [ + "h1", + "h2", + "h3", + "h4", + "h5", + "h6" + ] + }, "Primer::Beta::Breadcrumbs": { "ARGS_DENYLIST": { "[:p, :pt, :pb, :pr, :pl, :px, :py]": "Padding system arguments are not allowed on Breadcrumbs. Consider using margins instead.", diff --git a/static/statuses.json b/static/statuses.json index d5111a5337..38147ff028 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -1,7 +1,6 @@ { "Primer::Alpha::AutoComplete": "alpha", "Primer::Alpha::AutoComplete::Item": "alpha", - "Primer::Alpha::BorderBox::Header": "alpha", "Primer::Alpha::ButtonMarketing": "alpha", "Primer::Alpha::Layout": "alpha", "Primer::Alpha::Layout::Main": "alpha", @@ -19,6 +18,7 @@ "Primer::Beta::BaseButton": "beta", "Primer::Beta::Blankslate": "beta", "Primer::Beta::BorderBox": "beta", + "Primer::Beta::BorderBox::Header": "beta", "Primer::Beta::Breadcrumbs": "beta", "Primer::Beta::Breadcrumbs::Item": "alpha", "Primer::Beta::Flash": "beta", diff --git a/stories/primer/alpha/border_box/header_stories.rb b/stories/primer/alpha/border_box/header_stories.rb index 84a5674be9..414720c515 100644 --- a/stories/primer/alpha/border_box/header_stories.rb +++ b/stories/primer/alpha/border_box/header_stories.rb @@ -2,7 +2,7 @@ require "primer/alpha/border_box/header" -class Primer::Alpha::BorderBox::HeaderStories < ViewComponent::Storybook::Stories +class Primer::Beta::BorderBox::HeaderStories < ViewComponent::Storybook::Stories layout "storybook_preview" story(:default) do diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 50446a9269..652a43226f 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -12,7 +12,6 @@ class PrimerComponentTest < Minitest::Test component.sidebar(tag: :div) { "Bar" } }], [Primer::HellipButton, { "aria-label": "No action" }], - [Primer::Alpha::BorderBox::Header, {}], [Primer::Alpha::TabPanels, { label: "label" }], [Primer::Alpha::TabNav, { label: "label" }], [Primer::Alpha::UnderlinePanels, { label: "Panel label" }], @@ -35,6 +34,7 @@ class PrimerComponentTest < Minitest::Test component.heading(tag: :h2) { "Foo" } }], [Primer::Beta::BorderBox, {}, proc { |component| component.header { "Foo" } }], + [Primer::Beta::BorderBox::Header, {}], [Primer::BoxComponent, {}], [Primer::Beta::Breadcrumbs, {}, proc { |component| component.item(href: "/") { "Foo" } }], [Primer::ButtonComponent, {}, proc { "Button" }], diff --git a/test/components/primer/alpha/border_box/header_test.rb b/test/components/primer/alpha/border_box/header_test.rb index 3a1b294b99..608af1a004 100644 --- a/test/components/primer/alpha/border_box/header_test.rb +++ b/test/components/primer/alpha/border_box/header_test.rb @@ -2,17 +2,17 @@ require "test_helper" -class Primer::Alpha::BorderBox::HeaderTest < Minitest::Test +class Primer::Beta::BorderBox::HeaderTest < Minitest::Test include Primer::ComponentTestHelpers def test_renders_content - render_inline(Primer::Alpha::BorderBox::Header.new) { "Header" } + render_inline(Primer::Beta::BorderBox::Header.new) { "Header" } assert_text("Header") end def test_renders_title - render_inline(Primer::Alpha::BorderBox::Header.new) do |h| + render_inline(Primer::Beta::BorderBox::Header.new) do |h| h.title(tag: :h3) { "Title" } end From 3c87d036c5b81e194b6c3f877af8df8e33328237 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 08:34:12 -0500 Subject: [PATCH 07/16] moving header to beta folder. it's failing docs build currently --- app/components/primer/beta/border_box/header.rb | 6 ++++-- static/arguments.yml | 14 +++++++------- .../{alpha => beta}/border_box/header_stories.rb | 2 +- .../alpha => beta}/border_box/header_test.rb | 0 4 files changed, 12 insertions(+), 10 deletions(-) rename stories/primer/{alpha => beta}/border_box/header_stories.rb (88%) rename test/components/{primer/alpha => beta}/border_box/header_test.rb (100%) diff --git a/app/components/primer/beta/border_box/header.rb b/app/components/primer/beta/border_box/header.rb index 21e33f4135..26653ae71c 100644 --- a/app/components/primer/beta/border_box/header.rb +++ b/app/components/primer/beta/border_box/header.rb @@ -2,11 +2,13 @@ module Primer module Beta - module BorderBox + class BorderBox # `BorderBox::Header` is used inside `BorderBox` to render its header slot. # # @accessibility When using `header.title`, set `tag` to one of `h1`, `h2`, `h3`, etc. based on what is appropriate for the page context. <%= link_to_heading_practices %> class Header < Primer::Component + status :beta + TITLE_TAG_FALLBACK = :h2 TITLE_TAG_OPTIONS = [:h1, TITLE_TAG_FALLBACK, :h3, :h4, :h5, :h6].freeze @@ -24,7 +26,7 @@ class Header < Primer::Component Primer::BaseComponent.new(**system_arguments) } - # @example default use case + # @example Default # # <%= render(Primer::Beta::BorderBox::Header.new) do %> # Header diff --git a/static/arguments.yml b/static/arguments.yml index 5fa820f9fc..d02ad9bd0b 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -1,11 +1,4 @@ --- -- component: BorderBoxHeader - source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/border_box/header.rb - parameters: - - name: system_arguments - type: Hash - default: N/A - description: "[System arguments](/system-arguments)" - component: ButtonMarketing source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/button_marketing.rb parameters: @@ -361,6 +354,13 @@ type: Hash default: N/A description: "[System arguments](/system-arguments)" +- component: BorderBoxHeader + source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/border_box/header.rb + parameters: + - name: system_arguments + type: Hash + default: N/A + description: "[System arguments](/system-arguments)" - component: Breadcrumbs source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/breadcrumbs.rb parameters: diff --git a/stories/primer/alpha/border_box/header_stories.rb b/stories/primer/beta/border_box/header_stories.rb similarity index 88% rename from stories/primer/alpha/border_box/header_stories.rb rename to stories/primer/beta/border_box/header_stories.rb index 414720c515..295abed050 100644 --- a/stories/primer/alpha/border_box/header_stories.rb +++ b/stories/primer/beta/border_box/header_stories.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require "primer/alpha/border_box/header" +require "primer/beta/border_box/header" class Primer::Beta::BorderBox::HeaderStories < ViewComponent::Storybook::Stories layout "storybook_preview" diff --git a/test/components/primer/alpha/border_box/header_test.rb b/test/components/beta/border_box/header_test.rb similarity index 100% rename from test/components/primer/alpha/border_box/header_test.rb rename to test/components/beta/border_box/header_test.rb From 9b8691f1b66e26b1f12505b46065d37a8224944f Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Tue, 2 Aug 2022 13:46:16 +0000 Subject: [PATCH 08/16] docs: build docs --- static/arguments.yml | 10 +++++----- static/constants.json | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/static/arguments.yml b/static/arguments.yml index c9b6f942fe..64fcfb6872 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -783,11 +783,6 @@ type: Symbol default: N/A description: One of `:button`, `:reset`, or `:submit`. - - name: box - type: Boolean - default: "`false`" - description: Whether the button is in a [BorderBox](/components/beta/borderbox). If - `true`, the button will have the `Box-btn-octicon` class. - name: aria-label type: String default: N/A @@ -803,6 +798,11 @@ type: Symbol default: "`:s`" description: One of `:e`, `:n`, `:ne`, `:nw`, `:s`, `:se`, `:sw`, or `:w`. + - name: box + type: Boolean + default: "`false`" + description: Whether the button is in a [BorderBox](/components/beta/borderbox). + If `true`, the button will have the `Box-btn-octicon` class. - name: system_arguments type: Hash default: N/A diff --git a/static/constants.json b/static/constants.json index 1d28db2906..0a6c5e5d83 100644 --- a/static/constants.json +++ b/static/constants.json @@ -259,6 +259,7 @@ "Primer::Beta::BorderBox": { "DEFAULT_PADDING": "default", "DEFAULT_ROW_SCHEME": "default", + "Header": "Primer::Beta::BorderBox::Header", "PADDING_MAPPINGS": { "default": "", "condensed": "Box--condensed", From f9bbe3324b07a40d290435f95a628f516a4f7fed Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 09:23:53 -0500 Subject: [PATCH 09/16] updated site nav link for border box --- docs/src/@primer/gatsby-theme-doctocat/nav.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/@primer/gatsby-theme-doctocat/nav.yml b/docs/src/@primer/gatsby-theme-doctocat/nav.yml index b75a47624f..99e9e0d3ad 100644 --- a/docs/src/@primer/gatsby-theme-doctocat/nav.yml +++ b/docs/src/@primer/gatsby-theme-doctocat/nav.yml @@ -26,7 +26,7 @@ - title: Blankslate url: "/components/beta/blankslate" - title: BorderBox - url: "/components/borderbox" + url: "/components/beta/borderbox" - title: Box url: "/components/box" - title: Breadcrumbs From 8d10b45ae21721f9648eef01df569e7ce06372c6 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 09:24:24 -0500 Subject: [PATCH 10/16] updating arguments file --- static/arguments.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/static/arguments.yml b/static/arguments.yml index c9b6f942fe..64fcfb6872 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -783,11 +783,6 @@ type: Symbol default: N/A description: One of `:button`, `:reset`, or `:submit`. - - name: box - type: Boolean - default: "`false`" - description: Whether the button is in a [BorderBox](/components/beta/borderbox). If - `true`, the button will have the `Box-btn-octicon` class. - name: aria-label type: String default: N/A @@ -803,6 +798,11 @@ type: Symbol default: "`:s`" description: One of `:e`, `:n`, `:ne`, `:nw`, `:s`, `:se`, `:sw`, or `:w`. + - name: box + type: Boolean + default: "`false`" + description: Whether the button is in a [BorderBox](/components/beta/borderbox). + If `true`, the button will have the `Box-btn-octicon` class. - name: system_arguments type: Hash default: N/A From 385425d8afaa6e406cd1fd77b39fcd38000b12bc Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 09:39:09 -0500 Subject: [PATCH 11/16] deleted old border box component test file --- test/components/border_box_component_test.rb | 112 ------------------- 1 file changed, 112 deletions(-) delete mode 100644 test/components/border_box_component_test.rb diff --git a/test/components/border_box_component_test.rb b/test/components/border_box_component_test.rb deleted file mode 100644 index 5736c397c5..0000000000 --- a/test/components/border_box_component_test.rb +++ /dev/null @@ -1,112 +0,0 @@ -# frozen_string_literal: true - -require "test_helper" - -class PrimerBorderBoxComponentTest < Minitest::Test - include Primer::ComponentTestHelpers - - def test_does_not_render_an_empty_box - render_inline(Primer::Beta::BorderBox.new) - - refute_selector("div.Box") - refute_selector(".Box-header") - refute_selector(".Box-body") - refute_selector(".Box-row") - refute_selector(".Box-footer") - end - - def test_renders_header - render_inline(Primer::Beta::BorderBox.new) do |component| - component.header { "Header" } - end - - assert_selector("div.Box-header", text: "Header") - end - - def test_renders_body - render_inline(Primer::Beta::BorderBox.new) do |component| - component.body { "Body" } - end - - assert_selector("div.Box-body", text: "Body") - end - - def test_renders_footer - render_inline(Primer::Beta::BorderBox.new) do |component| - component.footer { "Footer" } - end - - assert_selector("div.Box-footer", text: "Footer") - end - - def test_renders_multiple_rows - render_inline(Primer::Beta::BorderBox.new) do |component| - component.row { "First" } - component.row { "Second" } - component.row { "Third" } - end - - assert_selector("ul", count: 1) - assert_selector("li.Box-row", count: 3) - end - - def test_renders_condensed - render_inline(Primer::Beta::BorderBox.new(padding: :condensed)) do |component| - component.body { "Body" } - end - - assert_selector("div.Box.Box--condensed") - end - - def test_renders_spacious - render_inline(Primer::Beta::BorderBox.new(padding: :spacious)) do |component| - component.body { "Body" } - end - - assert_selector("div.Box.Box--spacious") - end - - def test_status - assert_component_state(Primer::Beta::BorderBox, :beta) - end - - def test_restricts_allowed_system_arguments - with_raise_on_invalid_options(true) do - error = assert_raises(ArgumentError) do - render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| - component.body { "Body" } - end - end - - assert_includes(error.message, "Perhaps you could consider using") - end - end - - def test_strips_denied_system_arguments - with_raise_on_invalid_options(false) do - render_inline(Primer::Beta::BorderBox.new(p: 4)) do |component| - component.body { "Body" } - end - end - - refute_selector(".p-4") - end - - def test_renders_row_with_schemes - { neutral: "gray", info: "blue", warning: "yellow" }.each_pair do |scheme, color| - render_inline(Primer::Beta::BorderBox.new) do |component| - component.row(scheme: scheme) { "Row, row, row your boat" } - end - - assert_selector(".Box .Box-row--#{color}") - end - end - - def test_renders_row_with_default_scheme - render_inline(Primer::Beta::BorderBox.new) do |component| - component.row { "Row, row, row your boat" } - end - - assert_selector(".Box .Box-row") - end -end From b0e8c10985e2b7f304b47adec58d8d8657b34d73 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 09:42:47 -0500 Subject: [PATCH 12/16] correcting name migration for border box component --- lib/rubocop/cop/primer/component_name_migration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rubocop/cop/primer/component_name_migration.rb b/lib/rubocop/cop/primer/component_name_migration.rb index faf51d4820..286bd6b48b 100644 --- a/lib/rubocop/cop/primer/component_name_migration.rb +++ b/lib/rubocop/cop/primer/component_name_migration.rb @@ -15,7 +15,7 @@ module Primer # Primer::Beta::ComponentName.new() class ComponentNameMigration < BaseCop DEPRECATIONS = { - "Primer::Beta::BorderBox" => "Primer::Beta::BorderBox", + "Primer::BorderBoxComponent" => "Primer::Beta::BorderBox", "Primer::BaseButton" => "Primer::Beta::BaseButton", "Primer::TestComponent" => "Primer::Beta::Test" }.freeze From 3bfc279ddfb63b2cbc040c7aad977413615570da Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 13:49:47 -0500 Subject: [PATCH 13/16] don't need a status for a sub-component --- app/components/primer/beta/border_box/header.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/components/primer/beta/border_box/header.rb b/app/components/primer/beta/border_box/header.rb index 26653ae71c..00edcc3d42 100644 --- a/app/components/primer/beta/border_box/header.rb +++ b/app/components/primer/beta/border_box/header.rb @@ -7,8 +7,6 @@ class BorderBox # # @accessibility When using `header.title`, set `tag` to one of `h1`, `h2`, `h3`, etc. based on what is appropriate for the page context. <%= link_to_heading_practices %> class Header < Primer::Component - status :beta - TITLE_TAG_FALLBACK = :h2 TITLE_TAG_OPTIONS = [:h1, TITLE_TAG_FALLBACK, :h3, :h4, :h5, :h6].freeze From 3b7cd5ed37a77507bbc68081fadc3b3e8a6113f4 Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 13:50:42 -0500 Subject: [PATCH 14/16] added changeset --- .changeset/moody-readers-punch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/moody-readers-punch.md diff --git a/.changeset/moody-readers-punch.md b/.changeset/moody-readers-punch.md new file mode 100644 index 0000000000..c68a1e4a43 --- /dev/null +++ b/.changeset/moody-readers-punch.md @@ -0,0 +1,5 @@ +--- +'@primer/view-components': patch +--- + +migrating `Primer::BorderBoxComponent` to `Primer::Beta::BorderBox` From c5fbc9b37ddffd76c7608600d59e52418e95e3ac Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Tue, 2 Aug 2022 18:51:44 +0000 Subject: [PATCH 15/16] docs: build docs --- static/statuses.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/statuses.json b/static/statuses.json index 5e6f9f2507..78d9e87c63 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -19,7 +19,7 @@ "Primer::Beta::BaseButton": "beta", "Primer::Beta::Blankslate": "beta", "Primer::Beta::BorderBox": "beta", - "Primer::Beta::BorderBox::Header": "beta", + "Primer::Beta::BorderBox::Header": "alpha", "Primer::Beta::Breadcrumbs": "beta", "Primer::Beta::Breadcrumbs::Item": "alpha", "Primer::Beta::Flash": "beta", From 1b425f9f6f136d92a39d3d12d2fad75f90aabfdb Mon Sep 17 00:00:00 2001 From: River Lynn Parrhesia Bailey Date: Tue, 2 Aug 2022 15:16:21 -0500 Subject: [PATCH 16/16] fixing missing comma from bad merge --- test/components/component_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 8a2d61cbbb..e9685f82cf 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -89,7 +89,7 @@ def test_registered_components "Primer::Component", "Primer::OcticonsSymbolComponent", "Primer::Content", - "Primer::BlankslateComponent" + "Primer::BlankslateComponent", "Primer::BorderBoxComponent" ]