primer_view_components 0.0.111 → 0.0.113

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.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -0
  3. data/app/assets/javascripts/primer_view_components.js +1 -1
  4. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  5. data/app/assets/styles/primer_view_components.css +3 -1
  6. data/app/assets/styles/primer_view_components.css.map +1 -1
  7. data/app/components/primer/alpha/action_list.css +1 -1
  8. data/app/components/primer/alpha/action_list.css.json +1 -1
  9. data/app/components/primer/alpha/action_list.css.map +1 -1
  10. data/app/components/primer/alpha/action_list.pcss +0 -15
  11. data/app/components/primer/alpha/auto_complete.css +1 -0
  12. data/app/components/primer/alpha/auto_complete.css.json +1 -0
  13. data/app/components/primer/alpha/auto_complete.css.map +1 -0
  14. data/app/components/primer/alpha/auto_complete.pcss +118 -0
  15. data/app/components/primer/alpha/banner.css +1 -1
  16. data/app/components/primer/alpha/banner.css.map +1 -1
  17. data/app/components/primer/alpha/banner.pcss +0 -1
  18. data/app/components/primer/alpha/button_marketing.css +1 -0
  19. data/app/components/primer/alpha/button_marketing.css.json +1 -0
  20. data/app/components/primer/alpha/button_marketing.css.map +1 -0
  21. data/app/components/primer/alpha/button_marketing.pcss +175 -0
  22. data/app/components/primer/alpha/dialog/body.rb +3 -0
  23. data/app/components/primer/alpha/dialog/footer.rb +3 -0
  24. data/app/components/primer/alpha/dialog/header.rb +3 -0
  25. data/app/components/primer/alpha/dialog.css +1 -0
  26. data/app/components/primer/alpha/dialog.css.json +1 -0
  27. data/app/components/primer/alpha/dialog.css.map +1 -0
  28. data/app/components/primer/alpha/dialog.pcss +484 -0
  29. data/app/components/primer/alpha/dialog.rb +3 -0
  30. data/app/components/primer/{dropdown → alpha/dropdown}/menu.d.ts +0 -0
  31. data/app/components/primer/{dropdown → alpha/dropdown}/menu.html.erb +0 -0
  32. data/app/components/primer/{dropdown → alpha/dropdown}/menu.js +0 -0
  33. data/app/components/primer/alpha/dropdown/menu.rb +105 -0
  34. data/app/components/primer/{dropdown → alpha/dropdown}/menu.ts +0 -0
  35. data/app/components/primer/alpha/dropdown.css +1 -0
  36. data/app/components/primer/alpha/dropdown.css.json +1 -0
  37. data/app/components/primer/{dropdown.css.map → alpha/dropdown.css.map} +1 -1
  38. data/app/components/primer/{dropdown.d.ts → alpha/dropdown.d.ts} +0 -0
  39. data/app/components/primer/{dropdown.html.erb → alpha/dropdown.html.erb} +0 -0
  40. data/app/components/primer/{dropdown.js → alpha/dropdown.js} +0 -0
  41. data/app/components/primer/{dropdown.pcss → alpha/dropdown.pcss} +1 -1
  42. data/app/components/primer/alpha/dropdown.rb +154 -0
  43. data/app/components/primer/{dropdown.ts → alpha/dropdown.ts} +0 -0
  44. data/app/components/primer/alpha/segmented_control.css +1 -1
  45. data/app/components/primer/alpha/segmented_control.css.map +1 -1
  46. data/app/components/primer/alpha/tab_nav.css +1 -0
  47. data/app/components/primer/alpha/tab_nav.css.json +1 -0
  48. data/app/components/primer/alpha/tab_nav.css.map +1 -0
  49. data/app/components/primer/alpha/tab_nav.pcss +100 -0
  50. data/app/components/primer/alpha/text_field.css +3 -0
  51. data/app/components/primer/alpha/text_field.css.json +1 -0
  52. data/app/components/primer/alpha/text_field.css.map +1 -0
  53. data/app/components/primer/alpha/text_field.pcss +683 -0
  54. data/app/components/primer/alpha/toggle_switch.d.ts +1 -1
  55. data/app/components/primer/alpha/toggle_switch.js +7 -4
  56. data/app/components/primer/alpha/toggle_switch.ts +7 -3
  57. data/app/components/primer/alpha/underline_nav.css +1 -0
  58. data/app/components/primer/alpha/underline_nav.css.json +1 -0
  59. data/app/components/primer/alpha/underline_nav.css.map +1 -0
  60. data/app/components/primer/alpha/underline_nav.pcss +133 -0
  61. data/app/components/primer/beta/border_box.css +1 -0
  62. data/app/components/primer/beta/border_box.css.json +1 -0
  63. data/app/components/primer/beta/border_box.css.map +1 -0
  64. data/app/components/primer/beta/border_box.pcss +284 -0
  65. data/app/components/primer/beta/button_group.css +1 -0
  66. data/app/components/primer/beta/button_group.css.json +1 -0
  67. data/app/components/primer/beta/button_group.css.map +1 -0
  68. data/app/components/primer/beta/button_group.pcss +92 -0
  69. data/app/components/primer/{clipboard_copy.d.ts → beta/clipboard_copy.d.ts} +0 -0
  70. data/app/components/primer/{clipboard_copy.html.erb → beta/clipboard_copy.html.erb} +0 -0
  71. data/app/components/primer/{clipboard_copy.js → beta/clipboard_copy.js} +0 -0
  72. data/app/components/primer/beta/clipboard_copy.rb +50 -0
  73. data/app/components/primer/{clipboard_copy.ts → beta/clipboard_copy.ts} +0 -0
  74. data/app/components/primer/beta/link.css +1 -0
  75. data/app/components/primer/beta/link.css.json +1 -0
  76. data/app/components/primer/beta/link.css.map +1 -0
  77. data/app/components/primer/beta/link.pcss +60 -0
  78. data/app/components/primer/{popover_component.css → beta/popover.css} +0 -0
  79. data/app/components/primer/beta/popover.css.json +1 -0
  80. data/app/components/primer/beta/popover.css.map +1 -0
  81. data/app/components/primer/{popover_component.html.erb → beta/popover.html.erb} +0 -0
  82. data/app/components/primer/{popover_component.pcss → beta/popover.pcss} +5 -5
  83. data/app/components/primer/beta/popover.rb +127 -0
  84. data/app/components/primer/beta/relative_time.rb +160 -0
  85. data/app/components/primer/button_component.css +1 -0
  86. data/app/components/primer/button_component.css.json +1 -0
  87. data/app/components/primer/button_component.css.map +1 -0
  88. data/app/components/primer/button_component.pcss +557 -0
  89. data/app/components/primer/button_component.rb +1 -1
  90. data/app/components/primer/clipboard_copy.rb +2 -43
  91. data/app/components/primer/component.rb +6 -2
  92. data/app/components/primer/dropdown/menu.rb +5 -90
  93. data/app/components/primer/dropdown.rb +2 -145
  94. data/app/components/primer/local_time.d.ts +1 -1
  95. data/app/components/primer/local_time.js +1 -1
  96. data/app/components/primer/local_time.rb +3 -1
  97. data/app/components/primer/local_time.ts +1 -1
  98. data/app/components/primer/menu_component.css +1 -0
  99. data/app/components/primer/menu_component.css.json +1 -0
  100. data/app/components/primer/menu_component.css.map +1 -0
  101. data/app/components/primer/menu_component.pcss +119 -0
  102. data/app/components/primer/popover_component.rb +3 -120
  103. data/app/components/primer/primer.d.ts +2 -2
  104. data/app/components/primer/primer.js +2 -2
  105. data/app/components/primer/primer.pcss +20 -3
  106. data/app/components/primer/primer.ts +2 -2
  107. data/app/components/primer/time_ago_component.d.ts +1 -1
  108. data/app/components/primer/time_ago_component.js +1 -1
  109. data/app/components/primer/time_ago_component.rb +2 -1
  110. data/app/components/primer/time_ago_component.ts +1 -1
  111. data/app/forms/submit_button_form.rb +8 -2
  112. data/app/helpers/primer/form_helper.rb +12 -0
  113. data/lib/postcss_mixins/clearfix.pcss +12 -0
  114. data/lib/primer/deprecations.rb +96 -24
  115. data/lib/primer/deprecations.yml +68 -0
  116. data/lib/primer/forms/base.rb +7 -20
  117. data/lib/primer/forms/base_component.rb +15 -1
  118. data/lib/primer/forms/button.html.erb +4 -0
  119. data/lib/primer/forms/button.rb +68 -0
  120. data/lib/primer/forms/check_box.html.erb +2 -2
  121. data/lib/primer/forms/check_box.rb +1 -1
  122. data/lib/primer/forms/check_box_group.html.erb +2 -2
  123. data/lib/primer/forms/dsl/button_input.rb +29 -0
  124. data/lib/primer/forms/dsl/input_methods.rb +7 -2
  125. data/lib/primer/forms/dsl/submit_button_input.rb +1 -0
  126. data/lib/primer/forms/dsl/text_field_input.rb +0 -7
  127. data/lib/primer/forms/radio_button.html.erb +2 -2
  128. data/lib/primer/forms/radio_button.rb +1 -1
  129. data/lib/primer/forms/radio_button_group.html.erb +2 -2
  130. data/lib/primer/forms/select_list.html.erb +1 -1
  131. data/lib/primer/forms/select_list.rb +4 -1
  132. data/lib/primer/forms/submit_button.html.erb +1 -4
  133. data/lib/primer/forms/submit_button.rb +1 -37
  134. data/lib/primer/forms/text_area.html.erb +1 -1
  135. data/lib/primer/forms/text_area.rb +5 -1
  136. data/lib/primer/forms/text_field.html.erb +1 -1
  137. data/lib/primer/forms/text_field.rb +11 -0
  138. data/lib/primer/forms/utils.rb +28 -0
  139. data/lib/primer/view_components/audited.rb +14 -0
  140. data/lib/primer/view_components/engine.rb +1 -0
  141. data/lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb +2 -2
  142. data/lib/primer/view_components/linters/deprecated_components_counter.rb +15 -4
  143. data/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +3 -18
  144. data/lib/primer/view_components/linters/severity_schema.rb +14 -0
  145. data/lib/primer/view_components/version.rb +1 -1
  146. data/lib/rubocop/cop/primer/component_name_migration.rb +2 -2
  147. data/lib/tasks/docs.rake +6 -5
  148. data/previews/primer/alpha/auto_complete_preview.rb +12 -0
  149. data/previews/primer/alpha/button_marketing_preview.rb +36 -0
  150. data/previews/primer/alpha/dropdown_preview.rb +210 -0
  151. data/previews/primer/alpha/segmented_control_preview.rb +9 -6
  152. data/previews/primer/alpha/tab_nav_preview.rb +55 -0
  153. data/previews/primer/alpha/text_field_preview.rb +77 -52
  154. data/previews/primer/beta/border_box_preview.rb +65 -13
  155. data/previews/primer/beta/clipboard_copy_preview/element.html.erb +2 -0
  156. data/previews/primer/beta/clipboard_copy_preview.rb +39 -0
  157. data/previews/primer/beta/link_preview.rb +28 -0
  158. data/previews/primer/beta/popover_preview.rb +79 -0
  159. data/previews/primer/beta/relative_time_preview.rb +271 -0
  160. data/previews/primer/forms/forms_preview.rb +1 -0
  161. data/static/arguments.json +183 -73
  162. data/static/audited_at.json +10 -6
  163. data/static/constants.json +180 -50
  164. data/static/statuses.json +12 -8
  165. metadata +86 -29
  166. data/app/components/primer/dropdown.css +0 -1
  167. data/app/components/primer/dropdown.css.json +0 -1
  168. data/app/components/primer/image.rb +0 -7
  169. data/app/components/primer/popover_component.css.json +0 -1
  170. data/app/components/primer/popover_component.css.map +0 -1
  171. data/app/components/primer/progress_bar_component.rb +0 -7
  172. data/previews/primer/clipboard_copy_preview/element.html.erb +0 -2
  173. data/previews/primer/clipboard_copy_preview.rb +0 -37
  174. data/previews/primer/dropdown_preview.rb +0 -208
  175. data/previews/primer/popover_component_preview.rb +0 -34
