@geoffcox/sterling-svelte 1.0.11 → 2.0.0
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/.DS_Store +0 -0
- package/Button.svelte +25 -0
- package/Button.svelte.d.ts +9 -0
- package/{dist/Callout.svelte → Callout.svelte} +61 -78
- package/Callout.svelte.d.ts +15 -0
- package/Callout.types.d.ts +11 -0
- package/Checkbox.svelte +43 -0
- package/Checkbox.svelte.d.ts +10 -0
- package/{dist/Dialog.svelte → Dialog.svelte} +30 -38
- package/Dialog.svelte.d.ts +14 -0
- package/Dropdown.svelte +109 -0
- package/Dropdown.svelte.d.ts +18 -0
- package/Input.svelte +55 -0
- package/Input.svelte.d.ts +12 -0
- package/Label.svelte +91 -0
- package/Label.svelte.d.ts +17 -0
- package/Link.svelte +25 -0
- package/Link.svelte.d.ts +12 -0
- package/{dist/List.svelte → List.svelte} +35 -85
- package/List.svelte.d.ts +20 -0
- package/List.types.d.ts +5 -0
- package/ListItem.svelte +49 -0
- package/ListItem.svelte.d.ts +13 -0
- package/{dist/Menu.svelte → Menu.svelte} +18 -45
- package/Menu.svelte.d.ts +13 -0
- package/{dist/MenuBar.svelte → MenuBar.svelte} +36 -78
- package/MenuBar.svelte.d.ts +13 -0
- package/MenuButton.svelte +116 -0
- package/MenuButton.svelte.d.ts +20 -0
- package/{dist/MenuItem.svelte → MenuItem.svelte} +107 -151
- package/MenuItem.svelte.d.ts +22 -0
- package/{dist/MenuItem.types.d.ts → MenuItem.types.d.ts} +1 -9
- package/MenuSeparator.svelte +11 -0
- package/MenuSeparator.svelte.d.ts +6 -0
- package/{dist/Popover.svelte → Popover.svelte} +45 -64
- package/Popover.svelte.d.ts +15 -0
- package/Progress.constants.d.ts +1 -0
- package/Progress.constants.js +1 -0
- package/Progress.svelte +36 -0
- package/Progress.svelte.d.ts +12 -0
- package/Progress.types.d.ts +4 -0
- package/Radio.svelte +53 -0
- package/Radio.svelte.d.ts +13 -0
- package/{dist/Select.svelte → Select.svelte} +55 -94
- package/Select.svelte.d.ts +20 -0
- package/Slider.svelte +133 -0
- package/Slider.svelte.d.ts +19 -0
- package/Switch.svelte +61 -0
- package/Switch.svelte.d.ts +21 -0
- package/Tab.svelte +51 -0
- package/Tab.svelte.d.ts +12 -0
- package/{dist/TabList.svelte → TabList.svelte} +50 -76
- package/TabList.svelte.d.ts +18 -0
- package/TabList.types.d.ts +5 -0
- package/{dist/TextArea.svelte → TextArea.svelte} +17 -59
- package/TextArea.svelte.d.ts +19 -0
- package/Tooltip.svelte +63 -0
- package/Tooltip.svelte.d.ts +10 -0
- package/Tree.svelte +53 -0
- package/Tree.svelte.d.ts +15 -0
- package/Tree.types.d.ts +5 -0
- package/TreeChevron.svelte +27 -0
- package/TreeChevron.svelte.d.ts +9 -0
- package/{dist/TreeItem.svelte → TreeItem.svelte} +105 -159
- package/TreeItem.svelte.d.ts +22 -0
- package/TreeItem.types.d.ts +4 -0
- package/{dist/actions → actions}/clickOutside.d.ts +1 -0
- package/{dist/actions → actions}/clickOutside.js +1 -0
- package/actions/extraClass.d.ts +8 -0
- package/actions/extraClass.js +14 -0
- package/{dist/index.d.ts → index.d.ts} +4 -12
- package/{dist/index.js → index.js} +3 -9
- package/package.json +26 -28
- package/README.md +0 -18
- package/dist/Button.constants.d.ts +0 -2
- package/dist/Button.constants.js +0 -2
- package/dist/Button.svelte +0 -63
- package/dist/Button.svelte.d.ts +0 -65
- package/dist/Button.types.d.ts +0 -6
- package/dist/Callout.svelte.d.ts +0 -56
- package/dist/Checkbox.svelte +0 -79
- package/dist/Checkbox.svelte.d.ts +0 -63
- 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/Dialog.svelte.d.ts +0 -37
- package/dist/Dropdown.svelte +0 -138
- package/dist/Dropdown.svelte.d.ts +0 -77
- 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/Input.svelte +0 -89
- package/dist/Input.svelte.d.ts +0 -74
- package/dist/Label.svelte +0 -197
- package/dist/Label.svelte.d.ts +0 -82
- package/dist/Label.types.d.ts +0 -6
- package/dist/Label.types.js +0 -1
- package/dist/Link.svelte +0 -57
- package/dist/Link.svelte.d.ts +0 -65
- package/dist/List.svelte.d.ts +0 -75
- package/dist/List.types.d.ts +0 -13
- package/dist/ListItem.svelte +0 -78
- package/dist/ListItem.svelte.d.ts +0 -67
- package/dist/Menu.svelte.d.ts +0 -63
- package/dist/MenuBar.svelte.d.ts +0 -58
- package/dist/MenuButton.svelte +0 -145
- package/dist/MenuButton.svelte.d.ts +0 -71
- package/dist/MenuItem.svelte.d.ts +0 -83
- package/dist/MenuItemDisplay.svelte +0 -32
- package/dist/MenuItemDisplay.svelte.d.ts +0 -39
- package/dist/MenuSeparator.svelte +0 -9
- package/dist/MenuSeparator.svelte.d.ts +0 -20
- package/dist/Popover.svelte.d.ts +0 -59
- package/dist/Progress.constants.d.ts +0 -1
- package/dist/Progress.constants.js +0 -1
- package/dist/Progress.svelte +0 -83
- package/dist/Progress.svelte.d.ts +0 -61
- package/dist/Progress.types.d.ts +0 -4
- package/dist/Radio.svelte +0 -126
- package/dist/Radio.svelte.d.ts +0 -65
- package/dist/RgbColorSliders.svelte +0 -93
- package/dist/RgbColorSliders.svelte.d.ts +0 -24
- package/dist/Select.svelte.d.ts +0 -83
- package/dist/Slider.svelte +0 -190
- package/dist/Slider.svelte.d.ts +0 -66
- package/dist/Switch.svelte +0 -110
- package/dist/Switch.svelte.d.ts +0 -74
- package/dist/Tab.svelte +0 -94
- package/dist/Tab.svelte.d.ts +0 -71
- package/dist/TabList.svelte.d.ts +0 -70
- package/dist/TabList.types.d.ts +0 -13
- package/dist/TextArea.svelte.d.ts +0 -69
- package/dist/Tooltip.svelte +0 -106
- package/dist/Tooltip.svelte.d.ts +0 -70
- package/dist/Tree.svelte +0 -104
- package/dist/Tree.svelte.d.ts +0 -67
- package/dist/Tree.types.d.ts +0 -13
- package/dist/TreeChevron.svelte +0 -66
- package/dist/TreeChevron.svelte.d.ts +0 -53
- package/dist/TreeItem.svelte.d.ts +0 -101
- package/dist/TreeItem.types.d.ts +0 -14
- package/dist/TreeItemDisplay.svelte +0 -74
- package/dist/TreeItemDisplay.svelte.d.ts +0 -73
- package/dist/css/Button.base.css +0 -74
- package/dist/css/Button.colorful.css +0 -17
- package/dist/css/Button.css +0 -7
- 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 -43
- package/dist/css/Callout.colorful.css +0 -5
- package/dist/css/Callout.css +0 -2
- package/dist/css/Checkbox.base.css +0 -145
- package/dist/css/Checkbox.colorful.css +0 -17
- package/dist/css/Checkbox.css +0 -2
- 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 -147
- package/dist/css/Dropdown.colorful.css +0 -23
- package/dist/css/Dropdown.css +0 -2
- package/dist/css/HexColorSliders.base.css +0 -106
- package/dist/css/HexColorSliders.css +0 -1
- package/dist/css/HslColorSliders.base.css +0 -124
- package/dist/css/HslColorSliders.css +0 -1
- package/dist/css/Input.base.css +0 -103
- package/dist/css/Input.colorful.css +0 -22
- package/dist/css/Input.composed.css +0 -8
- package/dist/css/Input.css +0 -3
- package/dist/css/Label.base.css +0 -118
- 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 -4
- package/dist/css/Link.base.css +0 -54
- package/dist/css/Link.colorful.css +0 -15
- package/dist/css/Link.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 -98
- package/dist/css/List.css +0 -1
- package/dist/css/ListItem.base.css +0 -59
- package/dist/css/ListItem.css +0 -1
- 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 -108
- package/dist/css/MenuItemDisplay.css +0 -1
- 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 -99
- package/dist/css/Progress.css +0 -1
- package/dist/css/Radio.base.css +0 -135
- package/dist/css/Radio.colorful.css +0 -18
- package/dist/css/Radio.css +0 -2
- package/dist/css/RgbColorSliders.base.css +0 -94
- package/dist/css/RgbColorSliders.css +0 -1
- package/dist/css/Select.base.css +0 -127
- package/dist/css/Select.colorful.css +0 -24
- package/dist/css/Select.composed.css +0 -12
- package/dist/css/Select.css +0 -3
- package/dist/css/Slider.base.css +0 -192
- package/dist/css/Slider.colorful.css +0 -11
- package/dist/css/Slider.composed.css +0 -8
- package/dist/css/Slider.css +0 -3
- package/dist/css/Switch.base.css +0 -206
- package/dist/css/Switch.colorful.css +0 -45
- package/dist/css/Switch.css +0 -2
- package/dist/css/Tab.base.css +0 -132
- package/dist/css/Tab.colorful.css +0 -13
- package/dist/css/Tab.css +0 -2
- package/dist/css/TabList.base.css +0 -34
- package/dist/css/TabList.css +0 -1
- package/dist/css/TextArea.base.css +0 -85
- package/dist/css/TextArea.colorful.css +0 -17
- package/dist/css/TextArea.composed.css +0 -8
- package/dist/css/TextArea.css +0 -3
- package/dist/css/Tooltip.base.css +0 -6
- package/dist/css/Tooltip.css +0 -1
- package/dist/css/Tree.base.css +0 -74
- package/dist/css/Tree.composed.css +0 -8
- package/dist/css/Tree.css +0 -2
- 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 -74
- package/dist/css/TreeItemDisplay.colorful.css +0 -9
- package/dist/css/TreeItemDisplay.css +0 -1
- 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/@types → @types}/clickOutside.d.ts +0 -0
- /package/{dist/Button.types.js → Callout.types.js} +0 -0
- /package/{dist/Label.constants.d.ts → Label.constants.d.ts} +0 -0
- /package/{dist/Label.constants.js → Label.constants.js} +0 -0
- /package/{dist/List.constants.d.ts → List.constants.d.ts} +0 -0
- /package/{dist/List.constants.js → List.constants.js} +0 -0
- /package/{dist/List.types.js → List.types.js} +0 -0
- /package/{dist/MenuBar.constants.d.ts → MenuBar.constants.d.ts} +0 -0
- /package/{dist/MenuBar.constants.js → MenuBar.constants.js} +0 -0
- /package/{dist/MenuBar.types.d.ts → MenuBar.types.d.ts} +0 -0
- /package/{dist/MenuBar.types.js → MenuBar.types.js} +0 -0
- /package/{dist/MenuItem.constants.d.ts → MenuItem.constants.d.ts} +0 -0
- /package/{dist/MenuItem.constants.js → MenuItem.constants.js} +0 -0
- /package/{dist/MenuItem.types.js → MenuItem.types.js} +0 -0
- /package/{dist/MenuItem.utils.d.ts → MenuItem.utils.d.ts} +0 -0
- /package/{dist/MenuItem.utils.js → MenuItem.utils.js} +0 -0
- /package/{dist/Popover.constants.d.ts → Popover.constants.d.ts} +0 -0
- /package/{dist/Popover.constants.js → Popover.constants.js} +0 -0
- /package/{dist/Popover.types.d.ts → Popover.types.d.ts} +0 -0
- /package/{dist/Popover.types.js → Popover.types.js} +0 -0
- /package/{dist/Portal.constants.d.ts → Portal.constants.d.ts} +0 -0
- /package/{dist/Portal.constants.js → Portal.constants.js} +0 -0
- /package/{dist/Portal.types.d.ts → Portal.types.d.ts} +0 -0
- /package/{dist/Portal.types.js → Portal.types.js} +0 -0
- /package/{dist/Progress.types.js → Progress.types.js} +0 -0
- /package/{dist/TabList.constants.d.ts → TabList.constants.d.ts} +0 -0
- /package/{dist/TabList.constants.js → TabList.constants.js} +0 -0
- /package/{dist/TabList.types.js → TabList.types.js} +0 -0
- /package/{dist/TextArea.constants.d.ts → TextArea.constants.d.ts} +0 -0
- /package/{dist/TextArea.constants.js → TextArea.constants.js} +0 -0
- /package/{dist/TextArea.types.d.ts → TextArea.types.d.ts} +0 -0
- /package/{dist/TextArea.types.js → TextArea.types.js} +0 -0
- /package/{dist/Tree.constants.d.ts → Tree.constants.d.ts} +0 -0
- /package/{dist/Tree.constants.js → Tree.constants.js} +0 -0
- /package/{dist/Tree.types.js → Tree.types.js} +0 -0
- /package/{dist/TreeItem.constants.d.ts → TreeItem.constants.d.ts} +0 -0
- /package/{dist/TreeItem.constants.js → TreeItem.constants.js} +0 -0
- /package/{dist/TreeItem.types.js → TreeItem.types.js} +0 -0
- /package/{dist/actions → actions}/applyLightDarkMode.d.ts +0 -0
- /package/{dist/actions → actions}/applyLightDarkMode.js +0 -0
- /package/{dist/actions → actions}/forwardEvents.d.ts +0 -0
- /package/{dist/actions → actions}/forwardEvents.js +0 -0
- /package/{dist/actions → actions}/portal.d.ts +0 -0
- /package/{dist/actions → actions}/portal.js +0 -0
- /package/{dist/actions → actions}/trapKeyboardFocus.d.ts +0 -0
- /package/{dist/actions → actions}/trapKeyboardFocus.js +0 -0
- /package/{dist/idGenerator.d.ts → idGenerator.d.ts} +0 -0
- /package/{dist/idGenerator.js → idGenerator.js} +0 -0
- /package/{dist/mediaQueries → mediaQueries}/prefersColorSchemeDark.d.ts +0 -0
- /package/{dist/mediaQueries → mediaQueries}/prefersColorSchemeDark.js +0 -0
- /package/{dist/mediaQueries → mediaQueries}/prefersReducedMotion.d.ts +0 -0
- /package/{dist/mediaQueries → mediaQueries}/prefersReducedMotion.js +0 -0
- /package/{dist/mediaQueries → mediaQueries}/usingKeyboard.d.ts +0 -0
- /package/{dist/mediaQueries → mediaQueries}/usingKeyboard.js +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
disabled?: boolean | null;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
precision?: number;
|
|
8
|
+
step?: number;
|
|
9
|
+
value?: number;
|
|
10
|
+
vertical?: boolean | null;
|
|
11
|
+
onChange?: (value: number) => void;
|
|
12
|
+
};
|
|
13
|
+
declare const Slider: import("svelte").Component<Props, {
|
|
14
|
+
blur: () => void;
|
|
15
|
+
click: () => void;
|
|
16
|
+
focus: (options?: FocusOptions) => void;
|
|
17
|
+
}, "value">;
|
|
18
|
+
type Slider = ReturnType<typeof Slider>;
|
|
19
|
+
export default Slider;
|
package/Switch.svelte
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { idGenerator } from './idGenerator';
|
|
4
|
+
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
5
|
+
let { checked = $bindable(false), class: _class, disabled, id, offLabel, onLabel, vertical, ...rest } = $props();
|
|
6
|
+
const inputId = id || idGenerator.nextId('Switch');
|
|
7
|
+
let inputRef;
|
|
8
|
+
let switchWidth = $state(0);
|
|
9
|
+
let switchHeight = $state(0);
|
|
10
|
+
let thumbWidth = $state(0);
|
|
11
|
+
let thumbHeight = $state(0);
|
|
12
|
+
let switchSize = $derived(vertical ? switchHeight : switchWidth);
|
|
13
|
+
let thumbSize = $derived(vertical ? thumbHeight : thumbWidth);
|
|
14
|
+
let ratio = $derived(vertical ? (checked ? 0 : 1) : checked ? 1 : 0);
|
|
15
|
+
let valueOffset = $derived((switchSize - thumbSize) * ratio);
|
|
16
|
+
export const blur = () => {
|
|
17
|
+
inputRef?.blur();
|
|
18
|
+
};
|
|
19
|
+
export const click = () => {
|
|
20
|
+
inputRef?.click();
|
|
21
|
+
};
|
|
22
|
+
export const focus = (options) => {
|
|
23
|
+
inputRef?.focus(options);
|
|
24
|
+
};
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<div
|
|
28
|
+
class={`sterling-switch ${_class}`}
|
|
29
|
+
class:checked
|
|
30
|
+
class:disabled
|
|
31
|
+
class:vertical
|
|
32
|
+
class:using-keyboard={$usingKeyboard}
|
|
33
|
+
>
|
|
34
|
+
<input bind:this={inputRef} bind:checked {disabled} id={inputId} type="checkbox" {...rest} />
|
|
35
|
+
{#if offLabel}
|
|
36
|
+
<div class="off-label">
|
|
37
|
+
{#if typeof offLabel === 'string'}
|
|
38
|
+
{offLabel}
|
|
39
|
+
{:else}
|
|
40
|
+
{@render offLabel({ checked, disabled, inputId })}
|
|
41
|
+
{/if}
|
|
42
|
+
</div>
|
|
43
|
+
{/if}
|
|
44
|
+
<div class="toggle" bind:offsetWidth={switchWidth} bind:offsetHeight={switchHeight}>
|
|
45
|
+
<div
|
|
46
|
+
class="thumb"
|
|
47
|
+
bind:offsetWidth={thumbWidth}
|
|
48
|
+
bind:offsetHeight={thumbHeight}
|
|
49
|
+
style={`--thumb-offset: ${valueOffset}px`}
|
|
50
|
+
></div>
|
|
51
|
+
</div>
|
|
52
|
+
{#if onLabel}
|
|
53
|
+
<div class="on-label">
|
|
54
|
+
{#if typeof onLabel === 'string'}
|
|
55
|
+
{onLabel}
|
|
56
|
+
{:else}
|
|
57
|
+
{@render onLabel({ checked, disabled, inputId })}
|
|
58
|
+
{/if}
|
|
59
|
+
</div>
|
|
60
|
+
{/if}
|
|
61
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
type LabelSnippet = Snippet<[
|
|
4
|
+
{
|
|
5
|
+
checked: boolean | null | undefined;
|
|
6
|
+
disabled: boolean | null | undefined;
|
|
7
|
+
inputId: string;
|
|
8
|
+
}
|
|
9
|
+
]>;
|
|
10
|
+
type Props = HTMLInputAttributes & {
|
|
11
|
+
offLabel?: string | LabelSnippet;
|
|
12
|
+
onLabel?: string | LabelSnippet;
|
|
13
|
+
vertical?: boolean | null | undefined;
|
|
14
|
+
};
|
|
15
|
+
declare const Switch: import("svelte").Component<Props, {
|
|
16
|
+
blur: () => void;
|
|
17
|
+
click: () => void;
|
|
18
|
+
focus: (options?: FocusOptions) => void;
|
|
19
|
+
}, "checked">;
|
|
20
|
+
type Switch = ReturnType<typeof Switch>;
|
|
21
|
+
export default Switch;
|
package/Tab.svelte
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { getContext } from 'svelte';
|
|
4
|
+
import { TAB_LIST_CONTEXT_KEY } from './TabList.constants';
|
|
5
|
+
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
6
|
+
let { children, class: _class, disabled = false, value, ...rest } = $props();
|
|
7
|
+
let tabRef;
|
|
8
|
+
const tabListContext = getContext(TAB_LIST_CONTEXT_KEY);
|
|
9
|
+
let selected = $state(tabListContext.selectedValue === value);
|
|
10
|
+
let _disabled = $derived(tabListContext.disabled || disabled);
|
|
11
|
+
// Using $derived would be preferred, but this helps avoid
|
|
12
|
+
// updates to every tab when selectedValue changes.
|
|
13
|
+
// let selected = $derived(tabContext.selectedValue === value);
|
|
14
|
+
$effect(() => {
|
|
15
|
+
if (tabListContext.selectedValue === value && !selected) {
|
|
16
|
+
selected = true;
|
|
17
|
+
}
|
|
18
|
+
else if (tabListContext.selectedValue !== value && selected) {
|
|
19
|
+
selected = false;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
export const click = () => {
|
|
23
|
+
tabRef?.click();
|
|
24
|
+
};
|
|
25
|
+
export const blur = () => {
|
|
26
|
+
tabRef?.blur();
|
|
27
|
+
};
|
|
28
|
+
export const focus = (options) => {
|
|
29
|
+
tabRef?.focus(options);
|
|
30
|
+
};
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<button
|
|
34
|
+
bind:this={tabRef}
|
|
35
|
+
aria-selected={selected}
|
|
36
|
+
class={`sterling-tab ${_class}`}
|
|
37
|
+
class:selected
|
|
38
|
+
class:using-keyboard={$usingKeyboard}
|
|
39
|
+
class:vertical={tabListContext.vertical}
|
|
40
|
+
data-value={value}
|
|
41
|
+
disabled={_disabled}
|
|
42
|
+
role="tab"
|
|
43
|
+
type="button"
|
|
44
|
+
tabIndex={selected ? 0 : -1}
|
|
45
|
+
{...rest}
|
|
46
|
+
>
|
|
47
|
+
<div class="content">
|
|
48
|
+
{@render children?.()}
|
|
49
|
+
</div>
|
|
50
|
+
<div class="indicator"></div>
|
|
51
|
+
</button>
|
package/Tab.svelte.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLButtonAttributes & {
|
|
4
|
+
value: string;
|
|
5
|
+
};
|
|
6
|
+
declare const Tab: import("svelte").Component<Props, {
|
|
7
|
+
click: () => void;
|
|
8
|
+
blur: () => void;
|
|
9
|
+
focus: (options?: FocusOptions) => void;
|
|
10
|
+
}, "">;
|
|
11
|
+
type Tab = ReturnType<typeof Tab>;
|
|
12
|
+
export default Tab;
|
|
@@ -1,36 +1,43 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { setContext } from 'svelte';
|
|
3
4
|
import { TAB_LIST_CONTEXT_KEY } from './TabList.constants';
|
|
4
|
-
|
|
5
|
-
/** When true, the tab list and its tabs are disabled. */
|
|
6
|
-
export let disabled = false;
|
|
7
|
-
/** The value of the currently selected tab. */
|
|
8
|
-
export let selectedValue = undefined;
|
|
9
|
-
/** When true, the tab list is displayed vertically. */
|
|
10
|
-
export let vertical = false;
|
|
11
|
-
/** Additional class names to apply. */
|
|
12
|
-
export let variant = '';
|
|
13
|
-
// ----- State ----- //
|
|
5
|
+
let { children, class: _class, disabled = false, onSelect, selectedValue = $bindable(), vertical = false, ...rest } = $props();
|
|
14
6
|
let tabListRef;
|
|
15
7
|
let lastSelectedTabRef;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
let tabListContext = {
|
|
9
|
+
get disabled() {
|
|
10
|
+
return disabled;
|
|
11
|
+
},
|
|
12
|
+
set disabled(value) {
|
|
13
|
+
disabled = value;
|
|
14
|
+
},
|
|
15
|
+
get selectedValue() {
|
|
16
|
+
return selectedValue;
|
|
17
|
+
},
|
|
18
|
+
set selectedValue(value) {
|
|
19
|
+
selectedValue = value;
|
|
20
|
+
},
|
|
21
|
+
get vertical() {
|
|
22
|
+
return vertical;
|
|
23
|
+
},
|
|
24
|
+
set vertical(value) {
|
|
25
|
+
vertical = value;
|
|
26
|
+
}
|
|
29
27
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
28
|
+
$effect(() => {
|
|
29
|
+
tabListContext.disabled = disabled;
|
|
30
|
+
});
|
|
31
|
+
$effect(() => {
|
|
32
|
+
tabListContext.selectedValue = selectedValue;
|
|
33
|
+
});
|
|
34
|
+
$effect(() => {
|
|
35
|
+
tabListContext.vertical = vertical;
|
|
36
|
+
});
|
|
37
|
+
setContext(TAB_LIST_CONTEXT_KEY, tabListContext);
|
|
38
|
+
$effect(() => {
|
|
39
|
+
onSelect?.(selectedValue);
|
|
40
|
+
});
|
|
34
41
|
export const blur = () => {
|
|
35
42
|
tabListRef?.blur();
|
|
36
43
|
};
|
|
@@ -43,7 +50,6 @@ export const focus = (options) => {
|
|
|
43
50
|
selectFirstTab();
|
|
44
51
|
}
|
|
45
52
|
};
|
|
46
|
-
// ----- Selection ----- //
|
|
47
53
|
const isElementTab = (candidate) => {
|
|
48
54
|
return (candidate &&
|
|
49
55
|
candidate.getAttribute('data-value') !== null &&
|
|
@@ -61,7 +67,7 @@ const getSelectedTabElement = () => {
|
|
|
61
67
|
}
|
|
62
68
|
};
|
|
63
69
|
const selectTab = (value, element) => {
|
|
64
|
-
|
|
70
|
+
selectedValue = value;
|
|
65
71
|
lastSelectedTabRef = element;
|
|
66
72
|
element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
67
73
|
element.focus();
|
|
@@ -116,7 +122,6 @@ export const selectLastTab = () => {
|
|
|
116
122
|
}
|
|
117
123
|
return false;
|
|
118
124
|
};
|
|
119
|
-
// ----- EventHandlers ----- //
|
|
120
125
|
const onClick = (event) => {
|
|
121
126
|
if (!disabled) {
|
|
122
127
|
let candidate = event.target;
|
|
@@ -129,6 +134,7 @@ const onClick = (event) => {
|
|
|
129
134
|
selectTab(candidateValue, candidate);
|
|
130
135
|
}
|
|
131
136
|
}
|
|
137
|
+
rest.onclick?.(event);
|
|
132
138
|
};
|
|
133
139
|
const onKeydown = (event) => {
|
|
134
140
|
// if using arrows, only move when there are no modifier keys
|
|
@@ -138,91 +144,59 @@ const onKeydown = (event) => {
|
|
|
138
144
|
selectFirstTab();
|
|
139
145
|
event.preventDefault();
|
|
140
146
|
event.stopPropagation();
|
|
141
|
-
|
|
147
|
+
break;
|
|
142
148
|
case 'End':
|
|
143
149
|
selectLastTab();
|
|
144
150
|
event.preventDefault();
|
|
145
151
|
event.stopPropagation();
|
|
146
|
-
|
|
152
|
+
break;
|
|
147
153
|
case 'ArrowLeft':
|
|
148
154
|
if (!vertical) {
|
|
149
155
|
selectPreviousTab();
|
|
150
156
|
}
|
|
151
157
|
event.preventDefault();
|
|
152
158
|
event.stopPropagation();
|
|
153
|
-
|
|
159
|
+
break;
|
|
154
160
|
case 'ArrowRight':
|
|
155
161
|
if (!vertical) {
|
|
156
162
|
selectNextTab();
|
|
157
163
|
}
|
|
158
164
|
event.preventDefault();
|
|
159
165
|
event.stopPropagation();
|
|
160
|
-
|
|
166
|
+
break;
|
|
161
167
|
case 'ArrowUp':
|
|
162
168
|
if (vertical) {
|
|
163
169
|
selectPreviousTab();
|
|
164
170
|
}
|
|
165
171
|
event.preventDefault();
|
|
166
172
|
event.stopPropagation();
|
|
167
|
-
|
|
173
|
+
break;
|
|
168
174
|
case 'ArrowDown':
|
|
169
175
|
if (vertical) {
|
|
170
176
|
selectNextTab();
|
|
171
177
|
}
|
|
172
178
|
event.preventDefault();
|
|
173
179
|
event.stopPropagation();
|
|
174
|
-
|
|
180
|
+
break;
|
|
175
181
|
default:
|
|
176
182
|
break;
|
|
177
183
|
}
|
|
178
184
|
}
|
|
185
|
+
rest.onkeydown?.(event);
|
|
179
186
|
};
|
|
180
|
-
// ----- Set Context ----- //
|
|
181
|
-
setContext(TAB_LIST_CONTEXT_KEY, {
|
|
182
|
-
disabled: disabledStore,
|
|
183
|
-
selectedValue: selectedValueStore,
|
|
184
|
-
vertical: verticalStore
|
|
185
|
-
});
|
|
186
187
|
</script>
|
|
187
188
|
|
|
188
189
|
<div
|
|
189
190
|
aria-orientation={vertical ? 'vertical' : 'horizontal'}
|
|
190
191
|
bind:this={tabListRef}
|
|
191
|
-
class={`sterling-tab-list ${
|
|
192
|
+
class={`sterling-tab-list ${_class}`}
|
|
192
193
|
class:disabled
|
|
193
194
|
class:vertical
|
|
194
195
|
role="tablist"
|
|
195
196
|
tabindex="-1"
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
on:copy
|
|
200
|
-
on:cut
|
|
201
|
-
on:dblclick
|
|
202
|
-
on:dragend
|
|
203
|
-
on:dragenter
|
|
204
|
-
on:dragleave
|
|
205
|
-
on:dragover
|
|
206
|
-
on:dragstart
|
|
207
|
-
on:drop
|
|
208
|
-
on:focus
|
|
209
|
-
on:focusin
|
|
210
|
-
on:focusout
|
|
211
|
-
on:keydown
|
|
212
|
-
on:keydown={onKeydown}
|
|
213
|
-
on:keypress
|
|
214
|
-
on:keyup
|
|
215
|
-
on:mousedown
|
|
216
|
-
on:mouseenter
|
|
217
|
-
on:mouseleave
|
|
218
|
-
on:mousemove
|
|
219
|
-
on:mouseover
|
|
220
|
-
on:mouseout
|
|
221
|
-
on:mouseup
|
|
222
|
-
on:scroll
|
|
223
|
-
on:wheel|passive
|
|
224
|
-
on:paste
|
|
225
|
-
{...$$restProps}
|
|
197
|
+
onclick={onClick}
|
|
198
|
+
onkeydown={onKeydown}
|
|
199
|
+
{...rest}
|
|
226
200
|
>
|
|
227
|
-
|
|
201
|
+
{@render children?.()}
|
|
228
202
|
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
disabled?: boolean | null;
|
|
5
|
+
selectedValue?: string;
|
|
6
|
+
vertical?: boolean | null;
|
|
7
|
+
onSelect?: (value?: string) => void;
|
|
8
|
+
};
|
|
9
|
+
declare const TabList: import("svelte").Component<Props, {
|
|
10
|
+
blur: () => void;
|
|
11
|
+
focus: (options?: FocusOptions) => void;
|
|
12
|
+
selectFirstTab: () => boolean;
|
|
13
|
+
selectPreviousTab: () => boolean;
|
|
14
|
+
selectNextTab: () => boolean;
|
|
15
|
+
selectLastTab: () => boolean;
|
|
16
|
+
}, "selectedValue">;
|
|
17
|
+
type TabList = ReturnType<typeof TabList>;
|
|
18
|
+
export default TabList;
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/** When true, the text area will resize itself vertically to fit text.*/
|
|
6
|
-
export let autoHeight = false;
|
|
7
|
-
/** Sets the resize handle direction. */
|
|
8
|
-
export let resize = 'none';
|
|
9
|
-
/** Additional class names to apply. */
|
|
10
|
-
export let variant = '';
|
|
11
|
-
// ----- State ----- //
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { tick } from 'svelte';
|
|
4
|
+
let { class: _class, disabled = false, value = $bindable(''), autoHeight = false, resize = $bindable('none'), style, ...rest } = $props();
|
|
12
5
|
let textAreaRef;
|
|
13
6
|
const correctResize = async () => {
|
|
14
|
-
console.log('correctResize');
|
|
15
7
|
await tick();
|
|
16
8
|
setTimeout(() => {
|
|
17
9
|
if (autoHeight) {
|
|
@@ -26,8 +18,6 @@ const correctResize = async () => {
|
|
|
26
18
|
}
|
|
27
19
|
}, 0);
|
|
28
20
|
};
|
|
29
|
-
$: autoHeight, resize, correctResize();
|
|
30
|
-
// ----- autoHeight ----- //
|
|
31
21
|
const autoSetHeight = () => {
|
|
32
22
|
if (autoHeight && textAreaRef) {
|
|
33
23
|
// the style must be directly set to avoid re-rendering looping latency
|
|
@@ -36,15 +26,16 @@ const autoSetHeight = () => {
|
|
|
36
26
|
textAreaRef.style.height = `${textAreaRef.scrollHeight}px`;
|
|
37
27
|
}
|
|
38
28
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
};
|
|
44
|
-
onMount(() => {
|
|
29
|
+
$effect(() => {
|
|
30
|
+
autoHeight;
|
|
31
|
+
resize;
|
|
32
|
+
correctResize();
|
|
45
33
|
autoSetHeight();
|
|
46
34
|
});
|
|
47
|
-
|
|
35
|
+
const onInput = (event) => {
|
|
36
|
+
autoSetHeight();
|
|
37
|
+
rest.oninput?.(event);
|
|
38
|
+
};
|
|
48
39
|
export const blur = () => {
|
|
49
40
|
textAreaRef?.blur();
|
|
50
41
|
};
|
|
@@ -70,47 +61,14 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
|
|
|
70
61
|
};
|
|
71
62
|
</script>
|
|
72
63
|
|
|
73
|
-
<div class={`sterling-text-area ${
|
|
64
|
+
<div class={`sterling-text-area ${_class}`} class:disabled>
|
|
74
65
|
<textarea
|
|
75
66
|
bind:this={textAreaRef}
|
|
76
67
|
bind:value
|
|
77
68
|
{disabled}
|
|
78
69
|
rows="1"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
on:change
|
|
84
|
-
on:copy
|
|
85
|
-
on:cut
|
|
86
|
-
on:paste
|
|
87
|
-
on:dblclick
|
|
88
|
-
on:dragend
|
|
89
|
-
on:dragenter
|
|
90
|
-
on:dragleave
|
|
91
|
-
on:dragover
|
|
92
|
-
on:dragstart
|
|
93
|
-
on:drop
|
|
94
|
-
on:focus
|
|
95
|
-
on:focusin
|
|
96
|
-
on:focusout
|
|
97
|
-
on:input
|
|
98
|
-
on:invalid
|
|
99
|
-
on:keydown
|
|
100
|
-
on:keypress
|
|
101
|
-
on:keyup
|
|
102
|
-
on:mousedown
|
|
103
|
-
on:mouseenter
|
|
104
|
-
on:mouseleave
|
|
105
|
-
on:mousemove
|
|
106
|
-
on:mouseover
|
|
107
|
-
on:mouseout
|
|
108
|
-
on:mouseup
|
|
109
|
-
on:select
|
|
110
|
-
on:submit
|
|
111
|
-
on:reset
|
|
112
|
-
on:wheel|passive
|
|
113
|
-
on:input={onInput}
|
|
114
|
-
{...$$restProps}
|
|
115
|
-
/>
|
|
70
|
+
{...rest}
|
|
71
|
+
oninput={onInput}
|
|
72
|
+
style={`--TextArea__resize: ${resize};${style}`}
|
|
73
|
+
></textarea>
|
|
116
74
|
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { TextAreaResize } from './TextArea.types';
|
|
3
|
+
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
4
|
+
type Props = HTMLTextareaAttributes & {
|
|
5
|
+
autoHeight?: boolean | null | undefined;
|
|
6
|
+
disabled?: boolean | null | undefined;
|
|
7
|
+
value?: string;
|
|
8
|
+
resize?: TextAreaResize;
|
|
9
|
+
};
|
|
10
|
+
declare const TextArea: import("svelte").Component<Props, {
|
|
11
|
+
blur: () => void;
|
|
12
|
+
click: () => void;
|
|
13
|
+
focus: (options?: FocusOptions) => void;
|
|
14
|
+
select: () => void;
|
|
15
|
+
setSelectionRange: (start: number | null, end: number | null, direction?: 'forward' | 'backward' | 'none') => void;
|
|
16
|
+
setRangeText: (replacement: string, start?: number, end?: number, selectionMode?: SelectionMode) => void;
|
|
17
|
+
}, "value" | "resize">;
|
|
18
|
+
type TextArea = ReturnType<typeof TextArea>;
|
|
19
|
+
export default TextArea;
|
package/Tooltip.svelte
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { onMount } from 'svelte';
|
|
4
|
+
import Callout from './Callout.svelte';
|
|
5
|
+
let { children, class: _class, disabled = false, hoverDelayMilliseconds = 1000, open = $bindable(false), tip, ...rest } = $props();
|
|
6
|
+
let originRef = $state();
|
|
7
|
+
let reference = $derived(!!children ? originRef?.previousElementSibling : undefined);
|
|
8
|
+
$inspect({ reference });
|
|
9
|
+
const show = () => {
|
|
10
|
+
if (!disabled) {
|
|
11
|
+
open = true;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const hide = () => (open = false);
|
|
15
|
+
const delayShow = () => {
|
|
16
|
+
hoverDelayMilliseconds === 0
|
|
17
|
+
? show()
|
|
18
|
+
: setTimeout(() => {
|
|
19
|
+
show();
|
|
20
|
+
}, hoverDelayMilliseconds);
|
|
21
|
+
};
|
|
22
|
+
$effect(() => {
|
|
23
|
+
if (disabled) {
|
|
24
|
+
hide();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// ----- Event Listeners ----- //
|
|
28
|
+
let cleanupAutoShowUpdate = () => { };
|
|
29
|
+
const autoShowUpdate = () => {
|
|
30
|
+
cleanupAutoShowUpdate();
|
|
31
|
+
cleanupAutoShowUpdate = () => { };
|
|
32
|
+
const element = reference;
|
|
33
|
+
open = false;
|
|
34
|
+
if (element) {
|
|
35
|
+
element.addEventListener('mouseenter', delayShow);
|
|
36
|
+
element.addEventListener('mouseleave', hide);
|
|
37
|
+
cleanupAutoShowUpdate = () => {
|
|
38
|
+
element.removeEventListener('mouseenter', delayShow);
|
|
39
|
+
element.removeEventListener('mouseleave', hide);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
$effect(() => {
|
|
44
|
+
reference;
|
|
45
|
+
autoShowUpdate();
|
|
46
|
+
});
|
|
47
|
+
// ----- EventHandlers ----- //
|
|
48
|
+
onMount(() => {
|
|
49
|
+
autoShowUpdate();
|
|
50
|
+
});
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
{@render children?.()}
|
|
54
|
+
<div class="sterling-tooltip-origin" bind:this={originRef}></div>
|
|
55
|
+
<Callout class={_class} {open} {reference} {...rest}>
|
|
56
|
+
{#if tip}
|
|
57
|
+
{#if typeof tip === 'string'}
|
|
58
|
+
{tip}
|
|
59
|
+
{:else}
|
|
60
|
+
{@render tip()}
|
|
61
|
+
{/if}
|
|
62
|
+
{/if}
|
|
63
|
+
</Callout>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import type { CalloutProps } from './Callout.types';
|
|
3
|
+
type Props = Omit<CalloutProps, 'reference'> & {
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
hoverDelayMilliseconds?: number;
|
|
6
|
+
tip?: string | Snippet;
|
|
7
|
+
};
|
|
8
|
+
declare const Tooltip: import("svelte").Component<Props, {}, "open">;
|
|
9
|
+
type Tooltip = ReturnType<typeof Tooltip>;
|
|
10
|
+
export default Tooltip;
|
package/Tree.svelte
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { setContext } from 'svelte';
|
|
4
|
+
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
5
|
+
import { TREE_CONTEXT_KEY } from './Tree.constants';
|
|
6
|
+
let { children, class: _class, disabled = false, expandedValues = $bindable([]), onExpandCollapse, onSelect, selectedValue = $bindable(undefined), ...rest } = $props();
|
|
7
|
+
let treeRef;
|
|
8
|
+
let treeContext = {
|
|
9
|
+
get disabled() {
|
|
10
|
+
return disabled;
|
|
11
|
+
},
|
|
12
|
+
get expandedValues() {
|
|
13
|
+
return expandedValues;
|
|
14
|
+
},
|
|
15
|
+
set expandedValues(value) {
|
|
16
|
+
expandedValues = value;
|
|
17
|
+
},
|
|
18
|
+
get selectedValue() {
|
|
19
|
+
return selectedValue;
|
|
20
|
+
},
|
|
21
|
+
set selectedValue(value) {
|
|
22
|
+
selectedValue = value;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
setContext(TREE_CONTEXT_KEY, treeContext);
|
|
26
|
+
$effect(() => {
|
|
27
|
+
onSelect?.(selectedValue);
|
|
28
|
+
});
|
|
29
|
+
$effect(() => {
|
|
30
|
+
onExpandCollapse?.(expandedValues);
|
|
31
|
+
});
|
|
32
|
+
export const blur = () => {
|
|
33
|
+
treeRef?.blur();
|
|
34
|
+
};
|
|
35
|
+
export const focus = (options) => {
|
|
36
|
+
treeRef?.focus(options);
|
|
37
|
+
};
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div
|
|
41
|
+
bind:this={treeRef}
|
|
42
|
+
aria-disabled={disabled}
|
|
43
|
+
class={`sterling-tree ${_class}`}
|
|
44
|
+
class:disabled
|
|
45
|
+
class:using-keyboard={$usingKeyboard}
|
|
46
|
+
role="tree"
|
|
47
|
+
tabindex="0"
|
|
48
|
+
{...rest}
|
|
49
|
+
>
|
|
50
|
+
<div class="container">
|
|
51
|
+
{@render children?.()}
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
package/Tree.svelte.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
disabled?: boolean | null;
|
|
5
|
+
expandedValues?: string[];
|
|
6
|
+
selectedValue?: string;
|
|
7
|
+
onExpandCollapse?: (expandedValues: string[]) => void;
|
|
8
|
+
onSelect?: (selectedValue: string | undefined) => void;
|
|
9
|
+
};
|
|
10
|
+
declare const Tree: import("svelte").Component<Props, {
|
|
11
|
+
blur: () => void;
|
|
12
|
+
focus: (options?: FocusOptions) => void;
|
|
13
|
+
}, "selectedValue" | "expandedValues">;
|
|
14
|
+
type Tree = ReturnType<typeof Tree>;
|
|
15
|
+
export default Tree;
|