@primer/css 20.8.0-rc.fe3706b6 → 20.8.1-rc.5118418f

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 (100) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/alerts/flash.scss +1 -155
  3. package/autocomplete/autocomplete.scss +1 -118
  4. package/avatars/avatar-stack.scss +1 -149
  5. package/avatars/avatar.scss +1 -48
  6. package/base/normalize.scss +1 -1
  7. package/blankslate/blankslate.scss +1 -0
  8. package/blankslate/index.scss +2 -1
  9. package/box/box.scss +1 -289
  10. package/breadcrumb/breadcrumb.scss +1 -33
  11. package/dist/alerts.css +1 -1
  12. package/dist/alerts.css.map +1 -1
  13. package/dist/autocomplete.css +1 -1
  14. package/dist/autocomplete.css.map +1 -1
  15. package/dist/avatars.css +1 -1
  16. package/dist/avatars.css.map +1 -1
  17. package/dist/base.css +1 -1
  18. package/dist/base.css.map +1 -1
  19. package/dist/blankslate.css.map +1 -1
  20. package/dist/box.css +1 -1
  21. package/dist/box.css.map +1 -1
  22. package/dist/breadcrumb.css +1 -1
  23. package/dist/breadcrumb.css.map +1 -1
  24. package/dist/core.css +1 -1
  25. package/dist/core.css.map +1 -1
  26. package/dist/dropdown.css +1 -1
  27. package/dist/dropdown.css.map +1 -1
  28. package/dist/forms.css +1 -1
  29. package/dist/forms.css.map +1 -1
  30. package/dist/labels.css +1 -1
  31. package/dist/labels.css.map +1 -1
  32. package/dist/layout.css +1 -1
  33. package/dist/layout.css.map +1 -1
  34. package/dist/links.css +1 -1
  35. package/dist/links.css.map +1 -1
  36. package/dist/meta.json +219 -219
  37. package/dist/navigation.css +1 -1
  38. package/dist/navigation.css.map +1 -1
  39. package/dist/overlay.css +1 -1
  40. package/dist/overlay.css.map +1 -1
  41. package/dist/popover.css +1 -1
  42. package/dist/popover.css.map +1 -1
  43. package/dist/primer.css +2 -2
  44. package/dist/primer.css.map +1 -1
  45. package/dist/product.css +1 -1
  46. package/dist/product.css.map +1 -1
  47. package/dist/progress.css +1 -1
  48. package/dist/progress.css.map +1 -1
  49. package/dist/stats/alerts.json +1 -1
  50. package/dist/stats/autocomplete.json +1 -1
  51. package/dist/stats/avatars.json +1 -1
  52. package/dist/stats/base.json +1 -1
  53. package/dist/stats/box.json +1 -1
  54. package/dist/stats/breadcrumb.json +1 -1
  55. package/dist/stats/core.json +1 -1
  56. package/dist/stats/dropdown.json +1 -1
  57. package/dist/stats/forms.json +1 -1
  58. package/dist/stats/labels.json +1 -1
  59. package/dist/stats/layout.json +1 -1
  60. package/dist/stats/links.json +1 -1
  61. package/dist/stats/navigation.json +1 -1
  62. package/dist/stats/overlay.json +1 -1
  63. package/dist/stats/popover.json +1 -1
  64. package/dist/stats/primer.json +1 -1
  65. package/dist/stats/product.json +1 -1
  66. package/dist/stats/progress.json +1 -1
  67. package/dist/stats/subhead.json +1 -1
  68. package/dist/stats/timeline.json +1 -1
  69. package/dist/stats/toggle-switch.json +1 -1
  70. package/dist/stats/truncate.json +1 -1
  71. package/dist/subhead.css +1 -1
  72. package/dist/subhead.css.map +1 -1
  73. package/dist/timeline.css +1 -1
  74. package/dist/timeline.css.map +1 -1
  75. package/dist/toggle-switch.css +1 -1
  76. package/dist/toggle-switch.css.map +1 -1
  77. package/dist/truncate.css +1 -1
  78. package/dist/truncate.css.map +1 -1
  79. package/dropdown/dropdown.scss +1 -270
  80. package/forms/FormControl.scss +1 -677
  81. package/labels/counters.scss +1 -36
  82. package/labels/labels.scss +1 -92
  83. package/labels/states.scss +1 -56
  84. package/layout/index.scss +0 -1
  85. package/layout/layout.scss +1 -182
  86. package/layout/page-layout.scss +26 -0
  87. package/links/link.scss +1 -60
  88. package/navigation/menu.scss +1 -119
  89. package/navigation/tabnav.scss +1 -104
  90. package/navigation/underline-nav.scss +1 -136
  91. package/overlay/overlay.scss +1 -485
  92. package/package.json +2 -2
  93. package/popover/popover.scss +1 -226
  94. package/primitives/index.scss +9 -9
  95. package/progress/progress.scss +1 -27
  96. package/subhead/subhead.scss +1 -48
  97. package/timeline/timeline-item.scss +1 -94
  98. package/toggle-switch/toggle-switch.scss +1 -243
  99. package/truncate/truncate.scss +2 -61
  100. package/layout/mixins.scss +0 -105