@@ -1,6 +1,6 @@
1
1
  <%= render(FormControl.new(input: @input)) do %>
2
2
  <% if @input.leading_visual || @input.show_clear_button? %>
3
- <%= content_tag(:div, class: @input.field_wrap_classes) do %>
3
+ <%= content_tag(:div, **@field_wrap_arguments) do %>
4
4
  <% if @input.leading_visual %>
5
5
  <span class="FormControl-input-leadingVisualWrap">
6
6
  <%= render(Primer::OcticonComponent.new(**@input.leading_visual)) %>
@@ -8,6 +8,17 @@ module Primer
8
8
 
9
9
  def initialize(input:)
10
10
  @input = input
11
+
12
+ @field_wrap_arguments = {
13
+ class: class_names(
14
+ "FormControl-input-wrap",
15
+ Primer::Forms::Dsl::Input::SIZE_MAPPINGS[@input.size],
16
+ "FormControl-input-wrap--trailingAction": @input.show_clear_button?,
17
+ "FormControl-input-wrap--leadingVisual": @input.leading_visual?
18
+ ),
19
+
20
+ hidden: @input.hidden?
21
+ }
11
22
  end
12
23
  end
13
24
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ # :nodoc:
5
+ module Forms
6
+ # :nodoc:
7
+ module Utils
8
+ # Unfortunately this bug (https://github.com/ruby/ruby/pull/5646) prevents us from using
9
+ # Ruby's native Module.const_source_location. Instead we have to fudge it by searching
10
+ # for the file in the configured autoload paths. Doing so relies on Rails' autoloading
11
+ # conventions, so it should work ok. Zeitwerk also has this information but lacks a
12
+ # public API to map constants to source files.
13
+ def const_source_location(class_name)
14
+ # NOTE: underscore respects namespacing, i.e. will convert Foo::Bar to foo/bar.
15
+ class_path = "#{class_name.underscore}.rb"
16
+
17
+ ActiveSupport::Dependencies.autoload_paths.each do |autoload_path|
18
+ absolute_path = File.join(autoload_path, class_path)
19
+ return absolute_path if File.exist?(absolute_path)
20
+ end
21
+
22
+ nil
23
+ end
24
+ end
25
+
26
+ Utils.extend(Utils)
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Primer
6
+ # :nodoc:
7
+ module ViewComponents
8
+ AUDITED = JSON.parse(
9
+ File.read(
10
+ File.join(File.dirname(__FILE__), "../../../static/audited_at.json")
11
+ )
12
+ ).freeze
13
+ end
14
+ end
@@ -57,6 +57,7 @@ module Primer
57
57
  autoloader.ignore(Engine.root.join("lib", "primer", "view_components", "linters.rb"))
