diff --git a/.changeset/tasty-needles-deliver.md b/.changeset/tasty-needles-deliver.md new file mode 100644 index 0000000000..31cffbe47c --- /dev/null +++ b/.changeset/tasty-needles-deliver.md @@ -0,0 +1,5 @@ +--- +'@primer/view-components': patch +--- + +migrating Primer::LabelComponent to Primer::Beta::Label diff --git a/app/components/primer/alpha/action_list/item.rb b/app/components/primer/alpha/action_list/item.rb index d373408a91..16936dcdce 100644 --- a/app/components/primer/alpha/action_list/item.rb +++ b/app/components/primer/alpha/action_list/item.rb @@ -61,7 +61,7 @@ class Item < Primer::Component # # To render an icon, call the `with_leading_visual_icon` method, which accepts the arguments accepted by <%= link_to_component(Primer::OcticonComponent) %>. # - # To render a label, call the `with_leading_visual_label` method, which accepts the arguments accepted by <%= link_to_component(Primer::LabelComponent) %>. + # To render a label, call the `with_leading_visual_label` method, which accepts the arguments accepted by <%= link_to_component(Primer::Beta::Label) %>. # # To render a counter, call the `with_leading_visual_counter` method, which accepts the arguments accepted by <%= link_to_component(Primer::CounterComponent) %>. # @@ -71,7 +71,7 @@ class Item < Primer::Component # ``` renders_one :trailing_visual, types: { icon: Primer::OcticonComponent, - label: Primer::LabelComponent, + label: Primer::Beta::Label, counter: Primer::CounterComponent, text: ->(text) { text } } diff --git a/app/components/primer/beta/auto_complete/item.rb b/app/components/primer/beta/auto_complete/item.rb index 2258d9f99e..501d288f42 100644 --- a/app/components/primer/beta/auto_complete/item.rb +++ b/app/components/primer/beta/auto_complete/item.rb @@ -22,10 +22,10 @@ class Item < Primer::Component # The trailing visual rendered after the link. # - # @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::OcticonComponent) %>, <%= link_to_component(Primer::LabelComponent) %>, or <%= link_to_component(Primer::Beta::Counter) %> + # @param kwargs [Hash] The arguments accepted by <%= link_to_component(Primer::OcticonComponent) %>, <%= link_to_component(Primer::Beta::Label) %>, or <%= link_to_component(Primer::Beta::Counter) %> renders_one :trailing_visual, types: { icon: Primer::OcticonComponent, - label: Primer::LabelComponent, + label: Primer::Beta::Label, counter: Primer::Beta::Counter } diff --git a/app/components/primer/beta/button.rb b/app/components/primer/beta/button.rb index cb2dc13bd6..40cda163c0 100644 --- a/app/components/primer/beta/button.rb +++ b/app/components/primer/beta/button.rb @@ -57,7 +57,7 @@ class Button < Primer::Component # @param system_arguments [Hash] Same arguments as <%= link_to_component(Primer::Beta::Counter) %>. renders_one :trailing_visual, types: { icon: Primer::OcticonComponent, - label: Primer::LabelComponent, + label: Primer::Beta::Label, counter: Primer::CounterComponent } diff --git a/app/components/primer/beta/label.rb b/app/components/primer/beta/label.rb new file mode 100644 index 0000000000..53d7c0e6b7 --- /dev/null +++ b/app/components/primer/beta/label.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +module Primer + module Beta + # Use `Label` to add contextual metadata to a design. + # + # @accessibility + # Use `aria-label` if the `Label` or the context around it don't explain the label. + class Label < Primer::Component + status :beta + + DEFAULT_TAG = :span + TAG_OPTIONS = [DEFAULT_TAG, :summary, :a, :div].freeze + + DEFAULT_SCHEME = :default + SCHEME_MAPPINGS = { + DEFAULT_SCHEME => "", + :primary => "Label--primary", + :secondary => "Label--secondary", + :accent => "Label--accent", + :success => "Label--success", + :attention => "Label--attention", + :danger => "Label--danger", + :severe => "Label--severe", + :done => "Label--done", + :sponsors => "Label--sponsors", + # deprecated + :info => "Label--info", + :warning => "Label--warning", + :orange => "Label--orange", + :purple => "Label--purple" + }.freeze + DEPRECATED_SCHEME_OPTIONS = [:info, :warning, :orange, :purple].freeze + SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze + + DEFAULT_SIZE = :medium + SIZE_MAPPINGS = { + DEFAULT_SIZE => nil, + :large => "Label--large" + }.freeze + SIZE_OPTIONS = SIZE_MAPPINGS.keys + + DEFAULT_VARIANT = :none + VARIANT_OPTIONS = [DEFAULT_VARIANT].freeze + DEPRECATED_VARIANT_OPTIONS = [:large, :inline].freeze + + INLINE_CLASS = "Label--inline" + + # @example Schemes + # <%= render(Primer::Beta::Label.new) { "Default" } %> + # <%= render(Primer::Beta::Label.new(scheme: :primary)) { "Primary" } %> + # <%= render(Primer::Beta::Label.new(scheme: :secondary)) { "Secondary" } %> + # <%= render(Primer::Beta::Label.new(scheme: :accent)) { "Accent" } %> + # <%= render(Primer::Beta::Label.new(scheme: :success)) { "Success" } %> + # <%= render(Primer::Beta::Label.new(scheme: :attention)) { "Attention" } %> + # <%= render(Primer::Beta::Label.new(scheme: :danger)) { "Danger" } %> + # <%= render(Primer::Beta::Label.new(scheme: :severe)) { "Severe" } %> + # <%= render(Primer::Beta::Label.new(scheme: :done)) { "Done" } %> + # <%= render(Primer::Beta::Label.new(scheme: :sponsors)) { "Sponsors" } %> + # + # @example Sizes + # <%= render(Primer::Beta::Label.new) { "Medium" } %> + # <%= render(Primer::Beta::Label.new(size: :large)) { "Large" } %> + # + # @example Inline + # <%= render(Primer::Beta::Label.new) { "Default" } %> + # <%= render(Primer::Beta::Label.new(inline: true)) { "Inline" } %> + # + # @param tag [Symbol] <%= one_of(Primer::Beta::Label::TAG_OPTIONS) %> + # @param scheme [Symbol] <%= one_of(Primer::Beta::Label::SCHEME_MAPPINGS.keys) %> + # @param size [Symbol] <%= one_of(Primer::Beta::Label::SIZE_OPTIONS) %> + # @param inline [Boolean] Whether or not to render this label inline. + # @param variant [Symbol] <%= one_of(Primer::Beta::Label::VARIANT_OPTIONS + Primer::Beta::Label::DEPRECATED_VARIANT_OPTIONS) %> + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + + def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, size: DEFAULT_SIZE, inline: false, variant: DEFAULT_VARIANT, **system_arguments) + @system_arguments = system_arguments + + @variant = fetch_or_fallback(VARIANT_OPTIONS, variant, nil, deprecated_values: DEPRECATED_VARIANT_OPTIONS) + @scheme = fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS) + @size = fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE) + @size = :large if @variant == :large + @inline = inline || @variant == :inline + + @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG) + @system_arguments[:classes] = class_names( + "Label", + system_arguments[:classes], + SCHEME_MAPPINGS[@scheme], + SIZE_MAPPINGS[@size], + @inline ? INLINE_CLASS : nil + ) + end + + def call + render(Primer::BaseComponent.new(**@system_arguments)) { content } + end + end + end +end diff --git a/app/components/primer/label_component.rb b/app/components/primer/label_component.rb index b79c33d1d5..532c14a6c1 100644 --- a/app/components/primer/label_component.rb +++ b/app/components/primer/label_component.rb @@ -1,98 +1,7 @@ # frozen_string_literal: true module Primer - # Use `Label` to add contextual metadata to a design. - # - # @accessibility - # Use `aria-label` if the `Label` or the context around it don't explain the label. - class LabelComponent < Primer::Component - status :beta - - DEFAULT_TAG = :span - TAG_OPTIONS = [DEFAULT_TAG, :summary, :a, :div].freeze - - DEFAULT_SCHEME = :default - SCHEME_MAPPINGS = { - DEFAULT_SCHEME => "", - :primary => "Label--primary", - :secondary => "Label--secondary", - :accent => "Label--accent", - :success => "Label--success", - :attention => "Label--attention", - :danger => "Label--danger", - :severe => "Label--severe", - :done => "Label--done", - :sponsors => "Label--sponsors", - # deprecated - :info => "Label--info", - :warning => "Label--warning", - :orange => "Label--orange", - :purple => "Label--purple" - }.freeze - DEPRECATED_SCHEME_OPTIONS = [:info, :warning, :orange, :purple].freeze - SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze - - DEFAULT_SIZE = :medium - SIZE_MAPPINGS = { - DEFAULT_SIZE => nil, - :large => "Label--large" - }.freeze - SIZE_OPTIONS = SIZE_MAPPINGS.keys - - DEFAULT_VARIANT = :none - VARIANT_OPTIONS = [DEFAULT_VARIANT].freeze - DEPRECATED_VARIANT_OPTIONS = [:large, :inline].freeze - - INLINE_CLASS = "Label--inline" - - # @example Schemes - # <%= render(Primer::LabelComponent.new) { "Default" } %> - # <%= render(Primer::LabelComponent.new(scheme: :primary)) { "Primary" } %> - # <%= render(Primer::LabelComponent.new(scheme: :secondary)) { "Secondary" } %> - # <%= render(Primer::LabelComponent.new(scheme: :accent)) { "Accent" } %> - # <%= render(Primer::LabelComponent.new(scheme: :success)) { "Success" } %> - # <%= render(Primer::LabelComponent.new(scheme: :attention)) { "Attention" } %> - # <%= render(Primer::LabelComponent.new(scheme: :danger)) { "Danger" } %> - # <%= render(Primer::LabelComponent.new(scheme: :severe)) { "Severe" } %> - # <%= render(Primer::LabelComponent.new(scheme: :done)) { "Done" } %> - # <%= render(Primer::LabelComponent.new(scheme: :sponsors)) { "Sponsors" } %> - # - # @example Sizes - # <%= render(Primer::LabelComponent.new) { "Medium" } %> - # <%= render(Primer::LabelComponent.new(size: :large)) { "Large" } %> - # - # @example Inline - # <%= render(Primer::LabelComponent.new) { "Default" } %> - # <%= render(Primer::LabelComponent.new(inline: true)) { "Inline" } %> - # - # @param tag [Symbol] <%= one_of(Primer::LabelComponent::TAG_OPTIONS) %> - # @param scheme [Symbol] <%= one_of(Primer::LabelComponent::SCHEME_MAPPINGS.keys) %> - # @param size [Symbol] <%= one_of(Primer::LabelComponent::SIZE_OPTIONS) %> - # @param inline [Boolean] Whether or not to render this label inline. - # @param variant [Symbol] <%= one_of(Primer::LabelComponent::VARIANT_OPTIONS + Primer::LabelComponent::DEPRECATED_VARIANT_OPTIONS) %> - # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - - def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, size: DEFAULT_SIZE, inline: false, variant: DEFAULT_VARIANT, **system_arguments) - @system_arguments = system_arguments - - @variant = fetch_or_fallback(VARIANT_OPTIONS, variant, nil, deprecated_values: DEPRECATED_VARIANT_OPTIONS) - @scheme = fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS) - @size = fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE) - @size = :large if @variant == :large - @inline = inline || @variant == :inline - - @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG) - @system_arguments[:classes] = class_names( - "Label", - system_arguments[:classes], - SCHEME_MAPPINGS[@scheme], - SIZE_MAPPINGS[@size], - @inline ? INLINE_CLASS : nil - ) - end - - def call - render(Primer::BaseComponent.new(**@system_arguments)) { content } - end + class LabelComponent < Primer::Beta::Label + status :deprecated end end diff --git a/docs/src/@primer/gatsby-theme-doctocat/nav.yml b/docs/src/@primer/gatsby-theme-doctocat/nav.yml index cfa4c17dc3..320e53b57c 100644 --- a/docs/src/@primer/gatsby-theme-doctocat/nav.yml +++ b/docs/src/@primer/gatsby-theme-doctocat/nav.yml @@ -64,7 +64,7 @@ - title: ImageCrop url: "/components/alpha/imagecrop" - title: Label - url: "/components/label" + url: "/components/beta/label" - title: Layout url: "/components/alpha/layout" - title: Link diff --git a/lib/primer/deprecations.rb b/lib/primer/deprecations.rb index bae7bc300a..a162265703 100644 --- a/lib/primer/deprecations.rb +++ b/lib/primer/deprecations.rb @@ -5,6 +5,7 @@ module Primer module Deprecations # If there is no alternative to suggest, set the value to nil DEPRECATED_COMPONENTS = { + "Primer::LabelComponent" => "Primer::Beta::Label", "Primer::ImageCrop" => "Primer::Alpha::ImageCrop", "Primer::Image" => "Primer::Alpha::Image", "Primer::Alpha::AutoComplete" => "Primer::Beta::AutoComplete", diff --git a/lib/primer/view_components/linters/argument_mappers/label.rb b/lib/primer/view_components/linters/argument_mappers/label.rb index 0bd6a52864..a97c2d5cc6 100644 --- a/lib/primer/view_components/linters/argument_mappers/label.rb +++ b/lib/primer/view_components/linters/argument_mappers/label.rb @@ -8,24 +8,24 @@ module ArgumentMappers # Maps classes in a label element to arguments for the Label component. class Label < Base SCHEME_MAPPINGS = Primer::ViewComponents::Constants.get( - component: "Primer::LabelComponent", + component: "Primer::Beta::Label", constant: "SCHEME_MAPPINGS", symbolize: true ).freeze SIZE_MAPPINGS = Primer::ViewComponents::Constants.get( - component: "Primer::LabelComponent", + component: "Primer::Beta::Label", constant: "SIZE_MAPPINGS", symbolize: true ).freeze DEFAULT_TAG = Primer::ViewComponents::Constants.get( - component: "Primer::LabelComponent", + component: "Primer::Beta::Label", constant: "DEFAULT_TAG" ).freeze INLINE_CLASS = Primer::ViewComponents::Constants.get( - component: "Primer::LabelComponent", + component: "Primer::Beta::Label", constant: "INLINE_CLASS" ).freeze diff --git a/lib/primer/view_components/linters/label_component_migration_counter.rb b/lib/primer/view_components/linters/label_component_migration_counter.rb index c7a6768ad9..50662d2c0c 100644 --- a/lib/primer/view_components/linters/label_component_migration_counter.rb +++ b/lib/primer/view_components/linters/label_component_migration_counter.rb @@ -11,14 +11,14 @@ class LabelComponentMigrationCounter < BaseLinter include Autocorrectable TAGS = Primer::ViewComponents::Constants.get( - component: "Primer::LabelComponent", + component: "Primer::Beta::Label", constant: "TAG_OPTIONS" ).freeze CLASSES = %w[Label].freeze - MESSAGE = "We are migrating labels to use [Primer::LabelComponent](https://primer.style/view-components/components/label), please try to use that instead of raw HTML." + MESSAGE = "We are migrating labels to use [Primer::Beta::Label](https://primer.style/view-components/components/label), please try to use that instead of raw HTML." ARGUMENT_MAPPER = ArgumentMappers::Label - COMPONENT = "Primer::LabelComponent" + COMPONENT = "Primer::Beta::Label" end end end diff --git a/lib/rubocop/cop/primer/deprecated_label_schemes.rb b/lib/rubocop/cop/primer/deprecated_label_schemes.rb index 60ee6b0946..a967d12ab8 100644 --- a/lib/rubocop/cop/primer/deprecated_label_schemes.rb +++ b/lib/rubocop/cop/primer/deprecated_label_schemes.rb @@ -9,10 +9,10 @@ module Primer # This cop ensures that components don't use deprecated `Label` schemes. # # bad - # Primer::LabelComponent.new(scheme: :info) + # Primer::Beta::Label.new(scheme: :info) # # good - # Primer::LabelComponent.new(scheme: :accent) + # Primer::Beta::Label.new(scheme: :accent) class DeprecatedLabelSchemes < BaseCop INVALID_MESSAGE = <<~STR Avoid using deprecated schemes: https://primer.style/view-components/deprecated#labelcomponent. @@ -60,7 +60,7 @@ def autocorrect(node) def label_node?(node) return if node.nil? - node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::LabelComponent" + node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::Beta::Label" end end end diff --git a/lib/rubocop/cop/primer/deprecated_label_variants.rb b/lib/rubocop/cop/primer/deprecated_label_variants.rb index c3494210a0..52ddd2be25 100644 --- a/lib/rubocop/cop/primer/deprecated_label_variants.rb +++ b/lib/rubocop/cop/primer/deprecated_label_variants.rb @@ -9,16 +9,16 @@ module Primer # This cop ensures that `LabelComponent`s don't use the old `variant` argument. # # bad - # Primer::LabelComponent.new(variant: :large) + # Primer::Beta::Label.new(variant: :large) # # good - # Primer::LabelComponent.new(size: :large) + # Primer::Beta::Label.new(size: :large) # # bad - # Primer::LabelComponent.new(variant: :inline) + # Primer::Beta::Label.new(variant: :inline) # # good - # Primer::LabelComponent.new(inline: true) + # Primer::Beta::Label.new(inline: true) class DeprecatedLabelVariants < BaseCop def on_send(node) return unless label_node?(node) @@ -63,7 +63,7 @@ def autocorrect(node) def label_node?(node) return if node.nil? - node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::LabelComponent" + node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::Beta::Label" end end end diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index 7921ba2c32..2d183f0895 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -62,7 +62,7 @@ namespace :docs do Primer::Beta::Flash, Primer::Beta::Heading, Primer::Alpha::HiddenTextExpander, - Primer::LabelComponent, + Primer::Beta::Label, Primer::LayoutComponent, Primer::LinkComponent, Primer::Markdown, diff --git a/previews/primer/beta/label_preview.rb b/previews/primer/beta/label_preview.rb new file mode 100644 index 0000000000..ccf8687b8d --- /dev/null +++ b/previews/primer/beta/label_preview.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Primer + module Beta + # @label Label + class LabelPreview < ViewComponent::Preview + # @label Default Options + # + # @param size [Symbol] select [medium, large] + # @param tag [Symbol] select [span, summary, a, div] + # @param inline [Boolean] toggle + def default(size: :medium, tag: :span, inline: false) + render(Primer::Beta::Label.new(tag: tag, size: size, inline: inline)) { "Label" } + end + + # @label Playground + # + # @param size [Symbol] select [medium, large] + # @param tag [Symbol] select [span, summary, a, div] + # @param inline [Boolean] toggle + def playground(size: :medium, tag: :span, inline: false) + render(Primer::Beta::Label.new(tag: tag, size: size, inline: inline)) { "Label" } + end + end + end +end diff --git a/previews/primer/label_component_preview.rb b/previews/primer/label_component_preview.rb deleted file mode 100644 index 6011f6c431..0000000000 --- a/previews/primer/label_component_preview.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -module Primer - # @label LabelComponent - class LabelComponentPreview < ViewComponent::Preview - # @label Default Options - # - # @param size [Symbol] select [medium, large] - # @param tag [Symbol] select [span, summary, a, div] - # @param inline [Boolean] toggle - def default(size: :medium, tag: :span, inline: false) - render(Primer::LabelComponent.new(tag: tag, size: size, inline: inline)) { "Label" } - end - - # @label Playground - # - # @param size [Symbol] select [medium, large] - # @param tag [Symbol] select [span, summary, a, div] - # @param inline [Boolean] toggle - def playground(size: :medium, tag: :span, inline: false) - render(Primer::LabelComponent.new(tag: tag, size: size, inline: inline)) { "Label" } - end - end -end diff --git a/static/arguments.json b/static/arguments.json index 82a717dcfa..9c3c15ce3e 100644 --- a/static/arguments.json +++ b/static/arguments.json @@ -1539,6 +1539,50 @@ } ] }, + { + "component": "Label", + "status": "beta", + "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/label.rb", + "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/label/default/", + "parameters": [ + { + "name": "tag", + "type": "Symbol", + "default": "`:span`", + "description": "One of `:a`, `:div`, `:span`, or `:summary`." + }, + { + "name": "scheme", + "type": "Symbol", + "default": "`:default`", + "description": "One of `:accent`, `:attention`, `:danger`, `:default`, `:done`, `:info`, `:orange`, `:primary`, `:purple`, `:secondary`, `:severe`, `:sponsors`, `:success`, or `:warning`." + }, + { + "name": "size", + "type": "Symbol", + "default": "`:medium`", + "description": "One of `:large` or `:medium`." + }, + { + "name": "inline", + "type": "Boolean", + "default": "`false`", + "description": "Whether or not to render this label inline." + }, + { + "name": "variant", + "type": "Symbol", + "default": "`:none`", + "description": "One of `:inline`, `:large`, or `:none`." + }, + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "[System arguments](/system-arguments)" + } + ] + }, { "component": "Text", "status": "beta", @@ -1821,50 +1865,6 @@ } ] }, - { - "component": "Label", - "status": "beta", - "source": "https://github.com/primer/view_components/tree/main/app/components/primer/label_component.rb", - "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/label/default/", - "parameters": [ - { - "name": "tag", - "type": "Symbol", - "default": "`:span`", - "description": "One of `:a`, `:div`, `:span`, or `:summary`." - }, - { - "name": "scheme", - "type": "Symbol", - "default": "`:default`", - "description": "One of `:accent`, `:attention`, `:danger`, `:default`, `:done`, `:info`, `:orange`, `:primary`, `:purple`, `:secondary`, `:severe`, `:sponsors`, `:success`, or `:warning`." - }, - { - "name": "size", - "type": "Symbol", - "default": "`:medium`", - "description": "One of `:large` or `:medium`." - }, - { - "name": "inline", - "type": "Boolean", - "default": "`false`", - "description": "Whether or not to render this label inline." - }, - { - "name": "variant", - "type": "Symbol", - "default": "`:none`", - "description": "One of `:inline`, `:large`, or `:none`." - }, - { - "name": "system_arguments", - "type": "Hash", - "default": "N/A", - "description": "[System arguments](/system-arguments)" - } - ] - }, { "component": "Layout", "status": "alpha", diff --git a/static/audited_at.json b/static/audited_at.json index 1ed749bfdd..d9bb571c44 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -47,6 +47,7 @@ "Primer::Beta::Flash": "", "Primer::Beta::Heading": "", "Primer::Beta::IconButton": "", + "Primer::Beta::Label": "", "Primer::Beta::Text": "", "Primer::Beta::Truncate": "", "Primer::Beta::Truncate::TruncateText": "", diff --git a/static/constants.json b/static/constants.json index 87c2daf33c..49ab58b71b 100644 --- a/static/constants.json +++ b/static/constants.json @@ -574,6 +574,68 @@ "invisible" ] }, + "Primer::Beta::Label": { + "DEFAULT_SCHEME": "default", + "DEFAULT_SIZE": "medium", + "DEFAULT_TAG": "span", + "DEFAULT_VARIANT": "none", + "DEPRECATED_SCHEME_OPTIONS": [ + "info", + "warning", + "orange", + "purple" + ], + "DEPRECATED_VARIANT_OPTIONS": [ + "large", + "inline" + ], + "INLINE_CLASS": "Label--inline", + "SCHEME_MAPPINGS": { + "default": "", + "primary": "Label--primary", + "secondary": "Label--secondary", + "accent": "Label--accent", + "success": "Label--success", + "attention": "Label--attention", + "danger": "Label--danger", + "severe": "Label--severe", + "done": "Label--done", + "sponsors": "Label--sponsors", + "info": "Label--info", + "warning": "Label--warning", + "orange": "Label--orange", + "purple": "Label--purple" + }, + "SCHEME_OPTIONS": [ + "default", + "primary", + "secondary", + "accent", + "success", + "attention", + "danger", + "severe", + "done", + "sponsors" + ], + "SIZE_MAPPINGS": { + "medium": null, + "large": "Label--large" + }, + "SIZE_OPTIONS": [ + "medium", + "large" + ], + "TAG_OPTIONS": [ + "span", + "summary", + "a", + "div" + ], + "VARIANT_OPTIONS": [ + "none" + ] + }, "Primer::Beta::Text": { "DEFAULT_TAG": "span" }, @@ -696,66 +758,6 @@ "Primer::ImageCrop": { }, "Primer::LabelComponent": { - "DEFAULT_SCHEME": "default", - "DEFAULT_SIZE": "medium", - "DEFAULT_TAG": "span", - "DEFAULT_VARIANT": "none", - "DEPRECATED_SCHEME_OPTIONS": [ - "info", - "warning", - "orange", - "purple" - ], - "DEPRECATED_VARIANT_OPTIONS": [ - "large", - "inline" - ], - "INLINE_CLASS": "Label--inline", - "SCHEME_MAPPINGS": { - "default": "", - "primary": "Label--primary", - "secondary": "Label--secondary", - "accent": "Label--accent", - "success": "Label--success", - "attention": "Label--attention", - "danger": "Label--danger", - "severe": "Label--severe", - "done": "Label--done", - "sponsors": "Label--sponsors", - "info": "Label--info", - "warning": "Label--warning", - "orange": "Label--orange", - "purple": "Label--purple" - }, - "SCHEME_OPTIONS": [ - "default", - "primary", - "secondary", - "accent", - "success", - "attention", - "danger", - "severe", - "done", - "sponsors" - ], - "SIZE_MAPPINGS": { - "medium": null, - "large": "Label--large" - }, - "SIZE_OPTIONS": [ - "medium", - "large" - ], - "TAG_OPTIONS": [ - "span", - "summary", - "a", - "div" - ], - "VARIANT_OPTIONS": [ - "none" - ] }, "Primer::LayoutComponent": { "ALLOWED_SIDEBAR_COLS": [ diff --git a/static/statuses.json b/static/statuses.json index ca90891a4a..1e938d52f3 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -47,6 +47,7 @@ "Primer::Beta::Flash": "beta", "Primer::Beta::Heading": "beta", "Primer::Beta::IconButton": "beta", + "Primer::Beta::Label": "beta", "Primer::Beta::Text": "beta", "Primer::Beta::Truncate": "beta", "Primer::Beta::Truncate::TruncateText": "alpha", @@ -66,7 +67,7 @@ "Primer::IconButton": "deprecated", "Primer::Image": "deprecated", "Primer::ImageCrop": "deprecated", - "Primer::LabelComponent": "beta", + "Primer::LabelComponent": "deprecated", "Primer::LayoutComponent": "alpha", "Primer::LinkComponent": "beta", "Primer::LocalTime": "alpha", diff --git a/test/components/label_component_test.rb b/test/components/beta/label_test.rb similarity index 50% rename from test/components/label_component_test.rb rename to test/components/beta/label_test.rb index bd12d33a50..77a203a866 100644 --- a/test/components/label_component_test.rb +++ b/test/components/beta/label_test.rb @@ -2,97 +2,97 @@ require "components/test_helper" -class PrimerLabelComponentTest < Minitest::Test +class PrimerBetaLabelTest < Minitest::Test include Primer::ComponentTestHelpers def test_renders_content - render_inline(Primer::LabelComponent.new) { "private" } + render_inline(Primer::Beta::Label.new) { "private" } assert_text("private") end def test_renders_only_label_class_by_default - render_inline(Primer::LabelComponent.new) { "label" } + render_inline(Primer::Beta::Label.new) { "label" } assert_selector("[class='Label']") end def test_falls_back_when_tag_isnt_valid without_fetch_or_fallback_raises do - render_inline(Primer::LabelComponent.new(tag: :h1)) + render_inline(Primer::Beta::Label.new(tag: :h1)) assert_selector("span.Label") end end def test_supports_functional_schemes - Primer::LabelComponent::SCHEME_OPTIONS.each do |scheme| - render_inline(Primer::LabelComponent.new(scheme: scheme)) { "scheme" } + Primer::Beta::Label::SCHEME_OPTIONS.each do |scheme| + render_inline(Primer::Beta::Label.new(scheme: scheme)) { "scheme" } - if scheme == Primer::LabelComponent::DEFAULT_SCHEME + if scheme == Primer::Beta::Label::DEFAULT_SCHEME assert_selector(".Label") else - assert_selector(".#{Primer::LabelComponent::SCHEME_MAPPINGS[scheme]}") + assert_selector(".#{Primer::Beta::Label::SCHEME_MAPPINGS[scheme]}") end end end def test_deprecated_schemes - Primer::LabelComponent::DEPRECATED_SCHEME_OPTIONS.each do |scheme| - render_inline(Primer::LabelComponent.new(scheme: scheme)) { "scheme" } + Primer::Beta::Label::DEPRECATED_SCHEME_OPTIONS.each do |scheme| + render_inline(Primer::Beta::Label.new(scheme: scheme)) { "scheme" } - assert_selector(".#{Primer::LabelComponent::SCHEME_MAPPINGS[scheme]}") + assert_selector(".#{Primer::Beta::Label::SCHEME_MAPPINGS[scheme]}") end end def test_falls_back_when_scheme_isn_t_valid without_fetch_or_fallback_raises do - render_inline(Primer::LabelComponent.new(scheme: :pink)) { "content" } + render_inline(Primer::Beta::Label.new(scheme: :pink)) { "content" } end assert_text("content") end def test_supports_large_size - render_inline(Primer::LabelComponent.new(size: :large)) { "private" } + render_inline(Primer::Beta::Label.new(size: :large)) { "private" } assert_selector(".Label--large") end def test_supports_deprecated_large_variant - render_inline(Primer::LabelComponent.new(variant: :large)) { "private" } + render_inline(Primer::Beta::Label.new(variant: :large)) { "private" } assert_selector(".Label--large") end def test_falls_back_when_size_isn_t_valid without_fetch_or_fallback_raises do - render_inline(Primer::LabelComponent.new(size: :small)) { "content" } + render_inline(Primer::Beta::Label.new(size: :small)) { "content" } end assert_text("content") end def test_supports_inline_argument - render_inline(Primer::LabelComponent.new(inline: true)) { "private" } + render_inline(Primer::Beta::Label.new(inline: true)) { "private" } assert_selector(".Label.Label--inline") end def test_supports_deprecated_inline_variant - render_inline(Primer::LabelComponent.new(variant: :inline)) { "private" } + render_inline(Primer::Beta::Label.new(variant: :inline)) { "private" } assert_selector(".Label.Label--inline") end def test_falls_back_when_variant_isn_t_valid without_fetch_or_fallback_raises do - render_inline(Primer::LabelComponent.new(variant: :special)) { "content" } + render_inline(Primer::Beta::Label.new(variant: :special)) { "content" } end assert_text("content") end def test_status - assert_component_state(Primer::LabelComponent, :beta) + assert_component_state(Primer::Beta::Label, :beta) end end diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 9be77a909d..43473f843e 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -80,7 +80,7 @@ class PrimerComponentTest < Minitest::Test [Primer::Beta::Flash, {}], [Primer::Beta::Heading, { tag: :h1 }], [Primer::Alpha::HiddenTextExpander, { "aria-label": "No action" }], - [Primer::LabelComponent, {}], + [Primer::Beta::Label, {}], [Primer::LayoutComponent, {}], [Primer::LinkComponent, { href: "https://www.google.com" }], [Primer::Markdown, {}], @@ -109,6 +109,7 @@ class PrimerComponentTest < Minitest::Test def test_registered_components ignored_components = [ + "Primer::LabelComponent", "Primer::ImageCrop", "Primer::Image", "Primer::Alpha::ActionList::Heading", diff --git a/test/lib/erblint/argument_mappers/label_test.rb b/test/lib/erblint/argument_mappers/label_test.rb index 62b8c311fa..902e7677fd 100644 --- a/test/lib/erblint/argument_mappers/label_test.rb +++ b/test/lib/erblint/argument_mappers/label_test.rb @@ -18,7 +18,7 @@ def test_returns_title_argument end def test_returns_scheme_argument - Primer::LabelComponent::SCHEME_MAPPINGS.each do |value, class_name| + Primer::Beta::Label::SCHEME_MAPPINGS.each do |value, class_name| next if class_name.blank? @file = "Label" @@ -36,7 +36,7 @@ def test_returns_inline_argument end def test_returns_tag_argument - Primer::LabelComponent::TAG_OPTIONS.each do |tag| + Primer::Beta::Label::TAG_OPTIONS.each do |tag| # span is the default, so it does not require a `tag` argument next if tag == :span diff --git a/test/lib/erblint/label_component_migration_counter_test.rb b/test/lib/erblint/label_component_migration_counter_test.rb index 63ca37855c..6d7709e7c8 100644 --- a/test/lib/erblint/label_component_migration_counter_test.rb +++ b/test/lib/erblint/label_component_migration_counter_test.rb @@ -10,28 +10,28 @@ def test_suggests_how_to_use_the_component_with_arguments @file = "Label" @linter.run(processed_source) - assert_includes(offenses.first.message, "render Primer::LabelComponent.new(size: :large, scheme: :primary)") + assert_includes(offenses.first.message, "render Primer::Beta::Label.new(size: :large, scheme: :primary)") end def test_suggest_title_argument @file = "Label" @linter.run(processed_source) - assert_includes(offenses.first.message, "render Primer::LabelComponent.new(title: \"some title\")") + assert_includes(offenses.first.message, "render Primer::Beta::Label.new(title: \"some title\")") end def test_suggest_using_the_tag_system_argument @file = "
Label
" @linter.run(processed_source) - assert_includes(offenses.first.message, "render Primer::LabelComponent.new(tag: :div)") + assert_includes(offenses.first.message, "render Primer::Beta::Label.new(tag: :div)") end def test_suggest_using_the_inline_system_argument @file = "Label" @linter.run(processed_source) - assert_includes(offenses.first.message, "render Primer::LabelComponent.new(inline: true)") + assert_includes(offenses.first.message, "render Primer::Beta::Label.new(inline: true)") end def test_autocorrects @@ -60,19 +60,19 @@ def test_autocorrects expected = <<~HTML <%# erblint:counter LabelComponentMigrationCounter 1 %> - <%= render Primer::LabelComponent.new(scheme: :primary) do %> + <%= render Primer::Beta::Label.new(scheme: :primary) do %> Label 1 Can\'t be autocorrected - <%= render Primer::LabelComponent.new(scheme: :danger) do %> + <%= render Primer::Beta::Label.new(scheme: :danger) do %> Label 2 - <%= render Primer::LabelComponent.new(scheme: :accent) do %> + <%= render Primer::Beta::Label.new(scheme: :accent) do %> Label 3 not a Label - <%= render Primer::LabelComponent.new(tag: :summary, size: :large) do %> + <%= render Primer::Beta::Label.new(tag: :summary, size: :large) do %> summary - <%= render Primer::LabelComponent.new(tag: :div, test_selector: "test selector") do %> + <%= render Primer::Beta::Label.new(tag: :div, test_selector: "test selector") do %> div <% end %> <% end %> diff --git a/test/lib/rubocop/deprecated_label_schemes_test.rb b/test/lib/rubocop/deprecated_label_schemes_test.rb index 43d18b99ce..c1a83521af 100644 --- a/test/lib/rubocop/deprecated_label_schemes_test.rb +++ b/test/lib/rubocop/deprecated_label_schemes_test.rb @@ -17,7 +17,7 @@ def test_not_a_label def test_no_deprecated_arguments investigate(cop, <<-RUBY) - Primer::LabelComponent.new(scheme: :danger) + Primer::Beta::Label.new(scheme: :danger) RUBY assert_empty cop.offenses @@ -25,7 +25,7 @@ def test_no_deprecated_arguments def test_argument_not_a_symbol investigate(cop, <<-'RUBY') - Primer::LabelComponent.new(scheme: scheme) + Primer::Beta::Label.new(scheme: scheme) RUBY assert_empty cop.offenses @@ -33,7 +33,7 @@ def test_argument_not_a_symbol def test_deprecated_argument investigate(cop, <<-RUBY) - Primer::LabelComponent.new(scheme: :info) + Primer::Beta::Label.new(scheme: :info) RUBY assert_equal 1, cop.offenses.count @@ -41,19 +41,19 @@ def test_deprecated_argument def test_deprecated_argument_as_a_string investigate(cop, <<-RUBY) - Primer::LabelComponent.new(scheme: "info") + Primer::Beta::Label.new(scheme: "info") RUBY assert_equal 1, cop.offenses.count - assert_equal "Primer::LabelComponent.new(scheme: :accent)", cop.offenses.first.corrector.rewrite.strip + assert_equal "Primer::Beta::Label.new(scheme: :accent)", cop.offenses.first.corrector.rewrite.strip end def test_deprecated_argument_autocorrected investigate(cop, <<-RUBY) - Primer::LabelComponent.new(scheme: :info) + Primer::Beta::Label.new(scheme: :info) RUBY assert_equal 1, cop.offenses.count - assert_equal "Primer::LabelComponent.new(scheme: :accent)", cop.offenses.first.corrector.rewrite.strip + assert_equal "Primer::Beta::Label.new(scheme: :accent)", cop.offenses.first.corrector.rewrite.strip end end diff --git a/test/lib/rubocop/deprecated_label_variants_test.rb b/test/lib/rubocop/deprecated_label_variants_test.rb index ccb9048b38..979b4a5262 100644 --- a/test/lib/rubocop/deprecated_label_variants_test.rb +++ b/test/lib/rubocop/deprecated_label_variants_test.rb @@ -17,7 +17,7 @@ def test_not_a_label def test_no_deprecated_arguments investigate(cop, <<-RUBY) - Primer::LabelComponent.new(size: :large) + Primer::Beta::Label.new(size: :large) RUBY assert_empty cop.offenses @@ -25,7 +25,7 @@ def test_no_deprecated_arguments def test_argument_not_a_string_or_symbol investigate(cop, <<-'RUBY') - Primer::LabelComponent.new(variant: variant) + Primer::Beta::Label.new(variant: variant) RUBY assert_empty cop.offenses @@ -33,7 +33,7 @@ def test_argument_not_a_string_or_symbol def test_deprecated_large_variant investigate(cop, <<-RUBY) - Primer::LabelComponent.new(variant: :large) + Primer::Beta::Label.new(variant: :large) RUBY assert_equal 1, cop.offenses.count @@ -41,19 +41,19 @@ def test_deprecated_large_variant def test_deprecated_large_variant_autocorrected investigate(cop, <<-RUBY) - Primer::LabelComponent.new(variant: :large) + Primer::Beta::Label.new(variant: :large) RUBY assert_equal 1, cop.offenses.count - assert_equal "Primer::LabelComponent.new(size: :large)", cop.offenses.first.corrector.rewrite.strip + assert_equal "Primer::Beta::Label.new(size: :large)", cop.offenses.first.corrector.rewrite.strip end def test_deprecated_inline_variant_autocorrected investigate(cop, <<-RUBY) - Primer::LabelComponent.new(variant: :inline) + Primer::Beta::Label.new(variant: :inline) RUBY assert_equal 1, cop.offenses.count - assert_equal "Primer::LabelComponent.new(inline: true)", cop.offenses.first.corrector.rewrite.strip + assert_equal "Primer::Beta::Label.new(inline: true)", cop.offenses.first.corrector.rewrite.strip end end