@jrgermain/stylesheet 0.5.1 → 0.6.1

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.
@@ -1,4 +1,9 @@
1
1
  .button {
2
+ --button-fg-color: var(--color-body-text);
3
+ --button-bg-color: var(--color-gray-9);
4
+ --button-border-color: var(--color-gray-8);
5
+ --button-font-weight: var(--font-weight-normal);
6
+ --button-focus-ring-color: var(--color-gray-extra-transparent);
2
7
  --button-shadow: var(--shadow-s);
3
8
  --button-hover-bg-color: var(--button-border-color);
4
9
 
@@ -11,8 +16,8 @@
11
16
  border-style: solid;
12
17
  transform: scale(1);
13
18
  transition-property: box-shadow, background-color, transform, opacity;
14
- transition-duration: 200ms;
15
- transition-timing-function: ease;
19
+ transition-duration: var(--duration-medium);
20
+ transition-timing-function: var(--ease-default);
16
21
  text-decoration: none;
17
22
  position: relative;
18
23
  align-items: center;
@@ -28,6 +33,10 @@
28
33
  box-shadow: var(--button-shadow);
29
34
  user-select: none;
30
35
  font-size: 1rem;
36
+ color: var(--button-fg-color);
37
+ background-color: var(--button-bg-color);
38
+ border-color: var(--button-border-color);
39
+ font-weight: var(--button-font-weight);
31
40
 
32
41
  &::before {
33
42
  content: "";
@@ -36,8 +45,8 @@
36
45
  inset: 0;
37
46
  margin: auto;
38
47
  transition-property: opacity, width, height, border-radius;
39
- transition-duration: 200ms;
40
- transition-timing-function: ease;
48
+ transition-duration: var(--duration-medium);
49
+ transition-timing-function: var(--ease-default);
41
50
  z-index: -1;
42
51
  border-radius: 2em;
43
52
  width: 4em;
@@ -80,11 +89,6 @@
80
89
  }
81
90
  }
82
91
 
83
- color: var(--button-fg-color);
84
- background-color: var(--button-bg-color);
85
- border-color: var(--button-border-color);
86
- font-weight: var(--button-font-weight);
87
-
88
92
  &.primary {
89
93
  --button-fg-color: white;
90
94
  --button-bg-color: var(--color-brand-5);
@@ -145,18 +149,22 @@
145
149
  --button-border-color: var(--color-gray-4);
146
150
  --button-focus-ring-color: var(--color-gray-transparent);
147
151
  }
148
- }
149
152
 
150
- /* .secondary, default */
151
- &:not(.primary, .subtle, .close, .dismiss) {
152
- --button-fg-color: var(--color-body-text);
153
- --button-bg-color: var(--color-gray-9);
154
- --button-border-color: var(--color-gray-8);
155
- --button-font-weight: var(--font-weight-normal);
156
- --button-focus-ring-color: var(--color-gray-extra-transparent);
153
+ &.black {
154
+ --button-bg-color: black;
155
+ --button-border-color: #3d3d3d;
156
+ --button-focus-ring-color: var(--color-gray-transparent);
157
+ }
158
+
159
+ &.white {
160
+ --button-fg-color: black;
161
+ --button-bg-color: white;
162
+ --button-border-color: #d0d0d0;
163
+ --button-focus-ring-color: var(--color-gray-transparent);
164
+ }
157
165
  }
158
166
 
159
- &:is(.subtle, .close) {
167
+ &.subtle {
160
168
  --button-fg-color: var(--color-brand-4);
161
169
  --button-bg-color: transparent;
162
170
  --button-border-color: transparent;
@@ -242,17 +250,30 @@
242
250
  }
243
251
  }
244
252
 
245
- &.gray {
246
- --button-fg-color: var(--color-gray-4);
253
+ &.gray,
254
+ &.black,
255
+ &.white {
247
256
  --button-hover-bg-color: var(--color-gray-extra-transparent);
248
257
 
249
258
  &:is(:focus-visible, .focus) {
250
259
  --button-bg-color: var(--color-gray-transparent);
251
260
  }
252
261
  }
262
+
263
+ &.gray {
264
+ --button-fg-color: var(--color-gray-4);
265
+ }
266
+
267
+ &.black {
268
+ --button-fg-color: black;
269
+ }
270
+
271
+ &.white {
272
+ --button-fg-color: white;
273
+ }
253
274
  }