58
58
  autoloader.ignore(Engine.root.join("lib", "primer", "view_components", "linters", "**", "*.rb"))
59
59
  autoloader.ignore(Engine.root.join("lib", "primer", "view_components", "statuses.rb"))
60
+ autoloader.ignore(Engine.root.join("lib", "primer", "view_components", "audited.rb"))
60
61
  end
61
62
  end
62
63
 
@@ -12,9 +12,9 @@ module ERBLint
12
12
 
13
13
  TAGS = %w[clipboard-copy].freeze
14
14
  REQUIRED_ARGUMENTS = [/for|value/, "aria-label"].freeze
15
- MESSAGE = "We are migrating clipboard-copy to use [Primer::ClipboardCopy](https://primer.style/view-components/components/clipboardcopy), please try to use that instead of raw HTML."
15
+ MESSAGE = "We are migrating clipboard-copy to use [Primer::Beta::ClipboardCopy](https://primer.style/view-components/components/clipboardcopy), please try to use that instead of raw HTML."
16
16
  ARGUMENT_MAPPER = ArgumentMappers::ClipboardCopy
17
- COMPONENT = "Primer::ClipboardCopy"
17
+ COMPONENT = "Primer::Beta::ClipboardCopy"
18
18
  end
19
19
  end
20
20
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "helpers/deprecated_components_helpers"
4
+ require_relative "severity_schema"
5
+
4
6
  require "erblint-github/linters/custom_helpers"
