@geoffcox/sterling-svelte 1.0.12 → 2.0.1
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/dist/Button.svelte +8 -46
- package/dist/Button.svelte.d.ts +9 -65
- package/dist/Callout.svelte +47 -72
- package/dist/Callout.svelte.d.ts +14 -55
- package/dist/Callout.types.d.ts +11 -0
- package/dist/Checkbox.svelte +12 -48
- package/dist/Checkbox.svelte.d.ts +9 -62
- package/dist/Dialog.svelte +30 -38
- package/dist/Dialog.svelte.d.ts +13 -36
- package/dist/Dropdown.svelte +39 -71
- package/dist/Dropdown.svelte.d.ts +17 -76
- package/dist/Input.svelte +16 -50
- package/dist/Input.svelte.d.ts +12 -74
- package/dist/Label.svelte +55 -161
- package/dist/Label.svelte.d.ts +16 -81
- package/dist/Link.svelte +9 -41
- package/dist/Link.svelte.d.ts +11 -64
- package/dist/List.svelte +35 -85
- package/dist/List.svelte.d.ts +19 -74
- package/dist/List.types.d.ts +3 -11
- package/dist/ListItem.svelte +27 -56
- package/dist/ListItem.svelte.d.ts +12 -66
- package/dist/Menu.svelte +18 -45
- package/dist/Menu.svelte.d.ts +13 -63
- package/dist/MenuBar.svelte +36 -78
- package/dist/MenuBar.svelte.d.ts +12 -57
- package/dist/MenuButton.svelte +56 -85
- package/dist/MenuButton.svelte.d.ts +19 -70
- package/dist/MenuItem.svelte +107 -151
- package/dist/MenuItem.svelte.d.ts +21 -82
- package/dist/MenuItem.types.d.ts +1 -9
- package/dist/MenuSeparator.svelte +9 -7
- package/dist/MenuSeparator.svelte.d.ts +6 -20
- package/dist/Popover.svelte +45 -64
- package/dist/Popover.svelte.d.ts +14 -58
- package/dist/Progress.constants.d.ts +1 -1
- package/dist/Progress.constants.js +1 -1
- package/dist/Progress.svelte +24 -71
- package/dist/Progress.svelte.d.ts +11 -60
- package/dist/Progress.types.d.ts +3 -3
- package/dist/Radio.svelte +19 -92
- package/dist/Radio.svelte.d.ts +11 -63
- package/dist/Select.svelte +55 -94
- package/dist/Select.svelte.d.ts +19 -82
- package/dist/Slider.svelte +41 -98
- package/dist/Slider.svelte.d.ts +18 -65
- package/dist/Switch.svelte +29 -78
- package/dist/Switch.svelte.d.ts +20 -73
- package/dist/Tab.svelte +23 -66
- package/dist/Tab.svelte.d.ts +11 -70
- package/dist/TabList.svelte +50 -76
- package/dist/TabList.svelte.d.ts +17 -69
- package/dist/TabList.types.d.ts +3 -11
- package/dist/TextArea.svelte +17 -59
- package/dist/TextArea.svelte.d.ts +18 -68
- package/dist/Tooltip.svelte +23 -66
- package/dist/Tooltip.svelte.d.ts +9 -69
- package/dist/Tree.svelte +32 -83
- package/dist/Tree.svelte.d.ts +14 -66
- package/dist/Tree.types.d.ts +3 -11
- package/dist/TreeChevron.svelte +10 -49
- package/dist/TreeChevron.svelte.d.ts +8 -52
- package/dist/TreeItem.svelte +105 -159
- package/dist/TreeItem.svelte.d.ts +21 -100
- package/dist/TreeItem.types.d.ts +2 -12
- package/dist/actions/clickOutside.d.ts +1 -0
- package/dist/actions/clickOutside.js +1 -0
- package/dist/actions/extraClass.d.ts +8 -0
- package/dist/actions/extraClass.js +14 -0
- package/dist/index.d.ts +4 -12
- package/dist/index.js +3 -9
- package/package.json +20 -22
- package/dist/Button.constants.d.ts +0 -2
- package/dist/Button.constants.js +0 -2
- package/dist/Button.types.d.ts +0 -6
- package/dist/ColorPicker.constants.d.ts +0 -1
- package/dist/ColorPicker.constants.js +0 -1
- package/dist/ColorPicker.svelte +0 -287
- package/dist/ColorPicker.svelte.d.ts +0 -52
- package/dist/ColorPicker.types.d.ts +0 -4
- package/dist/ColorPicker.types.js +0 -1
- package/dist/HexColorSliders.svelte +0 -103
- package/dist/HexColorSliders.svelte.d.ts +0 -51
- package/dist/HslColorSliders.svelte +0 -128
- package/dist/HslColorSliders.svelte.d.ts +0 -51
- package/dist/Label.types.d.ts +0 -6
- package/dist/Label.types.js +0 -1
- package/dist/MenuItemDisplay.svelte +0 -32
- package/dist/MenuItemDisplay.svelte.d.ts +0 -39
- package/dist/RgbColorSliders.svelte +0 -93
- package/dist/RgbColorSliders.svelte.d.ts +0 -24
- package/dist/TreeItemDisplay.svelte +0 -74
- package/dist/TreeItemDisplay.svelte.d.ts +0 -73
- package/dist/css/Button.base.css +0 -54
- package/dist/css/Button.colorful.css +0 -17
- package/dist/css/Button.css +0 -8
- package/dist/css/Button.disabled.css +0 -22
- package/dist/css/Button.secondary.colorful.css +0 -15
- package/dist/css/Button.secondary.css +0 -11
- package/dist/css/Button.shapes.css +0 -14
- package/dist/css/Button.tool.colorful.css +0 -13
- package/dist/css/Button.tool.css +0 -18
- package/dist/css/Callout.base.css +0 -55
- package/dist/css/Callout.colorful.css +0 -5
- package/dist/css/Callout.css +0 -2
- package/dist/css/Checkbox.base.css +0 -121
- package/dist/css/Checkbox.colorful.css +0 -17
- package/dist/css/Checkbox.css +0 -3
- package/dist/css/Checkbox.disabled.css +0 -28
- package/dist/css/ColorPicker.base.css +0 -23
- package/dist/css/ColorPicker.css +0 -1
- package/dist/css/Dialog.base.css +0 -114
- package/dist/css/Dialog.css +0 -1
- package/dist/css/Dropdown.base.css +0 -105
- package/dist/css/Dropdown.colorful.css +0 -23
- package/dist/css/Dropdown.composed.css +0 -11
- package/dist/css/Dropdown.css +0 -4
- package/dist/css/Dropdown.disabled.css +0 -32
- package/dist/css/HexColorSliders.base.css +0 -87
- package/dist/css/HexColorSliders.css +0 -1
- package/dist/css/HslColorSliders.base.css +0 -105
- package/dist/css/HslColorSliders.css +0 -1
- package/dist/css/Input.base.css +0 -72
- package/dist/css/Input.colorful.css +0 -22
- package/dist/css/Input.composed.css +0 -12
- package/dist/css/Input.css +0 -4
- package/dist/css/Input.disabled.css +0 -24
- package/dist/css/Label.base.css +0 -114
- package/dist/css/Label.boxed.colorful.css +0 -21
- package/dist/css/Label.boxed.css +0 -31
- package/dist/css/Label.colorful.css +0 -3
- package/dist/css/Label.css +0 -5
- package/dist/css/Label.disabled.css +0 -9
- package/dist/css/Link.base.css +0 -43
- package/dist/css/Link.colorful.css +0 -15
- package/dist/css/Link.css +0 -11
- package/dist/css/Link.disabled.css +0 -10
- package/dist/css/Link.ghost.colorful.css +0 -7
- package/dist/css/Link.ghost.css +0 -11
- package/dist/css/Link.text-underline.css +0 -8
- package/dist/css/Link.text-underline.ghost.css +0 -13
- package/dist/css/Link.undecorated.colorful.css +0 -8
- package/dist/css/Link.undecorated.css +0 -8
- package/dist/css/Link.undecorated.ghost.css +0 -8
- package/dist/css/Link.undecorated.underline.css +0 -8
- package/dist/css/List.base.css +0 -84
- package/dist/css/List.composed.css +0 -8
- package/dist/css/List.css +0 -3
- package/dist/css/List.disabled.css +0 -7
- package/dist/css/ListItem.base.css +0 -33
- package/dist/css/ListItem.css +0 -2
- package/dist/css/ListItem.disabled.css +0 -28
- package/dist/css/Menu.base.css +0 -21
- package/dist/css/Menu.css +0 -1
- package/dist/css/MenuBar.base.css +0 -9
- package/dist/css/MenuBar.css +0 -1
- package/dist/css/MenuButton.base.css +0 -13
- package/dist/css/MenuButton.css +0 -1
- package/dist/css/MenuItem.base.css +0 -48
- package/dist/css/MenuItem.css +0 -1
- package/dist/css/MenuItemDisplay.base.css +0 -79
- package/dist/css/MenuItemDisplay.css +0 -2
- package/dist/css/MenuItemDisplay.disabled.css +0 -28
- package/dist/css/MenuSeparator.base.css +0 -5
- package/dist/css/MenuSeparator.css +0 -1
- package/dist/css/Popover.css +0 -21
- package/dist/css/Progress.base.css +0 -85
- package/dist/css/Progress.css +0 -2
- package/dist/css/Progress.disabled.css +0 -17
- package/dist/css/Radio.base.css +0 -109
- package/dist/css/Radio.colorful.css +0 -18
- package/dist/css/Radio.css +0 -3
- package/dist/css/Radio.disabled.css +0 -28
- package/dist/css/RgbColorSliders.base.css +0 -94
- package/dist/css/RgbColorSliders.css +0 -1
- package/dist/css/Select.base.css +0 -101
- package/dist/css/Select.colorful.css +0 -24
- package/dist/css/Select.composed.css +0 -12
- package/dist/css/Select.css +0 -4
- package/dist/css/Select.disabled.css +0 -28
- package/dist/css/Slider.base.css +0 -152
- package/dist/css/Slider.colorful.css +0 -11
- package/dist/css/Slider.composed.css +0 -8
- package/dist/css/Slider.css +0 -4
- package/dist/css/Slider.disabled.css +0 -30
- package/dist/css/Switch.base.css +0 -175
- package/dist/css/Switch.colorful.css +0 -45
- package/dist/css/Switch.css +0 -3
- package/dist/css/Switch.disabled.css +0 -30
- package/dist/css/Tab.base.css +0 -96
- package/dist/css/Tab.colorful.css +0 -13
- package/dist/css/Tab.css +0 -3
- package/dist/css/Tab.disabled.css +0 -36
- package/dist/css/TabList.base.css +0 -34
- package/dist/css/TabList.css +0 -1
- package/dist/css/TextArea.base.css +0 -62
- package/dist/css/TextArea.colorful.css +0 -17
- package/dist/css/TextArea.composed.css +0 -8
- package/dist/css/TextArea.css +0 -4
- package/dist/css/TextArea.disabled.css +0 -28
- package/dist/css/Tooltip.base.css +0 -6
- package/dist/css/Tooltip.css +0 -1
- package/dist/css/Tree.base.css +0 -49
- package/dist/css/Tree.composed.css +0 -8
- package/dist/css/Tree.css +0 -3
- package/dist/css/Tree.disabled.css +0 -27
- package/dist/css/TreeChevron.base.css +0 -86
- package/dist/css/TreeChevron.css +0 -1
- package/dist/css/TreeItem.base.css +0 -3
- package/dist/css/TreeItem.css +0 -1
- package/dist/css/TreeItemDisplay.base.css +0 -48
- package/dist/css/TreeItemDisplay.colorful.css +0 -9
- package/dist/css/TreeItemDisplay.css +0 -3
- package/dist/css/TreeItemDisplay.disabled.css +0 -28
- package/dist/css/dark-mode.css +0 -134
- package/dist/css/light-mode.css +0 -134
- package/dist/css/sterling.css +0 -37
- package/dist/package.json +0 -108
- /package/dist/{Button.types.js → Callout.types.js} +0 -0
package/dist/Label.svelte
CHANGED
|
@@ -1,101 +1,34 @@
|
|
|
1
|
-
<
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import {} from 'svelte';
|
|
2
4
|
import Tooltip from './Tooltip.svelte';
|
|
3
5
|
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
4
|
-
|
|
5
|
-
let htmlFor = undefined;
|
|
6
|
-
export { htmlFor as for };
|
|
7
|
-
/**
|
|
8
|
-
* If true, clicking the label invokes a click on the content.
|
|
9
|
-
* Needed only when the label is not associated with the content through containment or the `for`/`id` relationship.
|
|
10
|
-
*/
|
|
11
|
-
export let forwardClick = false;
|
|
12
|
-
/** The text to display in the label. Not used if the text slot is filled. */
|
|
13
|
-
export let text = undefined;
|
|
14
|
-
/** The status message to display. */
|
|
15
|
-
export let message = undefined;
|
|
16
|
-
/** When true, indicates a value is required. */
|
|
17
|
-
export let required = false;
|
|
18
|
-
/** The reason the value is required. */
|
|
19
|
-
export let requiredReason = 'required';
|
|
20
|
-
/** The status of the label. */
|
|
21
|
-
export let status = 'none';
|
|
22
|
-
/** Additional class names to apply. */
|
|
23
|
-
export let variant = '';
|
|
24
|
-
/** When true, the label appears above the content. */
|
|
25
|
-
export let vertical = true;
|
|
6
|
+
let { children, class: _class, for: _for, forwardClick = false, message, required, requiredIndicator = '*', requiredReason, text, ...rest } = $props();
|
|
26
7
|
// ----- State ----- //
|
|
27
|
-
let labelRef;
|
|
28
|
-
let
|
|
29
|
-
let
|
|
8
|
+
let labelRef = $state(null);
|
|
9
|
+
let targetRef = $state(null);
|
|
10
|
+
let requiredRef = $state(null);
|
|
30
11
|
const findTarget = () => {
|
|
31
12
|
let candidate = null;
|
|
32
|
-
if (
|
|
33
|
-
candidate = labelRef?.querySelector(`[id="${
|
|
13
|
+
if (_for) {
|
|
14
|
+
candidate = labelRef?.querySelector(`[id="${_for}"]`) || null;
|
|
34
15
|
}
|
|
35
16
|
if (!candidate) {
|
|
36
|
-
candidate =
|
|
37
|
-
'
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
17
|
+
candidate =
|
|
18
|
+
labelRef?.querySelector('a[href], ' +
|
|
19
|
+
'audio[controls], ' +
|
|
20
|
+
'button, ' +
|
|
21
|
+
'details, ' +
|
|
22
|
+
'div[contenteditable], ' +
|
|
23
|
+
'form, ' +
|
|
24
|
+
'input, ' +
|
|
25
|
+
'select, ' +
|
|
26
|
+
'textarea, ' +
|
|
27
|
+
'video[controls], ' +
|
|
28
|
+
'[tabindex]:not([tabindex="-1"])') || null;
|
|
47
29
|
}
|
|
48
30
|
targetRef = candidate;
|
|
49
31
|
};
|
|
50
|
-
const isElementDisabled = (element) => {
|
|
51
|
-
if (element) {
|
|
52
|
-
return (element.getAttribute('aria-disabled') === 'true' ||
|
|
53
|
-
element?.matches(':disabled') ||
|
|
54
|
-
element?.disabled === true ||
|
|
55
|
-
element?.classList.contains('disabled'));
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
};
|
|
59
|
-
$: $$slots.default, labelRef, htmlFor, findTarget();
|
|
60
|
-
$: {
|
|
61
|
-
targetDisabled = isElementDisabled(targetRef);
|
|
62
|
-
}
|
|
63
|
-
const mutationCallback = (mutations) => {
|
|
64
|
-
let disabled = undefined;
|
|
65
|
-
for (let i = 0; i < mutations.length; i++) {
|
|
66
|
-
const mutation = mutations[i];
|
|
67
|
-
if (mutation.type === 'attributes') {
|
|
68
|
-
if (mutation.attributeName === 'aria-disabled' ||
|
|
69
|
-
mutation.attributeName === 'disabled' ||
|
|
70
|
-
mutation.attributeName === 'class') {
|
|
71
|
-
if (isElementDisabled(targetRef)) {
|
|
72
|
-
// a mutation caused the target to be disabled
|
|
73
|
-
disabled = true;
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
// a mutation caused the target to be enabled
|
|
77
|
-
disabled = false;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// if we found a mutation that changed disabled, then set targetDisabled
|
|
82
|
-
if (disabled !== undefined) {
|
|
83
|
-
targetDisabled = disabled;
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
let mutationObserver;
|
|
87
|
-
onMount(() => {
|
|
88
|
-
mutationObserver = new MutationObserver(mutationCallback);
|
|
89
|
-
return () => mutationObserver?.disconnect();
|
|
90
|
-
});
|
|
91
|
-
$: {
|
|
92
|
-
mutationObserver?.disconnect();
|
|
93
|
-
if (targetRef) {
|
|
94
|
-
mutationObserver?.observe(targetRef, {
|
|
95
|
-
attributes: true
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
32
|
// ----- Methods ----- //
|
|
100
33
|
export const click = () => {
|
|
101
34
|
labelRef?.click();
|
|
@@ -107,91 +40,52 @@ export const focus = (options) => {
|
|
|
107
40
|
labelRef?.focus(options);
|
|
108
41
|
};
|
|
109
42
|
// ----- Event Handlers ----- //
|
|
110
|
-
const onClick = () => {
|
|
43
|
+
const onClick = (event) => {
|
|
111
44
|
if (forwardClick) {
|
|
112
45
|
targetRef?.click();
|
|
113
46
|
}
|
|
47
|
+
rest.onclick?.(event);
|
|
114
48
|
};
|
|
115
49
|
</script>
|
|
116
50
|
|
|
117
|
-
|
|
51
|
+
{#snippet snippetOrText(item?: string | Snippet, _class?: string)}
|
|
52
|
+
{#if item}
|
|
53
|
+
{#if typeof item === 'string'}
|
|
54
|
+
<div class={_class}>{item}</div>
|
|
55
|
+
{:else}
|
|
56
|
+
<div class={_class}>
|
|
57
|
+
{@render item()}
|
|
58
|
+
</div>
|
|
59
|
+
{/if}
|
|
60
|
+
{/if}
|
|
61
|
+
{/snippet}
|
|
62
|
+
|
|
63
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
118
64
|
<label
|
|
119
65
|
bind:this={labelRef}
|
|
120
|
-
|
|
121
|
-
class={`sterling-label ${variant}`}
|
|
122
|
-
class:disabled={targetDisabled}
|
|
66
|
+
class={['sterling-label', _class].filter(Boolean).join(' ')}
|
|
123
67
|
class:using-keyboard={$usingKeyboard}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
on:click
|
|
128
|
-
on:click={onClick}
|
|
129
|
-
on:copy
|
|
130
|
-
on:cut
|
|
131
|
-
on:dblclick
|
|
132
|
-
on:dragend
|
|
133
|
-
on:dragenter
|
|
134
|
-
on:dragleave
|
|
135
|
-
on:dragover
|
|
136
|
-
on:dragstart
|
|
137
|
-
on:drop
|
|
138
|
-
on:focus
|
|
139
|
-
on:focusin
|
|
140
|
-
on:focusout
|
|
141
|
-
on:keydown
|
|
142
|
-
on:keypress
|
|
143
|
-
on:keyup
|
|
144
|
-
on:mousedown
|
|
145
|
-
on:mouseenter
|
|
146
|
-
on:mouseleave
|
|
147
|
-
on:mousemove
|
|
148
|
-
on:mouseover
|
|
149
|
-
on:mouseout
|
|
150
|
-
on:mouseup
|
|
151
|
-
on:scroll
|
|
152
|
-
on:wheel|passive
|
|
153
|
-
on:paste
|
|
154
|
-
{...$$restProps}
|
|
68
|
+
for={_for}
|
|
69
|
+
{...rest}
|
|
70
|
+
onclick={onClick}
|
|
155
71
|
>
|
|
156
|
-
{
|
|
157
|
-
|
|
158
|
-
name="text"
|
|
159
|
-
disabled={targetDisabled}
|
|
160
|
-
for={htmlFor}
|
|
161
|
-
{forwardClick}
|
|
162
|
-
{required}
|
|
163
|
-
{text}
|
|
164
|
-
{variant}
|
|
165
|
-
>
|
|
166
|
-
<div class="text">
|
|
167
|
-
{text}
|
|
168
|
-
</div>
|
|
169
|
-
</slot>
|
|
170
|
-
{/if}
|
|
171
|
-
{#if $$slots.default}
|
|
72
|
+
{@render snippetOrText(text, 'text')}
|
|
73
|
+
{#if children}
|
|
172
74
|
<div class="content">
|
|
173
|
-
|
|
75
|
+
{@render children()}
|
|
174
76
|
</div>
|
|
175
77
|
{/if}
|
|
176
|
-
{
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
>
|
|
185
|
-
{message}
|
|
186
|
-
</div>
|
|
187
|
-
</slot>
|
|
188
|
-
{/if}
|
|
189
|
-
{#if required}
|
|
190
|
-
<slot name="required" {requiredReason} {variant}>
|
|
191
|
-
<Tooltip showOn="hover">
|
|
192
|
-
<span class="required-reason" slot="tip">{requiredReason}</span>
|
|
193
|
-
<div class="required">*</div>
|
|
78
|
+
{@render snippetOrText(message, 'message')}
|
|
79
|
+
<div class="required" bind:this={requiredRef}>
|
|
80
|
+
{#if required && requiredReason}
|
|
81
|
+
<Tooltip>
|
|
82
|
+
{@render snippetOrText(requiredIndicator, 'required')}
|
|
83
|
+
{#snippet tip()}
|
|
84
|
+
{@render snippetOrText(requiredReason, 'required-reason')}
|
|
85
|
+
{/snippet}
|
|
194
86
|
</Tooltip>
|
|
195
|
-
|
|
196
|
-
|
|
87
|
+
{:else if required}
|
|
88
|
+
{@render snippetOrText(requiredIndicator, 'required')}
|
|
89
|
+
{/if}
|
|
90
|
+
</div>
|
|
197
91
|
</label>
|
package/dist/Label.svelte.d.ts
CHANGED
|
@@ -1,82 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
requiredReason?: string | undefined;
|
|
11
|
-
status?: string | undefined;
|
|
12
|
-
variant?: string | undefined;
|
|
13
|
-
vertical?: boolean | undefined;
|
|
14
|
-
click?: (() => void) | undefined;
|
|
15
|
-
blur?: (() => void) | undefined;
|
|
16
|
-
focus?: ((options?: FocusOptions) => void) | undefined;
|
|
17
|
-
};
|
|
18
|
-
events: {
|
|
19
|
-
blur: FocusEvent;
|
|
20
|
-
click: MouseEvent;
|
|
21
|
-
copy: ClipboardEvent;
|
|
22
|
-
cut: ClipboardEvent;
|
|
23
|
-
dblclick: MouseEvent;
|
|
24
|
-
dragend: DragEvent;
|
|
25
|
-
dragenter: DragEvent;
|
|
26
|
-
dragleave: DragEvent;
|
|
27
|
-
dragover: DragEvent;
|
|
28
|
-
dragstart: DragEvent;
|
|
29
|
-
drop: DragEvent;
|
|
30
|
-
focus: FocusEvent;
|
|
31
|
-
focusin: FocusEvent;
|
|
32
|
-
focusout: FocusEvent;
|
|
33
|
-
keydown: KeyboardEvent;
|
|
34
|
-
keypress: KeyboardEvent;
|
|
35
|
-
keyup: KeyboardEvent;
|
|
36
|
-
mousedown: MouseEvent;
|
|
37
|
-
mouseenter: MouseEvent;
|
|
38
|
-
mouseleave: MouseEvent;
|
|
39
|
-
mousemove: MouseEvent;
|
|
40
|
-
mouseover: MouseEvent;
|
|
41
|
-
mouseout: MouseEvent;
|
|
42
|
-
mouseup: MouseEvent;
|
|
43
|
-
scroll: Event;
|
|
44
|
-
wheel: WheelEvent;
|
|
45
|
-
paste: ClipboardEvent;
|
|
46
|
-
} & {
|
|
47
|
-
[evt: string]: CustomEvent<any>;
|
|
48
|
-
};
|
|
49
|
-
slots: {
|
|
50
|
-
text: {
|
|
51
|
-
disabled: boolean;
|
|
52
|
-
for: string | undefined;
|
|
53
|
-
forwardClick: boolean;
|
|
54
|
-
required: boolean;
|
|
55
|
-
text: string | undefined;
|
|
56
|
-
variant: string;
|
|
57
|
-
};
|
|
58
|
-
default: {};
|
|
59
|
-
message: {
|
|
60
|
-
disabled: boolean;
|
|
61
|
-
message: string | undefined;
|
|
62
|
-
required: boolean;
|
|
63
|
-
status: string;
|
|
64
|
-
variant: string;
|
|
65
|
-
};
|
|
66
|
-
required: {
|
|
67
|
-
requiredReason: string;
|
|
68
|
-
variant: string;
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
exports?: undefined;
|
|
72
|
-
bindings?: undefined;
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLLabelAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLLabelAttributes & {
|
|
4
|
+
forwardClick?: boolean | null;
|
|
5
|
+
message?: string | Snippet;
|
|
6
|
+
required?: boolean | null;
|
|
7
|
+
requiredIndicator?: string | Snippet;
|
|
8
|
+
requiredReason?: string | Snippet;
|
|
9
|
+
text?: string | Snippet;
|
|
73
10
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
export {};
|
|
11
|
+
declare const Label: import("svelte").Component<Props, {
|
|
12
|
+
click: () => void;
|
|
13
|
+
blur: () => void;
|
|
14
|
+
focus: (options?: FocusOptions) => void;
|
|
15
|
+
}, "">;
|
|
16
|
+
type Label = ReturnType<typeof Label>;
|
|
17
|
+
export default Label;
|
package/dist/Link.svelte
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/** Additional class names to apply. */
|
|
5
|
-
export let variant = '';
|
|
6
|
-
// ----- State ----- //
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">let { children, class: _class, disabled, ...rest } = $props();
|
|
7
4
|
let linkRef;
|
|
8
|
-
// ----- Methods ----- //
|
|
9
5
|
export const blur = () => {
|
|
10
6
|
linkRef?.blur();
|
|
11
7
|
};
|
|
@@ -19,39 +15,11 @@ export const focus = (options) => {
|
|
|
19
15
|
|
|
20
16
|
<a
|
|
21
17
|
bind:this={linkRef}
|
|
22
|
-
class={
|
|
18
|
+
class={['sterling-link', _class].filter(Boolean).join(' ')}
|
|
23
19
|
class:disabled
|
|
24
|
-
{
|
|
25
|
-
on:blur
|
|
26
|
-
on:click
|
|
27
|
-
on:dblclick
|
|
28
|
-
on:dragend
|
|
29
|
-
on:dragenter
|
|
30
|
-
on:dragleave
|
|
31
|
-
on:dragover
|
|
32
|
-
on:dragstart
|
|
33
|
-
on:drop
|
|
34
|
-
on:focus
|
|
35
|
-
on:focusin
|
|
36
|
-
on:focusout
|
|
37
|
-
on:keydown
|
|
38
|
-
on:keypress
|
|
39
|
-
on:keyup
|
|
40
|
-
on:mousedown
|
|
41
|
-
on:mouseenter
|
|
42
|
-
on:mouseleave
|
|
43
|
-
on:mousemove
|
|
44
|
-
on:mouseover
|
|
45
|
-
on:mouseout
|
|
46
|
-
on:mouseup
|
|
47
|
-
on:pointercancel
|
|
48
|
-
on:pointerdown
|
|
49
|
-
on:pointerenter
|
|
50
|
-
on:pointerleave
|
|
51
|
-
on:pointermove
|
|
52
|
-
on:pointerover
|
|
53
|
-
on:pointerout
|
|
54
|
-
on:pointerup
|
|
55
|
-
on:wheel|passive
|
|
56
|
-
{...$$restProps}><slot {disabled} {href} {variant} /></a
|
|
20
|
+
{...rest}
|
|
57
21
|
>
|
|
22
|
+
{#if children}
|
|
23
|
+
{@render children()}
|
|
24
|
+
{/if}
|
|
25
|
+
</a>
|
package/dist/Link.svelte.d.ts
CHANGED
|
@@ -1,65 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
href: string;
|
|
6
|
-
disabled?: boolean | undefined;
|
|
7
|
-
variant?: string | undefined;
|
|
8
|
-
blur?: (() => void) | undefined;
|
|
9
|
-
click?: (() => void) | undefined;
|
|
10
|
-
focus?: ((options?: FocusOptions) => void) | undefined;
|
|
11
|
-
};
|
|
12
|
-
events: {
|
|
13
|
-
blur: FocusEvent;
|
|
14
|
-
click: MouseEvent;
|
|
15
|
-
dblclick: MouseEvent;
|
|
16
|
-
dragend: DragEvent;
|
|
17
|
-
dragenter: DragEvent;
|
|
18
|
-
dragleave: DragEvent;
|
|
19
|
-
dragover: DragEvent;
|
|
20
|
-
dragstart: DragEvent;
|
|
21
|
-
drop: DragEvent;
|
|
22
|
-
focus: FocusEvent;
|
|
23
|
-
focusin: FocusEvent;
|
|
24
|
-
focusout: FocusEvent;
|
|
25
|
-
keydown: KeyboardEvent;
|
|
26
|
-
keypress: KeyboardEvent;
|
|
27
|
-
keyup: KeyboardEvent;
|
|
28
|
-
mousedown: MouseEvent;
|
|
29
|
-
mouseenter: MouseEvent;
|
|
30
|
-
mouseleave: MouseEvent;
|
|
31
|
-
mousemove: MouseEvent;
|
|
32
|
-
mouseover: MouseEvent;
|
|
33
|
-
mouseout: MouseEvent;
|
|
34
|
-
mouseup: MouseEvent;
|
|
35
|
-
pointercancel: PointerEvent;
|
|
36
|
-
pointerdown: PointerEvent;
|
|
37
|
-
pointerenter: PointerEvent;
|
|
38
|
-
pointerleave: PointerEvent;
|
|
39
|
-
pointermove: PointerEvent;
|
|
40
|
-
pointerover: PointerEvent;
|
|
41
|
-
pointerout: PointerEvent;
|
|
42
|
-
pointerup: PointerEvent;
|
|
43
|
-
wheel: WheelEvent;
|
|
44
|
-
} & {
|
|
45
|
-
[evt: string]: CustomEvent<any>;
|
|
46
|
-
};
|
|
47
|
-
slots: {
|
|
48
|
-
default: {
|
|
49
|
-
disabled: boolean;
|
|
50
|
-
href: string;
|
|
51
|
-
variant: string;
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
exports?: undefined;
|
|
55
|
-
bindings?: undefined;
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLAnchorAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLAnchorAttributes & {
|
|
4
|
+
disabled?: boolean | null;
|
|
56
5
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
export {};
|
|
6
|
+
declare const Link: import("svelte").Component<Props, {
|
|
7
|
+
blur: () => void;
|
|
8
|
+
click: () => void;
|
|
9
|
+
focus: (options?: FocusOptions) => void;
|
|
10
|
+
}, "">;
|
|
11
|
+
type Link = ReturnType<typeof Link>;
|
|
12
|
+
export default Link;
|
package/dist/List.svelte
CHANGED
|
@@ -1,43 +1,26 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { setContext } from 'svelte';
|
|
3
4
|
import { LIST_CONTEXT_KEY } from './List.constants';
|
|
4
5
|
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
5
|
-
|
|
6
|
-
/** If the list and all its items are disabled. */
|
|
7
|
-
export let disabled = false;
|
|
8
|
-
/** When true, items are arranged horizontally. */
|
|
9
|
-
export let horizontal = false;
|
|
10
|
-
/** The value of the currently selected item. */
|
|
11
|
-
export let selectedValue = undefined;
|
|
12
|
-
/** Additional class names to apply. */
|
|
13
|
-
export let variant = '';
|
|
14
|
-
// ----- State ----- //
|
|
6
|
+
let { children, class: _class, disabled = false, horizontal = false, selectedValue = $bindable(), onSelect, ...rest } = $props();
|
|
15
7
|
let listRef;
|
|
16
8
|
let lastSelectedItemRef;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// ----- Events ----- //
|
|
33
|
-
const dispatch = createEventDispatcher();
|
|
34
|
-
const raiseSelect = (value) => {
|
|
35
|
-
dispatch('select', { value });
|
|
36
|
-
};
|
|
37
|
-
$: {
|
|
38
|
-
raiseSelect(selectedValue);
|
|
39
|
-
}
|
|
40
|
-
// ----- Methods ----- //
|
|
9
|
+
let listContext = $state({
|
|
10
|
+
disabled,
|
|
11
|
+
selectedValue,
|
|
12
|
+
horizontal
|
|
13
|
+
});
|
|
14
|
+
$effect(() => {
|
|
15
|
+
listContext.disabled = disabled;
|
|
16
|
+
});
|
|
17
|
+
$effect(() => {
|
|
18
|
+
listContext.horizontal = horizontal;
|
|
19
|
+
});
|
|
20
|
+
$effect(() => {
|
|
21
|
+
listContext.selectedValue = selectedValue;
|
|
22
|
+
});
|
|
23
|
+
setContext(LIST_CONTEXT_KEY, listContext);
|
|
41
24
|
export const blur = () => {
|
|
42
25
|
listRef?.blur();
|
|
43
26
|
};
|
|
@@ -51,8 +34,9 @@ export const scrollToSelectedItem = () => {
|
|
|
51
34
|
const element = getSelectedItemElement();
|
|
52
35
|
element?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
53
36
|
};
|
|
54
|
-
|
|
55
|
-
|
|
37
|
+
$effect(() => {
|
|
38
|
+
onSelect?.(selectedValue);
|
|
39
|
+
});
|
|
56
40
|
const isElementListItem = (candidate) => {
|
|
57
41
|
return (candidate &&
|
|
58
42
|
candidate.getAttribute('data-value') !== null &&
|
|
@@ -70,7 +54,7 @@ const getSelectedItemElement = () => {
|
|
|
70
54
|
}
|
|
71
55
|
};
|
|
72
56
|
const selectItem = (value, element) => {
|
|
73
|
-
|
|
57
|
+
selectedValue = value;
|
|
74
58
|
lastSelectedItemRef = element;
|
|
75
59
|
element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
76
60
|
};
|
|
@@ -124,7 +108,6 @@ export const selectLastItem = () => {
|
|
|
124
108
|
}
|
|
125
109
|
return false;
|
|
126
110
|
};
|
|
127
|
-
// ----- Event Handlers ----- //
|
|
128
111
|
const onClick = (event) => {
|
|
129
112
|
if (!disabled) {
|
|
130
113
|
let candidate = event.target;
|
|
@@ -137,6 +120,7 @@ const onClick = (event) => {
|
|
|
137
120
|
selectItem(candidateValue, candidate);
|
|
138
121
|
}
|
|
139
122
|
}
|
|
123
|
+
rest.onclick?.(event);
|
|
140
124
|
};
|
|
141
125
|
const onKeydown = (event) => {
|
|
142
126
|
if (!disabled && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
|
|
@@ -189,65 +173,31 @@ const onKeydown = (event) => {
|
|
|
189
173
|
return false;
|
|
190
174
|
}
|
|
191
175
|
}
|
|
176
|
+
rest.onkeydown?.(event);
|
|
192
177
|
};
|
|
193
|
-
// ----- Set Context ----- //
|
|
194
|
-
setContext(LIST_CONTEXT_KEY, {
|
|
195
|
-
disabled: disabledStore,
|
|
196
|
-
selectedValue: selectedValueStore,
|
|
197
|
-
horizontal: horizontalStore
|
|
198
|
-
});
|
|
199
178
|
</script>
|
|
200
179
|
|
|
201
|
-
<!--
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
-->
|
|
205
|
-
<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
|
|
206
|
-
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
|
207
|
-
<!-- svelte-ignore a11y-role-supports-aria-props -->
|
|
180
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
181
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
182
|
+
<!-- svelte-ignore a11y_role_supports_aria_props -->
|
|
208
183
|
<div
|
|
209
184
|
aria-activedescendant={selectedValue}
|
|
210
185
|
aria-disabled={disabled}
|
|
211
186
|
aria-orientation={horizontal ? 'horizontal' : 'vertical'}
|
|
212
187
|
bind:this={listRef}
|
|
213
|
-
class={
|
|
188
|
+
class={['sterling-list', _class].filter(Boolean).join(' ')}
|
|
214
189
|
class:disabled
|
|
215
190
|
class:horizontal
|
|
216
191
|
class:using-keyboard={$usingKeyboard}
|
|
217
192
|
role="list"
|
|
218
193
|
tabindex={0}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
on:copy
|
|
223
|
-
on:cut
|
|
224
|
-
on:dblclick
|
|
225
|
-
on:dragend
|
|
226
|
-
on:dragenter
|
|
227
|
-
on:dragleave
|
|
228
|
-
on:dragover
|
|
229
|
-
on:dragstart
|
|
230
|
-
on:drop
|
|
231
|
-
on:focus
|
|
232
|
-
on:focusin
|
|
233
|
-
on:focusout
|
|
234
|
-
on:keydown
|
|
235
|
-
on:keydown={onKeydown}
|
|
236
|
-
on:keypress
|
|
237
|
-
on:keyup
|
|
238
|
-
on:mousedown
|
|
239
|
-
on:mouseenter
|
|
240
|
-
on:mouseleave
|
|
241
|
-
on:mousemove
|
|
242
|
-
on:mouseover
|
|
243
|
-
on:mouseout
|
|
244
|
-
on:mouseup
|
|
245
|
-
on:scroll
|
|
246
|
-
on:wheel|passive
|
|
247
|
-
on:paste
|
|
248
|
-
{...$$restProps}
|
|
194
|
+
{...rest}
|
|
195
|
+
onclick={onClick}
|
|
196
|
+
onkeydown={onKeydown}
|
|
249
197
|
>
|
|
250
198
|
<div class="container">
|
|
251
|
-
|
|
199
|
+
{#if children}
|
|
200
|
+
{@render children()}
|
|
201
|
+
{/if}
|
|
252
202
|
</div>
|
|
253
203
|
</div>
|