contain-css-svelte 1.1.2 → 1.1.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.
@@ -79,7 +79,7 @@ button {
79
79
  font-variant: var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit)));
80
80
  text-align: var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit)));
81
81
  cursor: var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer)));
82
- transition: filter var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--button-transition, var(--clickable-transition, var(--transition, 300ms)));
82
+ transition: filter var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), border-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--button-transition, var(--clickable-transition, var(--transition, 300ms)));
83
83
  }
84
84
 
85
85
  button:hover {
@@ -133,7 +133,7 @@ button.primary {
133
133
  font-variant: var(--primary-font-variant, var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit))));
134
134
  text-align: var(--primary-text-align, var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit))));
135
135
  cursor: var(--primary-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
136
- transition: filter var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
136
+ transition: filter var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--primary-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
137
137
  }
138
138
 
139
139
  button.primary:hover {
@@ -177,7 +177,7 @@ button.warning {
177
177
  font-variant: var(--warning-font-variant, var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit))));
178
178
  text-align: var(--warning-text-align, var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit))));
179
179
  cursor: var(--warning-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
180
- transition: filter var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
180
+ transition: filter var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--warning-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
181
181
  }
182
182
 
183
183
  button.warning:hover {
@@ -221,7 +221,7 @@ button.danger {
221
221
  font-variant: var(--danger-font-variant, var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit))));
222
222
  text-align: var(--danger-text-align, var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit))));
223
223
  cursor: var(--danger-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
224
- transition: filter var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
224
+ transition: filter var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--danger-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
225
225
  }
226
226
 
227
227
  button.danger:hover {
@@ -265,7 +265,7 @@ button.success {
265
265
  font-variant: var(--success-font-variant, var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit))));
266
266
  text-align: var(--success-text-align, var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit))));
267
267
  cursor: var(--success-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
268
- transition: filter var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
268
+ transition: filter var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--success-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
269
269
  }
270
270
 
271
271
  button.success:hover {
@@ -309,7 +309,7 @@ button.info {
309
309
  font-variant: var(--info-font-variant, var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit))));
310
310
  text-align: var(--info-text-align, var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit))));
311
311
  cursor: var(--info-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
312
- transition: filter var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
312
+ transition: filter var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--info-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
313
313
  }
314
314
 
315
315
  button.info:hover {
@@ -89,7 +89,7 @@ a[role=button] {
89
89
  font-variant: var(--button-font-variant, var(--ui-font-variant, var(--control-font-variant, inherit)));
90
90
  text-align: var(--button-text-align, var(--ui-text-align, var(--control-text-align, inherit)));
91
91
  cursor: var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer)));
92
- transition: filter var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--button-transition, var(--clickable-transition, var(--transition, 300ms)));
92
+ transition: filter var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), border-color var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--button-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--button-transition, var(--clickable-transition, var(--transition, 300ms)));
93
93
  }
94
94
 
95
95
  a[role=button]:hover {
@@ -122,29 +122,6 @@ label {
122
122
  box-sizing: border-box;
123
123
  gap: var(--checkbox-space, var(--toggle-space, var(--space-md)));
124
124
  cursor: var(--checkbox-cursor, var(--clickable-cursor, var(--cursor, pointer)));
125
- transition: filter var(--checkbox-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--checkbox-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--checkbox-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--checkbox-transition, var(--clickable-transition, var(--transition, 300ms)));
126
- }
127
-
128
- label:hover {
129
- filter: var(--checkbox-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.05))));
130
- transform: var(--checkbox-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
131
- background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
132
- box-shadow: var(--checkbox-hover-box-shadow, var(--clickable-hover-box-shadow, var(--hover-box-shadow, var(--_box-shadow, none))));
133
- }
134
-
135
- label:active {
136
- filter: var(--checkbox-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
137
- transform: var(--checkbox-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
138
- background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
139
- box-shadow: var(--checkbox-active-box-shadow, var(--clickable-active-box-shadow, var(--active-box-shadow, var(--_box-shadow, none))));
140
- }
141
-
142
- label:disabled {
143
- cursor: var(--checkbox-disabled-cursor, var(--clickable-disabled-cursor, var(--disabled-cursor, not-allowed)));
144
- transform: var(--checkbox-disabled-transform, var(--clickable-disabled-transform, var(--disabled-transform, none)));
145
- filter: var(--checkbox-disabled-filter, var(--clickable-disabled-filter, var(--disabled-filter, grayscale(0.5))));
146
- background-color: color-mix(in oklch, var(--_background-color) var(--disabled-base-color-percentage, 50%), var(--disabled-color-mix, gray) calc(100% - var(--disabled-base-color-percentage, 50%)));
147
- box-shadow: var(--checkbox-disabled-box-shadow, var(--clickable-disabled-box-shadow, var(--disabled-box-shadow, var(--_box-shadow, none))));
148
125
  }
149
126
 
150
127
  label span {
@@ -174,7 +151,7 @@ label:has(input:focus-visible) {
174
151
  }
175
152
 
176
153
  label::before {
177
- transition: all var(--checkbox-transition, var(--transition, control));
154
+ transition: filter var(--checkbox-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), background-color var(--checkbox-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), border-color var(--checkbox-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), box-shadow var(--checkbox-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), transform var(--checkbox-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms)))));
178
155
  display: inline-grid;
179
156
  place-content: center;
180
157
  content: " ";
@@ -191,6 +168,20 @@ label::before {
191
168
  border-radius: var(--checkbox-radius, 0);
192
169
  }
193
170
 
171
+ label:hover::before {
172
+ filter: var(--checkbox-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.05))));
173
+ transform: var(--checkbox-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
174
+ background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
175
+ box-shadow: var(--checkbox-hover-box-shadow, var(--clickable-hover-box-shadow, var(--hover-box-shadow, var(--_box-shadow, none))));
176
+ }
177
+
178
+ label:active::before {
179
+ filter: var(--checkbox-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
180
+ transform: var(--checkbox-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
181
+ background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
182
+ box-shadow: var(--checkbox-active-box-shadow, var(--clickable-active-box-shadow, var(--active-box-shadow, var(--_box-shadow, none))));
183
+ }
184
+
194
185
  label:has(input:checked)::before {
195
186
  --_background-color: var(--checkbox-checked-bg, var(--toggle-on-bg, var(--primary-bg, var(--checkbox-bg, var(--bg, unset)))));
196
187
  --_color: var(--checkbox-checked-fg, var(--toggle-on-fg, var(--primary-fg, var(--checkbox-fg, var(--fg, unset)))));
@@ -202,6 +193,18 @@ label:has(input:checked)::before {
202
193
  box-sizing: border-box;
203
194
  }
204
195
 
196
+ label:has(input:disabled) {
197
+ cursor: not-allowed;
198
+ opacity: var(--checkbox-disabled-opacity, 0.6);
199
+ filter: grayscale(0.2);
200
+ }
201
+
202
+ label:has(input:disabled):hover::before,
203
+ label:has(input:disabled):active::before {
204
+ filter: none;
205
+ box-shadow: none;
206
+ }
207
+
205
208
  label:has(input:checked)::after {
206
209
  content: var(--checkbox-check, "✓");
207
210
  font-size: var(--checkbox-check-size, var(--size, 0.875em));
@@ -63,7 +63,7 @@ button {
63
63
  background-color: var(--_background-color);
64
64
  color: var(--_color);
65
65
  cursor: var(--mini-button-cursor, var(--button-cursor, var(--clickable-cursor, var(--cursor, pointer))));
66
- transition: filter var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
66
+ transition: filter var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), background-color var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), border-color var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), box-shadow var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms)))), transform var(--mini-button-transition, var(--button-transition, var(--clickable-transition, var(--transition, 300ms))));
67
67
  }
