@geoffcox/sterling-svelte 2.0.1 → 2.0.2
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/package.json +26 -28
- package/README.md +0 -18
- package/dist/@types/clickOutside.d.ts +0 -15
- package/dist/Button.svelte +0 -25
- package/dist/Button.svelte.d.ts +0 -9
- package/dist/Callout.svelte +0 -177
- package/dist/Callout.svelte.d.ts +0 -15
- package/dist/Callout.types.d.ts +0 -11
- package/dist/Callout.types.js +0 -1
- package/dist/Checkbox.svelte +0 -43
- package/dist/Checkbox.svelte.d.ts +0 -10
- package/dist/Dialog.svelte +0 -151
- package/dist/Dialog.svelte.d.ts +0 -14
- package/dist/Dropdown.svelte +0 -109
- package/dist/Dropdown.svelte.d.ts +0 -18
- package/dist/Input.svelte +0 -55
- package/dist/Input.svelte.d.ts +0 -12
- package/dist/Label.constants.d.ts +0 -2
- package/dist/Label.constants.js +0 -2
- package/dist/Label.svelte +0 -91
- package/dist/Label.svelte.d.ts +0 -17
- package/dist/Link.svelte +0 -25
- package/dist/Link.svelte.d.ts +0 -12
- package/dist/List.constants.d.ts +0 -1
- package/dist/List.constants.js +0 -1
- package/dist/List.svelte +0 -203
- package/dist/List.svelte.d.ts +0 -20
- package/dist/List.types.d.ts +0 -5
- package/dist/List.types.js +0 -1
- package/dist/ListItem.svelte +0 -49
- package/dist/ListItem.svelte.d.ts +0 -13
- package/dist/Menu.svelte +0 -83
- package/dist/Menu.svelte.d.ts +0 -13
- package/dist/MenuBar.constants.d.ts +0 -1
- package/dist/MenuBar.constants.js +0 -1
- package/dist/MenuBar.svelte +0 -113
- package/dist/MenuBar.svelte.d.ts +0 -13
- package/dist/MenuBar.types.d.ts +0 -4
- package/dist/MenuBar.types.js +0 -1
- package/dist/MenuButton.svelte +0 -116
- package/dist/MenuButton.svelte.d.ts +0 -20
- package/dist/MenuItem.constants.d.ts +0 -2
- package/dist/MenuItem.constants.js +0 -2
- package/dist/MenuItem.svelte +0 -342
- package/dist/MenuItem.svelte.d.ts +0 -22
- package/dist/MenuItem.types.d.ts +0 -20
- package/dist/MenuItem.types.js +0 -1
- package/dist/MenuItem.utils.d.ts +0 -7
- package/dist/MenuItem.utils.js +0 -36
- package/dist/MenuSeparator.svelte +0 -11
- package/dist/MenuSeparator.svelte.d.ts +0 -6
- package/dist/Popover.constants.d.ts +0 -1
- package/dist/Popover.constants.js +0 -14
- package/dist/Popover.svelte +0 -121
- package/dist/Popover.svelte.d.ts +0 -15
- package/dist/Popover.types.d.ts +0 -4
- package/dist/Popover.types.js +0 -1
- package/dist/Portal.constants.d.ts +0 -2
- package/dist/Portal.constants.js +0 -2
- package/dist/Portal.types.d.ts +0 -6
- package/dist/Portal.types.js +0 -1
- package/dist/Progress.constants.d.ts +0 -1
- package/dist/Progress.constants.js +0 -1
- package/dist/Progress.svelte +0 -36
- package/dist/Progress.svelte.d.ts +0 -12
- package/dist/Progress.types.d.ts +0 -4
- package/dist/Progress.types.js +0 -1
- package/dist/Radio.svelte +0 -53
- package/dist/Radio.svelte.d.ts +0 -13
- package/dist/Select.svelte +0 -196
- package/dist/Select.svelte.d.ts +0 -20
- package/dist/Slider.svelte +0 -133
- package/dist/Slider.svelte.d.ts +0 -19
- package/dist/Switch.svelte +0 -61
- package/dist/Switch.svelte.d.ts +0 -21
- package/dist/Tab.svelte +0 -51
- package/dist/Tab.svelte.d.ts +0 -12
- package/dist/TabList.constants.d.ts +0 -1
- package/dist/TabList.constants.js +0 -1
- package/dist/TabList.svelte +0 -202
- package/dist/TabList.svelte.d.ts +0 -18
- package/dist/TabList.types.d.ts +0 -5
- package/dist/TabList.types.js +0 -1
- package/dist/TextArea.constants.d.ts +0 -1
- package/dist/TextArea.constants.js +0 -1
- package/dist/TextArea.svelte +0 -74
- package/dist/TextArea.svelte.d.ts +0 -19
- package/dist/TextArea.types.d.ts +0 -4
- package/dist/TextArea.types.js +0 -1
- package/dist/Tooltip.svelte +0 -63
- package/dist/Tooltip.svelte.d.ts +0 -10
- package/dist/Tree.constants.d.ts +0 -1
- package/dist/Tree.constants.js +0 -1
- package/dist/Tree.svelte +0 -53
- package/dist/Tree.svelte.d.ts +0 -15
- package/dist/Tree.types.d.ts +0 -5
- package/dist/Tree.types.js +0 -1
- package/dist/TreeChevron.svelte +0 -27
- package/dist/TreeChevron.svelte.d.ts +0 -9
- package/dist/TreeItem.constants.d.ts +0 -1
- package/dist/TreeItem.constants.js +0 -1
- package/dist/TreeItem.svelte +0 -329
- package/dist/TreeItem.svelte.d.ts +0 -22
- package/dist/TreeItem.types.d.ts +0 -4
- package/dist/TreeItem.types.js +0 -1
- package/dist/actions/applyLightDarkMode.d.ts +0 -10
- package/dist/actions/applyLightDarkMode.js +0 -36
- package/dist/actions/clickOutside.d.ts +0 -15
- package/dist/actions/clickOutside.js +0 -28
- package/dist/actions/extraClass.d.ts +0 -8
- package/dist/actions/extraClass.js +0 -14
- package/dist/actions/forwardEvents.d.ts +0 -12
- package/dist/actions/forwardEvents.js +0 -32
- package/dist/actions/portal.d.ts +0 -8
- package/dist/actions/portal.js +0 -19
- package/dist/actions/trapKeyboardFocus.d.ts +0 -3
- package/dist/actions/trapKeyboardFocus.js +0 -52
- package/dist/idGenerator.d.ts +0 -4
- package/dist/idGenerator.js +0 -10
- package/dist/index.d.ts +0 -59
- package/dist/index.js +0 -54
- package/dist/mediaQueries/prefersColorSchemeDark.d.ts +0 -2
- package/dist/mediaQueries/prefersColorSchemeDark.js +0 -14
- package/dist/mediaQueries/prefersReducedMotion.d.ts +0 -2
- package/dist/mediaQueries/prefersReducedMotion.js +0 -14
- package/dist/mediaQueries/usingKeyboard.d.ts +0 -2
- package/dist/mediaQueries/usingKeyboard.js +0 -17
package/dist/Menu.svelte
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
<svelte:options runes={true} />
|
|
2
|
-
|
|
3
|
-
<script lang="ts">import { getContext } from 'svelte';
|
|
4
|
-
import { slide } from 'svelte/transition';
|
|
5
|
-
import { MENU_ITEM_CONTEXT_KEY } from './MenuItem.constants';
|
|
6
|
-
import { isElementEnabledMenuItem, isElementMenuItem } from './MenuItem.utils';
|
|
7
|
-
import { prefersReducedMotion } from './mediaQueries/prefersReducedMotion';
|
|
8
|
-
let { children, class: _class, ...rest } = $props();
|
|
9
|
-
let menuRef;
|
|
10
|
-
let menuItemsRef;
|
|
11
|
-
const noSlide = (node, params) => {
|
|
12
|
-
return { delay: 0, duration: 0 };
|
|
13
|
-
};
|
|
14
|
-
let slideMotion = $derived(!$prefersReducedMotion ? slide : noSlide);
|
|
15
|
-
const { rootValue = undefined } = getContext(MENU_ITEM_CONTEXT_KEY);
|
|
16
|
-
const isElementInThisMenu = (candidate) => {
|
|
17
|
-
return candidate && candidate.closest('[role="menu"]') === menuRef;
|
|
18
|
-
};
|
|
19
|
-
//#region focus
|
|
20
|
-
export const focus = (options) => {
|
|
21
|
-
menuRef?.focus(options);
|
|
22
|
-
};
|
|
23
|
-
export const blur = () => {
|
|
24
|
-
menuRef?.blur();
|
|
25
|
-
};
|
|
26
|
-
export const focusFirstMenuItem = () => {
|
|
27
|
-
let candidate = menuItemsRef?.firstElementChild;
|
|
28
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
29
|
-
candidate = candidate.nextElementSibling;
|
|
30
|
-
}
|
|
31
|
-
candidate?.focus({ preventScroll: true });
|
|
32
|
-
return !!candidate;
|
|
33
|
-
};
|
|
34
|
-
export const focusPreviousMenuItem = () => {
|
|
35
|
-
let candidate = document.activeElement;
|
|
36
|
-
if (candidate && isElementMenuItem(candidate) && isElementInThisMenu(candidate)) {
|
|
37
|
-
candidate = menuItemsRef?.previousElementSibling;
|
|
38
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
39
|
-
candidate = candidate.previousElementSibling;
|
|
40
|
-
}
|
|
41
|
-
candidate?.focus();
|
|
42
|
-
}
|
|
43
|
-
return !!candidate;
|
|
44
|
-
};
|
|
45
|
-
export const focusNextMenuItem = () => {
|
|
46
|
-
let candidate = document.activeElement;
|
|
47
|
-
if (candidate && isElementMenuItem(candidate) && isElementInThisMenu(candidate)) {
|
|
48
|
-
candidate = menuItemsRef?.nextElementSibling;
|
|
49
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
50
|
-
candidate = candidate.nextElementSibling;
|
|
51
|
-
}
|
|
52
|
-
candidate?.focus();
|
|
53
|
-
}
|
|
54
|
-
return !!candidate;
|
|
55
|
-
};
|
|
56
|
-
export const focusLastMenuItem = () => {
|
|
57
|
-
let candidate = menuItemsRef?.lastElementChild;
|
|
58
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
59
|
-
candidate = candidate.previousElementSibling;
|
|
60
|
-
}
|
|
61
|
-
candidate?.focus({ preventScroll: true });
|
|
62
|
-
return !!candidate;
|
|
63
|
-
};
|
|
64
|
-
//#endregion
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<div
|
|
68
|
-
bind:this={menuRef}
|
|
69
|
-
class={['sterling-menu', _class].filter(Boolean).join(' ')}
|
|
70
|
-
role="menu"
|
|
71
|
-
class:open
|
|
72
|
-
data-root-value={rootValue}
|
|
73
|
-
tabindex="-1"
|
|
74
|
-
in:slideMotion|global={{ duration: 300 }}
|
|
75
|
-
out:slideMotion|global={{ duration: 100 }}
|
|
76
|
-
{...rest}
|
|
77
|
-
>
|
|
78
|
-
<div bind:this={menuItemsRef} class="menu-items">
|
|
79
|
-
{#if children}
|
|
80
|
-
{@render children()}
|
|
81
|
-
{/if}
|
|
82
|
-
</div>
|
|
83
|
-
</div>
|
package/dist/Menu.svelte.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/// <reference types="svelte" />
|
|
2
|
-
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
-
type Props = HTMLAttributes<HTMLDivElement>;
|
|
4
|
-
declare const Menu: import("svelte").Component<Props, {
|
|
5
|
-
focus: (options?: FocusOptions) => void;
|
|
6
|
-
blur: () => void;
|
|
7
|
-
focusFirstMenuItem: () => boolean;
|
|
8
|
-
focusPreviousMenuItem: () => boolean;
|
|
9
|
-
focusNextMenuItem: () => boolean;
|
|
10
|
-
focusLastMenuItem: () => boolean;
|
|
11
|
-
}, "">;
|
|
12
|
-
type Menu = ReturnType<typeof Menu>;
|
|
13
|
-
export default Menu;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const MENU_BAR_CONTEXT_KEY = "sterlingMenuBar";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const MENU_BAR_CONTEXT_KEY = 'sterlingMenuBar';
|
package/dist/MenuBar.svelte
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
<svelte:options runes={true} />
|
|
2
|
-
|
|
3
|
-
<script lang="ts">import { setContext } from 'svelte';
|
|
4
|
-
import { clickOutside } from './actions/clickOutside';
|
|
5
|
-
import { idGenerator } from './idGenerator';
|
|
6
|
-
import { MENU_BAR_CONTEXT_KEY } from './MenuBar.constants';
|
|
7
|
-
import { MENU_ITEM_CONTEXT_KEY } from './MenuItem.constants';
|
|
8
|
-
import { isElementEnabledMenuItem } from './MenuItem.utils';
|
|
9
|
-
let { class: _class, children, onClose, onOpen, onSelect, ...rest } = $props();
|
|
10
|
-
const rootValue = idGenerator.nextId('MenuBar');
|
|
11
|
-
let openValues = $state([]);
|
|
12
|
-
let prevOpenValue = $state();
|
|
13
|
-
let menuBarRef;
|
|
14
|
-
$effect(() => {
|
|
15
|
-
prevOpenValue = openValues[0];
|
|
16
|
-
});
|
|
17
|
-
// Restore focus to the last open menu bar item when it closes
|
|
18
|
-
$effect(() => {
|
|
19
|
-
if (openValues.length === 0 && prevOpenValue !== undefined) {
|
|
20
|
-
const candidate = menuBarRef.querySelector(`[data-value="${prevOpenValue}"]`);
|
|
21
|
-
candidate?.focus();
|
|
22
|
-
prevOpenValue = undefined;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
export const blur = () => {
|
|
26
|
-
menuBarRef?.blur();
|
|
27
|
-
};
|
|
28
|
-
export const focus = (options) => {
|
|
29
|
-
menuBarRef?.focus(options);
|
|
30
|
-
};
|
|
31
|
-
const getOpenMenuBarItem = () => {
|
|
32
|
-
const value = openValues[0];
|
|
33
|
-
if (value) {
|
|
34
|
-
return menuBarRef.querySelector(`[data-value="${value}"]`);
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
};
|
|
38
|
-
const openPreviousMenuBarItem = () => {
|
|
39
|
-
const openItem = getOpenMenuBarItem() || menuBarRef.firstElementChild;
|
|
40
|
-
let candidate = openItem?.previousElementSibling || menuBarRef.lastElementChild;
|
|
41
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
42
|
-
candidate = candidate.previousElementSibling || menuBarRef.lastElementChild;
|
|
43
|
-
if (candidate === openItem) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (!candidate) {
|
|
48
|
-
candidate = menuBarRef.lastElementChild;
|
|
49
|
-
candidate = candidate && isElementEnabledMenuItem(candidate) ? candidate : null;
|
|
50
|
-
}
|
|
51
|
-
candidate?.click();
|
|
52
|
-
return !!candidate;
|
|
53
|
-
};
|
|
54
|
-
const openNextMenuBarItem = () => {
|
|
55
|
-
const openItem = getOpenMenuBarItem() || menuBarRef.lastElementChild;
|
|
56
|
-
let candidate = openItem?.nextElementSibling || menuBarRef.firstElementChild;
|
|
57
|
-
while (candidate && !isElementEnabledMenuItem(candidate)) {
|
|
58
|
-
candidate = candidate.nextElementSibling || menuBarRef.firstElementChild;
|
|
59
|
-
if (candidate === openItem) {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (!candidate) {
|
|
64
|
-
candidate = menuBarRef.firstElementChild;
|
|
65
|
-
candidate = candidate && isElementEnabledMenuItem(candidate) ? candidate : null;
|
|
66
|
-
}
|
|
67
|
-
candidate?.click();
|
|
68
|
-
return !!candidate;
|
|
69
|
-
};
|
|
70
|
-
const closeAllMenus = () => {
|
|
71
|
-
openValues = [];
|
|
72
|
-
};
|
|
73
|
-
const onClickOutside = (event) => {
|
|
74
|
-
let element = event.target;
|
|
75
|
-
while (element) {
|
|
76
|
-
if (element.getAttribute('data-root-value') === rootValue) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
element = element.parentElement;
|
|
80
|
-
}
|
|
81
|
-
closeAllMenus?.();
|
|
82
|
-
};
|
|
83
|
-
let menuBarContext = { openPreviousMenuBarItem, openNextMenuBarItem };
|
|
84
|
-
setContext(MENU_BAR_CONTEXT_KEY, menuBarContext);
|
|
85
|
-
let menuItemContext = {
|
|
86
|
-
isMenuBarItem: true,
|
|
87
|
-
depth: 0,
|
|
88
|
-
get openValues() {
|
|
89
|
-
return openValues;
|
|
90
|
-
},
|
|
91
|
-
set openValues(value) {
|
|
92
|
-
openValues = value;
|
|
93
|
-
},
|
|
94
|
-
rootValue,
|
|
95
|
-
onClose,
|
|
96
|
-
onOpen,
|
|
97
|
-
onSelect
|
|
98
|
-
};
|
|
99
|
-
setContext(MENU_ITEM_CONTEXT_KEY, menuItemContext);
|
|
100
|
-
</script>
|
|
101
|
-
|
|
102
|
-
<div
|
|
103
|
-
bind:this={menuBarRef}
|
|
104
|
-
class={['sterling-menu-bar', _class].filter(Boolean).join(' ')}
|
|
105
|
-
role="menubar"
|
|
106
|
-
tabindex="-1"
|
|
107
|
-
{...rest}
|
|
108
|
-
use:clickOutside={{ onclickoutside: onClickOutside }}
|
|
109
|
-
>
|
|
110
|
-
{#if children}
|
|
111
|
-
{@render children()}
|
|
112
|
-
{/if}
|
|
113
|
-
</div>
|
package/dist/MenuBar.svelte.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/// <reference types="svelte" />
|
|
2
|
-
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
-
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
-
onClose?: (value: string) => void;
|
|
5
|
-
onOpen?: (value: string) => void;
|
|
6
|
-
onSelect?: (value: string) => void;
|
|
7
|
-
};
|
|
8
|
-
declare const MenuBar: import("svelte").Component<Props, {
|
|
9
|
-
blur: () => void;
|
|
10
|
-
focus: (options?: FocusOptions) => void;
|
|
11
|
-
}, "">;
|
|
12
|
-
type MenuBar = ReturnType<typeof MenuBar>;
|
|
13
|
-
export default MenuBar;
|
package/dist/MenuBar.types.d.ts
DELETED
package/dist/MenuBar.types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/MenuButton.svelte
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
<svelte:options runes={true} />
|
|
2
|
-
|
|
3
|
-
<script lang="ts">import { setContext, tick } from 'svelte';
|
|
4
|
-
import Button from './Button.svelte';
|
|
5
|
-
import Menu from './Menu.svelte';
|
|
6
|
-
import { MENU_ITEM_CONTEXT_KEY } from './MenuItem.constants';
|
|
7
|
-
import { idGenerator } from './idGenerator';
|
|
8
|
-
import Popover from './Popover.svelte';
|
|
9
|
-
import { clickOutside } from './actions/clickOutside';
|
|
10
|
-
let { children, class: _class, items, menuClass, open = $bindable(false), onClose, onOpen, onSelect, popoverPlacement = 'bottom-start', value, ...rest } = $props();
|
|
11
|
-
const instanceId = idGenerator.nextId('MenuButton');
|
|
12
|
-
let buttonRef;
|
|
13
|
-
let openValues = $state([]);
|
|
14
|
-
let menuRef;
|
|
15
|
-
let menuId = $derived(`${value}-menu-${instanceId}`);
|
|
16
|
-
let prevOpen = $state(open);
|
|
17
|
-
let reference = $state();
|
|
18
|
-
export const click = () => {
|
|
19
|
-
buttonRef?.click();
|
|
20
|
-
};
|
|
21
|
-
export const blur = () => {
|
|
22
|
-
buttonRef?.blur();
|
|
23
|
-
};
|
|
24
|
-
export const focus = (options) => {
|
|
25
|
-
buttonRef?.focus(options);
|
|
26
|
-
};
|
|
27
|
-
// update open based on openValues
|
|
28
|
-
$effect(() => {
|
|
29
|
-
open = openValues.length > 0;
|
|
30
|
-
});
|
|
31
|
-
// update openValues based on open
|
|
32
|
-
$effect(() => {
|
|
33
|
-
if (open) {
|
|
34
|
-
openValues = openValues.length > 0 ? openValues : ['menu-button'];
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
openValues = openValues.length === 0 ? openValues : [];
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
// focus when closing
|
|
41
|
-
$effect(() => {
|
|
42
|
-
if (!open && open !== prevOpen) {
|
|
43
|
-
focus();
|
|
44
|
-
}
|
|
45
|
-
prevOpen = open;
|
|
46
|
-
});
|
|
47
|
-
const onClick = async () => {
|
|
48
|
-
if (!open) {
|
|
49
|
-
openValues = ['menu-button'];
|
|
50
|
-
open = true;
|
|
51
|
-
await tick();
|
|
52
|
-
menuRef?.focusFirstMenuItem();
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
open = false;
|
|
56
|
-
openValues = [];
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const closeAllMenus = () => {
|
|
60
|
-
openValues = [];
|
|
61
|
-
open = false;
|
|
62
|
-
};
|
|
63
|
-
const onClickOutside = (event) => {
|
|
64
|
-
let element = event.target;
|
|
65
|
-
while (element) {
|
|
66
|
-
if (element.getAttribute('data-root-value') === value) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
element = element.parentElement;
|
|
70
|
-
}
|
|
71
|
-
closeAllMenus?.();
|
|
72
|
-
};
|
|
73
|
-
// ----- Context ----- //
|
|
74
|
-
setContext(MENU_ITEM_CONTEXT_KEY, {
|
|
75
|
-
depth: 1,
|
|
76
|
-
get openValues() {
|
|
77
|
-
return openValues;
|
|
78
|
-
},
|
|
79
|
-
set openValues(value) {
|
|
80
|
-
openValues = value;
|
|
81
|
-
},
|
|
82
|
-
rootValue: value,
|
|
83
|
-
closeContainingMenu: () => {
|
|
84
|
-
open = false;
|
|
85
|
-
},
|
|
86
|
-
onOpen,
|
|
87
|
-
onClose,
|
|
88
|
-
onSelect
|
|
89
|
-
});
|
|
90
|
-
</script>
|
|
91
|
-
|
|
92
|
-
<Button
|
|
93
|
-
bind:this={buttonRef}
|
|
94
|
-
aria-controls={menuId}
|
|
95
|
-
aria-expanded={!!open}
|
|
96
|
-
aria-haspopup={!!children}
|
|
97
|
-
aria-owns={menuId}
|
|
98
|
-
class={['sterling-menu-button', _class].filter(Boolean).join(' ')}
|
|
99
|
-
data-value={value}
|
|
100
|
-
data-root-value={value}
|
|
101
|
-
{...rest}
|
|
102
|
-
onclick={onClick}
|
|
103
|
-
>
|
|
104
|
-
<div
|
|
105
|
-
class="reference"
|
|
106
|
-
bind:this={reference}
|
|
107
|
-
use:clickOutside={{ onclickoutside: onClickOutside }}
|
|
108
|
-
>
|
|
109
|
-
{@render children?.()}
|
|
110
|
-
</div>
|
|
111
|
-
<Popover {reference} {open} placement={popoverPlacement}>
|
|
112
|
-
<Menu bind:this={menuRef} id={menuId} class={menuClass}>
|
|
113
|
-
{@render items?.()}
|
|
114
|
-
</Menu>
|
|
115
|
-
</Popover>
|
|
116
|
-
</Button>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
2
|
-
import { type Snippet } from 'svelte';
|
|
3
|
-
import type { PopoverPlacement } from './Popover.types';
|
|
4
|
-
type Props = HTMLButtonAttributes & {
|
|
5
|
-
items: Snippet;
|
|
6
|
-
menuClass?: string;
|
|
7
|
-
onOpen?: (value: string) => void;
|
|
8
|
-
onClose?: (value: string) => void;
|
|
9
|
-
onSelect?: (value: string) => void;
|
|
10
|
-
open?: boolean | null | undefined;
|
|
11
|
-
popoverPlacement?: PopoverPlacement;
|
|
12
|
-
value?: string;
|
|
13
|
-
};
|
|
14
|
-
declare const MenuButton: import("svelte").Component<Props, {
|
|
15
|
-
click: () => void;
|
|
16
|
-
blur: () => void;
|
|
17
|
-
focus: (options?: FocusOptions) => void;
|
|
18
|
-
}, "open">;
|
|
19
|
-
type MenuButton = ReturnType<typeof MenuButton>;
|
|
20
|
-
export default MenuButton;
|