@primer/css 20.0.0 → 20.1.0

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.
@@ -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",
3
+ "version": "20.1.0",
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
+ }