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
@@ -2,97 +2,12 @@
2
2
 
3
3
  module Primer
4
4
  class Dropdown
5
- # This component is part of `Dropdown` and should not be
6
- # used as a standalone component.
7
- class Menu < Primer::Component
8
- AS_DEFAULT = :default
9
- AS_OPTIONS = [AS_DEFAULT, :list].freeze
5
+ # :nodoc:
6
+ class Menu < Primer::Alpha::Dropdown::Menu
7
+ status :deprecated
10
8
 
11
- SCHEME_DEFAULT = :default
12
- SCHEME_MAPPINGS = {
13
- SCHEME_DEFAULT => "",
14
- :dark => "dropdown-menu-dark"
15
- }.freeze
16
-
17
- DIRECTION_DEFAULT = :se
18
- DIRECTION_OPTIONS = [DIRECTION_DEFAULT, :sw, :w, :e, :ne, :s].freeze
19
-
20
- # @param tag [Symbol] <%= one_of(Primer::Dropdown::Menu::Item::TAG_OPTIONS) %>.
21
- # @param divider [Boolean] Whether the item is a divider without any function.
22
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
23
- renders_many :items, lambda { |divider: false, **system_arguments|
24
- Primer::Dropdown::Menu::Item.new(as: @as, divider: divider, **system_arguments)
25
- }
26
-
27
- # @param as [Symbol] When `as` is `:list`, wraps the menu in a `<ul>` with a `<li>` for each item.
28
- # @param direction [Symbol] <%= one_of(Primer::Dropdown::Menu::DIRECTION_OPTIONS) %>.
29
- # @param header [String] Header to be displayed above the menu.
30
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
31
- def initialize(as: AS_DEFAULT, direction: DIRECTION_DEFAULT, scheme: SCHEME_DEFAULT, header: nil, **system_arguments)
32
- @header = header
33
- @direction = direction
34
- @as = fetch_or_fallback(AS_OPTIONS, as, AS_DEFAULT)
35
-
36
- @system_arguments = deny_tag_argument(**system_arguments)
37
- @system_arguments[:tag] = "details-menu"
38
- @system_arguments[:role] = "menu"
39
-
40
- @system_arguments[:classes] = class_names(
41
- @system_arguments[:classes],
42
- "dropdown-menu",
43
- "dropdown-menu-#{fetch_or_fallback(DIRECTION_OPTIONS, direction, DIRECTION_DEFAULT)}",
44
- SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_MAPPINGS.keys, scheme, SCHEME_DEFAULT)]
45
- )
46
- end
47
-
48
- private
49
-
50
- def list?
51
- @as == :list
52
- end
53
-
54
- # Items to be rendered in the `Dropdown` menu.
55
- class Item < Primer::Component
56
- TAG_DEFAULT = :a
57
- BUTTON_TAGS = [:button, :summary].freeze
58
- TAG_OPTIONS = [TAG_DEFAULT, *BUTTON_TAGS].freeze
59
-
60
- def initialize(as:, tag: TAG_DEFAULT, divider: false, **system_arguments)
61
- @divider = divider
62
- @as = as
63
-
64
- @system_arguments = system_arguments
65
- @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, TAG_DEFAULT)
66
- @system_arguments[:tag] = :li if list? && divider?
67
- @system_arguments[:role] ||= :menuitem
68
- @system_arguments[:role] = :separator if divider
69
- @system_arguments[:classes] = class_names(
70
- @system_arguments[:classes],
71
- "dropdown-item" => !divider,
72
- "dropdown-divider" => divider
73
- )
74
- end
75
-
76
- def call
77
- component = if BUTTON_TAGS.include?(@system_arguments[:tag])
78
- Primer::ButtonComponent.new(scheme: :link, **@system_arguments)
79
- else
80
- Primer::BaseComponent.new(**@system_arguments)
81
- end
82
-
83
- # divider has no content
84
- render(component) if divider?
85
-
86
- render(component) { content }
87
- end
88
-
89
- def divider?
90
- @divider
91
- end
92
-
93
- def list?
94
- @as == :list
95
- end
9
+ class Item < Primer::Alpha::Dropdown::Menu::Item
10
+ status :deprecated
96
11
  end
