primer_view_components 0.0.123 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -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 +2 -2
  6. data/app/assets/styles/primer_view_components.css.map +1 -1
  7. data/app/components/primer/alpha/action_list/item.rb +4 -0
  8. data/app/components/primer/alpha/action_list.css.json +41 -0
  9. data/app/components/primer/alpha/auto_complete.css.json +11 -0
  10. data/app/components/primer/alpha/banner.css.json +14 -0
  11. data/app/components/primer/alpha/button_marketing.css.json +10 -0
  12. data/app/components/primer/alpha/dialog.css.json +63 -0
  13. data/app/components/primer/alpha/dropdown.css.json +21 -0
  14. data/app/components/primer/alpha/layout.css.json +27 -0
  15. data/app/components/primer/alpha/menu.css.json +11 -0
  16. data/app/components/primer/alpha/nav_list/item.rb +3 -1
  17. data/app/components/primer/alpha/nav_list/section.rb +4 -4
  18. data/app/components/primer/alpha/nav_list.js +3 -0
  19. data/app/components/primer/alpha/nav_list.rb +2 -2
  20. data/app/components/primer/alpha/nav_list.ts +4 -0
  21. data/app/components/primer/alpha/overlay/body.rb +26 -0
  22. data/app/components/primer/alpha/overlay/footer.rb +41 -0
  23. data/app/components/primer/alpha/overlay/header.html.erb +15 -0
  24. data/app/components/primer/alpha/overlay/header.rb +47 -0
  25. data/app/components/primer/alpha/overlay.css +1 -0
  26. data/app/components/primer/alpha/overlay.css.json +11 -0
  27. data/app/components/primer/alpha/overlay.css.map +1 -0
  28. data/app/components/primer/alpha/overlay.html.erb +11 -0
  29. data/app/components/primer/alpha/overlay.pcss +14 -0
  30. data/app/components/primer/alpha/overlay.rb +194 -0
  31. data/app/components/primer/alpha/segmented_control.css.json +15 -0
  32. data/app/components/primer/alpha/tab_nav.css.json +10 -0
  33. data/app/components/primer/alpha/text_field.css.json +38 -0
  34. data/app/components/primer/alpha/toggle_switch.css.json +16 -0
  35. data/app/components/primer/alpha/underline_nav.css.json +13 -0
  36. data/app/components/primer/anchored_position.d.ts +27 -0
  37. data/app/components/primer/anchored_position.js +149 -0
  38. data/app/components/primer/anchored_position.ts +167 -0
  39. data/app/components/primer/beta/avatar.css.json +14 -0
  40. data/app/components/primer/beta/avatar_stack.css.json +9 -0
  41. data/app/components/primer/beta/blankslate.css.json +12 -0
  42. data/app/components/primer/beta/border_box.css.json +32 -0
  43. data/app/components/primer/beta/breadcrumbs.css.json +4 -0
  44. data/app/components/primer/beta/button.css.json +22 -0
  45. data/app/components/primer/beta/counter.css.json +6 -0
  46. data/app/components/primer/beta/flash.css.json +15 -0
  47. data/app/components/primer/beta/flash.html.erb +1 -2
  48. data/app/components/primer/beta/label.css.json +20 -0
  49. data/app/components/primer/beta/link.css.json +8 -0
  50. data/app/components/primer/beta/popover.css.json +18 -0
  51. data/app/components/primer/beta/progress_bar.css.json +6 -0
  52. data/app/components/primer/beta/state.css.json +10 -0
  53. data/app/components/primer/beta/subhead.css.json +8 -0
  54. data/app/components/primer/beta/timeline_item.css.json +9 -0
  55. data/app/components/primer/beta/truncate.css.json +6 -0
  56. data/app/components/primer/primer.d.ts +2 -0
  57. data/app/components/primer/primer.js +2 -0
  58. data/app/components/primer/primer.pcss +3 -0
  59. data/app/components/primer/primer.ts +2 -0
  60. data/app/components/primer/truncate.css.json +7 -0
  61. data/app/lib/primer/css/layout.css.json +263 -0
  62. data/app/lib/primer/css/utilities.css.json +1636 -0
  63. data/lib/primer/view_components/linters/base_linter.rb +1 -1
  64. data/lib/primer/view_components/linters/disallow_component_css_counter.rb +30 -0
  65. data/lib/primer/view_components/version.rb +2 -2
  66. data/lib/primer/yard/component_manifest.rb +1 -0
  67. data/previews/primer/alpha/overlay_preview/middle_of_page.html.erb +17 -0
  68. data/previews/primer/alpha/overlay_preview.rb +107 -0
  69. data/static/arguments.json +104 -0
  70. data/static/audited_at.json +4 -0
  71. data/static/classes.json +311 -0
  72. data/static/constants.json +102 -0
  73. data/static/previews.json +21 -0
  74. data/static/statuses.json +4 -0
  75. metadata +19 -2