68
68
 
69
69
  button:hover {
@@ -100,29 +100,6 @@ label.radio-item {
100
100
  gap: var(--radio-button-space, var(--toggle-space, var(--space-md)));
101
101
  white-space: nowrap;
102
102
  cursor: var(--radio-button-cursor, var(--clickable-cursor, var(--cursor, pointer)));
103
- transition: filter var(--radio-button-transition, var(--clickable-transition, var(--transition, 300ms))), background-color var(--radio-button-transition, var(--clickable-transition, var(--transition, 300ms))), box-shadow var(--radio-button-transition, var(--clickable-transition, var(--transition, 300ms))), transform var(--radio-button-transition, var(--clickable-transition, var(--transition, 300ms)));
104
- }
105
-
106
- label.radio-item:hover {
107
- filter: var(--radio-button-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.05))));
108
- transform: var(--radio-button-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
109
- background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
110
- box-shadow: var(--radio-button-hover-box-shadow, var(--clickable-hover-box-shadow, var(--hover-box-shadow, var(--_box-shadow, none))));
111
- }
112
-
113
- label.radio-item:active {
114
- filter: var(--radio-button-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
115
- transform: var(--radio-button-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
116
- background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
117
- box-shadow: var(--radio-button-active-box-shadow, var(--clickable-active-box-shadow, var(--active-box-shadow, var(--_box-shadow, none))));
118
- }
119
-
120
- label.radio-item:disabled {
121
- cursor: var(--radio-button-disabled-cursor, var(--clickable-disabled-cursor, var(--disabled-cursor, not-allowed)));
122
- transform: var(--radio-button-disabled-transform, var(--clickable-disabled-transform, var(--disabled-transform, none)));
123
- filter: var(--radio-button-disabled-filter, var(--clickable-disabled-filter, var(--disabled-filter, grayscale(0.5))));
124
- background-color: color-mix(in oklch, var(--_background-color) var(--disabled-base-color-percentage, 50%), var(--disabled-color-mix, gray) calc(100% - var(--disabled-base-color-percentage, 50%)));
125
- box-shadow: var(--radio-button-disabled-box-shadow, var(--clickable-disabled-box-shadow, var(--disabled-box-shadow, var(--_box-shadow, none))));
126
103
  }
127
104
 
128
105
  label.radio-item span {
@@ -153,7 +130,7 @@ label.radio-item:has(input:focus-visible) {
153
130
  }
154
131
 
155
132
  label.radio-item::before {
156
- transition: all var(--radio-button-transition, var(--transition, control));
133
+ transition: filter var(--radio-button-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), background-color var(--radio-button-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), border-color var(--radio-button-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), box-shadow var(--radio-button-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), transform var(--radio-button-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms)))));
157
134
  display: inline-grid;
158
135
  place-content: center;
159
136
  content: " ";
@@ -171,6 +148,20 @@ label.radio-item::before {
171
148
  margin-left: var(--radio-button-padding, var(--padding));
172
149
  }
173
150
 
