primer_view_components 0.0.111 → 0.0.113

Sign up to get free protection for your applications and to get access to all the features.
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'