@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/Popover.svelte
CHANGED
|
@@ -1,31 +1,37 @@
|
|
|
1
1
|
<script>import { onMount } from "svelte";
|
|
2
2
|
import { autoUpdate, computePosition, flip, offset } from "@floating-ui/dom";
|
|
3
3
|
import { portal } from "./actions/portal";
|
|
4
|
-
export let
|
|
4
|
+
export let offsetOptions = { mainAxis: 0, crossAxis: 0 };
|
|
5
5
|
export let open = false;
|
|
6
|
-
export let
|
|
6
|
+
export let persistent = false;
|
|
7
|
+
export let placement = "bottom-start";
|
|
7
8
|
export let portalHost = void 0;
|
|
9
|
+
export let reference;
|
|
8
10
|
let popupRef;
|
|
9
11
|
let popupPosition = { x: 0, y: 0 };
|
|
10
12
|
const hostId = "SterlingPopoverPortal";
|
|
11
13
|
const ensurePortalHost = () => {
|
|
12
|
-
if (
|
|
13
|
-
|
|
14
|
+
if (document) {
|
|
15
|
+
if (portalHost) {
|
|
16
|
+
return portalHost;
|
|
17
|
+
}
|
|
18
|
+
let host = document.querySelector(`#${hostId}`);
|
|
19
|
+
if (!host) {
|
|
20
|
+
console.log("creating portal host");
|
|
21
|
+
host = document.createElement("div");
|
|
22
|
+
host.id = hostId;
|
|
23
|
+
host.style.overflow = "visible";
|
|
24
|
+
document.body.append(host);
|
|
25
|
+
}
|
|
26
|
+
portalHost = host;
|
|
14
27
|
}
|
|
15
|
-
let host = document.querySelector(`#${hostId}`);
|
|
16
|
-
if (!host) {
|
|
17
|
-
host = document.createElement("div");
|
|
18
|
-
host.id = hostId;
|
|
19
|
-
host.style.overflow = "visible";
|
|
20
|
-
document.body.append(host);
|
|
21
|
-
}
|
|
22
|
-
portalHost = host;
|
|
23
28
|
};
|
|
24
29
|
let bodyHeight = 0;
|
|
25
30
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
26
31
|
bodyHeight = entries[0].target.clientHeight;
|
|
27
32
|
});
|
|
28
|
-
|
|
33
|
+
$:
|
|
34
|
+
middleware = [offset(offsetOptions), flip()];
|
|
29
35
|
const computePopupPosition = async () => {
|
|
30
36
|
if (reference && popupRef) {
|
|
31
37
|
popupPosition = await computePosition(reference, popupRef, {
|
|
@@ -47,7 +53,7 @@ const autoUpdateMenuPosition = () => {
|
|
|
47
53
|
$:
|
|
48
54
|
popupRef, reference, autoUpdateMenuPosition();
|
|
49
55
|
$:
|
|
50
|
-
open, bodyHeight, placement, computePopupPosition();
|
|
56
|
+
open, bodyHeight, middleware, placement, computePopupPosition();
|
|
51
57
|
onMount(() => {
|
|
52
58
|
ensurePortalHost();
|
|
53
59
|
resizeObserver.observe(document.body);
|
|
@@ -55,46 +61,55 @@ onMount(() => {
|
|
|
55
61
|
resizeObserver.unobserve(document.body);
|
|
56
62
|
};
|
|
57
63
|
});
|
|
64
|
+
const onKeydown = (event) => {
|
|
65
|
+
if (event.key === "Escape") {
|
|
66
|
+
open = false;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
ensurePortalHost();
|
|
58
70
|
</script>
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
<div
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
72
|
+
{#if open || persistent}
|
|
73
|
+
<div use:portal={{ target: portalHost ?? document.body }} class="sterling-popover-portal">
|
|
74
|
+
<div
|
|
75
|
+
bind:this={popupRef}
|
|
76
|
+
class="sterling-popover"
|
|
77
|
+
class:open
|
|
78
|
+
on:blur
|
|
79
|
+
on:click
|
|
80
|
+
on:copy
|
|
81
|
+
on:cut
|
|
82
|
+
on:dblclick
|
|
83
|
+
on:dragend
|
|
84
|
+
on:dragenter
|
|
85
|
+
on:dragleave
|
|
86
|
+
on:dragover
|
|
87
|
+
on:dragstart
|
|
88
|
+
on:drop
|
|
89
|
+
on:focus
|
|
90
|
+
on:focusin
|
|
91
|
+
on:focusout
|
|
92
|
+
on:keydown
|
|
93
|
+
on:keypress
|
|
94
|
+
on:keyup
|
|
95
|
+
on:mousedown
|
|
96
|
+
on:mouseenter
|
|
97
|
+
on:mouseleave
|
|
98
|
+
on:mousemove
|
|
99
|
+
on:mouseover
|
|
100
|
+
on:mouseout
|
|
101
|
+
on:mouseup
|
|
102
|
+
on:scroll
|
|
103
|
+
on:wheel|passive
|
|
104
|
+
on:paste
|
|
105
|
+
on:keydown={onKeydown}
|
|
106
|
+
{...$$restProps}
|
|
107
|
+
style="left:{popupPosition.x}px; top:{popupPosition.y}px"
|
|
108
|
+
>
|
|
109
|
+
<slot />
|
|
110
|
+
</div>
|
|
96
111
|
</div>
|
|
97
|
-
|
|
112
|
+
{/if}
|
|
98
113
|
|
|
99
114
|
<style>
|
|
100
115
|
.sterling-popover-portal {
|
package/Popover.svelte.d.ts
CHANGED
|
@@ -3,10 +3,12 @@ import type { Placement } from '@floating-ui/dom';
|
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
[x: string]: any;
|
|
6
|
-
|
|
6
|
+
offsetOptions?: import("@floating-ui/core").OffsetOptions | undefined;
|
|
7
7
|
open?: boolean | undefined;
|
|
8
|
-
|
|
8
|
+
persistent?: boolean | undefined;
|
|
9
|
+
placement?: Placement | undefined;
|
|
9
10
|
portalHost?: HTMLElement | undefined;
|
|
11
|
+
reference: HTMLElement;
|
|
10
12
|
};
|
|
11
13
|
events: {
|
|
12
14
|
blur: FocusEvent;
|
package/Progress.constants.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const PROGRESS_STATUSES: string[];
|
package/Progress.constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const PROGRESS_STATUSES = ['none', 'auto', 'info', 'success', 'warning', 'danger'];
|
package/Progress.svelte
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
export let max = 100;
|
|
3
3
|
export let percent = 0;
|
|
4
4
|
export let vertical = false;
|
|
5
|
-
export let
|
|
5
|
+
export let status = "none";
|
|
6
6
|
export let disabled = false;
|
|
7
7
|
let clientHeight;
|
|
8
8
|
let clientWidth;
|
|
@@ -22,7 +22,7 @@ $:
|
|
|
22
22
|
$:
|
|
23
23
|
indicatorStyle = vertical ? `height: ${percentHeight}px` : `width: ${percentWidth}px`;
|
|
24
24
|
$:
|
|
25
|
-
indicatorColor =
|
|
25
|
+
indicatorColor = status === "auto" ? percent === 100 ? "success" : "info" : status;
|
|
26
26
|
</script>
|
|
27
27
|
|
|
28
28
|
<!--
|
|
@@ -67,7 +67,7 @@ $:
|
|
|
67
67
|
on:pointerover
|
|
68
68
|
on:pointerout
|
|
69
69
|
on:pointerup
|
|
70
|
-
on:wheel
|
|
70
|
+
on:wheel|passive
|
|
71
71
|
{...$$restProps}
|
|
72
72
|
>
|
|
73
73
|
<div class="container" bind:clientWidth bind:clientHeight>
|
|
@@ -76,7 +76,7 @@ $:
|
|
|
76
76
|
class:info={indicatorColor === 'info'}
|
|
77
77
|
class:success={indicatorColor === 'success'}
|
|
78
78
|
class:warning={indicatorColor === 'warning'}
|
|
79
|
-
class:error={indicatorColor === '
|
|
79
|
+
class:error={indicatorColor === 'danger'}
|
|
80
80
|
style={indicatorStyle}
|
|
81
81
|
/>
|
|
82
82
|
</div>
|
|
@@ -84,22 +84,39 @@ $:
|
|
|
84
84
|
|
|
85
85
|
<style>
|
|
86
86
|
.sterling-progress {
|
|
87
|
-
display: inline-flex;
|
|
88
|
-
flex-direction: column;
|
|
89
87
|
align-content: flex-start;
|
|
90
88
|
align-items: flex-start;
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
background: var(--stsv-common__background-color);
|
|
90
|
+
border-width: var(--stsv-common__border-width);
|
|
91
|
+
border-style: var(--stsv-common__border-style);
|
|
92
|
+
border-color: var(--stsv-common__border-color);
|
|
93
|
+
border-radius: var(--stsv-common__border-radius);
|
|
93
94
|
box-sizing: border-box;
|
|
95
|
+
display: block;
|
|
94
96
|
height: 1em;
|
|
95
97
|
padding: 0.25em;
|
|
96
|
-
|
|
97
|
-
border-style: var(--stsv-Common__border-style);
|
|
98
|
-
border-color: var(--stsv-Common__border-color);
|
|
99
|
-
border-radius: var(--stsv-Common__border-radius);
|
|
98
|
+
position: relative;
|
|
100
99
|
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
101
100
|
}
|
|
102
101
|
|
|
102
|
+
.sterling-progress.disabled::after {
|
|
103
|
+
content: '';
|
|
104
|
+
position: absolute;
|
|
105
|
+
left: 0;
|
|
106
|
+
right: 0;
|
|
107
|
+
top: 0;
|
|
108
|
+
bottom: 0;
|
|
109
|
+
background: repeating-linear-gradient(
|
|
110
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
111
|
+
var(--stsv-common--disabled__stripe-color),
|
|
112
|
+
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
113
|
+
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
114
|
+
var(--stsv-common--disabled__stripe-color--alt)
|
|
115
|
+
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
116
|
+
);
|
|
117
|
+
pointer-events: none;
|
|
118
|
+
}
|
|
119
|
+
|
|
103
120
|
.container {
|
|
104
121
|
display: flex;
|
|
105
122
|
justify-content: flex-start;
|
|
@@ -108,7 +125,7 @@ $:
|
|
|
108
125
|
}
|
|
109
126
|
|
|
110
127
|
.indicator {
|
|
111
|
-
background-color: var(--stsv-
|
|
128
|
+
background-color: var(--stsv-common__border-color);
|
|
112
129
|
box-sizing: border-box;
|
|
113
130
|
height: 100%;
|
|
114
131
|
min-height: 1px;
|
|
@@ -140,30 +157,19 @@ $:
|
|
|
140
157
|
/* ----- Colorful ----- */
|
|
141
158
|
|
|
142
159
|
.indicator.info {
|
|
143
|
-
background-color: var(--stsv-
|
|
160
|
+
background-color: var(--stsv-status--info__border-color);
|
|
144
161
|
}
|
|
145
162
|
|
|
146
163
|
.indicator.success {
|
|
147
|
-
background-color: var(--stsv-
|
|
164
|
+
background-color: var(--stsv-status--success__border-color);
|
|
148
165
|
}
|
|
149
166
|
|
|
150
167
|
.indicator.warning {
|
|
151
|
-
background-color: var(--stsv-
|
|
168
|
+
background-color: var(--stsv-status--warning__border-color);
|
|
152
169
|
}
|
|
153
170
|
|
|
154
171
|
.indicator.error {
|
|
155
|
-
background-color: var(--stsv-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* ----- Disabled ----- */
|
|
159
|
-
|
|
160
|
-
.sterling-progress.disabled {
|
|
161
|
-
background: var(--stsv-Common__background-color--disabled);
|
|
162
|
-
border-color: var(--stsv-Common__border-color--disabled);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.sterling-progress.disabled .indicator {
|
|
166
|
-
background-color: var(--stsv-Display__color--disabled);
|
|
172
|
+
background-color: var(--stsv-status--danger__border-color);
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
@media (prefers-reduced-motion) {
|
package/Progress.svelte.d.ts
CHANGED
package/Progress.types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type
|
|
3
|
-
export type
|
|
1
|
+
import type { PROGRESS_STATUSES } from './Progress.constants';
|
|
2
|
+
type ProgressStatusTuple = typeof PROGRESS_STATUSES;
|
|
3
|
+
export type ProgressStatus = ProgressStatusTuple[number];
|
|
4
4
|
export {};
|
package/Radio.svelte
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script>import { idGenerator } from "./idGenerator";
|
|
2
|
-
import Label from "./Label.svelte";
|
|
3
2
|
export let checked = false;
|
|
4
3
|
export let disabled = false;
|
|
5
4
|
export let group = void 0;
|
|
6
5
|
export let id = void 0;
|
|
6
|
+
export let colorful = false;
|
|
7
7
|
if (checked && $$restProps.value !== group) {
|
|
8
8
|
group = $$restProps.value;
|
|
9
9
|
} else if (!checked && $$restProps.value === group) {
|
|
@@ -59,7 +59,7 @@ const onChange = (e) => {
|
|
|
59
59
|
@component
|
|
60
60
|
A styled HTML input type=radio element with optional label.
|
|
61
61
|
-->
|
|
62
|
-
<div class="sterling-radio" class:disabled>
|
|
62
|
+
<div class="sterling-radio" class:colorful class:disabled>
|
|
63
63
|
<div class="container">
|
|
64
64
|
<input
|
|
65
65
|
bind:this={inputRef}
|
|
@@ -93,17 +93,15 @@ const onChange = (e) => {
|
|
|
93
93
|
on:mouseover
|
|
94
94
|
on:mouseout
|
|
95
95
|
on:mouseup
|
|
96
|
-
on:wheel
|
|
96
|
+
on:wheel|passive
|
|
97
97
|
{...$$restProps}
|
|
98
98
|
/>
|
|
99
99
|
<div class="indicator" />
|
|
100
100
|
</div>
|
|
101
101
|
{#if $$slots.default}
|
|
102
|
-
<
|
|
103
|
-
<slot {checked} {disabled} {group} inputId={id} value={$$restProps.value}
|
|
104
|
-
|
|
105
|
-
</slot>
|
|
106
|
-
</Label>
|
|
102
|
+
<label for={id}>
|
|
103
|
+
<slot {colorful} {checked} {disabled} {group} inputId={id} value={$$restProps.value} />
|
|
104
|
+
</label>
|
|
107
105
|
{/if}
|
|
108
106
|
</div>
|
|
109
107
|
|
|
@@ -152,10 +150,10 @@ const onChange = (e) => {
|
|
|
152
150
|
and there is not a parent CSS selector.
|
|
153
151
|
*/
|
|
154
152
|
.indicator {
|
|
155
|
-
background-color: var(--stsv-
|
|
156
|
-
border-color: var(--stsv-
|
|
157
|
-
border-style: var(--stsv-
|
|
158
|
-
border-width: var(--stsv-
|
|
153
|
+
background-color: var(--stsv-input__background-color);
|
|
154
|
+
border-color: var(--stsv-input__border-color);
|
|
155
|
+
border-style: var(--stsv-input__border-style);
|
|
156
|
+
border-width: var(--stsv-input__border-width);
|
|
159
157
|
border-radius: 10000px;
|
|
160
158
|
box-sizing: border-box;
|
|
161
159
|
display: inline-block;
|
|
@@ -167,20 +165,20 @@ const onChange = (e) => {
|
|
|
167
165
|
}
|
|
168
166
|
|
|
169
167
|
input:checked + .indicator {
|
|
170
|
-
background-color: var(--stsv-
|
|
171
|
-
border-color: var(--stsv-
|
|
168
|
+
background-color: var(--stsv-input__background-color);
|
|
169
|
+
border-color: var(--stsv-input__border-color);
|
|
172
170
|
}
|
|
173
171
|
|
|
174
172
|
.sterling-radio:not(.disabled):hover .indicator {
|
|
175
|
-
background-color: var(--stsv-
|
|
176
|
-
border-color: var(--stsv-
|
|
173
|
+
background-color: var(--stsv-input__background-color--hover);
|
|
174
|
+
border-color: var(--stsv-input__border-color--hover);
|
|
177
175
|
}
|
|
178
176
|
|
|
179
177
|
input:focus-visible + .indicator {
|
|
180
|
-
outline-color: var(--stsv-
|
|
181
|
-
outline-offset: var(--stsv-
|
|
182
|
-
outline-style: var(--stsv-
|
|
183
|
-
outline-width: var(--stsv-
|
|
178
|
+
outline-color: var(--stsv-common__outline-color);
|
|
179
|
+
outline-offset: var(--stsv-common__outline-offset);
|
|
180
|
+
outline-style: var(--stsv-common__outline-style);
|
|
181
|
+
outline-width: var(--stsv-common__outline-width);
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
.indicator::after {
|
|
@@ -197,7 +195,26 @@ const onChange = (e) => {
|
|
|
197
195
|
}
|
|
198
196
|
|
|
199
197
|
input:checked + .indicator::after {
|
|
200
|
-
background-color: var(--stsv-
|
|
198
|
+
background-color: var(--stsv-input__color);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.sterling-radio.colorful .indicator {
|
|
202
|
+
background-color: var(--stsv-input--colorful__background-color);
|
|
203
|
+
border-color: var(--stsv-input--colorful__border-color);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.sterling-radio.colorful input:checked + .indicator {
|
|
207
|
+
background-color: var(--stsv-input--colorful__background-color);
|
|
208
|
+
border-color: var(--stsv-input--colorful__border-color);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.sterling-radio.colorful:not(.disabled):hover .indicator {
|
|
212
|
+
background-color: var(--stsv-input--colorful__background-color--hover);
|
|
213
|
+
border-color: var(--stsv-input--colorful__border-color--hover);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.sterling-radio.colorful input:checked + .indicator::after {
|
|
217
|
+
background-color: var(--stsv-input--colorful__color);
|
|
201
218
|
}
|
|
202
219
|
|
|
203
220
|
.sterling-radio.disabled * {
|
|
@@ -205,7 +222,14 @@ const onChange = (e) => {
|
|
|
205
222
|
}
|
|
206
223
|
|
|
207
224
|
.container::after {
|
|
208
|
-
background:
|
|
225
|
+
background: repeating-linear-gradient(
|
|
226
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
227
|
+
var(--stsv-common--disabled__stripe-color),
|
|
228
|
+
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
229
|
+
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
230
|
+
var(--stsv-common--disabled__stripe-color--alt)
|
|
231
|
+
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
232
|
+
);
|
|
209
233
|
border-radius: 10000px;
|
|
210
234
|
bottom: 0;
|
|
211
235
|
content: '';
|
|
@@ -218,6 +242,12 @@ const onChange = (e) => {
|
|
|
218
242
|
transition: opacity 250ms;
|
|
219
243
|
}
|
|
220
244
|
|
|
245
|
+
label {
|
|
246
|
+
color: var(--stsv-common__color);
|
|
247
|
+
transition: color 250ms;
|
|
248
|
+
font: inherit;
|
|
249
|
+
}
|
|
250
|
+
|
|
221
251
|
.sterling-radio.disabled .container::after {
|
|
222
252
|
opacity: 1;
|
|
223
253
|
}
|
|
@@ -225,7 +255,8 @@ const onChange = (e) => {
|
|
|
225
255
|
@media (prefers-reduced-motion) {
|
|
226
256
|
.indicator,
|
|
227
257
|
.indicator::after,
|
|
228
|
-
.container::after
|
|
258
|
+
.container::after,
|
|
259
|
+
label {
|
|
229
260
|
transition: none;
|
|
230
261
|
}
|
|
231
262
|
}
|
package/Radio.svelte.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ declare const __propDef: {
|
|
|
6
6
|
disabled?: boolean | undefined;
|
|
7
7
|
group?: any | undefined | null;
|
|
8
8
|
id?: string | undefined;
|
|
9
|
+
colorful?: boolean | undefined;
|
|
9
10
|
blur?: (() => void) | undefined;
|
|
10
11
|
click?: (() => void) | undefined;
|
|
11
12
|
focus?: ((options?: FocusOptions) => void) | undefined;
|
|
@@ -41,6 +42,7 @@ declare const __propDef: {
|
|
|
41
42
|
};
|
|
42
43
|
slots: {
|
|
43
44
|
default: {
|
|
45
|
+
colorful: boolean;
|
|
44
46
|
checked: boolean;
|
|
45
47
|
disabled: boolean;
|
|
46
48
|
group: any;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
<script>import { createEventDispatcher } from "svelte";
|
|
2
|
+
import Input from "./Input.svelte";
|
|
3
|
+
import Slider from "./Slider.svelte";
|
|
4
|
+
import { round } from "lodash-es";
|
|
5
|
+
export let red = 0;
|
|
6
|
+
export let green = 0;
|
|
7
|
+
export let blue = 0;
|
|
8
|
+
export let alpha = 1;
|
|
9
|
+
export let colorful = false;
|
|
10
|
+
let redText = red.toString();
|
|
11
|
+
let greenText = green.toString();
|
|
12
|
+
let blueText = blue.toString();
|
|
13
|
+
let alphaText = alpha.toString();
|
|
14
|
+
$: {
|
|
15
|
+
redText = red.toString();
|
|
16
|
+
}
|
|
17
|
+
$: {
|
|
18
|
+
greenText = green.toString();
|
|
19
|
+
}
|
|
20
|
+
$: {
|
|
21
|
+
blueText = blue.toString();
|
|
22
|
+
}
|
|
23
|
+
$: {
|
|
24
|
+
alphaText = alpha.toString();
|
|
25
|
+
}
|
|
26
|
+
const dispatcher = createEventDispatcher();
|
|
27
|
+
const raiseChange = () => {
|
|
28
|
+
dispatcher("change", { red, green, blue, alpha });
|
|
29
|
+
};
|
|
30
|
+
$:
|
|
31
|
+
red, green, blue, alpha, raiseChange();
|
|
32
|
+
const parseRgbValue = (text, defaultValue = 0) => {
|
|
33
|
+
if (!text) {
|
|
34
|
+
return defaultValue;
|
|
35
|
+
}
|
|
36
|
+
const newValue = text ? Number.parseFloat(text) : defaultValue;
|
|
37
|
+
if (newValue && newValue !== Number.NaN) {
|
|
38
|
+
return Math.round(Math.max(0, Math.min(255, newValue)));
|
|
39
|
+
}
|
|
40
|
+
return defaultValue;
|
|
41
|
+
};
|
|
42
|
+
const onRedInputChange = (event) => {
|
|
43
|
+
const inputChangeEvent = event;
|
|
44
|
+
red = parseRgbValue(inputChangeEvent?.currentTarget?.value, red);
|
|
45
|
+
};
|
|
46
|
+
const onGreenInputChange = (event) => {
|
|
47
|
+
const inputChangeEvent = event;
|
|
48
|
+
green = parseRgbValue(inputChangeEvent?.currentTarget?.value, green);
|
|
49
|
+
};
|
|
50
|
+
const onBlueInputChange = (event) => {
|
|
51
|
+
const inputChangeEvent = event;
|
|
52
|
+
blue = parseRgbValue(inputChangeEvent?.currentTarget?.value, blue);
|
|
53
|
+
};
|
|
54
|
+
const onAlphaInputchange = (event) => {
|
|
55
|
+
const inputChangeEvent = event;
|
|
56
|
+
const text = inputChangeEvent?.currentTarget?.value;
|
|
57
|
+
const newValue = text ? Number.parseFloat(text) : alpha;
|
|
58
|
+
if (newValue && newValue !== Number.NaN) {
|
|
59
|
+
alpha = round(Math.max(0, Math.min(1, newValue)), 2);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<div class="sterling-rgb-color-sliders">
|
|
65
|
+
<div class="slider red-slider">
|
|
66
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={red} />
|
|
67
|
+
</div>
|
|
68
|
+
<Input {colorful} bind:value={redText} on:change={(e) => onRedInputChange(e)} />
|
|
69
|
+
<div class="slider green-slider">
|
|
70
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={green} />
|
|
71
|
+
</div>
|
|
72
|
+
<Input {colorful} bind:value={greenText} on:change={(e) => onGreenInputChange(e)} />
|
|
73
|
+
<div class="slider blue-slider">
|
|
74
|
+
<Slider {colorful} min={0} max={255} precision={0} bind:value={blue} />
|
|
75
|
+
</div>
|
|
76
|
+
<Input {colorful} bind:value={blueText} on:change={(e) => onBlueInputChange(e)} />
|
|
77
|
+
<div class="alpha" style={`--red:${red};--green:${green};--blue:${blue}`}>
|
|
78
|
+
<div class="alpha-hatch" />
|
|
79
|
+
<div class="alpha-gradient" />
|
|
80
|
+
<div class="slider alpha-slider">
|
|
81
|
+
<Slider {colorful} min={0} max={1} precision={2} bind:value={alpha} />
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<Input {colorful} bind:value={alphaText} on:change={(e) => onAlphaInputchange(e)} />
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<style>
|
|
88
|
+
.sterling-rgb-color-sliders {
|
|
89
|
+
align-items: center;
|
|
90
|
+
display: grid;
|
|
91
|
+
grid-template-columns: 1fr 4em;
|
|
92
|
+
column-gap: 0.5em;
|
|
93
|
+
row-gap: 0.25em;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.slider :global(.fill),
|
|
97
|
+
.slider :global(.sterling-slider.colorful .fill) {
|
|
98
|
+
background-color: transparent;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.slider :global(.track),
|
|
102
|
+
.slider :global(.sterling-slider.colorful .track) {
|
|
103
|
+
background-color: transparent;
|
|
104
|
+
background-image: linear-gradient(to right, #ffffff, #ffffff 1px, #000000 1px, #000000);
|
|
105
|
+
background-size: 2px 100%;
|
|
106
|
+
opacity: 0.1;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.red-slider {
|
|
110
|
+
background: linear-gradient(to right, black 0%, rgb(255, 0, 0) 100%);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.green-slider {
|
|
114
|
+
background: linear-gradient(to right, black 0%, rgb(0, 255, 0) 100%);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.blue-slider {
|
|
118
|
+
background: linear-gradient(to right, black 0%, rgb(0, 0, 255) 100%);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.alpha {
|
|
122
|
+
display: grid;
|
|
123
|
+
grid-template-columns: 1fr;
|
|
124
|
+
grid-template-rows: 1fr;
|
|
125
|
+
place-content: stretch;
|
|
126
|
+
place-items: stretch;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.alpha-gradient,
|
|
130
|
+
.alpha-hatch,
|
|
131
|
+
.alpha-slider {
|
|
132
|
+
grid-row: 1 / span 1;
|
|
133
|
+
grid-column: 1 / span 1;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.alpha-hatch {
|
|
137
|
+
background-color: #eee;
|
|
138
|
+
opacity: 0.1;
|
|
139
|
+
background-image: repeating-linear-gradient(
|
|
140
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
141
|
+
#444 25%,
|
|
142
|
+
transparent 25%,
|
|
143
|
+
transparent 75%,
|
|
144
|
+
#444 75%,
|
|
145
|
+
#444
|
|
146
|
+
),
|
|
147
|
+
repeating-linear-gradient(
|
|
148
|
+
var(--stsv-common--disabled__stripe-angle),
|
|
149
|
+
#444 25%,
|
|
150
|
+
#eee 25%,
|
|
151
|
+
#eee 75%,
|
|
152
|
+
#444 75%,
|
|
153
|
+
#444
|
|
154
|
+
),
|
|
155
|
+
repeating-linear-gradient(
|
|
156
|
+
-var(--stsv-common--disabled__stripe-angle),
|
|
157
|
+
#444 25%,
|
|
158
|
+
transparent 25%,
|
|
159
|
+
transparent 75%,
|
|
160
|
+
#444 75%,
|
|
161
|
+
#444
|
|
162
|
+
),
|
|
163
|
+
repeating-linear-gradient(
|
|
164
|
+
-var(--stsv-common--disabled__stripe-angle),
|
|
165
|
+
#444 25%,
|
|
166
|
+
#eee 25%,
|
|
167
|
+
#eee 75%,
|
|
168
|
+
#444 75%,
|
|
169
|
+
#444
|
|
170
|
+
);
|
|
171
|
+
background-position: 0 0, 4px 4px;
|
|
172
|
+
background-size: 8px 8px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.alpha-gradient {
|
|
176
|
+
background: linear-gradient(
|
|
177
|
+
to right,
|
|
178
|
+
rgba(var(--red), var(--green), var(--blue), 0) 0%,
|
|
179
|
+
rgba(var(--red), var(--green), var(--blue), 100) 100%
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
</style>
|