Sha256: d3fbcf871e6d8ed77bcc29f0fca4be94b31f4bd73f525624fc3fd3edbf7fa912

Contents?: true

Size: 1.94 KB

Versions: 30

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

module Primer
  module Beta
    # Use `Spinner` to let users know that content is being loaded.
    class Spinner < Primer::Component
      status :beta

      DEFAULT_SIZE = :medium
      SIZE_MAPPINGS = {
        :small => 16,
        DEFAULT_SIZE => 32,
        :large => 64
      }.freeze
      DEFAULT_SR_TEXT = "Loading"

      SIZE_OPTIONS = SIZE_MAPPINGS.keys

      # Setting `box-sizing: content-box` allows consumers to add padding
      # to the spinner without shrinking the icon
      DEFAULT_STYLE = "box-sizing: content-box; color: var(--color-icon-primary);"

      # @param size [Symbol] <%= one_of(Primer::Beta::Spinner::SIZE_MAPPINGS) %>
      # @param style [String] Custom element styles.
      # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
      def initialize(size: DEFAULT_SIZE, style: DEFAULT_STYLE, sr_text: DEFAULT_SR_TEXT, **system_arguments)
        @system_arguments = deny_tag_argument(**system_arguments)
        @system_arguments[:tag] = :svg
        @system_arguments[:style] ||= style
        @system_arguments[:animation] = :rotate
        @system_arguments[:width] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
        @system_arguments[:height] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
        @system_arguments[:viewBox] = "0 0 16 16"
        @system_arguments[:fill] = :none
        @system_arguments[:aria] ||= {}
        @sr_text = sr_text

        if no_aria_label?
          @system_arguments[:aria][:hidden] = true
        else
          @system_arguments[:role] = "img"
        end

        @target = extract_data(:target, @system_arguments)
        @hidden = @system_arguments.delete(:hidden)
      end

      def no_aria_label?
        !@system_arguments[:aria][:label] && !@system_arguments[:"aria-label"] &&
            !@system_arguments[:aria][:labelledby] && !@system_arguments[:"aria-labelledby"]
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 2 rubygems

Version Path
openproject-primer_view_components-0.52.4 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.52.3 app/components/primer/beta/spinner.rb
primer_view_components-0.36.5 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.52.2 app/components/primer/beta/spinner.rb
primer_view_components-0.36.4 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.52.1 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.52.0 app/components/primer/beta/spinner.rb
primer_view_components-0.36.3 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.51.0 app/components/primer/beta/spinner.rb
primer_view_components-0.36.2 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.50.1 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.50.0 app/components/primer/beta/spinner.rb
primer_view_components-0.36.1 app/components/primer/beta/spinner.rb
primer_view_components-0.36.0 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.49.2 app/components/primer/beta/spinner.rb
primer_view_components-0.35.2 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.49.1 app/components/primer/beta/spinner.rb
openproject-primer_view_components-0.49.0 app/components/primer/beta/spinner.rb
primer_view_components-0.35.1 app/components/primer/beta/spinner.rb
primer_view_components-0.35.0 app/components/primer/beta/spinner.rb