primer_view_components 0.0.111 → 0.0.112

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -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 +1 -1
  6. data/app/assets/styles/primer_view_components.css.map +1 -1
  7. data/app/components/primer/alpha/auto_complete.css +1 -0
  8. data/app/components/primer/alpha/auto_complete.css.json +1 -0
  9. data/app/components/primer/alpha/auto_complete.css.map +1 -0
  10. data/app/components/primer/alpha/auto_complete.pcss +118 -0
  11. data/app/components/primer/alpha/banner.css +1 -1
  12. data/app/components/primer/alpha/banner.css.map +1 -1
  13. data/app/components/primer/alpha/banner.pcss +2 -3
  14. data/app/components/primer/alpha/button_marketing.css +1 -0
  15. data/app/components/primer/alpha/button_marketing.css.json +1 -0
  16. data/app/components/primer/alpha/button_marketing.css.map +1 -0
  17. data/app/components/primer/alpha/button_marketing.pcss +175 -0
  18. data/app/components/primer/{dropdown → alpha/dropdown}/menu.d.ts +0 -0
  19. data/app/components/primer/{dropdown → alpha/dropdown}/menu.html.erb +0 -0
  20. data/app/components/primer/{dropdown → alpha/dropdown}/menu.js +0 -0
  21. data/app/components/primer/alpha/dropdown/menu.rb +105 -0
  22. data/app/components/primer/{dropdown → alpha/dropdown}/menu.ts +0 -0
  23. data/app/components/primer/alpha/dropdown.css +1 -0
  24. data/app/components/primer/alpha/dropdown.css.json +1 -0
  25. data/app/components/primer/{dropdown.css.map → alpha/dropdown.css.map} +1 -1
  26. data/app/components/primer/{dropdown.d.ts → alpha/dropdown.d.ts} +0 -0
  27. data/app/components/primer/{dropdown.html.erb → alpha/dropdown.html.erb} +0 -0
  28. data/app/components/primer/{dropdown.js → alpha/dropdown.js} +0 -0
  29. data/app/components/primer/{dropdown.pcss → alpha/dropdown.pcss} +1 -1
  30. data/app/components/primer/alpha/dropdown.rb +154 -0
  31. data/app/components/primer/{dropdown.ts → alpha/dropdown.ts} +0 -0
  32. data/app/components/primer/alpha/tab_nav.css +1 -0
  33. data/app/components/primer/alpha/tab_nav.css.json +1 -0
  34. data/app/components/primer/alpha/tab_nav.css.map +1 -0
  35. data/app/components/primer/alpha/tab_nav.pcss +100 -0
  36. data/app/components/primer/alpha/underline_nav.css +1 -0
  37. data/app/components/primer/alpha/underline_nav.css.json +1 -0
  38. data/app/components/primer/alpha/underline_nav.css.map +1 -0
  39. data/app/components/primer/alpha/underline_nav.pcss +133 -0
  40. data/app/components/primer/beta/border_box.css +1 -0
  41. data/app/components/primer/beta/border_box.css.json +1 -0
  42. data/app/components/primer/beta/border_box.css.map +1 -0
  43. data/app/components/primer/beta/border_box.pcss +284 -0
  44. data/app/components/primer/beta/link.css +1 -0
  45. data/app/components/primer/beta/link.css.json +1 -0
  46. data/app/components/primer/beta/link.css.map +1 -0
  47. data/app/components/primer/beta/link.pcss +60 -0
  48. data/app/components/primer/{popover_component.css → beta/popover.css} +0 -0
  49. data/app/components/primer/beta/popover.css.json +1 -0
  50. data/app/components/primer/beta/popover.css.map +1 -0
  51. data/app/components/primer/{popover_component.html.erb → beta/popover.html.erb} +0 -0
  52. data/app/components/primer/{popover_component.pcss → beta/popover.pcss} +0 -0
  53. data/app/components/primer/beta/popover.rb +127 -0
  54. data/app/components/primer/component.rb +2 -2
  55. data/app/components/primer/dropdown/menu.rb +5 -90
  56. data/app/components/primer/dropdown.rb +2 -145
  57. data/app/components/primer/menu_component.css +1 -0
  58. data/app/components/primer/menu_component.css.json +1 -0
  59. data/app/components/primer/menu_component.css.map +1 -0
  60. data/app/components/primer/menu_component.pcss +119 -0
  61. data/app/components/primer/popover_component.rb +3 -120
  62. data/app/components/primer/primer.d.ts +1 -1
  63. data/app/components/primer/primer.js +1 -1
  64. data/app/components/primer/primer.pcss +10 -3
  65. data/app/components/primer/primer.ts +1 -1
  66. data/lib/primer/deprecations.rb +4 -2
  67. data/lib/primer/view_components/linters/deprecated_components_counter.rb +15 -4
  68. data/lib/primer/view_components/linters/severity_schema.rb +14 -0
  69. data/lib/primer/view_components/version.rb +1 -1
  70. data/lib/tasks/docs.rake +3 -3
  71. data/previews/primer/alpha/button_marketing_preview.rb +36 -0
  72. data/previews/primer/alpha/dropdown_preview.rb +210 -0
  73. data/previews/primer/alpha/tab_nav_preview.rb +55 -0
  74. data/previews/primer/beta/border_box_preview.rb +65 -13
  75. data/previews/primer/beta/link_preview.rb +28 -0
  76. data/previews/primer/beta/popover_preview.rb +79 -0
  77. data/static/arguments.json +40 -40
  78. data/static/audited_at.json +4 -2
  79. data/static/constants.json +56 -50
  80. data/static/statuses.json +8 -6
  81. metadata +54 -23
  82. data/app/components/primer/dropdown.css +0 -1
  83. data/app/components/primer/dropdown.css.json +0 -1
  84. data/app/components/primer/image.rb +0 -7
  85. data/app/components/primer/popover_component.css.json +0 -1
  86. data/app/components/primer/popover_component.css.map +0 -1
  87. data/app/components/primer/progress_bar_component.rb +0 -7
  88. data/previews/primer/dropdown_preview.rb +0 -208
  89. 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