151
+ label.radio-item:hover::before {
152
+ filter: var(--radio-button-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.05))));
153
+ transform: var(--radio-button-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
154
+ background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
155
+ box-shadow: var(--radio-button-hover-box-shadow, var(--clickable-hover-box-shadow, var(--hover-box-shadow, var(--_box-shadow, none))));
156
+ }
157
+
158
+ label.radio-item:active::before {
159
+ filter: var(--radio-button-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
160
+ transform: var(--radio-button-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
161
+ background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
162
+ box-shadow: var(--radio-button-active-box-shadow, var(--clickable-active-box-shadow, var(--active-box-shadow, var(--_box-shadow, none))));
163
+ }
164
+
174
165
  label.radio-item:has(input:checked)::before {
175
166
  --_background-color: var(--radio-button-checked-bg, var(--toggle-on-bg, var(--primary-bg, var(--bg, unset))));
176
167
  --_color: var(--radio-button-checked-fg, var(--toggle-on-fg, var(--primary-fg, var(--fg, unset))));
@@ -182,4 +173,16 @@ label.radio-item:has(input:checked)::before {
182
173
  box-sizing: border-box;
183
174
  width: var(--radio-button-size, var(--toggle-size, var(--font-size, var(--size, 1em))));
184
175
  height: var(--radio-button-size, var(--toggle-size, var(--font-size, var(--size, 1em))));
176
+ }
177
+
178
+ label.radio-item:has(input:disabled) {
179
+ cursor: not-allowed;
180
+ opacity: var(--radio-button-disabled-opacity, 0.6);
181
+ filter: grayscale(0.2);
182
+ }
183
+
184
+ label.radio-item:has(input:disabled):hover::before,
185
+ label.radio-item:has(input:disabled):active::before {
186
+ filter: none;
187
+ box-shadow: none;
185
188
  }</style>
@@ -0,0 +1,168 @@
1
+ <script lang="ts">import { injectVars } from "../util";
2
+ let { checked = $bindable(false), name = "", onLabel, offLabel, children, ...restProps } = $props();
3
+ const style = $derived(injectVars(restProps, "toggle", ["bg", "fg", "padding", "width", "height"]));
4
+ const hasOffLabel = $derived(Boolean(offLabel));
5
+ const hasOnLabel = $derived(Boolean(onLabel || children));
6
+ const effectiveOnLabel = $derived(onLabel || children);
7
+ </script>
8
+
9
+ <label class="toggle" {style}>
10
+ {#if hasOffLabel}
11
+ <span class="toggle-label toggle-label-off">{@render offLabel?.()}</span>
12
+ {/if}
13
+
14
+ <span class="toggle-switch">
15
+ <input
16
+ name={name || undefined}
17
+ type="checkbox"
18
+ bind:checked
19
+ {...restProps}
20
+ />
21
+ <span class="toggle-track" aria-hidden="true">
22
+ <span class="toggle-thumb"></span>
23
+ </span>
24
+ </span>
25
+
26
+ {#if hasOnLabel}
27
+ <span class="toggle-label toggle-label-on"
28
+ >{@render effectiveOnLabel?.()}</span
29
+ >
30
+ {/if}
31
+ </label>
32
+
33
+ <style>/* Warning: because we define a fallback
34
+ media query, the media query can override the container
35
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
36
+ Put min-width queries *after* max-width queries so that smaller
37
+ container queries don't get their styles overridden by large media queries.
38
+ */
39
+ /* Convenience groupings */
40
+ .toggle {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: var(--toggle-space, var(--space-md, 0.5rem));
44
+ user-select: none;
45
+ cursor: var(--toggle-cursor, var(--clickable-cursor, var(--cursor, pointer)));
46
+ font-family: var(--toggle-font-family, var(--ui-font-family, var(--font-family, unset)));
47
+ text-transform: var(--toggle-text-transform, var(--ui-text-transform, var(--text-transform, unset)));
48
+ text-decoration: var(--toggle-text-decoration, var(--ui-text-decoration, var(--text-decoration, unset)));
49
+ --_font-size: var(--toggle-font-size, var(--ui-font-size, var(--font-size, unset)));
50
+ font-size: var(--_font-size);
51
+ font-weight: var(--toggle-font-weight, var(--ui-font-weight, var(--font-weight, unset)));
52
+ line-height: var(--toggle-line-height, var(--ui-line-height, var(--line-height, unset)));
53
+ letter-spacing: var(--toggle-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, unset)));
54
+ --_margin-top: var(--toggle-margin, var(--ui-margin, var(--margin, unset)));
55
+ --_margin-top: var(--toggle-margin-top, var(--ui-margin-top, var(--margin-top, unset)));
56
+ margin-top: var(--_margin-top);
57
+ --_margin-bottom: var(--toggle-margin, var(--ui-margin, var(--margin, unset)));
58
+ --_margin-bottom: var(--toggle-margin-bottom, var(--ui-margin-bottom, var(--margin-bottom, unset)));
59
+ margin-bottom: var(--_margin-bottom);
60
+ text-indent: var(--toggle-indent, var(--ui-indent, var(--indent, unset)));
61
+ font-variant: var(--toggle-font-variant, var(--ui-font-variant, var(--font-variant, unset)));
62
+ text-align: var(--toggle-text-align, var(--ui-text-align, var(--text-align, unset)));
63
+ }
64
+
65
+ .toggle-switch {
66
+ --_toggle-width: var(--toggle-width, 2.75em);
67
+ --_toggle-height: var(--toggle-height, 1.5em);
68
+ --_thumb-inset: var(--toggle-thumb-inset, 2px);
69
+ --_thumb-size: var(
70
+ --toggle-thumb-size,
71
+ calc(var(--_toggle-height) - (2 * var(--_thumb-inset)))
72
+ );
73
+ position: relative;
74
+ width: var(--_toggle-width);
75
+ height: var(--_toggle-height);
76
+ min-width: 2.25em;
77
+ min-height: 1.25em;
78
+ flex: 0 0 auto;
79
+ }
80
+
81
+ .toggle-track {
82
+ --_background-color: var(--toggle-bg, var(--toggle-off-bg, var(--inactive-bg, var(--secondary-bg, var(--bg, unset)))));
83
+ --_color: var(--toggle-fg, var(--toggle-off-fg, var(--inactive-fg, var(--secondary-fg, var(--fg, unset)))));
84
+ --link-bg: var(--toggle-link-bg, var(--toggle-off-link-bg, var(--inactive-link-bg, var(--secondary-link-bg, inherit))));
85
+ --link-fg: var(--toggle-link-fg, var(--toggle-off-link-fg, var(--inactive-link-fg, var(--secondary-link-fg, inherit))));
86
+ background-color: var(--_background-color);
87
+ color: var(--_color);
88
+ display: block;
89
+ width: 100%;
90
+ height: 100%;
91
+ border-radius: var(--toggle-track-radius, 999px);
92
+ border: var(--toggle-border, var(--border, 1px solid var(--border-color, rgba(127, 127, 127, 0.6))));
93
+ transition: filter var(--toggle-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), background-color var(--toggle-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), border-color var(--toggle-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), box-shadow var(--toggle-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms))))), transform var(--toggle-transition, var(--clickable-transition, var(--control-transition, var(--180ms ease-transition, var(--transition, 300ms)))));
94
+ box-sizing: border-box;
95
+ position: relative;
96
+ overflow: hidden;
97
+ }
98
+
99
+ .toggle-thumb {
100
+ position: absolute;
101
+ top: 50%;
102
+ left: var(--_thumb-inset);
103
+ width: var(--_thumb-size);
104
+ height: var(--_thumb-size);
105
+ border-radius: 50%;
106
+ background: var(--toggle-thumb-bg, var(--surface-bg, var(--secondary-fg, rgb(240, 240, 240))));
107
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
108
+ transform: translate(0, -50%);
109
+ transition: transform var(--toggle-transition, var(--control-transition, var(--transition, 180ms ease)));
110
+ }
111
+
112
+ input[type=checkbox] {
113
+ position: absolute;
114
+ inset: 0;
115
+ opacity: 0;
116
+ margin: 0;
117
+ cursor: inherit;
118
+ }
119
+
120
+ .toggle:hover .toggle-track {
121
+ filter: var(--toggle-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.05))));
122
+ transform: var(--toggle-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
123
+ background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
124
+ box-shadow: var(--toggle-hover-box-shadow, var(--clickable-hover-box-shadow, var(--hover-box-shadow, var(--_box-shadow, none))));
125
+ }
126
+
127
+ .toggle:active .toggle-track {
128
+ filter: var(--toggle-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
129
+ transform: var(--toggle-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
130
+ background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
131
+ box-shadow: var(--toggle-active-box-shadow, var(--clickable-active-box-shadow, var(--active-box-shadow, var(--_box-shadow, none))));
132
+ }
133
+
134
+ .toggle:has(input:focus-visible) {
135
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
136
+ outline-offset: var(--focus-outline-offset, 2px);
137
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
138
+ }
139
+
140
+ .toggle:has(input:checked) .toggle-track {
141
+ --_background-color: var(--toggle-on-bg, var(--primary-bg, var(--toggle-bg, var(--bg, unset))));
142
+ --_color: var(--toggle-on-fg, var(--primary-fg, var(--toggle-fg, var(--fg, unset))));
143
+ --link-bg: var(--toggle-on-link-bg, var(--primary-link-bg, var(--toggle-link-bg, inherit)));
144
+ --link-fg: var(--toggle-on-link-fg, var(--primary-link-fg, var(--toggle-link-fg, inherit)));
145
+ background-color: var(--_background-color);
146
+ color: var(--_color);
147
+ border: var(--toggle-on-border, var(--toggle-border, var(--border, 1px solid transparent)));
148
+ }
149
+
150
+ .toggle:has(input:checked) .toggle-thumb {
151
+ transform: translate(calc(var(--_toggle-width) - var(--_thumb-size) - 2 * var(--_thumb-inset)), -50%);
152
+ }
153
+
154
+ .toggle:has(input:disabled) {
155
+ cursor: not-allowed;
156
+ opacity: var(--toggle-disabled-opacity, 0.6);
157
+ filter: grayscale(0.2);
158
+ }
159
+
160
+ .toggle:has(input:disabled):hover .toggle-track,
161
+ .toggle:has(input:disabled):active .toggle-track {
162
+ filter: none;
163
+ box-shadow: none;
164
+ }
165
+
166
+ .toggle-label {
167
+ white-space: nowrap;
168
+ }</style>
@@ -0,0 +1,13 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLInputAttributes } from "svelte/elements";
3
+ import type { BaseStyleProps } from "../types";
4
+ type Props = {
5
+ checked?: boolean;
6
+ name?: string;
7
+ onLabel?: Snippet;
8
+ offLabel?: Snippet;
9
+ children?: Snippet;
10
+ } & BaseStyleProps & Omit<HTMLInputAttributes, "type">;
11
+ declare const Toggle: import("svelte").Component<Props, {}, "checked">;
12
+ type Toggle = ReturnType<typeof Toggle>;
13
+ export default Toggle;
@@ -186,7 +186,7 @@ button {
186
186
  padding: var(--_padding);
187
187
  border-radius: var(--menu-square-radius, var(--button-square-radius, var(--surface-square-radius, var(--square-radius, 0))));
188
188
  cursor: var(--menu-cursor, var(--button-cursor, var(--control-cursor, var(--cursor, pointer))));
189
- transition: filter var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
189
+ transition: filter var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), border-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
190
190
  }
191
191
 