5
7
 
6
8
  module ERBLint
@@ -11,6 +13,8 @@ module ERBLint
11
13
  include ERBLint::LinterRegistry
12
14
  include Helpers::DeprecatedComponentsHelpers
13
15
 
16
+ self.config_schema = SeveritySchema
17
+
14
18
  def run(processed_source)
15
19
  processed_source.ast.descendants(:erb).each do |erb_node|
16
20
  _, _, code_node = *erb_node
@@ -21,10 +25,7 @@ module ERBLint
21
25
  deprecated_components.each do |component|
22
26
  next unless code.include?(component)
23
27
 
24
- add_offense(
25
- erb_node.loc,
26
- message(component)
27
- )
28
+ add_offense(erb_node.loc, message(component))
28
29
  end
29
30
  end
30
31
 
@@ -44,6 +45,16 @@ module ERBLint
44
45
  end
45
46
  end
46
47
  end
48
+
49
+ # this override is necessary because of the github/erblint-github `CustomHelpers`
50
+ # module. `counter_correct?` is provided by this module, and calls `add_offense`
51
+ # directly. there is no simple way to modify this without updating the gem and
52
+ # creating what would likely be an API that is non-standard and/or difficult to use
53
+ #
54
+ # https://github.com/github/erblint-github/blob/main/lib/erblint-github/linters/custom_helpers.rb
55
+ def add_offense(source_range, message, context = nil, severity = nil)
56
+ super(source_range, message, context, severity || @config.severity)
57
+ end
47
58
  end
48
59
  end
49
60
  end
@@ -7,27 +7,12 @@ module ERBLint
7
7
  module Helpers
8
8
  # Helpers to share between DeprecatedComponents ERB lint and Rubocop cop
9
9
  module DeprecatedComponentsHelpers
10
- def message(component)
11
- message = "#{component} has been deprecated and should not be used."
12
-
13
- if Primer::Deprecations.correctable?(component)
14
- suggested_component = Primer::Deprecations.suggested_component(component)
15
- message += " Try #{suggested_component} instead."
16
- end
17
-
18
- message
19
- end
20
-
21
- def statuses_json
22
- JSON.parse(
23
- File.read(
24
- File.join(File.dirname(__FILE__), "../../../../../static/statuses.json")
25
- )
26
- ).freeze
10
+ def message(component_name)
11
+ Primer::Deprecations.deprecation_message(component_name)
27
12
  end
28
13
 
29
14
  def deprecated_components
30
- @deprecated_components ||= statuses_json.select { |_, value| value == "deprecated" }.keys
15
+ Primer::Deprecations.deprecated_components
31
16
  end
32
17
  end
