primer_view_components 0.0.63 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +718 -641
- data/app/components/primer/auto_complete/auto_complete.d.ts +1 -0
- data/app/components/primer/auto_complete/auto_complete.js +1 -0
- data/app/components/primer/beta/blankslate.rb +5 -3
- data/app/components/primer/button_component.html.erb +1 -1
- data/app/components/primer/button_component.rb +12 -10
- data/app/components/primer/button_group.rb +8 -7
- data/app/components/primer/component.rb +9 -4
- data/app/components/primer/content.rb +12 -0
- data/app/components/primer/dropdown.rb +3 -3
- data/app/components/primer/flash_component.rb +1 -1
- data/app/components/primer/image.rb +2 -2
- data/app/components/primer/label_component.rb +23 -13
- data/app/components/primer/octicon_component.rb +4 -2
- data/app/components/primer/popover_component.rb +10 -11
- data/app/components/primer/spinner_component.html.erb +2 -13
- data/app/components/primer/spinner_component.rb +6 -5
- data/app/lib/primer/octicon/cache.rb +4 -10
- data/lib/primer/classify/utilities.rb +0 -1
- data/lib/primer/classify/utilities.yml +98 -0
- data/lib/primer/classify.rb +1 -1
- data/lib/primer/view_components/engine.rb +1 -0
- data/lib/primer/view_components/linters/argument_mappers/button.rb +4 -4
- data/lib/primer/view_components/version.rb +1 -1
- data/lib/rubocop/cop/primer/deprecated_arguments.rb +1 -1
- data/lib/rubocop/cop/primer/deprecated_button_arguments.rb +51 -0
- data/lib/rubocop/cop/primer/deprecated_label_schemes.rb +68 -0
- data/lib/tasks/custom_utilities.yml +98 -0
- data/lib/tasks/docs.rake +9 -4
- data/static/arguments.yml +12 -3
- data/static/audited_at.json +1 -0
- data/static/classes.yml +5 -4
- data/static/constants.json +22 -8
- data/static/statuses.json +1 -0
- metadata +10 -5
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            import '@github/auto-complete-element';
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            import '@github/auto-complete-element';
         | 
| @@ -5,9 +5,11 @@ module Primer | |
| 5 5 | 
             
                # Use `Blankslate` when there is a lack of content within a page or section. Use as placeholder to tell users why something isn't there.
         | 
| 6 6 | 
             
                #
         | 
| 7 7 | 
             
                # @accessibility
         | 
| 8 | 
            -
                #   -  | 
| 9 | 
            -
                #   -  | 
| 8 | 
            +
                #   - The blankslate uses a semantic heading that must be set at the appropriate level based on the hierarchy of the page.
         | 
| 9 | 
            +
                #   - All blankslate visuals have been programmed as decorative images, using `aria-hidden=”true”` and `img alt=””`,  which will hide the visual from screen reader users.
         | 
| 10 | 
            +
                #   - The blankslate supports a primary and secondary action. Both actions have been built as semantic links with primary and secondary styling.
         | 
| 10 11 | 
             
                #   - `secondary_action` text should be meaningful out of context and clearly describe the destination. Avoid using vague text like, "Learn more" or "Click here".
         | 
| 12 | 
            +
                #   - The blankslate can leverage the spinner component, which will communicate to screen reader users that the content is still loading.
         | 
| 11 13 | 
             
                class Blankslate < Primer::Component
         | 
| 12 14 | 
             
                  status :beta
         | 
| 13 15 |  | 
| @@ -81,7 +83,7 @@ module Primer | |
| 81 83 | 
             
                    system_arguments[:tag] = :a
         | 
| 82 84 | 
             
                    system_arguments[:href] = href
         | 
| 83 85 | 
             
                    system_arguments[:mt] = 5
         | 
| 84 | 
            -
                    system_arguments[: | 
| 86 | 
            +
                    system_arguments[:size] = :medium
         | 
| 85 87 | 
             
                    system_arguments[:scheme] ||= :primary
         | 
| 86 88 |  | 
| 87 89 | 
             
                    Primer::ButtonComponent.new(**system_arguments)
         | 
| @@ -1,3 +1,3 @@ | |
| 1 1 | 
             
            <%= render Primer::BaseButton.new(**@system_arguments) do -%>
         | 
| 2 | 
            -
              <%= leading_visual %><%= trimmed_content %><%= trailing_visual %><%= primer_octicon("triangle-down", mr: -1) if @dropdown %>
         | 
| 2 | 
            +
              <%= leading_visual %><%= trimmed_content %><%= trailing_visual %><%= primer_octicon("triangle-down", ml: 2, mr: -1) if @dropdown %>
         | 
| 3 3 | 
             
            <% end -%>
         | 
| @@ -17,12 +17,12 @@ module Primer | |
| 17 17 | 
             
                }.freeze
         | 
| 18 18 | 
             
                SCHEME_OPTIONS = SCHEME_MAPPINGS.keys
         | 
| 19 19 |  | 
| 20 | 
            -
                 | 
| 21 | 
            -
                 | 
| 20 | 
            +
                DEFAULT_SIZE = :medium
         | 
| 21 | 
            +
                SIZE_MAPPINGS = {
         | 
| 22 22 | 
             
                  :small => "btn-sm",
         | 
| 23 | 
            -
                   | 
| 23 | 
            +
                  DEFAULT_SIZE => ""
         | 
| 24 24 | 
             
                }.freeze
         | 
| 25 | 
            -
                 | 
| 25 | 
            +
                SIZE_OPTIONS = SIZE_MAPPINGS.keys
         | 