97
12
  end
98
13
  end
@@ -1,150 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # `Dropdown` is a lightweight context menu for housing navigation and actions.
5
- # They're great for instances where you don't need the full power (and code) of the SelectMenu.
6
- class Dropdown < Primer::Component
7
- # Required trigger for the dropdown. Has the same arguments as <%= link_to_component(Primer::ButtonComponent) %>,
8
- # but it is locked as a `summary` tag.
9
- renders_one :button, lambda { |**system_arguments|
10
- @button_arguments = system_arguments
11
- @button_arguments[:button] = true
12
- @button_arguments[:dropdown] = @with_caret
13
-
14
- Primer::Content.new
15
- }
16
-
17
- # Required context menu for the dropdown.
18
- #
19
- # @param as [Symbol] When `as` is `:list`, wraps the menu in a `<ul>` with a `<li>` for each item.
20
- # @param direction [Symbol] <%= one_of(Primer::Dropdown::Menu::DIRECTION_OPTIONS) %>
21
- # @param scheme [Symbol] Pass `:dark` for dark mode theming
22
- # @param header [String] Optional string to display as the header
23
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
24
- renders_one :menu, "Primer::Dropdown::Menu"
25
-
26
- # @example Default
27
- # <%= render(Primer::Dropdown.new) do |c| %>
28
- # <% c.with_button do %>
29
- # Dropdown
30
- # <% end %>
31
- #
32
- # <% c.with_menu(header: "Options") do |menu|
33
- # menu.item { "Item 1" }
34
- # menu.item { "Item 2" }
35
- # menu.item { "Item 3" }
36
- # end %>
37
- # <% end %>
38
- #
39
- # @example With dividers
40
- #
41
- # @description
42
- # Dividers can be used to separate a group of items. They don't have any content.
43
- # @code
44
- # <%= render(Primer::Dropdown.new) do |c| %>
45
- # <% c.with_button do %>
46
- # Dropdown
47
- # <% end %>
48
- #
49
- # <% c.with_menu(header: "Options") do |menu|
50
- # menu.item { "Item 1" }
51
- # menu.item { "Item 2" }
52
- # menu.item(divider: true)
53
- # menu.item { "Item 3" }
54
- # menu.item { "Item 4" }
55
- # menu.item(divider: true)
56
- # menu.item { "Item 5" }
57
- # menu.item { "Item 6" }
58
- # end %>
59
- # <% end %>
60
- #
61
- # @example With direction
62
- # <%= render(Primer::Dropdown.new(display: :inline_block)) do |c| %>
63
- # <% c.with_button do %>
64
- # Dropdown
65
- # <% end %>
66
- #
67
- # <% c.with_menu(header: "Options", direction: :s) do |menu|
68
- # menu.item { "Item 1" }
69
- # menu.item { "Item 2" }
70
- # menu.item { "Item 3" }
71
- # menu.item { "Item 4" }
72
- # end %>
73
- # <% end %>
74
- #
75
- # @example With caret
76
- # <%= render(Primer::Dropdown.new(with_caret: true)) do |c| %>
77
- # <% c.with_button do %>
78
- # Dropdown
79
- # <% end %>
80
- #
81
- # <% c.with_menu(header: "Options") do |menu|
82
- # menu.item { "Item 1" }
83
- # menu.item { "Item 2" }
84
- # menu.item { "Item 3" }
85
- # menu.item { "Item 4" }
86
- # end %>
87
- # <% end %>
88
- #
89
- # @example Customizing the button
90
- # <%= render(Primer::Dropdown.new) do |c| %>
91
- # <% c.with_button(scheme: :primary, size: :small) do %>
92
- # Dropdown
93
- # <% end %>
94
- #
95
- # <% c.with_menu(header: "Options") do |menu|
96
- # menu.item { "Item 1" }
97
- # menu.item { "Item 2" }
98
- # menu.item { "Item 3" }
99
- # menu.item { "Item 4" }
100
- # end %>
101
- # <% end %>
102
- #
103
- # @example Menu as list
104
- # <%= render(Primer::Dropdown.new) do |c| %>
105
- # <% c.with_button do %>
106
- # Dropdown
107
- # <% end %>
108
- #
109
- # <% c.with_menu(as: :list, header: "Options") do |menu|
110
- # menu.item { "Item 1" }
111
- # menu.item { "Item 2" }
112
- # menu.item(divider: true)
113
- # menu.item { "Item 3" }
114
- # menu.item { "Item 4" }
115
- # end %>
116
- # <% end %>
117
- #
118
- # @example Customizing menu items
119
- # <%= render(Primer::Dropdown.new) do |c| %>
120
- # <% c.with_button do %>
121
- # Dropdown
122
- # <% end %>
123
- #
124
- # <% c.with_menu(header: "Options") do |menu|
125
- # menu.item(tag: :button) { "Item 1" }
126
- # menu.item(classes: "custom-class") { "Item 2" }
127
- # menu.item { "Item 3" }
128
- # end %>
129
- # <% end %>
130
- #
131
- # @param overlay [Symbol] <%= one_of(Primer::Beta::Details::OVERLAY_MAPPINGS.keys) %>
132
- # @param with_caret [Boolean] Whether or not a caret should be rendered in the button.
133
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
134
- def initialize(overlay: :default, with_caret: false, **system_arguments)
135
- @with_caret = with_caret
136
-
137
- @system_arguments = system_arguments
138
- @system_arguments[:overlay] = overlay
139
- @system_arguments[:reset] = true
140
- @system_arguments[:classes] = class_names(
141
- @system_arguments[:classes],
142
- "dropdown"
143
- )
144
- end
145
-
146
- def render?
147
- button.present? && menu.present?
148
- end
4
+ class Dropdown < Primer::Alpha::Dropdown
5
+ status :deprecated
149
6
  end
