@geoffcox/sterling-svelte 1.0.12 → 2.0.1

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 (219) hide show
  1. package/dist/Button.svelte +8 -46
  2. package/dist/Button.svelte.d.ts +9 -65
  3. package/dist/Callout.svelte +47 -72
  4. package/dist/Callout.svelte.d.ts +14 -55
  5. package/dist/Callout.types.d.ts +11 -0
  6. package/dist/Checkbox.svelte +12 -48
  7. package/dist/Checkbox.svelte.d.ts +9 -62
  8. package/dist/Dialog.svelte +30 -38
  9. package/dist/Dialog.svelte.d.ts +13 -36
  10. package/dist/Dropdown.svelte +39 -71
  11. package/dist/Dropdown.svelte.d.ts +17 -76
  12. package/dist/Input.svelte +16 -50
  13. package/dist/Input.svelte.d.ts +12 -74
  14. package/dist/Label.svelte +55 -161
  15. package/dist/Label.svelte.d.ts +16 -81
  16. package/dist/Link.svelte +9 -41
  17. package/dist/Link.svelte.d.ts +11 -64
  18. package/dist/List.svelte +35 -85
  19. package/dist/List.svelte.d.ts +19 -74
  20. package/dist/List.types.d.ts +3 -11
  21. package/dist/ListItem.svelte +27 -56
  22. package/dist/ListItem.svelte.d.ts +12 -66
  23. package/dist/Menu.svelte +18 -45
  24. package/dist/Menu.svelte.d.ts +13 -63
  25. package/dist/MenuBar.svelte +36 -78
  26. package/dist/MenuBar.svelte.d.ts +12 -57
  27. package/dist/MenuButton.svelte +56 -85
  28. package/dist/MenuButton.svelte.d.ts +19 -70
  29. package/dist/MenuItem.svelte +107 -151
  30. package/dist/MenuItem.svelte.d.ts +21 -82
  31. package/dist/MenuItem.types.d.ts +1 -9
  32. package/dist/MenuSeparator.svelte +9 -7
  33. package/dist/MenuSeparator.svelte.d.ts +6 -20
  34. package/dist/Popover.svelte +45 -64
  35. package/dist/Popover.svelte.d.ts +14 -58
  36. package/dist/Progress.constants.d.ts +1 -1
  37. package/dist/Progress.constants.js +1 -1
  38. package/dist/Progress.svelte +24 -71
  39. package/dist/Progress.svelte.d.ts +11 -60
  40. package/dist/Progress.types.d.ts +3 -3
  41. package/dist/Radio.svelte +19 -92
  42. package/dist/Radio.svelte.d.ts +11 -63
  43. package/dist/Select.svelte +55 -94
  44. package/dist/Select.svelte.d.ts +19 -82
  45. package/dist/Slider.svelte +41 -98
  46. package/dist/Slider.svelte.d.ts +18 -65
  47. package/dist/Switch.svelte +29 -78
  48. package/dist/Switch.svelte.d.ts +20 -73
  49. package/dist/Tab.svelte +23 -66
  50. package/dist/Tab.svelte.d.ts +11 -70
  51. package/dist/TabList.svelte +50 -76
  52. package/dist/TabList.svelte.d.ts +17 -69
  53. package/dist/TabList.types.d.ts +3 -11
  54. package/dist/TextArea.svelte +17 -59
  55. package/dist/TextArea.svelte.d.ts +18 -68
  56. package/dist/Tooltip.svelte +23 -66
  57. package/dist/Tooltip.svelte.d.ts +9 -69
  58. package/dist/Tree.svelte +32 -83
  59. package/dist/Tree.svelte.d.ts +14 -66
  60. package/dist/Tree.types.d.ts +3 -11
  61. package/dist/TreeChevron.svelte +10 -49
  62. package/dist/TreeChevron.svelte.d.ts +8 -52
  63. package/dist/TreeItem.svelte +105 -159
  64. package/dist/TreeItem.svelte.d.ts +21 -100
  65. package/dist/TreeItem.types.d.ts +2 -12
  66. package/dist/actions/clickOutside.d.ts +1 -0
  67. package/dist/actions/clickOutside.js +1 -0
  68. package/dist/actions/extraClass.d.ts +8 -0
  69. package/dist/actions/extraClass.js +14 -0
  70. package/dist/index.d.ts +4 -12
  71. package/dist/index.js +3 -9
  72. package/package.json +20 -22
  73. package/dist/Button.constants.d.ts +0 -2
  74. package/dist/Button.constants.js +0 -2
  75. package/dist/Button.types.d.ts +0 -6
  76. package/dist/ColorPicker.constants.d.ts +0 -1
  77. package/dist/ColorPicker.constants.js +0 -1
  78. package/dist/ColorPicker.svelte +0 -287
  79. package/dist/ColorPicker.svelte.d.ts +0 -52
  80. package/dist/ColorPicker.types.d.ts +0 -4
  81. package/dist/ColorPicker.types.js +0 -1
  82. package/dist/HexColorSliders.svelte +0 -103
  83. package/dist/HexColorSliders.svelte.d.ts +0 -51
  84. package/dist/HslColorSliders.svelte +0 -128
  85. package/dist/HslColorSliders.svelte.d.ts +0 -51
  86. package/dist/Label.types.d.ts +0 -6
  87. package/dist/Label.types.js +0 -1
  88. package/dist/MenuItemDisplay.svelte +0 -32
  89. package/dist/MenuItemDisplay.svelte.d.ts +0 -39
  90. package/dist/RgbColorSliders.svelte +0 -93
  91. package/dist/RgbColorSliders.svelte.d.ts +0 -24
  92. package/dist/TreeItemDisplay.svelte +0 -74
  93. package/dist/TreeItemDisplay.svelte.d.ts +0 -73
  94. package/dist/css/Button.base.css +0 -54
  95. package/dist/css/Button.colorful.css +0 -17
  96. package/dist/css/Button.css +0 -8
  97. package/dist/css/Button.disabled.css +0 -22
  98. package/dist/css/Button.secondary.colorful.css +0 -15
  99. package/dist/css/Button.secondary.css +0 -11
  100. package/dist/css/Button.shapes.css +0 -14
  101. package/dist/css/Button.tool.colorful.css +0 -13
  102. package/dist/css/Button.tool.css +0 -18
  103. package/dist/css/Callout.base.css +0 -55
  104. package/dist/css/Callout.colorful.css +0 -5
  105. package/dist/css/Callout.css +0 -2
  106. package/dist/css/Checkbox.base.css +0 -121
  107. package/dist/css/Checkbox.colorful.css +0 -17
  108. package/dist/css/Checkbox.css +0 -3
  109. package/dist/css/Checkbox.disabled.css +0 -28
  110. package/dist/css/ColorPicker.base.css +0 -23
  111. package/dist/css/ColorPicker.css +0 -1
  112. package/dist/css/Dialog.base.css +0 -114
  113. package/dist/css/Dialog.css +0 -1
  114. package/dist/css/Dropdown.base.css +0 -105
  115. package/dist/css/Dropdown.colorful.css +0 -23
  116. package/dist/css/Dropdown.composed.css +0 -11
  117. package/dist/css/Dropdown.css +0 -4
  118. package/dist/css/Dropdown.disabled.css +0 -32
  119. package/dist/css/HexColorSliders.base.css +0 -87
  120. package/dist/css/HexColorSliders.css +0 -1
  121. package/dist/css/HslColorSliders.base.css +0 -105
  122. package/dist/css/HslColorSliders.css +0 -1
  123. package/dist/css/Input.base.css +0 -72
  124. package/dist/css/Input.colorful.css +0 -22
  125. package/dist/css/Input.composed.css +0 -12
  126. package/dist/css/Input.css +0 -4
  127. package/dist/css/Input.disabled.css +0 -24
  128. package/dist/css/Label.base.css +0 -114
  129. package/dist/css/Label.boxed.colorful.css +0 -21
  130. package/dist/css/Label.boxed.css +0 -31
  131. package/dist/css/Label.colorful.css +0 -3
  132. package/dist/css/Label.css +0 -5
  133. package/dist/css/Label.disabled.css +0 -9
  134. package/dist/css/Link.base.css +0 -43
  135. package/dist/css/Link.colorful.css +0 -15
  136. package/dist/css/Link.css +0 -11
  137. package/dist/css/Link.disabled.css +0 -10
  138. package/dist/css/Link.ghost.colorful.css +0 -7
  139. package/dist/css/Link.ghost.css +0 -11
  140. package/dist/css/Link.text-underline.css +0 -8
  141. package/dist/css/Link.text-underline.ghost.css +0 -13
  142. package/dist/css/Link.undecorated.colorful.css +0 -8
  143. package/dist/css/Link.undecorated.css +0 -8
  144. package/dist/css/Link.undecorated.ghost.css +0 -8
  145. package/dist/css/Link.undecorated.underline.css +0 -8
  146. package/dist/css/List.base.css +0 -84
  147. package/dist/css/List.composed.css +0 -8
  148. package/dist/css/List.css +0 -3
  149. package/dist/css/List.disabled.css +0 -7
  150. package/dist/css/ListItem.base.css +0 -33
  151. package/dist/css/ListItem.css +0 -2
  152. package/dist/css/ListItem.disabled.css +0 -28
  153. package/dist/css/Menu.base.css +0 -21
  154. package/dist/css/Menu.css +0 -1
  155. package/dist/css/MenuBar.base.css +0 -9
  156. package/dist/css/MenuBar.css +0 -1
  157. package/dist/css/MenuButton.base.css +0 -13
  158. package/dist/css/MenuButton.css +0 -1
  159. package/dist/css/MenuItem.base.css +0 -48
  160. package/dist/css/MenuItem.css +0 -1
  161. package/dist/css/MenuItemDisplay.base.css +0 -79
  162. package/dist/css/MenuItemDisplay.css +0 -2
  163. package/dist/css/MenuItemDisplay.disabled.css +0 -28
  164. package/dist/css/MenuSeparator.base.css +0 -5
  165. package/dist/css/MenuSeparator.css +0 -1
  166. package/dist/css/Popover.css +0 -21
  167. package/dist/css/Progress.base.css +0 -85
  168. package/dist/css/Progress.css +0 -2
  169. package/dist/css/Progress.disabled.css +0 -17
  170. package/dist/css/Radio.base.css +0 -109
  171. package/dist/css/Radio.colorful.css +0 -18
  172. package/dist/css/Radio.css +0 -3
  173. package/dist/css/Radio.disabled.css +0 -28
  174. package/dist/css/RgbColorSliders.base.css +0 -94
  175. package/dist/css/RgbColorSliders.css +0 -1
  176. package/dist/css/Select.base.css +0 -101
  177. package/dist/css/Select.colorful.css +0 -24
  178. package/dist/css/Select.composed.css +0 -12
  179. package/dist/css/Select.css +0 -4
  180. package/dist/css/Select.disabled.css +0 -28
  181. package/dist/css/Slider.base.css +0 -152
  182. package/dist/css/Slider.colorful.css +0 -11
  183. package/dist/css/Slider.composed.css +0 -8
  184. package/dist/css/Slider.css +0 -4
  185. package/dist/css/Slider.disabled.css +0 -30
  186. package/dist/css/Switch.base.css +0 -175
  187. package/dist/css/Switch.colorful.css +0 -45
  188. package/dist/css/Switch.css +0 -3
  189. package/dist/css/Switch.disabled.css +0 -30
  190. package/dist/css/Tab.base.css +0 -96
  191. package/dist/css/Tab.colorful.css +0 -13
  192. package/dist/css/Tab.css +0 -3
  193. package/dist/css/Tab.disabled.css +0 -36
  194. package/dist/css/TabList.base.css +0 -34
  195. package/dist/css/TabList.css +0 -1
  196. package/dist/css/TextArea.base.css +0 -62
  197. package/dist/css/TextArea.colorful.css +0 -17
  198. package/dist/css/TextArea.composed.css +0 -8
  199. package/dist/css/TextArea.css +0 -4
  200. package/dist/css/TextArea.disabled.css +0 -28
  201. package/dist/css/Tooltip.base.css +0 -6
  202. package/dist/css/Tooltip.css +0 -1
  203. package/dist/css/Tree.base.css +0 -49
  204. package/dist/css/Tree.composed.css +0 -8
  205. package/dist/css/Tree.css +0 -3
  206. package/dist/css/Tree.disabled.css +0 -27
  207. package/dist/css/TreeChevron.base.css +0 -86
  208. package/dist/css/TreeChevron.css +0 -1
  209. package/dist/css/TreeItem.base.css +0 -3
  210. package/dist/css/TreeItem.css +0 -1
  211. package/dist/css/TreeItemDisplay.base.css +0 -48
  212. package/dist/css/TreeItemDisplay.colorful.css +0 -9
  213. package/dist/css/TreeItemDisplay.css +0 -3
  214. package/dist/css/TreeItemDisplay.disabled.css +0 -28
  215. package/dist/css/dark-mode.css +0 -134
  216. package/dist/css/light-mode.css +0 -134
  217. package/dist/css/sterling.css +0 -37
  218. package/dist/package.json +0 -108
  219. /package/dist/{Button.types.js → Callout.types.js} +0 -0
