@geoffcox/sterling-svelte 0.0.9 → 0.0.11
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/README.md +4 -0
- package/display/Label.svelte +27 -0
- package/display/Label.svelte.d.ts +20 -0
- package/display/Progress.svelte +141 -143
- package/index.d.ts +3 -1
- package/index.js +3 -1
- package/inputs/Checkbox.svelte +129 -126
- package/inputs/Input.svelte +108 -150
- package/inputs/Radio.svelte +129 -122
- package/inputs/Select.svelte +190 -195
- package/inputs/Slider.svelte +40 -74
- package/inputs/Switch.svelte +219 -0
- package/inputs/Switch.svelte.d.ts +58 -0
- package/lists/List.svelte +147 -223
- package/package.json +20 -1
package/inputs/Checkbox.svelte
CHANGED
|
@@ -1,159 +1,162 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script>import { v4 as uuid } from "uuid";
|
|
2
|
+
import Label from "../display/Label.svelte";
|
|
3
|
+
export let checked = false;
|
|
2
4
|
export let disabled = false;
|
|
5
|
+
const inputId = uuid();
|
|
3
6
|
</script>
|
|
4
7
|
|
|
5
8
|
<!--
|
|
6
9
|
@component
|
|
7
10
|
A styled HTML input type=checkbox element.
|
|
8
11
|
-->
|
|
9
|
-
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
12
|
+
<div class="sterling-checkbox">
|
|
13
|
+
<div class="container">
|
|
14
|
+
<input
|
|
15
|
+
type="checkbox"
|
|
16
|
+
on:blur
|
|
17
|
+
on:click
|
|
18
|
+
on:change
|
|
19
|
+
on:dblclick
|
|
20
|
+
on:focus
|
|
21
|
+
on:focusin
|
|
22
|
+
on:focusout
|
|
23
|
+
on:keydown
|
|
24
|
+
on:keypress
|
|
25
|
+
on:keyup
|
|
26
|
+
on:input
|
|
27
|
+
on:mousedown
|
|
28
|
+
on:mouseenter
|
|
29
|
+
on:mouseleave
|
|
30
|
+
on:mousemove
|
|
31
|
+
on:mouseover
|
|
32
|
+
on:mouseout
|
|
33
|
+
on:mouseup
|
|
34
|
+
on:toggle
|
|
35
|
+
on:wheel
|
|
36
|
+
bind:checked
|
|
37
|
+
{...$$restProps}
|
|
38
|
+
id={inputId}
|
|
39
|
+
{disabled}
|
|
40
|
+
/>
|
|
41
|
+
<div class="indicator" />
|
|
42
|
+
</div>
|
|
43
|
+
{#if $$slots.label}
|
|
44
|
+
<div class="label">
|
|
45
|
+
<Label {disabled} for={inputId}>
|
|
46
|
+
<slot name="label" />
|
|
47
|
+
</Label>
|
|
48
|
+
</div>
|
|
49
|
+
{/if}
|
|
50
|
+
</div>
|
|
44
51
|
|
|
45
52
|
<style>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
.sterling-checkbox {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
align-content: stretch;
|
|
56
|
+
align-items: stretch;
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
font: inherit;
|
|
59
|
+
gap: 0.4em;
|
|
60
|
+
outline: none;
|
|
61
|
+
padding: 0;
|
|
62
|
+
margin: 0;
|
|
63
|
+
}
|
|
57
64
|
|
|
58
|
-
|
|
65
|
+
/*
|
|
59
66
|
The container
|
|
60
67
|
- allows the input to be hidden
|
|
61
68
|
- avoids input participating in layout
|
|
62
69
|
- prevents collisions with surrounding slots
|
|
63
70
|
*/
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
.container {
|
|
72
|
+
font: inherit;
|
|
73
|
+
position: relative;
|
|
74
|
+
display: grid;
|
|
75
|
+
align-items: center;
|
|
76
|
+
}
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
/*
|
|
72
79
|
The input is hidden since the built-in browser checkbox cannot be customized
|
|
73
80
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
input {
|
|
82
|
+
font: inherit;
|
|
83
|
+
margin: 0;
|
|
84
|
+
padding: 0;
|
|
85
|
+
position: absolute;
|
|
86
|
+
opacity: 0;
|
|
87
|
+
height: 20px;
|
|
88
|
+
width: 20px;
|
|
89
|
+
}
|
|
81
90
|
|
|
82
|
-
|
|
91
|
+
/*
|
|
83
92
|
The indicator handles both the box and the checkmark.
|
|
84
93
|
The box cannot be on the container since the adjacent sibling selector is needed
|
|
85
94
|
and there is not a parent CSS selector.
|
|
86
95
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
.indicator {
|
|
97
|
+
background-color: var(--Input__background-color);
|
|
98
|
+
border-color: var(--Input__border-color);
|
|
99
|
+
border-style: var(--Input__border-style);
|
|
100
|
+
border-width: var(--Input__border-width);
|
|
101
|
+
box-sizing: border-box;
|
|
102
|
+
display: inline-block;
|
|
103
|
+
height: 20px;
|
|
104
|
+
position: relative;
|
|
105
|
+
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
106
|
+
width: 20px;
|
|
107
|
+
pointer-events: none;
|
|
108
|
+
}
|
|
99
109
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
input:checked + .indicator {
|
|
111
|
+
background-color: var(--Input__background-color);
|
|
112
|
+
border-color: var(--Input__border-color);
|
|
113
|
+
}
|
|
104
114
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
115
|
+
input:focus-visible + .indicator {
|
|
116
|
+
outline-color: var(--Common__outline-color);
|
|
117
|
+
outline-offset: var(--Common__outline-offset);
|
|
118
|
+
outline-style: var(--Common__outline-style);
|
|
119
|
+
outline-width: var(--Common__outline-width);
|
|
120
|
+
}
|
|
111
121
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
input:disabled + .indicator {
|
|
123
|
+
background-color: var(--Input__background-color--disabled);
|
|
124
|
+
border-color: var(--Input__border-color--disabled);
|
|
125
|
+
}
|
|
116
126
|
|
|
117
|
-
|
|
127
|
+
/*
|
|
118
128
|
The checkmark is a rotated L centered in the box.
|
|
119
129
|
*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
130
|
+
input:checked + .indicator::after {
|
|
131
|
+
border-color: var(--Input__color);
|
|
132
|
+
border-style: solid;
|
|
133
|
+
border-width: 0 3px 3px 0;
|
|
134
|
+
box-sizing: border-box;
|
|
135
|
+
content: '';
|
|
136
|
+
height: 14px;
|
|
137
|
+
left: 50%;
|
|
138
|
+
position: absolute;
|
|
139
|
+
top: 50%;
|
|
140
|
+
transform: translate(-50%, -50%) rotate(45deg);
|
|
141
|
+
transform-origin: center;
|
|
142
|
+
transition: border-color 250ms;
|
|
143
|
+
width: 7px;
|
|
144
|
+
visibility: visible;
|
|
145
|
+
}
|
|
136
146
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
147
|
+
input:checked:disabled + .indicator::after {
|
|
148
|
+
border-color: var(--Input__color--disabled);
|
|
149
|
+
}
|
|
140
150
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
146
|
-
}
|
|
151
|
+
.label {
|
|
152
|
+
user-select: none;
|
|
153
|
+
margin-top: 0.25em;
|
|
154
|
+
}
|
|
147
155
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
input:checked + .indicator::after,
|
|
155
|
-
.label-content {
|
|
156
|
-
transition: none;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
156
|
+
@media (prefers-reduced-motion) {
|
|
157
|
+
.indicator,
|
|
158
|
+
input:checked + .indicator::after {
|
|
159
|
+
transition: none;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
159
162
|
</style>
|
package/inputs/Input.svelte
CHANGED
|
@@ -1,169 +1,127 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script>import { v4 as uuid } from "uuid";
|
|
2
|
+
import Label from "../display/Label.svelte";
|
|
3
|
+
export let value = "";
|
|
2
4
|
export let disabled = false;
|
|
5
|
+
const inputId = uuid();
|
|
3
6
|
</script>
|
|
4
7
|
|
|
5
8
|
<!--
|
|
6
9
|
@component
|
|
7
10
|
A styled HTML input element with optional label.
|
|
8
11
|
-->
|
|
9
|
-
|
|
10
|
-
{#if $$slots.label}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
class="sterling-input"
|
|
51
|
-
bind:value
|
|
52
|
-
on:blur
|
|
53
|
-
on:click
|
|
54
|
-
on:change
|
|
55
|
-
on:copy
|
|
56
|
-
on:cut
|
|
57
|
-
on:paste
|
|
58
|
-
on:dblclick
|
|
59
|
-
on:focus
|
|
60
|
-
on:focusin
|
|
61
|
-
on:focusout
|
|
62
|
-
on:input
|
|
63
|
-
on:invalid
|
|
64
|
-
on:keydown
|
|
65
|
-
on:keypress
|
|
66
|
-
on:keyup
|
|
67
|
-
on:mousedown
|
|
68
|
-
on:mouseenter
|
|
69
|
-
on:mouseleave
|
|
70
|
-
on:mousemove
|
|
71
|
-
on:mouseover
|
|
72
|
-
on:mouseout
|
|
73
|
-
on:mouseup
|
|
74
|
-
on:select
|
|
75
|
-
on:submit
|
|
76
|
-
on:reset
|
|
77
|
-
on:wheel
|
|
78
|
-
{...$$restProps}
|
|
79
|
-
{disabled}
|
|
80
|
-
/>
|
|
81
|
-
{/if}
|
|
12
|
+
<div class="sterling-input">
|
|
13
|
+
{#if $$slots.label}
|
|
14
|
+
<div class="label">
|
|
15
|
+
<Label {disabled} for={inputId}>
|
|
16
|
+
<slot name="label" />
|
|
17
|
+
</Label>
|
|
18
|
+
</div>
|
|
19
|
+
{/if}
|
|
20
|
+
<input
|
|
21
|
+
bind:value
|
|
22
|
+
on:blur
|
|
23
|
+
on:click
|
|
24
|
+
on:change
|
|
25
|
+
on:copy
|
|
26
|
+
on:cut
|
|
27
|
+
on:paste
|
|
28
|
+
on:dblclick
|
|
29
|
+
on:focus
|
|
30
|
+
on:focusin
|
|
31
|
+
on:focusout
|
|
32
|
+
on:input
|
|
33
|
+
on:invalid
|
|
34
|
+
on:keydown
|
|
35
|
+
on:keypress
|
|
36
|
+
on:keyup
|
|
37
|
+
on:mousedown
|
|
38
|
+
on:mouseenter
|
|
39
|
+
on:mouseleave
|
|
40
|
+
on:mousemove
|
|
41
|
+
on:mouseover
|
|
42
|
+
on:mouseout
|
|
43
|
+
on:mouseup
|
|
44
|
+
on:select
|
|
45
|
+
on:submit
|
|
46
|
+
on:reset
|
|
47
|
+
on:wheel
|
|
48
|
+
{...$$restProps}
|
|
49
|
+
{disabled}
|
|
50
|
+
id={inputId}
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
82
53
|
|
|
83
54
|
<style>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
55
|
+
.sterling-input {
|
|
56
|
+
display: flex;
|
|
57
|
+
flex-direction: column;
|
|
58
|
+
background-color: var(--Input__background-color);
|
|
59
|
+
border-color: var(--Input__border-color);
|
|
60
|
+
border-radius: var(--Input__border-radius);
|
|
61
|
+
border-style: var(--Input__border-style);
|
|
62
|
+
border-width: var(--Input__border-width);
|
|
63
|
+
color: var(--Input__color);
|
|
64
|
+
font: inherit;
|
|
65
|
+
margin: 0;
|
|
66
|
+
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
67
|
+
}
|
|
88
68
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
69
|
+
.sterling-input:hover {
|
|
70
|
+
background-color: var(--Input__background-color--hover);
|
|
71
|
+
border-color: var(--Input__border-color--hover);
|
|
72
|
+
color: var(--Input__color--hover);
|
|
73
|
+
}
|
|
95
74
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
75
|
+
.sterling-input:focus-within {
|
|
76
|
+
background-color: var(--Input__background-color--focus);
|
|
77
|
+
border-color: var(--Input__border-color--focus);
|
|
78
|
+
color: var(--Input__color--focus);
|
|
79
|
+
outline-color: var(--Common__outline-color);
|
|
80
|
+
outline-offset: var(--Common__outline-offset);
|
|
81
|
+
outline-style: var(--Common__outline-style);
|
|
82
|
+
outline-width: var(--Common__outline-width);
|
|
83
|
+
}
|
|
99
84
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
border-width: var(--Input__border-width);
|
|
107
|
-
color: var(--Input__color);
|
|
108
|
-
font: inherit;
|
|
109
|
-
margin: 0;
|
|
110
|
-
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
111
|
-
}
|
|
85
|
+
.sterling-input:disabled {
|
|
86
|
+
background-color: var(--Input__background-color--disabled);
|
|
87
|
+
border-color: var(---Input__border-color--disabled);
|
|
88
|
+
color: var(--Input__color--disabled);
|
|
89
|
+
cursor: not-allowed;
|
|
90
|
+
}
|
|
112
91
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
92
|
+
.sterling-input input {
|
|
93
|
+
font: inherit;
|
|
94
|
+
color: inherit;
|
|
95
|
+
padding: 0.5em 0.5em;
|
|
96
|
+
}
|
|
119
97
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
outline-width: var(--Common__outline-width);
|
|
129
|
-
}
|
|
98
|
+
.sterling-input input,
|
|
99
|
+
.sterling-input input:hover,
|
|
100
|
+
.sterling-input input:focus-within,
|
|
101
|
+
.sterling-input input:disabled {
|
|
102
|
+
background-color: transparent;
|
|
103
|
+
border: none;
|
|
104
|
+
outline: none;
|
|
105
|
+
}
|
|
130
106
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
color: var(--Input__color--disabled);
|
|
136
|
-
cursor: not-allowed;
|
|
137
|
-
}
|
|
107
|
+
.sterling-input input::placeholder {
|
|
108
|
+
color: var(--Display__color--faint);
|
|
109
|
+
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
110
|
+
}
|
|
138
111
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
112
|
+
.sterling-input input:disabled::placeholder {
|
|
113
|
+
color: var(--Display__color--disabled);
|
|
114
|
+
}
|
|
142
115
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
background-color: transparent;
|
|
148
|
-
border: none;
|
|
149
|
-
outline: none;
|
|
150
|
-
}
|
|
116
|
+
.label {
|
|
117
|
+
font-size: 0.7em;
|
|
118
|
+
margin: 0.5em 0 0 0.7em;
|
|
119
|
+
}
|
|
151
120
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
color: var(--Display__color--disabled);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
@media (prefers-reduced-motion) {
|
|
162
|
-
.sterling-input-label,
|
|
163
|
-
.sterling-input,
|
|
164
|
-
.label-content,
|
|
165
|
-
.sterling-input::placeholder {
|
|
166
|
-
transition: none;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
121
|
+
@media (prefers-reduced-motion) {
|
|
122
|
+
.sterling-input,
|
|
123
|
+
.sterling-input input::placeholder {
|
|
124
|
+
transition: none;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
169
127
|
</style>
|