150
7
  end
@@ -1 +1 @@
1
- import '@github/time-elements';
1
+ import '@github/relative-time-element';
@@ -1 +1 @@
1
- import '@github/time-elements';
1
+ import '@github/relative-time-element';
@@ -37,7 +37,9 @@ module Primer
37
37
 
38
38
  @datetime = datetime
39
39
 
40
- @system_arguments[:tag] = "local-time"
40
+ @system_arguments[:tag] = "relative-time"
41
+ @system_arguments[:threshold] = "PT0S"
42
+ @system_arguments[:prefix] = ""
41
43
  @system_arguments[:datetime] = datetime
42
44
 
43
45
  @initial_text = initial_text
@@ -1 +1 @@
1
- import '@github/time-elements'
1
+ import '@github/relative-time-element'
@@ -0,0 +1 @@
1
+ .menu{background-color:var(--color-canvas-default);border:var(--primer-borderWidth-thin,1px) solid var(--color-border-default);border-radius:var(--primer-borderRadius-medium,6px);list-style:none;margin-bottom:var(--primer-stack-gap-normal,16px)}.menu-item{border-bottom:var(--primer-borderWidth-thin,1px) solid var(--color-border-muted);color:var(--color-fg-default);display:block;padding:var(--primer-control-medium-paddingInline-condensed,8px) var(--primer-control-medium-paddingInline-spacious,16px);position:relative}.menu-item:first-child{border-top:0;border-top-right-radius:var(--primer-borderRadius-medium,6px)}.menu-item:first-child,.menu-item:first-child:before{border-top-left-radius:var(--primer-borderRadius-medium,6px)}.menu-item:last-child{border-bottom:0;border-bottom-right-radius:var(--primer-borderRadius-medium,6px)}.menu-item:last-child,.menu-item:last-child:before{border-bottom-left-radius:var(--primer-borderRadius-medium,6px)}.menu-item:hover{background-color:var(--color-neutral-subtle);text-decoration:none}.menu-item:active{background-color:var(--color-canvas-subtle)}.menu-item.selected,.menu-item[aria-current]:not([aria-current=false]),.menu-item[aria-selected=true]{background-color:var(--color-menu-bg-active);cursor:default}:is(.menu-item.selected,.menu-item[aria-selected=true],.menu-item[aria-current]:not([aria-current=false])):before{background-color:var(--color-primer-border-active);bottom:0;content:"";left:0;position:absolute;top:0;width:2px}.menu-item .octicon{color:var(--color-fg-muted);margin-right:var(--primer-control-medium-gap,8px);text-align:center;width:16px}.menu-item .Counter{float:right;margin-left:var(--primer-control-small-gap,4px)}.menu-item .menu-warning{color:var(--color-attention-fg);float:right}.menu-item .avatar{float:left;margin-right:var(--primer-control-small-gap,4px)}.menu-item.alert .Counter{color:var(--color-danger-fg)}.menu-heading{border-bottom:var(--primer-borderWidth-thin,1px) solid var(--color-border-muted);color:var(--color-fg-default);display:block;font-size:inherit;font-weight:var(--base-text-weight-semibold,600);margin-bottom:0;margin-top:0;padding:var(--primer-control-medium-paddingInline-condensed,8px) var(--primer-control-medium-paddingInline-spacious,16px)}.menu-heading:hover{text-decoration:none}.menu-heading:first-child{border-top-left-radius:var(--primer-borderRadius-medium,6px);border-top-right-radius:var(--primer-borderRadius-medium,6px)}.menu-heading:last-child{border-bottom:0;border-bottom-left-radius:var(--primer-borderRadius-medium,6px);border-bottom-right-radius:var(--primer-borderRadius-medium,6px)}
@@ -0,0 +1 @@
1
+ {"name":"menu_component","selectors":[".menu",".menu-item",".menu-item:first-child",".menu-item:first-child:before",".menu-item:last-child",".menu-item:last-child:before",".menu-item:hover",".menu-item:active",".menu-item.selected",".menu-item[aria-current]:not([aria-current=false])",".menu-item[aria-selected=true]",":is(.menu-item.selected",".menu-item[aria-current]:not([aria-current=false])):before",".menu-item .octicon",".menu-item .Counter",".menu-item .menu-warning",".menu-item .avatar",".menu-item.alert .Counter",".menu-heading",".menu-heading:hover",".menu-heading:first-child",".menu-heading:last-child"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["menu_component.pcss"],"names":[],"mappings":"AAIA,MAGE,4CAA6C,CAC7C,2EAA6E,CAC7E,mDAAqD,CAHrD,eAAgB,CADhB,iDAKF,CAEA,WAKE,gFAAkF,CADlF,6BAA8B,CAF9B,aAAc,CACd,yHAA4H,CAF5H,iBA+EF,CAzEE,uBACE,YAAa,CAEb,6DAKF,CAHE,qDAHA,4DAKA,CAGF,sBACE,eAAgB,CAChB,gEAMF,CAHE,mDAFA,+DAIA,CAGF,iBAEE,4CAA6C,CAD7C,oBAEF,CAEA,kBACE,2CACF,CAEA,sGAIE,4CAA6C,CAD7C,cAYF,CATE,kHAOE,kDAAmD,CAJnD,QAAS,CAGT,UAAW,CAFX,MAAO,CAHP,iBAAkB,CAClB,KAAM,CAGN,SAGF,CAGF,oBAGE,2BAA4B,CAD5B,iDAAmD,CAEnD,iBAAkB,CAHlB,UAIF,CAEA,oBACE,WAAY,CACZ,+CACF,CAEA,yBAEE,+BAAgC,CADhC,WAEF,CAEA,mBACE,UAAW,CACX,gDACF,CAGE,0BACE,4BACF,CAIJ,cAQE,gFAAkF,CADlF,6BAA8B,CAN9B,aAAc,CAId,iBAAkB,CAClB,gDAAkD,CAFlD,eAAgB,CADhB,YAAa,CADb,yHAsBF,CAdE,oBACE,oBACF,CAEA,0BACE,4DAA8D,CAC9D,6DACF,CAEA,yBACE,eAAgB,CAEhB,+DAAiE,CADjE,gEAEF","file":"menu_component.css","sourcesContent":["/* menu */\n\n/* A menu on the side of a page, defaults to left side. e.g. github.com/about */\n\n.menu {\n margin-bottom: var(--primer-stack-gap-normal, 16px);\n list-style: none;\n background-color: var(--color-canvas-default);\n border: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);\n border-radius: var(--primer-borderRadius-medium, 6px);\n}\n\n.menu-item {\n position: relative;\n display: block;\n padding: var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);\n color: var(--color-fg-default);\n border-bottom: var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);\n\n &:first-child {\n border-top: 0;\n border-top-left-radius: var(--primer-borderRadius-medium, 6px);\n border-top-right-radius: var(--primer-borderRadius-medium, 6px);\n\n &::before {\n border-top-left-radius: var(--primer-borderRadius-medium, 6px);\n }\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);\n border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);\n\n &::before {\n border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);\n }\n }\n\n &:hover {\n text-decoration: none;\n background-color: var(--color-neutral-subtle);\n }\n\n &:active {\n background-color: var(--color-canvas-subtle);\n }\n\n &.selected,\n &[aria-selected='true'],\n &[aria-current]:not([aria-current='false']) {\n cursor: default;\n background-color: var(--color-menu-bg-active);\n\n &::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 2px;\n content: '';\n background-color: var(--color-primer-border-active);\n }\n }\n\n & .octicon {\n width: 16px;\n margin-right: var(--primer-control-medium-gap, 8px);\n color: var(--color-fg-muted);\n text-align: center;\n }\n\n & .Counter {\n float: right;\n margin-left: var(--primer-control-small-gap, 4px);\n }\n\n & .menu-warning {\n float: right;\n color: var(--color-attention-fg);\n }\n\n & .avatar {\n float: left;\n margin-right: var(--primer-control-small-gap, 4px);\n }\n\n &.alert {\n & .Counter {\n color: var(--color-danger-fg);\n }\n }\n}\n\n.menu-heading {\n display: block;\n padding: var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);\n margin-top: 0;\n margin-bottom: 0;\n font-size: inherit;\n font-weight: var(--base-text-weight-semibold, 600);\n color: var(--color-fg-default);\n border-bottom: var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);\n\n &:hover {\n text-decoration: none;\n }\n\n &:first-child {\n border-top-left-radius: var(--primer-borderRadius-medium, 6px);\n border-top-right-radius: var(--primer-borderRadius-medium, 6px);\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);\n border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);\n }\n}\n"]}
@@ -0,0 +1,119 @@
1
+ /* menu */
2
+
3
+ /* A menu on the side of a page, defaults to left side. e.g. github.com/about */
4
+
5
+ .menu {
6
+ margin-bottom: var(--primer-stack-gap-normal, 16px);
7
+ list-style: none;
8
+ background-color: var(--color-canvas-default);
9
+ border: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);
10
+ border-radius: var(--primer-borderRadius-medium, 6px);
11
+ }
12
+
13
+ .menu-item {
14
+ position: relative;
15
+ display: block;
16
+ padding: var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);
17
+ color: var(--color-fg-default);
18
+ border-bottom: var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);
19
+
20
+ &:first-child {
21
+ border-top: 0;
22
+ border-top-left-radius: var(--primer-borderRadius-medium, 6px);
23
+ border-top-right-radius: var(--primer-borderRadius-medium, 6px);
24
+
25
+ &::before {
26
+ border-top-left-radius: var(--primer-borderRadius-medium, 6px);
27
+ }
28
+ }
29
+
30
+ &:last-child {
31
+ border-bottom: 0;
32
+ border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);
33
+ border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);
34
+
35
+ &::before {
36
+ border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);
37
+ }
38
+ }
39
+
40
+ &:hover {
41
+ text-decoration: none;
42
+ background-color: var(--color-neutral-subtle);
43
+ }
44
+
45
+ &:active {
46
+ background-color: var(--color-canvas-subtle);
47
+ }
48
+
49
+ &.selected,
50
+ &[aria-selected='true'],
51
+ &[aria-current]:not([aria-current='false']) {
52
+ cursor: default;
53
+ background-color: var(--color-menu-bg-active);
54
+
55
+ &::before {
56
+ position: absolute;
57
+ top: 0;
58
+ bottom: 0;
59
+ left: 0;
60
+ width: 2px;
61
+ content: '';
62
+ background-color: var(--color-primer-border-active);
63
+ }
64
+ }
65
+
66
+ & .octicon {
67
+ width: 16px;
68
+ margin-right: var(--primer-control-medium-gap, 8px);
69
+ color: var(--color-fg-muted);
70
+ text-align: center;
71
+ }
72
+
73
+ & .Counter {
74
+ float: right;
75
+ margin-left: var(--primer-control-small-gap, 4px);
76
+ }
77
+
78
+ & .menu-warning {
79
+ float: right;
80
+ color: var(--color-attention-fg);
81
+ }
82
+
83
+ & .avatar {
84
+ float: left;
85
+ margin-right: var(--primer-control-small-gap, 4px);
86
+ }
87
+
88
+ &.alert {
89
+ & .Counter {
90
+ color: var(--color-danger-fg);
91
+ }
92
+ }
93
+ }
94
+
95
+ .menu-heading {
96
+ display: block;
97
+ padding: var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);
98
+ margin-top: 0;
99
+ margin-bottom: 0;
100
+ font-size: inherit;
101
+ font-weight: var(--base-text-weight-semibold, 600);
102
+ color: var(--color-fg-default);
103
+ border-bottom: var(--primer-borderWidth-thin, 1px) solid var(--color-border-muted);
104
+
105
+ &:hover {
106
+ text-decoration: none;
107
+ }
108
+
109
+ &:first-child {
110
+ border-top-left-radius: var(--primer-borderRadius-medium, 6px);
111
+ border-top-right-radius: var(--primer-borderRadius-medium, 6px);
112
+ }
113
+
114
+ &:last-child {
115
+ border-bottom: 0;
116
+ border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);
117
+ border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);
118
+ }
119
+ }
@@ -1,125 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primer
4
- # Use `Popover` to bring attention to specific user interface elements, typically to suggest an action or to guide users through a new experience.
5
- #
6
- # By default, the popover renders with absolute positioning, meaning it should usually be wrapped in an element with a relative position in order to be positioned properly. To render the popover with relative positioning, use the relative property.
7
- class PopoverComponent < Primer::Component
8
- status :beta
9
-
10
- CARET_DEFAULT = :top
11
- CARET_MAPPINGS = {
12
- CARET_DEFAULT => "",
13
- :bottom => "Popover-message--bottom",
14
- :bottom_right => "Popover-message--bottom-right",
15
- :bottom_left => "Popover-message--bottom-left",
16
- :left => "Popover-message--left",
17
- :left_bottom => "Popover-message--left-bottom",
18
- :left_top => "Popover-message--left-top",
19
- :right => "Popover-message--right",
20
- :right_bottom => "Popover-message--right-bottom",
21
- :right_top => "Popover-message--right-top",
22
- :top_left => "Popover-message--top-left",
23
- :top_right => "Popover-message--top-right"
24
- }.freeze
25
-
26
- DEFAULT_HEADING_TAG = :h4
27
-
28
- # The heading
29
- #
30
- # @param tag [Symbol] (Primer::PopoverComponent::DEFAULT_HEADING_TAG) <%= one_of(Primer::Beta::Heading::TAG_OPTIONS) %>
31
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
32
- renders_one :heading, lambda { |tag: DEFAULT_HEADING_TAG, **system_arguments|
33
- system_arguments[:tag] = tag
34
- system_arguments[:mb] ||= 2
35
-
36
- Primer::Beta::Heading.new(**system_arguments)
37
- }
38
-
39
- # The body
40
- #
41
- # @param caret [Symbol] <%= one_of(Primer::PopoverComponent::CARET_MAPPINGS.keys) %>
42
- # @param large [Boolean] Whether to use the large version of the component.
43
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
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],
48
- "Popover-message Box",
49
- CARET_MAPPINGS[fetch_or_fallback(CARET_MAPPINGS.keys, caret, CARET_DEFAULT)],
50
- "Popover-message--large" => large
51
- )
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
57
-
58
- Primer::Content.new
59
- }
60
-
61
- # @example Default
62
- # <%= render Primer::PopoverComponent.new do |component| %>
63
- # <% component.with_heading do %>
64
- # Activity feed
65
- # <% end %>
66
- # <% component.with_body do %>
67
- # This is the Popover body.
68
- # <% end %>
69
- # <% end %>
70
- #
71
- # @example Large
72
- # <%= render Primer::PopoverComponent.new do |component| %>
73
- # <% component.with_heading do %>
74
- # Activity feed
75
- # <% end %>
76
- # <% component.with_body(large: true) do %>
77
- # This is the large Popover body.
78
- # <% end %>
79
- # <% end %>
80
- #
81
- # @example Caret position
82
- # <%= render Primer::PopoverComponent.new do |component| %>
83
- # <% component.with_heading do %>
84
- # Activity feed
85
- # <% end %>
86
- # <% component.with_body(caret: :left) do %>
87
- # This is the Popover body.
88
- # <% end %>
89
- # <% end %>
90
- #
91
- # @example With multiple elements in the body
92
- # <%= render Primer::PopoverComponent.new do |component| %>
93
- # <% component.with_heading do %>
94
- # Activity feed
95
- # <% end %>
96
- # <% component.with_body(caret: :left) do %>
97
- # <p>This is the Popover body.</p>
98
- # <%= render Primer::ButtonComponent.new(type: :submit) do %>
99
- # Got it!
100
- # <% end %>
101
- # <% end %>
102
- # <% end %>
103
- #
104
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
105
- def initialize(**system_arguments)
106
- @system_arguments = deny_tag_argument(**system_arguments)
107
- @system_arguments[:tag] = :div
108
- @system_arguments[:classes] = class_names(
109
- system_arguments[:classes],
110
- "Popover"
111
- )
112
- @system_arguments[:position] ||= :relative
113
- @system_arguments[:right] = false unless @system_arguments.delete(:right)
114
- @system_arguments[:left] = false unless @system_arguments.delete(:left)
115
- end
116
-
117
- def render?
118
- body.present?
119
- end
120
-
121
- def body_component
122
- Primer::Box.new(**@body_arguments)
123
- end
4
+ # :nodoc:
5
+ class PopoverComponent < Primer::Beta::Popover
6
+ status :deprecated
124
7
  end
