opui-css 3.3.0 → 3.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opui-css",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,225 +1,225 @@
1
+ @layer components.root {
2
+ :where(.switch) {
3
+ --_accent-color: var(--primary);
4
+ --_accent-contrast: var(--primary-contrast);
1
5
 
6
+ --_dot-bg-color: light-dark(var(--gray-11), var(--gray-14));
7
+ --_dot-inset: var(--size-1) auto auto var(--size-1);
8
+ --_dot-outline-size: 0;
9
+ --_dot-size: var(--size-3);
2
10
 
11
+ --_track-bg-color: light-dark(var(--gray-3), var(--gray-8));
12
+ --_track-height: var(--size-5);
13
+ --_track-width: var(--size-8);
14
+ --_transition-tf: var(--ease-4);
15
+ --_transition-time: 0.2s;
3
16
 
17
+ align-items: center;
18
+ color: var(--text-color-1);
19
+ display: inline-grid;
20
+ gap: 0 var(--size-2);
21
+ grid-auto-columns: auto;
22
+ grid-auto-flow: column;
23
+ inline-size: fit-content;
4
24
 
25
+ input[type="checkbox"][role="switch"] {
26
+ appearance: none;
27
+ block-size: var(--_track-height);
28
+ cursor: pointer;
29
+ inline-size: var(--_track-width);
30
+ margin: 0;
31
+ position: relative;
5
32
 
33
+ /* Track */
34
+ &::before {
35
+ background-color: var(--_track-bg-color);
36
+ block-size: var(--_track-height);
37
+ border: 1px solid var(--_dot-bg-color);
38
+ border-radius: 100vmax;
39
+ content: "";
40
+ inline-size: var(--_track-width);
41
+ inset: 0;
42
+ position: absolute;
43
+ }
6
44
 
45
+ &:focus-visible {
46
+ outline-offset: 2px;
47
+ outline: 2px solid currentColor;
48
+ }
7
49
 
50
+ /* Dot */
51
+ &::after {
52
+ background-color: var(--_dot-bg-color);
53
+ block-size: var(--_dot-size);
54
+ border-radius: 100vmax;
55
+ content: "";
56
+ inline-size: var(--_dot-size);
57
+ inset: var(--_dot-inset);
58
+ outline-offset: -1px;
59
+ outline: var(--_dot-outline-size) solid var(--_dot-bg-color);
60
+ position: absolute;
61
+ }
8
62
 
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
- --_dot-outline-size: calc(var(--size-1) + 1px);
32
- background-color var(--_transition-time) var(--_transition-tf),
63
+ /* Checked */
64
+ &:checked {
65
+ &::before {
66
+ background-color: var(--_accent-color);
67
+ border-color: var(--_accent-color);
68
+ transition:
33
69
  background-color var(--_transition-time) var(--_transition-tf),
34
70
  border-color var(--_transition-time) var(--_transition-tf);
35
- border-color var(--_transition-time) var(--_transition-tf);
36
- var(--_track-width) - var(--_dot-size) - var(--size-1)
71
+ }
72
+
73
+ /* Dot */
74
+ &::after {
37
75
  --_dot-bg-color: var(--_accent-contrast);
38
76
  --_dot-outline-size: calc(var(--size-1) - 1px);
39
- --_dot-outline-size: calc(var(--size-1) + 1px);
40
- );
41
- }
42
- &:active:after {
43
- background-color: var(--_accent-color);
44
- border-color: var(--_accent-color);
45
- display: block;
46
- display: none;
77
+
47
78
  inset-inline-start: calc(
48
- margin-inline-start: var(--size-1);
49
- transition:
50
- transition:
51
- transition: all var(--_transition-time) var(--_transition-tf);
52
- var(--_track-width) - var(--_dot-size) - var(--size-1)
53
- .icon-checked {
54
- .icon-unchecked {
55
- );
56
- }
57
- }
79
+ var(--_track-width) - var(--_dot-size) - var(--size-1)
80
+ );
58
81
  }
82
+ }
83
+
84
+ /* Animation */
85
+ @media (prefers-reduced-motion: no-preference) {
86
+ /* Track */
87
+ &::before {
88
+ transition:
89
+ background-color var(--_transition-time) var(--_transition-tf),
90
+ border-color var(--_transition-time) var(--_transition-tf);
59
91
  }
92
+
93
+ /* Dot */
94
+ &::after {
95
+ transition: all var(--_transition-time) var(--_transition-tf);
60
96
  }
97
+
98
+ &:active:after {
99
+ --_dot-outline-size: calc(var(--size-1) + 1px);
61
100
  }
101
+
102
+ &:checked {
103
+ &:active:after {
104
+ --_dot-outline-size: calc(var(--size-1) + 1px);
105
+ }
62
106
  }
107
+ }
108
+ }
109
+
110
+ /* Icons */
111
+ &:has(.icon-checked, .icon-unchecked) {
112
+ [role="switch"] {
113
+ grid-column: 1 / -1;
114
+ grid-row: 1;
115
+ }
116
+
117
+ &:has([role="switch"]:checked) {
118
+ .icon-unchecked {
119
+ display: none;
63
120
  }
121
+ .icon-checked {
122
+ display: block;
64
123
  }
65
- /* Dot */
66
- /* Dot */
67
- /* Track */
68
- &::after {
69
- &::after {
70
- &::before {
71
- &::before {
72
- &:active:after {
73
- &:checked {
74
- &.icon-checked {
75
- background-color: var(--_dot-bg-color);
76
- background-color: var(--_track-bg-color);
77
- block-size: var(--_dot-size);
78
- block-size: var(--_track-height);
79
- border-radius: 100vmax;
80
- border-radius: 100vmax;
81
- border-radius: var(--radius-round);
82
- border: 1px solid var(--_dot-bg-color);
83
- color: var(--color-9);
84
- color: var(--red);
85
- content: "";
86
- content: "";
87
- content: "*";
88
- cursor: not-allowed;
124
+ }
125
+
126
+ .icon-checked {
89
127
  display: none;
90
- grid-column: 1 / -1;
128
+ }
129
+
130
+ svg {
91
131
  grid-column: 1;
92
- grid-column: 1/-1;
93
- grid-column: 1/-1;
94
- grid-row: 1;
95
132
  grid-row: 1;
96
- grid-row: 2;
97
- grid-row: 3;
98
- inline-size: var(--_dot-size);
99
133
  inline-size: var(--_dot-size);
100
- inline-size: var(--_track-width);
101
- inset: 0 -0.25ex auto auto;
102
- inset: 0;
103
- inset: var(--_dot-inset);
104
- margin-block-start: var(--size-1);
105
134
  margin-inline-start: calc(
106
- outline-offset: -1px;
107
- outline-offset: 2px;
108
- outline: 2px solid currentColor;
109
- outline: 2px solid var(--color-9);
110
- outline: var(--_dot-outline-size) solid var(--_dot-bg-color);
111
- padding-inline: 1ex;
135
+ var(--_track-width) - var(--_dot-size) - var(--size-1)
136
+ );
112
137
  pointer-events: none;
113
- position: absolute;
114
- position: absolute;
115
- position: absolute;
116
138
  z-index: 1;
117
- --_dot-size: 0.75rem;
118
- --_track-height: var(--size-4);
119
- --_track-width: 2.5rem;
120
- .icon-checked {
121
- .label {
122
- .label,
123
- .label:after {
124
- .supporting-text {
125
- .supporting-text {
126
- [role="switch"] {
127
- }
128
- }
129
- }
130
- }
131
- }
132
- }
133
- }
134
- }
135
- }
136
- }
137
- }
138
- }
139
- }
139
+
140
+ &.icon-checked {
141
+ margin-inline-start: var(--size-1);
142
+ }
140
143
  }
144
+ }
145
+
146
+ /* Required dot */
147
+ &:has([required]:not(:checked)) {
148
+ .label:after {
149
+ color: var(--red);
150
+ content: "*";
151
+ inset: 0 -0.25ex auto auto;
152
+ position: absolute;
141
153
  }
142
- @media (prefers-reduced-motion: no-preference) {
143
- /* Animation */
144
- /* Checked */
145
- /* Dot */
146
- /* Track */
147
- &::after {
148
- &::before {
149
- &:checked {
150
- &:focus-visible {
151
- &:has([role="switch"]:checked) {
152
- appearance: none;
153
- block-size: var(--_track-height);
154
- color: var(--text-color-2);
154
+ }
155
+
156
+ /* Disabled */
157
+ &:has([disabled]) {
155
158
  cursor: not-allowed;
156
- cursor: pointer;
157
- font-size: var(--font-size-xs);
158
- grid-auto-columns: unset;
159
- grid-column: 2;
159
+ opacity: 0.64;
160
+ user-select: none;
161
+
162
+ input {
163
+ cursor: not-allowed;
164
+ }
165
+ }
166
+
167
+ /* Label */
168
+ .label {
160
169
  grid-column: 2;
161
170
  grid-row: 1;
162
- grid-row: 2;
163
- inline-size: var(--_track-width);
164
- input {
165
- input {
166
- justify-items: center;
167
- line-height: 1.5;
168
- margin: 0;
169
171
  min-width: 0;
170
- opacity: 0.64;
171
172
  padding-inline: 0 1ex;
172
173
  position: relative;
173
- position: relative;
174
- svg {
175
- user-select: none;
176
174
  user-select: none;
177
- z-index: 1;
178
- --_accent-color: var(--primary);
179
- --_accent-contrast: var(--primary-contrast);
180
- --_dot-bg-color: light-dark(var(--gray-11), var(--gray-14));
181
- --_dot-inset: var(--size-1) auto auto var(--size-1);
182
- --_dot-outline-size: 0;
183
- --_dot-size: var(--size-3);
184
- --_track-bg-color: light-dark(var(--gray-3), var(--gray-8));
185
- --_track-height: var(--size-5);
186
- --_track-width: var(--size-8);
187
- --_transition-tf: var(--ease-4);
188
- --_transition-time: 0.2s;
189
- .label {
190
- .supporting-text {
191
- }
192
- }
193
- }
194
- }
195
- }
196
- }
197
- }
198
175
  }
176
+
177
+ /* Supporting text */
178
+ .supporting-text {
179
+ color: var(--text-color-2);
180
+ font-size: var(--font-size-xs);
181
+ grid-column: 2;
182
+ grid-row: 2;
183
+ line-height: 1.5;
184
+ z-index: 1;
199
185
  }
200
- /* Disabled */
201
- /* Icons */
202
- /* Label */
203
- /* Required dot */
186
+
204
187
  /* Size */
188
+ &.small {
189
+ --_dot-size: 0.75rem;
190
+ --_track-height: var(--size-4);
191
+ --_track-width: 2.5rem;
192
+ }
193
+
205
194
  /* Stacked layout */
206
- /* Supporting text */
195
+ &.stack {
196
+ justify-items: center;
197
+ grid-auto-columns: unset;
198
+
199
+ .label {
200
+ grid-column: 1/-1;
201
+ grid-row: 2;
202
+ margin-block-start: var(--size-1);
203
+ padding-inline: 1ex;
204
+ }
205
+
206
+ .supporting-text {
207
+ grid-column: 1/-1;
208
+ grid-row: 3;
209
+ }
210
+ }
211
+
207
212
  /* Validation */
208
- &:has(.icon-checked, .icon-unchecked) {
209
- &:has([disabled]) {
210
- &:has([required]:not(:checked)) {
211
213
  &.error {
212
- &.small {
213
- &.stack {
214
- align-items: center;
215
- color: var(--text-color-1);
216
- display: inline-grid;
217
- gap: 0 var(--size-2);
218
- grid-auto-columns: auto;
219
- grid-auto-flow: column;
220
- inline-size: fit-content;
221
- input[type="checkbox"][role="switch"] {
222
- :where(.switch) {
214
+ input {
215
+ outline: 2px solid var(--color-9);
216
+ border-radius: var(--radius-round);
217
+ }
218
+
219
+ .label,
220
+ .supporting-text {
221
+ color: var(--color-9);
222
+ }
223
+ }
223
224
  }
224
225
  }
225
- @layer components.root {