@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.
@@ -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}>
@@ -104,7 +104,6 @@ const selectPreviousNode = () => {
104
104
  }
105
105
  };
106
106
  const onItemClick = () => {
107
- console.log("onItemClick");
108
107
  toggleExpanded();
109
108
  selectNode();
110
109
  };
@@ -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
+ };
@@ -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 };
@@ -136,7 +136,7 @@ const inputId = uuid();
136
136
  height: 14px;
137
137
  left: 50%;
138
138
  position: absolute;
139
- top: 50%;
139
+ top: 45%;
140
140
  transform: translate(-50%, -50%) rotate(45deg);
141
141
  transform-origin: center;
142
142
  transition: border-color 250ms;
@@ -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
- on:click_outside={() => (open = false)}
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}
@@ -39,7 +39,6 @@ $:
39
39
  on:focus
40
40
  on:focusin
41
41
  on:focusout
42
- on:input={onInput}
43
42
  on:input
44
43
  on:invalid
45
44
  on:keydown
@@ -56,6 +55,7 @@ $:
56
55
  on:submit
57
56
  on:reset
58
57
  on:wheel
58
+ on:input={onInput}
59
59
  {disabled}
60
60
  rows="1"
61
61
  {...$$restProps}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoffcox/sterling-svelte",
3
- "version": "0.0.15",
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
@@ -0,0 +1,8 @@
1
+ export declare const portal: (node: HTMLElement, params: {
2
+ target: HTMLElement;
3
+ }) => {
4
+ update: (params: {
5
+ target: HTMLElement;
6
+ }) => void;
7
+ destroy(): void;
8
+ };
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 {};