125
8
  end
@@ -1,3 +1,4 @@
1
+ import './alpha/dropdown';
1
2
  import './alpha/image_crop';
2
3
  import './alpha/modal_dialog';
3
4
  import './alpha/nav_list';
@@ -6,8 +7,7 @@ import './alpha/toggle_switch';
6
7
  import './alpha/tool_tip';
7
8
  import './alpha/x_banner';
8
9
  import './beta/auto_complete/auto_complete';
9
- import './clipboard_copy';
10
- import './dropdown';
10
+ import './beta/clipboard_copy';
11
11
  import './local_time';
12
12
  import './tab_container_component';
13
13
  import './time_ago_component';
@@ -1,3 +1,4 @@
1
+ import './alpha/dropdown';
1
2
  import './alpha/image_crop';
2
3
  import './alpha/modal_dialog';
3
4
  import './alpha/nav_list';
@@ -6,8 +7,7 @@ import './alpha/toggle_switch';
6
7
  import './alpha/tool_tip';
7
8
  import './alpha/x_banner';
8
9
  import './beta/auto_complete/auto_complete';
9
- import './clipboard_copy';
10
- import './dropdown';
10
+ import './beta/clipboard_copy';
11
11
  import './local_time';
12
12
  import './tab_container_component';
13
13
  import './time_ago_component';
