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