@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.
Files changed (127) hide show
  1. package/package.json +26 -28
  2. package/README.md +0 -18
  3. package/dist/@types/clickOutside.d.ts +0 -15
  4. package/dist/Button.svelte +0 -25
  5. package/dist/Button.svelte.d.ts +0 -9
  6. package/dist/Callout.svelte +0 -177
  7. package/dist/Callout.svelte.d.ts +0 -15
  8. package/dist/Callout.types.d.ts +0 -11
  9. package/dist/Callout.types.js +0 -1
  10. package/dist/Checkbox.svelte +0 -43
  11. package/dist/Checkbox.svelte.d.ts +0 -10
  12. package/dist/Dialog.svelte +0 -151
  13. package/dist/Dialog.svelte.d.ts +0 -14
  14. package/dist/Dropdown.svelte +0 -109
  15. package/dist/Dropdown.svelte.d.ts +0 -18
  16. package/dist/Input.svelte +0 -55
  17. package/dist/Input.svelte.d.ts +0 -12
  18. package/dist/Label.constants.d.ts +0 -2
  19. package/dist/Label.constants.js +0 -2
  20. package/dist/Label.svelte +0 -91
  21. package/dist/Label.svelte.d.ts +0 -17
  22. package/dist/Link.svelte +0 -25
  23. package/dist/Link.svelte.d.ts +0 -12
  24. package/dist/List.constants.d.ts +0 -1
  25. package/dist/List.constants.js +0 -1
  26. package/dist/List.svelte +0 -203
  27. package/dist/List.svelte.d.ts +0 -20
  28. package/dist/List.types.d.ts +0 -5
  29. package/dist/List.types.js +0 -1
  30. package/dist/ListItem.svelte +0 -49
  31. package/dist/ListItem.svelte.d.ts +0 -13
  32. package/dist/Menu.svelte +0 -83
  33. package/dist/Menu.svelte.d.ts +0 -13
  34. package/dist/MenuBar.constants.d.ts +0 -1
  35. package/dist/MenuBar.constants.js +0 -1
  36. package/dist/MenuBar.svelte +0 -113
  37. package/dist/MenuBar.svelte.d.ts +0 -13
  38. package/dist/MenuBar.types.d.ts +0 -4
  39. package/dist/MenuBar.types.js +0 -1
  40. package/dist/MenuButton.svelte +0 -116
  41. package/dist/MenuButton.svelte.d.ts +0 -20
  42. package/dist/MenuItem.constants.d.ts +0 -2
  43. package/dist/MenuItem.constants.js +0 -2
  44. package/dist/MenuItem.svelte +0 -342
  45. package/dist/MenuItem.svelte.d.ts +0 -22
  46. package/dist/MenuItem.types.d.ts +0 -20
  47. package/dist/MenuItem.types.js +0 -1
  48. package/dist/MenuItem.utils.d.ts +0 -7
  49. package/dist/MenuItem.utils.js +0 -36
  50. package/dist/MenuSeparator.svelte +0 -11
  51. package/dist/MenuSeparator.svelte.d.ts +0 -6
  52. package/dist/Popover.constants.d.ts +0 -1
  53. package/dist/Popover.constants.js +0 -14
  54. package/dist/Popover.svelte +0 -121
  55. package/dist/Popover.svelte.d.ts +0 -15
  56. package/dist/Popover.types.d.ts +0 -4
  57. package/dist/Popover.types.js +0 -1
  58. package/dist/Portal.constants.d.ts +0 -2
  59. package/dist/Portal.constants.js +0 -2
  60. package/dist/Portal.types.d.ts +0 -6
  61. package/dist/Portal.types.js +0 -1
  62. package/dist/Progress.constants.d.ts +0 -1
  63. package/dist/Progress.constants.js +0 -1
  64. package/dist/Progress.svelte +0 -36
  65. package/dist/Progress.svelte.d.ts +0 -12
  66. package/dist/Progress.types.d.ts +0 -4
  67. package/dist/Progress.types.js +0 -1
  68. package/dist/Radio.svelte +0 -53
  69. package/dist/Radio.svelte.d.ts +0 -13
  70. package/dist/Select.svelte +0 -196
  71. package/dist/Select.svelte.d.ts +0 -20
  72. package/dist/Slider.svelte +0 -133
  73. package/dist/Slider.svelte.d.ts +0 -19
  74. package/dist/Switch.svelte +0 -61
  75. package/dist/Switch.svelte.d.ts +0 -21
  76. package/dist/Tab.svelte +0 -51
  77. package/dist/Tab.svelte.d.ts +0 -12
  78. package/dist/TabList.constants.d.ts +0 -1
  79. package/dist/TabList.constants.js +0 -1
  80. package/dist/TabList.svelte +0 -202
  81. package/dist/TabList.svelte.d.ts +0 -18
  82. package/dist/TabList.types.d.ts +0 -5
  83. package/dist/TabList.types.js +0 -1
  84. package/dist/TextArea.constants.d.ts +0 -1
  85. package/dist/TextArea.constants.js +0 -1
  86. package/dist/TextArea.svelte +0 -74
  87. package/dist/TextArea.svelte.d.ts +0 -19
  88. package/dist/TextArea.types.d.ts +0 -4
  89. package/dist/TextArea.types.js +0 -1
  90. package/dist/Tooltip.svelte +0 -63
  91. package/dist/Tooltip.svelte.d.ts +0 -10
  92. package/dist/Tree.constants.d.ts +0 -1
  93. package/dist/Tree.constants.js +0 -1
  94. package/dist/Tree.svelte +0 -53
  95. package/dist/Tree.svelte.d.ts +0 -15
  96. package/dist/Tree.types.d.ts +0 -5
  97. package/dist/Tree.types.js +0 -1
  98. package/dist/TreeChevron.svelte +0 -27
  99. package/dist/TreeChevron.svelte.d.ts +0 -9
  100. package/dist/TreeItem.constants.d.ts +0 -1
  101. package/dist/TreeItem.constants.js +0 -1
  102. package/dist/TreeItem.svelte +0 -329
  103. package/dist/TreeItem.svelte.d.ts +0 -22
  104. package/dist/TreeItem.types.d.ts +0 -4
  105. package/dist/TreeItem.types.js +0 -1
  106. package/dist/actions/applyLightDarkMode.d.ts +0 -10
  107. package/dist/actions/applyLightDarkMode.js +0 -36
  108. package/dist/actions/clickOutside.d.ts +0 -15
  109. package/dist/actions/clickOutside.js +0 -28
  110. package/dist/actions/extraClass.d.ts +0 -8
  111. package/dist/actions/extraClass.js +0 -14
  112. package/dist/actions/forwardEvents.d.ts +0 -12
  113. package/dist/actions/forwardEvents.js +0 -32
  114. package/dist/actions/portal.d.ts +0 -8
  115. package/dist/actions/portal.js +0 -19
  116. package/dist/actions/trapKeyboardFocus.d.ts +0 -3
  117. package/dist/actions/trapKeyboardFocus.js +0 -52
  118. package/dist/idGenerator.d.ts +0 -4
  119. package/dist/idGenerator.js +0 -10
  120. package/dist/index.d.ts +0 -59
  121. package/dist/index.js +0 -54
  122. package/dist/mediaQueries/prefersColorSchemeDark.d.ts +0 -2
  123. package/dist/mediaQueries/prefersColorSchemeDark.js +0 -14
  124. package/dist/mediaQueries/prefersReducedMotion.d.ts +0 -2
  125. package/dist/mediaQueries/prefersReducedMotion.js +0 -14
  126. package/dist/mediaQueries/usingKeyboard.d.ts +0 -2
  127. 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>
@@ -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';
@@ -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>
@@ -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;
@@ -1,4 +0,0 @@
1
- export type MenuBarContext = {
2
- openPreviousMenuBarItem?: () => void;
3
- openNextMenuBarItem?: () => void;
4
- };
@@ -1 +0,0 @@
1
- export {};
@@ -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;
@@ -1,2 +0,0 @@
1
- export declare const MENU_ITEM_CONTEXT_KEY = "sterlingMenuItem";
2
- export declare const MENU_ITEM_ROLES: readonly ["menuitem", "menuitemcheckbox", "menuitemradio"];
@@ -1,2 +0,0 @@
1
- export const MENU_ITEM_CONTEXT_KEY = 'sterlingMenuItem';
2
- export const MENU_ITEM_ROLES = ['menuitem', 'menuitemcheckbox', 'menuitemradio'];