@@ -1,20 +1,37 @@
1
1
  /* CSS component styles here */
2
+
3
+ /* alpha */
2
4
  @import "./alpha/action_list.pcss";
5
+ @import "./alpha/auto_complete.pcss";
3
6
  @import "./alpha/banner.pcss";
7
+ @import "./alpha/dialog.pcss";
8
+ @import "./alpha/dropdown.pcss";
9
+ @import "./alpha/tab_nav.pcss";
10
+ @import "./alpha/text_field.pcss";
11
+ @import "./alpha/button_marketing.pcss";
4
12
  @import "./alpha/toggle_switch.pcss";
13
+ @import "./alpha/underline_nav.pcss";
5
14
  @import "./alpha/segmented_control.pcss";
15
+
16
+ /* beta */
6
17
  @import "./beta/avatar.pcss";
7
18
  @import "./beta/avatar_stack.pcss";
19
+ @import "./beta/border_box.pcss";
20
+ @import "./beta/blankslate.pcss";
8
21
  @import "./beta/breadcrumbs.pcss";
9
22
  @import "./beta/button.pcss";
23
+ @import "./beta/button_group.pcss";
10
24
  @import "./beta/counter.pcss";
11
25
  @import "./beta/flash.pcss";
12
26
  @import "./beta/label.pcss";
