openproject-primer_view_components 0.52.0 → 0.52.2
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 +26 -0
- data/app/assets/javascripts/primer_view_components.js +1 -1
- data/app/assets/javascripts/primer_view_components.js.map +1 -1
- data/app/assets/styles/primer_view_components.css +1 -1
- data/app/assets/styles/primer_view_components.css.map +1 -1
- data/app/components/primer/alpha/action_list/divider.rb +4 -0
- data/app/components/primer/alpha/action_menu/action_menu_element.js +1 -0
- data/app/components/primer/alpha/action_menu/action_menu_element.ts +1 -0
- data/app/components/primer/alpha/dialog.css +1 -1
- data/app/components/primer/alpha/dialog.css.json +0 -1
- data/app/components/primer/alpha/dialog.css.map +1 -1
- data/app/components/primer/alpha/dialog.pcss +0 -5
- data/app/components/primer/alpha/text_field.css +1 -1
- data/app/components/primer/alpha/text_field.css.json +14 -0
- data/app/components/primer/alpha/text_field.css.map +1 -1
- data/app/components/primer/alpha/text_field.pcss +89 -2
- data/app/components/primer/open_project/danger_confirmation_dialog/confirmation_check_box.rb +1 -0
- data/app/components/primer/open_project/danger_confirmation_dialog/form_wrapper.rb +2 -0
- data/app/components/primer/open_project/danger_confirmation_dialog.html.erb +1 -1
- data/app/components/primer/open_project/danger_confirmation_dialog.rb +8 -8
- data/app/components/primer/open_project/feedback_dialog.rb +6 -4
- data/app/lib/primer/forms/acts_as_component.rb +32 -17
- data/app/lib/primer/forms/base_component.rb +5 -12
- data/app/lib/primer/forms/dsl/text_field_input.rb +10 -7
- data/app/lib/primer/forms/text_field.html.erb +5 -0
- data/app/lib/primer/forms/text_field.rb +37 -0
- data/lib/primer/classify/utilities.yml +1 -1
- data/lib/primer/view_components/version.rb +1 -1
- data/previews/primer/alpha/text_field_preview.rb +30 -0
- data/static/arguments.json +67 -0
- data/static/audited_at.json +3 -0
- data/static/constants.json +11 -0
- data/static/form_previews.json +5 -0
- data/static/info_arch.json +366 -15
- data/static/previews.json +177 -0
- data/static/statuses.json +3 -0
- metadata +2 -2
| @@ -5,6 +5,8 @@ module Primer | |
| 5 5 | 
             
                class DangerConfirmationDialog
         | 
| 6 6 | 
             
                  # Utility component for wrapping DangerConfirmationDialog in a form
         | 
| 7 7 | 
             
                  class FormWrapper < Primer::Component
         | 
| 8 | 
            +
                    status :open_project
         | 
| 9 | 
            +
             | 
| 8 10 | 
             
                    def initialize(builder: nil, action: nil, **form_arguments)
         | 
| 9 11 | 
             
                      raise ArgumentError, "Pass in either a :builder or :action argument, not both." if builder && action
         | 
| 10 12 |  | 
| @@ -11,7 +11,7 @@ | |
| 11 11 | 
             
                    <% end %>
         | 
| 12 12 | 
             
                  </scrollable-region>
         | 
| 13 13 | 
             
                  <%= render(Primer::Alpha::Dialog::Footer.new(show_divider: false)) do %>
         | 
