@jrgermain/stylesheet 0.0.3

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,85 @@
1
+ %flex-layout {
2
+ display: flex;
3
+ gap: var(--space-s);
4
+
5
+ &.densest {
6
+ gap: var(--space-3xs);
7
+ }
8
+
9
+ &.denser {
10
+ gap: var(--space-2xs);
11
+ }
12
+
13
+ &.dense {
14
+ gap: var(--space-xs);
15
+ }
16
+
17
+ &.sparse {
18
+ gap: var(--space-m);
19
+ }
20
+
21
+ &.sparser {
22
+ gap: var(--space-l);
23
+ }
24
+
25
+ &.sparsest {
26
+ gap: var(--space-xl);
27
+ }
28
+
29
+ &.horizontal,
30
+ &.horizontally {
31
+ flex-direction: row;
32
+ }
33
+
34
+ &.vertical,
35
+ &.vertically {
36
+ flex-direction: column;
37
+ }
38
+ }
39
+
40
+ .flow {
41
+ @extend %flex-layout;
42
+
43
+ flex-wrap: wrap;
44
+ align-items: center;
45
+ justify-content: start;
46
+ }
47
+
48
+ .stack {
49
+ @extend %flex-layout;
50
+
51
+ flex-wrap: nowrap;
52
+ align-items: stretch;
53
+ justify-content: start;
54
+ }
55
+
56
+ .separate {
57
+ @extend %flex-layout;
58
+
59
+ flex-wrap: nowrap;
60
+ align-items: center;
61
+ justify-content: space-between;
62
+ }
63
+
64
+ .space {
65
+ @extend %flex-layout;
66
+
67
+ flex-wrap: wrap;
68
+ align-items: center;
69
+ justify-content: space-around;
70
+ }
71
+
72
+ :is(form, .form, .text-container):not(.no-max-width) {
73
+ max-width: 60ch;
74
+ }
75
+
76
+ %visually-hidden {
77
+ clip: rect(1px, 1px, 1px, 1px);
78
+ clip-path: inset(50%);
79
+ height: 1px;
80
+ width: 1px;
81
+ margin: -1px;
82
+ overflow: hidden;
83
+ padding: 0;
84
+ position: absolute;
85
+ }
@@ -0,0 +1,149 @@
1
+ @mixin background {
2
+ border-radius: var(--radius-s);
3
+ border: 0;
4
+ display: block;
5
+ inline-size: 100%;
6
+ block-size: 1em;
7
+ box-shadow: inset 0 0 0 var(--border-s) var(--color-gray-7);
8
+ background: var(--color-gray-8);
9
+ box-sizing: border-box;
10
+ overflow: clip;
11
+ }
12
+
13
+ @mixin value {
14
+ border-radius: var(--radius-s);
15
+ border: var(--border-s) solid transparent;
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ @mixin value-good {
20
+ background: var(--color-green-6);
21
+ border-color: var(--color-green-5);
22
+ }
23
+
24
+ @mixin value-ok {
25
+ background: var(--color-yellow-7);
26
+ border-color: var(--color-yellow-6);
27
+
28
+ @media (prefers-color-scheme: dark) {
29
+ background: var(--color-yellow-4);
30
+ border-color: var(--color-yellow-3);
31
+ }
32
+ }
33
+
34
+ @mixin value-bad {
35
+ background: var(--color-red-6);
36
+ border-color: var(--color-red-5);
37
+ }
38
+
39
+ @mixin value-neutral {
40
+ background: var(--color-blue-6);
41
+ border-color: var(--color-blue-5);
42
+ }
43
+
44
+ @mixin value-indeterminate {
45
+ @include value-neutral;
46
+
47
+ opacity: 0.5;
48
+ inline-size: 100% !important;
49
+ animation: indeterminate-progress 1s linear infinite alternate;
50
+ }
51
+
52
+ @keyframes indeterminate-progress {
53
+ from {
54
+ opacity: 0.2;
55
+ }
56
+
57
+ to {
58
+ opacity: 0.8;
59
+ }
60
+ }
61
+
62
+ meter {
63
+ appearance: none;
64
+ inline-size: 100%;
65
+ block-size: 1em;
66
+ }
67
+
68
+ @supports selector(::-moz-meter-bar) {
69
+ meter {
70
+ @include background;
71
+ }
72
+ }
73
+
74
+ ::-webkit-meter-bar {
75
+ @include background;
76
+ }
77
+
78
+ ::-webkit-meter-optimum-value,
79
+ ::-webkit-meter-suboptimum-value,
80
+ ::-webkit-meter-even-less-good-value {
81
+ @include value;
82
+ }
83
+
84
+ ::-webkit-meter-inner-element {
85
+ display: inline-block;
86
+ position: relative;
87
+ }
88
+
89
+ ::-moz-meter-bar {
90
+ @include value;
91
+ }
92
+
93
+ ::-webkit-meter-optimum-value {
94
+ @include value-good;
95
+ }
96
+
97
+ :-moz-meter-optimum::-moz-meter-bar {
98
+ @include value-good;
99
+ }
100
+
101
+ ::-webkit-meter-suboptimum-value {
102
+ @include value-ok;
103
+ }
104
+
105
+ :-moz-meter-sub-optimum::-moz-meter-bar {
106
+ @include value-ok;
107
+ }
108
+
109
+ ::-webkit-meter-even-less-good-value {
110
+ @include value-bad;
111
+ }
112
+
113
+ :-moz-meter-sub-sub-optimum::-moz-meter-bar {
114
+ @include value-bad;
115
+ }
116
+
117
+ progress {
118
+ appearance: none;
119
+ inline-size: 100%;
120
+ block-size: 1em;
121
+ }
122
+
123
+ @supports selector(::-moz-progress-bar) {
124
+ progress {
125
+ @include background;
126
+ }
127
+ }
128
+
129
+ ::-webkit-progress-bar {
130
+ @include background;
131
+ }
132
+
133
+ ::-webkit-progress-value {
134
+ @include value;
135
+ @include value-neutral;
136
+ }
137
+
138
+ ::-moz-progress-bar {
139
+ @include value;
140
+ @include value-neutral;
141
+ }
142
+
143
+ :indeterminate::-webkit-progress-value {
144
+ @include value-indeterminate;
145
+ }
146
+
147
+ :indeterminate::-moz-progress-bar {
148
+ @include value-indeterminate;
149
+ }
@@ -0,0 +1,96 @@
1
+ @mixin track {
2
+ block-size: 0.25em;
3
+ inline-size: 100%;
4
+ border-radius: var(--radius-full);
5
+ background-color: var(--color-gray-8);
6
+ print-color-adjust: exact;
7
+
8
+ @media (prefers-color-scheme: dark) {
9
+ background-color: var(--color-gray-6);
10
+ }
11
+ }
12
+
13
+ @mixin thumb {
14
+ height: 1.25em;
15
+ width: 1.25em;
16
+ border-radius: var(--radius-full);
17
+ background-color: white;
18
+ box-shadow: var(--shadow-s);
19
+ border: var(--border-s) solid var(--color-outline);
20
+ transition-property: border-color, box-shadow, transform;
21
+ transition-duration: 200ms;
22
+ transition-timing-function: ease;
23
+ }
24
+
25
+ @mixin thumb-active {
26
+ border-color: var(--color-brand-5);
27
+
28
+ &:active {
29
+ @media screen and (resolution >= 2x) {
30
+ transform: scale(0.9);
31
+ }
32
+ }
33
+ }
34
+
35
+ @mixin thumb-focus {
36
+ border-color: var(--color-brand-5);
37
+ box-shadow: 0 0 0 0.2em var(--color-brand-transparent);
38
+ }
39
+
40
+ input[type="range"] {
41
+ font-size: 1rem;
42
+ block-size: 1.25em;
43
+ appearance: none;
44
+ background: transparent;
45
+ cursor: pointer;
46
+
47
+ @media (pointer: coarse) {
48
+ font-size: 1.5rem;
49
+ }
50
+
51
+ &:disabled {
52
+ opacity: 0.5;
53
+ cursor: not-allowed;
54
+ }
55
+
56
+ &:focus-visible {
57
+ outline: 0;
58
+
59
+ &::-webkit-slider-thumb {
60
+ @include thumb-focus;
61
+ }
62
+
63
+ &::-moz-range-thumb {
64
+ @include thumb-focus;
65
+ }
66
+ }
67
+
68
+ &:enabled:active {
69
+ &::-webkit-slider-thumb {
70
+ @include thumb-active;
71
+ }
72
+
73
+ &::-moz-range-thumb {
74
+ @include thumb-active;
75
+ }
76
+ }
77
+
78
+ &::-webkit-slider-runnable-track {
79
+ @include track;
80
+ }
81
+
82
+ &::-moz-range-track {
83
+ @include track;
84
+ }
85
+
86
+ &::-webkit-slider-thumb {
87
+ @include thumb;
88
+
89
+ appearance: none;
90
+ margin-block-start: -0.5em;
91
+ }
92
+
93
+ &::-moz-range-thumb {
94
+ @include thumb;
95
+ }
96
+ }
@@ -0,0 +1,71 @@
1
+ @keyframes skeleton-pulse-light {
2
+ from {
3
+ opacity: 0.14;
4
+ }
5
+
6
+ to {
7
+ opacity: 0.21;
8
+ }
9
+ }
10
+
11
+ @keyframes skeleton-pulse-dark {
12
+ from {
13
+ opacity: 0.28;
14
+ }
15
+
16
+ to {
17
+ opacity: 0.36;
18
+ }
19
+ }
20
+
21
+ .skeleton {
22
+ animation: skeleton-pulse-light 1s ease alternate 0s infinite !important;
23
+ border-radius: var(--radius-s) !important;
24
+ background-color: var(--color-gray-5) !important;
25
+ border: 0 !important;
26
+ outline: 0 !important;
27
+ box-shadow: 0 !important;
28
+ pointer-events: none !important;
29
+ color: transparent !important;
30
+ mask-image: none !important;
31
+ background-image: none !important;
32
+ print-color-adjust: exact;
33
+
34
+ &:is(p, .p, h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
35
+ inline-size: 100%;
36
+ }
37
+
38
+ &:is(
39
+ p,
40
+ .p,
41
+ h1,
42
+ .h1,
43
+ h2,
44
+ .h2,
45
+ h3,
46
+ .h3,
47
+ h4,
48
+ .h4,
49
+ h5,
50
+ .h5,
51
+ h6,
52
+ .h6,
53
+ .chip
54
+ )::before {
55
+ content: ".";
56
+ }
57
+
58
+ &:is(button, .button, .chip):empty {
59
+ min-inline-size: 5em;
60
+ }
61
+
62
+ &::before,
63
+ &::after,
64
+ > * {
65
+ visibility: hidden !important;
66
+ }
67
+
68
+ @media (prefers-color-scheme: dark) {
69
+ animation-name: skeleton-pulse-dark !important;
70
+ }
71
+ }
@@ -0,0 +1,82 @@
1
+ input[type="checkbox"].switch,
2
+ label.switch input[type="checkbox"] {
3
+ font-size: 1rem;
4
+ print-color-adjust: exact;
5
+ appearance: none;
6
+ block-size: 1.8em;
7
+ inline-size: 3em;
8
+ border-radius: var(--radius-full);
9
+ background-color: var(--color-gray-8);
10
+ position: relative;
11
+ flex: none;
12
+ transition-property: background-color, box-shadow, border-color;
13
+ transition-duration: 200ms;
14
+ transition-timing-function: ease;
15
+ border: 0.1em solid var(--color-gray-7);
16
+ cursor: pointer;
17
+
18
+ &.small {
19
+ font-size: 0.8rem;
20
+ }
21
+
22
+ &::after {
23
+ content: "";
24
+ position: absolute;
25
+ height: 1.4em;
26
+ width: 1.4em;
27
+ background-color: white;
28
+ inset-inline-start: 0.1em;
29
+ inset-block-start: 0.1em;
30
+ border-radius: var(--radius-full);
31
+ box-shadow: var(--shadow-s);
32
+ transition-property: border-color, transform;
33
+ transition-duration: 200ms;
34
+ transition-timing-function: ease;
35
+ transform: translateX(0);
36
+ }
37
+
38
+ &:disabled {
39
+ opacity: 0.5;
40
+ cursor: not-allowed;
41
+ }
42
+
43
+ &:is(:focus-visible, .focus) {
44
+ border-color: var(--color-gray-6);
45
+ box-shadow: 0 0 0 0.2em var(--color-gray-transparent);
46
+ outline: 0;
47
+ }
48
+
49
+ &:checked {
50
+ background-color: var(--color-brand-6);
51
+ border-color: var(--color-brand-5);
52
+
53
+ &::after {
54
+ transform: translateX(1.2em);
55
+ }
56
+
57
+ &:is(:focus-visible, .focus) {
58
+ box-shadow: 0 0 0 0.2em var(--color-brand-transparent);
59
+ }
60
+ }
61
+
62
+ &:dir(rtl):checked::after {
63
+ transform: translateX(-1.2em);
64
+ }
65
+
66
+ @media (prefers-color-scheme: dark) {
67
+ background-color: var(--color-gray-5);
68
+
69
+ &:checked {
70
+ background-color: var(--color-brand-5);
71
+ }
72
+ }
73
+ }
74
+
75
+ label.switch {
76
+ inline-size: 100%;
77
+ display: flex;
78
+ align-items: center;
79
+ justify-content: space-between;
80
+ cursor: pointer;
81
+ font-weight: var(--font-weight-semibold);
82
+ }
@@ -0,0 +1,82 @@
1
+ @use "./text";
2
+
3
+ table {
4
+ --table-bg-odd: var(--color-body-alt);
5
+ --table-bg-even: var(--color-body);
6
+ --table-vertical-border: var(--border-s);
7
+
8
+ background-color: var(--color-body-alt);
9
+ border-collapse: separate;
10
+ border-spacing: 0;
11
+ font-size: var(--font-size-m);
12
+ border: var(--border-s) solid var(--color-outline);
13
+ border-radius: var(--radius-s);
14
+ color: var(--color-body-text);
15
+
16
+ &.subtle {
17
+ --table-bg-odd: transparent;
18
+ --table-bg-even: transparent;
19
+ --table-vertical-border: 0;
20
+
21
+ border: 0;
22
+ }
23
+
24
+ &.dense :is(th, td) {
25
+ padding: var(--space-3xs) var(--space-2xs);
26
+ }
27
+
28
+ &.sparse :is(th, td) {
29
+ padding: var(--space-xs) var(--space-s);
30
+ }
31
+ }
32
+
33
+ caption {
34
+ @extend %h5;
35
+
36
+ text-align: unset;
37
+ margin: 0 0 var(--space-2xs);
38
+ }
39
+
40
+ th,
41
+ td {
42
+ padding: var(--space-2xs) var(--space-xs);
43
+ }
44
+
45
+ th,
46
+ tfoot td {
47
+ font-weight: var(--font-weight-bold);
48
+ text-align: center;
49
+ }
50
+
51
+ th {
52
+ border-block-end: var(--border-m) solid var(--color-outline);
53
+ }
54
+
55
+ tfoot td {
56
+ border-block-start: var(--border-m) solid var(--color-outline);
57
+ }
58
+
59
+ td {
60
+ text-align: unset;
61
+ }
62
+
63
+ :is(th, tfoot td):not(:last-of-type) {
64
+ border-inline-end: var(--table-vertical-border) dashed var(--color-outline);
65
+ }
66
+
67
+ td:not(tfoot td, :last-of-type) {
68
+ border-inline-end: var(--table-vertical-border) solid var(--color-outline);
69
+ }
70
+
71
+ tr:not(:last-of-type) td {
72
+ border-block-end: var(--border-s) solid var(--color-outline);
73
+ }
74
+
75
+ tbody tr:nth-child(odd),
76
+ tbody:has(tr:last-of-type:nth-child(even)) + tfoot tr {
77
+ background-color: var(--table-bg-even);
78
+ }
79
+
80
+ tbody tr:nth-child(even) {
81
+ background-color: var(--table-bg-odd);
82
+ }