primer_view_components 0.0.5 → 0.0.10
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +84 -27
- data/README.md +37 -6
- data/app/components/primer/avatar_component.rb +11 -0
- data/app/components/primer/base_component.rb +7 -12
- data/app/components/primer/blankslate_component.html.erb +8 -2
- data/app/components/primer/blankslate_component.rb +74 -114
- data/app/components/primer/button_component.rb +3 -3
- data/app/components/primer/counter_component.rb +12 -0
- data/app/components/primer/details_component.html.erb +5 -3
- data/app/components/primer/details_component.rb +36 -11
- data/app/components/primer/flash_component.html.erb +14 -0
- data/app/components/primer/flash_component.rb +43 -0
- data/app/components/primer/layout_component.rb +1 -1
- data/app/components/primer/octicon_component.rb +32 -0
- data/app/components/primer/spinner_component.html.erb +6 -0
- data/app/components/primer/spinner_component.rb +38 -0
- data/app/components/primer/view_components.rb +3 -0
- data/lib/primer/classify.rb +5 -1
- data/lib/primer/view_components/version.rb +1 -1
- metadata +70 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4ccf1dd55332ea7b350841d78e04a0f56a0f036749638c30041582500cc561c
|
4
|
+
data.tar.gz: f948087b2dba1cd217296a08260db95a8973cf8e58d4e1240a2c45295ef17e24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2359e308fa78d78b5cb0f4e76791bfcd6a9714b7295320d04f293f0b7e0351c4fbad90a13743c61e9401de9c69c1269ee791167638715e7fafc594a47b8a242b
|
7
|
+
data.tar.gz: 2089d76d7cdef40b4bce9871d2b0ade0f492751ba057dc99e6fabc4654390656e0cdef57004931d66b1ea75f6189581dbf840bedbb7b89ee6d0fbfdb31d13136
|
data/CHANGELOG.md
CHANGED
@@ -1,14 +1,70 @@
|
|
1
|
-
#
|
1
|
+
# CHANGELOG
|
2
2
|
|
3
|
-
|
3
|
+
## main
|
4
|
+
|
5
|
+
## 0.0.10
|
6
|
+
|
7
|
+
* Add SpinnerComponent
|
8
|
+
|
9
|
+
*Cole Bemis*
|
10
|
+
|
11
|
+
## 0.0.9
|
12
|
+
|
13
|
+
* BREAKING CHANGE: OcticonComponent no longer accepts `class` parameter; use `classes` instead.
|
14
|
+
|
15
|
+
*heynan0*
|
16
|
+
|
17
|
+
## 0.0.8
|
18
|
+
|
19
|
+
* Add support for border margins, such as: `border_top: 0`.
|
20
|
+
|
21
|
+
*Natasha Umer*
|
22
|
+
|
23
|
+
* Add FlashComponent and OcticonComponent.
|
24
|
+
|
25
|
+
*Joel Hawksley*
|
26
|
+
|
27
|
+
* BREAKING CHANGE: BlankslateComponent accepts `icon_size` instead of `icon_height`.
|
28
|
+
|
29
|
+
*Joel Hawksley*
|
30
|
+
|
31
|
+
## 0.0.7
|
32
|
+
|
33
|
+
* Use `octicons_helper` v11.0.0.
|
34
|
+
|
35
|
+
*Joel Hawksley*
|
36
|
+
|
37
|
+
## 0.0.6
|
38
|
+
|
39
|
+
* Updated the invalid class name error message
|
40
|
+
|
41
|
+
*emplums*
|
42
|
+
|
43
|
+
* Updated README with testing instructions
|
44
|
+
|
45
|
+
*emplums*
|
46
|
+
|
47
|
+
* Add large and spacious option to BlankslateComponent
|
48
|
+
|
49
|
+
*simurai*
|
50
|
+
|
51
|
+
* Add option for `ButtonComponent` to render a `summary` tag
|
52
|
+
|
53
|
+
*Manuel Puyol*
|
54
|
+
|
55
|
+
* BREAKING CHANGE: Changed `DetailsComponent` summary and body to be slots
|
56
|
+
|
57
|
+
*Manuel Puyol*
|
58
|
+
|
59
|
+
## 0.0.5
|
4
60
|
|
5
61
|
* Add support for box_shadow
|
6
62
|
* Add components:
|
7
|
-
|
63
|
+
* Popover
|
8
64
|
|
9
65
|
*Sarah Vessels*
|
10
66
|
|
11
|
-
|
67
|
+
## 0.0.4
|
12
68
|
|
13
69
|
* Added support for mx: and my: :auto.
|
14
70
|
|
@@ -17,19 +73,20 @@
|
|
17
73
|
* Added support for custom layout sizes.
|
18
74
|
|
19
75
|
*Manuel Puyol*
|
20
|
-
|
76
|
+
|
77
|
+
## 0.0.3
|
21
78
|
|
22
79
|
* Add support for responsive `float` style argument.
|
23
80
|
|
24
81
|
*Joel Hawksley*
|
25
82
|
|
26
83
|
* Add components:
|
27
|
-
|
28
|
-
|
84
|
+
* Avatar
|
85
|
+
* Blankslate
|
29
86
|
|
30
87
|
*Manuel Puyol, Ben Emdon*
|
31
88
|
|
32
|
-
|
89
|
+
## 0.0.1
|
33
90
|
|
34
91
|
* Add initial gem configuration.
|
35
92
|
|
@@ -44,24 +101,24 @@
|
|
44
101
|
*Manuel Puyol*
|
45
102
|
|
46
103
|
* Add components:
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
104
|
+
* BorderBox
|
105
|
+
* Box
|
106
|
+
* Breadcrumb
|
107
|
+
* Button
|
108
|
+
* Counter
|
109
|
+
* Details
|
110
|
+
* Dropdown
|
111
|
+
* Flex
|
112
|
+
* FlexItem
|
113
|
+
* Heading
|
114
|
+
* Label
|
115
|
+
* Layout
|
116
|
+
* Link
|
117
|
+
* ProgressBar
|
118
|
+
* State
|
119
|
+
* Subhead
|
120
|
+
* Text
|
121
|
+
* TimelineItem
|
122
|
+
* UnderlineNav
|
66
123
|
|
67
124
|
*Manuel Puyol*
|
data/README.md
CHANGED
@@ -77,6 +77,10 @@ Some components have their own specific arguments, but they can all be styled wi
|
|
77
77
|
| `font_weight` | `text-<value>` | `font_weight: :bold` → `.text-bold` |
|
78
78
|
| `border` | `border-<value>` | `border: :bottom` → `.border-bottom` |
|
79
79
|
| `border_color` | `border-<value>` | `border: :green` → `.border-green` |
|
80
|
+
| `border_top` | `border-top-<value>` | `border_top: 0` → `.border-top-0` |
|
81
|
+
| `border_bottom` | `border-bottom-<value>` | `border_bottom: 0` → `.border-bottom-0` |
|
82
|
+
| `border_left` | `border-left-<value>` | `border_left: 0` → `.border-left-0` |
|
83
|
+
| `border_right` | `border-right-<value>` | `border_right: 0` → `.border-right-0` |
|
80
84
|
| `word_break` | `wb-<value>` | `word_break: :break_all` → `.wb-break-all` |
|
81
85
|
| `direction` | `flex-<value>` | `direction: :row` → `.flex-row` |
|
82
86
|
| `justify_content` | `flex-justify-<value>` | `justify_content: :center` → `.flex-justify-center` |
|
@@ -84,6 +88,7 @@ Some components have their own specific arguments, but they can all be styled wi
|
|
84
88
|
| `box_shadow` | `box-shadow-<value>` | `box_shadow: :medium` → `.box-shadow-medium` |
|
85
89
|
|
86
90
|
#### Boolean arguments
|
91
|
+
|
87
92
|
| Component arguments | True | False |
|
88
93
|
| -------------- | ------- | ------ |
|
89
94
|
| `underline` | `underline: true` → `.text-underline` | `underline: false` → `.no-underline` |
|
@@ -112,7 +117,7 @@ The same label using `Primer::HeadingComponent`:
|
|
112
117
|
|
113
118
|
## Contributing
|
114
119
|
|
115
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/primer/view_components. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
120
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/primer/view_components](https://github.com/primer/view_components). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
116
121
|
|
117
122
|
### Setting up
|
118
123
|
|
@@ -122,18 +127,30 @@ Run
|
|
122
127
|
script/setup
|
123
128
|
```
|
124
129
|
|
125
|
-
|
130
|
+
To install all necessary dependencies.
|
131
|
+
|
132
|
+
### Running tests
|
133
|
+
|
134
|
+
To run the full test suite:
|
135
|
+
|
136
|
+
```bash
|
137
|
+
bundle exec rake
|
138
|
+
```
|
139
|
+
|
140
|
+
### Writing documentation
|
126
141
|
|
127
|
-
|
142
|
+
Documentation is written as [YARD](https://yardoc.org/) comments directly in the source code, compiled into Markdown via `rake docs:build` and served by [Doctocat](https://github.com/primer/doctocat).
|
128
143
|
|
129
|
-
|
144
|
+
### Storybook / Documentation
|
130
145
|
|
131
|
-
To run
|
146
|
+
To run Storybook and the documentation site, run:
|
132
147
|
|
133
148
|
```bash
|
134
|
-
script/
|
149
|
+
script/dev
|
135
150
|
```
|
136
151
|
|
152
|
+
_Note: Overmind is required to run script/dev._
|
153
|
+
|
137
154
|
### Developing with another app
|
138
155
|
|
139
156
|
In your `Gemfile`, change:
|
@@ -154,6 +171,20 @@ Remember that restarting the Rails server is necessary to see changes, as the ge
|
|
154
171
|
To minimize the number of restarts, we recommend checking the component in Storybook first, and then when it's in a good state,
|
155
172
|
you can check it in your app.
|
156
173
|
|
174
|
+
### Documentation
|
175
|
+
|
176
|
+
Document components with [YARD](https://yardoc.org/). Docs are published to [RubyDoc.info](https://rubydoc.info/github/primer/view_components).
|
177
|
+
|
178
|
+
## Deploying to Heroku
|
179
|
+
|
180
|
+
We have both `staging` and `production` environments. To deploy Storybook to Heroku, run the following in `#primer-view-components-ops`:
|
181
|
+
|
182
|
+
```bash
|
183
|
+
.deploy primer-view-components</branch> to <environment>
|
184
|
+
```
|
185
|
+
|
186
|
+
If no `branch` is passed, `main` will be deployed.
|
187
|
+
|
157
188
|
## License
|
158
189
|
|
159
190
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -1,9 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
+
# Avatars are images used to represent users and organizations on GitHub.
|
5
|
+
# Use the default round avatar for users, and the `square` argument
|
6
|
+
# for organizations or any other non-human avatars.
|
4
7
|
class AvatarComponent < Primer::Component
|
5
8
|
SMALL_THRESHOLD = 24
|
6
9
|
|
10
|
+
#
|
11
|
+
# @example 34|Default
|
12
|
+
# <%= render(Primer::AvatarComponent.new(src: "http://placekitten.com/200/200", alt: "@kittenuser")) %>
|
13
|
+
#
|
14
|
+
# @param src [String] The source url of the avatar image
|
15
|
+
# @param alt [String] Passed through to alt on img tag
|
16
|
+
# @param size [Integer] Adds the avatar-small class if less than 24
|
17
|
+
# @param square [Boolean] Used to create a square avatar.
|
7
18
|
def initialize(src:, alt:, size: 20, square: false, **kwargs)
|
8
19
|
@kwargs = kwargs
|
9
20
|
@kwargs[:tag] = :img
|
@@ -2,18 +2,15 @@
|
|
2
2
|
|
3
3
|
module Primer
|
4
4
|
# Base component used by other Primer components.
|
5
|
-
#
|
6
|
-
# tag(symbol): HTML tag name to be passed to tag.send(tag)
|
7
|
-
# class_names(string): CSS class name value to be concatenated with generated Primer CSS classes
|
8
|
-
# args(hash): Combination of arguments for classes_from_hash and content_tag
|
9
|
-
#
|
10
|
-
# Example usage:
|
11
|
-
# <%= render Primer::BaseComponent, tag: :a, href: "http://www.google.com", mt: 4 do %>Link<% end %>
|
12
|
-
# generates:
|
13
|
-
# <a href="http://www.google.com" class="mt-4">Link</a>
|
14
5
|
class BaseComponent < Primer::Component
|
15
6
|
TEST_SELECTOR_TAG = :test_selector
|
16
7
|
|
8
|
+
#
|
9
|
+
# @example 34|Default
|
10
|
+
# <%= render(Primer::BaseComponent.new(tag: :a, href: "http://www.google.com", mt: 4)) { "Link" } %>
|
11
|
+
#
|
12
|
+
# @param tag [Symbol] HTML tag name to be passed to tag.send(tag)
|
13
|
+
# @param classes [String] CSS class name value to be concatenated with generated Primer CSS classes
|
17
14
|
def initialize(tag:, classes: nil, **args)
|
18
15
|
@tag = tag
|
19
16
|
@result = Primer::Classify.call(**args.merge(classes: classes))
|
@@ -23,9 +20,7 @@ module Primer
|
|
23
20
|
end
|
24
21
|
|
25
22
|
def call
|
26
|
-
tag.
|
27
|
-
@tag, content, **@content_tag_args.merge(@result)
|
28
|
-
)
|
23
|
+
content_tag(@tag, content, **@content_tag_args.merge(@result))
|
29
24
|
end
|
30
25
|
|
31
26
|
private
|
@@ -1,13 +1,19 @@
|
|
1
1
|
<%= render Primer::BaseComponent.new(**@kwargs) do %>
|
2
2
|
<% if @icon.present? %>
|
3
|
-
<%=
|
3
|
+
<%= render(Primer::OcticonComponent.new(
|
4
|
+
icon: @icon,
|
5
|
+
size: @icon_size,
|
6
|
+
classes: "blankslate-icon"
|
7
|
+
)) %>
|
4
8
|
<% end %>
|
5
9
|
|
6
10
|
<% if @image_src.present? && @image_alt.present? %>
|
7
11
|
<%= image_tag "#{@image_src}", class: "mb-3", size: "56x56", alt: "#{@image_alt}" %>
|
8
12
|
<% end %>
|
9
13
|
|
10
|
-
|
14
|
+
<% if @title.present? %>
|
15
|
+
<%= render Primer::BaseComponent.new(tag: @title_tag, mb: 1) do %><%= @title %><% end %>
|
16
|
+
<% end %>
|
11
17
|
|
12
18
|
<% if @description.present? %>
|
13
19
|
<p><%= @description %></p>
|
@@ -1,122 +1,78 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# ## Basic example
|
7
|
-
#
|
8
|
-
# The `Primer::BlankslateComponent` supports the following arguments to add a basic blankslate:
|
9
|
-
#
|
10
|
-
# 1. `title` (`String` required). Text that appears in a larger bold font.
|
11
|
-
# 2. `description` (`String` optional). Text that appears below the title. Typically a whole sentence.
|
12
|
-
#
|
13
|
-
# ```ruby
|
14
|
-
# <%= render Primer::BlankslateComponent.new(
|
15
|
-
# title: "Title",
|
16
|
-
# description: "Description",
|
17
|
-
# ) %>
|
18
|
-
# ```
|
19
|
-
#
|
20
|
-
# ## Icon or graphic (optional)
|
21
|
-
#
|
22
|
-
# Add an `icon` to give additional context. Please refer to the [Octicons](https://primer.style/octicons/) documentation to choose an icon.
|
23
|
-
#
|
24
|
-
# ```ruby
|
25
|
-
# <%= render Primer::BlankslateComponent.new(
|
26
|
-
# icon: "octoface",
|
27
|
-
# title: "Title",
|
28
|
-
# description: "Description",
|
29
|
-
# ) %>
|
30
|
-
# ```
|
31
|
-
#
|
32
|
-
# Alternatively you can also add a graphic by providing a path (`image_src`) to an image instead.Also, make sure to add an alternative description (`image_alt`). It will be used for the `alt` tag.
|
33
|
-
#
|
34
|
-
# ```ruby
|
35
|
-
# <%= render Primer::BlankslateComponent.new(
|
36
|
-
# image_src: "file.svg",
|
37
|
-
# image_alt: "Description of the image",
|
38
|
-
# title: "Title",
|
39
|
-
# description: "Description",
|
40
|
-
# ) %>
|
41
|
-
# ```
|
42
|
-
#
|
43
|
-
# Both icon and graphic will appear above the title.
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# ## Custom content (optional)
|
47
|
-
#
|
48
|
-
# You can add any custom content that typically is used instead of the description:
|
49
|
-
#
|
50
|
-
# ```ruby
|
51
|
-
# <%= render Primer::BlankslateComponent.new(
|
52
|
-
# icon: "octoface",
|
53
|
-
# title: "Title",
|
54
|
-
# ) do %>
|
55
|
-
# <p>Your custom content here</p>
|
56
|
-
# <% end %>
|
57
|
-
# ```
|
58
|
-
#
|
59
|
-
# ## Action button (optional)
|
60
|
-
#
|
61
|
-
# You can provide an action button to help users replace the blankslate. The button will appear below the description and custom content. It takes the following arguments:
|
62
|
-
#
|
63
|
-
# - `button_text` (`String` optional). The text of the button.
|
64
|
-
# - `button_url` (`String` optional). The URL where the user will be taken after clicking the button.
|
65
|
-
#
|
66
|
-
# ```ruby
|
67
|
-
# <%= render Primer::BlankslateComponent.new(
|
68
|
-
# icon: "book",
|
69
|
-
# title: "Welcome to the mona wiki!",
|
70
|
-
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
71
|
-
#
|
72
|
-
# button_text: "Create the first page",
|
73
|
-
# button_url: "https://github.com/monalisa/mona/wiki/_new",
|
74
|
-
# ) %>
|
75
|
-
# ```
|
76
|
-
#
|
77
|
-
# ## Link (optional)
|
78
|
-
#
|
79
|
-
# Add an additional link to help users learn more about a feature. The link will be shown at the very bottom:
|
80
|
-
#
|
81
|
-
# - `link_text` (`String` optional). The text of the link.
|
82
|
-
# - `link_url` (`String` optional). The URL where the user will be taken after clicking the link.
|
83
|
-
#
|
84
|
-
# ```ruby
|
85
|
-
# <%= render Primer::BlankslateComponent.new(
|
86
|
-
# icon: "book",
|
87
|
-
# title: "Welcome to the mona wiki!",
|
88
|
-
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
89
|
-
# button_text: "Create the first page",
|
90
|
-
# button_url: "https://github.com/monalisa/mona/wiki/_new",
|
91
|
-
# link_text: "Learn more about wikis",
|
92
|
-
# link_url: "https://docs.github.com/en/github/building-a-strong-community/about-wikis",
|
93
|
-
# ) %>
|
94
|
-
# ```
|
95
|
-
#
|
96
|
-
# ## Variations (optional)
|
97
|
-
#
|
98
|
-
# There are a few variations of how the Blankslate appears:
|
99
|
-
#
|
100
|
-
# - `narrow` (`Boolean` optional). Adds a maximum width.
|
101
|
-
#
|
102
|
-
# ```ruby
|
103
|
-
# <%= render Primer::BlankslateComponent.new(
|
104
|
-
# icon: "book",
|
105
|
-
# title: "Welcome to the mona wiki!",
|
106
|
-
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
107
|
-
#
|
108
|
-
# narrow: true,
|
109
|
-
# ) %>
|
110
|
-
# ```
|
4
|
+
# Use Primer::BlankslateComponent when there is a lack of content within a page or section. Use as placeholder to tell users why something isn't there.
|
111
5
|
class BlankslateComponent < Primer::Component
|
6
|
+
#
|
7
|
+
# @example 150|Basic
|
8
|
+
# <%= render Primer::BlankslateComponent.new(
|
9
|
+
# title: "Title",
|
10
|
+
# description: "Description",
|
11
|
+
# ) %>
|
12
|
+
#
|
13
|
+
# @example 190|Icon|Add an `icon` to give additional context. Refer to the [Octicons](https://primer.style/octicons/) documentation to choose an icon.
|
14
|
+
# <%= render Primer::BlankslateComponent.new(
|
15
|
+
# icon: "octoface",
|
16
|
+
# title: "Title",
|
17
|
+
# description: "Description",
|
18
|
+
# ) %>
|
19
|
+
#
|
20
|
+
# @example 150|Custom content|Pass custom content as a block in place of `description`.
|
21
|
+
# <%= render Primer::BlankslateComponent.new(
|
22
|
+
# title: "Title",
|
23
|
+
# ) do %>
|
24
|
+
# <em>Your custom content here</em>
|
25
|
+
# <% end %>
|
26
|
+
#
|
27
|
+
# @example 270|Action button|Provide a button to guide users to take action from the blankslate. The button appears below the description and custom content.
|
28
|
+
# <%= render Primer::BlankslateComponent.new(
|
29
|
+
# icon: "book",
|
30
|
+
# title: "Welcome to the mona wiki!",
|
31
|
+
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
32
|
+
#
|
33
|
+
# button_text: "Create the first page",
|
34
|
+
# button_url: "https://github.com/monalisa/mona/wiki/_new",
|
35
|
+
# ) %>
|
36
|
+
#
|
37
|
+
# @example 225|Link|Add an additional link to help users learn more about a feature. The link will be shown at the very bottom:
|
38
|
+
# <%= render Primer::BlankslateComponent.new(
|
39
|
+
# icon: "book",
|
40
|
+
# title: "Welcome to the mona wiki!",
|
41
|
+
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
42
|
+
# link_text: "Learn more about wikis",
|
43
|
+
# link_url: "https://docs.github.com/en/github/building-a-strong-community/about-wikis",
|
44
|
+
# ) %>
|
45
|
+
#
|
46
|
+
# @example 340|Variations|There are a few variations of how the Blankslate appears: `narrow` adds a maximum width, `large` increases the font size, and `spacious` adds extra padding.
|
47
|
+
# <%= render Primer::BlankslateComponent.new(
|
48
|
+
# icon: "book",
|
49
|
+
# title: "Welcome to the mona wiki!",
|
50
|
+
# description: "Wikis provide a place in your repository to lay out the roadmap of your project, show the current status, and document software better, together.",
|
51
|
+
# narrow: true,
|
52
|
+
# large: true,
|
53
|
+
# spacious: true,
|
54
|
+
# ) %>
|
55
|
+
#
|
56
|
+
# @param title [String] Text that appears in a larger bold font.
|
57
|
+
# @param title_tag [Symbol] HTML tag to use for title.
|
58
|
+
# @param icon [String] Octicon icon to use at top of component.
|
59
|
+
# @param icon_size [Symbol] One of <%= Primer::OcticonComponent::SIZE_MAPPINGS.keys.map { |k| "`:#{k}`" }.to_sentence %>
|
60
|
+
# @param image_src [String] Image to display.
|
61
|
+
# @param image_alt [String] Alt text for image.
|
62
|
+
# @param description [String] Text that appears below the title. Typically a whole sentence.
|
63
|
+
# @param button_text [String] The text of the button.
|
64
|
+
# @param button_url [String] The URL where the user will be taken after clicking the button.
|
65
|
+
# @param button_classes [String] Classes to apply to action button
|
66
|
+
# @param link_text [String] The text of the link.
|
67
|
+
# @param link_url [String] The URL where the user will be taken after clicking the link.
|
68
|
+
# @param narrow [Boolean] Adds a maximum width.
|
69
|
+
# @param large [Boolean] Increases the font size.
|
70
|
+
# @param spacious [Boolean] Adds extra padding.
|
112
71
|
def initialize(
|
113
|
-
|
114
|
-
title:,
|
115
|
-
|
116
|
-
# optional
|
72
|
+
title: "",
|
117
73
|
title_tag: :h3,
|
118
74
|
icon: "",
|
119
|
-
|
75
|
+
icon_size: :medium,
|
120
76
|
image_src: "",
|
121
77
|
image_alt: " ",
|
122
78
|
description: "",
|
@@ -128,20 +84,24 @@ module Primer
|
|
128
84
|
|
129
85
|
#variations
|
130
86
|
narrow: false,
|
87
|
+
large: false,
|
88
|
+
spacious: false,
|
131
89
|
|
132
90
|
**kwargs
|
133
91
|
)
|
134
92
|
@kwargs = kwargs
|
135
|
-
@kwargs[:tag]
|
93
|
+
@kwargs[:tag] ||= :div
|
136
94
|
@kwargs[:classes] = class_names(
|
137
95
|
@kwargs[:classes],
|
138
96
|
"blankslate",
|
139
97
|
"blankslate-narrow": narrow,
|
98
|
+
"blankslate-large": large,
|
99
|
+
"blankslate-spacious": spacious,
|
140
100
|
)
|
141
101
|
|
142
102
|
@title_tag = title_tag
|
143
103
|
@icon = icon
|
144
|
-
@
|
104
|
+
@icon_size = icon_size
|
145
105
|
@image_src = image_src
|
146
106
|
@image_alt = image_alt
|
147
107
|
@title = title
|
@@ -20,7 +20,7 @@ module Primer
|
|
20
20
|
VARIANT_OPTIONS = VARIANT_MAPPINGS.keys
|
21
21
|
|
22
22
|
DEFAULT_TAG = :button
|
23
|
-
TAG_OPTIONS = [DEFAULT_TAG, :a].freeze
|
23
|
+
TAG_OPTIONS = [DEFAULT_TAG, :a, :summary].freeze
|
24
24
|
|
25
25
|
DEFAULT_TYPE = :button
|
26
26
|
TYPE_OPTIONS = [DEFAULT_TYPE, :reset, :submit].freeze
|
@@ -45,9 +45,9 @@ module Primer
|
|
45
45
|
@kwargs[:classes] = class_names(
|
46
46
|
"btn",
|
47
47
|
kwargs[:classes],
|
48
|
-
BUTTON_TYPE_MAPPINGS[fetch_or_fallback(BUTTON_TYPE_OPTIONS, button_type
|
48
|
+
BUTTON_TYPE_MAPPINGS[fetch_or_fallback(BUTTON_TYPE_OPTIONS, button_type, DEFAULT_BUTTON_TYPE)],
|
49
49
|
VARIANT_MAPPINGS[fetch_or_fallback(VARIANT_OPTIONS, variant, DEFAULT_VARIANT)],
|
50
|
-
|
50
|
+
"BtnGroup-item" => group_item
|
51
51
|
)
|
52
52
|
end
|
53
53
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
+
# Use Primer::CounterComponent to add a count to navigational elements and buttons.
|
4
5
|
class CounterComponent < Primer::Component
|
5
6
|
DEFAULT_SCHEME = :default
|
6
7
|
SCHEME_MAPPINGS = {
|
@@ -9,6 +10,17 @@ module Primer
|
|
9
10
|
:light_gray => "Counter Counter--gray-light",
|
10
11
|
}.freeze
|
11
12
|
|
13
|
+
#
|
14
|
+
# @example 34|Default
|
15
|
+
# <%= render(Primer::CounterComponent.new(count: 25)) %>
|
16
|
+
#
|
17
|
+
# @param count [Integer, Float::INFINITY, nil] The number to be displayed (e.x. # of issues, pull requests)
|
18
|
+
# @param scheme [Symbol] Color scheme. One of `SCHEME_MAPPINGS.keys`.
|
19
|
+
# @param limit [Integer] Maximum value to display. (e.x. if count == 6,000 and limit == 5000, counter will display "5,000+")
|
20
|
+
# @param hide_if_zero [Boolean] If true, a `hidden` attribute is added to the counter if `count` is zero.
|
21
|
+
# @param text [String] Text to display instead of count.
|
22
|
+
# @param round [Boolean] Whether to apply our standard rounding logic to value.
|
23
|
+
# @param kwargs [Hash] Style arguments to be passed to Primer::Classify
|
12
24
|
def initialize(
|
13
25
|
count: 0,
|
14
26
|
scheme: DEFAULT_SCHEME,
|
@@ -1,6 +1,8 @@
|
|
1
1
|
<%= render Primer::BaseComponent.new(**@kwargs) do %>
|
2
|
-
<%= render
|
3
|
-
<%= summary %>
|
2
|
+
<%= render summary.component do %>
|
3
|
+
<%= summary.content %>
|
4
|
+
<% end %>
|
5
|
+
<%= render body.component do %>
|
6
|
+
<%= body.content %>
|
4
7
|
<% end %>
|
5
|
-
<%= body %>
|
6
8
|
<% end %>
|
@@ -7,6 +7,8 @@ module Primer
|
|
7
7
|
# reset will remove all styles from the <summary> element.
|
8
8
|
#
|
9
9
|
class DetailsComponent < Primer::Component
|
10
|
+
include ViewComponent::Slotable
|
11
|
+
|
10
12
|
OVERLAY_DEFAULT = :none
|
11
13
|
OVERLAY_MAPPINGS = {
|
12
14
|
OVERLAY_DEFAULT => "",
|
@@ -14,25 +16,48 @@ module Primer
|
|
14
16
|
:dark => "details-overlay details-overlay-dark",
|
15
17
|
}.freeze
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
BUTTON_OPTIONS = [BUTTON_DEFAULT, BUTTON_RESET]
|
20
|
-
|
21
|
-
with_content_areas :summary, :body
|
22
|
-
|
23
|
-
def initialize(overlay: OVERLAY_DEFAULT, button: BUTTON_DEFAULT, **kwargs)
|
24
|
-
@button = fetch_or_fallback(BUTTON_OPTIONS, button, BUTTON_DEFAULT)
|
19
|
+
with_slot :body, class_name: "Body"
|
20
|
+
with_slot :summary, class_name: "Summary"
|
25
21
|
|
22
|
+
def initialize(overlay: OVERLAY_DEFAULT, reset: false, **kwargs)
|
26
23
|
@kwargs = kwargs
|
27
24
|
@kwargs[:tag] = :details
|
28
25
|
@kwargs[:classes] = class_names(
|
29
26
|
kwargs[:classes],
|
30
27
|
OVERLAY_MAPPINGS[fetch_or_fallback(OVERLAY_MAPPINGS.keys, overlay, OVERLAY_DEFAULT)],
|
31
|
-
"details-reset" =>
|
28
|
+
"details-reset" => reset
|
32
29
|
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def render?
|
33
|
+
summary.present? && body.present?
|
34
|
+
end
|
35
|
+
|
36
|
+
class Summary < Primer::Slot
|
37
|
+
def initialize(button: true, **kwargs)
|
38
|
+
@button = button
|
39
|
+
|
40
|
+
@kwargs = kwargs
|
41
|
+
@kwargs[:tag] = :summary
|
42
|
+
@kwargs[:role] = "button"
|
43
|
+
end
|
44
|
+
|
45
|
+
def component
|
46
|
+
return Primer::BaseComponent.new(**@kwargs) unless @button
|
47
|
+
|
48
|
+
Primer::ButtonComponent.new(**@kwargs)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Body < Primer::Slot
|
53
|
+
def initialize(**kwargs)
|
54
|
+
@kwargs = kwargs
|
55
|
+
@kwargs[:tag] ||= :div
|
56
|
+
end
|
33
57
|
|
34
|
-
|
35
|
-
|
58
|
+
def component
|
59
|
+
Primer::BaseComponent.new(**@kwargs)
|
60
|
+
end
|
36
61
|
end
|
37
62
|
end
|
38
63
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= render Primer::BaseComponent.new(**@kwargs) do %>
|
2
|
+
<%= render(Primer::OcticonComponent.new(icon: @icon)) if @icon %>
|
3
|
+
<%= content %>
|
4
|
+
<% if @dismissible %>
|
5
|
+
<button class="flash-close js-flash-close" type="button" aria-label="Close">
|
6
|
+
<%= render(Primer::OcticonComponent.new(icon: "x")) %>
|
7
|
+
</button>
|
8
|
+
<% end %>
|
9
|
+
<% if actions.present? %>
|
10
|
+
<%= render Primer::BaseComponent.new(**actions.kwargs) do %>
|
11
|
+
<%= actions.content %>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
class FlashComponent < Primer::Component
|
5
|
+
include ViewComponent::Slotable
|
6
|
+
|
7
|
+
with_slot :actions, class_name: "Actions"
|
8
|
+
|
9
|
+
DEFAULT_VARIANT = :default
|
10
|
+
VARIANT_MAPPINGS = {
|
11
|
+
DEFAULT_VARIANT => "",
|
12
|
+
:warning => "flash-warn",
|
13
|
+
:danger => "flash-error",
|
14
|
+
:success => "flash-success"
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
def initialize(full: false, spacious: false, dismissible: false, icon: nil, variant: DEFAULT_VARIANT, **kwargs)
|
18
|
+
@icon = icon
|
19
|
+
@dismissible = dismissible
|
20
|
+
@kwargs = kwargs
|
21
|
+
@kwargs[:tag] = :div
|
22
|
+
@kwargs[:classes] = class_names(
|
23
|
+
@kwargs[:classes],
|
24
|
+
"flash",
|
25
|
+
VARIANT_MAPPINGS[fetch_or_fallback(VARIANT_MAPPINGS.keys, variant, DEFAULT_VARIANT)],
|
26
|
+
"flash-full": full
|
27
|
+
)
|
28
|
+
@kwargs[:mb] ||= spacious ? 4 : nil
|
29
|
+
end
|
30
|
+
|
31
|
+
class Actions < ViewComponent::Slot
|
32
|
+
include ClassNameHelper
|
33
|
+
|
34
|
+
attr_reader :kwargs
|
35
|
+
|
36
|
+
def initialize(**kwargs)
|
37
|
+
@kwargs = kwargs
|
38
|
+
@kwargs[:tag] = :div
|
39
|
+
@kwargs[:classes] = class_names(@kwargs[:classes], "flash-action")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -13,7 +13,7 @@ module Primer
|
|
13
13
|
|
14
14
|
def initialize(responsive: false, side: DEFAULT_SIDE, sidebar_col: DEFAULT_SIDEBAR_COL, **kwargs)
|
15
15
|
@kwargs = kwargs
|
16
|
-
@side = fetch_or_fallback(ALLOWED_SIDES, side
|
16
|
+
@side = fetch_or_fallback(ALLOWED_SIDES, side, DEFAULT_SIDE)
|
17
17
|
@responsive = responsive
|
18
18
|
@kwargs[:classes] = class_names(
|
19
19
|
"gutter-condensed gutter-lg",
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
class OcticonComponent < Primer::Component
|
5
|
+
include Primer::ClassNameHelper
|
6
|
+
include OcticonsHelper
|
7
|
+
|
8
|
+
SIZE_DEFAULT = :small
|
9
|
+
SIZE_MAPPINGS = {
|
10
|
+
SIZE_DEFAULT => 16,
|
11
|
+
:medium => 32,
|
12
|
+
:large => 64,
|
13
|
+
}.freeze
|
14
|
+
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
15
|
+
|
16
|
+
def initialize(icon:, size: SIZE_DEFAULT, **kwargs)
|
17
|
+
@icon, @kwargs = icon, kwargs
|
18
|
+
|
19
|
+
@kwargs[:class] = Primer::Classify.call(**@kwargs)[:class]
|
20
|
+
@kwargs[:height] ||= SIZE_MAPPINGS[size]
|
21
|
+
|
22
|
+
# Filter out classify options to prevent them from becoming invalid html attributes.
|
23
|
+
# Note height and width are both classify options and valid html attributes.
|
24
|
+
octicon_helper_options = @kwargs.slice(:height, :width)
|
25
|
+
@kwargs = @kwargs.except(*Primer::Classify::VALID_KEYS, :classes).merge(octicon_helper_options)
|
26
|
+
end
|
27
|
+
|
28
|
+
def call
|
29
|
+
octicon(@icon, **@kwargs)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= render Primer::BaseComponent.new(**@kwargs) do %>
|
2
|
+
<circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
|
3
|
+
<path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke">
|
4
|
+
<animateTransform attributeName="transform" type="rotate" from="0 8 8" to="360 8 8" dur="1s" repeatCount="indefinite" />
|
5
|
+
</path>
|
6
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
# Use Primer::SpinnerComponent to let users know that content is being loaded.
|
5
|
+
class SpinnerComponent < Primer::Component
|
6
|
+
|
7
|
+
DEFAULT_SIZE = :medium
|
8
|
+
SIZE_MAPPINGS = {
|
9
|
+
:small => 16,
|
10
|
+
DEFAULT_SIZE => 32,
|
11
|
+
:large => 64,
|
12
|
+
}.freeze
|
13
|
+
SIZE_OPTIONS = SIZE_MAPPINGS.keys
|
14
|
+
|
15
|
+
#
|
16
|
+
# @example 48|Default
|
17
|
+
# <%= render(Primer::SpinnerComponent.new) %>
|
18
|
+
#
|
19
|
+
# @example 32|Small
|
20
|
+
# <%= render(Primer::SpinnerComponent.new(size: :small)) %>
|
21
|
+
#
|
22
|
+
# @example 80|Large
|
23
|
+
# <%= render(Primer::SpinnerComponent.new(size: :large)) %>
|
24
|
+
#
|
25
|
+
# @param size [Symbol] One of <%= Primer::SpinnerComponent::SIZE_OPTIONS.map { |k| "`:#{k}`" }.to_sentence(last_word_connector: ', or ') %>
|
26
|
+
def initialize(size: DEFAULT_SIZE, **kwargs)
|
27
|
+
@kwargs = kwargs
|
28
|
+
@kwargs[:tag] = :svg
|
29
|
+
@kwargs[:width] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
30
|
+
@kwargs[:height] = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)]
|
31
|
+
@kwargs[:viewBox] = "0 0 16 16"
|
32
|
+
@kwargs[:fill] = :none
|
33
|
+
# Setting `box-sizing: content-box` allows consumers to add padding
|
34
|
+
# to the spinner without shrinking the icon
|
35
|
+
@kwargs[:style] = "box-sizing: content-box; color: var(--color-icon-primary);"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -33,14 +33,17 @@ require_relative "button_component"
|
|
33
33
|
require_relative "counter_component"
|
34
34
|
require_relative "details_component"
|
35
35
|
require_relative "dropdown_menu_component"
|
36
|
+
require_relative "flash_component"
|
36
37
|
require_relative "flex_component"
|
37
38
|
require_relative "flex_item_component"
|
38
39
|
require_relative "heading_component"
|
39
40
|
require_relative "label_component"
|
40
41
|
require_relative "layout_component"
|
41
42
|
require_relative "link_component"
|
43
|
+
require_relative "octicon_component"
|
42
44
|
require_relative "popover_component"
|
43
45
|
require_relative "progress_bar_component"
|
46
|
+
require_relative "spinner_component"
|
44
47
|
require_relative "state_component"
|
45
48
|
require_relative "subhead_component"
|
46
49
|
require_relative "text_component"
|
data/lib/primer/classify.rb
CHANGED
@@ -78,11 +78,13 @@ module Primer
|
|
78
78
|
}
|
79
79
|
}.freeze
|
80
80
|
BORDER_KEYS = [:border, :border_color].freeze
|
81
|
+
BORDER_MARGIN_KEYS = [:border_top, :border_bottom, :border_left, :border_right].freeze
|
81
82
|
TYPOGRAPHY_KEYS = [:font_size].freeze
|
82
83
|
VALID_KEYS = (
|
83
84
|
CONCAT_KEYS +
|
84
85
|
BOOLEAN_MAPPINGS.keys +
|
85
86
|
BORDER_KEYS +
|
87
|
+
BORDER_MARGIN_KEYS +
|
86
88
|
TYPOGRAPHY_KEYS +
|
87
89
|
TEXT_KEYS +
|
88
90
|
[
|
@@ -131,7 +133,7 @@ module Primer
|
|
131
133
|
raise ArgumentError.new(
|
132
134
|
"Primer CSS class #{'name'.pluralize(invalid_class_names.length)} \
|
133
135
|
#{invalid_class_names.to_sentence} #{'is'.pluralize(invalid_class_names.length)} \
|
134
|
-
not allowed, use
|
136
|
+
not allowed, use style arguments instead (https://github.com/primer/view_components#built-in-styling-arguments). This warning will not be raised in production.",
|
135
137
|
)
|
136
138
|
end
|
137
139
|
end
|
@@ -196,6 +198,8 @@ module Primer
|
|
196
198
|
memo[:classes] << "wb-#{dasherized_val}"
|
197
199
|
elsif BORDER_KEYS.include?(key)
|
198
200
|
memo[:classes] << "border-#{dasherized_val}"
|
201
|
+
elsif BORDER_MARGIN_KEYS.include?(key)
|
202
|
+
memo[:classes] << "#{key.to_s.dasherize}-#{val}"
|
199
203
|
elsif key == DIRECTION_KEY
|
200
204
|
memo[:classes] << "flex#{breakpoint}-#{dasherized_val}"
|
201
205
|
elsif key == JUSTIFY_CONTENT_KEY
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: primer_view_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: 9.0.0
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 12.0.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -69,7 +69,21 @@ dependencies:
|
|
69
69
|
version: 9.0.0
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
72
|
+
version: 12.0.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: listen
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '3.0'
|
80
|
+
type: :development
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '3.0'
|
73
87
|
- !ruby/object:Gem::Dependency
|
74
88
|
name: minitest
|
75
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,7 +140,49 @@ dependencies:
|
|
126
140
|
- - "~>"
|
127
141
|
- !ruby/object:Gem::Version
|
128
142
|
version: 0.13.0
|
129
|
-
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: simplecov
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.18.0
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: 0.18.0
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: simplecov-console
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: 0.7.2
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - "~>"
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: 0.7.2
|
171
|
+
- !ruby/object:Gem::Dependency
|
172
|
+
name: yard
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - "~>"
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 0.9.25
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: 0.9.25
|
185
|
+
description:
|
130
186
|
email:
|
131
187
|
- opensource+primer_view_components@github.com
|
132
188
|
executables: []
|
@@ -152,6 +208,8 @@ files:
|
|
152
208
|
- app/components/primer/details_component.rb
|
153
209
|
- app/components/primer/dropdown_menu_component.html.erb
|
154
210
|
- app/components/primer/dropdown_menu_component.rb
|
211
|
+
- app/components/primer/flash_component.html.erb
|
212
|
+
- app/components/primer/flash_component.rb
|
155
213
|
- app/components/primer/flex_component.rb
|
156
214
|
- app/components/primer/flex_item_component.rb
|
157
215
|
- app/components/primer/heading_component.rb
|
@@ -159,11 +217,14 @@ files:
|
|
159
217
|
- app/components/primer/layout_component.html.erb
|
160
218
|
- app/components/primer/layout_component.rb
|
161
219
|
- app/components/primer/link_component.rb
|
220
|
+
- app/components/primer/octicon_component.rb
|
162
221
|
- app/components/primer/popover_component.html.erb
|
163
222
|
- app/components/primer/popover_component.rb
|
164
223
|
- app/components/primer/progress_bar_component.html.erb
|
165
224
|
- app/components/primer/progress_bar_component.rb
|
166
225
|
- app/components/primer/slot.rb
|
226
|
+
- app/components/primer/spinner_component.html.erb
|
227
|
+
- app/components/primer/spinner_component.rb
|
167
228
|
- app/components/primer/state_component.rb
|
168
229
|
- app/components/primer/subhead_component.html.erb
|
169
230
|
- app/components/primer/subhead_component.rb
|
@@ -184,7 +245,7 @@ licenses:
|
|
184
245
|
- MIT
|
185
246
|
metadata:
|
186
247
|
allowed_push_host: https://rubygems.org
|
187
|
-
post_install_message:
|
248
|
+
post_install_message:
|
188
249
|
rdoc_options: []
|
189
250
|
require_paths:
|
190
251
|
- lib
|
@@ -199,8 +260,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
260
|
- !ruby/object:Gem::Version
|
200
261
|
version: '0'
|
201
262
|
requirements: []
|
202
|
-
rubygems_version: 3.
|
203
|
-
signing_key:
|
263
|
+
rubygems_version: 3.0.3
|
264
|
+
signing_key:
|
204
265
|
specification_version: 4
|
205
266
|
summary: ViewComponents for the Primer Design System
|
206
267
|
test_files: []
|