@geoffcox/sterling-svelte 0.0.15 → 0.0.16
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 +9 -3
- package/buttons/MenuButton.svelte +102 -0
- package/buttons/MenuButton.svelte.d.ts +54 -0
- package/clickOutside.js +3 -1
- package/containers/List.svelte +1 -1
- package/containers/Menu.svelte +100 -0
- package/containers/Menu.svelte.d.ts +20 -0
- package/containers/MenuBar.svelte +97 -0
- package/containers/MenuBar.svelte.d.ts +43 -0
- package/containers/MenuItem.svelte +350 -0
- package/containers/MenuItem.svelte.d.ts +61 -0
- package/containers/MenuItemDisplay.svelte +97 -0
- package/containers/MenuItemDisplay.svelte.d.ts +21 -0
- package/containers/MenuSeparator.svelte +42 -0
- package/containers/MenuSeparator.svelte.d.ts +76 -0
- package/containers/Menus.constants.d.ts +2 -0
- package/containers/Menus.constants.js +2 -0
- package/containers/Menus.types.d.ts +22 -0
- package/containers/Menus.types.js +1 -0
- package/containers/Menus.utils.d.ts +5 -0
- package/containers/Menus.utils.js +20 -0
- package/containers/Tab.svelte +3 -3
- package/containers/TreeNode.svelte +0 -1
- package/forwardEvents.d.ts +12 -0
- package/forwardEvents.js +34 -0
- package/index.d.ts +9 -2
- package/index.js +7 -1
- package/inputs/Checkbox.svelte +1 -1
- package/inputs/Select.svelte +4 -4
- package/inputs/TextArea.svelte +1 -1
- package/package.json +14 -1
- package/portal.d.ts +8 -0
- package/portal.js +19 -0
- package/surfaces/Portal.svelte +14 -0
- package/surfaces/Portal.svelte.d.ts +21 -0
package/containers/Tab.svelte
CHANGED
|
@@ -179,14 +179,11 @@ const onKeydown = (event) => {
|
|
|
179
179
|
tabindex={selected ? 0 : -1}
|
|
180
180
|
type="button"
|
|
181
181
|
on:blur
|
|
182
|
-
on:click={onClick}
|
|
183
182
|
on:click
|
|
184
183
|
on:dblclick
|
|
185
|
-
on:focus={onFocus}
|
|
186
184
|
on:focus
|
|
187
185
|
on:focusin
|
|
188
186
|
on:focusout
|
|
189
|
-
on:keydown={onKeydown}
|
|
190
187
|
on:keydown
|
|
191
188
|
on:keypress
|
|
192
189
|
on:keyup
|
|
@@ -206,6 +203,9 @@ const onKeydown = (event) => {
|
|
|
206
203
|
on:pointerout
|
|
207
204
|
on:pointerup
|
|
208
205
|
on:wheel
|
|
206
|
+
on:click={onClick}
|
|
207
|
+
on:focus={onFocus}
|
|
208
|
+
on:keydown={onKeydown}
|
|
209
209
|
>
|
|
210
210
|
<div class="content">
|
|
211
211
|
<slot {data} disabled={_disabled} {selected} tabId={_tabId} text={_text}>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const forwardEvents: (node: HTMLElement, params: {
|
|
2
|
+
target: HTMLElement;
|
|
3
|
+
events?: string[];
|
|
4
|
+
customEvents?: string[];
|
|
5
|
+
}) => {
|
|
6
|
+
update: (params: {
|
|
7
|
+
target: HTMLElement;
|
|
8
|
+
events?: string[];
|
|
9
|
+
customEvents?: [];
|
|
10
|
+
}) => void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
};
|
package/forwardEvents.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { custom_event } from 'svelte/internal';
|
|
2
|
+
export const forwardEvents = (node, params) => {
|
|
3
|
+
const addListeners = (node, target, events, customEvents) => {
|
|
4
|
+
let forward = (event) => {
|
|
5
|
+
console.log('forward', node, target, event);
|
|
6
|
+
target.dispatchEvent(event);
|
|
7
|
+
};
|
|
8
|
+
let forwardCustom = (event) => {
|
|
9
|
+
console.log('custom forward', node, target, event);
|
|
10
|
+
const customEvent = event;
|
|
11
|
+
target.dispatchEvent(custom_event(customEvent.type, customEvent.detail, {
|
|
12
|
+
bubbles: customEvent.bubbles,
|
|
13
|
+
cancelable: customEvent.cancelable
|
|
14
|
+
}));
|
|
15
|
+
};
|
|
16
|
+
events?.forEach((e) => node.addEventListener(e, forward));
|
|
17
|
+
customEvents?.forEach((e) => node.addEventListener(e, forwardCustom));
|
|
18
|
+
return () => {
|
|
19
|
+
events?.forEach((e) => node.removeEventListener(e, forward));
|
|
20
|
+
customEvents?.forEach((e) => node.removeEventListener(e, forwardCustom));
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
let unsubscribe = addListeners(node, params.target, params.events, params.customEvents);
|
|
24
|
+
const update = (params) => {
|
|
25
|
+
unsubscribe();
|
|
26
|
+
unsubscribe = addListeners(node, params.target, params.events, params.customEvents);
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
update,
|
|
30
|
+
destroy() {
|
|
31
|
+
unsubscribe();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
};
|
package/index.d.ts
CHANGED
|
@@ -6,18 +6,25 @@ export { darkTheme } from './theme/darkTheme';
|
|
|
6
6
|
export { lightTheme } from './theme/lightTheme';
|
|
7
7
|
export { neutrals } from './theme/colors';
|
|
8
8
|
export { toggleDarkTheme } from './theme/toggleDarkTheme';
|
|
9
|
+
export { clickOutside } from './clickOutside';
|
|
10
|
+
export { menuBarContextKey, menuItemContextKey } from './containers/Menus.constants';
|
|
9
11
|
export type { ButtonVariant, ButtonShape } from './buttons/Button.types';
|
|
12
|
+
export type { MenuItemRegistration, MenuBarContext, MenuItemContext } from './containers/Menus.types';
|
|
10
13
|
export type { ProgressColorful } from './display/Progress.types';
|
|
11
14
|
export type { TextAreaResize } from './inputs/TextArea.types';
|
|
12
15
|
export type { TabData } from './containers/Tabs.types';
|
|
13
16
|
export type { TreeNodeData } from './containers/Tree.types';
|
|
14
|
-
export { clickOutside } from './clickOutside';
|
|
15
17
|
import Button from './buttons/Button.svelte';
|
|
16
18
|
import Checkbox from './inputs/Checkbox.svelte';
|
|
17
19
|
import Dialog from './surfaces/Dialog.svelte';
|
|
18
20
|
import Input from './inputs/Input.svelte';
|
|
19
21
|
import Label from './display/Label.svelte';
|
|
20
22
|
import List from './containers/List.svelte';
|
|
23
|
+
import Menu from './containers/Menu.svelte';
|
|
24
|
+
import MenuBar from './containers/MenuBar.svelte';
|
|
25
|
+
import MenuButton from './buttons/MenuButton.svelte';
|
|
26
|
+
import MenuItem from './containers/MenuItem.svelte';
|
|
27
|
+
import MenuSeparator from './containers/MenuSeparator.svelte';
|
|
21
28
|
import Progress from './display/Progress.svelte';
|
|
22
29
|
import Radio from './inputs/Radio.svelte';
|
|
23
30
|
import Select from './inputs/Select.svelte';
|
|
@@ -29,4 +36,4 @@ import TextArea from './inputs/TextArea.svelte';
|
|
|
29
36
|
import Tree from './containers/Tree.svelte';
|
|
30
37
|
import TreeChevron from './containers/TreeChevron.svelte';
|
|
31
38
|
import TreeItem from './containers/TreeItem.svelte';
|
|
32
|
-
export { Button, Checkbox, Dialog, Input, Label, List, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tree, TreeChevron, TreeItem };
|
|
39
|
+
export { Button, Checkbox, Dialog, Input, Label, List, Menu, MenuBar, MenuButton, MenuItem, MenuSeparator, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tree, TreeChevron, TreeItem };
|
package/index.js
CHANGED
|
@@ -7,12 +7,18 @@ export { lightTheme } from './theme/lightTheme';
|
|
|
7
7
|
export { neutrals } from './theme/colors';
|
|
8
8
|
export { toggleDarkTheme } from './theme/toggleDarkTheme';
|
|
9
9
|
export { clickOutside } from './clickOutside';
|
|
10
|
+
export { menuBarContextKey, menuItemContextKey } from './containers/Menus.constants';
|
|
10
11
|
import Button from './buttons/Button.svelte';
|
|
11
12
|
import Checkbox from './inputs/Checkbox.svelte';
|
|
12
13
|
import Dialog from './surfaces/Dialog.svelte';
|
|
13
14
|
import Input from './inputs/Input.svelte';
|
|
14
15
|
import Label from './display/Label.svelte';
|
|
15
16
|
import List from './containers/List.svelte';
|
|
17
|
+
import Menu from './containers/Menu.svelte';
|
|
18
|
+
import MenuBar from './containers/MenuBar.svelte';
|
|
19
|
+
import MenuButton from './buttons/MenuButton.svelte';
|
|
20
|
+
import MenuItem from './containers/MenuItem.svelte';
|
|
21
|
+
import MenuSeparator from './containers/MenuSeparator.svelte';
|
|
16
22
|
import Progress from './display/Progress.svelte';
|
|
17
23
|
import Radio from './inputs/Radio.svelte';
|
|
18
24
|
import Select from './inputs/Select.svelte';
|
|
@@ -24,4 +30,4 @@ import TextArea from './inputs/TextArea.svelte';
|
|
|
24
30
|
import Tree from './containers/Tree.svelte';
|
|
25
31
|
import TreeChevron from './containers/TreeChevron.svelte';
|
|
26
32
|
import TreeItem from './containers/TreeItem.svelte';
|
|
27
|
-
export { Button, Checkbox, Dialog, Input, Label, List, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tree, TreeChevron, TreeItem };
|
|
33
|
+
export { Button, Checkbox, Dialog, Input, Label, List, Menu, MenuBar, MenuButton, MenuItem, MenuSeparator, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tree, TreeChevron, TreeItem };
|
package/inputs/Checkbox.svelte
CHANGED
package/inputs/Select.svelte
CHANGED
|
@@ -142,7 +142,6 @@ A single item that can be selected from a popup list of items.
|
|
|
142
142
|
-->
|
|
143
143
|
<div
|
|
144
144
|
bind:this={selectRef}
|
|
145
|
-
use:clickOutside
|
|
146
145
|
aria-controls={popupId}
|
|
147
146
|
aria-haspopup="listbox"
|
|
148
147
|
aria-expanded={open}
|
|
@@ -150,8 +149,7 @@ A single item that can be selected from a popup list of items.
|
|
|
150
149
|
class:disabled
|
|
151
150
|
role="combobox"
|
|
152
151
|
tabindex="0"
|
|
153
|
-
|
|
154
|
-
on:click={onSelectClick}
|
|
152
|
+
use:clickOutside
|
|
155
153
|
on:blur
|
|
156
154
|
on:click
|
|
157
155
|
on:copy
|
|
@@ -160,7 +158,6 @@ A single item that can be selected from a popup list of items.
|
|
|
160
158
|
on:focus
|
|
161
159
|
on:focusin
|
|
162
160
|
on:focusout
|
|
163
|
-
on:keydown={onSelectKeydown}
|
|
164
161
|
on:keydown
|
|
165
162
|
on:keypress
|
|
166
163
|
on:keyup
|
|
@@ -173,6 +170,9 @@ A single item that can be selected from a popup list of items.
|
|
|
173
170
|
on:mouseup
|
|
174
171
|
on:wheel
|
|
175
172
|
on:paste
|
|
173
|
+
on:click={onSelectClick}
|
|
174
|
+
on:click_outside={() => (open = false)}
|
|
175
|
+
on:keydown={onSelectKeydown}
|
|
176
176
|
{...$$restProps}
|
|
177
177
|
>
|
|
178
178
|
{#if $$slots.label}
|
package/inputs/TextArea.svelte
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoffcox/sterling-svelte",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"author": "Geoff Cox",
|
|
5
5
|
"description": "A modern, accessible, and lightweight component library for Svelte.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"type": "module",
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@floating-ui/dom": "^1.1.0",
|
|
48
|
+
"keyborg": "^2.0.0",
|
|
48
49
|
"lodash-es": "^4.17.21",
|
|
49
50
|
"uuid": "^9.0.0"
|
|
50
51
|
},
|
|
@@ -52,9 +53,18 @@
|
|
|
52
53
|
"./package.json": "./package.json",
|
|
53
54
|
"./buttons/Button.svelte": "./buttons/Button.svelte",
|
|
54
55
|
"./buttons/Button.types": "./buttons/Button.types.js",
|
|
56
|
+
"./buttons/MenuButton.svelte": "./buttons/MenuButton.svelte",
|
|
55
57
|
"./clickOutside": "./clickOutside.js",
|
|
56
58
|
"./containers/List.svelte": "./containers/List.svelte",
|
|
57
59
|
"./containers/ListItem.svelte": "./containers/ListItem.svelte",
|
|
60
|
+
"./containers/Menu.svelte": "./containers/Menu.svelte",
|
|
61
|
+
"./containers/MenuBar.svelte": "./containers/MenuBar.svelte",
|
|
62
|
+
"./containers/MenuItem.svelte": "./containers/MenuItem.svelte",
|
|
63
|
+
"./containers/MenuItemDisplay.svelte": "./containers/MenuItemDisplay.svelte",
|
|
64
|
+
"./containers/MenuSeparator.svelte": "./containers/MenuSeparator.svelte",
|
|
65
|
+
"./containers/Menus.constants": "./containers/Menus.constants.js",
|
|
66
|
+
"./containers/Menus.types": "./containers/Menus.types.js",
|
|
67
|
+
"./containers/Menus.utils": "./containers/Menus.utils.js",
|
|
58
68
|
"./containers/Tab.svelte": "./containers/Tab.svelte",
|
|
59
69
|
"./containers/TabList.svelte": "./containers/TabList.svelte",
|
|
60
70
|
"./containers/Tabs.constants": "./containers/Tabs.constants.js",
|
|
@@ -68,6 +78,7 @@
|
|
|
68
78
|
"./display/Label.svelte": "./display/Label.svelte",
|
|
69
79
|
"./display/Progress.svelte": "./display/Progress.svelte",
|
|
70
80
|
"./display/Progress.types": "./display/Progress.types.js",
|
|
81
|
+
"./forwardEvents": "./forwardEvents.js",
|
|
71
82
|
".": "./index.js",
|
|
72
83
|
"./inputs/Checkbox.svelte": "./inputs/Checkbox.svelte",
|
|
73
84
|
"./inputs/Input.svelte": "./inputs/Input.svelte",
|
|
@@ -77,8 +88,10 @@
|
|
|
77
88
|
"./inputs/Switch.svelte": "./inputs/Switch.svelte",
|
|
78
89
|
"./inputs/TextArea.svelte": "./inputs/TextArea.svelte",
|
|
79
90
|
"./inputs/TextArea.types": "./inputs/TextArea.types.js",
|
|
91
|
+
"./portal": "./portal.js",
|
|
80
92
|
"./surfaces/CloseX.svelte": "./surfaces/CloseX.svelte",
|
|
81
93
|
"./surfaces/Dialog.svelte": "./surfaces/Dialog.svelte",
|
|
94
|
+
"./surfaces/Portal.svelte": "./surfaces/Portal.svelte",
|
|
82
95
|
"./theme/applyDarkTheme": "./theme/applyDarkTheme.js",
|
|
83
96
|
"./theme/applyLightTheme": "./theme/applyLightTheme.js",
|
|
84
97
|
"./theme/applyTheme": "./theme/applyTheme.js",
|
package/portal.d.ts
ADDED
package/portal.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const portal = (node, params) => {
|
|
2
|
+
const child = node;
|
|
3
|
+
let portaled = false;
|
|
4
|
+
const createPortal = (node, params) => {
|
|
5
|
+
if (!portaled && params.target && node) {
|
|
6
|
+
params.target.appendChild(node);
|
|
7
|
+
portaled = true;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
createPortal(child, params);
|
|
11
|
+
return {
|
|
12
|
+
update: (params) => createPortal(child, params),
|
|
13
|
+
destroy() {
|
|
14
|
+
if (portaled) {
|
|
15
|
+
child?.parentNode?.removeChild(child);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>import { portal } from "../portal";
|
|
2
|
+
export let target = document.body;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="portal" use:portal={{ target }}>
|
|
6
|
+
<slot {...$$restProps} />
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<style>
|
|
10
|
+
.portal {
|
|
11
|
+
position: relative;
|
|
12
|
+
overflow: visible;
|
|
13
|
+
}
|
|
14
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
target?: HTMLElement | undefined;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {
|
|
11
|
+
default: {
|
|
12
|
+
[x: string]: any;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export type PortalProps = typeof __propDef.props;
|
|
17
|
+
export type PortalEvents = typeof __propDef.events;
|
|
18
|
+
export type PortalSlots = typeof __propDef.slots;
|
|
19
|
+
export default class Portal extends SvelteComponentTyped<PortalProps, PortalEvents, PortalSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|