@geoffcox/sterling-svelte 0.0.26 → 0.0.27
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 +79 -24
- package/Button.svelte.d.ts +1 -0
- package/Checkbox.svelte +44 -19
- package/Checkbox.svelte.d.ts +1 -0
- package/ColorPicker.constants.d.ts +1 -0
- package/ColorPicker.constants.js +1 -0
- package/ColorPicker.svelte +226 -0
- package/ColorPicker.svelte.d.ts +22 -0
- package/ColorPicker.types.d.ts +4 -0
- package/ColorPicker.types.js +1 -0
- package/Dialog.svelte +10 -10
- package/Dropdown.svelte +87 -55
- package/Dropdown.svelte.d.ts +4 -0
- package/Field.svelte +31 -31
- package/HexColorSliders.svelte +150 -0
- package/HexColorSliders.svelte.d.ts +22 -0
- package/HslColorSliders.svelte +187 -0
- package/HslColorSliders.svelte.d.ts +22 -0
- package/Input.svelte +49 -21
- package/Input.svelte.d.ts +2 -1
- package/Label.svelte +3 -3
- package/Link.svelte +63 -17
- package/Link.svelte.d.ts +1 -0
- package/List.svelte +28 -16
- package/List.svelte.d.ts +1 -0
- package/List.types.d.ts +4 -3
- package/ListItem.svelte +29 -10
- package/ListItem.svelte.d.ts +1 -1
- package/Menu.svelte +7 -7
- package/MenuBar.svelte +1 -1
- package/MenuButton.svelte +3 -5
- package/MenuItem.svelte +33 -11
- package/MenuItem.svelte.d.ts +1 -0
- package/MenuItemDisplay.svelte +7 -1
- package/MenuSeparator.svelte +3 -3
- package/Popover.svelte +66 -51
- package/Popover.svelte.d.ts +4 -2
- package/Progress.svelte +14 -14
- package/Radio.svelte +42 -16
- package/Radio.svelte.d.ts +1 -0
- package/RgbColorSliders.svelte +161 -0
- package/RgbColorSliders.svelte.d.ts +22 -0
- package/Select.svelte +30 -24
- package/Slider.svelte +108 -118
- package/Slider.svelte.d.ts +1 -0
- package/Switch.svelte +97 -34
- package/Switch.svelte.d.ts +1 -0
- package/Tab.svelte +52 -29
- package/TabList.svelte +21 -10
- package/TabList.svelte.d.ts +1 -0
- package/TabList.types.d.ts +1 -0
- package/TextArea.svelte +45 -20
- package/TextArea.svelte.d.ts +3 -2
- package/Tooltip.svelte +12 -11
- package/Tree.svelte +34 -21
- package/Tree.svelte.d.ts +2 -0
- package/Tree.types.d.ts +1 -0
- package/TreeChevron.svelte +1 -1
- package/TreeItem.svelte +40 -9
- package/TreeItem.svelte.d.ts +2 -0
- package/TreeItemDisplay.svelte +26 -8
- package/TreeItemDisplay.svelte.d.ts +2 -0
- 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 +8 -3
- package/index.js +7 -2
- package/package.json +10 -1
- package/theme/applyTheme.js +3 -2
- package/theme/colors.d.ts +1 -0
- package/theme/colors.js +28 -13
- package/theme/darkTheme.js +130 -87
- package/theme/lightTheme.js +107 -87
package/Dropdown.svelte
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
<script>import { createEventDispatcher } from "svelte";
|
|
2
|
-
import
|
|
2
|
+
import Popover from "./Popover.svelte";
|
|
3
3
|
import { clickOutside } from "./actions/clickOutside";
|
|
4
4
|
import { idGenerator } from "./idGenerator";
|
|
5
|
+
import { prefersReducedMotion } from "./stores/prefersReducedMotion";
|
|
6
|
+
import { slide } from "svelte/transition";
|
|
5
7
|
const popupId = idGenerator.nextId("Dropdown-popup");
|
|
8
|
+
export let colorful = false;
|
|
6
9
|
export let composed = false;
|
|
7
10
|
export let disabled = false;
|
|
8
11
|
export let open = false;
|
|
@@ -35,9 +38,15 @@ const onClick = (event) => {
|
|
|
35
38
|
const onKeydown = (event) => {
|
|
36
39
|
if (!event.altKey && !event.ctrlKey && !event.shiftKey) {
|
|
37
40
|
switch (event.key) {
|
|
41
|
+
case " ":
|
|
42
|
+
open = !open;
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
event.stopPropagation();
|
|
45
|
+
return false;
|
|
38
46
|
case "Escape":
|
|
39
47
|
open = false;
|
|
40
48
|
event.preventDefault();
|
|
49
|
+
event.stopPropagation();
|
|
41
50
|
return false;
|
|
42
51
|
}
|
|
43
52
|
}
|
|
@@ -47,6 +56,11 @@ const onClickOutside = (event) => {
|
|
|
47
56
|
open = false;
|
|
48
57
|
}
|
|
49
58
|
};
|
|
59
|
+
const slideNoOp = (node, params) => {
|
|
60
|
+
return { delay: 0, duration: 0 };
|
|
61
|
+
};
|
|
62
|
+
$:
|
|
63
|
+
slideMotion = !$prefersReducedMotion ? slide : slideNoOp;
|
|
50
64
|
</script>
|
|
51
65
|
|
|
52
66
|
<div
|
|
@@ -55,6 +69,7 @@ const onClickOutside = (event) => {
|
|
|
55
69
|
aria-haspopup={true}
|
|
56
70
|
aria-expanded={open}
|
|
57
71
|
class="sterling-dropdown"
|
|
72
|
+
class:colorful
|
|
58
73
|
class:composed
|
|
59
74
|
class:disabled
|
|
60
75
|
role="combobox"
|
|
@@ -86,35 +101,40 @@ const onClickOutside = (event) => {
|
|
|
86
101
|
on:mouseover
|
|
87
102
|
on:mouseout
|
|
88
103
|
on:mouseup
|
|
89
|
-
on:wheel
|
|
104
|
+
on:wheel|passive
|
|
90
105
|
on:paste
|
|
91
106
|
on:click_outside={onClickOutside}
|
|
92
107
|
{...$$restProps}
|
|
93
108
|
>
|
|
94
|
-
<slot name="value" {composed} {disabled} {open} />
|
|
95
|
-
<slot name="button" {composed} {disabled} {open}>
|
|
109
|
+
<slot name="value" {colorful} {composed} {disabled} {open} />
|
|
110
|
+
<slot name="button" {colorful} {composed} {disabled} {open}>
|
|
96
111
|
<div class="button">
|
|
97
112
|
<div class="chevron" />
|
|
98
113
|
</div>
|
|
99
114
|
</slot>
|
|
100
115
|
|
|
101
|
-
<
|
|
102
|
-
<div
|
|
103
|
-
|
|
116
|
+
<Popover reference={dropdownRef} open={!disabled && open}>
|
|
117
|
+
<div
|
|
118
|
+
class="popup-content"
|
|
119
|
+
transition:slideMotion={{ duration: 200 }}
|
|
120
|
+
class:colorful
|
|
121
|
+
bind:this={popupContentRef}
|
|
122
|
+
>
|
|
123
|
+
<slot {colorful} {composed} {disabled} {open} />
|
|
104
124
|
</div>
|
|
105
|
-
</
|
|
125
|
+
</Popover>
|
|
106
126
|
</div>
|
|
107
127
|
|
|
108
128
|
<style>
|
|
109
129
|
.sterling-dropdown {
|
|
110
130
|
align-content: stretch;
|
|
111
131
|
align-items: stretch;
|
|
112
|
-
background-color: var(--stsv-
|
|
113
|
-
border-color: var(--stsv-
|
|
114
|
-
border-radius: var(--stsv-
|
|
115
|
-
border-style: var(--stsv-
|
|
116
|
-
border-width: var(--stsv-
|
|
117
|
-
color: var(--stsv-
|
|
132
|
+
background-color: var(--stsv-input__background-color);
|
|
133
|
+
border-color: var(--stsv-input__border-color);
|
|
134
|
+
border-radius: var(--stsv-button__border-radius);
|
|
135
|
+
border-style: var(--stsv-input__border-style);
|
|
136
|
+
border-width: var(--stsv-input__border-width);
|
|
137
|
+
color: var(--stsv-input__color);
|
|
118
138
|
display: grid;
|
|
119
139
|
grid-template-columns: 1fr 2em;
|
|
120
140
|
grid-template-rows: auto;
|
|
@@ -125,19 +145,37 @@ const onClickOutside = (event) => {
|
|
|
125
145
|
}
|
|
126
146
|
|
|
127
147
|
.sterling-dropdown:hover {
|
|
128
|
-
background-color: var(--stsv-
|
|
129
|
-
border-color: var(--stsv-
|
|
130
|
-
color: var(--stsv-
|
|
148
|
+
background-color: var(--stsv-input__background-color--hover);
|
|
149
|
+
border-color: var(--stsv-input__border-color--hover);
|
|
150
|
+
color: var(--stsv-input__color--hover);
|
|
131
151
|
}
|
|
132
152
|
|
|
133
153
|
.sterling-dropdown:focus {
|
|
134
|
-
background-color: var(--stsv-
|
|
135
|
-
border-color: var(--stsv-
|
|
136
|
-
color: var(--stsv-
|
|
137
|
-
outline-color: var(--stsv-
|
|
138
|
-
outline-offset: var(--stsv-
|
|
139
|
-
outline-style: var(--stsv-
|
|
140
|
-
outline-width: var(--stsv-
|
|
154
|
+
background-color: var(--stsv-input__background-color--focus);
|
|
155
|
+
border-color: var(--stsv-input__border-color--focus);
|
|
156
|
+
color: var(--stsv-input__color--focus);
|
|
157
|
+
outline-color: var(--stsv-common__outline-color);
|
|
158
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
159
|
+
outline-style: var(--stsv-common__outline-style);
|
|
160
|
+
outline-width: var(--stsv-common__outline-width);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.sterling-dropdown.colorful {
|
|
164
|
+
background-color: var(--stsv-input--colorful__background-color);
|
|
165
|
+
border-color: var(--stsv-input--colorful__border-color);
|
|
166
|
+
color: var(--stsv-input--colorful__color);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.sterling-dropdown.colorful:hover {
|
|
170
|
+
background-color: var(--stsv-input--colorful__background-color--hover);
|
|
171
|
+
border-color: var(--stsv-input--colorful__border-color--hover);
|
|
172
|
+
color: var(--stsv-input--colorful__color--hover);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.sterling-dropdown.colorful:focus {
|
|
176
|
+
background-color: var(--stsv-input--colorful__background-color--focus);
|
|
177
|
+
border-color: var(--stsv-input--colorful__border-color--focus);
|
|
178
|
+
color: var(--stsv-input--colorful__color--focus);
|
|
141
179
|
}
|
|
142
180
|
|
|
143
181
|
.sterling-dropdown.disabled {
|
|
@@ -145,8 +183,18 @@ const onClickOutside = (event) => {
|
|
|
145
183
|
outline: none;
|
|
146
184
|
}
|
|
147
185
|
|
|
186
|
+
.sterling-dropdown.disabled .button {
|
|
187
|
+
cursor: not-allowed;
|
|
188
|
+
}
|
|
189
|
+
|
|
148
190
|
.sterling-dropdown::after {
|
|
149
|
-
background:
|
|
191
|
+
background: repeating-linear-gradient(
|
|
192
|
+
45deg,
|
|
193
|
+
var(--stsv-common__background-color1--disabled),
|
|
194
|
+
var(--stsv-common__background-color1--disabled) 3px,
|
|
195
|
+
var(--stsv-common__background-color2--disabled) 3px,
|
|
196
|
+
var(--stsv-common__background-color2--disabled) 6px
|
|
197
|
+
);
|
|
150
198
|
bottom: 0;
|
|
151
199
|
content: '';
|
|
152
200
|
left: 0;
|
|
@@ -187,7 +235,8 @@ const onClickOutside = (event) => {
|
|
|
187
235
|
background: none;
|
|
188
236
|
margin: 0;
|
|
189
237
|
height: 100%;
|
|
190
|
-
width:
|
|
238
|
+
min-width: 2em;
|
|
239
|
+
min-height: 2em;
|
|
191
240
|
}
|
|
192
241
|
|
|
193
242
|
.chevron::after {
|
|
@@ -216,36 +265,13 @@ const onClickOutside = (event) => {
|
|
|
216
265
|
transform-origin: 50% 50%;
|
|
217
266
|
}
|
|
218
267
|
|
|
219
|
-
.popup {
|
|
220
|
-
background-color: var(--stsv-Common__background-color);
|
|
221
|
-
border-color: var(--stsv-Common__border-color);
|
|
222
|
-
border-radius: var(--stsv-Common__border-radius);
|
|
223
|
-
border-style: var(--stsv-Common__border-style);
|
|
224
|
-
border-width: var(--stsv-Common__border-width);
|
|
225
|
-
box-sizing: border-box;
|
|
226
|
-
color: var(--stsv-Common__color);
|
|
227
|
-
display: none;
|
|
228
|
-
overflow: visible;
|
|
229
|
-
outline: none;
|
|
230
|
-
position: absolute;
|
|
231
|
-
box-shadow: rgba(0, 0, 0, 0.4) 2px 2px 4px -1px;
|
|
232
|
-
width: fit-content;
|
|
233
|
-
height: fit-content;
|
|
234
|
-
z-index: 1;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.popup.open {
|
|
238
|
-
display: grid;
|
|
239
|
-
grid-template-columns: 1fr;
|
|
240
|
-
grid-template-rows: 1fr;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
268
|
.popup-content {
|
|
244
|
-
background-color: var(--stsv-
|
|
245
|
-
border-color: var(--stsv-
|
|
246
|
-
border-radius: var(--stsv-
|
|
247
|
-
border-style: var(--stsv-
|
|
248
|
-
border-width: var(--stsv-
|
|
269
|
+
background-color: var(--stsv-common__background-color);
|
|
270
|
+
border-color: var(--stsv-common__border-color);
|
|
271
|
+
border-radius: var(--stsv-common__border-radius);
|
|
272
|
+
border-style: var(--stsv-common__border-style);
|
|
273
|
+
border-width: var(--stsv-common__border-width);
|
|
274
|
+
color: var(--stsv-common__color);
|
|
249
275
|
padding: 0.25em;
|
|
250
276
|
display: grid;
|
|
251
277
|
grid-template-columns: 1fr;
|
|
@@ -253,6 +279,12 @@ const onClickOutside = (event) => {
|
|
|
253
279
|
overflow: hidden;
|
|
254
280
|
}
|
|
255
281
|
|
|
282
|
+
.popup-content.colorful {
|
|
283
|
+
background-color: var(--stsv-common--colorful__background-color);
|
|
284
|
+
border-color: var(--stsv-common--colorful__border-color);
|
|
285
|
+
color: var(--stsv-common--colorful__color);
|
|
286
|
+
}
|
|
287
|
+
|
|
256
288
|
@media (prefers-reduced-motion) {
|
|
257
289
|
.sterling-dropdown,
|
|
258
290
|
.sterling-dropdown::after {
|
package/Dropdown.svelte.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { SvelteComponentTyped } from "svelte";
|
|
|
2
2
|
declare const __propDef: {
|
|
3
3
|
props: {
|
|
4
4
|
[x: string]: any;
|
|
5
|
+
colorful?: boolean | undefined;
|
|
5
6
|
composed?: boolean | undefined;
|
|
6
7
|
disabled?: boolean | undefined;
|
|
7
8
|
open?: boolean | undefined;
|
|
@@ -43,16 +44,19 @@ declare const __propDef: {
|
|
|
43
44
|
};
|
|
44
45
|
slots: {
|
|
45
46
|
value: {
|
|
47
|
+
colorful: boolean;
|
|
46
48
|
composed: boolean;
|
|
47
49
|
disabled: boolean;
|
|
48
50
|
open: boolean;
|
|
49
51
|
};
|
|
50
52
|
button: {
|
|
53
|
+
colorful: boolean;
|
|
51
54
|
composed: boolean;
|
|
52
55
|
disabled: boolean;
|
|
53
56
|
open: boolean;
|
|
54
57
|
};
|
|
55
58
|
default: {
|
|
59
|
+
colorful: boolean;
|
|
56
60
|
composed: boolean;
|
|
57
61
|
disabled: boolean;
|
|
58
62
|
open: boolean;
|
package/Field.svelte
CHANGED
|
@@ -110,7 +110,7 @@ const onClick = () => {
|
|
|
110
110
|
on:mouseout
|
|
111
111
|
on:mouseup
|
|
112
112
|
on:scroll
|
|
113
|
-
on:wheel
|
|
113
|
+
on:wheel|passive
|
|
114
114
|
on:paste
|
|
115
115
|
{...$$restProps}
|
|
116
116
|
>
|
|
@@ -151,13 +151,13 @@ const onClick = () => {
|
|
|
151
151
|
|
|
152
152
|
<style>
|
|
153
153
|
.sterling-field {
|
|
154
|
-
background-color: var(--stsv-
|
|
155
|
-
border-color: var(--stsv-
|
|
156
|
-
border-radius: var(--stsv-
|
|
157
|
-
border-style: var(--stsv-
|
|
158
|
-
border-width: var(--stsv-
|
|
154
|
+
background-color: var(--stsv-input__background-color);
|
|
155
|
+
border-color: var(--stsv-input__border-color);
|
|
156
|
+
border-radius: var(--stsv-input__border-radius);
|
|
157
|
+
border-style: var(--stsv-input__border-style);
|
|
158
|
+
border-width: var(--stsv-input__border-width);
|
|
159
159
|
box-sizing: border-box;
|
|
160
|
-
color: var(--stsv-
|
|
160
|
+
color: var(--stsv-input__color);
|
|
161
161
|
display: flex;
|
|
162
162
|
flex-direction: column;
|
|
163
163
|
font: inherit;
|
|
@@ -169,18 +169,18 @@ const onClick = () => {
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
.sterling-field:not(.disabled):hover {
|
|
172
|
-
background-color: var(--stsv-
|
|
173
|
-
border-color: var(--stsv-
|
|
174
|
-
color: var(--stsv-
|
|
172
|
+
background-color: var(--stsv-input__background-color--hover);
|
|
173
|
+
border-color: var(--stsv-input__border-color--hover);
|
|
174
|
+
color: var(--stsv-input__color--hover);
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
.sterling-field.using-keyboard:focus-within {
|
|
178
|
-
border-color: var(--stsv-
|
|
179
|
-
color: var(--stsv-
|
|
180
|
-
outline-color: var(--stsv-
|
|
181
|
-
outline-offset: var(--stsv-
|
|
182
|
-
outline-style: var(--stsv-
|
|
183
|
-
outline-width: var(--stsv-
|
|
178
|
+
border-color: var(--stsv-input__border-color--focus);
|
|
179
|
+
color: var(--stsv-input__color--focus);
|
|
180
|
+
outline-color: var(--stsv-common__outline-color);
|
|
181
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
182
|
+
outline-style: var(--stsv-common__outline-style);
|
|
183
|
+
outline-width: var(--stsv-common__outline-width);
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
.sterling-field.disabled {
|
|
@@ -192,7 +192,7 @@ const onClick = () => {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
.label-text {
|
|
195
|
-
color: var(--stsv-
|
|
195
|
+
color: var(--stsv-common__color--secondary);
|
|
196
196
|
font-size: 0.8em;
|
|
197
197
|
margin: 0.5em 0.7em 0.2em 0.2em;
|
|
198
198
|
}
|
|
@@ -208,35 +208,35 @@ const onClick = () => {
|
|
|
208
208
|
.message {
|
|
209
209
|
box-sizing: border-box;
|
|
210
210
|
font-size: 0.8em;
|
|
211
|
-
background-color: var(--stsv-
|
|
212
|
-
color: var(--stsv-
|
|
211
|
+
background-color: var(--stsv-common__background-color--secondary);
|
|
212
|
+
color: var(--stsv-common__color--secondary);
|
|
213
213
|
padding: 0.5em;
|
|
214
214
|
width: 100%;
|
|
215
215
|
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
.message.info {
|
|
219
|
-
background-color: var(--stsv-
|
|
220
|
-
border-color: var(--stsv-
|
|
221
|
-
color: var(--stsv-
|
|
219
|
+
background-color: var(--stsv-status--info__background-color);
|
|
220
|
+
border-color: var(--stsv-status--info__border-color);
|
|
221
|
+
color: var(--stsv-status--info__color);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
.message.success {
|
|
225
|
-
background-color: var(--stsv-
|
|
226
|
-
border-color: var(--stsv-
|
|
227
|
-
color: var(--stsv-
|
|
225
|
+
background-color: var(--stsv-status--success__background-color);
|
|
226
|
+
border-color: var(--stsv-status--success__border-color);
|
|
227
|
+
color: var(--stsv-status--success__color);
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
.message.warning {
|
|
231
|
-
background-color: var(--stsv-
|
|
232
|
-
border-color: var(--stsv-
|
|
233
|
-
color: var(--stsv-
|
|
231
|
+
background-color: var(--stsv-status--warning__background-color);
|
|
232
|
+
border-color: var(--stsv-status--warning__border-color);
|
|
233
|
+
color: var(--stsv-status--warning__color);
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
.message.error {
|
|
237
|
-
background-color: var(--stsv-
|
|
238
|
-
border-color: var(--
|
|
239
|
-
color: var(--stsv-
|
|
237
|
+
background-color: var(--stsv-status--error__background-color);
|
|
238
|
+
border-color: var(--stsv_--error-color);
|
|
239
|
+
color: var(--stsv-status--error__color);
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
.required {
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
<script>import { createEventDispatcher } from "svelte";
|
|
2
|
+
import Input from "./Input.svelte";
|
|
3
|
+
import Slider from "./Slider.svelte";
|
|
4
|
+
export let red = 0;
|
|
5
|
+
export let green = 0;
|
|
6
|
+
export let blue = 0;
|
|
7
|
+
export let alpha = 255;
|
|
8
|
+
export let colorful = false;
|
|
9
|
+
let redText = red.toString(16).padStart(2, "0");
|
|
10
|
+
let greenText = green.toString(16).padStart(2, "0");
|
|
11
|
+
let blueText = blue.toString(16).padStart(2, "0");
|
|
12
|
+
let alphaText = alpha.toString(16).padStart(2, "0");
|
|
13
|
+
$: {
|
|
14
|
+
redText = red.toString(16).padStart(2, "0");
|
|
15
|
+
}
|
|
16
|
+
$: {
|
|
17
|
+
greenText = green.toString(16).padStart(2, "0");
|
|
18
|
+
}
|
|
19
|
+
$: {
|
|
20
|
+
blueText = blue.toString(16).padStart(2, "0");
|
|
21
|
+
}
|
|
22
|
+
$: {
|
|
23
|
+
alphaText = alpha.toString(16).padStart(2, "0");
|
|
24
|
+
}
|
|
25
|
+
const dispatcher = createEventDispatcher();
|
|
26
|
+
const raiseChange = () => {
|
|
27
|
+
dispatcher("change", { red, green, blue, alpha });
|
|
28
|
+
};
|
|
29
|
+
$:
|
|
30
|
+
red, green, blue, alpha, raiseChange();
|
|
31
|
+
const onRedInputChange = (event) => {
|
|
32
|
+
const inputChangeEvent = event;
|
|
33
|
+
const text = inputChangeEvent?.currentTarget?.value;
|
|
34
|
+
red = text ? Number.parseInt(text, 16) : red;
|
|
35
|
+
};
|
|
36
|
+
const onGreenInputChange = (event) => {
|
|
37
|
+
const inputChangeEvent = event;
|
|
38
|
+
const text = inputChangeEvent?.currentTarget?.value;
|
|
39
|
+
green = text ? Number.parseInt(text, 16) : green;
|
|
40
|
+
};
|
|
41
|
+
const onBlueInputChange = (event) => {
|
|
42
|
+
const inputChangeEvent = event;
|
|
43
|
+
const text = inputChangeEvent?.currentTarget?.value;
|
|
44
|
+
blue = text ? Number.parseInt(text, 16) : blue;
|
|
45
|
+
};
|
|
46
|
+
const onAlphaInputchange = (event) => {
|
|
47
|
+
const inputChangeEvent = event;
|
|
48
|
+
const text = inputChangeEvent?.currentTarget?.value;
|
|
49
|
+
alpha = text ? Number.parseInt(text, 16) : alpha;
|
|
50
|
+
};
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<div class="sterling-rgb-color-sliders">
|
|
54
|
+
<div class="slider red-slider">
|
|
55
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={red} />
|
|
56
|
+
</div>
|
|
57
|
+
<Input {colorful} bind:value={redText} on:change={(e) => onRedInputChange(e)} />
|
|
58
|
+
<div class="slider green-slider">
|
|
59
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={green} />
|
|
60
|
+
</div>
|
|
61
|
+
<Input {colorful} bind:value={greenText} on:change={(e) => onGreenInputChange(e)} />
|
|
62
|
+
<div class="slider blue-slider">
|
|
63
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={blue} />
|
|
64
|
+
</div>
|
|
65
|
+
<Input {colorful} bind:value={blueText} on:change={(e) => onBlueInputChange(e)} />
|
|
66
|
+
<div class="alpha" style={`--red:${red};--green:${green};--blue:${blue}`}>
|
|
67
|
+
<div class="alpha-hatch" />
|
|
68
|
+
<div class="alpha-gradient" />
|
|
69
|
+
<div class="slider alpha-slider">
|
|
70
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={alpha} />
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<Input {colorful} bind:value={alphaText} on:change={(e) => onAlphaInputchange(e)} />
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<style>
|
|
77
|
+
.sterling-rgb-color-sliders {
|
|
78
|
+
align-items: center;
|
|
79
|
+
display: grid;
|
|
80
|
+
grid-template-columns: 1fr 4em;
|
|
81
|
+
column-gap: 0.5em;
|
|
82
|
+
row-gap: 0.25em;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.slider :global(.fill),
|
|
86
|
+
.slider :global(.sterling-slider.colorful .fill) {
|
|
87
|
+
background-color: transparent;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.slider :global(.track),
|
|
91
|
+
.slider :global(.sterling-slider.colorful .track) {
|
|
92
|
+
background-color: transparent;
|
|
93
|
+
background-image: linear-gradient(to right, #ffffff, #ffffff 1px, #000000 1px, #000000);
|
|
94
|
+
background-size: 2px 100%;
|
|
95
|
+
opacity: 0.1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.red-slider {
|
|
99
|
+
background: linear-gradient(to right, black 0%, rgb(255, 0, 0) 100%);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.green-slider {
|
|
103
|
+
background: linear-gradient(to right, black 0%, rgb(0, 255, 0) 100%);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.blue-slider {
|
|
107
|
+
background: linear-gradient(to right, black 0%, rgb(0, 0, 255) 100%);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.alpha {
|
|
111
|
+
display: grid;
|
|
112
|
+
grid-template-columns: 1fr;
|
|
113
|
+
grid-template-rows: 1fr;
|
|
114
|
+
place-content: stretch;
|
|
115
|
+
place-items: stretch;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.alpha-gradient,
|
|
119
|
+
.alpha-hatch,
|
|
120
|
+
.alpha-slider {
|
|
121
|
+
grid-row: 1 / span 1;
|
|
122
|
+
grid-column: 1 / span 1;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.alpha-hatch {
|
|
126
|
+
background-color: #eee;
|
|
127
|
+
opacity: 0.1;
|
|
128
|
+
background-image: repeating-linear-gradient(
|
|
129
|
+
45deg,
|
|
130
|
+
#444 25%,
|
|
131
|
+
transparent 25%,
|
|
132
|
+
transparent 75%,
|
|
133
|
+
#444 75%,
|
|
134
|
+
#444
|
|
135
|
+
),
|
|
136
|
+
repeating-linear-gradient(45deg, #444 25%, #eee 25%, #eee 75%, #444 75%, #444),
|
|
137
|
+
repeating-linear-gradient(-45deg, #444 25%, transparent 25%, transparent 75%, #444 75%, #444),
|
|
138
|
+
repeating-linear-gradient(-45deg, #444 25%, #eee 25%, #eee 75%, #444 75%, #444);
|
|
139
|
+
background-position: 0 0, 4px 4px;
|
|
140
|
+
background-size: 8px 8px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.alpha-gradient {
|
|
144
|
+
background: linear-gradient(
|
|
145
|
+
to right,
|
|
146
|
+
rgba(var(--red), var(--green), var(--blue), 0) 0%,
|
|
147
|
+
rgba(var(--red), var(--green), var(--blue), 100) 100%
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
</style>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
red?: number | undefined;
|
|
5
|
+
green?: number | undefined;
|
|
6
|
+
blue?: number | undefined;
|
|
7
|
+
alpha?: number | undefined;
|
|
8
|
+
colorful?: boolean | undefined;
|
|
9
|
+
};
|
|
10
|
+
events: {
|
|
11
|
+
change: CustomEvent<any>;
|
|
12
|
+
} & {
|
|
13
|
+
[evt: string]: CustomEvent<any>;
|
|
14
|
+
};
|
|
15
|
+
slots: {};
|
|
16
|
+
};
|
|
17
|
+
export type HexColorSlidersProps = typeof __propDef.props;
|
|
18
|
+
export type HexColorSlidersEvents = typeof __propDef.events;
|
|
19
|
+
export type HexColorSlidersSlots = typeof __propDef.slots;
|
|
20
|
+
export default class HexColorSliders extends SvelteComponentTyped<HexColorSlidersProps, HexColorSlidersEvents, HexColorSlidersSlots> {
|
|
21
|
+
}
|
|
22
|
+
export {};
|