primer_view_components 0.0.111 → 0.0.112
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 +30 -0
- data/app/assets/javascripts/primer_view_components.js +1 -1
- data/app/assets/javascripts/primer_view_components.js.map +1 -1
- data/app/assets/styles/primer_view_components.css +1 -1
- data/app/assets/styles/primer_view_components.css.map +1 -1
- data/app/components/primer/alpha/auto_complete.css +1 -0
- data/app/components/primer/alpha/auto_complete.css.json +1 -0
- data/app/components/primer/alpha/auto_complete.css.map +1 -0
- data/app/components/primer/alpha/auto_complete.pcss +118 -0
- data/app/components/primer/alpha/banner.css +1 -1
- data/app/components/primer/alpha/banner.css.map +1 -1
- data/app/components/primer/alpha/banner.pcss +2 -3
- data/app/components/primer/alpha/button_marketing.css +1 -0
- data/app/components/primer/alpha/button_marketing.css.json +1 -0
- data/app/components/primer/alpha/button_marketing.css.map +1 -0
- data/app/components/primer/alpha/button_marketing.pcss +175 -0
- data/app/components/primer/{dropdown → alpha/dropdown}/menu.d.ts +0 -0
- data/app/components/primer/{dropdown → alpha/dropdown}/menu.html.erb +0 -0
- data/app/components/primer/{dropdown → alpha/dropdown}/menu.js +0 -0
- data/app/components/primer/alpha/dropdown/menu.rb +105 -0
- data/app/components/primer/{dropdown → alpha/dropdown}/menu.ts +0 -0
- data/app/components/primer/alpha/dropdown.css +1 -0
- data/app/components/primer/alpha/dropdown.css.json +1 -0
- data/app/components/primer/{dropdown.css.map → alpha/dropdown.css.map} +1 -1
- data/app/components/primer/{dropdown.d.ts → alpha/dropdown.d.ts} +0 -0
- data/app/components/primer/{dropdown.html.erb → alpha/dropdown.html.erb} +0 -0
- data/app/components/primer/{dropdown.js → alpha/dropdown.js} +0 -0
- data/app/components/primer/{dropdown.pcss → alpha/dropdown.pcss} +1 -1
- data/app/components/primer/alpha/dropdown.rb +154 -0
- data/app/components/primer/{dropdown.ts → alpha/dropdown.ts} +0 -0
- data/app/components/primer/alpha/tab_nav.css +1 -0
- data/app/components/primer/alpha/tab_nav.css.json +1 -0
- data/app/components/primer/alpha/tab_nav.css.map +1 -0
- data/app/components/primer/alpha/tab_nav.pcss +100 -0
- data/app/components/primer/alpha/underline_nav.css +1 -0
- data/app/components/primer/alpha/underline_nav.css.json +1 -0
- data/app/components/primer/alpha/underline_nav.css.map +1 -0
- data/app/components/primer/alpha/underline_nav.pcss +133 -0
- data/app/components/primer/beta/border_box.css +1 -0
- data/app/components/primer/beta/border_box.css.json +1 -0
- data/app/components/primer/beta/border_box.css.map +1 -0
- data/app/components/primer/beta/border_box.pcss +284 -0
- data/app/components/primer/beta/link.css +1 -0
- data/app/components/primer/beta/link.css.json +1 -0
- data/app/components/primer/beta/link.css.map +1 -0
- data/app/components/primer/beta/link.pcss +60 -0
- data/app/components/primer/{popover_component.css → beta/popover.css} +0 -0
- data/app/components/primer/beta/popover.css.json +1 -0
- data/app/components/primer/beta/popover.css.map +1 -0
- data/app/components/primer/{popover_component.html.erb → beta/popover.html.erb} +0 -0
- data/app/components/primer/{popover_component.pcss → beta/popover.pcss} +0 -0
- data/app/components/primer/beta/popover.rb +127 -0
- data/app/components/primer/component.rb +2 -2
- data/app/components/primer/dropdown/menu.rb +5 -90
- data/app/components/primer/dropdown.rb +2 -145
- data/app/components/primer/menu_component.css +1 -0
- data/app/components/primer/menu_component.css.json +1 -0
- data/app/components/primer/menu_component.css.map +1 -0
- data/app/components/primer/menu_component.pcss +119 -0
- data/app/components/primer/popover_component.rb +3 -120
- data/app/components/primer/primer.d.ts +1 -1
- data/app/components/primer/primer.js +1 -1
- data/app/components/primer/primer.pcss +10 -3
- data/app/components/primer/primer.ts +1 -1
- data/lib/primer/deprecations.rb +4 -2
- data/lib/primer/view_components/linters/deprecated_components_counter.rb +15 -4
- data/lib/primer/view_components/linters/severity_schema.rb +14 -0
- data/lib/primer/view_components/version.rb +1 -1
- data/lib/tasks/docs.rake +3 -3
- data/previews/primer/alpha/button_marketing_preview.rb +36 -0
- data/previews/primer/alpha/dropdown_preview.rb +210 -0
- data/previews/primer/alpha/tab_nav_preview.rb +55 -0
- data/previews/primer/beta/border_box_preview.rb +65 -13
- data/previews/primer/beta/link_preview.rb +28 -0
- data/previews/primer/beta/popover_preview.rb +79 -0
- data/static/arguments.json +40 -40
- data/static/audited_at.json +4 -2
- data/static/constants.json +56 -50
- data/static/statuses.json +8 -6
- metadata +54 -23
- data/app/components/primer/dropdown.css +0 -1
- data/app/components/primer/dropdown.css.json +0 -1
- data/app/components/primer/image.rb +0 -7
- data/app/components/primer/popover_component.css.json +0 -1
- data/app/components/primer/popover_component.css.map +0 -1
- data/app/components/primer/progress_bar_component.rb +0 -7
- data/previews/primer/dropdown_preview.rb +0 -208
- data/previews/primer/popover_component_preview.rb +0 -34
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/* BorderBox */
|
|
2
|
+
|
|
3
|
+
/* TODO: Rename to BorderBox to match PVC */
|
|
4
|
+
.Box {
|
|
5
|
+
background-color: var(--color-canvas-default);
|
|
6
|
+
border-color: var(--color-border-default);
|
|
7
|
+
border-style: solid;
|
|
8
|
+
border-width: var(--primer-borderWidth-thin, 1px);
|
|
9
|
+
border-radius: var(--primer-borderRadius-medium, 6px);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* Box padding density options */
|
|
13
|
+
.Box--condensed {
|
|
14
|
+
line-height: 1.25;
|
|
15
|
+
|
|
16
|
+
& .Box-header {
|
|
17
|
+
padding: var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
& .Box-body {
|
|
21
|
+
padding: var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
& .Box-footer {
|
|
25
|
+
padding: var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
& .Box-btn-octicon {
|
|
29
|
+
&.btn-octicon {
|
|
30
|
+
padding: var(--primer-control-medium-paddingInline-condensed, 8px) var(--primer-control-medium-paddingInline-spacious, 16px);
|
|
31
|
+
margin: calc(var(--primer-controlStack-medium-gap-condensed, 8px) * -1) calc(var(--primer-controlStack-small-gap-spacious, 16px) * -1);
|
|
32
|
+
line-height: 1.25;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
& .Box-row {
|
|
37
|
+
padding: var(--primer-stack-padding-condensed, 8px) var(--primer-stack-padding-normal, 16px);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.Box--spacious {
|
|
42
|
+
& .Box-header {
|
|
43
|
+
padding: var(--primer-stack-padding-spacious, 24px);
|
|
44
|
+
line-height: 1.25;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
& .Box-title {
|
|
48
|
+
font-size: var(--primer-text-title-size-medium, 20px);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
& .Box-body {
|
|
52
|
+
padding: var(--primer-stack-padding-spacious, 24px);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
& .Box-footer {
|
|
56
|
+
padding: var(--primer-stack-padding-spacious, 24px);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
& .Box-btn-octicon {
|
|
60
|
+
&.btn-octicon {
|
|
61
|
+
padding: var(--primer-stack-padding-spacious, 24px);
|
|
62
|
+
margin: calc(var(--primer-stack-gap-spacious, 24px) * -1) calc(var(--primer-stack-gap-spacious, 24px) * -1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
& .Box-row {
|
|
67
|
+
padding: var(--primer-stack-padding-spacious, 24px);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.Box-header {
|
|
72
|
+
padding: var(--primer-stack-padding-normal, 16px);
|
|
73
|
+
margin: calc(var(--primer-borderWidth-thin, 1px) * -1) calc(var(--primer-borderWidth-thin, 1px) * -1) 0;
|
|
74
|
+
background-color: var(--color-canvas-subtle);
|
|
75
|
+
border-color: var(--color-border-default);
|
|
76
|
+
border-style: solid;
|
|
77
|
+
border-width: var(--primer-borderWidth-thin, 1px);
|
|
78
|
+
border-top-left-radius: var(--primer-borderRadius-medium, 6px);
|
|
79
|
+
border-top-right-radius: var(--primer-borderRadius-medium, 6px);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.Box-title {
|
|
83
|
+
font-size: var(--primer-text-body-size-medium, 14px);
|
|
84
|
+
font-weight: var(--base-text-weight-semibold, 600);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.Box-body {
|
|
88
|
+
padding: var(--primer-stack-padding-normal, 16px);
|
|
89
|
+
border-bottom: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);
|
|
90
|
+
|
|
91
|
+
/* Ensures bottom-border doesn't poke out when .Box-body used without box-footer */
|
|
92
|
+
&:last-of-type {
|
|
93
|
+
margin-bottom: calc(var(--primer-borderWidth-thin, 1px) * -1);
|
|
94
|
+
border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);
|
|
95
|
+
border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* Box rows */
|
|
100
|
+
.Box-row {
|
|
101
|
+
padding: var(--primer-stack-padding-normal, 16px);
|
|
102
|
+
margin-top: calc(var(--primer-borderWidth-thin, 1px) * -1);
|
|
103
|
+
list-style-type: none; /* To account for applying Box component to a list */
|
|
104
|
+
border-top-color: var(--color-border-muted);
|
|
105
|
+
border-top-style: solid;
|
|
106
|
+
border-top-width: var(--primer-borderWidth-thin, 1px);
|
|
107
|
+
|
|
108
|
+
&:first-of-type {
|
|
109
|
+
border-top-left-radius: var(--primer-borderRadius-medium, 6px);
|
|
110
|
+
border-top-right-radius: var(--primer-borderRadius-medium, 6px);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
&:last-of-type {
|
|
114
|
+
border-bottom-right-radius: var(--primer-borderRadius-medium, 6px);
|
|
115
|
+
border-bottom-left-radius: var(--primer-borderRadius-medium, 6px);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Adds a blue vertical line to the left of the row
|
|
119
|
+
** For indicating a row item is unread */
|
|
120
|
+
&.Box-row--unread,
|
|
121
|
+
/* .unread to be deprecated with .Box-row-unread */
|
|
122
|
+
&.unread {
|
|
123
|
+
box-shadow: inset 2px 0 0 var(--color-accent-emphasis);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&.navigation-focus {
|
|
127
|
+
/* Focus styles for when drag icon */
|
|
128
|
+
& .Box-row--drag-button {
|
|
129
|
+
color: var(--color-accent-fg);
|
|
130
|
+
cursor: grab;
|
|
131
|
+
opacity: 100;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Grabbing while row is dragged */
|
|
135
|
+
&.is-dragging .Box-row--drag-button {
|
|
136
|
+
cursor: grabbing;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Row dragging styles */
|
|
140
|
+
&.sortable-chosen {
|
|
141
|
+
background-color: var(--color-canvas-subtle);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Makes dragging row background gray */
|
|
145
|
+
&.sortable-ghost {
|
|
146
|
+
background-color: var(--color-canvas-subtle);
|
|
147
|
+
|
|
148
|
+
/* Hides contents of row while dragging so row looks solid gray */
|
|
149
|
+
& .Box-row--drag-hide {
|
|
150
|
+
opacity: 0;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.Box-row--focus-gray {
|
|
157
|
+
&.navigation-focus {
|
|
158
|
+
background-color: var(--color-canvas-subtle);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.Box-row--focus-blue {
|
|
163
|
+
&.navigation-focus {
|
|
164
|
+
background-color: var(--color-accent-subtle);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.Box-row--hover-gray {
|
|
169
|
+
&:hover {
|
|
170
|
+
background-color: var(--color-canvas-subtle);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.Box-row--hover-blue {
|
|
175
|
+
&:hover {
|
|
176
|
+
background-color: var(--color-accent-subtle);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Optional link style
|
|
181
|
+
** Makes links on mobile blue since they don't have hover state,
|
|
182
|
+
** and links are dark-gray with blue hover on desktop. */
|
|
183
|
+
.Box-row-link {
|
|
184
|
+
@media (min-width: 768px) {
|
|
185
|
+
color: var(--color-fg-default);
|
|
186
|
+
text-decoration: none;
|
|
187
|
+
|
|
188
|
+
&:hover {
|
|
189
|
+
color: var(--color-accent-fg);
|
|
190
|
+
text-decoration: none;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Optional drag icon styles for reordering items
|
|
196
|
+
** Focus styles included in .Box-row above */
|
|
197
|
+
.Box-row--drag-button {
|
|
198
|
+
opacity: 0;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.Box-footer {
|
|
202
|
+
padding: var(--primer-stack-padding-normal, 16px);
|
|
203
|
+
margin-top: calc(var(--primer-borderWidth-thin, 1px) * -1); /* prevents double border when used with .Box-body */
|
|
204
|
+
border-top-color: var(--color-border-default);
|
|
205
|
+
border-top-style: solid;
|
|
206
|
+
border-top-width: var(--primer-borderWidth-thin, 1px);
|
|
207
|
+
border-radius: 0 0 var(--primer-borderRadius-medium, 6px) var(--primer-borderRadius-medium, 6px);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* Option for a box with scrolling content */
|
|
211
|
+
.Box--scrollable {
|
|
212
|
+
max-height: 324px;
|
|
213
|
+
overflow: scroll;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* Box themes */
|
|
217
|
+
|
|
218
|
+
.Box--blue {
|
|
219
|
+
border-color: var(--color-accent-muted);
|
|
220
|
+
|
|
221
|
+
& .Box-header {
|
|
222
|
+
background-color: var(--color-accent-subtle);
|
|
223
|
+
border-color: var(--color-accent-muted);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
& .Box-body {
|
|
227
|
+
border-color: var(--color-accent-muted);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
& .Box-row {
|
|
231
|
+
border-color: var(--color-accent-muted);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
& .Box-footer {
|
|
235
|
+
border-color: var(--color-accent-muted);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/* Applies and red border to the outside of the box,
|
|
240
|
+
** but not to the border separating rows. */
|
|
241
|
+
.Box--danger {
|
|
242
|
+
border-color: var(--color-danger-emphasis);
|
|
243
|
+
|
|
244
|
+
& .Box-row {
|
|
245
|
+
&:first-of-type {
|
|
246
|
+
border-color: var(--color-danger-emphasis);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
& .Box-body {
|
|
251
|
+
&:last-of-type {
|
|
252
|
+
border-color: var(--color-danger-emphasis);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.Box-header--blue {
|
|
258
|
+
background-color: var(--color-accent-subtle);
|
|
259
|
+
border-color: var(--color-accent-muted);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* Box row highlight themes */
|
|
263
|
+
|
|
264
|
+
.Box-row--yellow {
|
|
265
|
+
background-color: var(--color-attention-subtle);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.Box-row--blue {
|
|
269
|
+
background-color: var(--color-accent-subtle);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.Box-row--gray {
|
|
273
|
+
background-color: var(--color-canvas-subtle);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Box with btn-octicon */
|
|
277
|
+
.Box-btn-octicon {
|
|
278
|
+
/* Increase specificity when btn-octicon is used because comes after .Box in the cascade */
|
|
279
|
+
&.btn-octicon {
|
|
280
|
+
padding: var(--primer-control-medium-paddingInline-spacious, 16px) var(--primer-control-medium-paddingInline-spacious, 16px);
|
|
281
|
+
margin: calc(var(--primer-controlStack-small-gap-spacious, 16px) * -1) calc(var(--primer-controlStack-small-gap-spacious, 16px) * -1);
|
|
282
|
+
line-height: 1.5; /* override btn-octicon line-height */
|
|
283
|
+
}
|
|
284
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.Link{color:var(--color-accent-fg)}.Link:hover{cursor:pointer;text-decoration:underline}.Link:focus,.Link:focus-visible{outline-offset:0}.Link--primary{color:var(--color-fg-default)!important}.Link--primary:hover{color:var(--color-accent-fg)!important}.Link--secondary{color:var(--color-fg-muted)!important}.Link--secondary:hover{color:var(--color-accent-fg)!important}.Link--muted{color:var(--color-fg-muted)!important}.Link--muted:hover{text-decoration:none}.Link--muted:hover,.Link--onHover:hover{color:var(--color-accent-fg)!important}.Link--onHover:hover{cursor:pointer;text-decoration:underline}.Link--muted:hover [class*=color-fg],.Link--primary:hover [class*=color-fg],.Link--secondary:hover [class*=color-fg]{color:inherit!important}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"beta/link","selectors":[".Link",".Link:hover",".Link:focus",".Link:focus-visible",".Link--primary",".Link--primary:hover",".Link--secondary",".Link--secondary:hover",".Link--muted",".Link--muted:hover",".Link--onHover:hover",".Link--muted:hover [class*=color-fg]",".Link--primary:hover [class*=color-fg]",".Link--secondary:hover [class*=color-fg]"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["link.pcss"],"names":[],"mappings":"AAEA,MACE,4BAWF,CATE,YAEE,cAAe,CADf,yBAEF,CAEA,gCAEE,gBACF,CAGF,eACE,uCAKF,CAHE,qBACE,sCACF,CAGF,iBACE,qCAKF,CAHE,uBACE,sCACF,CAGF,aACE,qCAMF,CAJE,mBAEE,oBACF,CAMA,wCARE,sCAYF,CAJA,qBAGE,cAAe,CADf,yBAEF,CAQA,qHACE,uBACF","file":"link.css","sourcesContent":["/* Links */\n\n.Link {\n color: var(--color-accent-fg);\n\n &:hover {\n text-decoration: underline;\n cursor: pointer;\n }\n\n &:focus,\n &:focus-visible {\n outline-offset: 0;\n }\n}\n\n.Link--primary {\n color: var(--color-fg-default) !important;\n\n &:hover {\n color: var(--color-accent-fg) !important;\n }\n}\n\n.Link--secondary {\n color: var(--color-fg-muted) !important;\n\n &:hover {\n color: var(--color-accent-fg) !important;\n }\n}\n\n.Link--muted {\n color: var(--color-fg-muted) !important;\n\n &:hover {\n color: var(--color-accent-fg) !important;\n text-decoration: none;\n }\n}\n\n/* Set the link color only on hover\n Useful when you want only part of a link to turn blue on hover */\n.Link--onHover {\n &:hover {\n color: var(--color-accent-fg) !important;\n text-decoration: underline;\n cursor: pointer;\n }\n}\n\n/* When using a color utility class inside of a link class\n color should change with link on hover. */\n.Link--secondary,\n.Link--primary,\n.Link--muted {\n &:hover [class*='color-fg'] {\n color: inherit !important;\n }\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* Links */
|
|
2
|
+
|
|
3
|
+
.Link {
|
|
4
|
+
color: var(--color-accent-fg);
|
|
5
|
+
|
|
6
|
+
&:hover {
|
|
7
|
+
text-decoration: underline;
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&:focus,
|
|
12
|
+
&:focus-visible {
|
|
13
|
+
outline-offset: 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.Link--primary {
|
|
18
|
+
color: var(--color-fg-default) !important;
|
|
19
|
+
|
|
20
|
+
&:hover {
|
|
21
|
+
color: var(--color-accent-fg) !important;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.Link--secondary {
|
|
26
|
+
color: var(--color-fg-muted) !important;
|
|
27
|
+
|
|
28
|
+
&:hover {
|
|
29
|
+
color: var(--color-accent-fg) !important;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.Link--muted {
|
|
34
|
+
color: var(--color-fg-muted) !important;
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
color: var(--color-accent-fg) !important;
|
|
38
|
+
text-decoration: none;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Set the link color only on hover
|
|
43
|
+
Useful when you want only part of a link to turn blue on hover */
|
|
44
|
+
.Link--onHover {
|
|
45
|
+
&:hover {
|
|
46
|
+
color: var(--color-accent-fg) !important;
|
|
47
|
+
text-decoration: underline;
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* When using a color utility class inside of a link class
|
|
53
|
+
color should change with link on hover. */
|
|
54
|
+
.Link--secondary,
|
|
55
|
+
.Link--primary,
|
|
56
|
+
.Link--muted {
|
|
57
|
+
&:hover [class*='color-fg'] {
|
|
58
|
+
color: inherit !important;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"beta/popover","selectors":[".Popover",".Popover-message",".Popover-message:after",".Popover-message:before",".Popover-message--no-caret:after",".Popover-message--no-caret:before",".Popover-message--bottom-left:after",".Popover-message--bottom-left:before",".Popover-message--bottom-right:after",".Popover-message--bottom-right:before",".Popover-message--bottom:after",".Popover-message--bottom:before",".Popover-message--bottom-right",".Popover-message--top-right",".Popover-message--top-right:after",".Popover-message--top-right:before",".Popover-message--bottom-left",".Popover-message--top-left",".Popover-message--top-left:after",".Popover-message--top-left:before",".Popover-message--left-bottom:after",".Popover-message--left-bottom:before",".Popover-message--left-top:after",".Popover-message--left-top:before",".Popover-message--left:after",".Popover-message--left:before",".Popover-message--right-bottom:after",".Popover-message--right-bottom:before",".Popover-message--right-top:after",".Popover-message--right-top:before",".Popover-message--right:after",".Popover-message--right:before",".Popover-message--large",".Popover-message>.btn-octicon"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["popover.pcss"],"names":[],"mappings":"AAEA,SACE,iBAAkB,CAClB,WACF,CAEA,iBAKE,4CAA6C,CAC7C,2EAA6E,CAC7E,mDAAqD,CAHrD,gBAAiB,CADjB,iBAAkB,CAFlB,iBAAkB,CAClB,WA6BF,CArBE,+CAKE,UAAW,CADX,oBAAqB,CADrB,QAAS,CADT,iBAIF,CAEA,wBAIE,sBAAgD,CAAhD,mDAAgD,CAFhD,gBAAiB,CADjB,SAIF,CAEA,uBAIE,sBAAgD,CAAhD,mDAAgD,CAFhD,gBAAiB,CADjB,SAIF,CAKA,mEAEE,YACF,CAOA,mNAGE,yBAAgC,CADhC,QAEF,CAEA,2GAEE,4CAA6C,CAD7C,YAEF,CAEA,wGAEE,4CAA6C,CAD7C,YAEF,CAIF,2DAGE,cAAe,CADf,UAgBF,CAbE,gJAEE,SAAU,CACV,aACF,CAEA,yEACE,UACF,CAEA,uEACE,UACF,CAIF,yDAEE,SAAU,CACV,aAWF,CATE,4IAEE,SAAU,CACV,aACF,CAEA,qEACE,SACF,CAUA,oZAKE,yBAAgC,CAFhC,SAAU,CACV,aAAc,CAFd,OAIF,CAEA,6MACE,eACF,CAEA,uMACE,eACF,CAOA,wGAEE,6CAA8C,CAD9C,WAEF,CAEA,qGAEE,6CAA8C,CAD9C,WAEF,CAOA,qGAEE,8CAA+C,CAD/C,UAEF,CAEA,kGAEE,8CAA+C,CAD/C,UAEF,CAMA,wIAEE,QACF,CAMA,oJAEE,QACF,CAEA,2EACE,WACF,CAEA,yEACE,WACF,CAGF,yBACE,wBACE,eACF,CACF,CAKA,4BACE,SAIE,kBAAoB,CACpB,gBAAkB,CAJlB,cAAe,CAEf,iBAAmB,CADnB,kBAIF,CAEA,iBAGE,WAAY,CACZ,SAAU,CAEV,4CAA8C,CAJ9C,UAAW,CADX,QAAS,CAIT,oBAEF,CAGA,8BACE,wEACF,CAGA,+CAEE,YACF,CACF","file":"popover.css","sourcesContent":["/* Popover */\n\n.Popover {\n position: absolute;\n z-index: 100;\n}\n\n.Popover-message {\n position: relative;\n width: 232px;\n margin-right: auto;\n margin-left: auto;\n background-color: var(--color-canvas-overlay);\n border: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);\n border-radius: var(--primer-borderRadius-medium, 6px);\n\n /* Carets */\n &::before,\n &::after {\n position: absolute;\n left: 50%;\n display: inline-block;\n content: '';\n }\n\n &::before {\n top: -16px;\n margin-left: -9px;\n border: 8px solid transparent;\n border-bottom-color: var(--color-border-default);\n }\n\n &::after {\n top: -14px;\n margin-left: -8px;\n border: 7px solid transparent;\n border-bottom-color: var(--color-canvas-overlay);\n }\n}\n\n/* No caret */\n.Popover-message--no-caret {\n &::before,\n &::after {\n display: none;\n }\n}\n\n/* Bottom-oriented carets */\n.Popover-message--bottom,\n.Popover-message--bottom-right,\n.Popover-message--bottom-left {\n &::before,\n &::after {\n top: auto;\n border-bottom-color: transparent;\n }\n\n &::before {\n bottom: -16px;\n border-top-color: var(--color-border-default);\n }\n\n &::after {\n bottom: -14px;\n border-top-color: var(--color-canvas-overlay);\n }\n}\n\n/* Top & Bottom: Right-oriented carets */\n.Popover-message--top-right,\n.Popover-message--bottom-right {\n right: -9px;\n margin-right: 0;\n\n &::before,\n &::after {\n left: auto;\n margin-left: 0;\n }\n\n &::before {\n right: 20px;\n }\n\n &::after {\n right: 21px;\n }\n}\n\n/* Top & Bottom: Left-oriented carets */\n.Popover-message--top-left,\n.Popover-message--bottom-left {\n left: -9px;\n margin-left: 0;\n\n &::before,\n &::after {\n left: 24px;\n margin-left: 0;\n }\n\n &::after {\n left: 25px;\n }\n}\n\n/* Right- & Left-oriented carets */\n.Popover-message--right,\n.Popover-message--right-top,\n.Popover-message--right-bottom,\n.Popover-message--left,\n.Popover-message--left-top,\n.Popover-message--left-bottom {\n &::before,\n &::after {\n top: 50%;\n left: auto;\n margin-left: 0;\n border-bottom-color: transparent;\n }\n\n &::before {\n margin-top: -9px;\n }\n\n &::after {\n margin-top: -8px;\n }\n}\n\n/* Right-oriented carets */\n.Popover-message--right,\n.Popover-message--right-top,\n.Popover-message--right-bottom {\n &::before {\n right: -16px;\n border-left-color: var(--color-border-default);\n }\n\n &::after {\n right: -14px;\n border-left-color: var(--color-canvas-overlay);\n }\n}\n\n/* Left-oriented carets */\n.Popover-message--left,\n.Popover-message--left-top,\n.Popover-message--left-bottom {\n &::before {\n left: -16px;\n border-right-color: var(--color-border-default);\n }\n\n &::after {\n left: -14px;\n border-right-color: var(--color-canvas-overlay);\n }\n}\n\n/* Right & Left: Top-oriented carets */\n.Popover-message--right-top,\n.Popover-message--left-top {\n &::before,\n &::after {\n top: 24px;\n }\n}\n\n/* Right & Left: Bottom-oriented carets */\n.Popover-message--right-bottom,\n.Popover-message--left-bottom {\n &::before,\n &::after {\n top: auto;\n }\n\n &::before {\n bottom: 16px;\n }\n\n &::after {\n bottom: 17px;\n }\n}\n\n@media (min-width: 544px) {\n .Popover-message--large {\n min-width: 320px;\n }\n}\n\n/* Responsive Popover\n** For < md it will show full-width anchored to the bottom */\n\n@media (max-width: 767.98px) {\n .Popover {\n position: fixed;\n top: auto !important;\n right: 0 !important;\n bottom: 0 !important;\n left: 0 !important;\n }\n\n .Popover-message {\n top: auto;\n right: auto;\n bottom: auto;\n left: auto;\n width: auto !important;\n margin: var(--primer-stack-gap-condensed, 8px);\n }\n\n /* Increase tap area for touch input */\n .Popover-message > .btn-octicon {\n padding: var(--primer-control-medium-paddingInline-normal, 12px) !important;\n }\n\n /* Remove caret */\n .Popover-message::after,\n .Popover-message::before {\n display: none;\n }\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Primer
|
|
4
|
+
module Beta
|
|
5
|
+
# Use `Popover` to bring attention to specific user interface elements, typically to suggest an action or to guide users through a new experience.
|
|
6
|
+
#
|
|
7
|
+
# 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.
|
|
8
|
+
class Popover < Primer::Component
|
|
9
|
+
status :beta
|
|
10
|
+
|
|
11
|
+
CARET_DEFAULT = :top
|
|
12
|
+
CARET_MAPPINGS = {
|
|
13
|
+
CARET_DEFAULT => "",
|
|
14
|
+
:bottom => "Popover-message--bottom",
|
|
15
|
+
:bottom_right => "Popover-message--bottom-right",
|
|
16
|
+
:bottom_left => "Popover-message--bottom-left",
|
|
17
|
+
:left => "Popover-message--left",
|
|
18
|
+
:left_bottom => "Popover-message--left-bottom",
|
|
19
|
+
:left_top => "Popover-message--left-top",
|
|
20
|
+
:right => "Popover-message--right",
|
|
21
|
+
:right_bottom => "Popover-message--right-bottom",
|
|
22
|
+
:right_top => "Popover-message--right-top",
|
|
23
|
+
:top_left => "Popover-message--top-left",
|
|
24
|
+
:top_right => "Popover-message--top-right"
|
|
25
|
+
}.freeze
|
|
26
|
+
|
|
27
|
+
DEFAULT_HEADING_TAG = :h4
|
|
28
|
+
|
|
29
|
+
# The heading
|
|
30
|
+
#
|
|
31
|
+
# @param tag [Symbol] (Primer::Beta::Popover::DEFAULT_HEADING_TAG) <%= one_of(Primer::Beta::Heading::TAG_OPTIONS) %>
|
|
32
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
33
|
+
renders_one :heading, lambda { |tag: DEFAULT_HEADING_TAG, **system_arguments|
|
|
34
|
+
system_arguments[:tag] = tag
|
|
35
|
+
system_arguments[:mb] ||= 2
|
|
36
|
+
|
|
37
|
+
Primer::Beta::Heading.new(**system_arguments)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# The body
|
|
41
|
+
#
|
|
42
|
+
# @param caret [Symbol] <%= one_of(Primer::Beta::Popover::CARET_MAPPINGS.keys) %>
|
|
43
|
+
# @param large [Boolean] Whether to use the large version of the component.
|
|
44
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
45
|
+
renders_one :body, lambda { |caret: CARET_DEFAULT, large: false, **system_arguments|
|
|
46
|
+
@body_arguments = system_arguments
|
|
47
|
+
@body_arguments[:classes] = class_names(
|
|
48
|
+
@body_arguments[:classes],
|
|
49
|
+
"Popover-message Box",
|
|
50
|
+
CARET_MAPPINGS[fetch_or_fallback(CARET_MAPPINGS.keys, caret, CARET_DEFAULT)],
|
|
51
|
+
"Popover-message--large" => large
|
|
52
|
+
)
|
|
53
|
+
@body_arguments[:p] ||= 4
|
|
54
|
+
@body_arguments[:mt] ||= 2
|
|
55
|
+
@body_arguments[:mx] ||= :auto
|
|
56
|
+
@body_arguments[:text_align] ||= :left
|
|
57
|
+
@body_arguments[:box_shadow] ||= :large
|
|
58
|
+
|
|
59
|
+
Primer::Content.new
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# @example Default
|
|
63
|
+
# <%= render Primer::Beta::Popover.new do |component| %>
|
|
64
|
+
# <% component.with_heading do %>
|
|
65
|
+
# Activity feed
|
|
66
|
+
# <% end %>
|
|
67
|
+
# <% component.with_body do %>
|
|
68
|
+
# This is the Popover body.
|
|
69
|
+
# <% end %>
|
|
70
|
+
# <% end %>
|
|
71
|
+
#
|
|
72
|
+
# @example Large
|
|
73
|
+
# <%= render Primer::Beta::Popover.new do |component| %>
|
|
74
|
+
# <% component.with_heading do %>
|
|
75
|
+
# Activity feed
|
|
76
|
+
# <% end %>
|
|
77
|
+
# <% component.with_body(large: true) do %>
|
|
78
|
+
# This is the large Popover body.
|
|
79
|
+
# <% end %>
|
|
80
|
+
# <% end %>
|
|
81
|
+
#
|
|
82
|
+
# @example Caret position
|
|
83
|
+
# <%= render Primer::Beta::Popover.new do |component| %>
|
|
84
|
+
# <% component.with_heading do %>
|
|
85
|
+
# Activity feed
|
|
86
|
+
# <% end %>
|
|
87
|
+
# <% component.with_body(caret: :left) do %>
|
|
88
|
+
# This is the Popover body.
|
|
89
|
+
# <% end %>
|
|
90
|
+
# <% end %>
|
|
91
|
+
#
|
|
92
|
+
# @example With multiple elements in the body
|
|
93
|
+
# <%= render Primer::Beta::Popover.new do |component| %>
|
|
94
|
+
# <% component.with_heading do %>
|
|
95
|
+
# Activity feed
|
|
96
|
+
# <% end %>
|
|
97
|
+
# <% component.with_body(caret: :left) do %>
|
|
98
|
+
# <p>This is the Popover body.</p>
|
|
99
|
+
# <%= render Primer::ButtonComponent.new(type: :submit) do %>
|
|
100
|
+
# Got it!
|
|
101
|
+
# <% end %>
|
|
102
|
+
# <% end %>
|
|
103
|
+
# <% end %>
|
|
104
|
+
#
|
|
105
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
106
|
+
def initialize(**system_arguments)
|
|
107
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
|
108
|
+
@system_arguments[:tag] = :div
|
|
109
|
+
@system_arguments[:classes] = class_names(
|
|
110
|
+
system_arguments[:classes],
|
|
111
|
+
"Popover"
|
|
112
|
+
)
|
|
113
|
+
@system_arguments[:position] ||= :relative
|
|
114
|
+
@system_arguments[:right] = false unless @system_arguments.delete(:right)
|
|
115
|
+
@system_arguments[:left] = false unless @system_arguments.delete(:left)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def render?
|
|
119
|
+
body.present?
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def body_component
|
|
123
|
+
Primer::Box.new(**@body_arguments)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -121,11 +121,11 @@ module Primer
|
|
|
121
121
|
end
|
|
122
122
|
|
|
123
123
|
def should_raise_error?
|
|
124
|
-
raise_on_invalid_options? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
|
124
|
+
!Rails.env.production? && raise_on_invalid_options? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def should_raise_aria_error?
|
|
128
|
-
raise_on_invalid_aria? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
|
128
|
+
!Rails.env.production? && raise_on_invalid_aria? && !ENV["PRIMER_WARNINGS_DISABLED"]
|
|
129
129
|
end
|
|
130
130
|
end
|
|
131
131
|
end
|
|
@@ -2,97 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Primer
|
|
4
4
|
class Dropdown
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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
|