@geoffcox/sterling-svelte 0.0.26 → 0.0.28
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/Button.svelte +81 -25
- package/Button.svelte.d.ts +3 -0
- package/Checkbox.svelte +56 -26
- package/Checkbox.svelte.d.ts +2 -0
- package/ColorPicker.constants.d.ts +1 -0
- package/ColorPicker.constants.js +1 -0
- package/ColorPicker.svelte +257 -0
- package/ColorPicker.svelte.d.ts +49 -0
- package/ColorPicker.types.d.ts +4 -0
- package/Dialog.svelte +10 -10
- package/Dropdown.svelte +97 -58
- package/Dropdown.svelte.d.ts +4 -0
- package/HexColorSliders.svelte +171 -0
- package/HexColorSliders.svelte.d.ts +22 -0
- package/HslColorSliders.svelte +208 -0
- package/HslColorSliders.svelte.d.ts +22 -0
- package/Input.svelte +59 -25
- package/Input.svelte.d.ts +3 -2
- package/Label.constants.d.ts +1 -0
- package/Label.constants.js +1 -0
- package/Label.svelte +212 -14
- package/Label.svelte.d.ts +24 -4
- package/Label.types.d.ts +4 -0
- package/Label.types.js +1 -0
- package/Link.svelte +62 -16
- package/Link.svelte.d.ts +1 -0
- package/List.svelte +29 -16
- package/List.svelte.d.ts +1 -0
- package/List.types.d.ts +4 -3
- package/ListItem.svelte +30 -10
- package/ListItem.svelte.d.ts +1 -1
- package/Menu.svelte +7 -7
- package/MenuBar.svelte +1 -1
- package/MenuButton.svelte +3 -9
- package/MenuButton.svelte.d.ts +2 -4
- package/MenuItem.svelte +34 -12
- package/MenuItem.svelte.d.ts +2 -1
- package/MenuItemDisplay.svelte +8 -1
- package/MenuSeparator.svelte +3 -3
- package/Popover.svelte +66 -51
- package/Popover.svelte.d.ts +4 -2
- package/Progress.constants.d.ts +1 -1
- package/Progress.constants.js +1 -1
- package/Progress.svelte +34 -28
- package/Progress.svelte.d.ts +1 -1
- package/Progress.types.d.ts +3 -3
- package/Radio.svelte +54 -23
- package/Radio.svelte.d.ts +2 -0
- package/RgbColorSliders.svelte +182 -0
- package/RgbColorSliders.svelte.d.ts +22 -0
- package/Select.svelte +32 -25
- package/Select.svelte.d.ts +1 -1
- package/Slider.svelte +111 -123
- package/Slider.svelte.d.ts +1 -0
- package/Switch.svelte +112 -41
- package/Switch.svelte.d.ts +3 -2
- package/Tab.svelte +53 -29
- package/Tab.svelte.d.ts +7 -4
- package/TabList.svelte +21 -11
- package/TabList.svelte.d.ts +1 -0
- package/TabList.types.d.ts +1 -0
- package/TextArea.svelte +48 -22
- package/TextArea.svelte.d.ts +4 -3
- package/Tooltip.svelte +59 -16
- package/Tooltip.svelte.d.ts +34 -2
- package/Tree.svelte +35 -21
- package/Tree.svelte.d.ts +2 -0
- package/Tree.types.d.ts +6 -8
- package/TreeChevron.svelte +1 -1
- package/TreeItem.svelte +40 -9
- package/TreeItem.svelte.d.ts +2 -0
- package/TreeItem.types.d.ts +4 -4
- package/TreeItemDisplay.svelte +28 -9
- package/TreeItemDisplay.svelte.d.ts +3 -1
- package/actions/clickOutside.js +1 -1
- package/actions/trapKeyboardFocus.d.ts +3 -0
- package/actions/trapKeyboardFocus.js +52 -0
- package/floating-ui.types.d.ts +2 -0
- package/index.d.ts +14 -10
- package/index.js +11 -7
- package/package.json +12 -4
- package/theme/applyTheme.js +3 -2
- package/theme/colors.d.ts +1 -0
- package/theme/colors.js +28 -13
- package/theme/darkTheme.js +129 -87
- package/theme/lightTheme.js +109 -90
- package/Field.constants.d.ts +0 -1
- package/Field.constants.js +0 -1
- package/Field.svelte +0 -265
- package/Field.svelte.d.ts +0 -75
- package/Field.types.d.ts +0 -4
- /package/{Field.types.js → ColorPicker.types.js} +0 -0
package/Switch.svelte
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<script>import
|
|
2
|
-
import { idGenerator } from "./idGenerator";
|
|
1
|
+
<script>import { idGenerator } from "./idGenerator";
|
|
3
2
|
export let checked = false;
|
|
4
3
|
export let disabled = false;
|
|
5
|
-
export let
|
|
6
|
-
export let onText = void 0;
|
|
4
|
+
export let colorful = false;
|
|
7
5
|
export let offText = void 0;
|
|
6
|
+
export let onText = void 0;
|
|
7
|
+
export let vertical = false;
|
|
8
8
|
const inputId = idGenerator.nextId("Switch");
|
|
9
9
|
let inputRef;
|
|
10
10
|
let switchWidth = 0;
|
|
@@ -38,7 +38,7 @@ export const focus = (options) => {
|
|
|
38
38
|
@component
|
|
39
39
|
A styled HTML input type=checkbox element.
|
|
40
40
|
-->
|
|
41
|
-
<div class="sterling-switch" class:
|
|
41
|
+
<div class="sterling-switch" class:colorful class:disabled class:vertical>
|
|
42
42
|
<input
|
|
43
43
|
bind:this={inputRef}
|
|
44
44
|
bind:checked
|
|
@@ -69,14 +69,14 @@ export const focus = (options) => {
|
|
|
69
69
|
on:mouseover
|
|
70
70
|
on:mouseout
|
|
71
71
|
on:mouseup
|
|
72
|
-
on:wheel
|
|
72
|
+
on:wheel|passive
|
|
73
73
|
{...$$restProps}
|
|
74
74
|
/>
|
|
75
75
|
{#if hasOffLabel}
|
|
76
76
|
<div class="off-label">
|
|
77
77
|
<slot name="offLabel" {checked} {disabled} {inputId} {offText} {vertical}>
|
|
78
78
|
{#if offText}
|
|
79
|
-
<
|
|
79
|
+
<label for={inputId}>{offText}</label>
|
|
80
80
|
{/if}
|
|
81
81
|
</slot>
|
|
82
82
|
</div>
|
|
@@ -94,7 +94,7 @@ export const focus = (options) => {
|
|
|
94
94
|
<div class="on-label">
|
|
95
95
|
<slot name="onLabel" {checked} {disabled} {inputId} {onText} {vertical}>
|
|
96
96
|
{#if onText}
|
|
97
|
-
<
|
|
97
|
+
<label for={inputId}>{onText}</label>
|
|
98
98
|
{/if}
|
|
99
99
|
</slot>
|
|
100
100
|
</div>
|
|
@@ -144,6 +144,8 @@ export const focus = (options) => {
|
|
|
144
144
|
grid-row: 1 / span 1;
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
+
/* ----- input hidden ----- */
|
|
148
|
+
|
|
147
149
|
input {
|
|
148
150
|
font: inherit;
|
|
149
151
|
margin: 0;
|
|
@@ -156,14 +158,16 @@ export const focus = (options) => {
|
|
|
156
158
|
opacity: 0;
|
|
157
159
|
}
|
|
158
160
|
|
|
161
|
+
/* ----- switch ----- */
|
|
162
|
+
|
|
159
163
|
.switch {
|
|
160
|
-
background-color: var(--stsv-
|
|
161
|
-
border-color: var(--stsv-
|
|
164
|
+
background-color: var(--stsv-input__background-color);
|
|
165
|
+
border-color: var(--stsv-input__border-color);
|
|
162
166
|
border-radius: 10000px;
|
|
163
|
-
border-style: var(--stsv-
|
|
164
|
-
border-width: var(--stsv-
|
|
167
|
+
border-style: var(--stsv-input__border-style);
|
|
168
|
+
border-width: var(--stsv-input__border-width);
|
|
165
169
|
box-sizing: border-box;
|
|
166
|
-
color: var(--stsv-
|
|
170
|
+
color: var(--stsv-input__color);
|
|
167
171
|
font: inherit;
|
|
168
172
|
pointer-events: none;
|
|
169
173
|
position: relative;
|
|
@@ -172,21 +176,23 @@ export const focus = (options) => {
|
|
|
172
176
|
}
|
|
173
177
|
|
|
174
178
|
.sterling-switch:hover .switch {
|
|
175
|
-
background-color: var(--stsv-
|
|
176
|
-
border-color: var(--stsv-
|
|
177
|
-
color: var(--stsv-
|
|
179
|
+
background-color: var(--stsv-input__background-color--hover);
|
|
180
|
+
border-color: var(--stsv-input__border-color--hover);
|
|
181
|
+
color: var(--stsv-input__color--hover);
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
input:focus-visible ~ .switch {
|
|
181
|
-
background-color: var(--stsv-
|
|
182
|
-
border-color: var(--stsv-
|
|
183
|
-
color: var(--stsv-
|
|
184
|
-
outline-color: var(--stsv-
|
|
185
|
-
outline-offset: var(--stsv-
|
|
186
|
-
outline-style: var(--stsv-
|
|
187
|
-
outline-width: var(--stsv-
|
|
185
|
+
background-color: var(--stsv-input__background-color--focus);
|
|
186
|
+
border-color: var(--stsv-input__border-color--focus);
|
|
187
|
+
color: var(--stsv-common__color--focux);
|
|
188
|
+
outline-color: var(--stsv-common__outline-color);
|
|
189
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
190
|
+
outline-style: var(--stsv-common__outline-style);
|
|
191
|
+
outline-width: var(--stsv-common__outline-width);
|
|
188
192
|
}
|
|
189
193
|
|
|
194
|
+
/* ----- switch vertical ----- */
|
|
195
|
+
|
|
190
196
|
.sterling-switch:not(.vertical) .switch {
|
|
191
197
|
width: 2em;
|
|
192
198
|
height: 1.25em;
|
|
@@ -197,19 +203,49 @@ export const focus = (options) => {
|
|
|
197
203
|
height: 2em;
|
|
198
204
|
}
|
|
199
205
|
|
|
206
|
+
/* ----- labels ----- */
|
|
207
|
+
|
|
208
|
+
label {
|
|
209
|
+
color: var(--stsv-common__color);
|
|
210
|
+
transition: color 250ms;
|
|
211
|
+
font: inherit;
|
|
212
|
+
}
|
|
213
|
+
|
|
200
214
|
.off-label,
|
|
201
215
|
.on-label {
|
|
202
|
-
padding-top: var(--stsv-
|
|
216
|
+
padding-top: var(--stsv-button__border-width);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ----- switch colorful ----- */
|
|
220
|
+
|
|
221
|
+
.sterling-switch.colorful .switch {
|
|
222
|
+
background-color: var(--stsv-input--colorful__background-color);
|
|
223
|
+
border-color: var(--stsv-input--colorful__border-color);
|
|
224
|
+
color: var(--stsv-input--colorful__color);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.sterling-switch.colorful:hover .switch {
|
|
228
|
+
background-color: var(--stsv-input--colorful__background-color--hover);
|
|
229
|
+
border-color: var(--stsv-input--colorful__border-color--hover);
|
|
230
|
+
color: var(--stsv-input_--colorful_color--hover);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.sterling-switch.colorful input:focus-visible ~ .switch {
|
|
234
|
+
background-color: var(--stsv-input--colorful__background-color--focus);
|
|
235
|
+
border-color: var(--stsv-input--colorful__border-color--focus);
|
|
236
|
+
color: var(--stsv-input--colorful__color--focus);
|
|
203
237
|
}
|
|
204
238
|
|
|
239
|
+
/* ----- thumb ----- */
|
|
240
|
+
|
|
205
241
|
.thumb {
|
|
206
|
-
background-color: var(--stsv-
|
|
207
|
-
border-color: var(--stsv-
|
|
242
|
+
background-color: var(--stsv-button__background-color);
|
|
243
|
+
border-color: var(--stsv-button__border-color);
|
|
208
244
|
border-radius: 10000px;
|
|
209
|
-
border-style: var(--stsv-
|
|
210
|
-
border-width: var(--stsv-
|
|
245
|
+
border-style: var(--stsv-button__border-style);
|
|
246
|
+
border-width: var(--stsv-button__border-width);
|
|
211
247
|
box-sizing: border-box;
|
|
212
|
-
color: var(--stsv-
|
|
248
|
+
color: var(--stsv-button__color);
|
|
213
249
|
display: block;
|
|
214
250
|
font: inherit;
|
|
215
251
|
height: 1.25em;
|
|
@@ -219,20 +255,50 @@ export const focus = (options) => {
|
|
|
219
255
|
}
|
|
220
256
|
|
|
221
257
|
.sterling-switch:hover .thumb {
|
|
222
|
-
background-color: var(--stsv-
|
|
223
|
-
border-color: var(--stsv-
|
|
224
|
-
color: var(--stsv-
|
|
258
|
+
background-color: var(--stsv-button__background-color--hover);
|
|
259
|
+
border-color: var(--stsv-button__border-color--hover);
|
|
260
|
+
color: var(--stsv-button__color--hover);
|
|
225
261
|
}
|
|
226
262
|
|
|
227
263
|
.sterling-switch:active .thumb {
|
|
228
|
-
background-color: var(--stsv-
|
|
229
|
-
border-color: var(--stsv-
|
|
230
|
-
color: var(--stsv-
|
|
264
|
+
background-color: var(--stsv-button__background-color--active);
|
|
265
|
+
border-color: var(--stsv-button__border-color--active);
|
|
266
|
+
color: var(--stsv-button__color--hover);
|
|
231
267
|
}
|
|
232
268
|
|
|
269
|
+
/* ----- thumb colorful ----- */
|
|
270
|
+
|
|
271
|
+
.sterling-switch.colorful .thumb {
|
|
272
|
+
background-color: var(--stsv-button--colorful__background-color);
|
|
273
|
+
border-color: var(--stsv-button--colorful__border-color);
|
|
274
|
+
color: var(--stsv-button--colorful__color);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.sterling-switch.colorful:hover .thumb {
|
|
278
|
+
background-color: var(--stsv-button--colorful__background-color--hover);
|
|
279
|
+
border-color: var(--stsv-button--colorful__border-color--hover);
|
|
280
|
+
color: var(--stsv-button--colorful__color--hover);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.sterling-switch.colorful:active .thumb {
|
|
284
|
+
background-color: var(--stsv-button--colorful__background-color--active);
|
|
285
|
+
border-color: var(--stsv-button--colorful__border-color--active);
|
|
286
|
+
color: var(--stsv-button--colorful__color--hover);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* ----- thumb disabled ----- */
|
|
290
|
+
|
|
233
291
|
.sterling-switch .thumb::after {
|
|
234
|
-
background:
|
|
292
|
+
background: repeating-linear-gradient(
|
|
293
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
294
|
+
var(--stsv-common--disabled__stripe-color),
|
|
295
|
+
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
296
|
+
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
297
|
+
var(--stsv-common--disabled__stripe-color--alt)
|
|
298
|
+
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
299
|
+
);
|
|
235
300
|
bottom: 0;
|
|
301
|
+
border-radius: 10000px;
|
|
236
302
|
content: '';
|
|
237
303
|
left: 0;
|
|
238
304
|
opacity: 0;
|
|
@@ -247,20 +313,25 @@ export const focus = (options) => {
|
|
|
247
313
|
opacity: 1;
|
|
248
314
|
}
|
|
249
315
|
|
|
316
|
+
/* ----- thumb vertical ----- */
|
|
317
|
+
|
|
250
318
|
.sterling-switch:not(.vertical) .thumb {
|
|
251
|
-
top: calc(-1 * var(--stsv-
|
|
252
|
-
transform: translateX(calc(var(--thumb-offset) - var(--stsv-
|
|
319
|
+
top: calc(-1 * var(--stsv-button__border-width));
|
|
320
|
+
transform: translateX(calc(var(--thumb-offset) - var(--stsv-button__border-width)));
|
|
253
321
|
}
|
|
254
322
|
|
|
255
323
|
.sterling-switch.vertical .thumb {
|
|
256
|
-
left: calc(-1 * var(--stsv-
|
|
257
|
-
transform: translateY(calc(var(--thumb-offset) - var(--stsv-
|
|
324
|
+
left: calc(-1 * var(--stsv-button__border-width));
|
|
325
|
+
transform: translateY(calc(var(--thumb-offset) - var(--stsv-button__border-width)));
|
|
258
326
|
}
|
|
259
327
|
|
|
328
|
+
/* ----- reduced motion ----- */
|
|
329
|
+
|
|
260
330
|
@media (prefers-reduced-motion) {
|
|
261
331
|
.switch,
|
|
262
332
|
.thumb,
|
|
263
|
-
.thumb::after
|
|
333
|
+
.thumb::after,
|
|
334
|
+
label {
|
|
264
335
|
transition: none;
|
|
265
336
|
}
|
|
266
337
|
}
|
package/Switch.svelte.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ declare const __propDef: {
|
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
checked?: boolean | undefined;
|
|
6
6
|
disabled?: boolean | undefined;
|
|
7
|
-
|
|
8
|
-
onText?: string | undefined;
|
|
7
|
+
colorful?: boolean | undefined;
|
|
9
8
|
offText?: string | undefined;
|
|
9
|
+
onText?: string | undefined;
|
|
10
|
+
vertical?: boolean | undefined;
|
|
10
11
|
blur?: (() => void) | undefined;
|
|
11
12
|
click?: (() => void) | undefined;
|
|
12
13
|
focus?: ((options?: FocusOptions) => void) | undefined;
|
package/Tab.svelte
CHANGED
|
@@ -7,6 +7,7 @@ export let text = void 0;
|
|
|
7
7
|
export let value;
|
|
8
8
|
let tabRef;
|
|
9
9
|
const {
|
|
10
|
+
colorful,
|
|
10
11
|
disabled: tabListDisabled,
|
|
11
12
|
selectedValue,
|
|
12
13
|
vertical
|
|
@@ -36,6 +37,7 @@ export const focus = (options) => {
|
|
|
36
37
|
bind:this={tabRef}
|
|
37
38
|
aria-selected={selected}
|
|
38
39
|
class="sterling-tab"
|
|
40
|
+
class:colorful={$colorful}
|
|
39
41
|
disabled={_disabled}
|
|
40
42
|
class:selected
|
|
41
43
|
class:using-keyboard={$usingKeyboard}
|
|
@@ -74,7 +76,7 @@ export const focus = (options) => {
|
|
|
74
76
|
on:pointerover
|
|
75
77
|
on:pointerout
|
|
76
78
|
on:pointerup
|
|
77
|
-
on:wheel
|
|
79
|
+
on:wheel|passive
|
|
78
80
|
>
|
|
79
81
|
<div class="content">
|
|
80
82
|
<slot disabled={_disabled} {selected} {value} {text}>
|
|
@@ -90,13 +92,13 @@ export const focus = (options) => {
|
|
|
90
92
|
.sterling-tab {
|
|
91
93
|
align-content: center;
|
|
92
94
|
align-items: center;
|
|
93
|
-
background-color: var(--stsv-
|
|
95
|
+
background-color: var(--stsv-common__background-color);
|
|
94
96
|
border-color: transparent;
|
|
95
|
-
border-radius: var(--stsv-
|
|
96
|
-
border-style: var(--stsv-
|
|
97
|
+
border-radius: var(--stsv-button__border-radius);
|
|
98
|
+
border-style: var(--stsv-common__border-style);
|
|
97
99
|
border-width: 0;
|
|
98
100
|
box-sizing: border-box;
|
|
99
|
-
color: var(--stsv-
|
|
101
|
+
color: var(--stsv-common__color);
|
|
100
102
|
cursor: pointer;
|
|
101
103
|
display: grid;
|
|
102
104
|
font: inherit;
|
|
@@ -127,30 +129,29 @@ export const focus = (options) => {
|
|
|
127
129
|
column-gap: 0.15em;
|
|
128
130
|
}
|
|
129
131
|
|
|
130
|
-
.sterling-tab:hover {
|
|
131
|
-
background-color: var(--stsv-Common__background-color--hover);
|
|
132
|
-
color: var(--stsv-Common__color--hover);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.sterling-tab:active {
|
|
136
|
-
background-color: var(--stsv-Common__background-color--active);
|
|
137
|
-
color: var(--stsv-Common__color--active);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
132
|
.sterling-tab.using-keyboard:focus-visible {
|
|
141
|
-
outline-color: var(--stsv-
|
|
142
|
-
outline-offset: var(--stsv-
|
|
143
|
-
outline-style: var(--stsv-
|
|
144
|
-
outline-width: var(--stsv-
|
|
133
|
+
outline-color: var(--stsv-common__outline-color);
|
|
134
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
135
|
+
outline-style: var(--stsv-common__outline-style);
|
|
136
|
+
outline-width: var(--stsv-common__outline-width);
|
|
145
137
|
}
|
|
146
138
|
|
|
139
|
+
/* ----- disabled -----*/
|
|
140
|
+
|
|
147
141
|
.sterling-tab:disabled {
|
|
148
142
|
cursor: not-allowed;
|
|
149
143
|
outline: none;
|
|
150
144
|
}
|
|
151
145
|
|
|
152
146
|
.sterling-tab::after {
|
|
153
|
-
background:
|
|
147
|
+
background: repeating-linear-gradient(
|
|
148
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
149
|
+
var(--stsv-common--disabled__stripe-color),
|
|
150
|
+
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
151
|
+
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
152
|
+
var(--stsv-common--disabled__stripe-color--alt)
|
|
153
|
+
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
154
|
+
);
|
|
154
155
|
bottom: 0;
|
|
155
156
|
content: '';
|
|
156
157
|
left: 0;
|
|
@@ -166,6 +167,8 @@ export const focus = (options) => {
|
|
|
166
167
|
opacity: 1;
|
|
167
168
|
}
|
|
168
169
|
|
|
170
|
+
/* ----- content -----*/
|
|
171
|
+
|
|
169
172
|
.content {
|
|
170
173
|
padding: 0 0.2em;
|
|
171
174
|
}
|
|
@@ -174,6 +177,8 @@ export const focus = (options) => {
|
|
|
174
177
|
padding-top: 0.25em;
|
|
175
178
|
}
|
|
176
179
|
|
|
180
|
+
/* ----- indicator -----*/
|
|
181
|
+
|
|
177
182
|
.indicator {
|
|
178
183
|
background-color: transparent;
|
|
179
184
|
border-radius: 10000px;
|
|
@@ -190,24 +195,43 @@ export const focus = (options) => {
|
|
|
190
195
|
width: 0.4em;
|
|
191
196
|
}
|
|
192
197
|
|
|
193
|
-
.sterling-tab:hover .indicator {
|
|
194
|
-
background-color: var(--stsv-
|
|
198
|
+
.sterling-tab:not(.selected):not(:active):hover .indicator {
|
|
199
|
+
background-color: var(--stsv-input__border-color--hover);
|
|
200
|
+
opacity: 0.3;
|
|
195
201
|
}
|
|
196
202
|
|
|
197
203
|
.sterling-tab:active .indicator {
|
|
198
|
-
background-color: var(--stsv-
|
|
204
|
+
background-color: var(--stsv-input__border-color--selected);
|
|
199
205
|
}
|
|
200
206
|
|
|
201
|
-
.sterling-tab
|
|
202
|
-
|
|
203
|
-
.sterling-tab:disabled:active .indicator {
|
|
204
|
-
background-color: transparent;
|
|
207
|
+
.sterling-tab.selected .indicator {
|
|
208
|
+
background-color: var(--stsv-input__border-color--selected);
|
|
205
209
|
}
|
|
206
210
|
|
|
207
|
-
|
|
208
|
-
|
|
211
|
+
/* ----- indicator colorful -----*/
|
|
212
|
+
|
|
213
|
+
.sterling-tab.colorful:not(.selected):not(:active):hover .indicator {
|
|
214
|
+
background-color: var(--stsv-input--colorful__border-color--hover);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.sterling-tab.colorful:active .indicator {
|
|
218
|
+
background-color: var(--stsv-input--colorful__border-color--selected);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.sterling-tab.colorful.selected .indicator {
|
|
222
|
+
background-color: var(--stsv-input--colorful__border-color--selected);
|
|
209
223
|
}
|
|
210
224
|
|
|
225
|
+
/* ----- indicator disabled -----*/
|
|
226
|
+
|
|
227
|
+
.sterling-tab:disabled:not(.selected) .indicator,
|
|
228
|
+
.sterling-tab:disabled:not(.selected):hover .indicator,
|
|
229
|
+
.sterling-tab:disabled:not(.selected):active .indicator {
|
|
230
|
+
background-color: transparent;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ----- reduced motion -----*/
|
|
234
|
+
|
|
211
235
|
@media (prefers-reduced-motion) {
|
|
212
236
|
.sterling-tab,
|
|
213
237
|
.sterling-tab::after,
|
package/Tab.svelte.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
3
|
props: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* When true, the tab is disabled.
|
|
6
|
+
* The tab is also disabled if the tab list is disabled.
|
|
7
|
+
*/ disabled?: boolean | undefined;
|
|
8
|
+
/** When true, the tab is selected. */ selected?: boolean | undefined;
|
|
9
|
+
/** The text of the tab when the default slot is not replaced. */ text?: string | undefined;
|
|
10
|
+
/** The value uniquely identifying this item within the tab list. */ value: string;
|
|
8
11
|
click?: (() => void) | undefined;
|
|
9
12
|
blur?: (() => void) | undefined;
|
|
10
13
|
focus?: ((options?: FocusOptions) => void) | undefined;
|
package/TabList.svelte
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
<script>import { createEventDispatcher, setContext } from "svelte";
|
|
2
2
|
import { writable } from "svelte/store";
|
|
3
3
|
import { TAB_LIST_CONTEXT_KEY } from "./TabList.constants";
|
|
4
|
-
|
|
4
|
+
export let colorful = false;
|
|
5
5
|
export let disabled = false;
|
|
6
6
|
export let vertical = false;
|
|
7
7
|
export let selectedValue = void 0;
|
|
8
8
|
let tabListRef;
|
|
9
9
|
let lastSelectedTabRef;
|
|
10
|
+
const colorfulStore = writable(colorful);
|
|
10
11
|
const disabledStore = writable(disabled);
|
|
11
12
|
const selectedValueStore = writable(selectedValue);
|
|
12
13
|
const verticalStore = writable(vertical);
|
|
14
|
+
$:
|
|
15
|
+
colorfulStore.set(colorful);
|
|
13
16
|
$:
|
|
14
17
|
disabledStore.set(disabled);
|
|
15
18
|
$:
|
|
@@ -30,7 +33,12 @@ export const blur = () => {
|
|
|
30
33
|
tabListRef?.blur();
|
|
31
34
|
};
|
|
32
35
|
export const focus = (options) => {
|
|
33
|
-
|
|
36
|
+
let selectedItem = getSelectedTabElement();
|
|
37
|
+
if (selectedValue && selectedItem) {
|
|
38
|
+
selectTab(selectedValue, selectedItem);
|
|
39
|
+
} else {
|
|
40
|
+
selectFirstTab();
|
|
41
|
+
}
|
|
34
42
|
};
|
|
35
43
|
const isElementTab = (candidate) => {
|
|
36
44
|
return candidate && candidate.getAttribute("data-value") !== null && candidate.getAttribute("data-value") !== void 0 && candidate.getAttribute("role") === "tab";
|
|
@@ -61,8 +69,8 @@ export const selectFirstTab = () => {
|
|
|
61
69
|
return false;
|
|
62
70
|
};
|
|
63
71
|
export const selectPreviousTab = () => {
|
|
64
|
-
let
|
|
65
|
-
let candidate =
|
|
72
|
+
let selectedTab = getSelectedTabElement();
|
|
73
|
+
let candidate = selectedTab?.previousElementSibling;
|
|
66
74
|
while (candidate && !isElementTab(candidate)) {
|
|
67
75
|
candidate = candidate.previousElementSibling;
|
|
68
76
|
}
|
|
@@ -74,8 +82,8 @@ export const selectPreviousTab = () => {
|
|
|
74
82
|
return false;
|
|
75
83
|
};
|
|
76
84
|
export const selectNextTab = () => {
|
|
77
|
-
let
|
|
78
|
-
let candidate =
|
|
85
|
+
let selectedTab = getSelectedTabElement();
|
|
86
|
+
let candidate = selectedTab?.nextElementSibling;
|
|
79
87
|
while (candidate && !isElementTab(candidate)) {
|
|
80
88
|
candidate = candidate.nextElementSibling;
|
|
81
89
|
}
|
|
@@ -158,6 +166,7 @@ const onKeydown = (event) => {
|
|
|
158
166
|
}
|
|
159
167
|
};
|
|
160
168
|
setContext(TAB_LIST_CONTEXT_KEY, {
|
|
169
|
+
colorful: colorfulStore,
|
|
161
170
|
disabled: disabledStore,
|
|
162
171
|
selectedValue: selectedValueStore,
|
|
163
172
|
vertical: verticalStore
|
|
@@ -168,9 +177,10 @@ setContext(TAB_LIST_CONTEXT_KEY, {
|
|
|
168
177
|
aria-orientation={vertical ? 'vertical' : 'horizontal'}
|
|
169
178
|
bind:this={tabListRef}
|
|
170
179
|
class="sterling-tab-list"
|
|
171
|
-
|
|
172
|
-
class:vertical
|
|
180
|
+
class:colorful
|
|
173
181
|
class:disabled
|
|
182
|
+
class:vertical
|
|
183
|
+
role="tablist"
|
|
174
184
|
on:blur
|
|
175
185
|
on:click
|
|
176
186
|
on:click={onClick}
|
|
@@ -198,7 +208,7 @@ setContext(TAB_LIST_CONTEXT_KEY, {
|
|
|
198
208
|
on:mouseout
|
|
199
209
|
on:mouseup
|
|
200
210
|
on:scroll
|
|
201
|
-
on:wheel
|
|
211
|
+
on:wheel|passive
|
|
202
212
|
on:paste
|
|
203
213
|
{...$$restProps}
|
|
204
214
|
>
|
|
@@ -210,7 +220,7 @@ setContext(TAB_LIST_CONTEXT_KEY, {
|
|
|
210
220
|
box-sizing: border-box;
|
|
211
221
|
display: grid;
|
|
212
222
|
margin: 0;
|
|
213
|
-
padding: calc(2 * var(--stsv-
|
|
223
|
+
padding: calc(2 * var(--stsv-common__outline-width));
|
|
214
224
|
}
|
|
215
225
|
|
|
216
226
|
.sterling-tab-list:not(.vertical) {
|
|
@@ -232,7 +242,7 @@ setContext(TAB_LIST_CONTEXT_KEY, {
|
|
|
232
242
|
}
|
|
233
243
|
|
|
234
244
|
.sterling-tab-list:hover {
|
|
235
|
-
color: var(--stsv-
|
|
245
|
+
color: var(--stsv-common__color--hover);
|
|
236
246
|
}
|
|
237
247
|
|
|
238
248
|
@media (prefers-reduced-motion) {
|
package/TabList.svelte.d.ts
CHANGED
package/TabList.types.d.ts
CHANGED
package/TextArea.svelte
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script>import { onMount } from "svelte";
|
|
2
|
-
export let autoHeight = false;
|
|
3
2
|
export let disabled = false;
|
|
4
|
-
export let resize = "none";
|
|
5
3
|
export let value = "";
|
|
4
|
+
export let autoHeight = false;
|
|
5
|
+
export let colorful = false;
|
|
6
|
+
export let resize = "none";
|
|
6
7
|
let textAreaRef;
|
|
7
8
|
const autoSetHeight = () => {
|
|
8
9
|
if (autoHeight && textAreaRef) {
|
|
@@ -42,7 +43,7 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
42
43
|
};
|
|
43
44
|
</script>
|
|
44
45
|
|
|
45
|
-
<div class="sterling-text-area" class:disabled>
|
|
46
|
+
<div class="sterling-text-area" class:colorful class:disabled>
|
|
46
47
|
<textarea
|
|
47
48
|
bind:this={textAreaRef}
|
|
48
49
|
bind:value
|
|
@@ -81,7 +82,7 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
81
82
|
on:select
|
|
82
83
|
on:submit
|
|
83
84
|
on:reset
|
|
84
|
-
on:wheel
|
|
85
|
+
on:wheel|passive
|
|
85
86
|
on:input={onInput}
|
|
86
87
|
{...$$restProps}
|
|
87
88
|
/>
|
|
@@ -95,13 +96,13 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
textarea {
|
|
98
|
-
background-color: var(--stsv-
|
|
99
|
-
border-color: var(--stsv-
|
|
100
|
-
border-radius: var(--stsv-
|
|
101
|
-
border-style: var(--stsv-
|
|
102
|
-
border-width: var(--stsv-
|
|
99
|
+
background-color: var(--stsv-input__background-color);
|
|
100
|
+
border-color: var(--stsv-input__border-color);
|
|
101
|
+
border-radius: var(--stsv-input__border-radius);
|
|
102
|
+
border-style: var(--stsv-input__border-style);
|
|
103
|
+
border-width: var(--stsv-input__border-width);
|
|
103
104
|
box-sizing: border-box;
|
|
104
|
-
color: var(--stsv-
|
|
105
|
+
color: var(--stsv-input__color);
|
|
105
106
|
display: block;
|
|
106
107
|
font: inherit;
|
|
107
108
|
line-height: inherit;
|
|
@@ -117,19 +118,37 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
textarea:hover {
|
|
120
|
-
background-color: var(--stsv-
|
|
121
|
-
border-color: var(--stsv-
|
|
122
|
-
color: var(--stsv-
|
|
121
|
+
background-color: var(--stsv-input__background-color--hover);
|
|
122
|
+
border-color: var(--stsv-input__border-color--hover);
|
|
123
|
+
color: var(--stsv-input__color--hover);
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
textarea:focus {
|
|
126
|
-
background-color: var(--stsv-
|
|
127
|
-
border-color: var(--stsv-
|
|
128
|
-
color: var(--stsv-
|
|
129
|
-
outline-color: var(--stsv-
|
|
130
|
-
outline-offset: var(--stsv-
|
|
131
|
-
outline-style: var(--stsv-
|
|
132
|
-
outline-width: var(--stsv-
|
|
127
|
+
background-color: var(--stsv-input__background-color--focus);
|
|
128
|
+
border-color: var(--stsv-input__border-color--focus);
|
|
129
|
+
color: var(--stsv-input__color--focus);
|
|
130
|
+
outline-color: var(--stsv-common__outline-color);
|
|
131
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
132
|
+
outline-style: var(--stsv-common__outline-style);
|
|
133
|
+
outline-width: var(--stsv-common__outline-width);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.sterling-text-area.colorful textarea {
|
|
137
|
+
background-color: var(--stsv-input--colorful__background-color);
|
|
138
|
+
border-color: var(--stsv-input--colorful__border-color);
|
|
139
|
+
color: var(--stsv-input--colorful__color);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.sterling-text-area.colorful textarea:hover {
|
|
143
|
+
background-color: var(--stsv-input--colorful__background-color--hover);
|
|
144
|
+
border-color: var(--stsv-input--colorful__border-color--hover);
|
|
145
|
+
color: var(--stsv-input--colorful__color--hover);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.sterling-text-area.colorful textarea:focus {
|
|
149
|
+
background-color: var(--stsv-input--colorful__background-color--focus);
|
|
150
|
+
border-color: var(--stsv-input--colorful__border-color--focus);
|
|
151
|
+
color: var(--stsv-input--colorful__color--focus);
|
|
133
152
|
}
|
|
134
153
|
|
|
135
154
|
.sterling-text-area:disabled {
|
|
@@ -138,7 +157,14 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
138
157
|
}
|
|
139
158
|
|
|
140
159
|
.sterling-text-area::after {
|
|
141
|
-
background:
|
|
160
|
+
background: repeating-linear-gradient(
|
|
161
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
162
|
+
var(--stsv-common--disabled__stripe-color),
|
|
163
|
+
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
164
|
+
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
165
|
+
var(--stsv-common--disabled__stripe-color--alt)
|
|
166
|
+
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
167
|
+
);
|
|
142
168
|
bottom: 0;
|
|
143
169
|
content: '';
|
|
144
170
|
left: 0;
|
|
@@ -155,7 +181,7 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
155
181
|
}
|
|
156
182
|
|
|
157
183
|
textarea::placeholder {
|
|
158
|
-
color: var(--stsv-
|
|
184
|
+
color: var(--stsv-common__color--subtle);
|
|
159
185
|
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
160
186
|
}
|
|
161
187
|
|