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.
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