@geoffcox/sterling-svelte 0.0.24 → 0.0.26

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.
@@ -1,3 +1,14 @@
1
- export declare const clickOutside: (node: HTMLElement) => {
1
+ type Params = {
2
+ /** Other elements should not raise the event if clicked. */
3
+ ignoreOthers?: HTMLElement[];
4
+ };
5
+ /**
6
+ * Raises the click_outside event when the user clicks outside the node.
7
+ * @param node The node to check and receive the event.
8
+ * @param params Additional parameters
9
+ */
10
+ export declare const clickOutside: (node: HTMLElement, params?: Params) => {
11
+ update(params: Params): void;
2
12
  destroy(): void;
3
13
  };
14
+ export {};
@@ -1,7 +1,15 @@
1
- export const clickOutside = (node) => {
1
+ /**
2
+ * Raises the click_outside event when the user clicks outside the node.
3
+ * @param node The node to check and receive the event.
4
+ * @param params Additional parameters
5
+ */
6
+ export const clickOutside = (node, params) => {
7
+ let ignoreOthers = params?.ignoreOthers;
2
8
  const handleClick = (event) => {
3
9
  const targetNode = event?.target;
4
- if (targetNode && !node.contains(targetNode)) {
10
+ if (targetNode &&
11
+ !node.contains(targetNode) &&
12
+ (!ignoreOthers || ignoreOthers.every((x) => !x.contains(targetNode)))) {
5
13
  node.dispatchEvent(new CustomEvent('click_outside', {
6
14
  detail: { mouseEvent: event }
7
15
  }));
@@ -9,6 +17,9 @@ export const clickOutside = (node) => {
9
17
  };
10
18
  document.addEventListener('click', handleClick, true);
11
19
  return {
20
+ update(params) {
21
+ ignoreOthers = params.ignoreOthers;
22
+ },
12
23
  destroy() {
13
24
  document.removeEventListener('click', handleClick, true);
14
25
  }
package/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export type { FloatingPlacement } from './floating-ui.types';
16
16
  export type { LinkVariant } from './Link.types';
17
17
  export type { ListContext } from './List.types';
18
18
  export type { MenuBarContext } from './MenuBar.types';
19
- export type { MenuItemContext, MenuItemRegistration } from './MenuItem.types';
19
+ export type { MenuItemContext, MenuItemRegistration, MenuItemRole } from './MenuItem.types';
20
20
  export type { ProgressColorful } from './Progress.types';
21
21
  export type { TabListContext } from './TabList.types';
22
22
  export type { TextAreaResize } from './TextArea.types';
@@ -29,7 +29,7 @@ export { FLOATING_PLACEMENTS } from './floating-ui.constants';
29
29
  export { LINK_VARIANTS } from './Link.constants';
30
30
  export { LIST_CONTEXT_KEY } from './List.constants';
31
31
  export { MENU_BAR_CONTEXT_KEY } from './MenuBar.constants';
32
- export { MENU_ITEM_CONTEXT_KEY } from './MenuItem.constants';
32
+ export { MENU_ITEM_CONTEXT_KEY, MENU_ITEM_ROLES } from './MenuItem.constants';
33
33
  export { PROGRESS_COLORFULS } from './Progress.constants';
34
34
  export { TAB_LIST_CONTEXT_KEY } from './TabList.constants';
35
35
  export { TEXT_AREA_RESIZES } from './TextArea.constants';
@@ -51,6 +51,7 @@ import MenuButton from './MenuButton.svelte';
51
51
  import MenuItem from './MenuItem.svelte';
52
52
  import MenuItemDisplay from './MenuItemDisplay.svelte';
53
53
  import MenuSeparator from './MenuSeparator.svelte';
54
+ import Popover from './Popover.svelte';
54
55
  import Progress from './Progress.svelte';
55
56
  import Radio from './Radio.svelte';
56
57
  import Select from './Select.svelte';
@@ -64,4 +65,4 @@ import Tree from './Tree.svelte';
64
65
  import TreeChevron from './TreeChevron.svelte';
65
66
  import TreeItem from './TreeItem.svelte';
66
67
  import TreeItemDisplay from './TreeItemDisplay.svelte';
67
- export { Button, Checkbox, Dialog, Dropdown, Field, Input, Label, Link, List, ListItem, Menu, MenuBar, MenuButton, MenuItem, MenuItemDisplay, MenuSeparator, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tooltip, Tree, TreeChevron, TreeItem, TreeItemDisplay };
68
+ export { Button, Checkbox, Dialog, Dropdown, Field, Input, Label, Link, List, ListItem, Menu, MenuBar, MenuButton, MenuItem, MenuItemDisplay, MenuSeparator, Popover, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tooltip, Tree, TreeChevron, TreeItem, TreeItemDisplay };
package/index.js CHANGED
@@ -20,7 +20,7 @@ export { FLOATING_PLACEMENTS } from './floating-ui.constants';
20
20
  export { LINK_VARIANTS } from './Link.constants';
21
21
  export { LIST_CONTEXT_KEY } from './List.constants';
22
22
  export { MENU_BAR_CONTEXT_KEY } from './MenuBar.constants';
23
- export { MENU_ITEM_CONTEXT_KEY } from './MenuItem.constants';
23
+ export { MENU_ITEM_CONTEXT_KEY, MENU_ITEM_ROLES } from './MenuItem.constants';
24
24
  export { PROGRESS_COLORFULS } from './Progress.constants';
25
25
  export { TAB_LIST_CONTEXT_KEY } from './TabList.constants';
26
26
  export { TEXT_AREA_RESIZES } from './TextArea.constants';
@@ -43,6 +43,7 @@ import MenuButton from './MenuButton.svelte';
43
43
  import MenuItem from './MenuItem.svelte';
44
44
  import MenuItemDisplay from './MenuItemDisplay.svelte';
45
45
  import MenuSeparator from './MenuSeparator.svelte';
46
+ import Popover from './Popover.svelte';
46
47
  import Progress from './Progress.svelte';
47
48
  import Radio from './Radio.svelte';
48
49
  import Select from './Select.svelte';
@@ -56,4 +57,4 @@ import Tree from './Tree.svelte';
56
57
  import TreeChevron from './TreeChevron.svelte';
57
58
  import TreeItem from './TreeItem.svelte';
58
59
  import TreeItemDisplay from './TreeItemDisplay.svelte';
59
- export { Button, Checkbox, Dialog, Dropdown, Field, Input, Label, Link, List, ListItem, Menu, MenuBar, MenuButton, MenuItem, MenuItemDisplay, MenuSeparator, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tooltip, Tree, TreeChevron, TreeItem, TreeItemDisplay };
60
+ export { Button, Checkbox, Dialog, Dropdown, Field, Input, Label, Link, List, ListItem, Menu, MenuBar, MenuButton, MenuItem, MenuItemDisplay, MenuSeparator, Popover, Progress, Radio, Select, Slider, Switch, Tab, TabList, TextArea, Tooltip, Tree, TreeChevron, TreeItem, TreeItemDisplay };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoffcox/sterling-svelte",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "author": "Geoff Cox",
5
5
  "description": "A modern, accessible, and lightweight component library for Svelte.",
6
6
  "license": "MIT",
@@ -78,6 +78,7 @@
78
78
  "./MenuItem.utils": "./MenuItem.utils.js",
79
79
  "./MenuItemDisplay.svelte": "./MenuItemDisplay.svelte",
80
80
  "./MenuSeparator.svelte": "./MenuSeparator.svelte",
81
+ "./Popover.svelte": "./Popover.svelte",
81
82
  "./Progress.constants": "./Progress.constants.js",
82
83
  "./Progress.svelte": "./Progress.svelte",
83
84
  "./Progress.types": "./Progress.types.js",
@@ -109,6 +110,8 @@
109
110
  "./floating-ui.types": "./floating-ui.types.js",
110
111
  "./idGenerator": "./idGenerator.js",
111
112
  ".": "./index.js",
113
+ "./stores/prefersReducedMotion": "./stores/prefersReducedMotion.js",
114
+ "./stores/usingKeyboard": "./stores/usingKeyboard.js",
112
115
  "./theme/applyDarkTheme": "./theme/applyDarkTheme.js",
113
116
  "./theme/applyLightTheme": "./theme/applyLightTheme.js",
114
117
  "./theme/applyTheme": "./theme/applyTheme.js",
@@ -0,0 +1 @@
1
+ export declare const prefersReducedMotion: import("svelte/store").Writable<boolean>;
@@ -0,0 +1,10 @@
1
+ import { writable } from 'svelte/store';
2
+ export const prefersReducedMotion = writable(false, (set) => {
3
+ const matchMedia = window.matchMedia('(prefers-reduced-motion: reduce)');
4
+ set(matchMedia.matches);
5
+ const mediaChangeHandler = (e) => set(e.matches);
6
+ matchMedia.addEventListener('change', mediaChangeHandler);
7
+ return () => {
8
+ matchMedia.removeEventListener('change', mediaChangeHandler);
9
+ };
10
+ });
@@ -0,0 +1 @@
1
+ export declare const usingKeyboard: import("svelte/store").Writable<boolean>;
@@ -0,0 +1,13 @@
1
+ import { createKeyborg } from 'keyborg';
2
+ import { writable } from 'svelte/store';
3
+ export const usingKeyboard = writable(false, (set) => {
4
+ let keyborg = createKeyborg(window);
5
+ set(keyborg.isNavigatingWithKeyboard());
6
+ const keyborgHandler = (value) => {
7
+ set(value);
8
+ };
9
+ keyborg.subscribe(keyborgHandler);
10
+ return () => {
11
+ keyborg.unsubscribe(keyborgHandler);
12
+ };
13
+ });