@@ -1,677 +1 @@
1
- // stylelint-disable primer/typography, primer/borders, primer/spacing, selector-max-type, selector-max-specificity, selector-no-qualifying-type, max-nesting-depth
2
-
3
- // groups label, field, caption and inline error message
4
- .FormControl {
5
- display: inline-flex;
6
- flex-direction: column;
7
- gap: var(--base-size-4, 4px);
8
- }
9
-
10
- // fill container
11
- .FormControl--fullWidth {
12
- display: flex;
13
- }
14
-
15
- // <label>
16
- .FormControl-label {
17
- font-size: var(--primer-text-body-size-medium, 14px);
18
- font-weight: var(--base-text-weight-semibold, 600);
19
- line-height: var(--primer-text-body-lineHeight-medium, calc(20 / 14));
20
- color: var(--color-fg-default);
21
- user-select: none;
22
- }
23
-
24
- // optional caption
25
- .FormControl-caption {
26
- margin-bottom: 0;
27
- font-size: var(--primer-text-caption-size, 12px);
28
- font-weight: var(--primer-text-caption-weight, 400);
29
- line-height: var(--primer-text-caption-lineHeight, calc(16 / 12));
30
- color: var(--color-fg-muted);
31
- }
32
-
33
- // inline validation message
34
- .FormControl-inlineValidation {
35
- display: flex;
36
- font-size: var(--primer-text-caption-size, 12px);
37
- font-weight: var(--base-text-weight-semibold, 600);
38
- color: var(--color-danger-fg);
39
- fill: var(--color-danger-fg);
40
- flex-direction: row;
41
- align-items: center;
42
- gap: var(--base-size-4, 4px);
43
-
44
- p {
45
- margin-bottom: 0;
46
- }
47
- }
48
-
49
- // shared among all form control components (input, select, textarea, checkbox, radio)
50
- @mixin Field {
51
- color: var(--color-fg-default);
52
- background-color: var(--color-canvas-default);
53
- border: var(--primer-borderWidth-thin, 1px) solid var(--color-border-default);
54
-
55
- &[disabled] {
56
- color: var(--color-primer-fg-disabled);
57
- cursor: not-allowed;
58
- background-color: var(--color-input-disabled-bg);
59
- border-color: var(--color-border-default);
60
- opacity: 1;
61
- -webkit-text-fill-color: var(--color-primer-fg-disabled);
62
- }
63
-
64
- &:not(:focus)[invalid] {
65
- border-color: var(--color-danger-emphasis);
66
- }
67
-
68
- &:not([type='checkbox']):not([type='radio']):focus {
69
- @include focusBoxShadowInset;
70
-
71
- // remove fallback :focus if :focus-visible is supported
72
- &:not(:focus-visible) {
73
- border-color: transparent;
74
-
75
- @include focusBoxShadowInset(1px, transparent);
76
- }
77
- }
78
-
79
- // default focus state
80
- &:not([type='checkbox']):not([type='radio']):focus-visible {
81
- @include focusBoxShadowInset;
82
- }
83
- }
84
-
85
- // TextInput structure
86
- // ===================
87
- //
88
- // .FormControl
89
- // ├─ .FormControl-label
90
- // │ ├─ .FormControl-input-wrap
91
- // │ │ ├─ .FormControl-input-leadingVisualWrap
92
- // │ │ │ ├─ .FormControl-input-leadingVisual
93
- // │ │ ├─ .FormControl-input
94
- // │ │ ├─ .FormControl-input-trailingAction
95
- // ├─ .FormControl-inlineValidation
96
- // ├─ .FormControl-caption
97
-
98
- // Select structure
99
- // ===================
100
- //
101
- // .FormControl
102
- // ├─ .FormControl-label
103
- // │ ├─ .FormControl-select-wrap
104
- // │ │ ├─ .FormControl-select
105
- // ├─ .FormControl-inlineValidation
106
- // ├─ .FormControl-caption
107
-
108
- // Textarea structure
109
- // ===================
110
- //
111
- // .FormControl
112
- // ├─ .FormControl-label
113
- // ├─ .FormControl-textarea
114
- // ├─ .FormControl-inlineValidation
115
- // ├─ .FormControl-caption
116
-
117
- .FormControl-input,
118
- .FormControl-select,
119
- .FormControl-textarea {
120
- @include Field;
121
-
122
- width: 100%;
123
- font-size: var(--primer-text-body-size-medium, 14px);
124
- line-height: var(--primer-text-body-lineHeight-medium, calc(20 / 14));
125
- border-radius: var(--primer-borderRadius-medium, 6px);
126
- transition: 80ms cubic-bezier(0.33, 1, 0.68, 1);
127
- transition-property: color, background-color, box-shadow, border-color;
128
- padding-inline: var(--primer-control-medium-paddingInline-condensed, 8px);
129
- padding-block: calc(var(--primer-control-medium-paddingBlock, 6px) - var(--primer-borderWidth-thin, 1px));
130
-
131
- &[disabled] {
132
- &::placeholder {
133
- color: var(--color-primer-fg-disabled);
134
- }
135
- }
136
-
137
- &[readonly] {
138
- background-color: var(--color-input-disabled-bg);
139
- }
140
-
141
- ::placeholder {
142
- color: var(--color-fg-subtle);
143
- opacity: 1;
144
- }
145
-
146
- // sizes
147
-
148
- &.FormControl-small {
149
- height: var(--primer-control-small-size, 28px);
150
- padding-inline: var(--primer-control-small-paddingInline-normal, 8px);
151
- padding-block: var(--primer-control-small-paddingBlock, 4px);
152
- font-size: var(--primer-text-body-size-small, 12px);
153
- }
154
-
155
- &.FormControl-medium {
156
- height: var(--primer-control-medium-size, 32px);
157
- }
158
-
159
- &.FormControl-large {
160
- height: var(--primer-control-large-size, 40px);
161
- padding-inline: var(--primer-control-large-paddingInline-normal, 12px);
162
- padding-block: var(--primer-control-large-paddingBlock, 10px);
163
- }
164
-
165
- // variants
166
-
167
- &.FormControl-inset {
168
- background-color: var(--color-canvas-inset);
169
-
170
- &:focus-visible,
171
- &:focus {
172
- background-color: var(--color-canvas-default);
173
- }
174
- }
175
-
176
- &.FormControl-monospace {
177
- font-family:
178
- var(
179
- --primer-fontStack-monospace,
180
- 'ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace'
181
- );
182
- }
183
-
184
- // validation states
185
-
186
- &.FormControl-error {
187
- border-color: var(--color-danger-emphasis);
188
- }
189
-
190
- &.FormControl-success {
191
- border-color: var(--color-success-emphasis);
192
- }
193
-
194
- &.FormControl-warning {
195
- border-color: var(--color-attention-emphasis);
196
- }
197
- }
198
-
199
- // positioning for leading/trailing items for TextInput
200
- .FormControl-input-wrap {
201
- position: relative;
202
- display: grid;
203
-
204
- .FormControl-input-leadingVisualWrap {
205
- position: absolute;
206
- top: var(--base-size-8, 8px);
207
- left: var(--base-size-8, 8px);
208
- display: block;
209
- width: var(--base-size-16, 16px);
210
- height: var(--base-size-16, 16px);
211
- color: var(--color-fg-muted);
212
- pointer-events: none;
213
-
214
- // octicon
215
- .FormControl-input-leadingVisual {
216
- display: block;
217
- user-select: none;
218
- }
219
- }
220
-
221
- // TODO: replace with new Button component
222
- .FormControl-input-trailingAction {
223
- position: absolute;
224
- top: var(--base-size-4, 4px);
225
- right: var(--base-size-4, 4px);
226
- z-index: 4;
227
- display: grid;
228
- width: var(--primer-control-xsmall-size, 24px);
229
- height: var(--primer-control-xsmall-size, 24px);
230
- padding: 0;
231
- color: var(--color-fg-muted);
232
- cursor: pointer;
233
- background: transparent;
234
- border: 0;
235
- border-radius: var(--primer-borderRadius-small);
236
- transition: 0.2s cubic-bezier(0.3, 0, 0.5, 1);
237
- transition-property: color, background-color, border-color;
238
- align-items: center;
239
- justify-content: center;
240
-
241
- svg {
242
- user-select: none;
243
- }
244
-
245
- &[disabled] {
246
- color: var(--color-primer-fg-disabled);
247
- pointer-events: none;
248
- }
249
-
250
- &:hover {
251
- background: var(--color-action-list-item-default-hover-bg);
252
- }
253
-
254
- &:active {
255
- background: var(--color-action-list-item-default-active-bg);
256
- }
257
-
258
- // show vertical divider line between field and button
259
- &.FormControl-input-trailingAction--divider {
260
- &::before {
261
- position: absolute;
262
- top: calc((var(--primer-control-xsmall-size) - var(--base-size-16)) / 2);
263
- left: calc(var(--base-size-4, 4px) * -1);
264
- display: block;
265
- width: var(--primer-borderWidth-thin);
266
- height: var(--base-size-16);
267
- content: '';
268
- background: var(--color-border-default);
269
- }
270
- }
271
-
272
- &::after {
273
- @include minTouchTarget(var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px));
274
-
275
- @media (pointer: coarse) {
276
- min-width: var(--primer-control-minTarget-coarse, 44px);
277
- min-height: var(--primer-control-minTarget-coarse, 44px);
278
- }
279
- }
280
- }
281
-
282
- // if leadingVisual is present
283
-
284
- /*
285
- ┌──32px──┬────────────────────┐
286
- ╎ ┌───┐ ┌────────────────┐ ╎
287
- ╎ 16px 16px ╎
288
- ╎ └───┘ └────────────────┘ ╎
289
- └───────8px───────────────────┘
290
- */
291
- &.FormControl-input-wrap--leadingVisual {
292
- .FormControl-input {
293
- padding-inline-start:
294
- calc(
295
- var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) +
296
- var(--primer-control-medium-gap, 8px)
297
- ); /* 32px */
298
- }
299
- }
300
-
301
- /*
302
- ┌──────────────────┬──32px──┐
303
- ╎ ┌──────────────┐ ┌────┐ ╎
304
- ╎ 24px 24px ╎
305
- ╎ └──────────────┘ └────┘ ╎
306
- └──────────────────┴────────┘
307
- */
308
- // if trailingAction is present
309
- &.FormControl-input-wrap--trailingAction {
310
- .FormControl-input {
311
- padding-inline-end:
312
- calc(
313
- var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) +
314
- var(--primer-control-medium-gap, 8px)
315
- ); /* 32px */
316
- }
317
-
318
- /*
319
- 32px + 1px border
320
- ┌──────────────────┬──33px──┐
321
- ╎ ┌──────────────┐ ┌────┐ ╎
322
- ╎ 24px 24px ╎
323
- ╎ └──────────────┘ └────┘ ╎
324
- └──────────────────┴────────┘
325
- */
326
- // if trailingAction divider is present, add 1px padding to accomodate input field text
327
- // can be refactored to has(.FormControl-input-trailingAction--divider)
328
- &.FormControl-input-wrap-trailingAction--divider {
329
- .FormControl-input {
330
- padding-inline-end:
331
- calc(
332
- var(--primer-control-medium-paddingInline-condensed, 8px) + var(--base-size-16, 16px) +
333
- var(--primer-control-medium-gap, 8px) + var(--primer-borderWidth-thin, 1px)
334
- ); /* 33px */
335
- }
336
- }
337
- }
338
-
339
- // size modifications can be refactored with :has() - FormControl-input-wrap:has(.FormControl-large)
340
- // sizes
341
- &.FormControl-small {
342
- .FormControl-input-leadingVisualWrap {
343
- top: calc(var(--primer-control-medium-paddingInline-condensed, 8px) - 0.125rem); /* 6px */
344
- left: calc(var(--primer-control-medium-paddingInline-condensed, 8px) - 0.125rem); /* 6px */
345
- }
346
-
347
- /*
348
- ┌──────────────────┬──28px──┐
349
- ╎ ┌──────────────┐ ┌────┐ ╎
350
- ╎ 20px 20px ╎
351
- ╎ └──────────────┘ └────┘ ╎
352
- └──────────────────┴────────┘
353
- */
354
- &.FormControl-input-wrap--trailingAction {
355
- .FormControl-input.FormControl-small {
356
- padding-inline-end:
357
- calc(
358
- var(--primer-control-small-paddingInline-condensed, 8px) + var(--base-size-16, 16px) +
359
- var(--primer-control-small-gap, 8px)
360
- ); /* 28px */
361
- }
362
-
363
- /*
364
- 28px + 1px border
365
- ┌──────────────────┬──29px──┐
366
- ╎ ┌──────────────┐ ┌────┐ ╎
367
- ╎ 20px 20px ╎
368
- ╎ └──────────────┘ └────┘ ╎
369
- └──────────────────┴────────┘
370
- */
371
- &.FormControl-input-wrap-trailingAction--divider {
372
- .FormControl-input.FormControl-small {
373
- padding-inline-end:
374
- calc(
375
- var(--primer-control-small-paddingInline-condensed, 8px) + var(--base-size-16, 16px) +
376
- var(--primer-control-small-gap, 8px) + var(--primer-borderWidth-thin, 1px)
377
- ); /* 29px */
378
- }
379
- }
380
- }
381
-
382
- .FormControl-input-trailingAction {
383
- width: calc(var(--primer-control-small-size, 28px) - var(--base-size-8, 8px));
384
- height: calc(var(--primer-control-small-size, 28px) - var(--base-size-8, 8px));
385
-
386
- &::before {
387
- top: calc((var(--primer-control-xsmall-size) - var(--base-size-16)) / 4); /* 2px */
388
- }
389
- }
390
- }
391
-
392
- &.FormControl-large {
393
- .FormControl-input-leadingVisualWrap {
394
- top: var(--primer-control-medium-paddingInline-normal, 12px);
395
- left: var(--primer-control-medium-paddingInline-normal, 12px);
396
- }
397
-
398
- /*
399
- ┌──36px──┬───12px padding──────┐
400
- ╎ ┌───┐ ┌────────────────┐ ╎
401
- ╎ 16px 16px ╎
402
- ╎ └───┘ └────────────────┘ ╎
403
- └12px───8px───────────────────┘
404
- */
405
- &.FormControl-input-wrap--leadingVisual {
406
- .FormControl-input.FormControl-large {
407
- padding-inline-start:
408
- calc(
409
- var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) +
410
- var(--primer-control-large-gap, 8px)
411
- ); /* 36px */
412
- }
413
- }
414
-
415
- /*
416
- ┌──────────────────┬──36px──┐
417
- ╎ ┌──────────────┐ ┌────┐ ╎
418
- ╎ 28px 28px ╎
419
- ╎ └──────────────┘ └────┘ ╎
420
- └──────────────────┴────────┘
421
- */
422
- &.FormControl-input-wrap--trailingAction {
423
- .FormControl-input.FormControl-large {
424
- padding-inline-end:
425
- calc(
426
- var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) +
427
- var(--primer-control-large-gap, 8px)
428
- ); /* 36px */
429
- }
430
-
431
- /*
432
- ┌──────────────────┬──37px──┐
433
- ╎ ┌──────────────┐ ┌────┐ ╎
434
- ╎ 28px 28px ╎
435
- ╎ └──────────────┘ └────┘ ╎
436
- └──────────────────┴────────┘
437
- */
438
- &.FormControl-input-wrap-trailingAction--divider {
439
- .FormControl-input.FormControl-large {
440
- padding-inline-end:
441
- calc(
442
- var(--primer-control-large-paddingInline-normal, 12px) + var(--base-size-16, 16px) +
443
- var(--primer-control-large-gap, 8px) + var(--primer-borderWidth-thin, 1px)
444
- ); /* 37px */
445
- }
446
- }
447
- }
448
-
449
- .FormControl-input-trailingAction {
450
- top: calc(var(--primer-control-medium-paddingInline-condensed, 8px) - 0.125rem); /* 6px */
451
- right: calc(var(--primer-control-medium-paddingInline-condensed, 8px) - 0.125rem); /* 6px */
452
- width: var(--primer-control-small-size, 28px);
453
- height: var(--primer-control-small-size, 28px);
454
-
455
- &::before {
456
- top: unset;
457
- height: var(--base-size-20);
458
- }
459
- }
460
- }
461
- }
462
-
463
- .FormControl-select-wrap {
464
- display: grid;
465
- grid-template-columns: minmax(0, auto) var(--base-size-16, 16px);
466
-
467
- // mask allows for background-color to respect themes
468
- &::after {
469
- width: var(--base-size-16, 16px);
470
- height: var(--base-size-16, 16px);
471
- padding-right: var(--base-size-4, 4px);
472
- pointer-events: none;
473
- content: '';
474
- background-color: var(--color-fg-muted);
475
- mask: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=');
476
- mask-size: contain;
477
- mask-repeat: no-repeat;
478
- grid-column: 2;
479
- grid-row: 1;
480
- place-self: center end;
481
- }
482
-
483
- // spans entire grid below mask
484
- .FormControl-select {
485
- grid-column: 1/-1;
486
- grid-row: 1;
487
- appearance: none;
488
- padding-right: var(--base-size-20, 20px);
489
- }
490
- }
491
-
492
- // checkbox + radio specific styles
493
-
494
- // Checkbox + Radio structure
495
- // ===================
496
- //
497
- // .FormControl-radio-wrap
498
- // ├─ .FormControl-radio
499
- // ├─ .FormControl-radio-labelWrap
500
- // │ ├─ .FormControl-label
501
- // │ ├─ .FormControl-caption
502
-
503
- .FormControl-checkbox-wrap,
504
- .FormControl-radio-wrap {
505
- display: inline-grid;
506
- grid-template-columns: min-content auto;
507
- gap: var(--base-size-8, 8px);
508
-
509
- .FormControl-checkbox-labelWrap,
510
- .FormControl-radio-labelWrap {
511
- display: flex;
512
- flex-direction: column;
513
- gap: var(--base-size-4, 4px);
514
- }
515
-
516
- .FormControl-label {
517
- cursor: pointer;
518
- }
519
- }
520
-
521
- // these selectors are temporary to override base.scss
522
- // once Field styles are widely adopted, we can adjust this and the global base styles
523
- input[type='checkbox'].FormControl-checkbox {
524
- @include Field;
525
-
526
- position: relative;
527
- display: grid;
528
- width: var(--base-size-16, 16px);
529
- height: var(--base-size-16, 16px);
530
- margin: 0;
531
- margin-top: 0.125rem; // 2px to center align with label (20px line-height)
532
- cursor: pointer;
533
- border-color: var(--color-neutral-emphasis);
534
- border-radius: var(--primer-borderRadius-small, 3px);
535
- transition: background-color, border-color 80ms cubic-bezier(0.33, 1, 0.68, 1); // checked -> unchecked - add 120ms delay to fully see animation-out
536
- appearance: none;
537
- place-content: center;
538
-
539
- &::before {
540
- width: var(--base-size-16, 16px);
541
- height: var(--base-size-16, 16px);
542
- visibility: hidden;
543
- content: '';
544
- background-color: var(--color-fg-on-emphasis);
545
- transition: visibility 0s linear 230ms;
546
- clip-path: inset(var(--base-size-16, 16px) 0 0 0);
547
- mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNzgwMyAwLjIxOTYyNUMxMS45MjEgMC4zNjA0MjcgMTIgMC41NTEzMDUgMTIgMC43NTAzMTNDMTIgMC45NDkzMjEgMTEuOTIxIDEuMTQwMTkgMTEuNzgwMyAxLjI4MUw0LjUxODYgOC41NDA0MkM0LjM3Nzc1IDguNjgxIDQuMTg2ODIgOC43NiAzLjk4Nzc0IDguNzZDMy43ODg2NyA4Ljc2IDMuNTk3NzMgOC42ODEgMy40NTY4OSA4LjU0MDQyTDAuMjAxNjIyIDUuMjg2MkMwLjA2ODkyNzcgNS4xNDM4MyAtMC4wMDMzMDkwNSA0Ljk1NTU1IDAuMDAwMTE2NDkzIDQuNzYwOThDMC4wMDM1NTIwNSA0LjU2NjQzIDAuMDgyMzg5NCA0LjM4MDgxIDAuMjIwMDMyIDQuMjQzMjFDMC4zNTc2NjUgNC4xMDU2MiAwLjU0MzM1NSA0LjAyNjgxIDAuNzM3OTcgNC4wMjMzOEMwLjkzMjU4NCA0LjAxOTk0IDEuMTIwOTMgNC4wOTIxNyAxLjI2MzM0IDQuMjI0ODJMMy45ODc3NCA2Ljk0ODM1TDEwLjcxODYgMC4yMTk2MjVDMTAuODU5NSAwLjA3ODk5MjMgMTEuMDUwNCAwIDExLjI0OTUgMEMxMS40NDg1IDAgMTEuNjM5NSAwLjA3ODk5MjMgMTEuNzgwMyAwLjIxOTYyNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo='); // octicon checkmark image
548
- mask-size: 75%;
549
- mask-repeat: no-repeat;
550
- mask-position: center;
551
-
552
- @media screen and (prefers-reduced-motion: no-preference) {
553
- animation: checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards; // slightly snappier animation out
554
- }
555
- }
556
-
557
- // extend touch target
558
- &::after {
559
- @include minTouchTarget(var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px));
560
- }
561
-
562
- &[disabled] {
563
- ~ .FormControl-checkbox-labelWrap,
564
- ~ .FormControl-radio-labelWrap {
565
- .FormControl-label {
566
- color: var(--color-primer-fg-disabled);
567
- cursor: not-allowed;
568
- }
569
- }
570
- }
571
-
572
- &:checked {
573
- background: var(--color-accent-fg);
574
- border-color: var(--color-accent-fg);
575
- transition: background-color, border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms; // unchecked -> checked
576
-
577
- &::before {
578
- visibility: visible;
579
- transition: visibility 0s linear 0s;
580
-
581
- @media screen and (prefers-reduced-motion: no-preference) {
582
- animation: checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards 80ms;
583
- }
584
- }
585
-
586
- &:disabled {
587
- cursor: not-allowed;
588
- background-color: var(--color-primer-fg-disabled);
589
- border-color: var(--color-primer-fg-disabled);
590
- opacity: 1;
591
-
592
- &::before {
593
- background-color: var(--color-fg-on-emphasis);
594
- }
595
- }
596
-
597
- // Windows High Contrast mode
598
- // stylelint-disable primer/colors
599
- @media (forced-colors: active) {
600
- background-color: CanvasText;
601
- border-color: CanvasText;
602
- }
603
- // stylelint-enable primer/colors
604
- }
605
-
606
- &:focus-visible {
607
- @include focusOutline(2px);
608
- }
609
-
610
- &:indeterminate {
611
- &::before {
612
- mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMiIgdmlld0JveD0iMCAwIDEwIDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAxQzAgMC40NDc3MTUgMC40NDc3MTUgMCAxIDBIOUM5LjU1MjI5IDAgMTAgMC40NDc3MTUgMTAgMUMxMCAxLjU1MjI4IDkuNTUyMjkgMiA5IDJIMUMwLjQ0NzcxNSAyIDAgMS41NTIyOCAwIDFaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K');
613
- visibility: visible;
614
- }
615
- }
616
- }
617
-
618
- input[type='radio'].FormControl-radio {
619
- @include Field;
620
-
621
- position: relative;
622
- width: var(--base-size-16, 16px);
623
- height: var(--base-size-16, 16px);
624
- margin: 0;
625
- margin-top: 0.125rem; // 2px to center align with label (20px line-height)
626
- cursor: pointer;
627
- border-color: var(--color-neutral-emphasis);
628
- border-radius: var(--primer-borderRadius-full, 100vh);
629
- transition: background-color, border-color 80ms cubic-bezier(0.33, 1, 0.68, 1); // checked -> unchecked - add 120ms delay to fully see animation-out
630
- appearance: none;
631
-
632
- &::after {
633
- @include minTouchTarget(var(--primer-control-medium-size, 32px), var(--primer-control-medium-size, 32px));
634
- }
635
-
636
- &:checked {
637
- border-color: var(--color-accent-fg);
638
- border-width: var(--base-size-4, 4px);
639
-
640
- &:disabled {
641
- cursor: not-allowed;
642
- border-color: var(--color-primer-fg-disabled);
643
- }
644
- }
645
-
646
- &:focus-visible {
647
- @include focusOutline(2px);
648
- }
649
-
650
- // Windows High Contrast mode
651
- // stylelint-disable primer/colors
652
- @media (forced-colors: active) {
653
- background-color: CanvasText;
654
- border-color: CanvasText;
655
- }
656
- // stylelint-enable primer/colors
657
- }
658
-
659
- @keyframes checkmarkIn {
660
- from {
661
- clip-path: inset(var(--base-size-16, 16px) 0 0 0);
662
- }
663
-
664
- to {
665
- clip-path: inset(0 0 0 0);
666
- }
667
- }
668
-
669
- @keyframes checkmarkOut {
670
- from {
671
- clip-path: inset(0 0 0 0);
672
- }
673
-
674
- to {
675
- clip-path: inset(var(--base-size-16, 16px) 0 0 0);
676
- }
677
- }
1
+ @import '@primer/view-components/app/components/primer/alpha/text_field';
@@ -1,36 +1 @@
1
- // Counters are rounded-corner badges for numbers
2
- .Counter {
3
- display: inline-block;
4
- min-width: $size-2; // makes sure it's a circle with just one digit
5
- // stylelint-disable-next-line primer/spacing
6
- padding: 0 6px;
7
- font-size: $font-size-small;
8
- font-weight: $font-weight-semibold;
9
- // stylelint-disable-next-line primer/typography
10
- line-height: $size-2 - 2px; // remove borders
11
- color: var(--color-fg-default);
12
- text-align: center;
13
- background-color: var(--color-neutral-muted);
14
- border: $border-width $border-style var(--color-counter-border);
15
- // stylelint-disable-next-line primer/borders
16
- border-radius: 2em;
17
-
18
- &:empty {
19
- display: none;
20
- }
21
-
22
- .octicon {
23
- vertical-align: text-top;
24
- opacity: 0.8;
25
- }
26
- }
27
-
28
- .Counter--primary {
29
- color: var(--color-fg-on-emphasis);
30
- background-color: var(--color-neutral-emphasis);
31
- }
32
-
33
- .Counter--secondary {
34
- color: var(--color-fg-muted);
35
- background-color: var(--color-neutral-subtle);
36
- }
1
+ @import '@primer/view-components/app/components/primer/beta/counter';