@coopdigital/styles 0.37.0 → 0.39.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.
@@ -1,8 +1,7 @@
1
1
  .coop-textarea,
2
2
  textarea {
3
- --font-size: var(--text-size-18);
4
- --padding: var(--spacing-14) var(--spacing-12);
5
- --height: var(--spacing-48);
3
+ --padding: calc(var(--field-size) / 2 - 4px) calc(var(--field-size) / 2);
4
+ --height: calc(var(--field-size) + var(--spacing-16));
6
5
 
7
6
  position: relative;
8
7
 
@@ -11,7 +10,8 @@ textarea {
11
10
  width: 100%;
12
11
  min-height: var(--height);
13
12
  padding: var(--padding);
14
- border: 2px solid var(--color-mid-dark-grey);
13
+ border: 2px solid;
14
+ border-color: var(--field-border);
15
15
  border-radius: var(--ui-border-radius-sm);
16
16
 
17
17
  font-size: var(--font-size); // [data-size="md"]
@@ -28,21 +28,6 @@ textarea {
28
28
  transition: opacity 0.2s 0.2s ease-out;
29
29
  }
30
30
 
31
- &[data-size="sm"] {
32
- --height: var(--spacing-40);
33
- --font-size: var(--text-size-16);
34
- }
35
-
36
- &[data-size="lg"] {
37
- --height: var(--spacing-56);
38
- --font-size: var(--text-size-20);
39
- --padding: var(--spacing-14) var(--spacing-16);
40
- }
41
-
42
- &[data-error] {
43
- border-color: var(--color-error-red);
44
- }
45
-
46
31
  &:focus-visible {
47
32
  border-color: var(--color-black);
48
33
 
@@ -65,7 +50,7 @@ textarea {
65
50
  }
66
51
 
67
52
  .coop-textarea-counter {
68
- &[data-error] {
53
+ &[data-error="true"] {
69
54
  font-weight: 500;
70
55
  color: var(--color-error-red);
71
56
  }
package/src/form.scss CHANGED
@@ -1,3 +1,45 @@
1
+ /* Single fields */
2
+
3
+ .coop-field {
4
+ --font-size: var(--text-size-18);
5
+ --field-border: var(--color-mid-dark-grey);
6
+ --field-size: var(--spacing-32);
7
+ --gap: var(--spacing-12);
8
+ --hint-offset: -2px;
9
+
10
+ position: relative;
11
+ display: flex;
12
+ flex-direction: column;
13
+ }
14
+
15
+ /* stylelint-disable no-descending-specificity */
16
+ .coop-field:has(input[data-size="sm"], textarea[data-size="sm"]),
17
+ .coop-fieldset[data-size="sm"] .coop-field {
18
+ --field-size: var(--spacing-24);
19
+ --font-size: var(--text-size-16);
20
+ --hint-offset: 0px;
21
+ }
22
+
23
+ .coop-field:has(input[data-size="lg"], textarea[data-size="lg"]),
24
+ .coop-fieldset[data-size="lg"] .coop-field {
25
+ --field-size: var(--spacing-40);
26
+ --font-size: var(--text-size-20);
27
+ --hint-offset: -4px;
28
+ }
29
+ /* stylelint-enable no-descending-specificity */
30
+
31
+ .coop-field-control {
32
+ position: relative;
33
+ display: flex;
34
+ align-items: center;
35
+ }
36
+
37
+ .coop-field-markers {
38
+ display: flex;
39
+ flex-direction: column;
40
+ flex-grow: 1;
41
+ }
42
+
1
43
  .coop-field-error {
2
44
  display: block;
3
45
  color: var(--color-offer-red);
@@ -8,25 +50,89 @@
8
50
  color: var(--color-text-alt);
9
51
  }
10
52
 
11
- .coop-field-hint:has(+ .coop-form-item),
12
- .coop-field-error:has(+ .coop-form-item) {
13
- margin-bottom: var(--spacing-4);
14
- }
15
-
16
53
  .coop-field-label {
17
- display: block;
54
+ display: flex;
55
+ align-items: center;
56
+
57
+ width: fit-content;
18
58
  padding: 0;
59
+
19
60
  font-weight: var(--font-weight-medium);
20
61
  color: var(--color-text);
62
+
63
+ & > span {
64
+ display: flex;
65
+ gap: var(--spacing-8);
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ }
21
69
  }
22
70
 
23
- .coop-form-item {
24
- display: flex;
25
- flex-direction: column;
26
- gap: var(--spacing-8);
27
- width: 100%;
71
+ /* Field variants */
72
+ /* stylelint-disable no-descending-specificity */
73
+ .coop-field.coop-field-inline {
74
+ .coop-field-markers {
75
+ padding-left: var(--spacing-12);
76
+ }
77
+
78
+ .coop-field-label + .coop-field-hint,
79
+ .coop-field-label + .coop-field-error {
80
+ margin-top: var(--hint-offset);
81
+ }
82
+ }
83
+
84
+ .coop-field:not(.coop-field-inline) {
85
+ .coop-field-control {
86
+ margin-top: var(--spacing-8);
87
+ }
88
+ }
89
+
90
+ .coop-field:has(:checked) {
91
+ --field-border: var(--color-text-black);
92
+ }
93
+
94
+ .coop-fieldset-fields[data-boxed="true"] .coop-field,
95
+ .coop-field[data-boxed="true"] {
96
+ --min-width: 160px;
97
+ --field-border: var(--color-mid-dark-grey);
98
+ --border-width: 2px;
99
+
100
+ padding: 1rem;
101
+ border-radius: var(--ui-border-radius-sm);
102
+ box-shadow: inset 0 0 0 var(--border-width) var(--field-border);
103
+ transition: box-shadow 0.1s ease-out;
104
+
105
+ &:has(:checked),
106
+ &:not(:has(:disabled)):hover {
107
+ --field-border: var(--color-text-black);
108
+ --border-width: 4px;
109
+ }
110
+
111
+ .coop-field-label {
112
+ width: 100%;
113
+ }
114
+
115
+ .coop-field-label > span {
116
+ width: 100%;
117
+ }
118
+ }
119
+
120
+ .coop-fieldset-fields[data-boxed="true"] .coop-field.coop-field-inline,
121
+ .coop-field.coop-field-inline[data-boxed="true"] {
122
+ label > span::after {
123
+ content: "";
124
+
125
+ position: absolute;
126
+ top: -1rem;
127
+ left: -1rem;
128
+
129
+ width: calc(100% + 2rem);
130
+ height: calc(100% + 2rem);
131
+ }
28
132
  }
29
133
 
134
+ /* Fieldsets */
135
+
30
136
  .coop-fieldset {
31
137
  display: flex;
32
138
  flex-direction: column;
@@ -36,38 +142,38 @@
36
142
  padding: 0;
37
143
  border: 0;
38
144
 
39
- legend {
40
- float: left;
145
+ .coop-fieldset-fields {
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: var(--spacing-8) var(--spacing-32);
149
+
150
+ &:not(:first-child) {
151
+ margin-top: var(--spacing-8);
152
+ }
41
153
  }
42
154
 
43
- // Fieldsets do not play nice with flexbox in safari
44
- // So use a margin on direct descendents instead of a gap
45
- & > *:not(:last-child) {
46
- margin-bottom: var(--spacing-8);
155
+ .coop-fieldset-fields[data-orientation="horizontal"] {
156
+ flex-flow: row wrap;
47
157
  }
48
158
  }
49
159
 
50
- .coop-form-item:has(:disabled) {
51
- input,
52
- select,
53
- textarea,
54
- .coop-checkbox-wrapper > *,
55
- .coop-radio-button-wrapper > * {
56
- cursor: not-allowed;
57
- }
160
+ /* Error states */
161
+
162
+ /* prettier-ignore */
163
+ .coop-field:not(.coop-fieldset[data-error="true"] .coop-field, .coop-field[data-hide-error="true"]):is([data-error="true"]),
164
+ .coop-field:not(.coop-fieldset[data-error="true"] .coop-field, .coop-field[data-hide-error="true"]):has(:invalid),
165
+ .coop-fieldset:not([data-hide-error="true"]):is([data-error="true"]) {
166
+ padding-left: var(--spacing-16);
167
+ border-left: 4px solid var(--color-error-red);
58
168
  }
59
169
 
60
- // This block sets all labels, hints and errors to be grey
61
- .coop-form-item:has(:disabled),
62
- .coop-fieldset:disabled {
63
- .coop-field-label,
64
- .coop-field-error,
65
- .coop-field-hint {
66
- color: var(--color-mid-grey);
67
- }
170
+ .coop-field:not(.coop-field-inline):is([data-error="true"]),
171
+ .coop-field:not(.coop-field-inline):has(:invalid),
172
+ .coop-fieldset[data-error="true"] .coop-field:not(.coop-field-inline) {
173
+ --field-border: var(--color-error-red);
68
174
  }
69
175
 
70
- // If the previous behaviour is not desirable, and we want to keep labels black,
176
+ // If the below behaviour is not desirable, and we want to keep labels black,
71
177
  // including those on fieldsets, this version affects only checkbox/radio labels
72
178
  // .coop-form-item:has(:disabled),
73
179
  // .coop-fieldset:disabled {
@@ -77,11 +183,28 @@
77
183
  // }
78
184
  // }
79
185
 
80
- .coop-form-item:not(.coop-fieldset .coop-form-item):has([data-error]),
81
- .coop-form-item:not(.coop-fieldset .coop-form-item):has(:invalid),
82
- .coop-fieldset:is([data-error]),
83
- .coop-fieldset:has([data-error]),
84
- .coop-fieldset:has(:invalid) {
85
- padding-left: var(--spacing-16);
86
- border-left: 4px solid var(--color-error-red);
186
+ /* Disabled states */
187
+
188
+ .coop-field:has(:disabled),
189
+ .coop-fieldset:disabled,
190
+ .coop-fieldset:disabled .coop-field,
191
+ .coop-fieldset-fields[data-boxed] .coop-field:has(:disabled) {
192
+ --field-border: var(--color-mid-light-grey);
193
+ --border-width: 2px;
194
+
195
+ input,
196
+ select,
197
+ textarea,
198
+ label,
199
+ legend,
200
+ input + div:has(label) {
201
+ cursor: not-allowed;
202
+ }
203
+
204
+ .coop-field-label,
205
+ .coop-field-error,
206
+ .coop-field-hint {
207
+ color: var(--color-mid-grey);
208
+ }
87
209
  }
210
+ /* stylelint-enable no-descending-specificity */
package/src/reset.scss CHANGED
@@ -37,9 +37,7 @@ select {
37
37
  }
38
38
 
39
39
  button,
40
- input,
41
- label,
42
- legend {
40
+ input {
43
41
  line-height: 1.1;
44
42
  }
45
43