@@ -1,29 +1,14 @@
1
- <script>import { getContext, onMount, tick } from 'svelte';
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">import { getContext, onMount, tick } from 'svelte';
2
4
  import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
3
5
  import { portal } from './actions/portal';
4
6
  import { STERLING_PORTAL_HOST_ID, STERLING_PORTAL_CONTEXT_ID } from './Portal.constants';
5
- // ----- Props ----- //
6
- /** When true, content is rendered only when the popover is open. */
7
- export let conditionalRender = true;
8
- /** The offset along the side of the reference element. */
9
- export let crossAxisOffset = 0;
10
- /** The offset towards or away from the side of the reference element. */
11
- export let mainAxisOffset = 0;
12
- /** When true, the popover is open and visible. */
13
- export let open = false;
14
- /** How the popover should be positioned relative to the reference element. */
15
- export let placement = 'top-start';
16
- /** The host container for the callout. */
17
- export let portalHost = undefined;
18
- /** The reference to the element anchoring the position of the popover. */
19
- export let reference;
20
- /** Additional class names to apply. */
21
- export let variant = '';
22
- // ----- State ----- //
23
- let popupRef;
24
- let popupPosition = { x: 0, y: 0 };
25
- $: floatingUIPlacement = placement;
26
- let bodyHeight = 0;
7
+ let { children, conditionalRender = $bindable(true), crossAxisOffset = $bindable(0), mainAxisOffset = $bindable(0), open = $bindable(false), placement = $bindable('top-start'), portalHost, reference, class: _class, ...rest } = $props();
8
+ let popupRef = $state(undefined);
9
+ let popupPosition = $state({ x: 0, y: 0 });
10
+ let floatingUIPlacement = $derived(placement);
11
+ let bodyHeight = $state(0);
27
12
  let resizeObserver = undefined;
