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.
- package/dist/controls/Button.svelte +6 -6
- package/dist/controls/ButtonLink.svelte +1 -1
- package/dist/controls/Checkbox.svelte +27 -24
- package/dist/controls/MiniButton.svelte +1 -1
- package/dist/controls/RadioButton.svelte +27 -24
- package/dist/controls/Toggle.svelte +168 -0
- package/dist/controls/Toggle.svelte.d.ts +13 -0
- package/dist/dropdowns/DropdownMenu.svelte +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/layout/Accordion.svelte +1 -1
- package/dist/layout/DataListItem.svelte +1 -1
- package/dist/layout/Fieldset.svelte +8 -2
- package/dist/layout/Fieldset.svelte.d.ts +1 -0
- package/dist/layout/Form.svelte +8 -2
- package/dist/layout/Form.svelte.d.ts +1 -0
- package/dist/layout/FormItem.svelte +7 -5
- package/dist/layout/FormItem.svelte.d.ts +1 -0
- package/dist/layout/FormProvider.svelte +3 -1
- package/dist/layout/FormProvider.svelte.d.ts +1 -0
- package/dist/layout/MenuList.svelte +3 -46
- package/dist/layout/Sidebar.svelte +1 -1
- package/dist/layout/Table.svelte +32 -38
- package/dist/layout/Tile.svelte +1 -1
- package/dist/misc/Progress.svelte +28 -3
- package/dist/misc/Tag.svelte +1 -1
- package/dist/overlays/Tooltip.svelte +4 -14
- package/dist/sass/_affordances.scss +55 -37
- package/dist/vars/themes/bootstrap.css +0 -1
- package/dist/vars/themes/canyon.css +2 -3
- package/dist/vars/themes/forest.css +2 -3
- package/dist/vars/themes/light.css +0 -1
- package/package.json +1 -1
|
@@ -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:
|
|
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:
|
|
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
|
|
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>
|
package/dist/layout/Form.svelte
CHANGED
|
@@ -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
|
|
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>
|
|
@@ -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
|
}
|
|
@@ -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;
|
|
@@ -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)))));
|
package/dist/layout/Table.svelte
CHANGED
|
@@ -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(--
|
|
659
|
-
--_color: var(--table-head-fg, var(--
|
|
660
|
-
--link-bg: var(--table-head-link-bg, var(--
|
|
661
|
-
--link-fg: var(--table-head-link-fg, var(--
|
|
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(
|
|
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(
|
|
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(
|
|
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);
|
package/dist/layout/Tile.svelte
CHANGED
|
@@ -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(--
|
|
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
|
-
|
|
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
|
-
|
|
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>
|
package/dist/misc/Tag.svelte
CHANGED
|
@@ -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
|
-
|
|
53
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
@@ -24,11 +24,10 @@
|
|
|
24
24
|
--input-bg: #fffdfa;
|
|
25
25
|
--input-fg: #33261f;
|
|
26
26
|
|
|
27
|
-
--tab-bg:
|
|
27
|
+
--tab-bg: color-mix(in srgb, var(--surface-bg) 72%, var(--secondary-bg) 28%);
|
|
28
28
|
--tab-fg: #5a4033;
|
|
29
|
-
--tab-active-bg:
|
|
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:
|
|
27
|
+
--tab-bg: color-mix(in srgb, var(--surface-bg) 72%, var(--secondary-bg) 28%);
|
|
28
28
|
--tab-fg: #284032;
|
|
29
|
-
--tab-active-bg:
|
|
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 */
|