@geoffcox/sterling-svelte 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/Button.svelte +18 -14
- package/dist/Button.svelte.d.ts +0 -1
- package/dist/Callout.svelte +162 -96
- package/dist/Callout.svelte.d.ts +1 -2
- package/dist/Checkbox.svelte +34 -15
- package/dist/Checkbox.svelte.d.ts +0 -1
- package/dist/Dialog.svelte +121 -71
- package/dist/Dialog.svelte.d.ts +1 -1
- package/dist/Dropdown.svelte +106 -56
- package/dist/Dropdown.svelte.d.ts +8 -3
- package/dist/Input.svelte +54 -29
- package/dist/Input.svelte.d.ts +1 -2
- package/dist/Label.svelte +99 -55
- package/dist/Label.svelte.d.ts +4 -4
- package/dist/Link.svelte +20 -14
- package/dist/Link.svelte.d.ts +0 -1
- package/dist/List.svelte +181 -126
- package/dist/List.svelte.d.ts +0 -1
- package/dist/ListItem.svelte +36 -21
- package/dist/ListItem.svelte.d.ts +0 -1
- package/dist/Menu.svelte +67 -45
- package/dist/Menu.svelte.d.ts +0 -1
- package/dist/MenuBar.svelte +96 -65
- package/dist/MenuBar.svelte.d.ts +0 -1
- package/dist/MenuButton.svelte +102 -62
- package/dist/MenuButton.svelte.d.ts +1 -1
- package/dist/MenuItem.svelte +332 -243
- package/dist/MenuItem.svelte.d.ts +3 -3
- package/dist/MenuSeparator.svelte +7 -7
- package/dist/MenuSeparator.svelte.d.ts +0 -1
- package/dist/Pagination.svelte +267 -0
- package/dist/Pagination.svelte.d.ts +4 -0
- package/dist/Pagination.types.d.ts +24 -0
- package/dist/Pagination.types.js +1 -0
- package/dist/Popover.svelte +114 -60
- package/dist/Popover.svelte.d.ts +1 -2
- package/dist/Portal.types.d.ts +1 -4
- package/dist/Progress.svelte +40 -15
- package/dist/Progress.svelte.d.ts +0 -1
- package/dist/Radio.svelte +37 -25
- package/dist/Radio.svelte.d.ts +0 -1
- package/dist/Select.svelte +191 -125
- package/dist/Select.svelte.d.ts +8 -2
- package/dist/Slider.svelte +120 -71
- package/dist/Slider.svelte.d.ts +0 -1
- package/dist/Switch.svelte +51 -20
- package/dist/Switch.svelte.d.ts +1 -1
- package/dist/Tab.svelte +39 -24
- package/dist/Tab.svelte.d.ts +0 -1
- package/dist/TabList.svelte +176 -125
- package/dist/TabList.svelte.d.ts +0 -1
- package/dist/TextArea.svelte +83 -41
- package/dist/TextArea.svelte.d.ts +2 -3
- package/dist/Tooltip.svelte +68 -36
- package/dist/Tree.svelte +52 -24
- package/dist/Tree.svelte.d.ts +0 -1
- package/dist/TreeChevron.svelte +24 -12
- package/dist/TreeChevron.svelte.d.ts +0 -1
- package/dist/TreeItem.svelte +292 -225
- package/dist/TreeItem.svelte.d.ts +1 -1
- package/dist/actions/extraClass.d.ts +1 -0
- package/dist/actions/extraClass.js +1 -0
- package/dist/idGenerator.d.ts +1 -0
- package/dist/idGenerator.js +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/mediaQueries/prefersColorSchemeDark.d.ts +0 -1
- package/dist/mediaQueries/prefersReducedMotion.d.ts +0 -1
- package/dist/mediaQueries/usingKeyboard.d.ts +0 -1
- package/package.json +21 -22
package/dist/TextArea.svelte
CHANGED
|
@@ -1,67 +1,109 @@
|
|
|
1
1
|
<svelte:options runes={true} />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import { tick } from 'svelte';
|
|
5
|
+
import type { FormEventHandler, HTMLTextareaAttributes } from 'svelte/elements';
|
|
6
|
+
import type { TextAreaResize } from './TextArea.types';
|
|
7
|
+
|
|
8
|
+
type Props = HTMLTextareaAttributes & {
|
|
9
|
+
autoHeight?: boolean | null | undefined;
|
|
10
|
+
disabled?: boolean | null | undefined;
|
|
11
|
+
value?: string;
|
|
12
|
+
resize?: TextAreaResize;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
class: _class,
|
|
17
|
+
disabled = false,
|
|
18
|
+
value = $bindable(''),
|
|
19
|
+
autoHeight = false,
|
|
20
|
+
resize = $bindable('none'),
|
|
21
|
+
style,
|
|
22
|
+
...rest
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
let textAreaRef: HTMLTextAreaElement;
|
|
26
|
+
|
|
27
|
+
const correctResize = async () => {
|
|
7
28
|
await tick();
|
|
8
29
|
setTimeout(() => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.warn('The resize property cannot be set to "vertical" when autoHeight is true. The resize property will be set to "none".');
|
|
16
|
-
resize = 'none';
|
|
17
|
-
}
|
|
30
|
+
if (autoHeight) {
|
|
31
|
+
if (resize === 'both') {
|
|
32
|
+
console.warn(
|
|
33
|
+
'The resize property cannot be set to "both" when autoHeight is true. The resize property will be set to "horizontal".'
|
|
34
|
+
);
|
|
35
|
+
resize = 'horizontal';
|
|
18
36
|
}
|
|
37
|
+
if (resize === 'vertical') {
|
|
38
|
+
console.warn(
|
|
39
|
+
'The resize property cannot be set to "vertical" when autoHeight is true. The resize property will be set to "none".'
|
|
40
|
+
);
|
|
41
|
+
resize = 'none';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
19
44
|
}, 0);
|
|
20
|
-
};
|
|
21
|
-
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const autoSetHeight = () => {
|
|
22
48
|
if (autoHeight && textAreaRef) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
49
|
+
// the style must be directly set to avoid re-rendering looping latency
|
|
50
|
+
// setting to auto for a moment allows the textarea to shrink
|
|
51
|
+
textAreaRef.style.height = 'auto';
|
|
52
|
+
textAreaRef.style.height = `${textAreaRef.scrollHeight}px`;
|
|
27
53
|
}
|
|
28
|
-
};
|
|
29
|
-
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
$effect(() => {
|
|
30
57
|
autoHeight;
|
|
31
58
|
resize;
|
|
32
59
|
correctResize();
|
|
33
60
|
autoSetHeight();
|
|
34
|
-
});
|
|
35
|
-
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const onInput: FormEventHandler<HTMLTextAreaElement> = (event) => {
|
|
36
64
|
autoSetHeight();
|
|
37
65
|
rest.oninput?.(event);
|
|
38
|
-
};
|
|
39
|
-
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const blur = () => {
|
|
40
69
|
textAreaRef?.blur();
|
|
41
|
-
};
|
|
42
|
-
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const click = () => {
|
|
43
73
|
textAreaRef?.click();
|
|
44
|
-
};
|
|
45
|
-
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const focus = (options?: FocusOptions) => {
|
|
46
77
|
textAreaRef?.focus();
|
|
47
|
-
};
|
|
48
|
-
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const select = () => {
|
|
49
81
|
textAreaRef?.select();
|
|
50
|
-
};
|
|
51
|
-
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const setSelectionRange = (
|
|
85
|
+
start: number | null,
|
|
86
|
+
end: number | null,
|
|
87
|
+
direction?: 'forward' | 'backward' | 'none'
|
|
88
|
+
) => {
|
|
52
89
|
textAreaRef?.setSelectionRange(start, end, direction);
|
|
53
|
-
};
|
|
54
|
-
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const setRangeText = (
|
|
93
|
+
replacement: string,
|
|
94
|
+
start?: number,
|
|
95
|
+
end?: number,
|
|
96
|
+
selectionMode?: SelectionMode
|
|
97
|
+
) => {
|
|
55
98
|
if (start && end) {
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
textAreaRef?.setRangeText(replacement);
|
|
99
|
+
textAreaRef?.setRangeText(replacement, start, end, selectionMode);
|
|
100
|
+
} else {
|
|
101
|
+
textAreaRef?.setRangeText(replacement);
|
|
60
102
|
}
|
|
61
|
-
};
|
|
103
|
+
};
|
|
62
104
|
</script>
|
|
63
105
|
|
|
64
|
-
<div class={
|
|
106
|
+
<div class={['sterling-text-area', _class]} class:disabled>
|
|
65
107
|
<textarea
|
|
66
108
|
bind:this={textAreaRef}
|
|
67
109
|
bind:value
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/// <reference types="svelte" />
|
|
2
|
-
import type { TextAreaResize } from './TextArea.types';
|
|
3
1
|
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
2
|
+
import type { TextAreaResize } from './TextArea.types';
|
|
4
3
|
type Props = HTMLTextareaAttributes & {
|
|
5
4
|
autoHeight?: boolean | null | undefined;
|
|
6
5
|
disabled?: boolean | null | undefined;
|
|
@@ -12,7 +11,7 @@ declare const TextArea: import("svelte").Component<Props, {
|
|
|
12
11
|
click: () => void;
|
|
13
12
|
focus: (options?: FocusOptions) => void;
|
|
14
13
|
select: () => void;
|
|
15
|
-
setSelectionRange: (start: number | null, end: number | null, direction?:
|
|
14
|
+
setSelectionRange: (start: number | null, end: number | null, direction?: "forward" | "backward" | "none") => void;
|
|
16
15
|
setRangeText: (replacement: string, start?: number, end?: number, selectionMode?: SelectionMode) => void;
|
|
17
16
|
}, "value" | "resize">;
|
|
18
17
|
type TextArea = ReturnType<typeof TextArea>;
|
package/dist/Tooltip.svelte
CHANGED
|
@@ -1,58 +1,90 @@
|
|
|
1
1
|
<svelte:options runes={true} />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import { onMount, type Snippet } from 'svelte';
|
|
5
|
+
import Callout from './Callout.svelte';
|
|
6
|
+
import type { CalloutProps } from './Callout.types';
|
|
7
|
+
|
|
8
|
+
type Props = Omit<CalloutProps, 'reference'> & {
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
hoverDelayMilliseconds?: number;
|
|
11
|
+
tip?: string | Snippet;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
children,
|
|
16
|
+
class: _class,
|
|
17
|
+
disabled = false,
|
|
18
|
+
hoverDelayMilliseconds = 1000,
|
|
19
|
+
open = $bindable(false),
|
|
20
|
+
tip,
|
|
21
|
+
...rest
|
|
22
|
+
}: Props = $props();
|
|
23
|
+
|
|
24
|
+
let originRef: HTMLDivElement | undefined = $state();
|
|
25
|
+
|
|
26
|
+
let reference = $derived(
|
|
27
|
+
!!children ? (originRef?.previousElementSibling as HTMLElement) : undefined
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const show = () => {
|
|
10
31
|
if (!disabled) {
|
|
11
|
-
|
|
32
|
+
open = true;
|
|
12
33
|
}
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const hide = () => (open = false);
|
|
37
|
+
|
|
38
|
+
const delayShow = () => {
|
|
16
39
|
hoverDelayMilliseconds === 0
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
40
|
+
? show()
|
|
41
|
+
: setTimeout(() => {
|
|
42
|
+
show();
|
|
20
43
|
}, hoverDelayMilliseconds);
|
|
21
|
-
};
|
|
22
|
-
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
$effect(() => {
|
|
23
47
|
if (disabled) {
|
|
24
|
-
|
|
48
|
+
hide();
|
|
25
49
|
}
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// ----- Event Listeners ----- //
|
|
53
|
+
|
|
54
|
+
let cleanupAutoShowUpdate = () => {};
|
|
55
|
+
|
|
56
|
+
const autoShowUpdate = () => {
|
|
30
57
|
cleanupAutoShowUpdate();
|
|
31
|
-
cleanupAutoShowUpdate = () => {
|
|
58
|
+
cleanupAutoShowUpdate = () => {};
|
|
59
|
+
|
|
32
60
|
const element = reference;
|
|
33
61
|
open = false;
|
|
62
|
+
|
|
34
63
|
if (element) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
64
|
+
element.addEventListener('mouseenter', delayShow);
|
|
65
|
+
element.addEventListener('mouseleave', hide);
|
|
66
|
+
cleanupAutoShowUpdate = () => {
|
|
67
|
+
element.removeEventListener('mouseenter', delayShow);
|
|
68
|
+
element.removeEventListener('mouseleave', hide);
|
|
69
|
+
};
|
|
41
70
|
}
|
|
42
|
-
};
|
|
43
|
-
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
$effect(() => {
|
|
44
74
|
reference;
|
|
45
75
|
autoShowUpdate();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// ----- EventHandlers ----- //
|
|
79
|
+
|
|
80
|
+
onMount(() => {
|
|
49
81
|
autoShowUpdate();
|
|
50
|
-
});
|
|
82
|
+
});
|
|
51
83
|
</script>
|
|
52
84
|
|
|
53
85
|
{@render children?.()}
|
|
54
|
-
<div class=
|
|
55
|
-
<Callout class={_class} {open} {reference} {...rest}>
|
|
86
|
+
<div class={['sterling-tooltip-origin', _class]} bind:this={originRef}></div>
|
|
87
|
+
<Callout class={['sterling-tooltip-callout', _class]} {open} {reference} {...rest}>
|
|
56
88
|
{#if tip}
|
|
57
89
|
{#if typeof tip === 'string'}
|
|
58
90
|
{tip}
|
package/dist/Tree.svelte
CHANGED
|
@@ -1,46 +1,74 @@
|
|
|
1
1
|
<svelte:options runes={true} />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import { setContext } from 'svelte';
|
|
5
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
6
|
+
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
7
|
+
import { TREE_CONTEXT_KEY } from './Tree.constants';
|
|
8
|
+
import type { TreeContext } from './Tree.types';
|
|
9
|
+
|
|
10
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
11
|
+
disabled?: boolean | null;
|
|
12
|
+
expandedValues?: string[];
|
|
13
|
+
selectedValue?: string;
|
|
14
|
+
onExpandCollapse?: (expandedValues: string[]) => void;
|
|
15
|
+
onSelect?: (selectedValue: string | undefined) => void;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
let {
|
|
19
|
+
children,
|
|
20
|
+
class: _class,
|
|
21
|
+
disabled = false,
|
|
22
|
+
expandedValues = $bindable([]),
|
|
23
|
+
onExpandCollapse,
|
|
24
|
+
onSelect,
|
|
25
|
+
selectedValue = $bindable(undefined),
|
|
26
|
+
...rest
|
|
27
|
+
}: Props = $props();
|
|
28
|
+
|
|
29
|
+
let treeRef: HTMLDivElement;
|
|
30
|
+
|
|
31
|
+
let treeContext = {
|
|
9
32
|
get disabled() {
|
|
10
|
-
|
|
33
|
+
return disabled;
|
|
11
34
|
},
|
|
12
35
|
get expandedValues() {
|
|
13
|
-
|
|
36
|
+
return expandedValues;
|
|
14
37
|
},
|
|
15
|
-
set expandedValues(value) {
|
|
16
|
-
|
|
38
|
+
set expandedValues(value: string[]) {
|
|
39
|
+
expandedValues = value;
|
|
17
40
|
},
|
|
18
41
|
get selectedValue() {
|
|
19
|
-
|
|
42
|
+
return selectedValue;
|
|
20
43
|
},
|
|
21
|
-
set selectedValue(value) {
|
|
22
|
-
|
|
44
|
+
set selectedValue(value: string | undefined) {
|
|
45
|
+
selectedValue = value;
|
|
23
46
|
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
setContext<TreeContext>(TREE_CONTEXT_KEY, treeContext);
|
|
50
|
+
|
|
51
|
+
$effect(() => {
|
|
27
52
|
onSelect?.(selectedValue);
|
|
28
|
-
});
|
|
29
|
-
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
$effect(() => {
|
|
30
56
|
onExpandCollapse?.(expandedValues);
|
|
31
|
-
});
|
|
32
|
-
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const blur = () => {
|
|
33
60
|
treeRef?.blur();
|
|
34
|
-
};
|
|
35
|
-
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const focus = (options?: FocusOptions) => {
|
|
36
64
|
treeRef?.focus(options);
|
|
37
|
-
};
|
|
65
|
+
};
|
|
38
66
|
</script>
|
|
39
67
|
|
|
40
68
|
<div
|
|
41
69
|
bind:this={treeRef}
|
|
42
70
|
aria-disabled={disabled}
|
|
43
|
-
class={
|
|
71
|
+
class={['sterling-tree', _class]}
|
|
44
72
|
class:disabled
|
|
45
73
|
class:using-keyboard={$usingKeyboard}
|
|
46
74
|
role="tree"
|
package/dist/Tree.svelte.d.ts
CHANGED
package/dist/TreeChevron.svelte
CHANGED
|
@@ -1,25 +1,37 @@
|
|
|
1
1
|
<svelte:options runes={true} />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import { onMount } from 'svelte';
|
|
5
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
6
|
+
|
|
7
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
8
|
+
expanded?: boolean | null | undefined;
|
|
9
|
+
hasChildren?: boolean | null | undefined;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
let { class: _class, expanded = false, hasChildren = false, ...rest }: Props = $props();
|
|
13
|
+
|
|
14
|
+
let previousExpanded = expanded;
|
|
15
|
+
let mounted = false;
|
|
16
|
+
|
|
17
|
+
onMount(() => {
|
|
8
18
|
setTimeout(() => {
|
|
9
|
-
|
|
19
|
+
mounted = true;
|
|
10
20
|
}, 0);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
$
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
let animate = $state(false);
|
|
24
|
+
|
|
25
|
+
$effect(() => {
|
|
14
26
|
if (expanded !== previousExpanded && mounted) {
|
|
15
|
-
|
|
27
|
+
animate = true;
|
|
16
28
|
}
|
|
17
29
|
previousExpanded = expanded;
|
|
18
|
-
});
|
|
30
|
+
});
|
|
19
31
|
</script>
|
|
20
32
|
|
|
21
33
|
<div
|
|
22
|
-
class={
|
|
34
|
+
class={['sterling-tree-chevron', _class]}
|
|
23
35
|
class:leaf={!hasChildren}
|
|
24
36
|
class:animate
|
|
25
37
|
class:expanded
|