@@ -128,6 +128,7 @@ module Primer
128
128
  # @param parent [Primer::Alpha::ActionList::Item] This item's parent item. `nil` if this item is at the root. Used internally.
129
129
  # @param label [String] Item label.
130
130
  # @param label_classes [String] CSS classes that will be added to the label.
131
+ # @param label_arguments [Hash] <%= link_to_system_arguments_docs %> used to construct the label.
131
132
  # @param content_arguments [Hash] <%= link_to_system_arguments_docs %> used to construct the item's anchor or button tag.
132
133
  # @param truncate_label [Boolean] Truncate label with ellipsis.
133
134
  # @param href [String] Link URL.
@@ -144,6 +145,7 @@ module Primer
144
145
  list:,
145
146
  label:,
146
147
  label_classes: nil,
148
+ label_arguments: {},
147
149
  content_arguments: {},
148
150
  parent: nil,
149
151
  truncate_label: false,
@@ -191,8 +193,10 @@ module Primer
191
193
  @system_arguments[:data][:targets] = "#{list_class.custom_element_name}.items"
192
194
 
193
195
  @label_arguments = {
196
+ **label_arguments,
194
197
  classes: class_names(
195
198
  label_classes,
199
+ label_arguments[:classes],
196
200
  "ActionListItem-label",
197
201
  "ActionListItem-label--truncate" => @truncate_label
198
202
  )
@@ -119,5 +119,46 @@
119
119
  ".ActionList-sectionDivider--filled",
120
120
  ".ActionList-sectionDivider--filled:empty",
121
121
  ".ActionList-sectionDivider--filled:first-child"
122
+ ],
123
+ "classes": [
124
+ "ActionListWrap",
125
+ "ActionListWrap--inset",
126
+ "ActionListWrap--divided",
127
+ "ActionListItem-label",
128
+ "ActionListItem-descriptionWrap--inline",
129
+ "ActionList-sectionDivider",
130
+ "ActionListItem",
131
+ "ActionListItem--navActive",
132
+ "ActionListItem--hasSubItem",
133
+ "ActionListContent",
134
+ "ActionListItem-multiSelectCheckmark",
135
+ "ActionListItem-singleSelectCheckmark",
136
+ "ActionListItem-multiSelectIcon",
137
+ "ActionListItem-multiSelectIconRect",
138
+ "ActionListItem-description",
139
+ "ActionListItem-visual",
140
+ "ActionListItem--danger",
141
+ "ActionList--subGroup",
142
+ "ActionListContent--visual16",
143
+ "ActionListContent--visual20",
144
+ "ActionListContent--visual24",
145
+ "ActionListItem-collapseIcon",
146
+ "ActionListContent--hasActiveSubItem",
147
+ "ActionListContent--sizeLarge",
148
+ "ActionListContent--sizeXLarge",
149
+ "ActionListContent--blockDescription",
150
+ "ActionListItem-action--leading",
151
+ "ActionListItem-visual--leading",
152
+ "ActionListItem-visual--trailing",
153
+ "ActionListItem-action--trailing",
154
+ "ActionListItem-descriptionWrap",
155
+ "ActionListItem-action",
156
+ "ActionListItem-label--truncate",
157
+ "ActionListItem--subItem",
158
+ "ActionListItem--withActions",
159
+ "ActionListItem-trailingAction",
160
+ "ActionListItem--trailingActionHover",
161
+ "ActionList-sectionDivider-title",
162
+ "ActionList-sectionDivider--filled"
122
163
  ]
123
164
  }
@@ -19,5 +19,16 @@
19
19
  ".autocomplete-item.navigation-focus *",
20
20
  ".autocomplete-item.selected *",
21
21
  ".autocomplete-item[aria-selected=true] *"
22
+ ],
23
+ "classes": [
24
+ "autocomplete-label-stacked",
25
+ "autocomplete-label-inline",
26
+ "autocomplete-body",
27
+ "autocomplete-embedded-icon-wrap",
28
+ "form-control",
29
+ "autocomplete-results",
30
+ "autocomplete-item",
31
+ "navigation-focus",
32
+ "selected"
22
33
  ]
