@primer/css 20.0.0-rc.f7fbc78b → 20.1.0-rc.6bae6aba

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.
@@ -80,6 +80,11 @@
80
80
  h5,
81
81
  h6 {
82
82
  display: inline-block;
83
+
84
+ .anchor {
85
+ // stylelint-disable-next-line primer/spacing
86
+ margin-left: -40px;
87
+ }
83
88
  }
84
89
 
85
90
  h1,
@@ -1,4 +1,3 @@
1
- // stylelint-disable selector-max-specificity
2
1
  $nav-height: $spacer-3 * 3 !default; // 48px
3
2
 
4
3
  .UnderlineNav {
@@ -10,6 +9,17 @@ $nav-height: $spacer-3 * 3 !default; // 48px
10
9
  box-shadow: inset 0 -1px 0 var(--color-border-muted);
11
10
  -webkit-overflow-scrolling: auto;
12
11
  justify-content: space-between;
12
+
13
+ .Counter {
14
+ margin-left: $spacer-2;
15
+ color: var(--color-fg-default);
16
+ background-color: var(--color-neutral-muted);
17
+
18
+ &--primary {
19
+ color: var(--color-fg-on-emphasis);
20
+ background-color: var(--color-neutral-emphasis);
21
+ }
22
+ }
13
23
  }
14
24
 
15
25
  .UnderlineNav-body {
@@ -41,65 +51,54 @@ $nav-height: $spacer-3 * 3 !default; // 48px
41
51
  color: var(--color-fg-default);
42
52
  text-decoration: none;
43
53
  border-bottom-color: var(--color-neutral-muted);
44
- outline-offset: -8px;
54
+ outline-offset: -2px;
45
55
  transition: border-bottom-color 0.12s ease-out;
56
+ }
46
57
 
47
- // renders a visibly hidden "copy" of the label in bold, reserving box space for when label becomes bold on selected
48
- [data-content]::before {
49
- display: block;
50
- height: 0;
51
- font-weight: $font-weight-bold;
52
- visibility: hidden;
53
- content: attr(data-content);
54
- }
55
-
56
- // increase touch target area
57
- &::before {
58
- @include minTouchTarget($min-height: $nav-height);
59
- }
58
+ // renders a visibly hidden "copy" of the label in bold, reserving box space for when label becomes bold on selected
59
+ [data-content]::before {
60
+ display: block;
61
+ height: 0;
62
+ font-weight: $font-weight-bold;
63
+ visibility: hidden;
64
+ content: attr(data-content);
65
+ }
60
66
 
61
- // hover state was "sticking" on mobile after click
62
- @media (pointer: fine) {
63
- &:hover {
64
- color: var(--color-fg-default);
65
- text-decoration: none;
66
- background: var(--color-action-list-item-default-hover-bg);
67
- transition: background 0.12s ease-out;
68
- }
69
- }
67
+ // increase touch target area
68
+ &::before {
69
+ @include minTouchTarget($min-height: $nav-height);
70
+ }
70
71
 