+ }
@@ -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"]}
@@ -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
- # This component is part of `Dropdown` and should not be
6
- # used as a standalone component.
7
- class Menu < Primer::Component
8
- AS_DEFAULT = :default
9
- AS_OPTIONS = [AS_DEFAULT, :list].freeze
5
+ # :nodoc:
6
+ class Menu < Primer::Alpha::Dropdown::Menu
7
+ status :deprecated
10
8
 
11
- SCHEME_DEFAULT = :default
12
- SCHEME_MAPPINGS = {
13
- SCHEME_DEFAULT => "",
14
- :dark => "dropdown-menu-dark"
15
- }.freeze
16
-
17
- DIRECTION_DEFAULT = :se
18
- DIRECTION_OPTIONS = [DIRECTION_DEFAULT, :sw, :w, :e, :ne, :s].freeze
19
-
20
- # @param tag [Symbol] <%= one_of(Primer::Dropdown::Menu::Item::TAG_OPTIONS) %>.
21
- # @param divider [Boolean] Whether the item is a divider without any function.
22
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
23
- renders_many :items, lambda { |divider: false, **system_arguments|
24
- Primer::Dropdown::Menu::Item.new(as: @as, divider: divider, **system_arguments)
25
- }
26
-
27
- # @param as [Symbol] When `as` is `:list`, wraps the menu in a `<ul>` with a `<li>` for each item.
28
- # @param direction [Symbol] <%= one_of(Primer::Dropdown::Menu::DIRECTION_OPTIONS) %>.
29
- # @param header [String] Header to be displayed above the menu.
30
- # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
31
- def initialize(as: AS_DEFAULT, direction: DIRECTION_DEFAULT, scheme: SCHEME_DEFAULT, header: nil, **system_arguments)
32
- @header = header
33
- @direction = direction
34
- @as = fetch_or_fallback(AS_OPTIONS, as, AS_DEFAULT)
35
-
36
- @system_arguments = deny_tag_argument(**system_arguments)
37
- @system_arguments[:tag] = "details-menu"
38
- @system_arguments[:role] = "menu"
39
-
40
- @system_arguments[:classes] = class_names(
41
- @system_arguments[:classes],
42
- "dropdown-menu",
43
- "dropdown-menu-#{fetch_or_fallback(DIRECTION_OPTIONS, direction, DIRECTION_DEFAULT)}",
44
- SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_MAPPINGS.keys, scheme, SCHEME_DEFAULT)]
45
- )
46
- end
47
-
48
- private
49
-
50
- def list?
51
- @as == :list
52
- end
53
-
54
- # Items to be rendered in the `Dropdown` menu.
55
- class Item < Primer::Component
56
- TAG_DEFAULT = :a
57
- BUTTON_TAGS = [:button, :summary].freeze
58
- TAG_OPTIONS = [TAG_DEFAULT, *BUTTON_TAGS].freeze
59
-
60
- def initialize(as:, tag: TAG_DEFAULT, divider: false, **system_arguments)
61
- @divider = divider
62
- @as = as
63
-
64
- @system_arguments = system_arguments
65
- @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, TAG_DEFAULT)
66
- @system_arguments[:tag] = :li if list? && divider?
67
- @system_arguments[:role] ||= :menuitem
68
- @system_arguments[:role] = :separator if divider
69
- @system_arguments[:classes] = class_names(
70
- @system_arguments[:classes],
71
- "dropdown-item" => !divider,
72
- "dropdown-divider" => divider
73
- )
74
- end
75
-
76
- def call
77
- component = if BUTTON_TAGS.include?(@system_arguments[:tag])
78
- Primer::ButtonComponent.new(scheme: :link, **@system_arguments)
79
- else
80
- Primer::BaseComponent.new(**@system_arguments)
81
- end
82
-
83
- # divider has no content
84
- render(component) if divider?
85
-
86
- render(component) { content }
87
- end
88
-
89
- def divider?
90
- @divider
91
- end
92
-
93
- def list?
94
- @as == :list
95
- end
9
+ class Item < Primer::Alpha::Dropdown::Menu::Item
10
+ status :deprecated
96
11
  end
97
12
  end
98
13
  end