@geoffcox/sterling-svelte 2.0.1 → 2.0.3

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 (71) hide show
  1. package/README.md +1 -1
  2. package/dist/Button.svelte +18 -14
  3. package/dist/Button.svelte.d.ts +0 -1
  4. package/dist/Callout.svelte +162 -96
  5. package/dist/Callout.svelte.d.ts +1 -2
  6. package/dist/Checkbox.svelte +34 -15
  7. package/dist/Checkbox.svelte.d.ts +0 -1
  8. package/dist/Dialog.svelte +121 -71
  9. package/dist/Dialog.svelte.d.ts +1 -1
  10. package/dist/Dropdown.svelte +106 -56
  11. package/dist/Dropdown.svelte.d.ts +8 -3
  12. package/dist/Input.svelte +54 -29
  13. package/dist/Input.svelte.d.ts +1 -2
  14. package/dist/Label.svelte +99 -55
  15. package/dist/Label.svelte.d.ts +4 -4
  16. package/dist/Link.svelte +20 -14
  17. package/dist/Link.svelte.d.ts +0 -1
  18. package/dist/List.svelte +181 -126
  19. package/dist/List.svelte.d.ts +0 -1
  20. package/dist/ListItem.svelte +36 -21
  21. package/dist/ListItem.svelte.d.ts +0 -1
  22. package/dist/Menu.svelte +67 -45
  23. package/dist/Menu.svelte.d.ts +0 -1
  24. package/dist/MenuBar.svelte +96 -65
  25. package/dist/MenuBar.svelte.d.ts +0 -1
  26. package/dist/MenuButton.svelte +102 -62
  27. package/dist/MenuButton.svelte.d.ts +1 -1
  28. package/dist/MenuItem.svelte +332 -243
  29. package/dist/MenuItem.svelte.d.ts +3 -3
  30. package/dist/MenuSeparator.svelte +7 -7
  31. package/dist/MenuSeparator.svelte.d.ts +0 -1
  32. package/dist/Pagination.svelte +267 -0
  33. package/dist/Pagination.svelte.d.ts +4 -0
  34. package/dist/Pagination.types.d.ts +24 -0
  35. package/dist/Pagination.types.js +1 -0
  36. package/dist/Popover.svelte +114 -60
  37. package/dist/Popover.svelte.d.ts +1 -2
  38. package/dist/Portal.types.d.ts +1 -4
  39. package/dist/Progress.svelte +40 -15
  40. package/dist/Progress.svelte.d.ts +0 -1
  41. package/dist/Radio.svelte +37 -25
  42. package/dist/Radio.svelte.d.ts +0 -1
  43. package/dist/Select.svelte +191 -125
  44. package/dist/Select.svelte.d.ts +8 -2
  45. package/dist/Slider.svelte +120 -71
  46. package/dist/Slider.svelte.d.ts +0 -1
  47. package/dist/Switch.svelte +51 -20
  48. package/dist/Switch.svelte.d.ts +1 -1
  49. package/dist/Tab.svelte +39 -24
  50. package/dist/Tab.svelte.d.ts +0 -1
  51. package/dist/TabList.svelte +176 -125
  52. package/dist/TabList.svelte.d.ts +0 -1
  53. package/dist/TextArea.svelte +83 -41
  54. package/dist/TextArea.svelte.d.ts +2 -3
  55. package/dist/Tooltip.svelte +68 -36
  56. package/dist/Tree.svelte +52 -24
  57. package/dist/Tree.svelte.d.ts +0 -1
  58. package/dist/TreeChevron.svelte +24 -12
  59. package/dist/TreeChevron.svelte.d.ts +0 -1
  60. package/dist/TreeItem.svelte +292 -225
  61. package/dist/TreeItem.svelte.d.ts +1 -1
  62. package/dist/actions/extraClass.d.ts +1 -0
  63. package/dist/actions/extraClass.js +1 -0
  64. package/dist/idGenerator.d.ts +1 -0
  65. package/dist/idGenerator.js +1 -0
  66. package/dist/index.d.ts +3 -2
  67. package/dist/index.js +3 -2
  68. package/dist/mediaQueries/prefersColorSchemeDark.d.ts +0 -1
  69. package/dist/mediaQueries/prefersReducedMotion.d.ts +0 -1
  70. package/dist/mediaQueries/usingKeyboard.d.ts +0 -1
  71. package/package.json +21 -22