23
34
  }
@@ -20,5 +20,19 @@
20
20
  ".Banner.Banner--success .Banner-visual .octicon",
21
21
  ".Banner.Banner--full",
22
22
  ".Banner.Banner--full-whenNarrow"
23
+ ],
24
+ "classes": [
25
+ "Banner",
26
+ "Banner-actions",
27
+ "Banner-visual",
28
+ "octicon",
29
+ "Banner-message",
30
+ "Banner-title",
31
+ "Banner-close",
32
+ "Banner--warning",
33
+ "Banner--error",
34
+ "Banner--success",
35
+ "Banner--full",
36
+ "Banner--full-whenNarrow"
23
37
  ]
24
38
  }
@@ -29,5 +29,15 @@
29
29
  ".btn-signup-mktg:focus-visible",
30
30
  ".btn-small-mktg",
31
31
  ".btn-large-mktg"
32
+ ],
33
+ "classes": [
34
+ "btn-mktg",
35
+ "focus",
36
+ "disabled",
37
+ "btn-muted-mktg",
38
+ "btn-subtle-mktg",
39
+ "btn-signup-mktg",
40
+ "btn-small-mktg",
41
+ "btn-large-mktg"
32
42
  ]
33
43
  }
@@ -78,5 +78,68 @@
78
78
  ".Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow",
79
79
  ".Overlay-backdrop--full-whenNarrow",
80
80
  ".Overlay-backdrop--full-whenNarrow .Overlay"
81
+ ],
82
+ "classes": [
83
+ "Overlay--hidden",
84
+ "Overlay--visibilityHidden",
85
+ "Overlay",
86
+ "Overlay--size-auto",
87
+ "Overlay--size-full",
88
+ "Overlay--size-xsmall",
89
+ "Overlay--size-small",
90
+ "Overlay--size-small-portrait",
91
+ "Overlay--size-medium",
92
+ "Overlay--size-medium-portrait",
93
+ "Overlay--size-large",
94
+ "Overlay--size-xlarge",
95
+ "Overlay--height-auto",
96
+ "Overlay--height-xsmall",
97
+ "Overlay--height-small",
98
+ "Overlay--height-medium",
99
+ "Overlay--height-large",
100
+ "Overlay--height-xlarge",
101
+ "Overlay--width-auto",
102
+ "Overlay--width-small",
103
+ "Overlay--width-medium",
104
+ "Overlay--width-large",
105
+ "Overlay--width-xlarge",
106
+ "Overlay--width-xxlarge",
107
+ "Overlay--motion-scaleFade",
108
+ "Overlay-form",
109
+ "Overlay-header",
110
+ "Overlay-header--divided",
111
+ "Overlay-body",
112
+ "Overlay-header--large",
113
+ "Overlay-headerContentWrap",
114
+ "Overlay-titleWrap",
115
+ "Overlay-title",
116
+ "Overlay-description",
117
+ "Overlay-actionWrap",
118
+ "Overlay-body--paddingCondensed",
119
+ "Overlay-body--paddingNone",
120
+ "Overlay-footer",
121
+ "Overlay-footer--divided",
122
+ "Overlay-footer--alignStart",
123
+ "Overlay-footer--alignCenter",
124
+ "Overlay-footer--alignEnd",
125
+ "Overlay-closeButton",
126
+ "close-button",
127
+ "Overlay-backdrop--center",
128
+ "Overlay-backdrop--anchor",
129
+ "Overlay-backdrop--side",
130
+ "Overlay-backdrop--placement-left",
131
+ "Overlay-backdrop--placement-right",
132
+ "Overlay-backdrop--placement-bottom",
133
+ "Overlay-backdrop--placement-top",
134
+ "Overlay-backdrop--full",
135
+ "Overlay-backdrop--center-whenNarrow",
136
+ "Overlay-backdrop--anchor-whenNarrow",
137
+ "Overlay-backdrop--side-whenNarrow",
138
+ "Overlay-backdrop--placement-left-whenNarrow",
139
+ "Overlay-whenNarrow",
140
+ "Overlay-backdrop--placement-right-whenNarrow",
141
+ "Overlay-backdrop--placement-bottom-whenNarrow",
142
+ "Overlay-backdrop--placement-top-whenNarrow",
143
+ "Overlay-backdrop--full-whenNarrow"
81
144
  ]
82
145
  }
@@ -36,5 +36,26 @@
36
36
  ".dropdown-menu-sw:after",