33
18
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "erb_lint/utils/severity_levels"
4
+
5
+ module ERBLint
6
+ module Linters
7
+ class SeveritySchema < LinterConfig
8
+ # SEVERITY_NAMES :info, :refactor, :convention, :warning, :error, :fatal
9
+ # see https://github.com/Shopify/erb-lint/blob/main/lib/erb_lint/utils/severity_levels.rb
10
+
11
+ property :severity, accepts: ERBLint::Utils::SeverityLevels::SEVERITY_NAMES, default: nil, reader: :severity
12
+ end
13
+ end
14
+ end
@@ -6,7 +6,7 @@ module Primer
6
6
  module VERSION
7
7
  MAJOR = 0
8
8
  MINOR = 0
9
- PATCH = 111
9
+ PATCH = 113
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH].join(".")
12
12
  end
@@ -26,8 +26,8 @@ module RuboCop
26
26
  component_name = node.const_name
27
27
  return unless ::Primer::Deprecations.correctable?(component_name)
28
28
 
29
- suggested_component = ::Primer::Deprecations.suggested_component(component_name)
30
- corrector.replace(node, suggested_component) if suggested_component.present?
29
+ replacement = ::Primer::Deprecations.replacement(component_name)
30
+ corrector.replace(node, replacement) if replacement.present?
31
31
  end
32
32
  end
33
33
  end
data/lib/tasks/docs.rake CHANGED
@@ -29,6 +29,7 @@ namespace :docs do
29
29
  # Rails controller for rendering arbitrary ERB
30
30
  view_context = ApplicationController.new.tap { |c| c.request = ActionDispatch::TestRequest.create }.view_context
31
31
  components = [
32
+ Primer::Beta::RelativeTime,
32
33
  Primer::Beta::IconButton,
33
34
  Primer::Beta::Button,
34
35
  Primer::Alpha::SegmentedControl,
@@ -53,12 +54,12 @@ namespace :docs do
53
54
  Primer::ButtonComponent,
54
55
  Primer::Beta::ButtonGroup,
55
56
  Primer::Alpha::ButtonMarketing,
56
- Primer::ClipboardCopy,
57
+ Primer::Beta::ClipboardCopy,
57
58
  Primer::Beta::CloseButton,
58
59
  Primer::Beta::Counter,
59
60
  Primer::Beta::Details,
60
61
  Primer::Alpha::Dialog,
61
- Primer::Dropdown,
62
+ Primer::Alpha::Dropdown,
62
63
  Primer::DropdownMenuComponent,
63
64
  Primer::Beta::Flash,
64
65
  Primer::Beta::Heading,
@@ -70,7 +71,7 @@ namespace :docs do
70
71
  Primer::MenuComponent,
71
72
  Primer::Navigation::TabComponent,
72
73
  Primer::OcticonComponent,
73
- Primer::PopoverComponent,
74
+ Primer::Beta::Popover,
74
75
  Primer::Beta::ProgressBar,
75
76
  Primer::StateComponent,
76
77
  Primer::SpinnerComponent,
@@ -99,12 +100,12 @@ namespace :docs do
99
100
  ]
100
101
 