28
13
  const { portalHost: contextPortalHost } = getContext(STERLING_PORTAL_CONTEXT_ID) || {
29
14
  portalHost: undefined
@@ -46,13 +31,11 @@ const ensurePortalHost = async () => {
46
31
  }
47
32
  portalHost = host;
48
33
  };
49
- $: {
50
- if ($contextPortalHost || !$contextPortalHost) {
51
- ensurePortalHost();
52
- }
53
- }
54
34
  // ----- Position ----- //
55
- $: middleware = [offset({ mainAxis: mainAxisOffset, crossAxis: crossAxisOffset }), flip()];
35
+ let middleware = $derived([
36
+ offset({ mainAxis: mainAxisOffset, crossAxis: crossAxisOffset }),
37
+ flip()
38
+ ]);
56
39
  const computePopoverPosition = async () => {
57
40
  if (reference && popupRef) {
58
41
  popupPosition = await computePosition(reference, popupRef, {
@@ -72,10 +55,19 @@ const autoUpdatePopoverPosition = () => {
72
55
  cleanupAutoUpdate = autoUpdate(reference, popupRef, computePopoverPosition);
73
56
  }
74
57
  };
75
- $: popupRef, reference, autoUpdatePopoverPosition();
76
- $: open, bodyHeight, middleware, floatingUIPlacement, computePopoverPosition();
58
+ $effect(() => {
59
+ autoUpdatePopoverPosition();
60
+ return () => {
61
+ cleanupAutoUpdate();
62
+ cleanupAutoUpdate = () => { };
63
+ };
64
+ });
65
+ $effect(() => {
66
+ bodyHeight;
67
+ computePopoverPosition();
68
+ });
77
69
  // ----- EventHandlers ----- //
78
- onMount(() => {
70
+ $effect(() => {
79
71
  ensurePortalHost();
80
72
  resizeObserver = new ResizeObserver((entries) => {
81
73
  bodyHeight = entries[0].target.clientHeight;
@@ -92,49 +84,38 @@ const onKeydown = (event) => {
92
84
  if (event.key === 'Escape') {
93
85
  open = false;
94
86
  }
87
+ rest.onkeydown?.(event);
95
88
  };
89
+ //TODO: Is this necessary?
96
90
  ensurePortalHost();
97
91
  </script>
98
92
 
99
93
  {#if open || !conditionalRender}
100
94
  <div use:portal={{ target: portalHost }} class="sterling-popover-portal">
101
- <!-- svelte-ignore a11y-no-static-element-interactions -->
95
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
102
96
  <div
103
97
  bind:this={popupRef}
104
- class={`sterling-popover ${variant}`}
98
+ class={['sterling-popover', _class].filter(Boolean).join(' ')}
105
99
  class:open
106
- on:blur
107
- on:click
108
- on:copy
109
- on:cut
110
- on:dblclick
111
- on:dragend
112
- on:dragenter
113
- on:dragleave
114
- on:dragover
115
- on:dragstart
116
- on:drop
117
- on:focus
118
- on:focusin
119
- on:focusout
120
- on:keydown
121
- on:keypress
122
- on:keyup
123
- on:mousedown
124
- on:mouseenter
125
- on:mouseleave
126
- on:mousemove
127
- on:mouseover
128
- on:mouseout
129
- on:mouseup
130
- on:scroll
131
- on:wheel|passive
132
- on:paste
133
- on:keydown={onKeydown}
134
- {...$$restProps}
100
+ class:top={popupPosition.placement === 'top'}
101
+ class:top-start={popupPosition.placement === 'top-start'}
102
+ class:top-end={popupPosition.placement === 'top-end'}
103
+ class:right={popupPosition.placement === 'right'}
104
+ class:right-start={popupPosition.placement === 'right-start'}
105
+ class:right-end={popupPosition.placement === 'right-end'}
106
+ class:bottom={popupPosition.placement === 'bottom'}
107
+ class:bottom-start={popupPosition.placement === 'bottom-start'}
108
+ class:bottom-end={popupPosition.placement === 'bottom-end'}
109
+ class:left={popupPosition.placement === 'left'}
110
+ class:left-start={popupPosition.placement === 'left-start'}
111
+ class:left-end={popupPosition.placement === 'left-end'}
112
+ {...rest}
113
+ onkeydown={onKeydown}
135
114
  style="left:{popupPosition.x}px; top:{popupPosition.y}px"
136
115
  >
137
- <slot {open} {variant} />
116
+ {#if children}
117
+ {@render children()}
118
+ {/if}
138
119
  </div>
139
120
  </div>
140
121
  {/if}
@@ -1,59 +1,15 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- conditionalRender?: boolean | undefined;
6
- crossAxisOffset?: number | undefined;
7
- mainAxisOffset?: number | undefined;
8
- open?: boolean | undefined;
9
- placement?: string | undefined;
10
- portalHost?: HTMLElement | undefined;
11
- reference: HTMLElement | undefined;
12
- variant?: string | undefined;
13
- };
14
- events: {
15
- blur: FocusEvent;
16
- click: MouseEvent;
17
- copy: ClipboardEvent;
18
- cut: ClipboardEvent;
19
- dblclick: MouseEvent;
20
- dragend: DragEvent;
21
- dragenter: DragEvent;
22
- dragleave: DragEvent;
23
- dragover: DragEvent;
24
- dragstart: DragEvent;
25
- drop: DragEvent;
26
- focus: FocusEvent;
27
- focusin: FocusEvent;
28
- focusout: FocusEvent;
29
- keydown: KeyboardEvent;
30
- keypress: KeyboardEvent;
31
- keyup: KeyboardEvent;
32
- mousedown: MouseEvent;
33
- mouseenter: MouseEvent;
34
- mouseleave: MouseEvent;
35
- mousemove: MouseEvent;
36
- mouseover: MouseEvent;
37
- mouseout: MouseEvent;
38
- mouseup: MouseEvent;
39
- scroll: Event;
40
- wheel: WheelEvent;
41
- paste: ClipboardEvent;
42
- } & {
43
- [evt: string]: CustomEvent<any>;
44
- };
45
- slots: {
46
- default: {
47
- open: boolean;
48
- variant: string;
49
- };
50
- };
51
- exports?: undefined;
52
- bindings?: undefined;
1
+ /// <reference types="svelte" />
2
+ import type { PopoverPlacement } from './Popover.types';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ type Props = HTMLAttributes<HTMLDivElement> & {
5
+ conditionalRender?: boolean;
6
+ crossAxisOffset?: number;
7
+ mainAxisOffset?: number;
8
+ open?: boolean | null;
9
+ placement?: PopoverPlacement;
10
+ portalHost?: HTMLElement;
11
+ reference?: HTMLElement;
53
12
  };
54
- export type PopoverProps = typeof __propDef.props;
55
- export type PopoverEvents = typeof __propDef.events;
56
- export type PopoverSlots = typeof __propDef.slots;
57
- export default class Popover extends SvelteComponent<PopoverProps, PopoverEvents, PopoverSlots> {
58
- }
59
- export {};
13
+ declare const Popover: import("svelte").Component<Props, {}, "conditionalRender" | "crossAxisOffset" | "mainAxisOffset" | "open" | "placement">;
14
+ type Popover = ReturnType<typeof Popover>;
15
+ export default Popover;
@@ -1 +1 @@
1
- export declare const PROGRESS_STATUSES: string[];
1
+ export declare const PROGRESS_ORIENTATIONS: string[];
@@ -1 +1 @@
1
- export const PROGRESS_STATUSES = ['none', 'auto', 'info', 'success', 'warning', 'danger'];
1
+ export const PROGRESS_ORIENTATIONS = ['horizontal', 'vertical'];
@@ -1,83 +1,36 @@
1
- <script>//----- Props ----- //
2
- /** When true, the progress bar is disabled. */
3
- export let disabled = false;
4
- /** The maximum value. */
5
- export let max = 100;
6
- /** A read-only percentage between 0 and 100 calculated from value and max. */
7
- export let percent = 0;
8
- /** The current status of the progress. */
9
- export let status = 'none';
10
- /** The current value. */
11
- export let value = 0;
12
- /** Additional class names to apply. */
13
- export let variant = '';
14
- /** When true, the progress bar is displayed vertically. */
15
- export let vertical = false;
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">let { class: _class, disabled = false, max = 100, percent = $bindable(0), //readonly
4
+ value = $bindable(0), vertical, ...rest } = $props();
16
5
  //----- State ----- //
17
- let clientHeight;
18
- let clientWidth;
19
- $: clampMax = Math.max(1, max);
20
- $: clampValue = Math.max(0, Math.min(value, clampMax));
21
- $: ratio = clampValue / clampMax;
22
- $: {
6
+ let clientHeight = $state(0);
7
+ let clientWidth = $state(0);
8
+ let clampMax = $derived(Math.max(1, max));
9
+ let clampValue = $derived(Math.max(0, Math.min(value, clampMax)));
10
+ let ratio = $derived(clampValue / clampMax);
11
+ $effect(() => {
23
12
  percent = Math.round(ratio * 100);
24
- }
25
- $: percentHeight = clientHeight * ratio;
26
- $: percentWidth = clientWidth * ratio;
27
- $: indicatorStyle = vertical ? `height: ${percentHeight}px` : `width: ${percentWidth}px`;
28
- $: indicatorColor = status === 'auto' ? (percent === 100 ? 'success' : 'info') : status;
13
+ });
14
+ let percentHeight = $derived(clientHeight * ratio);
15
+ let percentWidth = $derived(clientWidth * ratio);
16
+ let indicatorStyle = $derived(vertical ? `height: ${percentHeight}px` : `width: ${percentWidth}px`);
17
+ export {};
29
18
  </script>
30
19
 
31
- <!--
32
- @component
33
- An indicator of a value between 0 and a maximum value.ß
34
- Does not use the HTML progress element.
35
- -->
36
- <!-- svelte-ignore a11y-label-has-associated-control -->
37
- <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
20
+ <!-- svelte-ignore a11y_role_supports_aria_props -->
38
21
  <div
39
- class={`sterling-progress ${variant}`}
22
+ aria-orientation={vertical ? 'vertical' : 'horizontal'}
23
+ class={['sterling-progress', _class].filter(Boolean).join(' ')}
40
24
  class:disabled
25
+ class:horizontal={!vertical}
41
26
  class:vertical
42
- class:info={indicatorColor === 'info'}
43
- class:success={indicatorColor === 'success'}
44
- class:warning={indicatorColor === 'warning'}
45
- class:error={indicatorColor === 'danger'}
27
+ data-progress-percent={percent}
28
+ data-progress-max={max}
29
+ data-progress-value={value}
46
30
  role="progressbar"
47
- on:blur
48
- on:click
49
- on:dblclick
50
- on:dragend
51
- on:dragenter
52
- on:dragleave
53
- on:dragover
54
- on:dragstart
55
- on:drop
56
- on:focus
57
- on:focusin
58
- on:focusout
59
- on:keydown
60
- on:keypress
61
- on:keyup
62
- on:mousedown
63
- on:mouseenter
64
- on:mouseleave
65
- on:mousemove
66
- on:mouseover
67
- on:mouseout
68
- on:mouseup
69
- on:pointercancel
70
- on:pointerdown
71
- on:pointerenter
72
- on:pointerleave
73
- on:pointermove
74
- on:pointerover
75
- on:pointerout
76
- on:pointerup
77
- on:wheel|passive
78
- {...$$restProps}
31
+ {...rest}
79
32
  >
80
33
  <div class="container" bind:clientWidth bind:clientHeight>
81
- <div class="indicator" style={indicatorStyle} />
34
+ <div class="indicator" style={indicatorStyle}></div>
82
35
  </div>
83
36
  </div>
@@ -1,61 +1,12 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- disabled?: boolean | undefined;
6
- max?: number | undefined;
7
- percent?: number | undefined;
8
- status?: string | undefined;
9
- value?: number | undefined;
10
- variant?: string | undefined;
11
- vertical?: boolean | undefined;
12
- };
13
- events: {
14
- blur: FocusEvent;
15
- click: MouseEvent;
16
- dblclick: MouseEvent;
17
- dragend: DragEvent;
18
- dragenter: DragEvent;
19
- dragleave: DragEvent;
20
- dragover: DragEvent;
21
- dragstart: DragEvent;
22
- drop: DragEvent;
23
- focus: FocusEvent;
24
- focusin: FocusEvent;
25
- focusout: FocusEvent;
26
- keydown: KeyboardEvent;
27
- keypress: KeyboardEvent;
28
- keyup: KeyboardEvent;
29
- mousedown: MouseEvent;
30
- mouseenter: MouseEvent;
31
- mouseleave: MouseEvent;
32
- mousemove: MouseEvent;
33
- mouseover: MouseEvent;
34
- mouseout: MouseEvent;
35
- mouseup: MouseEvent;
36
- pointercancel: PointerEvent;
37
- pointerdown: PointerEvent;
38
- pointerenter: PointerEvent;
39
- pointerleave: PointerEvent;
40
- pointermove: PointerEvent;
41
- pointerover: PointerEvent;
42
- pointerout: PointerEvent;
43
- pointerup: PointerEvent;
44
- wheel: WheelEvent;
45
- } & {
46
- [evt: string]: CustomEvent<any>;
47
- };
48
- slots: {};
49
- exports?: undefined;
50
- bindings?: undefined;
1
+ /// <reference types="svelte" />
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type Props = HTMLAttributes<HTMLDivElement> & {
4
+ disabled?: boolean | null;
5
+ max?: number;
6
+ percent?: number;
7
+ value?: number;
8
+ vertical?: boolean | null;
51
9
  };
52
- export type ProgressProps = typeof __propDef.props;
53
- export type ProgressEvents = typeof __propDef.events;
54
- export type ProgressSlots = typeof __propDef.slots;
55
- /**
56
- * An indicator of a value between 0 and a maximum value.ß
57
- * Does not use the HTML progress element.
58
- */
59
- export default class Progress extends SvelteComponent<ProgressProps, ProgressEvents, ProgressSlots> {
60
- }
61
- export {};
10
+ declare const Progress: import("svelte").Component<Props, {}, "value" | "percent">;
11
+ type Progress = ReturnType<typeof Progress>;
12
+ export default Progress;
@@ -1,4 +1,4 @@
1
- import type { PROGRESS_STATUSES } from './Progress.constants';
2
- type ProgressStatusTuple = typeof PROGRESS_STATUSES;
3
- export type ProgressStatus = ProgressStatusTuple[number];
1
+ import type { PROGRESS_ORIENTATIONS } from './Progress.constants';
2
+ type ProgressOrientationTuple = typeof PROGRESS_ORIENTATIONS;
3
+ export type ProgressOrientation = ProgressOrientationTuple[number];
4
4
  export {};
package/dist/Radio.svelte CHANGED
@@ -1,57 +1,14 @@
1
- <script>import { idGenerator } from './idGenerator';
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">import { idGenerator } from './idGenerator';
2
4
  import { usingKeyboard } from './mediaQueries/usingKeyboard';
3
- // ----- Props ----- //
4
- export let checked = false;
5
- export let disabled = false;
6
- // bind:group doesn't seem to work properly (yet) in a nested radio.
7
- // The workaround is to export `checked` and `group` properties
8
- // and implement the same behavior.
9
- export let group = undefined;
10
- export let id = undefined;
11
- /** Additional class names to apply. */
12
- export let variant = '';
13
- // ensure initial state is consistent
14
- if (checked && $$restProps.value !== group) {
15
- group = $$restProps.value;
16
- }
17
- else if (!checked && $$restProps.value === group) {
18
- checked = true;
19
- }
20
- // ----- State ----- //
5
+ let { id, children, checked = $bindable(false), class: _class, disabled = false, group = $bindable(), ...rest } = $props();
21
6
  let inputRef;
22
- let previousChecked = checked;
23
- let previousGroup = group;
24
- const reconcile = () => {
25
- if (checked !== previousChecked) {
26
- // when checked, set group to value
27
- if (checked && $$restProps.value) {
28
- group = $$restProps.value;
29
- previousGroup = $$restProps.value;
30
- }
31
- previousChecked = checked;
32
- }
33
- else if (group !== previousGroup) {
34
- // when group changes, update checked
35
- if ($$restProps.value) {
36
- checked = $$restProps.value === group;
37
- previousChecked = checked;
38
- }
39
- previousGroup = group;
40
- }
41
- };
42
- $: checked, group, $$restProps.value, reconcile();
43
- $: {
44
- if (inputRef && checked && !inputRef.checked) {
45
- // setting checked doesn't cause raise on:change,
46
- // so we click the radio to cause it to be checked.
47
- inputRef.click();
48
- }
49
- }
50
- $: {
51
- if ($$slots.default && id === undefined) {
7
+ $effect(() => {
8
+ if (children && id === undefined) {
52
9
  id = idGenerator.nextId('Radio');
53
10
  }
54
- }
11
+ });
55
12
  // ----- Methods ----- //
56
13
  export const blur = () => {
57
14
  inputRef?.blur();
@@ -64,10 +21,14 @@ export const focus = (options) => {
64
21
  };
65
22
  // ----- Event Handlers ----- //
66
23
  const onChange = (e) => {
67
- if (e.currentTarget.checked) {
68
- group = $$restProps.value;
69
- }
24
+ console.log('onChange', e);
25
+ // if ((e.currentTarget && e.currentTarget.checked) || (e.target && e.target.checked)) {
26
+ // group = value;
27
+ // }
70
28
  };
29
+ $effect(() => {
30
+ console.log(id, '-checked', checked);
31
+ });
71
32
  </script>
72
33
 
73
34
  <!--
@@ -75,52 +36,18 @@ const onChange = (e) => {
75
36
  A styled HTML input type=radio element with optional label.
76
37
  -->
77
38
  <div
78
- class={`sterling-radio ${variant}`}
39
+ class={`sterling-radio ${_class}`}
79
40
  class:checked
80
41
  class:disabled
81
42
  class:using-keyboard={$usingKeyboard}
82
43
  >
83
44
  <div class="container">
84
- <input
85
- bind:this={inputRef}
86
- {checked}
87
- {disabled}
88
- name={group}
89
- {id}
90
- type="radio"
91
- on:blur
92
- on:click
93
- on:change
94
- on:change={onChange}
95
- on:dblclick
96
- on:dragend
97
- on:dragenter
98
- on:dragleave
99
- on:dragover
100
- on:dragstart
101
- on:drop
102
- on:focus
103
- on:focusin
104
- on:focusout
105
- on:keydown
106
- on:keypress
107
- on:keyup
108
- on:input
109
- on:mousedown
110
- on:mouseenter
111
- on:mouseleave
112
- on:mousemove
113
- on:mouseover
114
- on:mouseout
115
- on:mouseup
116
- on:wheel|passive
117
- {...$$restProps}
118
- />
119
- <div class="indicator" />
45
+ <input bind:this={inputRef} checked {disabled} bind:group {id} type="radio" {...rest} />
46
+ <div class="indicator"></div>
120
47
  </div>
121
- {#if $$slots.default}
48
+ {#if children}
122
49
  <label for={id}>
123
- <slot {checked} {disabled} {group} inputId={id} value={$$restProps.value} {variant} />
50
+ {@render children()}
124
51
  </label>
125
52
  {/if}
126
53
  </div>
@@ -1,65 +1,13 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- checked?: boolean | undefined;
6
- disabled?: boolean | undefined;
7
- group?: any | undefined | null;
8
- id?: string | undefined;
9
- variant?: string | undefined;
10
- blur?: (() => void) | undefined;
11
- click?: (() => void) | undefined;
12
- focus?: ((options?: FocusOptions) => void) | undefined;
13
- };
14
- events: {
15
- blur: FocusEvent;
16
- click: MouseEvent;
17
- change: Event;
18
- dblclick: MouseEvent;
19
- dragend: DragEvent;
20
- dragenter: DragEvent;
21
- dragleave: DragEvent;
22
- dragover: DragEvent;
23
- dragstart: DragEvent;
24
- drop: DragEvent;
25
- focus: FocusEvent;
26
- focusin: FocusEvent;
27
- focusout: FocusEvent;
28
- keydown: KeyboardEvent;
29
- keypress: KeyboardEvent;
30
- keyup: KeyboardEvent;
31
- input: Event;
32
- mousedown: MouseEvent;
33
- mouseenter: MouseEvent;
34
- mouseleave: MouseEvent;
35
- mousemove: MouseEvent;
36
- mouseover: MouseEvent;
37
- mouseout: MouseEvent;
38
- mouseup: MouseEvent;
39
- wheel: WheelEvent;
40
- } & {
41
- [evt: string]: CustomEvent<any>;
42
- };
43
- slots: {
44
- default: {
45
- checked: boolean;
46
- disabled: boolean;
47
- group: any;
48
- inputId: string | undefined;
49
- value: any;
50
- variant: string;
51
- };
52
- };
53
- exports?: undefined;
54
- bindings?: undefined;
1
+ /// <reference types="svelte" />
2
+ import type { HTMLInputAttributes } from 'svelte/elements';
3
+ type Props = HTMLInputAttributes & {
4
+ group?: any | null;
55
5
  };
56
- export type RadioProps = typeof __propDef.props;
57
- export type RadioEvents = typeof __propDef.events;
58
- export type RadioSlots = typeof __propDef.slots;
59
6
  /** A styled HTML input type=radio element with optional label. */
60
- export default class Radio extends SvelteComponent<RadioProps, RadioEvents, RadioSlots> {
61
- get blur(): () => void;
62
- get click(): () => void;
63
- get focus(): (options?: FocusOptions | undefined) => void;
64
- }
65
- export {};
7
+ declare const Radio: import("svelte").Component<Props, {
8
+ blur: () => void;
9
+ click: () => void;
10
+ focus: (options?: FocusOptions) => void;
11
+ }, "group" | "checked">;
12
+ type Radio = ReturnType<typeof Radio>;
13
+ export default Radio;