@@ -1,67 +1,109 @@
1
1
  <svelte:options runes={true} />
2
2
 
3
- <script lang="ts">import { tick } from 'svelte';
4
- let { class: _class, disabled = false, value = $bindable(''), autoHeight = false, resize = $bindable('none'), style, ...rest } = $props();
5
- let textAreaRef;
6
- const correctResize = async () => {
3
+ <script lang="ts">
4
+ import { tick } from 'svelte';
5
+ import type { FormEventHandler, HTMLTextareaAttributes } from 'svelte/elements';
6
+ import type { TextAreaResize } from './TextArea.types';
7
+
8
+ type Props = HTMLTextareaAttributes & {
9
+ autoHeight?: boolean | null | undefined;
10
+ disabled?: boolean | null | undefined;
11
+ value?: string;
12
+ resize?: TextAreaResize;
13
+ };
14
+
15
+ let {
16
+ class: _class,
17
+ disabled = false,
18
+ value = $bindable(''),
19
+ autoHeight = false,
20
+ resize = $bindable('none'),
21
+ style,
22
+ ...rest
23
+ }: Props = $props();
24
+
25
+ let textAreaRef: HTMLTextAreaElement;
26
+
27
+ const correctResize = async () => {
7
28
  await tick();
8
29
  setTimeout(() => {
9
- if (autoHeight) {
10
- if (resize === 'both') {
11
- console.warn('The resize property cannot be set to "both" when autoHeight is true. The resize property will be set to "horizontal".');
12
- resize = 'horizontal';
13
- }
14
- if (resize === 'vertical') {
15
- console.warn('The resize property cannot be set to "vertical" when autoHeight is true. The resize property will be set to "none".');
16
- resize = 'none';
17
- }
30
+ if (autoHeight) {
31
+ if (resize === 'both') {
32
+ console.warn(
33
+ 'The resize property cannot be set to "both" when autoHeight is true. The resize property will be set to "horizontal".'
34
+ );
35
+ resize = 'horizontal';
18
36
  }
37
+ if (resize === 'vertical') {
38
+ console.warn(
39
+ 'The resize property cannot be set to "vertical" when autoHeight is true. The resize property will be set to "none".'
40
+ );
41
+ resize = 'none';
42
+ }
43
+ }
19
44
  }, 0);
20
- };
21
- const autoSetHeight = () => {
45
+ };
46
+
47
+ const autoSetHeight = () => {
22
48
  if (autoHeight && textAreaRef) {
23
- // the style must be directly set to avoid re-rendering looping latency
24
- // setting to auto for a moment allows the textarea to shrink
25
- textAreaRef.style.height = 'auto';
26
- textAreaRef.style.height = `${textAreaRef.scrollHeight}px`;
49
+ // the style must be directly set to avoid re-rendering looping latency
50
+ // setting to auto for a moment allows the textarea to shrink
51
+ textAreaRef.style.height = 'auto';
52
+ textAreaRef.style.height = `${textAreaRef.scrollHeight}px`;
27
53
  }
28
- };
29
- $effect(() => {
54
+ };
55
+
56
+ $effect(() => {
30
57
  autoHeight;
31
58
  resize;
32
59
  correctResize();
33
60
  autoSetHeight();
34
- });
35
- const onInput = (event) => {
61
+ });
62
+
63
+ const onInput: FormEventHandler<HTMLTextAreaElement> = (event) => {
36
64
  autoSetHeight();
37
65
  rest.oninput?.(event);
38
- };
39
- export const blur = () => {
66
+ };
67
+
68
+ export const blur = () => {
40
69
  textAreaRef?.blur();
41
- };
42
- export const click = () => {
70
+ };
71
+
72
+ export const click = () => {
43
73
  textAreaRef?.click();
44
- };
45
- export const focus = (options) => {
74
+ };
75
+
76
+ export const focus = (options?: FocusOptions) => {
46
77
  textAreaRef?.focus();
47
- };
48
- export const select = () => {
78
+ };
79
+
80
+ export const select = () => {
49
81
  textAreaRef?.select();
50
- };
51
- export const setSelectionRange = (start, end, direction) => {
82
+ };
83
+
84
+ export const setSelectionRange = (
85
+ start: number | null,
86
+ end: number | null,
87
+ direction?: 'forward' | 'backward' | 'none'
88
+ ) => {
52
89
  textAreaRef?.setSelectionRange(start, end, direction);
53
- };
54
- export const setRangeText = (replacement, start, end, selectionMode) => {
90
+ };
91
+
92
+ export const setRangeText = (
93
+ replacement: string,
94
+ start?: number,
95
+ end?: number,
96
+ selectionMode?: SelectionMode
97
+ ) => {
55
98
  if (start && end) {
56
- textAreaRef?.setRangeText(replacement, start, end, selectionMode);
57
- }
58
- else {
59
- textAreaRef?.setRangeText(replacement);
99
+ textAreaRef?.setRangeText(replacement, start, end, selectionMode);
100
+ } else {
101
+ textAreaRef?.setRangeText(replacement);
60
102
  }
61
- };
103
+ };
62
104
  </script>
63
105
 
64
- <div class={`sterling-text-area ${_class}`} class:disabled>
106
+ <div class={['sterling-text-area', _class]} class:disabled>
65
107
  <textarea
66
108
  bind:this={textAreaRef}
67
109
  bind:value
@@ -1,6 +1,5 @@
1
- /// <reference types="svelte" />
2
- import type { TextAreaResize } from './TextArea.types';
3
1
  import type { HTMLTextareaAttributes } from 'svelte/elements';
2
+ import type { TextAreaResize } from './TextArea.types';
4
3
  type Props = HTMLTextareaAttributes & {
5
4
  autoHeight?: boolean | null | undefined;
6
5
  disabled?: boolean | null | undefined;
@@ -12,7 +11,7 @@ declare const TextArea: import("svelte").Component<Props, {
12
11
  click: () => void;
13
12
  focus: (options?: FocusOptions) => void;
14
13
  select: () => void;
15
- setSelectionRange: (start: number | null, end: number | null, direction?: 'forward' | 'backward' | 'none') => void;
14
+ setSelectionRange: (start: number | null, end: number | null, direction?: "forward" | "backward" | "none") => void;
16
15
  setRangeText: (replacement: string, start?: number, end?: number, selectionMode?: SelectionMode) => void;
17
16
  }, "value" | "resize">;
18
17
  type TextArea = ReturnType<typeof TextArea>;
@@ -1,58 +1,90 @@
1
1
  <svelte:options runes={true} />
2
2
 
3
- <script lang="ts">import { onMount } from 'svelte';
4
- import Callout from './Callout.svelte';
5
- let { children, class: _class, disabled = false, hoverDelayMilliseconds = 1000, open = $bindable(false), tip, ...rest } = $props();
6
- let originRef = $state();
7
- let reference = $derived(!!children ? originRef?.previousElementSibling : undefined);
8
- $inspect({ reference });
9
- const show = () => {
3
+ <script lang="ts">
4
+ import { onMount, type Snippet } from 'svelte';
5
+ import Callout from './Callout.svelte';
6
+ import type { CalloutProps } from './Callout.types';
7
+
8
+ type Props = Omit<CalloutProps, 'reference'> & {
9
+ disabled?: boolean;
10
+ hoverDelayMilliseconds?: number;
11
+ tip?: string | Snippet;
12
+ };
13
+
14
+ let {
15
+ children,
16
+ class: _class,
17
+ disabled = false,
18
+ hoverDelayMilliseconds = 1000,
19
+ open = $bindable(false),
20
+ tip,
21
+ ...rest
22
+ }: Props = $props();
23
+
24
+ let originRef: HTMLDivElement | undefined = $state();
25
+
26
+ let reference = $derived(
27
+ !!children ? (originRef?.previousElementSibling as HTMLElement) : undefined
28
+ );
29
+
30
+ const show = () => {
10
31
  if (!disabled) {
11
- open = true;
32
+ open = true;
12
33
  }
13
- };
14
- const hide = () => (open = false);
15
- const delayShow = () => {
34
+ };
35
+
36
+ const hide = () => (open = false);
37
+
38
+ const delayShow = () => {
16
39
  hoverDelayMilliseconds === 0
17
- ? show()
18
- : setTimeout(() => {
19
- show();
40
+ ? show()
41
+ : setTimeout(() => {
42
+ show();
20
43
  }, hoverDelayMilliseconds);
21
- };
22
- $effect(() => {
44
+ };
45
+
46
+ $effect(() => {
23
47
  if (disabled) {
24
- hide();
48
+ hide();
25
49
  }
26
- });
27
- // ----- Event Listeners ----- //
28
- let cleanupAutoShowUpdate = () => { };
29
- const autoShowUpdate = () => {
50
+ });
51
+
52
+ // ----- Event Listeners ----- //
53
+
54
+ let cleanupAutoShowUpdate = () => {};
55
+
56
+ const autoShowUpdate = () => {
30
57
  cleanupAutoShowUpdate();
31
- cleanupAutoShowUpdate = () => { };
58
+ cleanupAutoShowUpdate = () => {};
59
+
32
60
  const element = reference;
33
61
  open = false;
62
+
34
63
  if (element) {
35
- element.addEventListener('mouseenter', delayShow);
36
- element.addEventListener('mouseleave', hide);
37
- cleanupAutoShowUpdate = () => {
38
- element.removeEventListener('mouseenter', delayShow);
39
- element.removeEventListener('mouseleave', hide);
40
- };
64
+ element.addEventListener('mouseenter', delayShow);
65
+ element.addEventListener('mouseleave', hide);
66
+ cleanupAutoShowUpdate = () => {
67
+ element.removeEventListener('mouseenter', delayShow);
68
+ element.removeEventListener('mouseleave', hide);
69
+ };
41
70
  }
42
- };
43
- $effect(() => {
71
+ };
72
+
73
+ $effect(() => {
44
74
  reference;
45
75
  autoShowUpdate();
46
- });
47
- // ----- EventHandlers ----- //
48
- onMount(() => {
76
+ });
77
+
78
+ // ----- EventHandlers ----- //
79
+
80
+ onMount(() => {
49
81
  autoShowUpdate();
50
- });
82
+ });
51
83
  </script>
52
84
 
53
85
  {@render children?.()}
54
- <div class="sterling-tooltip-origin" bind:this={originRef}></div>
55
- <Callout class={_class} {open} {reference} {...rest}>
86
+ <div class={['sterling-tooltip-origin', _class]} bind:this={originRef}></div>
87
+ <Callout class={['sterling-tooltip-callout', _class]} {open} {reference} {...rest}>
56
88
  {#if tip}
57
89
  {#if typeof tip === 'string'}
58
90
  {tip}
package/dist/Tree.svelte CHANGED
@@ -1,46 +1,74 @@
1
1
  <svelte:options runes={true} />
2
2
 
3
- <script lang="ts">import { setContext } from 'svelte';
4
- import { usingKeyboard } from './mediaQueries/usingKeyboard';
5
- import { TREE_CONTEXT_KEY } from './Tree.constants';
6
- let { children, class: _class, disabled = false, expandedValues = $bindable([]), onExpandCollapse, onSelect, selectedValue = $bindable(undefined), ...rest } = $props();
7
- let treeRef;
8
- let treeContext = {
3
+ <script lang="ts">
4
+ import { setContext } from 'svelte';
5
+ import type { HTMLAttributes } from 'svelte/elements';
6
+ import { usingKeyboard } from './mediaQueries/usingKeyboard';
7
+ import { TREE_CONTEXT_KEY } from './Tree.constants';
8
+ import type { TreeContext } from './Tree.types';
9
+
10
+ type Props = HTMLAttributes<HTMLDivElement> & {
11
+ disabled?: boolean | null;
12
+ expandedValues?: string[];
13
+ selectedValue?: string;
14
+ onExpandCollapse?: (expandedValues: string[]) => void;
15
+ onSelect?: (selectedValue: string | undefined) => void;
16
+ };
17
+
18
+ let {
19
+ children,
20
+ class: _class,
21
+ disabled = false,
22
+ expandedValues = $bindable([]),
23
+ onExpandCollapse,
24
+ onSelect,
25
+ selectedValue = $bindable(undefined),
26
+ ...rest
27
+ }: Props = $props();
28
+
29
+ let treeRef: HTMLDivElement;
30
+
31
+ let treeContext = {
9
32
  get disabled() {
10
- return disabled;
33
+ return disabled;
11
34
  },
12
35
  get expandedValues() {
13
- return expandedValues;
36
+ return expandedValues;
14
37
  },
15
- set expandedValues(value) {
16
- expandedValues = value;
38
+ set expandedValues(value: string[]) {
39
+ expandedValues = value;
17
40
  },
18
41
  get selectedValue() {
19
- return selectedValue;
42
+ return selectedValue;
20
43
  },
21
- set selectedValue(value) {
22
- selectedValue = value;
44
+ set selectedValue(value: string | undefined) {
45
+ selectedValue = value;
23
46
  }
24
- };
25
- setContext(TREE_CONTEXT_KEY, treeContext);
26
- $effect(() => {
47
+ };
48
+
49
+ setContext<TreeContext>(TREE_CONTEXT_KEY, treeContext);
50
+
51
+ $effect(() => {
27
52
  onSelect?.(selectedValue);
28
- });
29
- $effect(() => {
53
+ });
54
+
55
+ $effect(() => {
30
56
  onExpandCollapse?.(expandedValues);
31
- });
32
- export const blur = () => {
57
+ });
58
+
59
+ export const blur = () => {
33
60
  treeRef?.blur();
34
- };
35
- export const focus = (options) => {
61
+ };
62
+
63
+ export const focus = (options?: FocusOptions) => {
36
64
  treeRef?.focus(options);
37
- };
65
+ };
38
66
  </script>
39
67
 
40
68
  <div
41
69
  bind:this={treeRef}
42
70
  aria-disabled={disabled}
43
- class={`sterling-tree ${_class}`}
71
+ class={['sterling-tree', _class]}
44
72
  class:disabled
45
73
  class:using-keyboard={$usingKeyboard}
46
74
  role="tree"
@@ -1,4 +1,3 @@
1
- /// <reference types="svelte" />
2
1
  import type { HTMLAttributes } from 'svelte/elements';
3
2
  type Props = HTMLAttributes<HTMLDivElement> & {
4
3
  disabled?: boolean | null;
@@ -1,25 +1,37 @@
1
1
  <svelte:options runes={true} />
2
2
 
3
- <script lang="ts">import { onMount } from 'svelte';
4
- let { class: _class, expanded = false, hasChildren = false, ...rest } = $props();
5
- let previousExpanded = expanded;
6
- let mounted = false;
7
- onMount(() => {
3
+ <script lang="ts">
4
+ import { onMount } from 'svelte';
5
+ import type { HTMLAttributes } from 'svelte/elements';
6
+
7
+ type Props = HTMLAttributes<HTMLDivElement> & {
8
+ expanded?: boolean | null | undefined;
9
+ hasChildren?: boolean | null | undefined;
10
+ };
11
+
12
+ let { class: _class, expanded = false, hasChildren = false, ...rest }: Props = $props();
13
+
14
+ let previousExpanded = expanded;
15
+ let mounted = false;
16
+
17
+ onMount(() => {
8
18
  setTimeout(() => {
9
- mounted = true;
19
+ mounted = true;
10
20
  }, 0);
11
- });
12
- let animate = $state(false);
13
- $effect(() => {
21
+ });
22
+
23
+ let animate = $state(false);
24
+
25
+ $effect(() => {
14
26
  if (expanded !== previousExpanded && mounted) {
15
- animate = true;
27
+ animate = true;
16
28
  }
17
29
  previousExpanded = expanded;
18
- });
30
+ });
19
31
  </script>
20
32
 
21
33
  <div
22
- class={`sterling-tree-chevron ${_class}`}
34
+ class={['sterling-tree-chevron', _class]}
23
35
  class:leaf={!hasChildren}
24
36
  class:animate
25
37
  class:expanded
@@ -1,4 +1,3 @@
1
- /// <reference types="svelte" />
2
1
  import type { HTMLAttributes } from 'svelte/elements';
3
2
  type Props = HTMLAttributes<HTMLDivElement> & {
4
3
  expanded?: boolean | null | undefined;