254
275
 
255
- &:is(.small, .close, .dismiss) {
276
+ &.small {
256
277
  font-size: 0.8rem;
257
278
  }
258
279
 
@@ -260,13 +281,15 @@
260
281
  font-size: 1.2rem;
261
282
  }
262
283
 
263
- &:is(.icon, .close, .dismiss) {
284
+ &.icon {
264
285
  border-radius: var(--radius-full);
265
286
  min-width: 0;
266
287
  min-height: 0;
267
288
  aspect-ratio: 1;
289
+ padding: 0.5em;
268
290
 
269
- &:is(.subtle, .close) {
291
+ /* Subtle icon buttons use normal pseudo element hover effect */
292
+ &.subtle {
270
293
  &::before {
271
294
  width: 75%;
272
295
  height: 75%;
@@ -279,16 +302,8 @@
279
302
  }
280
303
  }
281
304
 
282
- &.icon {
283
- padding: 0.5em;
284
- }
285
-
286
- &.close,
287
- &.dismiss {
288
- padding: 0.3em;
289
- }
290
-
291
- &:not(.subtle, .close, .dismiss) {
305
+ /* Normal icon buttons just change background color */
306
+ &:not(.subtle) {
292
307
  &::before {
293
308
  content: unset;
294
309
  }
@@ -33,6 +33,10 @@
33
33
  display: block;
34
34
  }
35
35
 
36
+ .card-title[href] {
37
+ text-decoration-color: var(--color-brand-transparent);
38
+ }
39
+
36
40
  .card.secondary .card-title {
37
41
  font-size: var(--font-size-m);
38
42
  margin-block-end: var(--space-2xs);
@@ -1,12 +1,8 @@
1
1
  .chip {
2
2
  --chip-fg-color: white;
3
3
  --chip-bg-color: var(--color-brand-6);
4
- --chip-border-color: light-dark(var(--color-brand-7), var(--color-brand-5));
4
+ --chip-border-color: var(--color-brand-5);
5
5
  --chip-focus-color: var(--color-brand-transparent);
6
- --chip-bg-color-active: light-dark(
7
- var(--color-brand-5),
8
- var(--color-brand-7)
9
- );
10
6
 
11
7
  display: inline-flex;
12
8
  align-items: center;
@@ -21,26 +17,24 @@
21
17
  color: var(--chip-fg-color);
22
18
  flex-shrink: 0;
23
19
  cursor: default;
24
- transition-property: box-shadow, background-color, border-color;
25
- transition-duration: 200ms;
26
- transition-timing-function: ease;
20
+ transition-property: box-shadow, background-color, border-color, transform;
21
+ transition-duration: var(--duration-medium);
22
+ transition-timing-function: var(--ease-default);
27
23
  text-decoration: none;
28
24
  appearance: none;
29
25
  line-height: 1.2;
30
26
 
31
- &:is(:focus-visible, .focus) {
32
- box-shadow: 0 0 0 0.2em var(--chip-focus-color);
33
- }
34
-
35
27
  &.clickable {
36
28
  cursor: pointer;
37
29
  box-shadow: var(--shadow-s);
30
+ transform: scale(1);
38
31
 
39
32
  &:is(:focus-visible, .focus) {
40
33
  outline: 0;
41
34
  box-shadow:
42
35
  var(--shadow-s),
43
- 0 0 0 0.2em var(--chip-focus-color);
36
+ 0 0 0 0.1em var(--chip-border-color),
37
+ 0 0 0 calc(0.2em + var(--border-s)) var(--chip-focus-color);
44
38
  }
45
39
 
46
40
  &:is(:hover, .hover) {
@@ -48,145 +42,102 @@
48
42
  }
49
43
 
50
44
  &:is(:active, .active) {
51
- background-color: var(--chip-bg-color-active);
52
- border-color: var(--chip-bg-color-active);
45
+ transform: scale(0.96);
46
+
47
+ /*
48
+ * On low-resolution screens, the scale effect makes text jump
49
+ * around awkwardly, so we use an alternative.
50
+ */
51
+ @media screen and (resolution < 2x) {
52
+ transform: translateY(1px);
53
+ }
53
54
  }
54
55
  }
55
56
 
56
57
  &.red {
57
58
  --chip-bg-color: var(--color-red-6);
58
- --chip-border-color: light-dark(var(--color-red-7), var(--color-red-5));
59
+ --chip-border-color: var(--color-red-5);
59
60
  --chip-focus-color: var(--color-red-transparent);
60
- --chip-bg-color-active: light-dark(var(--color-red-5), var(--color-red-7));
61
61
  }
62
62
 
63
63
  &.orange {
64
64
  --chip-bg-color: var(--color-orange-6);
65
- --chip-border-color: light-dark(
66
- var(--color-orange-7),
67
- var(--color-orange-5)
68
- );
65
+ --chip-border-color: var(--color-orange-5);
69
66
  --chip-focus-color: var(--color-orange-transparent);
70
- --chip-bg-color-active: light-dark(
71
- var(--color-orange-5),
72
- var(--color-orange-7)
73
- );
74
67
  }
75
68
 
76
69
  &.yellow {
77
70
  --chip-bg-color: var(--color-yellow-6);
78
- --chip-border-color: light-dark(
79
- var(--color-yellow-7),
80
- var(--color-yellow-5)
81
- );
71
+ --chip-border-color: var(--color-yellow-5);
82
72
  --chip-focus-color: var(--color-yellow-transparent);
83
- --chip-bg-color-active: light-dark(
84
- var(--color-yellow-5),
85
- var(--color-yellow-7)
86
- );
87
73
  }
88
74
 
89
75
  &.green {
90
76
  --chip-bg-color: var(--color-green-6);
91
- --chip-border-color: light-dark(var(--color-green-7), var(--color-green-5));
77
+ --chip-border-color: var(--color-green-5);
92
78
  --chip-focus-color: var(--color-green-transparent);
93
- --chip-bg-color-active: light-dark(
94
- var(--color-green-5),
95
- var(--color-green-7)
96
- );
97
79
  }
98
80
 
99
81
  &.sky {
100
82
  --chip-bg-color: var(--color-sky-6);
101
- --chip-border-color: light-dark(var(--color-sky-7), var(--color-sky-5));
83
+ --chip-border-color: var(--color-sky-5);
102
84
  --chip-focus-color: var(--color-sky-transparent);
103
- --chip-bg-color-active: light-dark(var(--color-sky-5), var(--color-sky-7));
104
85
  }
105
86
 
106
87
  &.blue {
107
88
  --chip-bg-color: var(--color-blue-6);
108
- --chip-border-color: light-dark(var(--color-blue-7), var(--color-blue-5));
89
+ --chip-border-color: var(--color-blue-5);
109
90
  --chip-focus-color: var(--color-blue-transparent);
110
- --chip-bg-color-active: light-dark(
111
- var(--color-blue-5),
112
- var(--color-blue-7)
113
- );
114
91
  }
115
92
 
116
93
  &.purple {
117
94
  --chip-bg-color: var(--color-purple-6);
118
- --chip-border-color: light-dark(
119
- var(--color-purple-7),
120
- var(--color-purple-5)
121
- );
95
+ --chip-border-color: var(--color-purple-5);
122
96
  --chip-focus-color: var(--color-purple-transparent);
123
- --chip-bg-color-active: light-dark(
124
- var(--color-purple-5),
125
- var(--color-purple-7)
126
- );
127
97
  }
128
98
 
129
99
  &.magenta {
130
100
  --chip-bg-color: var(--color-magenta-6);
131
- --chip-border-color: light-dark(
132
- var(--color-magenta-7),
133
- var(--color-magenta-5)
134
- );
101
+ --chip-border-color: var(--color-magenta-5);
135
102
  --chip-focus-color: var(--color-magenta-transparent);
136
- --chip-bg-color-active: light-dark(
137
- var(--color-magenta-5),
138
- var(--color-magenta-7)
139
- );
140
103
  }
141
104
 
142
105
  &.gray {
143
106
  --chip-bg-color: var(--color-gray-6);
144
- --chip-border-color: light-dark(var(--color-gray-7), var(--color-gray-5));
107
+ --chip-border-color: var(--color-gray-5);
145
108
  --chip-focus-color: var(--color-gray-transparent);
146
- --chip-bg-color-active: light-dark(
147
- var(--color-gray-5),
148
- var(--color-gray-7)
149
- );
150
109
  }
151
110
 
152
111
  &.black {
153
112
  --chip-bg-color: black;
154
- --chip-border-color: light-dark(var(--color-gray-4), var(--color-gray-7));
113
+ --chip-border-color: #3d3d3d;
155
114
  --chip-focus-color: var(--color-gray-transparent);
156
- --chip-bg-color-active: light-dark(
157
- var(--color-gray-1),
158
- var(--color-gray-8)
159
- );
160
115
  }
161
116
 
162
117
  &.white {
163
118
  --chip-fg-color: black;
164
119
  --chip-bg-color: white;
165
- --chip-border-color: light-dark(var(--color-gray-8), var(--color-gray-2));
120
+ --chip-border-color: #d0d0d0;
166
121
  --chip-focus-color: var(--color-gray-transparent);
167
- --chip-bg-color-active: light-dark(
168
- var(--color-gray-7),
169
- var(--color-gray-3)
170
- );
171
122
  }
172
123
  }
173
124
 
174
125
  .chip-delete {
175
- outline: 0;
126
+ outline: 1px solid transparent;
176
127
  margin-inline: var(--space-3xs) calc(-1 * var(--space-2xs));
177
128
  font-size: 0.6em;
178
- border: var(--border-s) solid var(--chip-border-color);
129
+ border: 0;
179
130
  border-radius: var(--radius-full);
180
- transition-property: background-color, border-color;
181
- transition-duration: 200ms;
182
- transition-timing-function: ease;
131
+ transition-property: background-color, outline-color, filter;
132
+ transition-duration: var(--duration-short);
133
+ transition-timing-function: var(--ease-default);
183
134
  position: relative;
184
135
  overflow: hidden;
185
136
  cursor: pointer;
186
137
  height: 2em;
187
138
  width: 2em;
188
139
  user-select: none;
189
- background-color: #0002;
140
+ background-color: var(--chip-border-color);
190
141
  padding: 0;
191
142
  display: inline-flex;
192
143
  box-shadow: none;
@@ -204,14 +155,14 @@
204
155
  }
205
156
 
206
157
  &:is(:focus-visible, .focus) {
207
- border-color: var(--chip-fg-color);
158
+ outline-color: var(--chip-fg-color);
208
159
  }
209
160
 
210
- &:is(:hover, .hover, :focus-visible, .focus) {
211
- background-color: #0001;
161
+ &:is(:hover, .hover) {
162
+ background-color: hsl(from var(--chip-border-color) h s calc(l + 5));
212
163
  }
213
164
 
214
165
  &:is(:active, .active) {
215
- background-color: #0003;
166
+ background-color: hsl(from var(--chip-border-color) h s calc(l - 20));
216
167
  }
217
168
  }
@@ -9,9 +9,9 @@
9
9
  gap: var(--field-gap);
10
10
  color: var(--color-body-text);
11
11
  font-weight: var(--font-weight-semibold);
12
- transition-duration: 200ms;
13
12
  transition-property: color, box-shadow;
14
- transition-timing-function: ease;
13
+ transition-duration: var(--duration-medium);
14
+ transition-timing-function: var(--ease-default);
15
15
  font-size: var(--font-size-m);
16
16
  font-family: var(--font-family-body);
17
17
 
@@ -32,7 +32,7 @@
32
32
  color: var(--color-red-5);
33
33
 
34
34
  .error-message {
35
- opacity: 1;
35
+ display: flex;
36
36
  }
37
37
  }
38
38
 
@@ -59,9 +59,9 @@
59
59
  font-size: 1em;
60
60
  padding: var(--field-padding);
61
61
  border-radius: var(--field-radius);
62
- transition-duration: 200ms;
63
62
  transition-property: color, box-shadow, border-color;
64
- transition-timing-function: ease;
63
+ transition-duration: var(--duration-medium);
64
+ transition-timing-function: var(--ease-default);
65
65
  font-family: inherit;
66
66
 
67
67
  &:focus {
@@ -134,7 +134,8 @@
134
134
  }
135
135
  }
136
136
 
137
- select {
137
+ select,
138
+ input[list] {
138
139
  background-image: light-dark(
139
140
  url("@/src/svg/dropdown.svg"),
140
141
  url("@/src/svg/dropdown-invert.svg")
@@ -142,7 +143,6 @@
142
143
  background-position: center right 0.25em;
143
144
  background-size: auto 75%;
144
145
  background-repeat: no-repeat;
145
- cursor: pointer;
146
146
  appearance: none;
147
147
  padding-inline-end: calc(2 * var(--space-2xs) + 1em);
148
148
 
@@ -151,6 +151,10 @@
151
151
  }
152
152
  }
153
153
 
154
+ select {
155
+ cursor: pointer;
156
+ }
157
+
154
158
  .help-text {
155
159
  font-size: 0.9em;
156
160
  color: var(--color-body-text-alt);
@@ -159,15 +163,14 @@
159
163
  position: relative;
160
164
  }
161
165
 
166
+ /* Todo glitches */
162
167
  .error-message {
163
- transition: opacity 200ms ease;
164
- opacity: 0;
168
+ display: none;
165
169
  font-size: 0.9em;
166
170
  border: 0;
167
171
  padding: 0;
168
172
  margin: 0;
169
173
  font-weight: var(--font-weight-semibold);
170
- display: flex;
171
174
  align-items: center;
172
175
  gap: 2px;
173
176
 
@@ -244,8 +247,8 @@
244
247
  color: var(--color-brand-3);
245
248
  border-inline-start: 0;
246
249
  transition-property: box-shadow, background-color;
247
- transition-timing-function: ease;
248
- transition-duration: 200ms;
250
+ transition-duration: var(--duration-medium);
251
+ transition-timing-function: var(--ease-default);
249
252
 
250
253
  &:hover {
251
254
  background-color: var(--color-gray-8);
@@ -290,7 +293,7 @@ fieldset.fieldset {
290
293
  legend {
291
294
  font-family: var(--font-family-heading);
292
295
  font-weight: var(--font-weight-bold);
293
- transition: color 200ms ease;
296
+ transition: color var(--duration-medium) var(--ease-default);
294
297
  }
295
298
 
296
299
  &:focus-within legend {
@@ -1,15 +1,15 @@
1
1
  .highlight,
2
2
  .markdown-output mark {
3
- background-color: light-dark(var(--color-yellow-8), var(--color-yellow-7));
4
- color: light-dark(var(--color-yellow-2), var(--color-yellow-1));
3
+ background-color: var(--color-yellow-8);
4
+ color: var(--color-yellow-1);
5
5
  print-color-adjust: exact;
6
6
  }
7
7
 
8
8
  .highlight.removed,
9
9
  .markdown-output del {
10
10
  background-color: var(--color-red-8);
11
- color: var(--color-red-2);
12
- transition: text-decoration-color 150ms ease;
11
+ color: var(--color-red-1);
12
+ transition: text-decoration-color var(--duration-short) var(--ease-default);
13
13
  text-decoration-line: line-through;
14
14
  text-decoration-skip-ink: none;
15
15
  text-decoration-thickness: var(--border-m);
@@ -24,7 +24,7 @@
24
24
  .highlight.added,
25
25
  .markdown-output ins {
26
26
  background-color: var(--color-green-8);
27
- color: var(--color-green-2);
27
+ color: var(--color-green-1);
28
28
  text-decoration-thickness: var(--border-m);
29
29
  text-decoration-color: var(--color-green-4);
30
30
  text-underline-offset: 0.1em;
@@ -34,6 +34,6 @@
34
34
  .highlight.target,
35
35
  ::target-text {
36
36
  background-color: var(--color-brand-8);
37
- color: light-dark(var(--color-brand-2), var(--color-brand-1));
37
+ color: var(--color-brand-1);
38
38
  print-color-adjust: exact;
39
39
  }
@@ -9,7 +9,7 @@
9
9
  text-decoration-thickness: var(--border-m);
10
10
  text-underline-offset: 0.1em;
11
11
  cursor: pointer;
12
- transition: text-decoration-color 200ms ease;
12
+ transition: text-decoration-color var(--duration-short) var(--ease-default);
13
13
 
14
14
  &:is(:hover, .hover) {
15
15
  text-decoration-color: currentcolor;
@@ -65,6 +65,21 @@
65
65
  font-weight: inherit;
66
66
  margin: 0;
67
67
  }
68
+
69
+ .button.dismiss {
70
+ --button-fg-color: var(--color-brand-3);
71
+ --button-hover-bg-color: var(--color-brand-extra-transparent);
72
+
73
+ font-size: 0.8rem;
74
+ width: 2.25rem;
75
+ height: 2.25rem;
76
+ margin: -0.5rem;
77
+ padding: 0.25rem;
78
+
79
+ &:is(:focus-visible, .focus) {
80
+ --button-bg-color: var(--color-brand-transparent);
81
+ }
82
+ }
68
83
  }
69
84
 
70
85
  .modal-body,
@@ -95,23 +110,21 @@ dialog:is(.modal, .drawer)[open]::backdrop {
95
110
  opacity: var(--dialog-backdrop-open-opacity);
96
111
  }
97
112
 
113
+ dialog:is(.modal, .drawer),
114
+ dialog:is(.modal, .drawer)::backdrop {
115
+ transition-property: transform, opacity, display, overlay;
116
+ transition-duration: var(--duration-long);
117
+ transition-timing-function: var(--ease-default);
118
+ transition-behavior: allow-discrete;
119
+ }
120
+
98
121
  dialog:is(.modal, .drawer) {
99
122
  transform: var(--dialog-ending-transform);
100
123
  opacity: var(--dialog-ending-opacity);
101
- transition:
102
- transform 150ms ease,
103
- opacity 150ms ease,
104
- display 150ms ease allow-discrete,
105
- overlay 150ms ease allow-discrete;
106
124
  }
107
125
 
108
126
  dialog:is(.modal, .drawer)::backdrop {
109
127
  opacity: var(--dialog-backdrop-ending-opacity);
110
- transition:
111
- transform 150ms ease,
112
- opacity 150ms ease,
113
- display 150ms ease allow-discrete,
114
- overlay 150ms ease allow-discrete;
115
128
  }
116
129
 
117
130
  @starting-style {
@@ -9,12 +9,26 @@
9
9
  font-size: 0.75rem;
10
10
  width: 3em;
11
11
  height: 3em;
12
+ border-radius: var(--radius-m);
13
+ min-width: 0;
14
+ min-height: 0;
15
+ aspect-ratio: 1;
16
+ padding: 0.3em;
12
17
 
13
18
  &:is(:focus-visible, .focus) {
14
19
  --button-bg-color: var(--color-gray-transparent);
15
20
  --button-hover-bg-color: transparent;
16
21
  }
17
22
 
23
+ /* Don't use pseudo element for hover style */
24
+ &::before {
25
+ content: unset;
26
+ }
27
+
28
+ &:is(:hover, .hover) {
29
+ background-color: var(--button-hover-bg-color);
30
+ }
31
+
18
32
  &::after {
19
33
  content: "";
20
34
  width: 1.8em;
@@ -8,7 +8,7 @@
8
8
  padding: var(--space-xs);
9
9
  border-radius: var(--radius-m);
10
10
  border: 0.25em solid var(--color-brand-4);
11
- color: var(--color-body-alt);
11
+ color: white;
12
12
  font-weight: var(--font-weight-bold);
13
13
  font-family: var(--font-family-body);
14
14
  font-size: var(--font-size-m);
@@ -19,7 +19,7 @@
19
19
  text-decoration: none;
20
20
  vertical-align: middle;
21
21
  opacity: 0.25;
22
- transition: opacity 300ms ease;
22
+ transition: opacity var(--duration-medium) var(--ease-default);
23
23
  pointer-events: none;
24
24
  line-height: 1;
25
25