101
102
  js_components = [
102
- Primer::Dropdown,
103
+ Primer::Alpha::Dropdown,
103
104
  Primer::LocalTime,
104
105
  Primer::Alpha::ImageCrop,
105
106
  Primer::Beta::AutoComplete,
106
107
  Primer::Alpha::Banner,
107
- Primer::ClipboardCopy,
108
+ Primer::Beta::ClipboardCopy,
108
109
  Primer::TabContainerComponent,
109
110
  Primer::TimeAgoComponent,
110
111
  Primer::Alpha::UnderlinePanels,
@@ -11,7 +11,9 @@ module Primer
11
11
  # @param with_icon toggle
12
12
  # @param is_clearable toggle
13
13
  def playground(label_text: "Select a fruit", is_label_visible: true, is_label_inline: false, with_icon: false, is_clearable: false)
14
+ # rubocop:disable Primer/ComponentNameMigration
14
15
  render(Primer::Alpha::AutoComplete.new(label_text: label_text, input_id: "input-id", list_id: "test-id", src: "/auto_complete?version=alpha", is_label_visible: is_label_visible, is_label_inline: is_label_inline, with_icon: with_icon, is_clearable: is_clearable))
16
+ # rubocop:enable Primer/ComponentNameMigration
15
17
  end
16
18
 
17
19
  # @label Default Options
@@ -21,29 +23,39 @@ module Primer
21
23
  # @param with_icon toggle
22
24
  # @param is_clearable toggle
23
25
  def default(label_text: "Select a fruit", is_label_visible: true, is_label_inline: false, with_icon: false, is_clearable: false)
26
+ # rubocop:disable Primer/ComponentNameMigration
24
27
  render(Primer::Alpha::AutoComplete.new(label_text: label_text, input_id: "input-id", list_id: "test-id", src: "/auto_complete?version=alpha", is_label_visible: is_label_visible, is_label_inline: is_label_inline, with_icon: with_icon, is_clearable: is_clearable))
28
+ # rubocop:enable Primer/ComponentNameMigration
25
29
  end
26
30
 
27
31
  # @!group More examples
28
32
 
29
33
  # @label AutoComplete with non-visible label
30
34
  def with_non_visible_label
35
+ # rubocop:disable Primer/ComponentNameMigration
31
36
  render(Primer::Alpha::AutoComplete.new(label_text: "Select a fruit", input_id: "input-id-1", list_id: "test-id-1", src: "/auto_complete?version=alpha", is_label_visible: false))
37
+ # rubocop:enable Primer/ComponentNameMigration
32
38
  end
33
39
 
34
40
  # @label AutoComplete with inline label
35
41
  def with_inline_label
42
+ # rubocop:disable Primer/ComponentNameMigration
36
43
  render(Primer::Alpha::AutoComplete.new(label_text: "Select a fruit", input_id: "input-id-2", list_id: "test-id-2", src: "/auto_complete?version=alpha", is_label_inline: true))
44
+ # rubocop:enable Primer/ComponentNameMigration
37
45
  end
38
46
 
39
47
  # @label AutoComplete with search icon
40
48
  def with_icon
49
+ # rubocop:disable Primer/ComponentNameMigration
41
50
  render(Primer::Alpha::AutoComplete.new(label_text: "Select a fruit", input_id: "input-id-3", list_id: "test-id-3", src: "/auto_complete?version=alpha", with_icon: true))
51
+ # rubocop:enable Primer/ComponentNameMigration
42
52
  end
43
53
 
44
54
  # @label AutoComplete with clear button
45
55
  def with_clear_button
56
+ # rubocop:disable Primer/ComponentNameMigration
46
57
  render(Primer::Alpha::AutoComplete.new(label_text: "Select a fruit", input_id: "input-id-4", list_id: "test-id-4", src: "/auto_complete?version=alpha", is_clearable: true))
58
+ # rubocop:enable Primer/ComponentNameMigration
47
59
  end
48
60
 
49
61
  # @!endgroup
@@ -21,6 +21,42 @@ module Primer
21
21
  def default(tag: :button, type: :button, scheme: :default, variant: :default)
22
22
  render(Primer::Alpha::ButtonMarketing.new(tag: tag, type: type, scheme: scheme, variant: variant)) { "Default" }
23
23
  end
24
+
25
+ # @!group Size Variants
26
+ #
27
+ # @label Default
28
+ def sizes_default
29
+ render(Primer::Alpha::ButtonMarketing.new) { "Default" }
30
+ end
31
+
32
+ # @label Large
33
+ def sizes_large
34
+ render(Primer::Alpha::ButtonMarketing.new(variant: :large)) { "Large" }
35
+ end
36
+ # @!endgroup
37
+
38
+ # @!group Schemes
39
+ #
40
+ # @label Default
41
+ def scheme_default
42
+ render(Primer::Alpha::ButtonMarketing.new) { "Default" }
43
+ end
44
+
45
+ # @label Primary
46
+ def scheme_primary
47
+ render(Primer::Alpha::ButtonMarketing.new(scheme: :primary)) { "Primary" }
48
+ end
49
+
50
+ # @label Outline
51
+ def scheme_outline
52
+ render(Primer::Alpha::ButtonMarketing.new(scheme: :outline)) { "Outline" }
53
+ end
54
+
55
+ # @label Transparent
56
+ def scheme_transparent
57
+ render(Primer::Alpha::ButtonMarketing.new(scheme: :transparent)) { "Transparent" }
58
+ end
59
+ # @!endgroup
24
60
  end
25
61
  end
26
62
  end
@@ -0,0 +1,210 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ # @label Dropdown
6
+ class DropdownPreview < ViewComponent::Preview
7
+ # @label Playground
8
+ #
9
+ # @param with_caret [Boolean] toggle
10
+ # @param overlay [Symbol] select [none, default, dark]
11
+ def playground(overlay: :default, with_caret: false)
12
+ render(Primer::Alpha::Dropdown.new(overlay: overlay, with_caret: with_caret)) do |c|
13
+ c.with_button { "Dropdown" }
14
+
15
+ c.with_menu(header: "Header") do |m|
16
+ m.with_item { "Item 1" }
17
+ m.with_item { "Item 2" }
18
+ m.with_item(divider: true)
19
+ m.with_item { "Item 3" }
20
+ m.with_item { "Item 4" }
21
+ end
22
+ end
23
+ end
24
+
25
+ # @label Default
26
+ #
27
+ def default
28
+ render(Primer::Alpha::Dropdown.new) do |c|
29
+ c.with_button { "Dropdown" }
30
+ c.with_menu do |m|
31
+ m.with_item { "Item 1" }
32
+ m.with_item { "Item 2" }
33
+ m.with_item { "Item 3" }
34
+ end
35
+ end
36
+ end
37
+
38
+ # @label Menu
39
+ #
40
+ # @param as [Symbol] select [list, default]
41
+ # @param direction [Symbol] select [se, sw, w, e, ne, s]
42
+ # @param scheme [Symbol] select [default, dark]
43
+ def menu(as: :default, direction: :se, scheme: :default)
44
+ render(Primer::Alpha::Dropdown::Menu.new(as: as, direction: direction, scheme: scheme, header: "Header")) do |m|
45
+ m.with_item { "Item 1" }
46
+ m.with_item { "Item 2" }
47
+ m.with_item(divider: true)
48
+ m.with_item { "Item 3" }
49
+ m.with_item { "Item 4" }
50
+ end
51
+ end
52
+
53
+ # @!group Direction
54
+ #
55
+ # @label Direction e
56
+ def direction_e
57
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
58
+ c.with_button { "Dropdown" }
59
+ c.with_menu(direction: :e) do |m|
60
+ m.with_item { "Item 1" }
61
+ m.with_item { "Item 2" }
62
+ m.with_item { "Item 3" }
63
+ end
64
+ end
65
+ end
66
+
67
+ # @label Direction ne
68
+ def direction_ne
69
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
70
+ c.with_button { "Dropdown" }
71
+ c.with_menu(direction: :ne) do |m|
72
+ m.with_item { "Item 1" }
73
+ m.with_item { "Item 2" }
74
+ m.with_item { "Item 3" }
75
+ end
76
+ end
77
+ end
78
+
79
+ # @label Direction s
80
+ def direction_s
81
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
82
+ c.with_button { "Dropdown" }
83
+ c.with_menu(direction: :s) do |m|
84
+ m.with_item { "Item 1" }
85
+ m.with_item { "Item 2" }
86
+ m.with_item { "Item 3" }
87
+ end
88
+ end
89
+ end
90
+
91
+ # @label Direction se
92
+ def direction_se
93
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
94
+ c.with_button { "Dropdown" }
95
+ c.with_menu(direction: :se) do |m|
96
+ m.with_item { "Item 1" }
97
+ m.with_item { "Item 2" }
98
+ m.with_item { "Item 3" }
99
+ end
100
+ end
101
+ end
102
+
103
+ # @label Direction sw
104
+ def direction_sw
105
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
106
+ c.with_button { "Dropdown" }
107
+ c.with_menu(direction: :sw) do |m|
108
+ m.with_item { "Item 1" }
109
+ m.with_item { "Item 2" }
110
+ m.with_item { "Item 3" }
111
+ end
112
+ end
113
+ end
114
+
115
+ # @label Direction w
116
+ def direction_w
117
+ render(Primer::Alpha::Dropdown.new(display: :inline_block)) do |c|
118
+ c.with_button { "Dropdown" }
119
+ c.with_menu(direction: :w) do |m|
120
+ m.with_item { "Item 1" }
121
+ m.with_item { "Item 2" }
122
+ m.with_item { "Item 3" }
123
+ end
124
+ end
125
+ end
126
+ #
127
+ # @!endgroup
128
+
129
+ # @!group Options
130
+ #
131
+ # @label With caret
132
+ def options_with_caret
133
+ render(Primer::Alpha::Dropdown.new(with_caret: true)) do |c|
134
+ c.with_button { "Dropdown" }
135
+ c.with_menu do |m|
136
+ m.with_item { "Item 1" }
137
+ m.with_item { "Item 2" }
138
+ m.with_item { "Item 3" }
139
+ end
140
+ end
141
+ end
142
+
143
+ # @label With header
144
+ def options_with_header
145
+ render(Primer::Alpha::Dropdown.new) do |c|
146
+ c.with_button { "Dropdown" }
147
+ c.with_menu(header: "Header") do |m|
148
+ m.with_item { "Item 1" }
149
+ m.with_item { "Item 2" }
150
+ m.with_item { "Item 3" }
151
+ end
152
+ end
153
+ end
154
+
155
+ # @label With dividers
156
+ def options_with_dividers
157
+ render(Primer::Alpha::Dropdown.new) do |c|
158
+ c.with_button { "Dropdown" }
159
+ c.with_menu do |m|
160
+ m.with_item { "Item 1" }
161
+ m.with_item { "Item 2" }
162
+ m.with_item(divider: true)
163
+ m.with_item { "Item 3" }
164
+ m.with_item { "Item 4" }
165
+ m.with_item(divider: true)
166
+ m.with_item { "Item 5" }
167
+ end
168
+ end
169
+ end
170
+
171
+ # @label As list
172
+ def options_as_list
173
+ render(Primer::Alpha::Dropdown.new) do |c|
174
+ c.with_button { "Dropdown" }
175
+ c.with_menu(as: :list) do |m|
176
+ m.with_item { "Item 1" }
177
+ m.with_item { "Item 2" }
178
+ m.with_item { "Item 3" }
179
+ end
180
+ end
181
+ end
182
+
183
+ # @label Overlay none
184
+ def options_overlay_none
185
+ render(Primer::Alpha::Dropdown.new(overlay: :none)) do |c|
186
+ c.with_button { "Dropdown" }
187
+ c.with_menu do |m|
188
+ m.with_item { "Item 1" }
189
+ m.with_item { "Item 2" }
190
+ m.with_item { "Item 3" }
191
+ end
192
+ end
193
+ end
194
+
195
+ # @label Overlay dark
196
+ def options_overlay_dark
197
+ render(Primer::Alpha::Dropdown.new(overlay: :dark)) do |c|
198
+ c.with_button { "Dropdown" }
199
+ c.with_menu do |m|
200
+ m.with_item { "Item 1" }
201
+ m.with_item { "Item 2" }
202
+ m.with_item { "Item 3" }
203
+ end
204
+ end
205
+ end
206
+ #
207
+ # @!endgroup
208
+ end
209
+ end
210
+ end
@@ -34,8 +34,9 @@ module Primer
34
34
 
35
35
  # @!group Full width
36
36
  # @label Size small
37
- def full_width_small(hide_labels: false, size: :small)
38
- render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", full_width: true, size: :small)) do |c|
37
+ # @param hide_labels [Boolean] toggle
38
+ def full_width_small(hide_labels: false)
39
+ render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", hide_labels: hide_labels, full_width: true, size: :small)) do |c|
39
40
  c.with_item(label: "Preview", selected: true)
40
41
  c.with_item(label: "Raw")
41
42
  c.with_item(label: "Blame")
@@ -43,8 +44,9 @@ module Primer
43
44
  end
44
45
 
45
46
  # @label Size medium
46
- def full_width_medium(hide_labels: false, size: :medium)
47
- render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", full_width: true, size: :medium)) do |c|
47
+ # @param hide_labels [Boolean] toggle
48
+ def full_width_medium(hide_labels: false)
49
+ render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", hide_labels: hide_labels, full_width: true, size: :medium)) do |c|
48
50
  c.with_item(label: "Preview", selected: true)
49
51
  c.with_item(label: "Raw")
50
52
  c.with_item(label: "Blame")
@@ -52,8 +54,9 @@ module Primer
52
54
  end
53
55
 
54
56
  # @label Size large
55
- def full_width_large(hide_labels: false, size: :large)
56
- render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", full_width: true, size: :large)) do |c|
57
+ # @param hide_labels [Boolean] toggle
58
+ def full_width_large(hide_labels: false)
59
+ render(Primer::Alpha::SegmentedControl.new("aria-label": "File view", hide_labels: hide_labels, full_width: true, size: :large)) do |c|
57
60
  c.with_item(label: "Preview", selected: true)
58
61
  c.with_item(label: "Raw")
59
62
  c.with_item(label: "Blame")
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ # @label TabNav
6
+ class TabNavPreview < ViewComponent::Preview
7
+ # @label Playground
8
+ #
9
+ # @param number_of_tabs [Integer] number
10
+ # @param with_icons [Boolean] toggle
11
+ # @param with_counters [Boolean] toggle
12
+ def playground(number_of_tabs: 3, with_icons: false, with_counters: false)
13
+ render(Primer::Alpha::TabNav.new(label: "label")) do |c|
14
+ Array.new(number_of_tabs || 3) do |i|
15
+ c.with_tab(selected: i.zero?, href: "##{i + 1}") do |t|
16
+ t.icon(icon: :star) if with_icons
17
+ t.text { "Tab #{i + 1}" }
18
+ t.counter(count: 10) if with_counters
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ # @label Default
25
+ def default
26
+ render(Primer::Alpha::TabNav.new(label: "Default")) do |c|
27
+ c.with_tab(selected: true, href: "#") { "Tab 1" }
28
+ c.with_tab(href: "#") { "Tab 2" }
29
+ c.with_tab(href: "#") { "Tab 3" }
30
+ end
31
+ end
32
+
33
+ # @label With icons and counters
34
+ def with_icons_and_counters
35
+ render(Primer::Alpha::TabNav.new(label: "With icons and counters")) do |c|
36
+ c.with_tab(href: "#1", selected: true) do |t|
37
+ t.icon(icon: :star)
38
+ t.text { "Stars" }
39
+ t.counter(count: 10)
40
+ end
41
+ c.with_tab(href: "#2") do |t|
42
+ t.icon(icon: :heart)
43
+ t.text { "Sponsors" }
44
+ t.counter(count: 14)
45
+ end
46
+ c.with_tab(href: "#3") do |t|
47
+ t.icon(icon: :bookmark)
48
+ t.text { "Bookmarks" }
49
+ t.counter(count: 7)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end