@geoffcox/sterling-svelte 0.0.16 → 0.0.18
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/{buttons/Button.svelte → Button.svelte} +27 -27
- package/{inputs/Checkbox.svelte → Checkbox.svelte} +26 -21
- package/{inputs/Checkbox.svelte.d.ts → Checkbox.svelte.d.ts} +2 -1
- package/{surfaces/Dialog.svelte → Dialog.svelte} +34 -21
- package/Field.svelte +257 -0
- package/Field.svelte.d.ts +63 -0
- package/Field.types.d.ts +1 -0
- package/Input.svelte +115 -0
- package/{inputs/Input.svelte.d.ts → Input.svelte.d.ts} +8 -3
- package/Label.svelte +51 -0
- package/Label.svelte.d.ts +41 -0
- package/List.constants.d.ts +1 -0
- package/List.constants.js +1 -0
- package/List.svelte +293 -0
- package/List.svelte.d.ts +63 -0
- package/List.types.d.ts +6 -0
- package/ListItem.svelte +89 -0
- package/ListItem.svelte.d.ts +51 -0
- package/{containers/Menu.svelte → Menu.svelte} +42 -27
- package/{containers/MenuBar.svelte → MenuBar.svelte} +13 -13
- package/{buttons/MenuButton.svelte → MenuButton.svelte} +17 -17
- package/{buttons/MenuButton.svelte.d.ts → MenuButton.svelte.d.ts} +1 -1
- package/{containers/MenuItem.svelte → MenuItem.svelte} +42 -54
- package/{containers/MenuItem.svelte.d.ts → MenuItem.svelte.d.ts} +2 -2
- package/{containers/MenuSeparator.svelte → MenuSeparator.svelte} +2 -2
- package/Menus.types.d.ts +22 -0
- package/{containers/Menus.utils.d.ts → Menus.utils.d.ts} +2 -2
- package/{containers/Menus.utils.js → Menus.utils.js} +6 -6
- package/{display/Progress.svelte → Progress.svelte} +28 -52
- package/{display/Progress.svelte.d.ts → Progress.svelte.d.ts} +1 -3
- package/Progress.types.d.ts +1 -0
- package/{inputs/Radio.svelte → Radio.svelte} +34 -29
- package/{inputs/Radio.svelte.d.ts → Radio.svelte.d.ts} +7 -2
- package/{inputs/Select.svelte → Select.svelte} +112 -130
- package/Select.svelte.d.ts +53 -0
- package/{inputs/Slider.svelte → Slider.svelte} +90 -86
- package/Slider.svelte.d.ts +51 -0
- package/{inputs/Switch.svelte → Switch.svelte} +43 -41
- package/Tab.svelte +181 -0
- package/{containers/Tab.svelte.d.ts → Tab.svelte.d.ts} +12 -15
- package/TabList.svelte +247 -0
- package/{containers/TabList.svelte.d.ts → TabList.svelte.d.ts} +21 -21
- package/TabList.types.d.ts +7 -0
- package/TextArea.svelte +113 -0
- package/{inputs/TextArea.svelte.d.ts → TextArea.svelte.d.ts} +3 -6
- package/TextArea.types.js +1 -0
- package/Tooltip.svelte +182 -0
- package/Tooltip.svelte.d.ts +24 -0
- package/Tooltip.types.d.ts +3 -0
- package/Tooltip.types.js +1 -0
- package/Tree.constants.d.ts +2 -0
- package/Tree.constants.js +2 -0
- package/Tree.svelte +114 -0
- package/Tree.svelte.d.ts +24 -0
- package/Tree.types.d.ts +28 -0
- package/Tree.types.js +1 -0
- package/{containers/TreeChevron.svelte → TreeChevron.svelte} +3 -3
- package/TreeItem.svelte +276 -0
- package/TreeItem.svelte.d.ts +65 -0
- package/{containers/TreeItem.svelte → TreeItemDisplay.svelte} +18 -18
- package/{containers/TreeItem.svelte.d.ts → TreeItemDisplay.svelte.d.ts} +11 -14
- package/{forwardEvents.js → actions/forwardEvents.js} +0 -2
- package/index.d.ts +44 -31
- package/index.js +40 -25
- package/package.json +45 -41
- package/theme/darkTheme.js +73 -74
- package/theme/lightTheme.js +76 -77
- package/containers/List.svelte +0 -249
- package/containers/List.svelte.d.ts +0 -68
- package/containers/ListItem.svelte +0 -48
- package/containers/ListItem.svelte.d.ts +0 -26
- package/containers/Menus.types.d.ts +0 -22
- package/containers/Tab.svelte +0 -327
- package/containers/TabList.svelte +0 -126
- package/containers/Tabs.types.d.ts +0 -12
- package/containers/Tree.constants.d.ts +0 -2
- package/containers/Tree.constants.js +0 -2
- package/containers/Tree.svelte +0 -222
- package/containers/Tree.svelte.d.ts +0 -50
- package/containers/Tree.types.d.ts +0 -47
- package/containers/TreeNode.svelte +0 -266
- package/containers/TreeNode.svelte.d.ts +0 -43
- package/display/Label.svelte +0 -27
- package/display/Label.svelte.d.ts +0 -20
- package/display/Progress.types.d.ts +0 -1
- package/inputs/Input.svelte +0 -129
- package/inputs/Select.svelte.d.ts +0 -62
- package/inputs/Slider.svelte.d.ts +0 -28
- package/inputs/TextArea.svelte +0 -154
- package/surfaces/CloseX.svelte +0 -5
- package/surfaces/CloseX.svelte.d.ts +0 -23
- package/surfaces/Portal.svelte +0 -14
- package/surfaces/Portal.svelte.d.ts +0 -21
- /package/{buttons/Button.svelte.d.ts → Button.svelte.d.ts} +0 -0
- /package/{buttons/Button.types.d.ts → Button.types.d.ts} +0 -0
- /package/{buttons/Button.types.js → Button.types.js} +0 -0
- /package/{surfaces/Dialog.svelte.d.ts → Dialog.svelte.d.ts} +0 -0
- /package/{containers/Menus.types.js → Field.types.js} +0 -0
- /package/{containers/Tabs.types.js → List.types.js} +0 -0
- /package/{containers/Menu.svelte.d.ts → Menu.svelte.d.ts} +0 -0
- /package/{containers/MenuBar.svelte.d.ts → MenuBar.svelte.d.ts} +0 -0
- /package/{containers/MenuItemDisplay.svelte → MenuItemDisplay.svelte} +0 -0
- /package/{containers/MenuItemDisplay.svelte.d.ts → MenuItemDisplay.svelte.d.ts} +0 -0
- /package/{containers/MenuSeparator.svelte.d.ts → MenuSeparator.svelte.d.ts} +0 -0
- /package/{containers/Menus.constants.d.ts → Menus.constants.d.ts} +0 -0
- /package/{containers/Menus.constants.js → Menus.constants.js} +0 -0
- /package/{containers/Tree.types.js → Menus.types.js} +0 -0
- /package/{display/Progress.types.js → Progress.types.js} +0 -0
- /package/{inputs/Switch.svelte.d.ts → Switch.svelte.d.ts} +0 -0
- /package/{containers/Tabs.constants.d.ts → TabList.constants.d.ts} +0 -0
- /package/{containers/Tabs.constants.js → TabList.constants.js} +0 -0
- /package/{inputs/TextArea.types.js → TabList.types.js} +0 -0
- /package/{inputs/TextArea.types.d.ts → TextArea.types.d.ts} +0 -0
- /package/{containers/TreeChevron.svelte.d.ts → TreeChevron.svelte.d.ts} +0 -0
- /package/{clickOutside.d.ts → actions/clickOutside.d.ts} +0 -0
- /package/{clickOutside.js → actions/clickOutside.js} +0 -0
- /package/{forwardEvents.d.ts → actions/forwardEvents.d.ts} +0 -0
- /package/{portal.d.ts → actions/portal.d.ts} +0 -0
- /package/{portal.js → actions/portal.js} +0 -0
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Label from "../display/Label.svelte";
|
|
3
|
-
export let value = 0;
|
|
1
|
+
<script>export let value = 0;
|
|
4
2
|
export let max = 100;
|
|
5
3
|
export let percent = 0;
|
|
6
4
|
export let vertical = false;
|
|
7
5
|
export let colorful = "none";
|
|
8
6
|
export let disabled = false;
|
|
9
|
-
const inputId = uuid();
|
|
10
7
|
let clientHeight;
|
|
11
8
|
let clientWidth;
|
|
12
9
|
$:
|
|
@@ -25,7 +22,7 @@ $:
|
|
|
25
22
|
$:
|
|
26
23
|
indicatorStyle = vertical ? `height: ${percentHeight}px` : `width: ${percentWidth}px`;
|
|
27
24
|
$:
|
|
28
|
-
indicatorColor = colorful === "auto" ? percent === 100 ? "success" : "
|
|
25
|
+
indicatorColor = colorful === "auto" ? percent === 100 ? "success" : "info" : colorful;
|
|
29
26
|
</script>
|
|
30
27
|
|
|
31
28
|
<!--
|
|
@@ -39,6 +36,7 @@ $:
|
|
|
39
36
|
class="sterling-progress"
|
|
40
37
|
class:disabled
|
|
41
38
|
class:vertical
|
|
39
|
+
role="progressbar"
|
|
42
40
|
on:click
|
|
43
41
|
on:dblclick
|
|
44
42
|
on:focus
|
|
@@ -53,22 +51,15 @@ $:
|
|
|
53
51
|
on:wheel
|
|
54
52
|
{...$$restProps}
|
|
55
53
|
>
|
|
56
|
-
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class:progress={indicatorColor === 'progress'}
|
|
66
|
-
class:success={indicatorColor === 'success'}
|
|
67
|
-
class:warning={indicatorColor === 'warning'}
|
|
68
|
-
class:error={indicatorColor === 'error'}
|
|
69
|
-
style={indicatorStyle}
|
|
70
|
-
/>
|
|
71
|
-
</div>
|
|
54
|
+
<div class="container" bind:clientWidth bind:clientHeight>
|
|
55
|
+
<div
|
|
56
|
+
class="indicator"
|
|
57
|
+
class:info={indicatorColor === 'info'}
|
|
58
|
+
class:success={indicatorColor === 'success'}
|
|
59
|
+
class:warning={indicatorColor === 'warning'}
|
|
60
|
+
class:error={indicatorColor === 'error'}
|
|
61
|
+
style={indicatorStyle}
|
|
62
|
+
/>
|
|
72
63
|
</div>
|
|
73
64
|
</div>
|
|
74
65
|
|
|
@@ -78,27 +69,15 @@ $:
|
|
|
78
69
|
flex-direction: column;
|
|
79
70
|
align-content: flex-start;
|
|
80
71
|
align-items: flex-start;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.sterling-progress > :global(label) {
|
|
84
|
-
font-size: 0.7em;
|
|
85
|
-
margin: 0.5em 0.7em;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.sterling-progress > :global(label):empty {
|
|
89
|
-
margin: 0;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.progress-bar {
|
|
93
72
|
display: block;
|
|
94
|
-
background: var(--Common__background-color);
|
|
73
|
+
background: var(--stsv-Common__background-color);
|
|
95
74
|
box-sizing: border-box;
|
|
96
75
|
height: 1em;
|
|
97
76
|
padding: 0.2em;
|
|
98
|
-
border-width: var(--Common__border-width);
|
|
99
|
-
border-style: var(--Common__border-style);
|
|
100
|
-
border-color: var(--Common__border-color);
|
|
101
|
-
border-radius: var(--Common__border-radius);
|
|
77
|
+
border-width: var(--stsv-Common__border-width);
|
|
78
|
+
border-style: var(--stsv-Common__border-style);
|
|
79
|
+
border-color: var(--stsv-Common__border-color);
|
|
80
|
+
border-radius: var(--stsv-Common__border-radius);
|
|
102
81
|
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
103
82
|
}
|
|
104
83
|
|
|
@@ -111,7 +90,7 @@ $:
|
|
|
111
90
|
}
|
|
112
91
|
|
|
113
92
|
.indicator {
|
|
114
|
-
background-color: var(--
|
|
93
|
+
background-color: var(--stsv-Display__border-color);
|
|
115
94
|
box-sizing: border-box;
|
|
116
95
|
height: 100%;
|
|
117
96
|
min-height: 1px;
|
|
@@ -123,9 +102,6 @@ $:
|
|
|
123
102
|
.sterling-progress.vertical {
|
|
124
103
|
align-items: center;
|
|
125
104
|
align-content: center;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.sterling-progress.vertical .progress-bar {
|
|
129
105
|
height: unset;
|
|
130
106
|
width: 1em;
|
|
131
107
|
}
|
|
@@ -146,35 +122,35 @@ $:
|
|
|
146
122
|
|
|
147
123
|
/* ----- Colorful ----- */
|
|
148
124
|
|
|
149
|
-
.indicator.
|
|
150
|
-
background-color: var(--
|
|
125
|
+
.indicator.info {
|
|
126
|
+
background-color: var(--stsv-Info__border-color);
|
|
151
127
|
}
|
|
152
128
|
|
|
153
129
|
.indicator.success {
|
|
154
|
-
background-color: var(--
|
|
130
|
+
background-color: var(--stsv-Success__border-color);
|
|
155
131
|
}
|
|
156
132
|
|
|
157
133
|
.indicator.warning {
|
|
158
|
-
background-color: var(--
|
|
134
|
+
background-color: var(--stsv-Warning__border-color);
|
|
159
135
|
}
|
|
160
136
|
|
|
161
137
|
.indicator.error {
|
|
162
|
-
background-color: var(--
|
|
138
|
+
background-color: var(--stsv-Error__border-color);
|
|
163
139
|
}
|
|
164
140
|
|
|
165
141
|
/* ----- Disabled ----- */
|
|
166
142
|
|
|
167
|
-
.sterling-progress.disabled
|
|
168
|
-
background: var(--Common__background-color--disabled);
|
|
169
|
-
border-color: var(--Common__border-color--disabled);
|
|
143
|
+
.sterling-progress.disabled {
|
|
144
|
+
background: var(--stsv-Common__background-color--disabled);
|
|
145
|
+
border-color: var(--stsv-Common__border-color--disabled);
|
|
170
146
|
}
|
|
171
147
|
|
|
172
148
|
.sterling-progress.disabled .indicator {
|
|
173
|
-
background-color: var(--Display__color--disabled);
|
|
149
|
+
background-color: var(--stsv-Display__color--disabled);
|
|
174
150
|
}
|
|
175
151
|
|
|
176
152
|
@media (prefers-reduced-motion) {
|
|
177
|
-
.progress
|
|
153
|
+
.sterling-progress,
|
|
178
154
|
.indicator {
|
|
179
155
|
transition: none;
|
|
180
156
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ProgressColorful = 'none' | 'auto' | 'info' | 'success' | 'warning' | 'error';
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
<script>import { onMount } from "svelte";
|
|
2
2
|
import { v4 as uuid } from "uuid";
|
|
3
|
-
import Label from "
|
|
3
|
+
import Label from "./Label.svelte";
|
|
4
4
|
export let checked = false;
|
|
5
|
-
export let group = void 0;
|
|
6
5
|
export let disabled = false;
|
|
7
|
-
|
|
6
|
+
export let group = void 0;
|
|
7
|
+
export let id = void 0;
|
|
8
|
+
let mounted = false;
|
|
9
|
+
$: {
|
|
10
|
+
if ($$slots.default && id === void 0) {
|
|
11
|
+
id = uuid();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
$: {
|
|
15
|
+
if (mounted) {
|
|
16
|
+
checked = group === $$restProps.value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
8
19
|
const onChange = (e) => {
|
|
9
20
|
if (e.currentTarget.checked) {
|
|
10
21
|
group = $$restProps.value;
|
|
11
22
|
}
|
|
12
23
|
};
|
|
13
|
-
let mounted = false;
|
|
14
24
|
onMount(() => {
|
|
15
25
|
if (checked) {
|
|
16
26
|
group = $$restProps.value;
|
|
17
27
|
}
|
|
18
28
|
mounted = true;
|
|
19
29
|
});
|
|
20
|
-
$: {
|
|
21
|
-
if (mounted) {
|
|
22
|
-
checked = group === $$restProps.value;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
30
|
</script>
|
|
26
31
|
|
|
27
32
|
<!--
|
|
@@ -31,6 +36,9 @@ $: {
|
|
|
31
36
|
<div class="sterling-radio">
|
|
32
37
|
<div class="container">
|
|
33
38
|
<input
|
|
39
|
+
checked={group === $$restProps.value}
|
|
40
|
+
{disabled}
|
|
41
|
+
{id}
|
|
34
42
|
type="radio"
|
|
35
43
|
on:blur
|
|
36
44
|
on:click
|
|
@@ -53,17 +61,14 @@ $: {
|
|
|
53
61
|
on:mouseup
|
|
54
62
|
on:toggle
|
|
55
63
|
on:wheel
|
|
56
|
-
checked={group === $$restProps.value}
|
|
57
64
|
{...$$restProps}
|
|
58
|
-
{disabled}
|
|
59
|
-
id={inputId}
|
|
60
65
|
/>
|
|
61
66
|
<div class="indicator" />
|
|
62
67
|
</div>
|
|
63
|
-
{#if $$slots.
|
|
68
|
+
{#if $$slots.default}
|
|
64
69
|
<div class="label">
|
|
65
|
-
<Label {disabled} for={
|
|
66
|
-
<slot
|
|
70
|
+
<Label {disabled} for={id}>
|
|
71
|
+
<slot {checked} {disabled} {group} />
|
|
67
72
|
</Label>
|
|
68
73
|
</div>
|
|
69
74
|
{/if}
|
|
@@ -114,10 +119,10 @@ $: {
|
|
|
114
119
|
and there is not a parent CSS selector.
|
|
115
120
|
*/
|
|
116
121
|
.indicator {
|
|
117
|
-
background-color: var(--Input__background-color);
|
|
118
|
-
border-color: var(--Input__border-color);
|
|
119
|
-
border-style: var(--Input__border-style);
|
|
120
|
-
border-width: var(--Input__border-width);
|
|
122
|
+
background-color: var(--stsv-Input__background-color);
|
|
123
|
+
border-color: var(--stsv-Input__border-color);
|
|
124
|
+
border-style: var(--stsv-Input__border-style);
|
|
125
|
+
border-width: var(--stsv-Input__border-width);
|
|
121
126
|
border-radius: 10000px;
|
|
122
127
|
box-sizing: border-box;
|
|
123
128
|
display: inline-block;
|
|
@@ -129,20 +134,20 @@ $: {
|
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
input:checked + .indicator {
|
|
132
|
-
background-color: var(--Input__background-color);
|
|
133
|
-
border-color: var(--Input__border-color);
|
|
137
|
+
background-color: var(--stsv-Input__background-color);
|
|
138
|
+
border-color: var(--stsv-Input__border-color);
|
|
134
139
|
}
|
|
135
140
|
|
|
136
141
|
input:focus-visible + .indicator {
|
|
137
|
-
outline-color: var(--Common__outline-color);
|
|
138
|
-
outline-offset: var(--Common__outline-offset);
|
|
139
|
-
outline-style: var(--Common__outline-style);
|
|
140
|
-
outline-width: var(--Common__outline-width);
|
|
142
|
+
outline-color: var(--stsv-Common__outline-color);
|
|
143
|
+
outline-offset: var(--stsv-Common__outline-offset);
|
|
144
|
+
outline-style: var(--stsv-Common__outline-style);
|
|
145
|
+
outline-width: var(--stsv-Common__outline-width);
|
|
141
146
|
}
|
|
142
147
|
|
|
143
148
|
input:disabled + .indicator {
|
|
144
|
-
background-color: var(--
|
|
145
|
-
border-color: var(--
|
|
149
|
+
background-color: var(--stsv-Common__background-color--disabled);
|
|
150
|
+
border-color: var(--stsv-Common__border-color--disabled);
|
|
146
151
|
}
|
|
147
152
|
|
|
148
153
|
.indicator::after {
|
|
@@ -159,11 +164,11 @@ $: {
|
|
|
159
164
|
}
|
|
160
165
|
|
|
161
166
|
input:checked + .indicator::after {
|
|
162
|
-
background-color: var(--Input__color);
|
|
167
|
+
background-color: var(--stsv-Input__color);
|
|
163
168
|
}
|
|
164
169
|
|
|
165
170
|
input:checked:disabled + .indicator::after {
|
|
166
|
-
background-color: var(--
|
|
171
|
+
background-color: var(--stsv-Common__color--disabled);
|
|
167
172
|
}
|
|
168
173
|
|
|
169
174
|
.label {
|
|
@@ -3,8 +3,9 @@ declare const __propDef: {
|
|
|
3
3
|
props: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
checked?: boolean | undefined;
|
|
6
|
-
group?: any | undefined | null;
|
|
7
6
|
disabled?: boolean | undefined;
|
|
7
|
+
group?: any | undefined | null;
|
|
8
|
+
id?: string | undefined;
|
|
8
9
|
};
|
|
9
10
|
events: {
|
|
10
11
|
blur: FocusEvent;
|
|
@@ -31,7 +32,11 @@ declare const __propDef: {
|
|
|
31
32
|
[evt: string]: CustomEvent<any>;
|
|
32
33
|
};
|
|
33
34
|
slots: {
|
|
34
|
-
|
|
35
|
+
default: {
|
|
36
|
+
checked: boolean;
|
|
37
|
+
disabled: boolean;
|
|
38
|
+
group: any;
|
|
39
|
+
};
|
|
35
40
|
};
|
|
36
41
|
};
|
|
37
42
|
export type RadioProps = typeof __propDef.props;
|
|
@@ -1,50 +1,47 @@
|
|
|
1
|
-
<script>import {
|
|
1
|
+
<script>import { computePosition, flip, offset, shift, autoUpdate } from "@floating-ui/dom";
|
|
2
|
+
import { createEventDispatcher, onMount, tick } from "svelte";
|
|
2
3
|
import { v4 as uuid } from "uuid";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import Input from "./Input.svelte";
|
|
4
|
+
import { clickOutside } from "./actions/clickOutside";
|
|
5
|
+
import List from "./List.svelte";
|
|
6
|
+
const popupId = uuid();
|
|
7
|
+
export let composed = false;
|
|
8
8
|
export let disabled = false;
|
|
9
|
-
export let items = [];
|
|
10
9
|
export let open = false;
|
|
11
|
-
export let
|
|
12
|
-
export let selectedItem = void 0;
|
|
13
|
-
$: {
|
|
14
|
-
selectedItem = items[selectedIndex];
|
|
15
|
-
}
|
|
16
|
-
const inputId = uuid();
|
|
10
|
+
export let selectedValue = void 0;
|
|
17
11
|
let prevOpen = false;
|
|
18
|
-
let
|
|
12
|
+
let pendingSelectedValue = selectedValue;
|
|
19
13
|
let selectRef;
|
|
20
14
|
let popupRef;
|
|
21
15
|
let listRef;
|
|
22
|
-
const popupId = uuid();
|
|
23
16
|
let popupPosition = {
|
|
24
17
|
x: void 0,
|
|
25
18
|
y: void 0
|
|
26
19
|
};
|
|
27
20
|
const dispatch = createEventDispatcher();
|
|
28
|
-
const
|
|
29
|
-
dispatch("
|
|
21
|
+
const raiseSelect = (value) => {
|
|
22
|
+
dispatch("select", { value });
|
|
30
23
|
};
|
|
31
|
-
const
|
|
32
|
-
dispatch("
|
|
24
|
+
const raisePending = (value) => {
|
|
25
|
+
dispatch("pending", { value });
|
|
33
26
|
};
|
|
34
|
-
$:
|
|
35
|
-
selectedIndex, () => {
|
|
36
|
-
pendingSelectedIndex = selectedIndex;
|
|
37
|
-
};
|
|
38
27
|
$: {
|
|
39
|
-
|
|
28
|
+
pendingSelectedValue = selectedValue;
|
|
40
29
|
}
|
|
41
30
|
$: {
|
|
42
|
-
|
|
31
|
+
raiseSelect(selectedValue);
|
|
32
|
+
}
|
|
33
|
+
$: {
|
|
34
|
+
if (open) {
|
|
35
|
+
raisePending(pendingSelectedValue);
|
|
36
|
+
}
|
|
43
37
|
}
|
|
44
38
|
$: {
|
|
45
39
|
if (open && !prevOpen) {
|
|
46
40
|
prevOpen = true;
|
|
47
|
-
tick().then(() =>
|
|
41
|
+
tick().then(() => {
|
|
42
|
+
listRef?.focus();
|
|
43
|
+
listRef?.scrollToSelectedItem();
|
|
44
|
+
});
|
|
48
45
|
} else if (prevOpen) {
|
|
49
46
|
prevOpen = false;
|
|
50
47
|
tick().then(() => selectRef?.focus());
|
|
@@ -76,23 +73,36 @@ const onSelectKeydown = (event) => {
|
|
|
76
73
|
switch (event.key) {
|
|
77
74
|
case " ":
|
|
78
75
|
{
|
|
79
|
-
|
|
76
|
+
if (!open) {
|
|
77
|
+
open = true;
|
|
78
|
+
}
|
|
80
79
|
event.preventDefault();
|
|
81
80
|
event.stopPropagation();
|
|
81
|
+
return false;
|
|
82
82
|
}
|
|
83
83
|
break;
|
|
84
84
|
case "ArrowUp":
|
|
85
85
|
{
|
|
86
|
-
|
|
86
|
+
if (selectedValue) {
|
|
87
|
+
listRef.selectPreviousItem();
|
|
88
|
+
} else {
|
|
89
|
+
listRef.selectLastItem();
|
|
90
|
+
}
|
|
87
91
|
event.preventDefault();
|
|
88
92
|
event.stopPropagation();
|
|
93
|
+
return false;
|
|
89
94
|
}
|
|
90
95
|
break;
|
|
91
96
|
case "ArrowDown":
|
|
92
97
|
{
|
|
93
|
-
|
|
98
|
+
if (selectedValue) {
|
|
99
|
+
listRef.selectNextItem();
|
|
100
|
+
} else {
|
|
101
|
+
listRef.selectFirstItem();
|
|
102
|
+
}
|
|
94
103
|
event.preventDefault();
|
|
95
104
|
event.stopPropagation();
|
|
105
|
+
return false;
|
|
96
106
|
}
|
|
97
107
|
break;
|
|
98
108
|
}
|
|
@@ -103,49 +113,46 @@ const onListKeydown = (event) => {
|
|
|
103
113
|
switch (event.key) {
|
|
104
114
|
case "Enter":
|
|
105
115
|
{
|
|
106
|
-
|
|
116
|
+
selectedValue = pendingSelectedValue;
|
|
107
117
|
open = !open;
|
|
108
118
|
event.preventDefault();
|
|
109
119
|
event.stopPropagation();
|
|
120
|
+
return false;
|
|
110
121
|
}
|
|
111
122
|
break;
|
|
112
123
|
case "Escape":
|
|
113
124
|
{
|
|
114
|
-
|
|
125
|
+
pendingSelectedValue = selectedValue;
|
|
115
126
|
open = !open;
|
|
116
127
|
event.preventDefault();
|
|
117
128
|
event.stopPropagation();
|
|
129
|
+
return false;
|
|
118
130
|
}
|
|
119
131
|
break;
|
|
120
132
|
}
|
|
121
133
|
}
|
|
122
134
|
};
|
|
123
135
|
const onListClick = (event) => {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
event.stopPropagation();
|
|
129
|
-
}
|
|
136
|
+
open = false;
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
event.stopPropagation();
|
|
139
|
+
return false;
|
|
130
140
|
};
|
|
131
|
-
const
|
|
132
|
-
|
|
141
|
+
const onListSelect = (event) => {
|
|
142
|
+
pendingSelectedValue = event.detail.value;
|
|
133
143
|
if (!open) {
|
|
134
|
-
|
|
144
|
+
selectedValue = pendingSelectedValue;
|
|
135
145
|
}
|
|
136
146
|
};
|
|
137
147
|
</script>
|
|
138
148
|
|
|
139
|
-
<!--
|
|
140
|
-
@component
|
|
141
|
-
A single item that can be selected from a popup list of items.
|
|
142
|
-
-->
|
|
143
149
|
<div
|
|
144
150
|
bind:this={selectRef}
|
|
145
151
|
aria-controls={popupId}
|
|
146
152
|
aria-haspopup="listbox"
|
|
147
153
|
aria-expanded={open}
|
|
148
154
|
class="sterling-select"
|
|
155
|
+
class:composed
|
|
149
156
|
class:disabled
|
|
150
157
|
role="combobox"
|
|
151
158
|
tabindex="0"
|
|
@@ -175,29 +182,19 @@ A single item that can be selected from a popup list of items.
|
|
|
175
182
|
on:keydown={onSelectKeydown}
|
|
176
183
|
{...$$restProps}
|
|
177
184
|
>
|
|
178
|
-
|
|
179
|
-
<
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
<div class="value">
|
|
192
|
-
<slot name="value">
|
|
193
|
-
{items[selectedIndex]}
|
|
194
|
-
</slot>
|
|
195
|
-
</div>
|
|
196
|
-
<div class="button">
|
|
197
|
-
<slot name="button" {open}>
|
|
198
|
-
<div class="chevron" />
|
|
199
|
-
</slot>
|
|
200
|
-
</div>
|
|
185
|
+
<div class="value">
|
|
186
|
+
<slot name="value" {disabled} {open} {selectedValue}>
|
|
187
|
+
{#if selectedValue}
|
|
188
|
+
{selectedValue}
|
|
189
|
+
{:else}
|
|
190
|
+
<span> </span>
|
|
191
|
+
{/if}
|
|
192
|
+
</slot>
|
|
193
|
+
</div>
|
|
194
|
+
<div class="button">
|
|
195
|
+
<slot name="button" {open}>
|
|
196
|
+
<div class="chevron" />
|
|
197
|
+
</slot>
|
|
201
198
|
</div>
|
|
202
199
|
<div
|
|
203
200
|
bind:this={popupRef}
|
|
@@ -207,88 +204,71 @@ A single item that can be selected from a popup list of items.
|
|
|
207
204
|
style="left:{popupPosition.x}px; top:{popupPosition.y}px"
|
|
208
205
|
>
|
|
209
206
|
<div class="popup-content">
|
|
210
|
-
<
|
|
211
|
-
{
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
<svelte:fragment let:disabled let:index let:item let:selected>
|
|
222
|
-
<slot {disabled} {index} {item} {selected} />
|
|
223
|
-
</svelte:fragment>
|
|
224
|
-
</List>
|
|
225
|
-
{:else}
|
|
226
|
-
<List
|
|
227
|
-
bind:this={listRef}
|
|
228
|
-
selectedIndex={pendingSelectedIndex}
|
|
229
|
-
{items}
|
|
230
|
-
{disabled}
|
|
231
|
-
on:click={onListClick}
|
|
232
|
-
on:keydown={onListKeydown}
|
|
233
|
-
on:itemSelected={onPendingItemSelected}
|
|
234
|
-
/>
|
|
235
|
-
{/if}
|
|
236
|
-
</slot>
|
|
207
|
+
<List
|
|
208
|
+
bind:this={listRef}
|
|
209
|
+
{disabled}
|
|
210
|
+
selectedValue={pendingSelectedValue}
|
|
211
|
+
on:click={onListClick}
|
|
212
|
+
on:keydown={onListKeydown}
|
|
213
|
+
on:select={onListSelect}
|
|
214
|
+
tabIndex={open ? 0 : -1}
|
|
215
|
+
>
|
|
216
|
+
<slot />
|
|
217
|
+
</List>
|
|
237
218
|
</div>
|
|
238
219
|
</div>
|
|
239
220
|
</div>
|
|
240
221
|
|
|
241
222
|
<style>
|
|
242
223
|
.sterling-select {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
border-
|
|
247
|
-
border-
|
|
248
|
-
|
|
224
|
+
align-content: center;
|
|
225
|
+
align-items: center;
|
|
226
|
+
background-color: var(--stsv-Input__background-color);
|
|
227
|
+
border-color: var(--stsv-Input__border-color);
|
|
228
|
+
border-radius: var(--stsv-Input__border-radius);
|
|
229
|
+
border-style: var(--stsv-Input__border-style);
|
|
230
|
+
border-width: var(--stsv-Input__border-width);
|
|
231
|
+
color: var(--stsv-Input__color);
|
|
232
|
+
cursor: pointer;
|
|
233
|
+
display: grid;
|
|
234
|
+
grid-template-columns: 1fr auto;
|
|
235
|
+
grid-template-rows: auto;
|
|
236
|
+
outline: none;
|
|
249
237
|
padding: 0;
|
|
250
238
|
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
251
239
|
}
|
|
252
240
|
|
|
253
241
|
.sterling-select:hover {
|
|
254
|
-
background-color: var(--Input__background-color--hover);
|
|
255
|
-
border-color: var(--Input__border-color--hover);
|
|
256
|
-
color: var(--Input__color--hover);
|
|
242
|
+
background-color: var(--stsv-Input__background-color--hover);
|
|
243
|
+
border-color: var(--stsv-Input__border-color--hover);
|
|
244
|
+
color: var(--stsv-Input__color--hover);
|
|
257
245
|
}
|
|
258
246
|
|
|
259
|
-
.sterling-select:focus
|
|
260
|
-
background-color: var(--Input__background-color--focus);
|
|
261
|
-
border-color: var(--Input__border-color--focus);
|
|
262
|
-
color: var(--Input__color--focus);
|
|
263
|
-
outline-color: var(--Common__outline-color);
|
|
264
|
-
outline-offset: var(--Common__outline-offset);
|
|
265
|
-
outline-style: var(--Common__outline-style);
|
|
266
|
-
outline-width: var(--Common__outline-width);
|
|
247
|
+
.sterling-select:focus {
|
|
248
|
+
background-color: var(--stsv-Input__background-color--focus);
|
|
249
|
+
border-color: var(--stsv-Input__border-color--focus);
|
|
250
|
+
color: var(--stsv-Input__color--focus);
|
|
251
|
+
outline-color: var(--stsv-Common__outline-color);
|
|
252
|
+
outline-offset: var(--stsv-Common__outline-offset);
|
|
253
|
+
outline-style: var(--stsv-Common__outline-style);
|
|
254
|
+
outline-width: var(--stsv-Common__outline-width);
|
|
267
255
|
}
|
|
268
256
|
|
|
269
257
|
.sterling-select.disabled {
|
|
270
|
-
background-color: var(--
|
|
271
|
-
border-color: var(
|
|
272
|
-
color: var(--
|
|
258
|
+
background-color: var(--stsv-Common__background-color--disabled);
|
|
259
|
+
border-color: var(--stsv--Common__border-color--disabled);
|
|
260
|
+
color: var(--stsv-Common__color--disabled);
|
|
273
261
|
cursor: not-allowed;
|
|
274
262
|
outline: none;
|
|
275
263
|
}
|
|
276
264
|
|
|
277
|
-
.sterling-select
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
.input {
|
|
287
|
-
display: grid;
|
|
288
|
-
grid-template-columns: 1fr auto;
|
|
289
|
-
grid-template-rows: auto;
|
|
290
|
-
align-content: center;
|
|
291
|
-
align-items: center;
|
|
265
|
+
.sterling-select.composed,
|
|
266
|
+
.sterling-select.composed:hover,
|
|
267
|
+
.sterling-select.composed.focus,
|
|
268
|
+
.sterling-select.composed.disabled {
|
|
269
|
+
background: none;
|
|
270
|
+
border: none;
|
|
271
|
+
outline: none;
|
|
292
272
|
}
|
|
293
273
|
|
|
294
274
|
.value {
|
|
@@ -332,9 +312,11 @@ A single item that can be selected from a popup list of items.
|
|
|
332
312
|
}
|
|
333
313
|
|
|
334
314
|
.popup {
|
|
315
|
+
background-color: var(--stsv-Common__background-color);
|
|
335
316
|
box-sizing: border-box;
|
|
336
317
|
display: none;
|
|
337
|
-
overflow:
|
|
318
|
+
overflow: visible;
|
|
319
|
+
outline: none;
|
|
338
320
|
position: absolute;
|
|
339
321
|
box-shadow: rgba(0, 0, 0, 0.4) 2px 2px 4px -1px;
|
|
340
322
|
width: fit-content;
|