| 26 26 |  | 
| 27 27 | 
             
                # Leading visuals appear to the left of the button text.
         | 
| 28 28 | 
             
                #
         | 
| @@ -64,9 +64,9 @@ module Primer | |
| 64 64 | 
             
                #   <%= render(Primer::ButtonComponent.new(scheme: :invisible)) { "Invisible" } %>
         | 
| 65 65 | 
             
                #   <%= render(Primer::ButtonComponent.new(scheme: :link)) { "Link" } %>
         | 
| 66 66 | 
             
                #
         | 
| 67 | 
            -
                # @example  | 
| 68 | 
            -
                #   <%= render(Primer::ButtonComponent.new( | 
| 69 | 
            -
                #   <%= render(Primer::ButtonComponent.new( | 
| 67 | 
            +
                # @example Sizes
         | 
| 68 | 
            +
                #   <%= render(Primer::ButtonComponent.new(size: :small)) { "Small" } %>
         | 
| 69 | 
            +
                #   <%= render(Primer::ButtonComponent.new(size: :medium)) { "Medium" } %>
         | 
| 70 70 | 
             
                #
         | 
| 71 71 | 
             
                # @example Block
         | 
| 72 72 | 
             
                #   <%= render(Primer::ButtonComponent.new(block: :true)) { "Block" } %>
         | 
| @@ -97,7 +97,8 @@ module Primer | |
| 97 97 | 
             
                #   <% end %>
         | 
| 98 98 | 
             
                #
         | 
| 99 99 | 
             
                # @param scheme [Symbol] <%= one_of(Primer::ButtonComponent::SCHEME_OPTIONS) %>
         | 
| 100 | 
            -
                # @param variant [Symbol] <%= one_of(Primer::ButtonComponent:: | 
| 100 | 
            +
                # @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
         | 
| 101 | 
            +
                # @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
         | 
| 101 102 | 
             
                # @param tag [Symbol] (Primer::BaseButton::DEFAULT_TAG) <%= one_of(Primer::BaseButton::TAG_OPTIONS) %>
         | 
| 102 103 | 
             
                # @param type [Symbol] (Primer::BaseButton::DEFAULT_TYPE) <%= one_of(Primer::BaseButton::TYPE_OPTIONS) %>
         | 
| 103 104 | 
             
                # @param group_item [Boolean] Whether button is part of a ButtonGroup.
         | 
| @@ -106,7 +107,8 @@ module Primer | |
| 106 107 | 
             
                # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 107 108 | 
             
                def initialize(
         | 
| 108 109 | 
             
                  scheme: DEFAULT_SCHEME,
         | 
| 109 | 
            -
                  variant:  | 
| 110 | 
            +
                  variant: nil,
         | 
| 111 | 
            +
                  size: DEFAULT_SIZE,
         | 
| 110 112 | 
             
                  group_item: false,
         | 
| 111 113 | 
             
                  block: false,
         | 
| 112 114 | 
             
                  dropdown: false,
         | 
| @@ -119,7 +121,7 @@ module Primer | |
| 119 121 | 
             
                  @system_arguments[:classes] = class_names(
         | 
| 120 122 | 
             
                    system_arguments[:classes],
         | 
| 121 123 | 
             
                    SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME)],
         | 
| 122 | 
            -
                     | 
| 124 | 
            +
                    SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, variant || size, DEFAULT_SIZE)],
         | 
| 123 125 | 
             
                    "btn" => !link?,
         | 
| 124 126 | 
             
                    "btn-block" => block,
         | 
| 125 127 | 
             
                    "BtnGroup-item" => group_item
         | 
| @@ -7,10 +7,10 @@ module Primer | |
| 7 7 |  | 
| 8 8 | 
             
                # Required list of buttons to be rendered.
         | 
| 9 9 | 
             
                #
         | 
| 10 | 
            -
                # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for ` | 
| 10 | 
            +
                # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %> except for `size` and `group_item`.
         | 