37
37
  ".dropdown-menu-se:before",
38
38
  ".dropdown-menu-se:after"
39
+ ],
40
+ "classes": [
41
+ "dropdown",
42
+ "dropdown-caret",
43
+ "dropdown-menu",
44
+ "dropdown-menu-no-overflow",
45
+ "dropdown-item",
46
+ "octicon",
47
+ "color-fg-",
48
+ "Label",
49
+ "btn-link",
50
+ "dropdown-signout",
51
+ "dropdown-divider",
52
+ "dropdown-header",
53
+ "octicon-check",
54
+ "dropdown-menu-w",
55
+ "dropdown-menu-e",
56
+ "dropdown-menu-ne",
57
+ "dropdown-menu-s",
58
+ "dropdown-menu-sw",
59
+ "dropdown-menu-se"
39
60
  ]
40
61
  }
@@ -76,5 +76,32 @@
76
76
  ".Layout-main .Layout-main-centered-xl>.container-lg",
77
77
  ".Layout-main .Layout-main-centered-xl>.container-md",
78
78
  ".Layout-main .Layout-main-centered-xl>.container-xl"
79
+ ],
80
+ "classes": [
81
+ "Layout",
82
+ "Layout-divider",
83
+ "Layout-main",
84
+ "Layout-sidebar",
85
+ "Layout--sidebarPosition-flowRow-start",
86
+ "Layout--sidebarPosition-flowRow-end",
87
+ "Layout--sidebarPosition-flowRow-none",
88
+ "Layout--divided",
89
+ "Layout-divider--flowRow-hidden",
90
+ "Layout-divider--flowRow-shallow",
91
+ "Layout--flowRow-until-md",
92
+ "Layout--flowRow-until-lg",
93
+ "Layout--gutter-none",
94
+ "Layout--gutter-condensed",
95
+ "Layout--gutter-spacious",
96
+ "Layout--sidebar-narrow",
97
+ "Layout--sidebar-wide",
98
+ "Layout--sidebarPosition-start",
99
+ "Layout--sidebarPosition-end",
100
+ "Layout-main-centered-lg",
101
+ "Layout-main-centered-md",
102
+ "Layout-main-centered-xl",
103
+ "container-lg",
104
+ "container-md",
105
+ "container-xl"
79
106
  ]
80
107
  }
@@ -24,5 +24,16 @@
24
24
  ".menu-heading:hover",
25
25
  ".menu-heading:first-child",
26
26
  ".menu-heading:last-child"
27
+ ],
28
+ "classes": [
29
+ "menu",
30
+ "menu-item",
31
+ "selected",
32
+ "octicon",
33
+ "Counter",
34
+ "menu-warning",
35
+ "avatar",
36
+ "alert",
37
+ "menu-heading"
27
38
  ]
28
39
  }
@@ -53,7 +53,7 @@ module Primer
53
53
  end
54
54
 
55
55
  def active?
56
- item_active?(self)
56
+ item_active?(self) && items.empty?
57
57
  end
58
58
 
59
59
  # Cause this item to show its list of sub items when rendered.
@@ -75,6 +75,8 @@ module Primer
75
75
 
76
76
  raise "Cannot render a trailing action for an item with subitems" if items.present? && trailing_action.present?
77
77
 
78
+ raise "Cannot pass `selected_by_ids:` for an item with subitems, since parent items cannot be selected" if items.present? && @selected_by_ids.present?
79
+
78
80
  return if items.blank?
79
81
 
80
82
  @content_arguments[:tag] = :button
@@ -28,10 +28,10 @@ module Primer
28
28
  system_arguments[:data][:action] = "click:nav-list#showMore"
29
29
  system_arguments[:data][:"current-page"] = "1"
30
30
  system_arguments[:data][:"total-pages"] = pages.to_s
31
- system_arguments[:label_classes] = class_names(
32
- system_arguments[:label_classes],
33
- "color-fg-accent"
34
- )
31
+ system_arguments[:label_arguments] = {
32
+ **system_arguments[:label_arguments] || {},
33
+ color: :accent
34
+ }
35
35
 
36
36
  component_klass.new(list: self, src: src, **system_arguments)
37
37
  }
@@ -157,6 +157,9 @@ _NavListElement_instances = new WeakSet(), _NavListElement_parseHTML = function
157
157
  var _a;
158
158
  // First we compare the selected link to data-item-id for each nav item