71
- &.selected,
72
- &[role='tab'][aria-selected='true'],
73
- &[aria-current]:not([aria-current='false']) {
74
- font-weight: $font-weight-bold;
72
+ // hover state was "sticking" on mobile after click
73
+ @media (pointer: fine) {
74
+ &:hover {
75
75
  color: var(--color-fg-default);
76
- border-bottom-color: var(--color-primer-border-active);
77
- outline-offset: -8px;
78
-
79
- // current/selected underline
80
- &::after {
81
- position: absolute;
82
- right: 50%;
83
- // 48px total height / 2 (24px) + 1px
84
- bottom: calc(50% - 25px);
85
- width: 100%;
86
- height: 2px;
87
- content: '';
88
- background: var(--color-primer-border-active);
89
- border-radius: $border-radius;
90
- transform: translate(50%, -50%);
91
- }
76
+ text-decoration: none;
77
+ background: var(--color-action-list-item-default-hover-bg);
78
+ transition: background 0.12s ease-out;
92
79
  }
93
80
  }
94
81
 
95
- .Counter {
96
- margin-left: $spacer-2;
82
+ &.selected,
83
+ &[role='tab'][aria-selected='true'],
84
+ &[aria-current]:not([aria-current='false']) {
85
+ font-weight: $font-weight-bold;
97
86
  color: var(--color-fg-default);
98
- background-color: var(--color-neutral-muted);
87
+ border-bottom-color: var(--color-primer-border-active);
88
+ outline-offset: -8px;
99
89
 
100
- &--primary {
101
- color: var(--color-fg-on-emphasis);
102
- background-color: var(--color-neutral-emphasis);
90
+ // current/selected underline
91
+ &::after {
92
+ position: absolute;
93
+ right: 50%;
94
+ // 48px total height / 2 (24px) + 1px
95
+ bottom: calc(50% - 25px);
96
+ width: 100%;
97
+ height: 2px;
98
+ content: '';
99
+ background: var(--color-primer-border-active);
100
+ border-radius: $border-radius;
101
+ transform: translate(50%, -50%);
103
102
  }
104
103
  }
105
104
  }
@@ -0,0 +1,24 @@
1
+ ---
2
+ bundle: 'overlay'
3
+ generated: true
4
+ ---
5
+
6
+ # Primer CSS: `overlay` bundle
7
+
8
+ ## Usage
9
+
10
+ Primer CSS source files are written in [SCSS]. To include this Primer CSS module in your own build, ensure that your `node_modules` directory is listed in your Sass include paths, then import it with:
11
+
12
+ ```scss
13
+ @import '@primer/css/overlay/index.scss';
14
+ ```
15
+
16
+ ## Build
17
+
18
+ The `@primer/css` npm package includes a standalone CSS build of this module in `dist/overlay.css`.
19
+
20
+ ## License
21
+
22
+ [MIT](https://github.com/primer/css/blob/main/LICENSE) © [GitHub](https://github.com/)
23
+
24
+ [scss]: https://sass-lang.com/documentation/syntax#scss
@@ -0,0 +1,2 @@
1
+ @import '../support/index.scss';
2
+ @import './overlay.scss';
@@ -0,0 +1,384 @@
1
+ // stylelint-disable selector-max-compound-selectors, max-nesting-depth, selector-max-specificity, primer/borders
2
+ // replace with primitive
3
+ $primer-borderRadius-large: 0.75rem;
4
+
5
+ .Overlay--hidden {
6
+ display: none !important;
7
+ }
8
+
9
+ .Overlay--visibilityHidden {
10
+ height: 0;
11
+ overflow: hidden;
12
+ visibility: hidden;
13
+ opacity: 0;
14
+ }
15
+
16
+ .Overlay {
17
+ display: flex;
18
+ min-width: 192px;
19
+ flex-direction: column;
20
+ background-color: var(--color-canvas-overlay);
21
+ border-radius: $primer-borderRadius-large;
22
+ box-shadow: var(--color-overlay-shadow);
23
+ opacity: 1;
24
+
25
+ &.Overlay--height-auto {
26
+ height: auto;
27
+ }
28
+
29
+ &.Overlay--height-xsmall {
30
+ height: min(192px, 100% - 2rem);
31
+ }
32
+
33
+ &.Overlay--height-small {
34
+ height: min(256px, 100% - 2rem);
35
+ }
36
+
37
+ &.Overlay--height-medium {
38
+ height: min(320px, 100% - 2rem);
39
+ }
40
+
41
+ &.Overlay--height-large {
42
+ height: min(432px, 100% - 2rem);
43
+ }
44
+
45
+ &.Overlay--height-xlarge {
46
+ height: min(600px, 100% - 2rem);
47
+ }
48
+
49
+ &.Overlay--width-auto {
50
+ width: auto;
51
+ }
52
+
53
+ &.Overlay--width-small {
54
+ width: min(256px, 100% - 2rem);
55
+ }
56
+
57
+ &.Overlay--width-medium {
58
+ width: min(320px, 100% - 2rem);
59
+ }
60
+
61
+ &.Overlay--width-large {
62
+ // stylelint-disable-next-line primer/responsive-widths
63
+ width: min(480px, 100% - 2rem);
64
+ }
65
+
66
+ &.Overlay--width-xlarge {
67
+ // stylelint-disable-next-line primer/responsive-widths
68
+ width: min(640px, 100% - 2rem);
69
+ }
70
+
71
+ &.Overlay--width-xxlarge {
72
+ // stylelint-disable-next-line primer/responsive-widths
73
+ width: min(960px, 100% - 2rem);
74
+ }
75
+
76
+ &.Overlay--motion-scaleFade {
77
+ @media screen and (prefers-reduced-motion: no-preference) {
78
+ animation: 200ms cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running Overlay--motion-scaleFade;
79
+ }
80
+ }
81
+
82
+ @keyframes Overlay--motion-scaleFade {
83
+ 0% {
84
+ opacity: 0;
85
+ transform: scale(0.5);
86
+ }
87
+
88
+ 100% {
89
+ opacity: 1;
90
+ transform: scale(1);
91
+ }
92
+ }
93
+ }
94
+
95
+ // for <form> element that wraps entire contents of overlay
96
+ .Overlay-form {
97
+ display: flex;
98
+ overflow: auto;
99
+ flex-direction: column;
100
+ flex-grow: 1;
101
+ }
102
+
103
+ .Overlay-header {
104
+ z-index: 1;
105
+ display: flex;
106
+ flex-direction: column;
107
+
108
+ &.Overlay-header--divided {
109
+ padding-bottom: $spacer-2;
110
+ // stylelint-disable-next-line primer/box-shadow
111
+ box-shadow: inset 0 #{-$border-width} var(--color-border-default);
112
+
113
+ + .Overlay-body {
114
+ padding-top: $spacer-3;
115
+ }
116
+ }
117
+
118
+ &.Overlay-header--large {
119
+ .Overlay-headerContentWrap {
120
+ .Overlay-titleWrap {
121
+ gap: $spacer-2;
122
+
123
+ .Overlay-title {
124
+ font-size: $h3-size;
125
+ }
126
+
127
+ .Overlay-description {
128
+ font-size: $body-font-size;
129
+ }
130
+ }
131
+ }
132
+ }
133
+
134
+ .Overlay-headerContentWrap {
135
+ display: flex;
136
+ align-items: flex-start;
137
+ gap: $spacer-2;
138
+ padding: $spacer-2 $spacer-2 0 $spacer-2;
139
+
140
+ .Overlay-actionWrap {
141
+ display: flex;
142
+ flex-direction: row;
143
+ gap: $spacer-2;
144
+ }
145
+
146
+ .Overlay-titleWrap {
147
+ display: flex;
148
+ padding: ($spacer-2 * 0.75) 0 ($spacer-2 * 0.75) $spacer-2;
149
+ flex-direction: column;
150
+ flex-grow: 1;
151
+ gap: $spacer-1;
152
+
153
+ .Overlay-title {
154
+ margin: 0;
155
+ font-size: $body-font-size;
156
+ font-weight: $font-weight-bold;
157
+ }
158
+
159
+ .Overlay-description {
160
+ margin: 0;
161
+ font-size: $font-size-small;
162
+ font-weight: $font-weight-normal;
163
+ color: var(--color-fg-muted);
164
+ }
165
+ }
166
+ }
167
+ }
168
+
169
+ // generic body content slot
170
+ .Overlay-body {
171
+ padding: $spacer-3;
172
+ padding-top: 0;
173
+ overflow-y: auto;
174
+ scrollbar-width: thin;
175
+ font-size: $body-font-size;
176
+ flex-grow: 1;
177
+
178
+ &.Overlay-body--paddingCondensed {
179
+ padding: $spacer-2;
180
+ padding-top: 0;
181
+ }
182
+
183
+ &.Overlay-body--paddingNone {
184
+ padding: 0;
185
+ }
186
+ }
187
+
188
+ // generic footer slot
189
+ .Overlay-footer {
190
+ z-index: 1;
191
+ display: flex;
192
+ padding: 0 $spacer-3 $spacer-3 $spacer-3;
193
+ flex-direction: row;
194
+ flex-shrink: 0;
195
+ flex-wrap: wrap;
196
+
197
+ &.Overlay-footer--divided {
198
+ padding-top: $spacer-3;
199
+ // stylelint-disable-next-line primer/box-shadow
200
+ box-shadow: inset 0 $border-width var(--color-border-default);
201
+ }
202
+
203
+ &.Overlay-footer--alignStart {
204
+ justify-content: flex-start;
205
+ gap: $spacer-2;
206
+ }
207
+
208
+ &.Overlay-footer--alignCenter {
209
+ justify-content: center;
210
+ gap: $spacer-2;
211
+ }
212
+
213
+ &.Overlay-footer--alignEnd {
214
+ justify-content: flex-end;
215
+ gap: $spacer-2;
216
+ }
217
+ }
218
+
219
+ // TODO: replace with refactored IconButton
220
+ .Overlay-closeButton {
221
+ position: relative;
222
+ display: grid;
223
+ width: $spacer-5;
224
+ height: $spacer-5;
225
+ padding: 0;
226
+ color: var(--color-fg-muted);
227
+ cursor: pointer;
228
+ user-select: none;
229
+ background-color: transparent;
230
+ border: $border-width $border-style transparent;
231
+ border-radius: $border-radius;
232
+ transition: 0.2s cubic-bezier(0.3, 0, 0.5, 1);
233
+ transition-property: color, background-color, border-color;
234
+ place-content: center;
235
+ align-self: flex-start;
236
+ flex-shrink: 0;
237
+
238
+ &:hover,
239
+ &:focus {
240
+ background-color: var(--color-btn-hover-bg);
241
+ border: $border-width $border-style var(--color-btn-hover-bg);
242
+ }
243
+ }
244
+
245
+ @mixin Overlay-backdrop() {
246
+ position: fixed;
247
+ top: 0;
248
+ right: 0;
249
+ bottom: 0;
250
+ left: 0;
251
+ z-index: 999;
252
+ display: flex;
253
+ background-color: var(--color-neutral-muted);
254
+ }
255
+
256
+ @mixin Overlay-backdrop--transparent() {
257
+ position: absolute;
258
+ background-color: transparent;
259
+ }
260
+
261
+ // variants must be mixins so we can extend within a media query (@extend is not supported inside media queries)
262
+
263
+ // border-radius repeats within placement options to ensure the original radius is reset when two classes co-exist
264
+
265
+ // center
266
+ @mixin Overlay-backdrop--center {
267
+ @include Overlay-backdrop;
268
+
269
+ align-items: center;
270
+ justify-content: center;
271
+ }
272
+
273
+ // anchor
274
+ @mixin Overlay-backdrop--anchor {
275
+ @include Overlay-backdrop--transparent;
276
+
277
+ .Overlay {
278
+ width: auto;
279
+ }
280
+ }
281
+
282
+ // anchor side(s)
283
+ @mixin Overlay-backdrop--side($responsiveVariant: '') {
284
+ @include Overlay-backdrop;
285
+
286
+ // default left
287
+ align-items: center;
288
+ justify-content: left;
289
+
290
+ &.Overlay-backdrop--placement-left#{$responsiveVariant} {
291
+ align-items: center;
292
+ justify-content: left;
293
+
294
+ .Overlay#{$responsiveVariant} {
295
+ border-radius: $primer-borderRadius-large;
296
+ border-top-left-radius: 0;
297
+ border-bottom-left-radius: 0;
298
+ }
299
+ }
300
+
301
+ &.Overlay-backdrop--placement-right#{$responsiveVariant} {
302
+ align-items: center;
303
+ justify-content: right;
304
+
305
+ .Overlay#{$responsiveVariant} {
306
+ border-radius: $primer-borderRadius-large;
307
+ border-top-right-radius: 0;
308
+ border-bottom-right-radius: 0;
309
+ }
310
+ }
311
+
312
+ &.Overlay-backdrop--placement-bottom#{$responsiveVariant} {
313
+ align-items: end;
314
+ justify-content: center;
315
+
316
+ .Overlay#{$responsiveVariant} {
317
+ border-radius: $primer-borderRadius-large;
318
+ border-bottom-right-radius: 0;
319
+ border-bottom-left-radius: 0;
320
+ }
321
+ }
322
+
323
+ &.Overlay-backdrop--placement-top#{$responsiveVariant} {
324
+ align-items: start;
325
+ justify-content: center;
326
+
327
+ .Overlay#{$responsiveVariant} {
328
+ border-radius: $primer-borderRadius-large;
329
+ border-top-left-radius: 0;
330
+ border-top-right-radius: 0;
331
+ }
332
+ }
333
+ }
334
+
335
+ // full width
336
+ @mixin Overlay-backdrop--full {
337
+ @include Overlay-backdrop;
338
+
339
+ .Overlay {
340
+ width: 100%;
341
+ max-width: 100vw;
342
+ height: 100%;
343
+ max-height: 100vh;
344
+ border-radius: unset;
345
+ flex-grow: 1;
346
+ }
347
+ }
348
+
349
+ // Overlay variant classnames
350
+ .Overlay-backdrop--center {
351
+ @include Overlay-backdrop--center;
352
+ }
353
+
354
+ .Overlay-backdrop--anchor {
355
+ @include Overlay-backdrop--anchor;
356
+ }
357
+
358
+ .Overlay-backdrop--side {
359
+ @include Overlay-backdrop--side;
360
+ }
361
+
362
+ .Overlay-backdrop--full {
363
+ @include Overlay-backdrop--full;
364
+ }
365
+
366
+ // responsive variants
367
+ // up to 767px
368
+ @media (max-width: #{map-get($breakpoints, 'md') - 0.02px}) {
369
+ .Overlay-backdrop--center-whenNarrow {
370
+ @include Overlay-backdrop--center;
371
+ }
372
+
373
+ .Overlay-backdrop--anchor-whenNarrow {
374
+ @include Overlay-backdrop--anchor;
375
+ }
376
+
377
+ .Overlay-backdrop--side-whenNarrow {
378
+ @include Overlay-backdrop--side('-whenNarrow');
379
+ }
380
+
381
+ .Overlay-backdrop--full-whenNarrow {
382
+ @include Overlay-backdrop--full;
383
+ }
384
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/css",
3
- "version": "20.0.0-rc.f7fbc78b",
3
+ "version": "20.1.0-rc.6bae6aba",
4
4
  "description": "The CSS implementation of GitHub's Primer Design System",
5
5
  "homepage": "https://primer.style/css",
6
6
  "author": "GitHub, Inc.",
@@ -49,12 +49,12 @@
49
49
  "@github/prettier-config": "0.0.4",
50
50
  "@koddsson/postcss-sass": "5.0.1",
51
51
  "@primer/stylelint-config": "^12.4.0",
52
- "autoprefixer": "10.4.4",
52
+ "autoprefixer": "10.4.6",
53
53
  "chokidar-cli": "3.0.0",
54
54
  "cssstats": "4.0.5",
55
- "eslint": "8.13.0",
55
+ "eslint": "8.14.0",
56
56
  "eslint-plugin-github": "4.3.6",
57
- "eslint-plugin-jest": "26.0.0",
57
+ "eslint-plugin-jest": "26.1.5",
58
58
  "eslint-plugin-prettier": "4.0.0",
59
59
  "filesize": "8.0.7",
60
60
  "front-matter": "4.0.2",
@@ -62,11 +62,11 @@
62
62
  "globby": "13.1.1",
63
63
  "jest": "27.5.1",
64
64
  "js-yaml": "4.1.0",
65
- "postcss": "8.4.12",
65
+ "postcss": "8.4.13",
66
66
  "postcss-calc": "8.2.4",
67
67
  "postcss-import": "14.1.0",
68
68
  "postcss-load-config": "3.1.4",
69
- "postcss-scss": "4.0.3",
69
+ "postcss-scss": "4.0.4",
70
70
  "postcss-simple-vars": "6.0.3",
71
71
  "prettier": "2.6.2",
72
72
  "semver": "7.3.7",
@@ -24,4 +24,4 @@
24
24
  @import '../select-menu/index.scss';
25
25
  @import '../subhead/index.scss';
26
26
  @import '../timeline/index.scss';
27
- @import '../toasts/index.scss'
27
+ @import '../toasts/index.scss';
@@ -243,3 +243,8 @@
243
243
  .user-select-none {
244
244
  user-select: none !important;
245
245
  }
246
+
247
+ /* Make text capitalized (transforms first character to uppercase) */
248
+ .text-capitalize {
249
+ text-transform: capitalize !important;
250
+ }