@geoffcox/sterling-svelte 0.0.31 → 1.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/@types/clickOutside.d.ts +11 -7
- package/Button.svelte +11 -183
- package/Button.svelte.d.ts +2 -6
- package/Callout.svelte +107 -146
- package/Callout.svelte.d.ts +1 -1
- package/Checkbox.svelte +15 -177
- package/Checkbox.svelte.d.ts +2 -2
- package/ColorPicker.svelte +204 -223
- package/ColorPicker.svelte.d.ts +1 -2
- package/Dialog.svelte +91 -187
- package/Dialog.svelte.d.ts +3 -1
- package/Dropdown.svelte +52 -220
- package/Dropdown.svelte.d.ts +4 -8
- package/HexColorSliders.svelte +77 -145
- package/HexColorSliders.svelte.d.ts +28 -1
- package/HslColorSliders.svelte +99 -179
- package/HslColorSliders.svelte.d.ts +28 -1
- package/Input.svelte +27 -136
- package/Input.svelte.d.ts +2 -3
- package/Label.constants.d.ts +1 -0
- package/Label.constants.js +1 -0
- package/Label.svelte +96 -169
- package/Label.svelte.d.ts +6 -1
- package/Label.types.d.ts +3 -1
- package/Link.svelte +9 -106
- package/Link.svelte.d.ts +0 -1
- package/List.svelte +142 -230
- package/List.svelte.d.ts +2 -3
- package/List.types.d.ts +6 -1
- package/ListItem.svelte +25 -94
- package/ListItem.svelte.d.ts +2 -0
- package/Menu.svelte +48 -65
- package/Menu.svelte.d.ts +4 -1
- package/MenuBar.svelte +84 -86
- package/MenuBar.svelte.d.ts +4 -1
- package/MenuButton.svelte +66 -73
- package/MenuButton.svelte.d.ts +7 -3
- package/MenuItem.svelte +256 -288
- package/MenuItem.svelte.d.ts +2 -2
- package/MenuItemDisplay.svelte +12 -116
- package/MenuItemDisplay.svelte.d.ts +21 -7
- package/MenuSeparator.svelte +6 -45
- package/MenuSeparator.svelte.d.ts +8 -78
- package/Popover.constants.d.ts +1 -1
- package/Popover.constants.js +1 -1
- package/Popover.svelte +66 -80
- package/Popover.svelte.d.ts +5 -1
- package/Progress.svelte +28 -126
- package/Progress.svelte.d.ts +4 -3
- package/Radio.svelte +49 -192
- package/Radio.svelte.d.ts +2 -2
- package/RgbColorSliders.svelte +48 -137
- package/RgbColorSliders.svelte.d.ts +5 -5
- package/Select.svelte +122 -250
- package/Select.svelte.d.ts +6 -2
- package/Slider.svelte +90 -259
- package/Slider.svelte.d.ts +1 -2
- package/Switch.svelte +24 -259
- package/Switch.svelte.d.ts +3 -1
- package/Tab.svelte +27 -175
- package/Tab.svelte.d.ts +6 -4
- package/TabList.svelte +146 -171
- package/TabList.svelte.d.ts +3 -2
- package/TabList.types.d.ts +6 -1
- package/TextArea.svelte +32 -129
- package/TextArea.svelte.d.ts +1 -1
- package/Tooltip.svelte +46 -47
- package/Tooltip.svelte.d.ts +8 -3
- package/Tree.constants.d.ts +0 -1
- package/Tree.constants.js +0 -1
- package/Tree.svelte +35 -119
- package/Tree.svelte.d.ts +4 -4
- package/Tree.types.d.ts +1 -3
- package/TreeChevron.svelte +18 -98
- package/TreeChevron.svelte.d.ts +1 -0
- package/TreeItem.constants.d.ts +1 -0
- package/TreeItem.constants.js +1 -0
- package/TreeItem.svelte +251 -211
- package/TreeItem.svelte.d.ts +7 -3
- package/TreeItem.types.d.ts +1 -1
- package/TreeItemDisplay.svelte +20 -104
- package/TreeItemDisplay.svelte.d.ts +2 -2
- package/actions/applyLightDarkMode.d.ts +10 -0
- package/actions/applyLightDarkMode.js +36 -0
- package/actions/forwardEvents.js +3 -3
- package/css/Button.base.css +74 -0
- package/css/Button.colorful.css +17 -0
- package/css/Button.css +7 -0
- package/css/Button.secondary.colorful.css +15 -0
- package/css/Button.secondary.css +11 -0
- package/css/Button.shapes.css +14 -0
- package/css/Button.tool.colorful.css +13 -0
- package/css/Button.tool.css +18 -0
- package/css/Callout.base.css +43 -0
- package/css/Callout.colorful.css +5 -0
- package/css/Callout.css +2 -0
- package/css/Checkbox.base.css +145 -0
- package/css/Checkbox.colorful.css +17 -0
- package/css/Checkbox.css +2 -0
- package/css/ColorPicker.base.css +23 -0
- package/css/ColorPicker.css +1 -0
- package/css/Dialog.base.css +116 -0
- package/css/Dialog.css +1 -0
- package/css/Dropdown.base.css +147 -0
- package/css/Dropdown.colorful.css +23 -0
- package/css/Dropdown.css +2 -0
- package/css/HexColorSliders.base.css +106 -0
- package/css/HexColorSliders.css +1 -0
- package/css/HslColorSliders.base.css +124 -0
- package/css/HslColorSliders.css +1 -0
- package/css/Input.base.css +100 -0
- package/css/Input.colorful.css +22 -0
- package/css/Input.composed.css +8 -0
- package/css/Input.css +3 -0
- package/css/Label.base.css +119 -0
- package/css/Label.boxed.colorful.css +21 -0
- package/css/Label.boxed.css +31 -0
- package/css/Label.colorful.css +3 -0
- package/css/Label.css +4 -0
- package/css/Link.base.css +52 -0
- package/css/Link.colorful.css +15 -0
- package/css/Link.css +6 -0
- package/css/Link.ghost.colorful.css +7 -0
- package/css/Link.ghost.css +11 -0
- package/css/Link.undecorated.colorful.css +6 -0
- package/css/Link.undecorated.css +6 -0
- package/css/List.base.css +98 -0
- package/css/List.css +1 -0
- package/css/ListItem.base.css +59 -0
- package/css/ListItem.css +1 -0
- package/css/Menu.base.css +21 -0
- package/css/Menu.css +1 -0
- package/css/MenuBar.base.css +9 -0
- package/css/MenuBar.css +1 -0
- package/css/MenuButton.base.css +13 -0
- package/css/MenuButton.css +1 -0
- package/css/MenuItem.base.css +48 -0
- package/css/MenuItem.css +1 -0
- package/css/MenuItemDisplay.base.css +104 -0
- package/css/MenuItemDisplay.css +1 -0
- package/css/MenuSeparator.base.css +5 -0
- package/css/MenuSeparator.css +1 -0
- package/css/Popover copy.css +21 -0
- package/css/Popover.css +21 -0
- package/css/Progress.base.css +99 -0
- package/css/Progress.css +1 -0
- package/css/Radio.base.css +135 -0
- package/css/Radio.colorful.css +18 -0
- package/css/Radio.css +2 -0
- package/css/RgbColorSliders.base.css +94 -0
- package/css/RgbColorSliders.css +1 -0
- package/css/Select.base.css +127 -0
- package/css/Select.colorful.css +24 -0
- package/css/Select.composed.css +12 -0
- package/css/Select.css +3 -0
- package/css/Slider.base.css +182 -0
- package/css/Slider.colorful.css +11 -0
- package/css/Slider.composed.css +8 -0
- package/css/Slider.css +3 -0
- package/css/Switch.base.css +193 -0
- package/css/Switch.colorful.css +39 -0
- package/css/Switch.css +2 -0
- package/css/Tab.base.css +135 -0
- package/css/Tab.colorful.css +13 -0
- package/css/Tab.css +2 -0
- package/css/TabList.base.css +34 -0
- package/css/TabList.css +1 -0
- package/css/TextArea.base.css +85 -0
- package/css/TextArea.colorful.css +17 -0
- package/css/TextArea.composed.css +8 -0
- package/css/TextArea.css +3 -0
- package/css/Tooltip.base.css +6 -0
- package/css/Tooltip.css +1 -0
- package/css/Tree.base.css +74 -0
- package/css/Tree.composed.css +8 -0
- package/css/Tree.css +2 -0
- package/css/TreeChevron.base.css +86 -0
- package/css/TreeChevron.css +1 -0
- package/css/TreeItem.base.css +3 -0
- package/css/TreeItem.css +1 -0
- package/css/TreeItemDisplay.base.css +74 -0
- package/css/TreeItemDisplay.colorful.css +9 -0
- package/css/TreeItemDisplay.css +1 -0
- package/css/dark-mode.css +134 -0
- package/css/light-mode.css +134 -0
- package/css/sterling.css +37 -0
- package/index.d.ts +9 -13
- package/index.js +8 -12
- package/mediaQueries/prefersColorSchemeDark.d.ts +2 -0
- package/mediaQueries/prefersColorSchemeDark.js +10 -0
- package/{stores → mediaQueries}/prefersReducedMotion.d.ts +1 -0
- package/{stores → mediaQueries}/usingKeyboard.d.ts +1 -0
- package/package.json +121 -13
- package/Link.constants.d.ts +0 -1
- package/Link.constants.js +0 -1
- package/Link.types.d.ts +0 -4
- package/Link.types.js +0 -1
- package/theme/applyDarkTheme.d.ts +0 -7
- package/theme/applyDarkTheme.js +0 -11
- package/theme/applyLightTheme.d.ts +0 -7
- package/theme/applyLightTheme.js +0 -11
- package/theme/applyTheme.d.ts +0 -7
- package/theme/applyTheme.js +0 -20
- package/theme/colors.d.ts +0 -54
- package/theme/colors.js +0 -82
- package/theme/darkTheme.d.ts +0 -2
- package/theme/darkTheme.js +0 -142
- package/theme/lightTheme.d.ts +0 -2
- package/theme/lightTheme.js +0 -119
- package/theme/toggleDarkTheme.d.ts +0 -18
- package/theme/toggleDarkTheme.js +0 -53
- package/theme/types.d.ts +0 -21
- package/theme/types.js +0 -1
- /package/{stores → mediaQueries}/prefersReducedMotion.js +0 -0
- /package/{stores → mediaQueries}/usingKeyboard.js +0 -0
package/MenuItemDisplay.svelte
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
<script
|
|
1
|
+
<script>/** When true, displays the menu item as checked. */
|
|
2
|
+
export let checked = false;
|
|
3
|
+
/** When true, displays the menu item as disabled. */
|
|
2
4
|
export let disabled = false;
|
|
5
|
+
/** When true, displays the menu item as a parent of children. */
|
|
3
6
|
export let hasChildren = false;
|
|
7
|
+
/** When true, displays the menu as a top level menu bar item. */
|
|
4
8
|
export let isMenuBarItem = false;
|
|
5
|
-
|
|
9
|
+
/** The role of the menu item. */
|
|
10
|
+
export let menuItemRole = 'menuitem';
|
|
11
|
+
/** Additional class names to apply. */
|
|
12
|
+
export let variant = '';
|
|
6
13
|
</script>
|
|
7
14
|
|
|
8
|
-
<div class=
|
|
15
|
+
<div class={`sterling-menu-item-display ${variant}`} class:disabled>
|
|
9
16
|
<div
|
|
10
17
|
class="check"
|
|
11
18
|
class:checkmark={menuItemRole === 'menuitemcheckbox'}
|
|
@@ -13,124 +20,13 @@ export let menuItemRole = "menuitem";
|
|
|
13
20
|
class:checked
|
|
14
21
|
/>
|
|
15
22
|
<div class="content">
|
|
16
|
-
<slot />
|
|
23
|
+
<slot {checked} {disabled} {hasChildren} {isMenuBarItem} {menuItemRole} {variant} />
|
|
17
24
|
</div>
|
|
18
25
|
{#if $$slots.shortcut}
|
|
19
26
|
<div class="shortcut">
|
|
20
|
-
<slot name="shortcut" />
|
|
27
|
+
<slot name="shortcut" {checked} {disabled} {isMenuBarItem} {menuItemRole} {variant} />
|
|
21
28
|
</div>
|
|
22
29
|
{:else}
|
|
23
30
|
<div class="chevron" class:has-children={!isMenuBarItem && hasChildren} />
|
|
24
31
|
{/if}
|
|
25
32
|
</div>
|
|
26
|
-
|
|
27
|
-
<style>
|
|
28
|
-
.sterling-menu-item-display {
|
|
29
|
-
align-items: center;
|
|
30
|
-
justify-items: flex-start;
|
|
31
|
-
display: grid;
|
|
32
|
-
grid-template-columns: 1em 1fr 1em;
|
|
33
|
-
column-gap: 0.5em;
|
|
34
|
-
padding: 0.25em;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.check {
|
|
38
|
-
box-sizing: border-box;
|
|
39
|
-
pointer-events: none;
|
|
40
|
-
width: 20px;
|
|
41
|
-
height: 20px;
|
|
42
|
-
position: relative;
|
|
43
|
-
transition: background-color 250ms, color 250ms, border-color 250ms;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.check.checkmark.checked::after {
|
|
47
|
-
border-color: currentColor;
|
|
48
|
-
border-style: solid;
|
|
49
|
-
border-width: 0 0.2em 0.2em 0;
|
|
50
|
-
box-sizing: border-box;
|
|
51
|
-
content: '';
|
|
52
|
-
height: 0.8em;
|
|
53
|
-
left: 45%;
|
|
54
|
-
position: absolute;
|
|
55
|
-
top: 45%;
|
|
56
|
-
transform: translate(-50%, -50%) rotate(45deg);
|
|
57
|
-
transform-origin: center;
|
|
58
|
-
transition: border-color 250ms;
|
|
59
|
-
width: 0.4em;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.check.bullet.checked::after {
|
|
63
|
-
background-color: currentColor;
|
|
64
|
-
border-radius: 10000px;
|
|
65
|
-
content: '';
|
|
66
|
-
height: 0.5em;
|
|
67
|
-
left: 45%;
|
|
68
|
-
position: absolute;
|
|
69
|
-
top: 50%;
|
|
70
|
-
transform: translate(-50%, -50%);
|
|
71
|
-
transition: background-color 250ms;
|
|
72
|
-
width: 0.5em;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.content {
|
|
76
|
-
padding-top: 0.25em;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.chevron {
|
|
80
|
-
position: relative;
|
|
81
|
-
border: none;
|
|
82
|
-
background: none;
|
|
83
|
-
height: 1em;
|
|
84
|
-
width: 1em;
|
|
85
|
-
transform-origin: 50% 50%;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.chevron.has-children::after {
|
|
89
|
-
position: absolute;
|
|
90
|
-
content: '';
|
|
91
|
-
top: 50%;
|
|
92
|
-
left: 50%;
|
|
93
|
-
width: 7px;
|
|
94
|
-
height: 7px;
|
|
95
|
-
border-right: 3px solid currentColor;
|
|
96
|
-
border-top: 3px solid currentColor;
|
|
97
|
-
transform: translate(-50%, -50%) rotate(45deg);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.sterling-menu-item-display.disabled {
|
|
101
|
-
cursor: not-allowed;
|
|
102
|
-
outline: none;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.sterling-menu-item-display::after {
|
|
106
|
-
background: repeating-linear-gradient(
|
|
107
|
-
var(--stsv-common--disabled__stripe-angle),
|
|
108
|
-
var(--stsv-common--disabled__stripe-color),
|
|
109
|
-
var(--stsv-common--disabled__stripe-color) var(--stsv-common--disabled__stripe-width),
|
|
110
|
-
var(--stsv-common--disabled__stripe-color--alt) var(--stsv-common--disabled__stripe-width),
|
|
111
|
-
var(--stsv-common--disabled__stripe-color--alt)
|
|
112
|
-
calc(2 * var(--stsv-common--disabled__stripe-width))
|
|
113
|
-
);
|
|
114
|
-
bottom: 0;
|
|
115
|
-
content: '';
|
|
116
|
-
left: 0;
|
|
117
|
-
opacity: 0;
|
|
118
|
-
position: absolute;
|
|
119
|
-
right: 0;
|
|
120
|
-
top: 0;
|
|
121
|
-
pointer-events: none;
|
|
122
|
-
transition: opacity 250ms;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.sterling-menu-item-display.disabled::after {
|
|
126
|
-
opacity: 1;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
@media (prefers-reduced-motion) {
|
|
130
|
-
.sterling-menu-item-display::after,
|
|
131
|
-
.check,
|
|
132
|
-
.check::after {
|
|
133
|
-
transition: none;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
</style>
|
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
3
|
props: {
|
|
4
|
-
checked?: boolean | undefined;
|
|
5
|
-
disabled?: boolean | undefined;
|
|
6
|
-
hasChildren?: boolean | undefined;
|
|
7
|
-
isMenuBarItem?: boolean | undefined;
|
|
8
|
-
menuItemRole?: "menuitem" | "menuitemcheckbox" | "menuitemradio" | undefined;
|
|
4
|
+
/** When true, displays the menu item as checked. */ checked?: boolean | undefined;
|
|
5
|
+
/** When true, displays the menu item as disabled. */ disabled?: boolean | undefined;
|
|
6
|
+
/** When true, displays the menu item as a parent of children. */ hasChildren?: boolean | undefined;
|
|
7
|
+
/** When true, displays the menu as a top level menu bar item. */ isMenuBarItem?: boolean | undefined;
|
|
8
|
+
/** The role of the menu item. */ menuItemRole?: "menuitem" | "menuitemcheckbox" | "menuitemradio" | undefined;
|
|
9
|
+
/** Additional class names to apply. */ variant?: string | undefined;
|
|
9
10
|
};
|
|
10
11
|
events: {
|
|
11
12
|
[evt: string]: CustomEvent<any>;
|
|
12
13
|
};
|
|
13
14
|
slots: {
|
|
14
|
-
default: {
|
|
15
|
-
|
|
15
|
+
default: {
|
|
16
|
+
checked: boolean;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
hasChildren: boolean;
|
|
19
|
+
isMenuBarItem: boolean;
|
|
20
|
+
menuItemRole: "menuitem" | "menuitemcheckbox" | "menuitemradio";
|
|
21
|
+
variant: string;
|
|
22
|
+
};
|
|
23
|
+
shortcut: {
|
|
24
|
+
checked: boolean;
|
|
25
|
+
disabled: boolean;
|
|
26
|
+
isMenuBarItem: boolean;
|
|
27
|
+
menuItemRole: "menuitem" | "menuitemcheckbox" | "menuitemradio";
|
|
28
|
+
variant: string;
|
|
29
|
+
};
|
|
16
30
|
};
|
|
17
31
|
};
|
|
18
32
|
export type MenuItemDisplayProps = typeof __propDef.props;
|
package/MenuSeparator.svelte
CHANGED
|
@@ -1,48 +1,9 @@
|
|
|
1
|
+
<script>/** Additional class names to apply. */
|
|
2
|
+
export let variant = '';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
1
5
|
<!--
|
|
2
6
|
@component
|
|
3
|
-
A styled line to visually separate menu items in a menu.
|
|
7
|
+
A styled line to visually separate groups of menu items in a menu.
|
|
4
8
|
-->
|
|
5
|
-
<div
|
|
6
|
-
class="sterling-menu-item-separator"
|
|
7
|
-
role="separator"
|
|
8
|
-
on:blur
|
|
9
|
-
on:click
|
|
10
|
-
on:dblclick
|
|
11
|
-
on:dragend
|
|
12
|
-
on:dragenter
|
|
13
|
-
on:dragleave
|
|
14
|
-
on:dragover
|
|
15
|
-
on:dragstart
|
|
16
|
-
on:drop
|
|
17
|
-
on:focus
|
|
18
|
-
on:focusin
|
|
19
|
-
on:focusout
|
|
20
|
-
on:keydown
|
|
21
|
-
on:keypress
|
|
22
|
-
on:keyup
|
|
23
|
-
on:mousedown
|
|
24
|
-
on:mouseenter
|
|
25
|
-
on:mouseleave
|
|
26
|
-
on:mousemove
|
|
27
|
-
on:mouseover
|
|
28
|
-
on:mouseout
|
|
29
|
-
on:mouseup
|
|
30
|
-
on:pointercancel
|
|
31
|
-
on:pointerdown
|
|
32
|
-
on:pointerenter
|
|
33
|
-
on:pointerleave
|
|
34
|
-
on:pointermove
|
|
35
|
-
on:pointerover
|
|
36
|
-
on:pointerout
|
|
37
|
-
on:pointerup
|
|
38
|
-
on:wheel|passive
|
|
39
|
-
{...$$restProps}
|
|
40
|
-
/>
|
|
41
|
-
|
|
42
|
-
<style>
|
|
43
|
-
.sterling-menu-item-separator {
|
|
44
|
-
height: var(--stsv-common__border-width);
|
|
45
|
-
background-color: var(--stsv-common__border-color);
|
|
46
|
-
margin: 0.1em 0;
|
|
47
|
-
}
|
|
48
|
-
</style>
|
|
9
|
+
<div class={`sterling-menu-separator ${variant}`} role="separator" {...$$restProps} />
|
|
@@ -1,88 +1,18 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} MenuSeparatorProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} MenuSeparatorEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} MenuSeparatorSlots */
|
|
4
|
-
/** A styled line to visually separate menu items in a menu. */
|
|
5
|
-
export default class MenuSeparator extends SvelteComponentTyped<{
|
|
6
|
-
[x: string]: never;
|
|
7
|
-
}, {
|
|
8
|
-
blur: FocusEvent;
|
|
9
|
-
click: MouseEvent;
|
|
10
|
-
dblclick: MouseEvent;
|
|
11
|
-
dragend: DragEvent;
|
|
12
|
-
dragenter: DragEvent;
|
|
13
|
-
dragleave: DragEvent;
|
|
14
|
-
dragover: DragEvent;
|
|
15
|
-
dragstart: DragEvent;
|
|
16
|
-
drop: DragEvent;
|
|
17
|
-
focus: FocusEvent;
|
|
18
|
-
focusin: FocusEvent;
|
|
19
|
-
focusout: FocusEvent;
|
|
20
|
-
keydown: KeyboardEvent;
|
|
21
|
-
keypress: KeyboardEvent;
|
|
22
|
-
keyup: KeyboardEvent;
|
|
23
|
-
mousedown: MouseEvent;
|
|
24
|
-
mouseenter: MouseEvent;
|
|
25
|
-
mouseleave: MouseEvent;
|
|
26
|
-
mousemove: MouseEvent;
|
|
27
|
-
mouseover: MouseEvent;
|
|
28
|
-
mouseout: MouseEvent;
|
|
29
|
-
mouseup: MouseEvent;
|
|
30
|
-
pointercancel: PointerEvent;
|
|
31
|
-
pointerdown: PointerEvent;
|
|
32
|
-
pointerenter: PointerEvent;
|
|
33
|
-
pointerleave: PointerEvent;
|
|
34
|
-
pointermove: PointerEvent;
|
|
35
|
-
pointerover: PointerEvent;
|
|
36
|
-
pointerout: PointerEvent;
|
|
37
|
-
pointerup: PointerEvent;
|
|
38
|
-
wheel: WheelEvent;
|
|
39
|
-
} & {
|
|
40
|
-
[evt: string]: CustomEvent<any>;
|
|
41
|
-
}, {}> {
|
|
42
|
-
}
|
|
43
|
-
export type MenuSeparatorProps = typeof __propDef.props;
|
|
44
|
-
export type MenuSeparatorEvents = typeof __propDef.events;
|
|
45
|
-
export type MenuSeparatorSlots = typeof __propDef.slots;
|
|
46
1
|
import { SvelteComponentTyped } from "svelte";
|
|
47
2
|
declare const __propDef: {
|
|
48
3
|
props: {
|
|
49
|
-
[x: string]:
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
variant?: string | undefined;
|
|
50
6
|
};
|
|
51
7
|
events: {
|
|
52
|
-
blur: FocusEvent;
|
|
53
|
-
click: MouseEvent;
|
|
54
|
-
dblclick: MouseEvent;
|
|
55
|
-
dragend: DragEvent;
|
|
56
|
-
dragenter: DragEvent;
|
|
57
|
-
dragleave: DragEvent;
|
|
58
|
-
dragover: DragEvent;
|
|
59
|
-
dragstart: DragEvent;
|
|
60
|
-
drop: DragEvent;
|
|
61
|
-
focus: FocusEvent;
|
|
62
|
-
focusin: FocusEvent;
|
|
63
|
-
focusout: FocusEvent;
|
|
64
|
-
keydown: KeyboardEvent;
|
|
65
|
-
keypress: KeyboardEvent;
|
|
66
|
-
keyup: KeyboardEvent;
|
|
67
|
-
mousedown: MouseEvent;
|
|
68
|
-
mouseenter: MouseEvent;
|
|
69
|
-
mouseleave: MouseEvent;
|
|
70
|
-
mousemove: MouseEvent;
|
|
71
|
-
mouseover: MouseEvent;
|
|
72
|
-
mouseout: MouseEvent;
|
|
73
|
-
mouseup: MouseEvent;
|
|
74
|
-
pointercancel: PointerEvent;
|
|
75
|
-
pointerdown: PointerEvent;
|
|
76
|
-
pointerenter: PointerEvent;
|
|
77
|
-
pointerleave: PointerEvent;
|
|
78
|
-
pointermove: PointerEvent;
|
|
79
|
-
pointerover: PointerEvent;
|
|
80
|
-
pointerout: PointerEvent;
|
|
81
|
-
pointerup: PointerEvent;
|
|
82
|
-
wheel: WheelEvent;
|
|
83
|
-
} & {
|
|
84
8
|
[evt: string]: CustomEvent<any>;
|
|
85
9
|
};
|
|
86
10
|
slots: {};
|
|
87
11
|
};
|
|
12
|
+
export type MenuSeparatorProps = typeof __propDef.props;
|
|
13
|
+
export type MenuSeparatorEvents = typeof __propDef.events;
|
|
14
|
+
export type MenuSeparatorSlots = typeof __propDef.slots;
|
|
15
|
+
/** A styled line to visually separate groups of menu items in a menu. */
|
|
16
|
+
export default class MenuSeparator extends SvelteComponentTyped<MenuSeparatorProps, MenuSeparatorEvents, MenuSeparatorSlots> {
|
|
17
|
+
}
|
|
88
18
|
export {};
|
package/Popover.constants.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const POPOVER_PLACEMENTS: string[];
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const STERLING_PORTAL_HOST_ID = "SterlingPortalHost";
|
package/Popover.constants.js
CHANGED
package/Popover.svelte
CHANGED
|
@@ -1,86 +1,96 @@
|
|
|
1
|
-
<script>import { onMount } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "@floating-ui/dom";
|
|
8
|
-
import { portal } from "./actions/portal";
|
|
9
|
-
import { POPOVER_PORTAL_ID } from "./Popover.constants";
|
|
1
|
+
<script>import { onMount } from 'svelte';
|
|
2
|
+
import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
|
|
3
|
+
import { portal } from './actions/portal';
|
|
4
|
+
import { STERLING_PORTAL_HOST_ID } from './Popover.constants';
|
|
5
|
+
// ----- Props ----- //
|
|
6
|
+
/** When true, content is rendered only when the popover is open. */
|
|
10
7
|
export let conditionalRender = true;
|
|
8
|
+
/** The offset along the side of the reference element. */
|
|
11
9
|
export let crossAxisOffset = 0;
|
|
10
|
+
/** The offset towards or away from the side of the reference element. */
|
|
12
11
|
export let mainAxisOffset = 0;
|
|
12
|
+
/** When true, the popover is open and visible. */
|
|
13
13
|
export let open = false;
|
|
14
|
-
|
|
15
|
-
export let
|
|
14
|
+
/** How the popover should be positioned relative to the reference element. */
|
|
15
|
+
export let placement = 'bottom-start';
|
|
16
|
+
/** The host container for the callout. */
|
|
17
|
+
export let portalHost = undefined;
|
|
18
|
+
/** The reference to the element anchoring the position of the popover. */
|
|
16
19
|
export let reference;
|
|
20
|
+
/** Additional class names to apply. */
|
|
21
|
+
export let variant = '';
|
|
22
|
+
// ----- State ----- //
|
|
17
23
|
let popupRef;
|
|
18
24
|
let popupPosition = { x: 0, y: 0 };
|
|
19
|
-
$:
|
|
20
|
-
|
|
25
|
+
$: floatingUIPlacement = placement;
|
|
26
|
+
// ----- Portal Host ----- //
|
|
21
27
|
const ensurePortalHost = () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
if (document) {
|
|
29
|
+
if (portalHost) {
|
|
30
|
+
return portalHost;
|
|
31
|
+
}
|
|
32
|
+
let host = document.querySelector(`#${STERLING_PORTAL_HOST_ID}`);
|
|
33
|
+
if (!host) {
|
|
34
|
+
host = document.createElement('div');
|
|
35
|
+
host.id = STERLING_PORTAL_HOST_ID;
|
|
36
|
+
host.style.overflow = 'visible';
|
|
37
|
+
document.body.append(host);
|
|
38
|
+
}
|
|
39
|
+
portalHost = host;
|
|
25
40
|
}
|
|
26
|
-
let host = document.querySelector(`#${POPOVER_PORTAL_ID}`);
|
|
27
|
-
if (!host) {
|
|
28
|
-
host = document.createElement("div");
|
|
29
|
-
host.id = POPOVER_PORTAL_ID;
|
|
30
|
-
host.style.overflow = "visible";
|
|
31
|
-
document.body.append(host);
|
|
32
|
-
}
|
|
33
|
-
portalHost = host;
|
|
34
|
-
}
|
|
35
41
|
};
|
|
42
|
+
// ----- Body Height Change ----- //
|
|
36
43
|
let bodyHeight = 0;
|
|
44
|
+
// create an Observer instance
|
|
37
45
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
38
|
-
|
|
46
|
+
bodyHeight = entries[0].target.clientHeight;
|
|
39
47
|
});
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
// ----- Position ----- //
|
|
49
|
+
$: middleware = [offset({ mainAxis: mainAxisOffset, crossAxis: crossAxisOffset }), flip()];
|
|
42
50
|
const computePopoverPosition = async () => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
let cleanupAutoUpdate = () => {
|
|
51
|
+
if (reference && popupRef) {
|
|
52
|
+
popupPosition = await computePosition(reference, popupRef, {
|
|
53
|
+
placement: floatingUIPlacement,
|
|
54
|
+
middleware
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
popupPosition = { x: 0, y: 0 };
|
|
59
|
+
}
|
|
53
60
|
};
|
|
61
|
+
// whenever a positioned element is portaled it needs resubscription to auto-update
|
|
62
|
+
let cleanupAutoUpdate = () => { };
|
|
54
63
|
const autoUpdatePopoverPosition = () => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
cleanupAutoUpdate();
|
|
65
|
+
if (reference && popupRef) {
|
|
66
|
+
cleanupAutoUpdate = autoUpdate(reference, popupRef, computePopoverPosition);
|
|
67
|
+
}
|
|
59
68
|
};
|
|
60
|
-
$:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
open, bodyHeight, middleware, floatingUIPlacement, computePopoverPosition();
|
|
69
|
+
$: popupRef, reference, autoUpdatePopoverPosition();
|
|
70
|
+
$: open, bodyHeight, middleware, floatingUIPlacement, computePopoverPosition();
|
|
71
|
+
// ----- EventHandlers ----- //
|
|
64
72
|
onMount(() => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
ensurePortalHost();
|
|
74
|
+
// start observing a DOM node
|
|
75
|
+
resizeObserver.observe(document.body);
|
|
76
|
+
return () => {
|
|
77
|
+
resizeObserver.unobserve(document.body);
|
|
78
|
+
};
|
|
70
79
|
});
|
|
71
80
|
const onKeydown = (event) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
if (event.key === 'Escape') {
|
|
82
|
+
open = false;
|
|
83
|
+
}
|
|
75
84
|
};
|
|
76
85
|
ensurePortalHost();
|
|
77
86
|
</script>
|
|
78
87
|
|
|
79
88
|
{#if open || !conditionalRender}
|
|
80
89
|
<div use:portal={{ target: portalHost ?? document.body }} class="sterling-popover-portal">
|
|
90
|
+
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
81
91
|
<div
|
|
82
92
|
bind:this={popupRef}
|
|
83
|
-
class=
|
|
93
|
+
class={`sterling-popover ${variant}`}
|
|
84
94
|
class:open
|
|
85
95
|
on:blur
|
|
86
96
|
on:click
|
|
@@ -113,31 +123,7 @@ ensurePortalHost();
|
|
|
113
123
|
{...$$restProps}
|
|
114
124
|
style="left:{popupPosition.x}px; top:{popupPosition.y}px"
|
|
115
125
|
>
|
|
116
|
-
<slot />
|
|
126
|
+
<slot {open} {variant} />
|
|
117
127
|
</div>
|
|
118
128
|
</div>
|
|
119
129
|
{/if}
|
|
120
|
-
|
|
121
|
-
<style>
|
|
122
|
-
.sterling-popover-portal {
|
|
123
|
-
position: relative;
|
|
124
|
-
overflow: visible;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.sterling-popover {
|
|
128
|
-
box-sizing: border-box;
|
|
129
|
-
display: none;
|
|
130
|
-
grid-template-columns: 1fr;
|
|
131
|
-
grid-template-rows: 1fr;
|
|
132
|
-
height: fit-content;
|
|
133
|
-
left: 0;
|
|
134
|
-
overflow: visible;
|
|
135
|
-
position: absolute;
|
|
136
|
-
top: 0;
|
|
137
|
-
width: max-content;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.sterling-popover.open {
|
|
141
|
-
display: grid;
|
|
142
|
-
}
|
|
143
|
-
</style>
|
package/Popover.svelte.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ declare const __propDef: {
|
|
|
9
9
|
placement?: string | undefined;
|
|
10
10
|
portalHost?: HTMLElement | undefined;
|
|
11
11
|
reference: HTMLElement | undefined;
|
|
12
|
+
variant?: string | undefined;
|
|
12
13
|
};
|
|
13
14
|
events: {
|
|
14
15
|
blur: FocusEvent;
|
|
@@ -42,7 +43,10 @@ declare const __propDef: {
|
|
|
42
43
|
[evt: string]: CustomEvent<any>;
|
|
43
44
|
};
|
|
44
45
|
slots: {
|
|
45
|
-
default: {
|
|
46
|
+
default: {
|
|
47
|
+
open: boolean;
|
|
48
|
+
variant: string;
|
|
49
|
+
};
|
|
46
50
|
};
|
|
47
51
|
};
|
|
48
52
|
export type PopoverProps = typeof __propDef.props;
|