| 14 | 
            -
                    <%= render(Primer::Beta::Button.new(data: { "close-dialog-id": dialog_id })) { I18n.t(" | 
| 14 | 
            +
                    <%= render(Primer::Beta::Button.new(data: { "close-dialog-id": dialog_id })) { I18n.t("button_cancel") } %>
         | 
| 15 15 | 
             
                    <%= render(Primer::Beta::Button.new(type: (@form_wrapper.shows_form? ? :submit : :button), scheme: :danger, data: { "submit-dialog-id": dialog_id })) { I18n.t("button_delete_permanently") } %>
         | 
| 16 16 | 
             
                  <% end %>
         | 
| 17 17 | 
             
                <% end %>
         | 
| @@ -12,8 +12,10 @@ module Primer | |
| 12 12 |  | 
| 13 13 | 
             
                  # A confirmation message with some defaults that are necessary for rendering nicely.
         | 
| 14 14 | 
             
                  #
         | 
| 15 | 
            -
                  #  | 
| 16 | 
            -
                  # | 
| 15 | 
            +
                  # To render the message heading (required), call the `with_heading` method, which accepts a `:tag` argument, along with the arguments accepted by <%= link_to_component(Primer::Beta::Heading) %>.
         | 
| 16 | 
            +
                  #
         | 
| 17 | 
            +
                  # To render the message description, call the `with_description` method, which accepts <%= link_to_system_arguments_docs %>
         | 
| 18 | 
            +
                  #
         | 
| 17 19 | 
             
                  # @param icon_arguments [Hash] the system_arguments for the icon
         | 
| 18 20 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 19 21 | 
             
                  renders_one :confirmation_message, lambda { |icon_arguments: {}, **system_arguments|
         | 
| @@ -27,6 +29,8 @@ module Primer | |
| 27 29 |  | 
| 28 30 | 
             
                  # A checkbox that the user is required to check in order to continue with the destructive action.
         | 
| 29 31 | 
             
                  #
         | 
| 32 | 
            +
                  # To render the checkbox label (required), pass a block that returns a String.
         | 
| 33 | 
            +
                  #
         | 
| 30 34 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 31 35 | 
             
                  renders_one :confirmation_check_box, lambda { |**system_arguments|
         | 
| 32 36 | 
             
                    system_arguments[:display] ||= :flex
         | 
| @@ -38,7 +42,7 @@ module Primer | |
| 38 42 | 
             
                    Primer::OpenProject::DangerConfirmationDialog::ConfirmationCheckBox.new(check_box_id: check_box_id, check_box_name: @check_box_name, **system_arguments)
         | 
| 39 43 | 
             
                  }
         | 
| 40 44 |  | 
| 41 | 
            -
                  # Optional  | 
| 45 | 
            +
                  # Optional additional details, such as grid displaying a list of items to be deleted
         | 
| 42 46 | 
             
                  #
         | 
| 43 47 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 44 48 | 
             
                  renders_one :additional_details, lambda { |**system_arguments|
         | 
| @@ -57,11 +61,7 @@ module Primer | |
| 57 61 | 
             
                    Primer::BaseComponent.new(**system_arguments)
         | 
| 58 62 | 
             
                  }
         | 
| 59 63 |  | 
| 60 | 
            -
                  # @param form_arguments [Hash] Allows the dialog to submit a form. Pass EITHER the `builder:` option to this hash
         | 
| 61 | 
            -
                  # to reuse an existing Rails form, or `action:` if you prefer the component to render the form tag itself.
         | 
| 62 | 
            -
                  # `builder:` should be an instance of `ActionView::Helpers::FormBuilder`, which is created by the standard Rails
         | 
| 63 | 
            -
                  # `#form_with` and `#form_for` helpers. The `name:` option is the desired name of the field that will be included
         | 
| 64 | 
            -
                  # in the params sent to the server on form submission.
         | 
| 64 | 
            +
                  # @param form_arguments [Hash] Allows the dialog to submit a form. Pass EITHER the `builder:` option to this hash to reuse an existing Rails form, or `action:` if you prefer the component to render the form tag itself. `builder:` should be an instance of `ActionView::Helpers::FormBuilder`, which is created by the standard Rails `#form_with` and `#form_for` helpers. The `name:` option is the desired name of the field that will be included in the params sent to the server on form submission.
         | 
| 65 65 | 
             
                  # @param id [String] The id of the dialog.
         | 
| 66 66 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 67 67 | 
             
                  def initialize(
         | 
| @@ -6,10 +6,12 @@ module Primer | |
| 6 6 | 
             
                class FeedbackDialog < Primer::Component
         | 
| 7 7 | 
             
                  status :open_project
         | 
| 8 8 |  | 
| 9 | 
            -
                  # A feedback message with some defaults that are necessary for rendering nicely
         | 
| 9 | 
            +
                  # A feedback message with some defaults that are necessary for rendering nicely.
         | 
| 10 | 
            +
                  #
         | 
| 11 | 
            +
                  # To render the message heading (required), call the `with_heading` method, which accepts a `:tag` argument, along with the arguments accepted by <%= link_to_component(Primer::Beta::Heading) %>.
         | 
| 12 | 
            +
                  #
         | 
| 13 | 
            +
                  # To render the message description, call the `with_description` method, which accepts <%= link_to_system_arguments_docs %>
         | 
| 10 14 | 
             
                  #
         | 
| 11 | 
            -
                  # @param heading [String] the heading for the success message
         | 
| 12 | 
            -
                  # @param description [String] the description for the success message
         | 
| 13 15 | 
             
                  # @param icon_arguments [Hash] the system_arguments for the icon
         | 
| 14 16 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 15 17 | 
             
                  renders_one :feedback_message, lambda { |icon_arguments: {}, **system_arguments|
         | 
| @@ -17,7 +19,7 @@ module Primer | |
| 17 19 | 
             
                    Primer::OpenProject::FeedbackMessage.new(icon_arguments: icon_arguments, **system_arguments)
         | 
| 18 20 | 
             
                  }
         | 
| 19 21 |  | 
| 20 | 
            -
                  # Optional  | 
| 22 | 
            +
                  # Optional additional details, like a form input or toast.
         | 
| 21 23 | 
             
                  #
         | 
| 22 24 | 
             
                  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
         | 
| 23 25 | 
             
                  renders_one :additional_details, lambda { |**system_arguments|
         | 
| @@ -66,30 +66,45 @@ module Primer | |
| 66 66 | 
             
                    @compiled = true
         | 
| 67 67 | 
             
                  end
         | 
| 68 68 |  | 
| 69 | 
            -
                  private
         | 
| 70 | 
            -
             | 
| 71 69 | 
             
                  def template_root_path
         | 
| 72 70 | 
             
                    return @template_root_path if defined?(@template_root_path)
         | 
| 73 71 |  | 
| 74 72 | 
             
                    form_path = Utils.const_source_location(self.name)
         | 
| 75 | 
            -
                    @template_root_path = | 
| 76 | 
            -
                       | 
| 73 | 
            +
                    @template_root_path =
         | 
| 74 | 
            +
                      if form_path
         | 
| 75 | 
            +
                        File.join(File.dirname(form_path), self.name.demodulize.underscore)
         | 
| 76 | 
            +
                      end
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  def base_template_path
         | 
| 80 | 
            +
                    return @base_template_path if defined?(@base_template_path)
         | 
| 81 | 
            +
                    base_path = Utils.const_source_location(self.name)
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    if base_path
         | 
| 84 | 
            +
                      @base_template_path = File.dirname(base_path)
         | 
| 85 | 
            +
                    else
         | 
| 86 | 
            +
                      warn "Could not identify the template for #{self}"
         | 
| 77 87 | 
             
                    end
         | 
| 78 88 | 
             
                  end
         | 
| 79 89 |  | 
| 90 | 
            +
                  private
         | 
| 91 | 
            +
             | 
| 80 92 | 
             
                  def template_globs
         | 
| 81 93 | 
             
                    @template_globs ||= []
         | 
| 82 94 | 
             
                  end
         | 
| 83 95 |  | 
| 84 96 | 
             
                  def compile_templates_in(template_glob)
         | 
| 85 | 
            -
                    pattern =  | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 97 | 
            +
                    pattern = template_glob.glob_pattern
         | 
| 98 | 
            +
                    pattern = pattern.gsub("%{base_template_path}", base_template_path) if base_template_path
         | 
| 99 | 
            +
                    pattern =
         | 
| 100 | 
            +
                      if Pathname(pattern).absolute?
         | 
| 101 | 
            +
                        pattern
         | 
| 102 | 
            +
                      else
         | 
| 103 | 
            +
                        # skip compilation for anonymous form classes, as in tests
         | 
| 104 | 
            +
                        return unless template_root_path
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                        File.join(template_root_path, pattern)
         | 
| 107 | 
            +
                      end
         | 
| 93 108 |  | 
| 94 109 | 
             
                    template_paths = Dir.glob(pattern)
         | 
| 95 110 |  | 
| @@ -117,11 +132,11 @@ module Primer | |
| 117 132 | 
             
                    handler = ActionView::Template.handler_for_extension("erb")
         | 
| 118 133 | 
             
                    template = File.read(path)
         | 
| 119 134 | 
             
                    template_params = TemplateParams.new({
         | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 135 | 
            +
                      source: template,
         | 
| 136 | 
            +
                      identifier: __FILE__,
         | 
| 137 | 
            +
                      type: "text/html",
         | 
| 138 | 
            +
                      format: "text/html"
         | 
| 139 | 
            +
                    })
         | 
| 125 140 |  | 
| 126 141 | 
             
                    # change @output_buffer ivar to output_buffer method call
         | 
| 127 142 | 
             
                    BufferRewriter.rewrite(
         | 
| @@ -7,18 +7,11 @@ module Primer | |
| 7 7 | 
             
                  include Primer::ClassNameHelper
         | 
| 8 8 | 
             
                  extend ActsAsComponent
         | 
| 9 9 |  | 
| 10 | 
            -
                  def self. | 
| 11 | 
            -
                     | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                      return
         | 
| 16 | 
            -
                    end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                    dir = File.dirname(base_path)
         | 
| 19 | 
            -
                    renders_template File.join(dir, "#{self.name.demodulize.underscore}.html.erb"), :render_template
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    super
         | 
| 10 | 
            +
                  def self.inherited(base)
         | 
| 11 | 
            +
                    base.renders_template(
         | 
| 12 | 
            +
                      File.join("%{base_template_path}", "#{base.name.demodulize.underscore}.html.erb"),
         | 
| 13 | 
            +
                      :render_template
         | 
| 14 | 
            +
                    )
         | 
| 22 15 | 
             
                  end
         | 
| 23 16 |  | 
| 24 17 | 
             
                  delegate :required?, :disabled?, :hidden?, to: :@input
         | 
| @@ -1,5 +1,3 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            module Primer
         | 
| 4 2 | 
             
              module Forms
         | 
| 5 3 | 
             
                module Dsl
         | 
| @@ -7,7 +5,7 @@ module Primer | |
| 7 5 | 
             
                  class TextFieldInput < Input
         | 
| 8 6 | 
             
                    attr_reader(
         | 
| 9 7 | 
             
                      *%i[
         | 
| 10 | 
            -
                        name label show_clear_button leading_visual leading_spinner clear_button_id
         | 
| 8 | 
            +
                        name label show_clear_button leading_visual leading_spinner trailing_visual clear_button_id
         | 
| 11 9 | 
             
                        visually_hide_label inset monospace field_wrap_classes auto_check_src
         | 
| 12 10 | 
             
                      ]
         | 
| 13 11 | 
             
                    )
         | 
| @@ -20,6 +18,7 @@ module Primer | |
| 20 18 |  | 
| 21 19 | 
             
                      @show_clear_button = system_arguments.delete(:show_clear_button)
         | 
| 22 20 | 
             
                      @leading_visual = system_arguments.delete(:leading_visual)
         | 
| 21 | 
            +
                      @trailing_visual = system_arguments.delete(:trailing_visual)
         | 
| 23 22 | 
             
                      @leading_spinner = !!system_arguments.delete(:leading_spinner)
         | 
| 24 23 | 
             
                      @clear_button_id = system_arguments.delete(:clear_button_id)
         | 
| 25 24 | 
             
                      @inset = system_arguments.delete(:inset)
         | 
| @@ -48,6 +47,14 @@ module Primer | |
| 48 47 | 
             
                    alias inset? inset
         | 
| 49 48 | 
             
                    alias monospace? monospace
         | 
| 50 49 |  | 
| 50 | 
            +
                    def trailing_visual?
         | 
| 51 | 
            +
                      !!@trailing_visual
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    def leading_visual?
         | 
| 55 | 
            +
                      !!@leading_visual
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
             | 
| 51 58 | 
             
                    def to_component
         | 
| 52 59 | 
             
                      TextField.new(input: self)
         | 
| 53 60 | 
             
                    end
         | 
| @@ -60,10 +67,6 @@ module Primer | |
| 60 67 | 
             
                      true
         | 
| 61 68 | 
             
                    end
         | 
| 62 69 |  | 
| 63 | 
            -
                    def leading_visual?
         | 
| 64 | 
            -
                      !!@leading_visual
         | 
| 65 | 
            -
                    end
         | 
| 66 | 
            -
             | 
| 67 70 | 
             
                    def validation_arguments
         | 
| 68 71 | 
             
                      if auto_check_src.present?
         | 
| 69 72 | 
             
                        super.merge(
         | 
| @@ -17,5 +17,10 @@ | |
| 17 17 | 
             
                    <%= render(Primer::Beta::Octicon.new(icon: :"x-circle-fill")) %>
         | 
| 18 18 | 
             
                  </button>
         | 
| 19 19 | 
             
                <% end %>
         | 
| 20 | 
            +
                <% if @input.trailing_visual %>
         | 
| 21 | 
            +
                  <div class="FormControl-input-trailingVisualWrap">
         | 
| 22 | 
            +
                    <%= render(trailing_visual_component) %>
         | 
| 23 | 
            +
                  </div>
         | 
| 24 | 
            +
                <% end %>
         | 
| 20 25 | 
             
              <% end %>
         | 
| 21 26 | 
             
            <% end %>
         | 
| @@ -23,6 +23,7 @@ module Primer | |
| 23 23 | 
             
                      "FormControl-input-wrap",
         | 
| 24 24 | 
             
                      INPUT_WRAP_SIZE[input.size],
         | 
| 25 25 | 
             
                      { "FormControl-input-wrap--trailingAction": @input.show_clear_button? },
         | 
| 26 | 
            +
                      { "FormControl-input-wrap--trailingVisual": @input.trailing_visual? },
         | 
| 26 27 | 
             
                      { "FormControl-input-wrap--leadingVisual": @input.leading_visual? }
         | 
| 27 28 | 
             
                    ]
         | 
| 28 29 | 
             
                    wrap_classes << Primer::Forms::Dsl::Input::INPUT_WIDTH_MAPPINGS[@input.input_width] if @input.input_width
         | 
| @@ -43,6 +44,42 @@ module Primer | |
| 43 44 | 
             
                        )
         | 
| 44 45 | 
             
                      end
         | 
| 45 46 | 
             
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def trailing_visual_component
         | 
| 49 | 
            +
                    return @trailing_visual_component if defined?(@trailing_visual_component)
         | 
| 50 | 
            +
                    visual = @input.trailing_visual
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    # Render icon if specified
         | 
| 53 | 
            +
                    @trailing_visual_component =
         | 
| 54 | 
            +
                      if (icon_arguments = visual[:icon])
         | 
| 55 | 
            +
                        Primer::Beta::Octicon.new(**icon_arguments)
         | 
| 56 | 
            +
                      elsif (label_arguments = visual[:label])
         | 
| 57 | 
            +
                        # Render label if specified
         | 
| 58 | 
            +
                        label_arguments[:classes] = class_names(
         | 
| 59 | 
            +
                          label_arguments.delete(:classes),
         | 
| 60 | 
            +
                          "FormControl-input-trailingVisualLabel"
         | 
| 61 | 
            +
                        )
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                        text = label_arguments.delete(:text)
         | 
| 64 | 
            +
                        Primer::Beta::Label.new(**label_arguments).with_content(text)
         | 
| 65 | 
            +
                      elsif (counter_arguments = visual[:counter])
         | 
| 66 | 
            +
                        # Render counter if specified
         | 
| 67 | 
            +
                        counter_arguments[:classes] = class_names(
         | 
| 68 | 
            +
                          counter_arguments.delete(:classes),
         | 
| 69 | 
            +
                          "FormControl-input-trailingVisualCounter"
         | 
| 70 | 
            +
                        )
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                        Primer::Beta::Counter.new(**counter_arguments)
         | 
| 73 | 
            +
                      elsif (truncate_arguments = visual[:text])
         | 
| 74 | 
            +
                        # Render text if specified
         | 
| 75 | 
            +
                        truncate_arguments[:classes] = class_names(
         | 
| 76 | 
            +
                          truncate_arguments.delete(:classes),
         | 
| 77 | 
            +
                          "FormControl-input-trailingVisualText"
         | 
| 78 | 
            +
                        )
         | 
| 79 | 
            +
                        text = truncate_arguments.delete(:text)
         | 
| 80 | 
            +
                        Primer::Beta::Truncate.new(**truncate_arguments).with_content(text)
         | 
| 81 | 
            +
                      end
         | 
| 82 | 
            +
                  end
         | 
| 46 83 | 
             
                end
         | 
| 47 84 | 
             
              end
         | 
| 48 85 | 
             
            end
         | 
| @@ -175,6 +175,36 @@ module Primer | |
| 175 175 | 
             
                    render(Primer::Alpha::TextField.new(monospace: true, name: "my-text-field", label: "My text field"))
         | 
| 176 176 | 
             
                  end
         | 
| 177 177 |  | 
| 178 | 
            +
                  # @label With trailing icon
         | 
| 179 | 
            +
                  # @snapshot
         | 
| 180 | 
            +
                  def with_trailing_icon
         | 
| 181 | 
            +
                    render(Primer::Alpha::TextField.new(trailing_visual: { icon: { icon: :search } }, name: "my-text-field", label: "My text field"))
         | 
| 182 | 
            +
                  end
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                  # @label With trailing text
         | 
| 185 | 
            +
                  # @snapshot
         | 
| 186 | 
            +
                  def with_trailing_text
         | 
| 187 | 
            +
                    render(Primer::Alpha::TextField.new(trailing_visual: { text: { text: "minute" } }, name: "my-text-field", label: "My text field"))
         | 
| 188 | 
            +
                  end
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                  # @label With trailing long text
         | 
| 191 | 
            +
                  # @snapshot
         | 
| 192 | 
            +
                  def with_trailing_long_text
         | 
| 193 | 
            +
                    render(Primer::Alpha::TextField.new(trailing_visual: { text: { text: "Long trailing text" } }, name: "my-text-field", label: "My text field"))
         | 
| 194 | 
            +
                  end
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                  # @label With trailing counter
         | 
| 197 | 
            +
                  # @snapshot
         | 
| 198 | 
            +
                  def with_trailing_counter
         | 
| 199 | 
            +
                    render(Primer::Alpha::TextField.new(trailing_visual: { counter: { count: 5 } }, name: "my-text-field", label: "My text field"))
         | 
| 200 | 
            +
                  end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                  # @label With trailing label
         | 
| 203 | 
            +
                  # @snapshot
         | 
| 204 | 
            +
                  def with_trailing_label
         | 
| 205 | 
            +
                    render(Primer::Alpha::TextField.new(trailing_visual: { label: { text: "Hello" } }, name: "my-text-field", label: "My text field"))
         | 
| 206 | 
            +
                  end
         | 
| 207 | 
            +
             | 
| 178 208 | 
             
                  # @label With leading visual
         | 
| 179 209 | 
             
                  # @snapshot
         | 
| 180 210 | 
             
                  def with_leading_visual
         | 
    
        data/static/arguments.json
    CHANGED
    
    | @@ -5105,6 +5105,73 @@ | |
| 5105 5105 | 
             
                  }
         | 
| 5106 5106 | 
             
                ]
         | 
| 5107 5107 | 
             
              },
         | 
| 5108 | 
            +
              {
         | 
| 5109 | 
            +
                "component": "OpenProject::DangerConfirmationDialog",
         | 
| 5110 | 
            +
                "status": "open_project",
         | 
| 5111 | 
            +
                "a11y_reviewed": false,
         | 
| 5112 | 
            +
                "short_name": "OpenProjectDangerConfirmationDialog",
         | 
| 5113 | 
            +
                "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/danger_confirmation_dialog.rb",
         | 
| 5114 | 
            +
                "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/danger_confirmation_dialog/default/",
         | 
| 5115 | 
            +
                "parameters": [
         | 
| 5116 | 
            +
                  {
         | 
| 5117 | 
            +
                    "name": "form_arguments",
         | 
| 5118 | 
            +
                    "type": "Hash",
         | 
| 5119 | 
            +
                    "default": "`{}`",
         | 
| 5120 | 
            +
                    "description": "Allows the dialog to submit a form. Pass EITHER the `builder:` option to this hash to reuse an existing Rails form, or `action:` if you prefer the component to render the form tag itself. `builder:` should be an instance of `ActionView::Helpers::FormBuilder`, which is created by the standard Rails `#form_with` and `#form_for` helpers. The `name:` option is the desired name of the field that will be included in the params sent to the server on form submission."
         | 
| 5121 | 
            +
                  },
         | 
| 5122 | 
            +
                  {
         | 
| 5123 | 
            +
                    "name": "id",
         | 
| 5124 | 
            +
                    "type": "String",
         | 
| 5125 | 
            +
                    "default": "`self.class.generate_id`",
         | 
| 5126 | 
            +
                    "description": "The id of the dialog."
         | 
| 5127 | 
            +
                  },
         | 
| 5128 | 
            +
                  {
         | 
| 5129 | 
            +
                    "name": "system_arguments",
         | 
| 5130 | 
            +
                    "type": "Hash",
         | 
| 5131 | 
            +
                    "default": "N/A",
         | 
| 5132 | 
            +
                    "description": "[System arguments](/system-arguments)"
         | 
| 5133 | 
            +
                  }
         | 
| 5134 | 
            +
                ]
         | 
| 5135 | 
            +
              },
         | 
| 5136 | 
            +
              {
         | 
| 5137 | 
            +
                "component": "OpenProject::DangerConfirmationDialog::ConfirmationCheckBox",
         | 
| 5138 | 
            +
                "status": "open_project",
         | 
| 5139 | 
            +
                "a11y_reviewed": false,
         | 
| 5140 | 
            +
                "short_name": "OpenProjectDangerConfirmationDialogConfirmationCheckBox",
         | 
| 5141 | 
            +
                "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/danger_confirmation_dialog/confirmation_check_box.rb",
         | 
| 5142 | 
            +
                "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/danger_confirmation_dialog/confirmation_check_box/default/",
         | 
| 5143 | 
            +
                "parameters": [
         | 
| 5144 | 
            +
                  {
         | 
| 5145 | 
            +
                    "name": "check_box_id",
         | 
| 5146 | 
            +
                    "type": "String",
         | 
| 5147 | 
            +
                    "default": "`self.class.generate_id`",
         | 
| 5148 | 
            +
                    "description": "The id of the check_box input."
         | 
| 5149 | 
            +
                  },
         | 
| 5150 | 
            +
                  {
         | 
| 5151 | 
            +
                    "name": "check_box_name",
         | 
| 5152 | 
            +
                    "type": "String",
         | 
| 5153 | 
            +
                    "default": "N/A",
         | 
| 5154 | 
            +
                    "description": "The name of the check_box input."
         | 
| 5155 | 
            +
                  },
         | 
| 5156 | 
            +
                  {
         | 
| 5157 | 
            +
                    "name": "system_arguments",
         | 
| 5158 | 
            +
                    "type": "Hash",
         | 
| 5159 | 
            +
                    "default": "N/A",
         | 
| 5160 | 
            +
                    "description": "[System arguments](/system-arguments)"
         | 
| 5161 | 
            +
                  }
         | 
| 5162 | 
            +
                ]
         | 
| 5163 | 
            +
              },
         | 
| 5164 | 
            +
              {
         | 
| 5165 | 
            +
                "component": "OpenProject::DangerConfirmationDialog::FormWrapper",
         | 
| 5166 | 
            +
                "status": "open_project",
         | 
| 5167 | 
            +
                "a11y_reviewed": false,
         | 
| 5168 | 
            +
                "short_name": "OpenProjectDangerConfirmationDialogFormWrapper",
         | 
| 5169 | 
            +
                "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/danger_confirmation_dialog/form_wrapper.rb",
         | 
| 5170 | 
            +
                "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/danger_confirmation_dialog/form_wrapper/default/",
         | 
| 5171 | 
            +
                "parameters": [
         | 
| 5172 | 
            +
             | 
| 5173 | 
            +
                ]
         | 
| 5174 | 
            +
              },
         | 
| 5108 5175 | 
             
              {
         | 
| 5109 5176 | 
             
                "component": "OpenProject::DragHandle",
         | 
| 5110 5177 | 
             
                "status": "open_project",
         | 
    
        data/static/audited_at.json
    CHANGED
    
    | @@ -118,6 +118,9 @@ | |
| 118 118 | 
             
              "Primer::Navigation::TabComponent": "",
         | 
| 119 119 | 
             
              "Primer::OpenProject::BorderGrid": "",
         | 
| 120 120 | 
             
              "Primer::OpenProject::BorderGrid::Cell": "",
         | 
| 121 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog": "",
         | 
| 122 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog::ConfirmationCheckBox": "",
         | 
| 123 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog::FormWrapper": "",
         | 
| 121 124 | 
             
              "Primer::OpenProject::DragHandle": "",
         | 
| 122 125 | 
             
              "Primer::OpenProject::FeedbackDialog": "",
         | 
| 123 126 | 
             
              "Primer::OpenProject::FeedbackMessage": "",
         | 
    
        data/static/constants.json
    CHANGED
    
    | @@ -1561,6 +1561,17 @@ | |
| 1561 1561 | 
             
              "Primer::OpenProject::BorderGrid::Cell": {
         | 
| 1562 1562 | 
             
                "GeneratedSlotMethods": "Primer::OpenProject::BorderGrid::Cell::GeneratedSlotMethods"
         | 
| 1563 1563 | 
             
              },
         | 
| 1564 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog": {
         | 
| 1565 | 
            +
                "ConfirmationCheckBox": "Primer::OpenProject::DangerConfirmationDialog::ConfirmationCheckBox",
         | 
| 1566 | 
            +
                "FormWrapper": "Primer::OpenProject::DangerConfirmationDialog::FormWrapper",
         | 
| 1567 | 
            +
                "GeneratedSlotMethods": "Primer::OpenProject::DangerConfirmationDialog::GeneratedSlotMethods"
         | 
| 1568 | 
            +
              },
         | 
| 1569 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog::ConfirmationCheckBox": {
         | 
| 1570 | 
            +
                "GeneratedSlotMethods": "Primer::OpenProject::DangerConfirmationDialog::ConfirmationCheckBox::GeneratedSlotMethods"
         | 
| 1571 | 
            +
              },
         | 
| 1572 | 
            +
              "Primer::OpenProject::DangerConfirmationDialog::FormWrapper": {
         | 
| 1573 | 
            +
                "GeneratedSlotMethods": "Primer::OpenProject::DangerConfirmationDialog::FormWrapper::GeneratedSlotMethods"
         | 
| 1574 | 
            +
              },
         | 
| 1564 1575 | 
             
              "Primer::OpenProject::DragHandle": {
         | 
| 1565 1576 | 
             
                "DEFAULT_SIZE": "small",
         | 
| 1566 1577 | 
             
                "GeneratedSlotMethods": "Primer::OpenProject::DragHandle::GeneratedSlotMethods",
         | 
    
        data/static/form_previews.json
    CHANGED
    
    | @@ -13,6 +13,11 @@ | |
| 13 13 | 
             
                    "name": "multi_text_field_form",
         | 
| 14 14 | 
             
                    "snapshot": "true"
         | 
| 15 15 | 
             
                  },
         | 
| 16 | 
            +
                  {
         | 
| 17 | 
            +
                    "preview_path": "primer/forms/custom_width_fields_form",
         | 
| 18 | 
            +
                    "name": "custom_width_fields_form",
         | 
| 19 | 
            +
                    "snapshot": "false"
         | 
| 20 | 
            +
                  },
         | 
| 16 21 | 
             
                  {
         | 
| 17 22 | 
             
                    "preview_path": "primer/forms/text_field_and_checkbox_form",
         | 
| 18 23 | 
             
                    "name": "text_field_and_checkbox_form",
         |