| 11 11 | 
             
                renders_many :buttons, lambda { |**kwargs|
         | 
| 12 12 | 
             
                  kwargs[:group_item] = true
         | 
| 13 | 
            -
                  kwargs[: | 
| 13 | 
            +
                  kwargs[:size] = @size
         | 
| 14 14 |  | 
| 15 15 | 
             
                  Primer::ButtonComponent.new(**kwargs)
         | 
| 16 16 | 
             
                }
         | 
| @@ -25,19 +25,20 @@ module Primer | |
| 25 25 | 
             
                #     <% component.button(classes: "custom-class") { "Custom class" } %>
         | 
| 26 26 | 
             
                #   <% end %>
         | 
| 27 27 | 
             
                #
         | 
| 28 | 
            -
                # @example  | 
| 28 | 
            +
                # @example Sizes
         | 
| 29 29 | 
             
                #
         | 
| 30 | 
            -
                #   <%= render(Primer::ButtonGroup.new( | 
| 30 | 
            +
                #   <%= render(Primer::ButtonGroup.new(size: :small)) do |component| %>
         | 
| 31 31 | 
             
                #     <% component.button { "Default" } %>
         | 
| 32 32 | 
             
                #     <% component.button(scheme: :primary) { "Primary" } %>
         | 
| 33 33 | 
             
                #     <% component.button(scheme: :danger) { "Danger" } %>
         | 
| 34 34 | 
             
                #     <% component.button(scheme: :outline) { "Outline" } %>
         | 
| 35 35 | 
             
                #   <% end %>
         | 
| 36 36 | 
             
                #
         | 
| 37 | 
            -
                # @param variant [Symbol] <%= one_of(Primer::ButtonComponent:: | 
| 37 | 
            +
                # @param variant [Symbol] DEPRECATED. <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
         | 
| 38 | 
            +
                # @param size [Symbol] <%= one_of(Primer::ButtonComponent::SIZE_OPTIONS) %>
         | 
| 38 39 | 
             
                # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 39 | 
            -
                def initialize(variant: Primer::ButtonComponent:: | 
| 40 | 
            -
                  @ | 
| 40 | 
            +
                def initialize(variant: nil, size: Primer::ButtonComponent::DEFAULT_SIZE, **system_arguments)
         | 
| 41 | 
            +
                  @size = variant || size
         | 
| 41 42 | 
             
                  @system_arguments = deny_tag_argument(**system_arguments)
         | 
| 42 43 | 
             
                  @system_arguments[:tag] = :div
         | 
| 43 44 |  | 
| @@ -23,6 +23,10 @@ module Primer | |
| 23 23 | 
             
                  Rails.application.config.primer_view_components.raise_on_invalid_options
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 | 
            +
                def raise_on_invalid_aria?
         | 
| 27 | 
            +
                  Rails.application.config.primer_view_components.raise_on_invalid_aria
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 26 30 | 
             
                def deprecated_component_warning(new_class: nil, version: nil)
         | 
| 27 31 | 
             
                  return if Rails.env.production? || silence_deprecations?
         | 
| 28 32 |  | 
| @@ -101,10 +105,7 @@ module Primer | |
| 101 105 | 
             
                  return unless aria(:label, arguments)
         | 
| 102 106 | 
             
                  return unless INVALID_ARIA_LABEL_TAGS.include?(tag)
         | 
| 103 107 |  | 
| 104 | 
            -
                  raise ArgumentError, "Don't use `aria-label` on `#{tag}` elements. See https://www.tpgi.com/short-note-on-aria-label-aria-labelledby-and-aria-describedby/" if  | 
| 105 | 
            -
             | 
| 106 | 
            -
                  arguments.except!(:"aria-label")
         | 
| 107 | 
            -
                  arguments[:aria] = arguments[:aria].except!(:label) if arguments[:aria]
         | 
| 108 | 
            +
                  raise ArgumentError, "Don't use `aria-label` on `#{tag}` elements. See https://www.tpgi.com/short-note-on-aria-label-aria-labelledby-and-aria-describedby/" if should_raise_aria_error?
         | 
| 108 109 | 
             
                end
         | 
| 109 110 |  | 
| 110 111 | 
             
                def deny_tag_argument(**arguments)
         | 
| @@ -114,5 +115,9 @@ module Primer | |
| 114 115 | 
             
                def should_raise_error?
         | 
| 115 116 | 
             
                  raise_on_invalid_options? && !ENV["PRIMER_WARNINGS_DISABLED"]
         | 
| 116 117 | 
             
                end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                def should_raise_aria_error?
         | 
| 120 | 
            +
                  raise_on_invalid_aria? && !ENV["PRIMER_WARNINGS_DISABLED"]
         | 
| 121 | 
            +
                end
         | 
| 117 122 | 
             
              end
         | 
| 118 123 | 
             
            end
         | 
| @@ -6,12 +6,12 @@ module Primer | |
| 6 6 | 
             
              class Dropdown < Primer::Component
         | 
| 7 7 | 
             
                # Required trigger for the dropdown. Has the same arguments as <%= link_to_component(Primer::ButtonComponent) %>,
         | 
| 8 8 | 
             
                # but it is locked as a `summary` tag.
         | 
| 9 | 
            -
                renders_one :button, lambda { |**system_arguments | 
| 9 | 
            +
                renders_one :button, lambda { |**system_arguments|
         | 
| 10 10 | 
             
                  @button_arguments = system_arguments
         | 
| 11 11 | 
             
                  @button_arguments[:button] = true
         | 
| 12 12 | 
             
                  @button_arguments[:dropdown] = @with_caret
         | 
| 13 13 |  | 
| 14 | 
            -
                   | 
| 14 | 
            +
                  Primer::Content.new
         | 
| 15 15 | 
             
                }
         | 
| 16 16 |  | 
| 17 17 | 
             
                # Required context menu for the dropdown.
         | 
| @@ -88,7 +88,7 @@ module Primer | |
| 88 88 | 
             
                #
         | 
| 89 89 | 
             
                # @example Customizing the button
         | 
| 90 90 | 
             
                #   <%= render(Primer::Dropdown.new) do |c| %>
         | 
| 91 | 
            -
                #     <% c.button(scheme: :primary,  | 
| 91 | 
            +
                #     <% c.button(scheme: :primary, size: :small) do %>
         | 
| 92 92 | 
             
                #       Dropdown
         | 
| 93 93 | 
             
                #     <% end %>
         | 
| 94 94 | 
             
                #
         | 
| @@ -42,7 +42,7 @@ module Primer | |
| 42 42 | 
             
                #   <%= render(Primer::FlashComponent.new) do |component| %>
         | 
| 43 43 | 
             
                #     This is a flash message with actions!
         | 
| 44 44 | 
             
                #     <% component.action do %>
         | 
| 45 | 
            -
                #       <%= render(Primer::ButtonComponent.new( | 
| 45 | 
            +
                #       <%= render(Primer::ButtonComponent.new(size: :small)) { "Take action" } %>
         | 
| 46 46 | 
             
                #     <% end %>
         | 
| 47 47 | 
             
                #   <% end %>
         | 
| 48 48 | 
             
                #
         | 
| @@ -29,8 +29,8 @@ module Primer | |
| 29 29 | 
             
                def initialize(src:, alt:, lazy: false, **system_arguments)
         | 
| 30 30 | 
             
                  @system_arguments = deny_tag_argument(**system_arguments)
         | 
| 31 31 |  | 
| 32 | 
            +
                  @src = src
         | 
| 32 33 | 
             
                  @system_arguments[:tag] = :img
         | 
| 33 | 
            -
                  @system_arguments[:src] = src
         | 
| 34 34 | 
             
                  @system_arguments[:alt] = alt
         | 
| 35 35 |  | 
| 36 36 | 
             
                  return unless lazy
         | 
| @@ -40,7 +40,7 @@ module Primer | |
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| 42 42 | 
             
                def call
         | 
| 43 | 
            -
                  render(Primer::BaseComponent.new(**@system_arguments))
         | 
| 43 | 
            +
                  render(Primer::BaseComponent.new(src: image_path(@src), **@system_arguments))
         | 
| 44 44 | 
             
                end
         | 
| 45 45 | 
             
              end
         | 
| 46 46 | 
             
            end
         | 
| @@ -11,19 +11,26 @@ module Primer | |
| 11 11 | 
             
                DEFAULT_TAG = :span
         | 
| 12 12 | 
             
                TAG_OPTIONS = [DEFAULT_TAG, :summary, :a, :div].freeze
         | 
| 13 13 |  | 
| 14 | 
            +
                DEFAULT_SCHEME = :default
         | 
| 14 15 | 
             
                SCHEME_MAPPINGS = {
         | 
| 15 | 
            -
                   | 
| 16 | 
            -
                   | 
| 17 | 
            -
                   | 
| 18 | 
            -
                   | 
| 19 | 
            -
                   | 
| 20 | 
            -
                   | 
| 16 | 
            +
                  DEFAULT_SCHEME => "",
         | 
| 17 | 
            +
                  :primary => "Label--primary",
         | 
| 18 | 
            +
                  :secondary => "Label--secondary",
         | 
| 19 | 
            +
                  :accent => "Label--accent",
         | 
| 20 | 
            +
                  :success => "Label--success",
         | 
| 21 | 
            +
                  :attention => "Label--attention",
         | 
| 22 | 
            +
                  :danger => "Label--danger",
         | 
| 23 | 
            +
                  :severe => "Label--severe",
         | 
| 24 | 
            +
                  :done => "Label--done",
         | 
| 25 | 
            +
                  :sponsors => "Label--sponsors",
         | 
| 21 26 | 
             
                  # deprecated
         | 
| 22 | 
            -
                   | 
| 23 | 
            -
                   | 
| 27 | 
            +
                  :info => "Label--info",
         | 
| 28 | 
            +
                  :warning => "Label--warning",
         | 
| 29 | 
            +
                  :orange => "Label--orange",
         | 
| 30 | 
            +
                  :purple => "Label--purple"
         | 
| 24 31 | 
             
                }.freeze
         | 
| 25 | 
            -
                DEPRECATED_SCHEME_OPTIONS = [:orange, :purple].freeze
         | 
| 26 | 
            -
                SCHEME_OPTIONS = ( | 
| 32 | 
            +
                DEPRECATED_SCHEME_OPTIONS = [:info, :warning, :orange, :purple].freeze
         | 
| 33 | 
            +
                SCHEME_OPTIONS = (SCHEME_MAPPINGS.keys - DEPRECATED_SCHEME_OPTIONS).freeze
         | 
| 27 34 |  | 
| 28 35 | 
             
                VARIANT_MAPPINGS = {
         | 
| 29 36 | 
             
                  large: "Label--large",
         | 
| @@ -35,10 +42,13 @@ module Primer | |
| 35 42 | 
             
                #   <%= render(Primer::LabelComponent.new) { "Default" } %>
         | 
| 36 43 | 
             
                #   <%= render(Primer::LabelComponent.new(scheme: :primary)) { "Primary" } %>
         | 
| 37 44 | 
             
                #   <%= render(Primer::LabelComponent.new(scheme: :secondary)) { "Secondary" } %>
         | 
| 38 | 
            -
                #   <%= render(Primer::LabelComponent.new(scheme: : | 
| 45 | 
            +
                #   <%= render(Primer::LabelComponent.new(scheme: :accent)) { "Accent" } %>
         | 
| 39 46 | 
             
                #   <%= render(Primer::LabelComponent.new(scheme: :success)) { "Success" } %>
         | 
| 40 | 
            -
                #   <%= render(Primer::LabelComponent.new(scheme: : | 
| 47 | 
            +
                #   <%= render(Primer::LabelComponent.new(scheme: :attention)) { "Attention" } %>
         | 
| 41 48 | 
             
                #   <%= render(Primer::LabelComponent.new(scheme: :danger)) { "Danger" } %>
         | 
| 49 | 
            +
                #   <%= render(Primer::LabelComponent.new(scheme: :severe)) { "Severe" } %>
         | 
| 50 | 
            +
                #   <%= render(Primer::LabelComponent.new(scheme: :done)) { "Done" } %>
         | 
| 51 | 
            +
                #   <%= render(Primer::LabelComponent.new(scheme: :sponsors)) { "Sponsors" } %>
         | 
| 42 52 | 
             
                #
         | 
| 43 53 | 
             
                # @example Variants
         | 
| 44 54 | 
             
                #   <%= render(Primer::LabelComponent.new) { "Default" } %>
         | 
| @@ -48,7 +58,7 @@ module Primer | |
| 48 58 | 
             
                # @param scheme [Symbol] <%= one_of(Primer::LabelComponent::SCHEME_MAPPINGS.keys) %>
         | 
| 49 59 | 
             
                # @param variant [Symbol] <%= one_of(Primer::LabelComponent::VARIANT_OPTIONS) %>
         | 
| 50 60 | 
             
                # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 51 | 
            -
                def initialize(tag: DEFAULT_TAG, scheme:  | 
| 61 | 
            +
                def initialize(tag: DEFAULT_TAG, scheme: DEFAULT_SCHEME, variant: nil, **system_arguments)
         | 
| 52 62 | 
             
                  @system_arguments = system_arguments
         | 
| 53 63 | 
             
                  @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, DEFAULT_TAG)
         | 
| 54 64 | 
             
                  @system_arguments[:classes] = class_names(
         | 
| @@ -65,8 +65,10 @@ module Primer | |
| 65 65 | 
             
                    # Filter out classify options to prevent them from becoming invalid html attributes.
         | 
| 66 66 | 
             
                    # Note height and width are both classify options and valid html attributes.
         | 
| 67 67 | 
             
                    octicon_options = {
         | 
| 68 | 
            -
                      height: SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)]
         | 
| 69 | 
            -
             | 
| 68 | 
            +
                      height: @system_arguments[:height] || SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)],
         | 
| 69 | 
            +
                      width: @system_arguments[:width]
         | 
| 70 | 
            +
                    }
         | 
| 71 | 
            +
                    octicon_options.compact!
         | 
| 70 72 |  | 
| 71 73 | 
             
                    @icon = Octicons::Octicon.new(icon_key, octicon_options)
         | 
| 72 74 | 
             
                    Primer::Octicon::Cache.set(cache_key, @icon)
         | 
| @@ -41,22 +41,21 @@ module Primer | |
| 41 41 | 
             
                # @param caret [Symbol] <%= one_of(Primer::PopoverComponent::CARET_MAPPINGS.keys) %>
         | 
| 42 42 | 
             
                # @param large [Boolean] Whether to use the large version of the component.
         | 
| 43 43 | 
             
                # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 44 | 
            -
                renders_one :body, lambda { |caret: CARET_DEFAULT, large: false, **system_arguments | 
| 45 | 
            -
                   | 
| 46 | 
            -
             | 
| 44 | 
            +
                renders_one :body, lambda { |caret: CARET_DEFAULT, large: false, **system_arguments|
         | 
| 45 | 
            +
                  @body_arguments = system_arguments
         | 
| 46 | 
            +
                  @body_arguments[:classes] = class_names(
         | 
| 47 | 
            +
                    @body_arguments[:classes],
         | 
| 47 48 | 
             
                    "Popover-message Box",
         | 
| 48 49 | 
             
                    CARET_MAPPINGS[fetch_or_fallback(CARET_MAPPINGS.keys, caret, CARET_DEFAULT)],
         | 
| 49 50 | 
             
                    "Popover-message--large" => large
         | 
| 50 51 | 
             
                  )
         | 
| 51 | 
            -
                   | 
| 52 | 
            -
                   | 
| 53 | 
            -
                   | 
| 54 | 
            -
                   | 
| 55 | 
            -
                   | 
| 52 | 
            +
                  @body_arguments[:p] ||= 4
         | 
| 53 | 
            +
                  @body_arguments[:mt] ||= 2
         | 
| 54 | 
            +
                  @body_arguments[:mx] ||= :auto
         | 
| 55 | 
            +
                  @body_arguments[:text_align] ||= :left
         | 
| 56 | 
            +
                  @body_arguments[:box_shadow] ||= :large
         | 
| 56 57 |  | 
| 57 | 
            -
                   | 
| 58 | 
            -
                  @body_arguments = system_arguments
         | 
| 59 | 
            -
                  view_context.capture { block&.call }
         | 
| 58 | 
            +
                  Primer::Content.new
         | 
| 60 59 | 
             
                }
         | 
| 61 60 |  | 
| 62 61 | 
             
                # @example Default
         | 
| @@ -1,15 +1,4 @@ | |
| 1 1 | 
             
            <%= render Primer::BaseComponent.new(**@system_arguments) do %>
         | 
| 2 | 
            -
              < | 
| 3 | 
            -
               | 
| 4 | 
            -
                tag: :svg,
         | 
| 5 | 
            -
                viewBox: '0 0 16 16',
         | 
| 6 | 
            -
                fill: :none,
         | 
| 7 | 
            -
                animation: :rotate,
         | 
| 8 | 
            -
                width: @size,
         | 
| 9 | 
            -
                height: @size,
         | 
| 10 | 
            -
                vertical_align: :bottom
         | 
| 11 | 
            -
              ) do %>
         | 
| 12 | 
            -
                <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
         | 
| 13 | 
            -
                <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
         | 
| 14 | 
            -
              <% end %>
         | 
| 2 | 
            +
              <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
         | 
| 3 | 
            +
              <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
         | 
| 15 4 | 
             
            <% end %>
         | 
| @@ -31,12 +31,13 @@ module Primer | |
| 31 31 | 
             
                # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 32 32 | 
             
                def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, **system_arguments)
         | 
| 33 33 | 
             
                  @system_arguments = deny_tag_argument(**system_arguments)
         | 
| 34 | 
            -
                  @system_arguments[:tag] = : | 
| 35 | 
            -
                  @system_arguments[:role] = :status
         | 
| 36 | 
            -
                  @system_arguments[:display] = :inline_block
         | 
| 34 | 
            +
                  @system_arguments[:tag] = :svg
         | 
| 37 35 | 
             
                  @system_arguments[:style] ||= style
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  @ | 
| 36 | 
            +
                  @system_arguments[:animation] = :rotate
         | 
| 37 | 
            +
                  @system_arguments[:width] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
         | 
| 38 | 
            +
                  @system_arguments[:height] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
         | 
| 39 | 
            +
                  @system_arguments[:viewBox] = "0 0 16 16"
         | 
| 40 | 
            +
                  @system_arguments[:fill] = :none
         | 
| 40 41 | 
             
                end
         | 
| 41 42 | 
             
              end
         | 
| 42 43 | 
             
            end
         | 
| @@ -9,9 +9,10 @@ module Primer | |
| 9 9 | 
             
                  PRELOADED_ICONS = [:alert, :check, :"chevron-down", :paste, :clock, :"dot-fill", :info, :"kebab-horizontal", :link, :lock, :mail, :pencil, :plus, :question, :repo, :search, :"shield-lock", :star, :trash, :x].freeze
         | 
| 10 10 |  | 
| 11 11 | 
             
                  class << self
         | 
| 12 | 
            -
                    def get_key( | 
| 13 | 
            -
                       | 
| 14 | 
            -
                       | 
| 12 | 
            +
                    def get_key(symbol:, size:, width: nil, height: nil)
         | 
| 13 | 
            +
                      attrs = { symbol: symbol, size: size, width: width, height: height }
         | 
| 14 | 
            +
                      attrs.compact!
         | 
| 15 | 
            +
                      attrs.hash
         | 
| 15 16 | 
             
                    end
         | 
| 16 17 |  | 
| 17 18 | 
             
                    def read(key)
         | 
| @@ -37,13 +38,6 @@ module Primer | |
| 37 38 | 
             
                    def preload!
         | 
| 38 39 | 
             
                      PRELOADED_ICONS.each { |icon| Primer::OcticonComponent.new(icon: icon) }
         | 
| 39 40 | 
             
                    end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                    private
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    def correct_key_args?(symbol:, size:, width: nil, height: nil)
         | 
| 44 | 
            -
                      # This method does nothing but will raise an ArgumentError if the
         | 
| 45 | 
            -
                      # wrong args are passed.
         | 
| 46 | 
            -
                    end
         | 
| 47 41 | 
             
                  end
         | 
| 48 42 | 
             
                end
         | 
| 49 43 | 
             
              end
         | 
| @@ -1578,6 +1578,12 @@ | |
| 1578 1578 | 
             
              - border-x
         | 
| 1579 1579 | 
             
              true:
         | 
| 1580 1580 | 
             
              - border
         | 
| 1581 | 
            +
              0:
         | 
| 1582 | 
            +
              - border-0
         | 
| 1583 | 
            +
              false:
         | 
| 1584 | 
            +
              - border-0
         | 
| 1585 | 
            +
              :dashed:
         | 
| 1586 | 
            +
              - border-dashed
         | 
| 1581 1587 | 
             
            :border_top:
         | 
| 1582 1588 | 
             
              0:
         | 
| 1583 1589 | 
             
              - border-top-0
         | 
| @@ -1602,32 +1608,84 @@ | |
| 1602 1608 | 
             
            :justify_content:
         | 
| 1603 1609 | 
             
              :flex_start:
         | 
| 1604 1610 | 
             
              - flex-justify-start
         | 
| 1611 | 
            +
              - flex-sm-justify-start
         | 
| 1612 | 
            +
              - flex-md-justify-start
         | 
| 1613 | 
            +
              - flex-lg-justify-start
         | 
| 1614 | 
            +
              - flex-xl-justify-start
         | 
| 1605 1615 | 
             
              :flex_end:
         | 
| 1606 1616 | 
             
              - flex-justify-end
         | 
| 1617 | 
            +
              - flex-sm-justify-end
         | 
| 1618 | 
            +
              - flex-md-justify-end
         | 
| 1619 | 
            +
              - flex-lg-justify-end
         | 
| 1620 | 
            +
              - flex-xl-justify-end
         | 
| 1607 1621 | 
             
              :center:
         | 
| 1608 1622 | 
             
              - flex-justify-center
         | 
| 1623 | 
            +
              - flex-sm-justify-center
         | 
| 1624 | 
            +
              - flex-md-justify-center
         | 
| 1625 | 
            +
              - flex-lg-justify-center
         | 
| 1626 | 
            +
              - flex-xl-justify-center
         | 
| 1609 1627 | 
             
              :space_between:
         | 
| 1610 1628 | 
             
              - flex-justify-between
         | 
| 1629 | 
            +
              - flex-sm-justify-between
         | 
| 1630 | 
            +
              - flex-md-justify-between
         | 
| 1631 | 
            +
              - flex-lg-justify-between
         | 
| 1632 | 
            +
              - flex-xl-justify-between
         | 
| 1611 1633 | 
             
              :space_around:
         | 
| 1612 1634 | 
             
              - flex-justify-around
         | 
| 1635 | 
            +
              - flex-sm-justify-around
         | 
| 1636 | 
            +
              - flex-md-justify-around
         | 
| 1637 | 
            +
              - flex-lg-justify-around
         | 
| 1638 | 
            +
              - flex-xl-justify-around
         | 
| 1613 1639 | 
             
            :align_items:
         | 
| 1614 1640 | 
             
              :flex_start:
         | 
| 1615 1641 | 
             
              - flex-items-start
         | 
| 1642 | 
            +
              - flex-sm-items-start
         | 
| 1643 | 
            +
              - flex-md-items-start
         | 
| 1644 | 
            +
              - flex-lg-items-start
         | 
| 1645 | 
            +
              - flex-xl-items-start
         | 
| 1616 1646 | 
             
              :flex_end:
         | 
| 1617 1647 | 
             
              - flex-items-end
         | 
| 1648 | 
            +
              - flex-sm-items-end
         | 
| 1649 | 
            +
              - flex-md-items-end
         | 
| 1650 | 
            +
              - flex-lg-items-end
         | 
| 1651 | 
            +
              - flex-xl-items-end
         | 
| 1618 1652 | 
             
              :center:
         | 
| 1619 1653 | 
             
              - flex-items-center
         | 
| 1654 | 
            +
              - flex-sm-items-center
         | 
| 1655 | 
            +
              - flex-md-items-center
         | 
| 1656 | 
            +
              - flex-lg-items-center
         | 
| 1657 | 
            +
              - flex-xl-items-center
         | 
| 1620 1658 | 
             
              :baseline:
         | 
| 1621 1659 | 
             
              - flex-items-baseline
         | 
| 1660 | 
            +
              - flex-sm-items-baseline
         | 
| 1661 | 
            +
              - flex-md-items-baseline
         | 
| 1662 | 
            +
              - flex-lg-items-baseline
         | 
| 1663 | 
            +
              - flex-xl-items-baseline
         | 
| 1622 1664 | 
             
              :stretch:
         | 
| 1623 1665 | 
             
              - flex-items-stretch
         | 
| 1666 | 
            +
              - flex-sm-items-stretch
         | 
| 1667 | 
            +
              - flex-md-items-stretch
         | 
| 1668 | 
            +
              - flex-lg-items-stretch
         | 
| 1669 | 
            +
              - flex-xl-items-stretch
         | 
| 1624 1670 | 
             
            :flex_wrap:
         | 
| 1625 1671 | 
             
              :wrap:
         | 
| 1626 1672 | 
             
              - flex-wrap
         | 
| 1673 | 
            +
              - flex-sm-wrap
         | 
| 1674 | 
            +
              - flex-md-wrap
         | 
| 1675 | 
            +
              - flex-lg-wrap
         | 
| 1676 | 
            +
              - flex-xl-wrap
         | 
| 1627 1677 | 
             
              :nowrap:
         | 
| 1628 1678 | 
             
              - flex-nowrap
         | 
| 1679 | 
            +
              - flex-sm-nowrap
         | 
| 1680 | 
            +
              - flex-md-nowrap
         | 
| 1681 | 
            +
              - flex-lg-nowrap
         | 
| 1682 | 
            +
              - flex-xl-nowrap
         | 
| 1629 1683 | 
             
              :reverse:
         | 
| 1630 1684 | 
             
              - flex-wrap-reverse
         | 
| 1685 | 
            +
              - flex-sm-wrap-reverse
         | 
| 1686 | 
            +
              - flex-md-wrap-reverse
         | 
| 1687 | 
            +
              - flex-lg-wrap-reverse
         | 
| 1688 | 
            +
              - flex-xl-wrap-reverse
         | 
| 1631 1689 | 
             
            :direction:
         | 
| 1632 1690 | 
             
              :column:
         | 
| 1633 1691 | 
             
              - flex-column
         | 
| @@ -1656,24 +1714,64 @@ | |
| 1656 1714 | 
             
            :flex:
         | 
| 1657 1715 | 
             
              1:
         | 
| 1658 1716 | 
             
              - flex-1
         | 
| 1717 | 
            +
              - flex-sm-1
         | 
| 1718 | 
            +
              - flex-md-1
         | 
| 1719 | 
            +
              - flex-lg-1
         | 
| 1720 | 
            +
              - flex-xl-1
         | 
| 1659 1721 | 
             
              :auto:
         | 
| 1660 1722 | 
             
              - flex-auto
         | 
| 1723 | 
            +
              - flex-sm-auto
         | 
| 1724 | 
            +
              - flex-md-auto
         | 
| 1725 | 
            +
              - flex-lg-auto
         | 
| 1726 | 
            +
              - flex-xl-auto
         | 
| 1661 1727 | 
             
            :align_self:
         | 
| 1662 1728 | 
             
              :auto:
         | 
| 1663 1729 | 
             
              - flex-self-auto
         | 
| 1730 | 
            +
              - flex-sm-self-auto
         | 
| 1731 | 
            +
              - flex-md-self-auto
         | 
| 1732 | 
            +
              - flex-lg-self-auto
         | 
| 1733 | 
            +
              - flex-xl-self-auto
         | 
| 1664 1734 | 
             
              :start:
         | 
| 1665 1735 | 
             
              - flex-self-start
         | 
| 1736 | 
            +
              - flex-sm-self-start
         | 
| 1737 | 
            +
              - flex-md-self-start
         | 
| 1738 | 
            +
              - flex-lg-self-start
         | 
| 1739 | 
            +
              - flex-xl-self-start
         | 
| 1666 1740 | 
             
              :end:
         | 
| 1667 1741 | 
             
              - flex-self-end
         | 
| 1742 | 
            +
              - flex-sm-self-end
         | 
| 1743 | 
            +
              - flex-md-self-end
         | 
| 1744 | 
            +
              - flex-lg-self-end
         | 
| 1745 | 
            +
              - flex-xl-self-end
         | 
| 1668 1746 | 
             
              :center:
         | 
| 1669 1747 | 
             
              - flex-self-center
         | 
| 1748 | 
            +
              - flex-sm-self-center
         | 
| 1749 | 
            +
              - flex-md-self-center
         | 
| 1750 | 
            +
              - flex-lg-self-center
         | 
| 1751 | 
            +
              - flex-xl-self-center
         | 
| 1670 1752 | 
             
              :baseline:
         | 
| 1671 1753 | 
             
              - flex-self-baseline
         | 
| 1754 | 
            +
              - flex-sm-self-baseline
         | 
| 1755 | 
            +
              - flex-md-self-baseline
         | 
| 1756 | 
            +
              - flex-lg-self-baseline
         | 
| 1757 | 
            +
              - flex-xl-self-baseline
         | 
| 1672 1758 | 
             
              :stretch:
         | 
| 1673 1759 | 
             
              - flex-self-stretch
         | 
| 1760 | 
            +
              - flex-sm-self-stretch
         | 
| 1761 | 
            +
              - flex-md-self-stretch
         | 
| 1762 | 
            +
              - flex-lg-self-stretch
         | 
| 1763 | 
            +
              - flex-xl-self-stretch
         | 
| 1674 1764 | 
             
            :flex_grow:
         | 
| 1675 1765 | 
             
              0:
         | 
| 1676 1766 | 
             
              - flex-grow-0
         | 
| 1767 | 
            +
              - flex-sm-grow-0
         | 
| 1768 | 
            +
              - flex-md-grow-0
         | 
| 1769 | 
            +
              - flex-lg-grow-0
         | 
| 1770 | 
            +
              - flex-xl-grow-0
         | 
| 1677 1771 | 
             
            :flex_shrink:
         | 
| 1678 1772 | 
             
              0:
         | 
| 1679 1773 | 
             
              - flex-shrink-0
         | 
| 1774 | 
            +
              - flex-sm-shrink-0
         | 
| 1775 | 
            +
              - flex-md-shrink-0
         | 
| 1776 | 
            +
              - flex-lg-shrink-0
         | 
| 1777 | 
            +
              - flex-xl-shrink-0
         | 
    
        data/lib/primer/classify.rb
    CHANGED
    
    | @@ -42,7 +42,7 @@ module Primer | |
| 42 42 | 
             
                  # extract_css_attrs(classes: "d-flex", mt: 4, py: 2) => { classes: "d-flex mt-4 py-2", style: nil }
         | 
| 43 43 | 
             
                  # extract_css_attrs(classes: "d-flex", style: "float: left", mt: 4, py: 2) => { classes: "d-flex mt-4 py-2", style: "float: left" }
         | 
| 44 44 | 
             
                  #
         | 
| 45 | 
            -
                  def call( | 
| 45 | 
            +
                  def call(args = {})
         | 
| 46 46 | 
             
                    style = nil
         | 
| 47 47 | 
             
                    classes = [].tap do |result|
         | 
| 48 48 | 
             
                      args.each do |key, val|
         | 
| @@ -18,6 +18,7 @@ module Primer | |
| 18 18 | 
             
                  config.primer_view_components.raise_on_invalid_options = false
         | 
| 19 19 | 
             
                  config.primer_view_components.silence_deprecations = false
         | 
| 20 20 | 
             
                  config.primer_view_components.validate_class_names = !Rails.env.production?
         | 
| 21 | 
            +
                  config.primer_view_components.raise_on_invalid_aria = false
         | 
| 21 22 |  | 
| 22 23 | 
             
                  initializer "primer_view_components.assets" do |app|
         | 
| 23 24 | 
             
                    app.config.assets.precompile += %w[primer_view_components] if app.config.respond_to?(:assets)
         | 
| @@ -13,9 +13,9 @@ module ERBLint | |
| 13 13 | 
             
                      symbolize: true
         | 
| 14 14 | 
             
                    ).freeze
         | 
| 15 15 |  | 
| 16 | 
            -
                     | 
| 16 | 
            +
                    SIZE_MAPPINGS = Primer::ViewComponents::Constants.get(
         | 
| 17 17 | 
             
                      component: "Primer::ButtonComponent",
         | 
| 18 | 
            -
                      constant: " | 
| 18 | 
            +
                      constant: "SIZE_MAPPINGS",
         | 
| 19 19 | 
             
                      symbolize: true
         | 
| 20 20 | 
             
                    ).freeze
         | 
| 21 21 |  | 
| @@ -55,8 +55,8 @@ module ERBLint | |
| 55 55 |  | 
| 56 56 | 
             
                        if SCHEME_MAPPINGS[class_name] && acc[:scheme].nil?
         | 
| 57 57 | 
             
                          acc[:scheme] = SCHEME_MAPPINGS[class_name]
         | 
| 58 | 
            -
                        elsif  | 
| 59 | 
            -
                          acc[: | 
| 58 | 
            +
                        elsif SIZE_MAPPINGS[class_name] && acc[:size].nil?
         | 
| 59 | 
            +
                          acc[:size] = SIZE_MAPPINGS[class_name]
         | 
| 60 60 | 
             
                        elsif class_name == "btn-block"
         | 
| 61 61 | 
             
                          acc[:block] = true
         | 
| 62 62 | 
             
                        elsif class_name == "BtnGroup-item"
         | 
| @@ -22,7 +22,7 @@ module RuboCop | |
| 22 22 | 
             
                    #
         | 
| 23 23 | 
             
                    #   * The top level key is the argument.
         | 
| 24 24 | 
             
                    #   * The second level key is the value.
         | 
| 25 | 
            -
                    #   * The  | 
| 25 | 
            +
                    #   * The second level value is a string of the full replacement. e.g. "new_argument: :new_value"
         | 
| 26 26 | 
             
                    #     If the value is nil, then there is no replacement.
         | 
| 27 27 | 
             
                    #
         | 
| 28 28 | 
             
                    # e.g.
         |