13
- @import "./beta/blankslate.pcss";
27
+ @import "./beta/link.pcss";
28
+ @import "./beta/popover.pcss";
14
29
  @import "./beta/progress_bar.pcss";
15
30
  @import "./beta/truncate.pcss";
16
- @import "./dropdown.pcss";
17
- @import "./popover_component.pcss";
31
+
32
+ /* to be renamed */
33
+ @import "./button_component.pcss";
34
+ @import "./menu_component.pcss";
18
35
  @import "./state_component.pcss";
19
36
  @import "./subhead_component.pcss";
20
37
  @import "./timeline_item_component.pcss";
@@ -1,3 +1,4 @@
1
+ import './alpha/dropdown'
1
2
  import './alpha/image_crop'
2
3
  import './alpha/modal_dialog'
3
4
  import './alpha/nav_list'
@@ -6,8 +7,7 @@ import './alpha/toggle_switch'
6
7
  import './alpha/tool_tip'
7
8
  import './alpha/x_banner'
8
9
  import './beta/auto_complete/auto_complete'
9
- import './clipboard_copy'
10
- import './dropdown'
10
+ import './beta/clipboard_copy'
11
11
  import './local_time'
12
12
  import './tab_container_component'
13
13
  import './time_ago_component'
@@ -1 +1 @@
1
- import '@github/time-elements';
1
+ import '@github/relative-time-element';
@@ -1 +1 @@
1
- import '@github/time-elements';
1
+ import '@github/relative-time-element';
@@ -15,7 +15,8 @@ module Primer
15
15
  @system_arguments = deny_tag_argument(**system_arguments)
16
16
  @system_arguments[:datetime] = time.utc.iso8601
17
17
  @system_arguments[:classes] = class_names("no-wrap", @system_arguments[:classes])
18
- @system_arguments[:tag] = "time-ago"
18
+ @system_arguments[:tag] = "relative-time"
19
+ @system_arguments[:tense] = "past"
19
20
  @system_arguments[:format] = "micro" if micro
20
21
  @time = time
21
22
  @micro = micro
@@ -1 +1 @@
1
- import '@github/time-elements'
1
+ import '@github/relative-time-element'