Sha256: eacaa5c07f070b3287012a58b3da9b73bf2a0f032dd5a7e2343e31642ee4b883

Contents?: true

Size: 1.77 KB

Versions: 28

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Primer
  module Beta
    # Use `ClipboardCopy` to copy element text content or input values to the clipboard.
    #
    # @accessibility
    #   Always set an accessible label to help the user interact with the component.
    class ClipboardCopy < Primer::Component
      status :beta

      # @example Default
      #   <%= render(Primer::Beta::ClipboardCopy.new(value: "Text to copy", "aria-label": "Copy text to the system clipboard")) %>
      #
      # @example With text instead of icons
      #   <%= render(Primer::Beta::ClipboardCopy.new(value: "Text to copy")) do %>
      #     Click to copy!
      #   <% end %>
      #
      # @example Copying from an element
      #   <%= render(Primer::Beta::ClipboardCopy.new(for: "blob-path", "aria-label": "Copy text to the system clipboard")) %>
      #   <div id="blob-path">src/index.js</div>
      #
      # @param aria-label [String] String that will be read to screenreaders when the component is focused
      # @param value [String] Text to copy into the users clipboard when they click the component.
      # @param for [String] Element id from where to get the copied value.
      # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
      def initialize(value: nil, **system_arguments)
        @system_arguments = deny_tag_argument(**system_arguments)
        @value = value

        validate!

        @system_arguments[:tag] = "clipboard-copy"
        @system_arguments[:value] = value if value.present?
      end

      # :nodoc:
      def before_render
        validate_aria_label if content.blank?
      end

      private

      def validate!
        raise ArgumentError, "Must provide either `value` or `for`" if @value.nil? && @system_arguments[:for].nil?
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
openproject-primer_view_components-0.6.3 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.6.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.5.1 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.5.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.4.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.3.1 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.3.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.2.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.9 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.8 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.7 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.6 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.5 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.4 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.3 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.2 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.1 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.1.0 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.0.123 app/components/primer/beta/clipboard_copy.rb
primer_view_components-0.0.122 app/components/primer/beta/clipboard_copy.rb