192
192
  button:hover {
@@ -258,7 +258,7 @@ button {
258
258
  font-variant: var(--menu-font-variant, var(--surface-font-variant, var(--font-variant, unset)));
259
259
  text-align: var(--menu-text-align, var(--surface-text-align, var(--text-align, unset)));
260
260
  cursor: var(--menu-cursor, var(--button-cursor, var(--control-cursor, var(--cursor, pointer))));
261
- transition: filter var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
261
+ transition: filter var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), border-color var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--menu-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
262
262
  }
263
263
 
264
264
  .menu:hover {
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ import Select from "./controls/Select.svelte";
10
10
  import Option from "./controls/Option.svelte";
11
11
  import Slider from "./controls/Slider.svelte";
12
12
  import TabItem from "./controls/TabItem.svelte";
13
+ import Toggle from "./controls/Toggle.svelte";
13
14
  import Bar from "./layout/Bar.svelte";
14
15
  import Column from "./layout/Column.svelte";
15
16
  import ColumnContainer from "./layout/ColumnContainer.svelte";
@@ -46,7 +47,7 @@ export type { BaseStyleProps, ContainerStyleProps, BarStyleProps, MenuStyleProps
46
47
  export { Tag };
47
48
  export { Hero };
48
49
  export { TabItem };
49
- export { Button, ButtonLink, Checkbox, Input, Slider, RadioButton, MiniButton, Select, Option, };
50
+ export { Button, ButtonLink, Checkbox, Input, Slider, Toggle, RadioButton, MiniButton, Select, Option, };
50
51
  export { Bar, ColumnContainer, Container, GridLayout, Inline, MenuList, Page, ResponsiveText, RowContainer, Stack, TabBar, };
51
52
  export { TextLayout, Code, Accordion };
52
53
  export { Card, Tile, Form, FormItem, FormProvider, Fieldset };
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ import Select from "./controls/Select.svelte";
11
11
  import Option from "./controls/Option.svelte";
12
12
  import Slider from "./controls/Slider.svelte";
13
13
  import TabItem from "./controls/TabItem.svelte";
14
+ import Toggle from "./controls/Toggle.svelte";
14
15
  import Bar from "./layout/Bar.svelte";
15
16
  import Column from "./layout/Column.svelte";
16
17
  import ColumnContainer from "./layout/ColumnContainer.svelte";
@@ -46,7 +47,7 @@ import Tag from "./misc/Tag.svelte";
46
47
  export { Tag };
47
48
  export { Hero };
48
49
  export { TabItem };
49
- export { Button, ButtonLink, Checkbox, Input, Slider, RadioButton, MiniButton, Select, Option, };
50
+ export { Button, ButtonLink, Checkbox, Input, Slider, Toggle, RadioButton, MiniButton, Select, Option, };
50
51
  export { Bar, ColumnContainer, Container, GridLayout, Inline, MenuList, Page, ResponsiveText, RowContainer, Stack, TabBar, };
51
52
  export { TextLayout, Code, Accordion };
52
53
  export { Card, Tile, Form, FormItem, FormProvider, Fieldset };
@@ -106,7 +106,7 @@ div :global(details > summary) {
106
106
  padding: var(--_padding);
107
107
  border-radius: var(--accordion-summary-square-radius, var(--control-square-radius, var(--surface-square-radius, var(--square-radius, 0))));
108
108
  cursor: var(--accordion-cursor, var(--cursor, pointer));
109
- transition: filter var(--accordion-transition, var(--transition, 300ms)), background-color var(--accordion-transition, var(--transition, 300ms)), box-shadow var(--accordion-transition, var(--transition, 300ms)), transform var(--accordion-transition, var(--transition, 300ms));
109
+ transition: filter var(--accordion-transition, var(--transition, 300ms)), background-color var(--accordion-transition, var(--transition, 300ms)), border-color var(--accordion-transition, var(--transition, 300ms)), box-shadow var(--accordion-transition, var(--transition, 300ms)), transform var(--accordion-transition, var(--transition, 300ms));
110
110
  }
111
111
 
112
112
  div :global(details > summary):hover {
@@ -544,7 +544,7 @@ function handleKeydown(event) {
544
544
 
545
545
  .data-list-item.isInteractive {
546
546
  cursor: var(--data-list-item-cursor, var(--cursor, pointer));
547
- transition: filter var(--data-list-item-transition, var(--transition, 300ms)), background-color var(--data-list-item-transition, var(--transition, 300ms)), box-shadow var(--data-list-item-transition, var(--transition, 300ms)), transform var(--data-list-item-transition, var(--transition, 300ms));
547
+ transition: filter var(--data-list-item-transition, var(--transition, 300ms)), background-color var(--data-list-item-transition, var(--transition, 300ms)), border-color var(--data-list-item-transition, var(--transition, 300ms)), box-shadow var(--data-list-item-transition, var(--transition, 300ms)), transform var(--data-list-item-transition, var(--transition, 300ms));
548
548
  }
549
549
 
550
550
  .data-list-item.isInteractive:hover {
@@ -2,7 +2,7 @@
2
2
  import FormProvider from "./FormProvider.svelte";
3
3
  let { legend, children,
4
4
  // FormProvider props
5
- layout, fullWidth, globalInputStyles, multiline,
5
+ layout, collapseSide, fullWidth, globalInputStyles, multiline,
6
6
  // Container-like props
7
7
  bg, fg, padding, border, borderRadius, margin, maxWidth, minWidth, width, ...restProps } = $props();
8
8
  const style = $derived(injectVars({
@@ -29,7 +29,13 @@ const style = $derived(injectVars({
29
29
  ]));
30
30
  </script>
31
31
 
32
- <FormProvider {layout} {fullWidth} {globalInputStyles} {multiline}>
32
+ <FormProvider
33
+ {layout}
34
+ {collapseSide}
35
+ {fullWidth}
36
+ {globalInputStyles}
37
+ {multiline}
38
+ >
33
39
  <fieldset {style} {...restProps}>
34
40
  {#if legend}
35
41
  <legend>
@@ -3,6 +3,7 @@ type $$ComponentProps = {
3
3
  legend?: Snippet;
4
4
  children?: Snippet;
5
5
  layout?: "side" | "above" | "below";
6
+ collapseSide?: boolean;
6
7
  fullWidth?: boolean;
7
8
  globalInputStyles?: boolean;
8
9
  multiline?: boolean;
@@ -2,7 +2,7 @@
2
2
  import FormProvider from "./FormProvider.svelte";
3
3
  let { children,
4
4
  // FormProvider props
5
- layout, fullWidth, globalInputStyles, multiline,
5
+ layout, collapseSide, fullWidth, globalInputStyles, multiline,
6
6
  // Container-like props
7
7
  bg, fg, padding, border, borderRadius, margin, maxWidth, minWidth, width,
8
8
  // Form-specific props
@@ -31,7 +31,13 @@ const style = $derived(injectVars({
31
31
  ]));
32
32
  </script>
33
33
 
34
- <FormProvider {layout} {fullWidth} {globalInputStyles} {multiline}>
34
+ <FormProvider
35
+ {layout}
36
+ {collapseSide}
37
+ {fullWidth}
38
+ {globalInputStyles}
39
+ {multiline}
40
+ >
35
41
  <form {style} {action} {method} {onsubmit} {...restProps}>
36
42
  {@render children?.()}
37
43
  </form>
@@ -3,6 +3,7 @@ import type { HTMLAttributes } from "svelte/elements";
3
3
  type $$ComponentProps = {
4
4
  children?: Snippet;
5
5
  layout?: "side" | "above" | "below";
6
+ collapseSide?: boolean;
6
7
  fullWidth?: boolean;
7
8
  globalInputStyles?: boolean;
8
9
  multiline?: boolean;
@@ -1,11 +1,12 @@
1
1
  <script lang="ts">import { injectVars } from "../util";
2
2
  import { getContext } from "svelte";
3
3
  const contextDefaults = getContext("formItemDefaults");
4
- let { fullWidth, globalInputStyles, label, after, children, multiline, layout, above = false, below = false, ...restProps } = $props();
4
+ let { fullWidth, globalInputStyles, label, after, children, multiline, layout, collapseSide, above = false, below = false, ...restProps } = $props();
5
5
  // Use $derived to reactively compute values from context
6
6
  const effectiveFullWidth = $derived(fullWidth ?? contextDefaults?.fullWidth ?? false);
7
7
  const effectiveGlobalInputStyles = $derived(globalInputStyles ?? contextDefaults?.globalInputStyles ?? true);
8
8
  const effectiveMultiline = $derived(multiline ?? contextDefaults?.multiline ?? false);
9
+ const effectiveCollapseSide = $derived(collapseSide ?? contextDefaults?.collapseSide ?? true);
9
10
  const effectiveLayoutFromContext = $derived(layout ?? contextDefaults?.layout ?? "side");
10
11
  const cssKeys = ["fullWidth", "globalInputStyles", "multiline"];
11
12
  const style = $derived(injectVars(restProps, "form-item", cssKeys));
@@ -18,6 +19,7 @@ const effectiveLayout = $derived(above ? "above" : below ? "below" : effectiveLa
18
19
  class:fullWidth={effectiveFullWidth}
19
20
  class:globalInputStyles={effectiveGlobalInputStyles}
20
21
  class:multiline={effectiveMultiline}
22
+ class:collapse-side={effectiveCollapseSide}
21
23
  class:layout-side={effectiveLayout === "side"}
22
24
  class:layout-above={effectiveLayout === "above"}
23
25
  class:layout-below={effectiveLayout === "below"}
@@ -163,20 +165,20 @@ label {
163
165
  }
164
166
 
165
167
  @container (max-width: 400px) {
166
- .form-item.layout-side {
168
+ .form-item.layout-side.collapse-side {
167
169
  flex-direction: column;
168
170
  align-items: flex-start;
169
171
  gap: var(--form-label-vertical-gap, var(--space));
170
172
  }
171
- .form-item.layout-side .label {
173
+ .form-item.layout-side.collapse-side .label {
172
174
  text-align: left;
173
175
  }
174
- .form-item.layout-side {
176
+ .form-item.layout-side.collapse-side {
175
177
  width: auto;
176
178
  text-align: left;
177
179
  font-size: var(--font-size-small);
178
180
  }
179
- .form-item.layout-side {
181
+ .form-item.layout-side.collapse-side {
180
182
  width: var(--form-input-fixed-width, var(--form-input-width));
181
183
  }
182
184
  }
@@ -8,6 +8,7 @@ type $$ComponentProps = {
8
8
  children?: Snippet;
9
9
  multiline?: boolean;
10
10
  layout?: "side" | "above" | "below";
11
+ collapseSide?: boolean;
11
12
  above?: boolean;
12
13
  below?: boolean;
13
14
  } & HTMLAttributes<HTMLElement>;
@@ -1,10 +1,11 @@
1
1
  <script lang="ts">import { setContext, getContext } from "svelte";
2
- let { layout, fullWidth, globalInputStyles, multiline, children, } = $props();
2
+ let { layout, collapseSide, fullWidth, globalInputStyles, multiline, children, } = $props();
3
3
  // Get parent context if it exists
4
4
  const parentContext = getContext("formItemDefaults");
5
5
  // Make context reactive using $state, merging with parent
6
6
  let contextValue = $state({
7
7
  layout: layout ?? parentContext?.layout,
8
+ collapseSide: collapseSide ?? parentContext?.collapseSide,
8
9
  fullWidth: fullWidth ?? parentContext?.fullWidth,
9
10
  globalInputStyles: globalInputStyles ?? parentContext?.globalInputStyles,
10
11
  multiline: multiline ?? parentContext?.multiline,
@@ -12,6 +13,7 @@ let contextValue = $state({
12
13
  // Update context value properties when props change, falling back to parent
13
14
  $effect(() => {
14
15
  contextValue.layout = layout ?? parentContext?.layout;
16
+ contextValue.collapseSide = collapseSide ?? parentContext?.collapseSide;
15
17
  contextValue.fullWidth = fullWidth ?? parentContext?.fullWidth;
16
18
  contextValue.globalInputStyles =
17
19
  globalInputStyles ?? parentContext?.globalInputStyles;
@@ -1,6 +1,7 @@
1
1
  import type { Snippet } from "svelte";
2
2
  type FormItemDefaults = {
3
3
  layout?: "side" | "above" | "below";
4
+ collapseSide?: boolean;
4
5
  fullWidth?: boolean;
5
6
  globalInputStyles?: boolean;
6
7
  multiline?: boolean;
@@ -62,7 +62,7 @@ const style = $derived(injectVars(restProps, "menu", [
62
62
  .menu :global(li[role="button"]),
63
63
  .menu :global(li[tabindex]:not([tabindex="-1"])) {
64
64
  cursor: var(--menu-item-cursor, var(--cursor, pointer));
65
- transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
65
+ transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), border-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
66
66
  }
67
67
 
68
68
  .menu :global(li.subheader):hover,
@@ -158,7 +158,7 @@ const style = $derived(injectVars(restProps, "menu", [
158
158
 
159
159
  .menu :global(a), .menu :global(button), .menu :global(input[type="submit"]), .menu :global(.button) {
160
160
  cursor: var(--menu-item-cursor, var(--cursor, pointer));
161
- transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
161
+ transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), border-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
162
162
  }
163
163
 
164
164
  .menu :global(a):hover, .menu :global(button):hover, .menu :global(input[type="submit"]):hover, .menu :global(.button):hover {
@@ -185,7 +185,7 @@ const style = $derived(injectVars(restProps, "menu", [
185
185
 
186
186
  .menu li {
187
187
  cursor: var(--menu-item-cursor, var(--cursor, pointer));
188
- transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
188
+ transition: filter var(--menu-item-transition, var(--transition, 300ms)), background-color var(--menu-item-transition, var(--transition, 300ms)), border-color var(--menu-item-transition, var(--transition, 300ms)), box-shadow var(--menu-item-transition, var(--transition, 300ms)), transform var(--menu-item-transition, var(--transition, 300ms));
189
189
  }
190
190
 
191
191
  .menu li:hover {
@@ -210,49 +210,6 @@ const style = $derived(injectVars(restProps, "menu", [
210
210
  box-shadow: var(--menu-item-disabled-box-shadow, var(--disabled-box-shadow, var(--_box-shadow, none)));
211
211
  }
212
212
 
213
- .menu {
214
- /*
215
- // Make hover/active feedback visible across the whole row by default.
216
- & :global(li:hover > a:not(.active)),
217
- & :global(li:hover > button:not(.active)),
218
- & :global(li:hover > input[type="submit"]:not(.active)),
219
- & :global(li:hover > .button:not(.active)) {
220
- background: var(
221
- --menu-item-hover-bg,
222
- var(--menu-item-bg, var(--menu-bg, var(--bg, unset)))
223
- );
224
- color: var(
225
- --menu-item-hover-fg,
226
- var(--menu-item-fg, var(--menu-fg, var(--fg, inherit)))
227
- );
228
- }
229
-
230
- & :global(li:active > a:not(.active)),
231
- & :global(li:active > button:not(.active)),
232
- & :global(li:active > input[type="submit"]:not(.active)),
233
- & :global(li:active > .button:not(.active)) {
234
- background: var(
235
- --menu-item-active-bg,
236
- var(--menu-item-bg, var(--menu-bg, var(--bg, unset)))
237
- );
238
- color: var(
239
- --menu-item-active-fg,
240
- var(--menu-item-fg, var(--menu-fg, var(--fg, inherit)))
241
- );
242
- }
243
-
244
- & :global(.active) {
245
- @include color-props(
246
- menu-item-active,
247
- primary,
248
- menu-item,
249
- button,
250
- control,
251
- surface
252
- );
253
- } */
254
- }
255
-
256
213
  .menu.striped :global(li:nth-of-type(even)) > :global(a), .menu.striped :global(li:nth-of-type(even)) > :global(button), .menu.striped :global(li:nth-of-type(even)) > :global(input[type="submit"]), .menu.striped :global(li:nth-of-type(even)) > :global(.button) {
257
214
  --_background-color: var(--menu-item-even-bg, var(--stripe-bg, var(--menu-item-bg, var(--button-bg, var(--control-bg, var(--bg, unset))))));
258
215
  --_color: var(--menu-item-even-fg, var(--stripe-fg, var(--menu-item-fg, var(--button-fg, var(--control-fg, var(--fg, unset))))));
@@ -262,7 +262,7 @@ aside .content:hover::-webkit-scrollbar-thumb:hover {
262
262
  background-color: var(--_background-color);
263
263
  color: var(--_color);
264
264
  cursor: var(--mini-button-cursor, var(--button-cursor, var(--control-cursor, var(--cursor, pointer))));
265
- transition: filter var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
265
+ transition: filter var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), background-color var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), border-color var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), box-shadow var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms)))), transform var(--mini-button-transition, var(--button-transition, var(--control-transition, var(--transition, 300ms))));
266
266
  }
267
267
  aside > button:hover {
268
268
  filter: var(--mini-button-hover-filter, var(--button-hover-filter, var(--control-hover-filter, var(--hover-filter, brightness(1.05)))));
@@ -655,12 +655,23 @@ table :global(tr > th:first-child:has(~ td)) {
655
655
  }
656
656
 
657
657
  .fixed-table-head :global(th) {
658
- --_background-color: var(--table-head-bg, var(--table-bg, var(--surface-bg, var(--bg, unset))));
659
- --_color: var(--table-head-fg, var(--table-fg, var(--surface-fg, var(--fg, unset))));
660
- --link-bg: var(--table-head-link-bg, var(--table-link-bg, var(--surface-link-bg, inherit)));
661
- --link-fg: var(--table-head-link-fg, var(--table-link-fg, var(--surface-link-fg, inherit)));
658
+ --_background-color: var(--table-head-bg, var(--text-bg, var(--bg, unset)));
659
+ --_color: var(--table-head-fg, var(--text-fg, var(--fg, unset)));
660
+ --link-bg: var(--table-head-link-bg, var(--text-link-bg, inherit));
661
+ --link-fg: var(--table-head-link-fg, var(--text-link-fg, inherit));
662
662
  background-color: var(--_background-color);
663
663
  color: var(--_color);
664
+ font-family: var(--table-head-font-family, var(--header-font-family, inherit));
665
+ text-transform: var(--table-head-text-transform, var(--header-text-transform, inherit));
666
+ text-decoration: var(--table-head-text-decoration, var(--header-text-decoration, inherit));
667
+ --_font-size: var(--table-head-font-size, var(--header-font-size, inherit));
668
+ font-size: var(--_font-size);
669
+ font-weight: var(--table-head-font-weight, var(--header-font-weight, var(--font-weight, bold)));
670
+ line-height: var(--table-head-line-height, var(--header-line-height, inherit));
671
+ letter-spacing: var(--table-head-letter-spacing, var(--header-letter-spacing, inherit));
672
+ text-indent: var(--table-head-indent, var(--header-indent, inherit));
673
+ font-variant: var(--table-head-font-variant, var(--header-font-variant, inherit));
674
+ text-align: var(--table-head-text-align, var(--header-text-align, inherit));
664
675
  }
665
676
 
666
677
  /* Visually make our two tables appear as one */
@@ -692,29 +703,6 @@ table :global(tr > th:first-child:has(~ td)) {
692
703
  /* Interactive affordances: target rows/cells with tabindex for keyboard accessibility */
693
704
  table :global(tr[tabindex]) {
694
705
  cursor: var(--cursor, pointer);
695
- transition: filter var(--transition, 300ms), background-color var(--transition, 300ms), box-shadow var(--transition, 300ms), transform var(--transition, 300ms);
696
- }
697
-
698
- table :global(tr[tabindex]):hover {
699
- filter: var(--hover-filter, brightness(1.05));
700
- transform: var(--hover-transform, none);
701
- background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
702
- box-shadow: var(--hover-box-shadow, var(--_box-shadow, none));
703
- }
704
-
705
- table :global(tr[tabindex]):active {
706
- filter: var(--active-filter, brightness(0.9));
707
- transform: var(--active-transform, none);
708
- background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
709
- box-shadow: var(--active-box-shadow, var(--_box-shadow, none));
710
- }
711
-
712
- table :global(tr[tabindex]):disabled {
713
- cursor: var(--disabled-cursor, not-allowed);
714
- transform: var(--disabled-transform, none);
715
- filter: var(--disabled-filter, grayscale(0.5));
716
- background-color: color-mix(in oklch, var(--_background-color) var(--disabled-base-color-percentage, 50%), var(--disabled-color-mix, gray) calc(100% - var(--disabled-base-color-percentage, 50%)));
717
- box-shadow: var(--disabled-box-shadow, var(--_box-shadow, none));
718
706
  }
719
707
 
720
708
  table :global(tr[tabindex]):focus-visible {
@@ -723,33 +711,39 @@ table :global(tr[tabindex]):focus-visible {
723
711
  box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
724
712
  }
725
713
 
714
+ table :global(tr[tabindex] > th),
715
+ table :global(tr[tabindex] > td),
716
+ table :global(th[tabindex]),
726
717
  table :global(td[tabindex]) {
727
718
  cursor: var(--cursor, pointer);
728
- transition: filter var(--transition, 300ms), background-color var(--transition, 300ms), box-shadow var(--transition, 300ms), transform var(--transition, 300ms);
719
+ transition: filter var(--transition, 300ms), background-color var(--transition, 300ms), border-color var(--transition, 300ms), box-shadow var(--transition, 300ms), transform var(--transition, 300ms);
729
720
  }
730
721
 
731
- table :global(td[tabindex]):hover {
722
+ table :global(tr[tabindex]:hover > th),
723
+ table :global(tr[tabindex]:hover > td),
724
+ table :global(tr[tabindex]:focus-visible > th),
725
+ table :global(tr[tabindex]:focus-visible > td),
726
+ table :global(th[tabindex]:hover),
727
+ table :global(th[tabindex]:focus-visible),
728
+ table :global(td[tabindex]:hover),
729
+ table :global(td[tabindex]:focus-visible) {
732
730
  filter: var(--hover-filter, brightness(1.05));
733
731
  transform: var(--hover-transform, none);
734
732
  background-color: color-mix(in oklch, var(--_background-color) var(--hover-base-color-percentage, 90%), var(--hover-color-mix, white) calc(100% - var(--hover-base-color-percentage, 90%)));
735
733
  box-shadow: var(--hover-box-shadow, var(--_box-shadow, none));
736
734
  }
737
735
 
738
- table :global(td[tabindex]):active {
736
+ table :global(tr[tabindex]:active > th),
737
+ table :global(tr[tabindex]:active > td),
738
+ table :global(th[tabindex]:active),
739
+ table :global(td[tabindex]:active) {
739
740
  filter: var(--active-filter, brightness(0.9));
740
741
  transform: var(--active-transform, none);
741
742
  background-color: color-mix(in oklch, var(--_background-color) var(--active-base-color-percentage, 90%), var(--active-color-mix, black) calc(100% - var(--active-base-color-percentage, 90%)));
742
743
  box-shadow: var(--active-box-shadow, var(--_box-shadow, none));
743
744
  }
744
745
 
745
- table :global(td[tabindex]):disabled {
746
- cursor: var(--disabled-cursor, not-allowed);
747
- transform: var(--disabled-transform, none);
748
- filter: var(--disabled-filter, grayscale(0.5));
749
- background-color: color-mix(in oklch, var(--_background-color) var(--disabled-base-color-percentage, 50%), var(--disabled-color-mix, gray) calc(100% - var(--disabled-base-color-percentage, 50%)));
750
- box-shadow: var(--disabled-box-shadow, var(--_box-shadow, none));
751
- }
752
-
746
+ table :global(th[tabindex]):focus-visible,
753
747
  table :global(td[tabindex]):focus-visible {
754
748
  outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
755
749
  outline-offset: var(--focus-outline-offset, 2px);
@@ -381,7 +381,7 @@ export {};
381
381
  button.tile,
382
382
  label.tile {
383
383
  cursor: var(--tile-cursor, var(--cursor, pointer));
384
- transition: filter var(--tile-transition, var(--transition, 300ms)), background-color var(--tile-transition, var(--transition, 300ms)), box-shadow var(--tile-transition, var(--transition, 300ms)), transform var(--tile-transition, var(--transition, 300ms));
384
+ transition: filter var(--tile-transition, var(--transition, 300ms)), background-color var(--tile-transition, var(--transition, 300ms)), border-color var(--tile-transition, var(--transition, 300ms)), box-shadow var(--tile-transition, var(--transition, 300ms)), transform var(--tile-transition, var(--transition, 300ms));
385
385
  }
386
386
 
387
387
  button.tile:hover,
@@ -451,7 +451,7 @@ let halfFull = $derived(fillFraction > 0.5);
451
451
  }
452
452
 
453
453
  .progress-container .progress-track[data-animate=true] {
454
- background: repeating-linear-gradient(135deg, var(--progress-track-bg, var(--secondary-bg, #dfdfdf)) 0, var(--progress-track-bg, var(--secondary-bg, #dfdfdf)) 20px, var(--progress-track-stripe-bg, var(--white, #fff)) 20px, var(--progress-track-stripe-bg, var(--white, #fff)) 40px);
454
+ background: repeating-linear-gradient(135deg, var(--progress-track-bg, var(--secondary-bg, #dfdfdf)) 0, var(--progress-track-bg, var(--secondary-bg, #dfdfdf)) 20px, var(--progress-track-stripe-bg, color-mix(in srgb, var(--secondary-bg, #fff) 85%, var(--surface-bg, #dfdfdf) 15%)) 20px, var(--progress-track-stripe-bg, color-mix(in srgb, var(--secondary-bg, #fff) 85%, var(--surface-bg, #dfdfdf) 15%)) 40px);
455
455
  background-size: 3000px;
456
456
  background-position: center;
457
457
  animation: track-stripes 1s linear infinite;
@@ -484,10 +484,35 @@ let halfFull = $derived(fillFraction > 0.5);
484
484
  align-items: center;
485
485
  justify-content: center;
486
486
  color: var(--progress-fg, var(--secondary-fg, var(--white)));
487
- text-shadow: var(--progress-text-shadow, 1px 1px var(--progress-fg, var(--secondary-fg, var(--white))));
487
+ /* Outline color defaults to track background so text is readable over unfilled area */
488
+ --_progress-outline-color: var(
489
+ --progress-outline-color,
490
+ var(--progress-track-bg, var(--secondary-bg, #dfdfdf))
491
+ );
492
+ -webkit-text-stroke: var(--progress-outline-width, 1px) var(--_progress-outline-color);
493
+ paint-order: stroke fill;
494
+ text-shadow: none;
488
495
  }
489
496
 
497
+ @supports not (-webkit-text-stroke: 1px black) {
498
+ .progress-container .progress-text {
499
+ text-shadow: var(--progress-text-shadow, 1px 0px var(--_progress-outline-color), -1px 0px var(--_progress-outline-color), 0px -1px var(--_progress-outline-color), 0px 1px var(--_progress-outline-color));
500
+ }
501
+ }
490
502
  .progress-container .half-full .progress-text {
491
503
  color: var(--progress-half-fg, var(--primary-fg, var(--white)));
492
- text-shadow: var(--progress-half-text-shadow, var(--progress-text-shadow, 1px 1px var(--progress-fg, var(--secondary-fg, var(--white)))));
504
+ /* Outline color defaults to bar color so text is readable over the unfilled track edge */
505
+ --_progress-outline-color: var(
506
+ --progress-half-outline-color,
507
+ var(
508
+ --progress-outline-color,
509
+ var(--progress-bar-color, var(--primary-bg))
510
+ )
511
+ );
512
+ }
513
+
514
+ @supports not (-webkit-text-stroke: 1px black) {
515
+ .progress-container .half-full .progress-text {
516
+ text-shadow: var(--progress-half-text-shadow, var(--progress-text-shadow, 1px 0px var(--_progress-outline-color), -1px 0px var(--_progress-outline-color), 0px -1px var(--_progress-outline-color), 0px 1px var(--_progress-outline-color)));
517
+ }
493
518
  }</style>
@@ -86,7 +86,7 @@ let style = $derived(injectVars(restProps, "tag", [
86
86
  top: 0;
87
87
  right: 0;
88
88
  cursor: var(--tag-close-button-cursor, var(--button-cursor, var(--cursor, pointer)));
89
- transition: filter var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), background-color var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), box-shadow var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), transform var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms)));
89
+ transition: filter var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), background-color var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), border-color var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), box-shadow var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms))), transform var(--tag-close-button-transition, var(--button-transition, var(--transition, 300ms)));
90
90
  }
91
91
 
92
92
  .tag button:hover {
@@ -49,23 +49,13 @@ function showPopover() {
49
49
  tooltipDiv.style.marginBottom = "var(--tooltipGap, 8px)";
50
50
  }
51
51
  if (renderedHorizontal == "right") {
52
- /* Check if the "arrow" will not "hit" the edge... */
53
- // Read value of --tooltip-gap
54
- if (targetRect.width / 2 > tooltipGap) {
55
- tooltipDiv.style.left = `${targetRect.left + targetRect.width / 2}px`;
56
- }
57
- else {
58
- tooltipDiv.style.left = `${targetRect.left - tooltipGap}px`;
59
- }
52
+ // Anchor so that the arrow center (at 2*tooltipGap from tooltip left) aligns with target center
53
+ tooltipDiv.style.left = `${targetRect.left + targetRect.width / 2 - 2 * tooltipGap}px`;
60
54
  tooltipDiv.style.right = "unset";
61
55
  }
62
56
  else {
63
- if (targetRect.width / 2 > tooltipGap) {
64
- tooltipDiv.style.right = `${window.innerWidth - (targetRect.left + targetRect.width / 2)}px`;
65
- }
66
- else {
67
- tooltipDiv.style.right = `${window.innerWidth - (targetRect.right + tooltipGap)}px`;
68
- }
57
+ // Anchor so that the arrow center (at 2*tooltipGap from tooltip right) aligns with target center
58
+ tooltipDiv.style.right = `${window.innerWidth - (targetRect.left + targetRect.width / 2) - 2 * tooltipGap}px`;
69
59
  tooltipDiv.style.left = "unset";
70
60
  }
71
61
  // Top and Left will put us OVER the element (matching top and left corner)
@@ -15,54 +15,72 @@
15
15
  }
16
16
  }
17
17
 
18
- @mixin clickable($prefixes...) {
18
+ @mixin clickable-cursor($prefixes...) {
19
19
  cursor: fn.var-with-fallbacks(--cursor, append($prefixes, pointer)...);
20
+ }
21
+
22
+ @mixin clickable-affordance-transition($prefixes...) {
20
23
  transition:
21
24
  filter fn.var-with-fallbacks(--transition, append($prefixes, 300ms)...),
22
25
  background-color
23
26
  fn.var-with-fallbacks(--transition, append($prefixes, 300ms)...),
27
+ border-color
28
+ fn.var-with-fallbacks(--transition, append($prefixes, 300ms)...),
24
29
  box-shadow
25
30
  fn.var-with-fallbacks(--transition, append($prefixes, 300ms)...),
26
31
  transform fn.var-with-fallbacks(--transition, append($prefixes, 300ms)...);
32
+ }
33
+
34
+ @mixin clickable-hover-affordance($prefixes...) {
35
+ filter: fn.var-with-fallbacks(
36
+ --hover-filter,
37
+ append($prefixes, brightness(1.05))...
38
+ );
39
+ transform: fn.var-with-fallbacks(
40
+ --hover-transform,
41
+ append($prefixes, none)...
42
+ );
43
+ background-color: color-mix(
44
+ in oklch,
45
+ var(--_background-color) var(--hover-base-color-percentage, 90%),
46
+ var(--hover-color-mix, white)
47
+ calc(100% - var(--hover-base-color-percentage, 90%))
48
+ );
49
+ box-shadow: fn.var-with-fallbacks(
50
+ --hover-box-shadow,
51
+ append($prefixes, var(--_box-shadow, none))...
52
+ );
53
+ }
54
+
55
+ @mixin clickable-active-affordance($prefixes...) {
56
+ filter: fn.var-with-fallbacks(
57
+ --active-filter,
58
+ append($prefixes, brightness(0.9))...
59
+ );
60
+ transform: fn.var-with-fallbacks(
61
+ --active-transform,
62
+ append($prefixes, none)...
63
+ );
64
+ background-color: color-mix(
65
+ in oklch,
66
+ var(--_background-color) var(--active-base-color-percentage, 90%),
67
+ var(--active-color-mix, black)
68
+ calc(100% - var(--active-base-color-percentage, 90%))
69
+ );
70
+ box-shadow: fn.var-with-fallbacks(
71
+ --active-box-shadow,
72
+ append($prefixes, var(--_box-shadow, none))...
73
+ );
74
+ }
75
+
76
+ @mixin clickable($prefixes...) {
77
+ @include clickable-cursor($prefixes...);
78
+ @include clickable-affordance-transition($prefixes...);
27
79
  &:hover {
28
- filter: fn.var-with-fallbacks(
29
- --hover-filter,
30
- append($prefixes, brightness(1.05))...
31
- );
32
- transform: fn.var-with-fallbacks(
33
- --hover-transform,
34
- append($prefixes, none)...
35
- );
36
- background-color: color-mix(
37
- in oklch,
38
- var(--_background-color) var(--hover-base-color-percentage, 90%),
39
- var(--hover-color-mix, white)
40
- calc(100% - var(--hover-base-color-percentage, 90%))
41
- );
42
- box-shadow: fn.var-with-fallbacks(
43
- --hover-box-shadow,
44
- append($prefixes, var(--_box-shadow, none))...
45
- );
80
+ @include clickable-hover-affordance($prefixes...);
46
81
  }
47
82
  &:active {
48
- filter: fn.var-with-fallbacks(
49
- --active-filter,
50
- append($prefixes, brightness(0.9))...
51
- );
52
- transform: fn.var-with-fallbacks(
53
- --active-transform,
54
- append($prefixes, none)...
55
- );
56
- background-color: color-mix(
57
- in oklch,
58
- var(--_background-color) var(--active-base-color-percentage, 90%),
59
- var(--active-color-mix, black)
60
- calc(100% - var(--active-base-color-percentage, 90%))
61
- );
62
- box-shadow: fn.var-with-fallbacks(
63
- --active-box-shadow,
64
- append($prefixes, var(--_box-shadow, none))...
65
- );
83
+ @include clickable-active-affordance($prefixes...);
66
84
  }
67
85
  &:disabled {
68
86
  cursor: fn.var-with-fallbacks(
@@ -195,7 +195,6 @@
195
195
  --tab-fg: #495057;
196
196
  --tab-active-bg: #ffffff;
197
197
  --tab-active-fg: #212529;
198
- --tab-bar-bg: #ffffff;
199
198
  --tab-bar-fg: #212529;
200
199
 
201
200
  /* Misc */
@@ -24,11 +24,10 @@
24
24
  --input-bg: #fffdfa;
25
25
  --input-fg: #33261f;
26
26
 
27
- --tab-bg: #efdccf;
27
+ --tab-bg: color-mix(in srgb, var(--surface-bg) 72%, var(--secondary-bg) 28%);
28
28
  --tab-fg: #5a4033;
29
- --tab-active-bg: #fff8f2;
29
+ --tab-active-bg: var(--secondary-bg);
30
30
  --tab-active-fg: #8f472b;
31
- --tab-bar-bg: #f0e1d4;
32
31
  --tab-bar-fg: #33261f;
33
32
 
34
33
  --border-color: #ccb2a1;
@@ -24,11 +24,10 @@
24
24
  --input-bg: #fbfdfb;
25
25
  --input-fg: #1f2d26;
26
26
 
27
- --tab-bg: #dce7da;
27
+ --tab-bg: color-mix(in srgb, var(--surface-bg) 72%, var(--secondary-bg) 28%);
28
28
  --tab-fg: #284032;
29
- --tab-active-bg: #f7faf6;
29
+ --tab-active-bg: var(--secondary-bg);
30
30
  --tab-active-fg: #204f39;
31
- --tab-bar-bg: #e3ece0;
32
31
  --tab-bar-fg: #1f2d26;
33
32
 
34
33
  --border-color: #a7bcae;
@@ -26,7 +26,6 @@
26
26
  --tab-fg: var(--material-color-grey-800);
27
27
  --tab-active-bg: #ffffff;
28
28
  --tab-active-fg: var(--material-color-blue-700);
29
- --tab-bar-bg: var(--material-color-grey-100);
30
29
  --tab-bar-fg: var(--material-color-grey-900);
31
30
 
32
31
  /* Semantic colors for light mode */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contain-css-svelte",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "scripts": {
5
5
  "capture:review": "node scripts/capture-review.mjs",
6
6
  "capture:review:matrix": "node scripts/capture-review-matrix.mjs",