159
159
  for (const navItem of this.items) {
160
+ if (navItem.classList.contains('ActionListItem--hasSubItem')) {
161
+ continue;
162
+ }
160
163
  const keys = ((_a = navItem.getAttribute('data-item-id')) === null || _a === void 0 ? void 0 : _a.split(' ')) || [];
161
164
  if (keys.includes(itemId)) {
162
165
  return navItem;
@@ -67,7 +67,7 @@ module Primer
67
67
  # <%= render(Primer::Alpha::NavList.new(selected_item_id: :email_notifications)) do |component| %>
68
68
  # <% component.with_section(aria: { label: "Account settings" }) do |section| %>
69
69
  # <% section.with_heading(title: "Account Settings") %>
70
- # <% section.with_item(label: "Notification settings", selected_by_ids: :notifications) do |item| %>
70
+ # <% section.with_item(label: "Notification settings") do |item| %>
71
71
  # <% item.with_leading_visual_icon(icon: :bell) %>
72
72
  # <% item.with_item(label: "Email", selected_by_ids: :email_notifications, href: "/account/notifications/email") do |subitem| %>
73
73
  # <% subitem.with_trailing_visual_icon(icon: :mail) %>
@@ -76,7 +76,7 @@ module Primer
76
76
  # <% subitem.with_trailing_visual_icon(icon: :"device-mobile") %>
77
77
  # <% end %>
78
78
  # <% end %>
79
- # <% section.with_item(label: "Messages", selected_by_ids: :messages) do |item| %>
79
+ # <% section.with_item(label: "Messages") do |item| %>
80
80
  # <% item.with_leading_visual_icon(icon: :bookmark) %>
81
81
  # <% item.with_item(label: "Inbox", href: "/account/messages/inbox") do |subitem| %>
82
82
  # <% subitem.with_trailing_visual_counter(count: 10) %>
@@ -162,6 +162,10 @@ export class NavListElement extends HTMLElement {
162
162
  #findSelectedNavItemById(itemId: string): HTMLElement | null {
163
163
  // First we compare the selected link to data-item-id for each nav item
164
164
  for (const navItem of this.items) {
165
+ if (navItem.classList.contains('ActionListItem--hasSubItem')) {
166
+ continue
167
+ }
168
+
165
169
  const keys = navItem.getAttribute('data-item-id')?.split(' ') || []
166
170
 
167
171
  if (keys.includes(itemId)) {
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ class Overlay
6
+ # A `Overlay::Body` is a compositional component, used to render the
7
+ # Body of an overlay. See <%= link_to_component(Primer::Alpha::Overlay) %>.
8
+ class Body < Primer::Component
9
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
10
+ def initialize(padding: DEFAULT_PADDING, **system_arguments)
11
+ @system_arguments = deny_tag_argument(**system_arguments)
12
+ @system_arguments[:tag] = :div
13
+ @system_arguments[:classes] = class_names(
14
+ "Overlay-body",
15
+ PADDING_MAPPINGS[fetch_or_fallback(PADDING_OPTIONS, padding, DEFAULT_PADDING)],
16
+ system_arguments[:classes]
17
+ )
18
+ end
19
+
20
+ def call
21
+ render(Primer::BaseComponent.new(**@system_arguments)) { content }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ class Overlay
6
+ DEFAULT_ALIGN_CONTENT = :end
7
+ ALIGN_CONTENT_MAPPINGS = {
8
+ :start => "Overlay-footer--alignStart",
9
+ :center => "Overlay-footer--alignCenter",
10
+ DEFAULT_ALIGN_CONTENT => "Overlay-footer--alignEnd"
11
+ }.freeze
12
+ ALIGN_CONTENT_OPTIONS = ALIGN_CONTENT_MAPPINGS.keys
13
+
14
+ # A `Overlay::Footer` is a compositional component, used to render the
15
+ # Footer of an overlay. See <%= link_to_component(Primer::Alpha::Overlay) %>.
16
+ class Footer < Primer::Component
17
+ # @param show_divider [Boolean] Show a divider between the footer and body.
18
+ # @param align_content [Symbol] The alginment of contents. <%= one_of(Primer::Alpha::Overlay::ALIGN_CONTENT_OPTIONS) %>
19
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
20
+ def initialize(
21
+ show_divider: false,
22
+ align_content: DEFAULT_ALIGN_CONTENT,
23
+ **system_arguments
24
+ )
25
+ @system_arguments = deny_tag_argument(**system_arguments)
26
+ @system_arguments[:tag] = :div
27
+ @system_arguments[:classes] = class_names(
28
+ "Overlay-footer",
29
+ ALIGN_CONTENT_MAPPINGS[fetch_or_fallback(ALIGN_CONTENT_OPTIONS, align_content, DEFAULT_ALIGN_CONTENT)],
30
+ { "Overlay-footer--divided": show_divider },
31
+ system_arguments[:classes]
32
+ )
33
+ end
34
+
35
+ def call
36
+ render(Primer::BaseComponent.new(**@system_arguments)) { content }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,15 @@
1
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
2
+ <div class="Overlay-headerContentWrap">
3
+ <div class="Overlay-titleWrap">
4
+ <h1 class="Overlay-title <% if @visually_hide_title || content.present? %>sr-only<% end %>"><%= @title %></h1>
5
+ <% if content.present? %>
6
+ <%= content %>
7
+ <% elsif @subtitle.present? %>
8
+ <h2 id="<%= @id %>-description" class="Overlay-description"><%= @subtitle %></h2>
9
+ <% end %>
10
+ </div>
11
+ <div class="Overlay-actionWrap">
12
+ <%= render Primer::Beta::CloseButton.new(classes: "Overlay-closeButton", "popoverhidetarget": @id) %>
13
+ </div>
14
+ </div>
15
+ <% end %>
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ class Overlay
6
+ # A `Overlay::Header` is a compositional component, used to render the
7
+ # Header of an overlay. See <%= link_to_component(Primer::Alpha::Overlay) %>.
8
+ class Header < Primer::Component
9
+ DEFAULT_SIZE = :medium
10
+ SIZE_MAPPINGS = {
11
+ DEFAULT_SIZE => nil,
12
+ :large => "Overlay-header--large"
13
+ }.freeze
14
+ SIZE_OPTIONS = SIZE_MAPPINGS.keys
15
+
16
+ # @param title [String] Describes the content of the Overlay.
17
+ # @param subtitle [String] Provides dditional context for the Overlay, also setting the `aria-describedby` attribute.
18
+ # @param size [Symbol] The size of the Header. <%= one_of(Primer::Alpha::Overlay::Header::SIZE_OPTIONS) %>
19
+ # @param divider [Boolean] Show a divider between the header and body.
20
+ # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies.
21
+ # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
22
+ def initialize(
23
+ id:,
24
+ title:,
25
+ subtitle: nil,
26
+ size: DEFAULT_SIZE,
27
+ divider: false,
28
+ visually_hide_title: false,
29
+ **system_arguments
30
+ )
31
+ @id = id
32
+ @title = title
33
+ @subtitle = subtitle
34
+ @visually_hide_title = visually_hide_title
35
+ @system_arguments = deny_tag_argument(**system_arguments)
36
+ @system_arguments[:tag] = :header
37
+ @system_arguments[:classes] = class_names(
38
+ "Overlay-header",
39
+ { "Overlay-header--divided": divider },
40
+ SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)],
41
+ system_arguments[:classes]
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1 @@
1
+ .Overlay[popover]{border-width:0;padding:0;position:absolute}.Overlay[popover]:not(:open){display:none}anchored-position{display:block}
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "alpha/overlay",
3
+ "selectors": [
4
+ ".Overlay[popover]",
5
+ ".Overlay[popover]:not(:open)",
6
+ "anchored-position"
7
+ ],
8
+ "classes": [
9
+ "Overlay"
10
+ ]
11
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["overlay.pcss"],"names":[],"mappings":"AAAA,kBACE,cAAe,CACf,SAAU,CACV,iBACF,CAGA,6BACE,YACF,CAEA,kBACE,aACF","file":"overlay.css","sourcesContent":[".Overlay[popover] {\n border-width: 0;\n padding: 0;\n position: absolute;\n}\n\n/* stylelint-disable-next-line selector-pseudo-class-no-unknown */\n.Overlay[popover]:not(:open) {\n display: none;\n}\n\nanchored-position {\n display: block;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ <%= show_button %>
2
+
3
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
4
+ <%= header %>
5
+ <% if content.present? %>
6
+ <%= content %>
7
+ <% else %>
8
+ <%= body %>
9
+ <%= footer %>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,14 @@
1
+ .Overlay[popover] {
2
+ border-width: 0;
3
+ padding: 0;
4
+ position: absolute;
5
+ }
6
+
7
+ /* stylelint-disable-next-line selector-pseudo-class-no-unknown */
8
+ .Overlay[popover]:not(:open) {
9
+ display: none;
10
+ }
11
+
12
+ anchored-position {
13
+ display: block;
14
+ }