@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,10 +1,7 @@
1
- <script>// ----- Props ----- //
2
- export let disabled = false;
3
- /** Additional class names to apply. */
4
- export let variant = '';
5
- // ----- State ----- //
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">let { children, class: _class, ...rest } = $props();
6
4
  let buttonRef;
7
- // ----- Methods ----- //
8
5
  export const click = () => {
9
6
  buttonRef?.click();
10
7
  };
@@ -16,48 +13,13 @@ export const focus = (options) => {
16
13
  };
17
14
  </script>
18
15
 
19
- <!--
20
- @component
21
- A styled HTML button element.
22
- -->
23
16
  <button
24
17
  bind:this={buttonRef}
25
- class={`sterling-button ${variant}`}
26
- {disabled}
18
+ class={['sterling-button', _class].filter(Boolean).join(' ')}
27
19
  type="button"
28
- on:blur
29
- on:click
30
- on:drag
31
- on:dragend
32
- on:dragenter
33
- on:dragleave
34
- on:dragover
35
- on:dragstart
36
- on:drop
37
- on:dblclick
38
- on:focus
39
- on:focusin
40
- on:focusout
41
- on:keydown
42
- on:keypress
43
- on:keyup
44
- on:mousedown
45
- on:mouseenter
46
- on:mouseleave
47
- on:mousemove
48
- on:mouseover
49
- on:mouseout
50
- on:mouseup
51
- on:pointercancel
52
- on:pointerdown
53
- on:pointerenter
54
- on:pointerleave
55
- on:pointermove
56
- on:pointerover
57
- on:pointerout
58
- on:pointerup
59
- on:wheel|passive
60
- {...$$restProps}
20
+ {...rest}
61
21
  >
62
- <slot {disabled} {variant} />
22
+ {#if children}
23
+ {@render children()}
24
+ {/if}
63
25
  </button>
@@ -1,65 +1,9 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- disabled?: boolean | undefined;
6
- variant?: string | undefined;
7
- click?: (() => void) | undefined;
8
- blur?: (() => void) | undefined;
9
- focus?: ((options?: FocusOptions) => void) | undefined;
10
- };
11
- events: {
12
- blur: FocusEvent;
13
- click: MouseEvent;
14
- drag: DragEvent;
15
- dragend: DragEvent;
16
- dragenter: DragEvent;
17
- dragleave: DragEvent;
18
- dragover: DragEvent;
19
- dragstart: DragEvent;
20
- drop: DragEvent;
21
- dblclick: MouseEvent;
22
- focus: FocusEvent;
23
- focusin: FocusEvent;
24
- focusout: FocusEvent;
25
- keydown: KeyboardEvent;
26
- keypress: KeyboardEvent;
27
- keyup: KeyboardEvent;
28
- mousedown: MouseEvent;
29
- mouseenter: MouseEvent;
30
- mouseleave: MouseEvent;
31
- mousemove: MouseEvent;
32
- mouseover: MouseEvent;
33
- mouseout: MouseEvent;
34
- mouseup: MouseEvent;
35
- pointercancel: PointerEvent;
36
- pointerdown: PointerEvent;
37
- pointerenter: PointerEvent;
38
- pointerleave: PointerEvent;
39
- pointermove: PointerEvent;
40
- pointerover: PointerEvent;
41
- pointerout: PointerEvent;
42
- pointerup: PointerEvent;
43
- wheel: WheelEvent;
44
- } & {
45
- [evt: string]: CustomEvent<any>;
46
- };
47
- slots: {
48
- default: {
49
- disabled: boolean;
50
- variant: string;
51
- };
52
- };
53
- exports?: undefined;
54
- bindings?: undefined;
55
- };
56
- export type ButtonProps = typeof __propDef.props;
57
- export type ButtonEvents = typeof __propDef.events;
58
- export type ButtonSlots = typeof __propDef.slots;
59
- /** A styled HTML button element. */
60
- export default class Button extends SvelteComponent<ButtonProps, ButtonEvents, ButtonSlots> {
61
- get click(): () => void;
62
- get blur(): () => void;
63
- get focus(): (options?: FocusOptions | undefined) => void;
64
- }
65
- export {};
1
+ /// <reference types="svelte" />
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ declare const Button: import("svelte").Component<HTMLButtonAttributes, {
4
+ click: () => void;
5
+ blur: () => void;
6
+ focus: (options?: FocusOptions) => void;
7
+ }, "">;
8
+ type Button = ReturnType<typeof Button>;
9
+ export default Button;
@@ -1,37 +1,21 @@
1
- <script>import { getContext, onMount, tick } from 'svelte';
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">import { getContext, tick } from 'svelte';
2
4
  import { arrow, autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
3
5
  import { portal } from './actions/portal';
4
6
  import { fade } from 'svelte/transition';
5
7
  import { prefersReducedMotion } from './mediaQueries/prefersReducedMotion';
6
8
  import { STERLING_PORTAL_HOST_ID, STERLING_PORTAL_CONTEXT_ID } from './Portal.constants';
7
- // ----- Props ----- //
8
- /** Conditionally renders content based on open. */
9
- export let conditionalRender = true;
10
- /** The offset along the side of the reference element. */
11
- export let crossAxisOffset = 0;
12
- /** The offset towards or away from the side of the reference element. */
13
- export let mainAxisOffset = 0;
14
- /** When true, the callout is open and visible. */
15
- export let open = false;
16
- /** How the callout should be positioned relative to the reference element. */
17
- export let placement = 'top-start';
18
- /** The host container for the callout. */
19
- export let portalHost = undefined;
20
- /** The reference to the element anchoring the position of the callout. */
21
- export let reference;
22
- /** Additional class names to apply. */
23
- export let variant = '';
24
- // ----- State ----- //
25
- let popupRef;
26
- let arrowRef;
27
- let popupPosition = { x: 0, y: 0 };
28
- $: floatingUIPlacement = placement;
29
- let bodyHeight = 0;
9
+ let { children, conditionalRender = $bindable(true), crossAxisOffset = $bindable(0), mainAxisOffset = $bindable(0), open = $bindable(false), placement = $bindable('top-start'), portalHost, reference, class: _class, ...rest } = $props();
10
+ let popupRef = $state(undefined);
11
+ let arrowRef = $state(undefined);
12
+ let popupPosition = $state({ x: 0, y: 0 });
13
+ let floatingUIPlacement = $derived(placement);
14
+ let bodyHeight = $state(0);
30
15
  let resizeObserver = undefined;
31
16
  const { portalHost: contextPortalHost } = getContext(STERLING_PORTAL_CONTEXT_ID) || {
32
17
  portalHost: undefined
33
18
  };
34
- // ----- Portal Host ----- //
35
19
  const ensurePortalHost = async () => {
36
20
  await tick();
37
21
  // use the host set from context, usually set from a Dialog
@@ -49,18 +33,18 @@ const ensurePortalHost = async () => {
49
33
  }
50
34
  portalHost = host;
51
35
  };
52
- // ----- Position ----- //
53
- $: middleware = [
36
+ let middleware = $derived([
54
37
  offset({ mainAxis: mainAxisOffset, crossAxis: crossAxisOffset }),
55
38
  flip(),
56
- arrow({ element: arrowRef, padding: 8 })
57
- ];
39
+ arrowRef && arrow({ element: arrowRef, padding: 8 })
40
+ ]);
58
41
  const computeCalloutPosition = async () => {
59
42
  if (reference && popupRef) {
60
43
  popupPosition = await computePosition(reference, popupRef, {
61
44
  placement: floatingUIPlacement,
62
45
  middleware
63
46
  });
47
+ console.log('popupPosition', popupPosition);
64
48
  }
65
49
  else {
66
50
  popupPosition = { x: 0, y: 0 };
@@ -70,12 +54,23 @@ const computeCalloutPosition = async () => {
70
54
  let cleanupAutoUpdate = () => { };
71
55
  const autoUpdateCalloutPosition = () => {
72
56
  cleanupAutoUpdate();
57
+ cleanupAutoUpdate = () => { };
73
58
  if (reference && popupRef) {
74
59
  cleanupAutoUpdate = autoUpdate(reference, popupRef, computeCalloutPosition);
75
60
  }
76
61
  };
77
- $: popupRef, reference, autoUpdateCalloutPosition();
78
- $: open, bodyHeight, middleware, placement, computeCalloutPosition();
62
+ $effect(() => {
63
+ autoUpdateCalloutPosition();
64
+ return () => {
65
+ cleanupAutoUpdate();
66
+ cleanupAutoUpdate = () => { };
67
+ };
68
+ });
69
+ $effect(() => {
70
+ bodyHeight;
71
+ reference;
72
+ computeCalloutPosition();
73
+ });
79
74
  // ----- Arrow ----- //
80
75
  const getArrowPlacementStyle = (position) => {
81
76
  if (position?.placement && arrowRef) {
@@ -112,14 +107,20 @@ const getArrowOffsetStyle = (position) => {
112
107
  }
113
108
  return '';
114
109
  };
115
- $: arrowStyle = getArrowPlacementStyle(popupPosition) + getArrowOffsetStyle(popupPosition);
110
+ let arrowStyle = $derived(getArrowPlacementStyle(popupPosition) + getArrowOffsetStyle(popupPosition));
116
111
  // ----- Animation ----- //
117
112
  const fadeNoOp = (node, params) => {
118
113
  return { delay: 0, duration: 0 };
119
114
  };
120
- $: fadeMotion = !$prefersReducedMotion ? fade : fadeNoOp;
115
+ let fadeMotion = $derived(!$prefersReducedMotion ? fade : fadeNoOp);
121
116
  // ----- EventHandlers ----- //
122
- onMount(() => {
117
+ const onKeydown = (event) => {
118
+ if (event.key === 'Escape') {
119
+ open = false;
120
+ }
121
+ rest.onkeydown?.(event);
122
+ };
123
+ $effect(() => {
123
124
  ensurePortalHost();
124
125
  resizeObserver = new ResizeObserver((entries) => {
125
126
  bodyHeight = entries[0].target.clientHeight;
@@ -132,11 +133,6 @@ onMount(() => {
132
133
  resizeObserver = undefined;
133
134
  };
134
135
  });
135
- const onKeydown = (event) => {
136
- if (event.key === 'Escape') {
137
- open = false;
138
- }
139
- };
140
136
  ensurePortalHost();
141
137
  </script>
142
138
 
@@ -146,10 +142,10 @@ ensurePortalHost();
146
142
  class="sterling-callout-portal"
147
143
  transition:fadeMotion|global={{ duration: 250 }}
148
144
  >
149
- <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
145
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
150
146
  <div
151
147
  bind:this={popupRef}
152
- class={`sterling-callout ${variant}`}
148
+ class={['sterling-callout', _class].filter(Boolean).join(' ')}
153
149
  class:open
154
150
  class:top={popupPosition.placement === 'top'}
155
151
  class:top-start={popupPosition.placement === 'top-start'}
@@ -164,39 +160,18 @@ ensurePortalHost();
164
160
  class:left-start={popupPosition.placement === 'left-start'}
165
161
  class:left-end={popupPosition.placement === 'left-end'}
166
162
  role="tooltip"
167
- on:blur
168
- on:click
169
- on:copy
170
- on:cut
171
- on:dblclick
172
- on:dragend
173
- on:dragenter
174
- on:dragleave
175
- on:dragover
176
- on:dragstart
177
- on:drop
178
- on:focus
179
- on:focusin
180
- on:focusout
181
- on:keydown
182
- on:keypress
183
- on:keyup
184
- on:mousedown
185
- on:mouseenter
186
- on:mouseleave
187
- on:mousemove
188
- on:mouseover
189
- on:mouseout
190
- on:mouseup
191
- on:scroll
192
- on:wheel|passive
193
- on:paste
194
- on:keydown={onKeydown}
195
- {...$$restProps}
163
+ {...rest}
164
+ onkeydown={onKeydown}
196
165
  style="left:{popupPosition.x}px; top:{popupPosition.y}px"
197
166
  >
198
- <slot />
199
- <div class="arrow" bind:this={arrowRef} style={arrowStyle} />
167
+ {#if children}
168
+ {#if typeof children === 'string'}
169
+ <div class="callout-text">{children}</div>
170
+ {:else}
171
+ {@render children()}
172
+ {/if}
173
+ {/if}
174
+ <div class="arrow" bind:this={arrowRef} style={arrowStyle}></div>
200
175
  </div>
201
176
  </div>
202
177
  {/if}
@@ -1,56 +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
- };
48
- exports?: undefined;
49
- 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 | null;
6
+ crossAxisOffset?: number;
7
+ mainAxisOffset?: number;
8
+ open?: boolean | null;
9
+ placement?: PopoverPlacement;
10
+ portalHost?: HTMLElement;
11
+ reference?: HTMLElement | null;
50
12
  };
51
- export type CalloutProps = typeof __propDef.props;
52
- export type CalloutEvents = typeof __propDef.events;
53
- export type CalloutSlots = typeof __propDef.slots;
54
- export default class Callout extends SvelteComponent<CalloutProps, CalloutEvents, CalloutSlots> {
55
- }
56
- export {};
13
+ declare const Callout: import("svelte").Component<Props, {}, "conditionalRender" | "crossAxisOffset" | "mainAxisOffset" | "open" | "placement">;
14
+ type Callout = ReturnType<typeof Callout>;
15
+ export default Callout;
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import type { PopoverPlacement } from './Popover.types';
3
+ export type CalloutProps = HTMLAttributes<HTMLDivElement> & {
4
+ conditionalRender?: boolean | null;
5
+ crossAxisOffset?: number;
6
+ mainAxisOffset?: number;
7
+ open?: boolean | null;
8
+ placement?: PopoverPlacement;
9
+ portalHost?: HTMLElement;
10
+ reference?: HTMLElement | null;
11
+ };
@@ -1,18 +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
- export let id = undefined;
7
- /** Additional class names to apply. */
8
- export let variant = '';
9
- // ----- State ----- //
5
+ let { id, children, checked = $bindable(false), class: _class, disabled = $bindable(false), ...rest } = $props();
10
6
  let inputRef;
11
- $: {
12
- if ($$slots.default && id === undefined) {
7
+ $effect(() => {
8
+ if (children && id === undefined) {
13
9
  id = idGenerator.nextId('Checkbox');
14
10
  }
15
- }
11
+ });
16
12
  // ----- Methods ----- //
17
13
  export const blur = () => {
18
14
  inputRef?.blur();
@@ -30,50 +26,18 @@ export const focus = (options) => {
30
26
  A styled HTML input type=checkbox element.
31
27
  -->
32
28
  <div
33
- class={`sterling-checkbox ${variant}`}
29
+ class={['sterling-checkbox', _class].filter(Boolean).join(' ')}
34
30
  class:checked
35
31
  class:disabled
36
32
  class:using-keyboard={$usingKeyboard}
37
33
  >
38
34
  <div class="container">
39
- <input
40
- bind:this={inputRef}
41
- bind:checked
42
- {disabled}
43
- {id}
44
- type="checkbox"
45
- on:blur
46
- on:click
47
- on:change
48
- on:dblclick
49
- on:dragend
50
- on:dragenter
51
- on:dragleave
52
- on:dragover
53
- on:dragstart
54
- on:drop
55
- on:focus
56
- on:focusin
57
- on:focusout
58
- on:keydown
59
- on:keypress
60
- on:keyup
61
- on:input
62
- on:mousedown
63
- on:mouseenter
64
- on:mouseleave
65
- on:mousemove
66
- on:mouseover
67
- on:mouseout
68
- on:mouseup
69
- on:wheel|passive
70
- {...$$restProps}
71
- />
72
- <div class="indicator" />
35
+ <input bind:this={inputRef} bind:checked {disabled} {id} type="checkbox" {...rest} />
36
+ <div class="indicator"></div>
73
37
  </div>
74
- {#if $$slots.default}
38
+ {#if children}
75
39
  <label for={id}>
76
- <slot {checked} {disabled} inputId={id} value={$$restProps.value} {variant} />
40
+ {@render children()}
77
41
  </label>
78
42
  {/if}
79
43
  </div>
@@ -1,63 +1,10 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- checked?: boolean | undefined;
6
- disabled?: boolean | undefined;
7
- id?: string | undefined;
8
- variant?: string | undefined;
9
- blur?: (() => void) | undefined;
10
- click?: (() => void) | undefined;
11
- focus?: ((options?: FocusOptions) => void) | undefined;
12
- };
13
- events: {
14
- blur: FocusEvent;
15
- click: MouseEvent;
16
- change: Event;
17
- dblclick: MouseEvent;
18
- dragend: DragEvent;
19
- dragenter: DragEvent;
20
- dragleave: DragEvent;
21
- dragover: DragEvent;
22
- dragstart: DragEvent;
23
- drop: DragEvent;
24
- focus: FocusEvent;
25
- focusin: FocusEvent;
26
- focusout: FocusEvent;
27
- keydown: KeyboardEvent;
28
- keypress: KeyboardEvent;
29
- keyup: KeyboardEvent;
30
- input: Event;
31
- mousedown: MouseEvent;
32
- mouseenter: MouseEvent;
33
- mouseleave: MouseEvent;
34
- mousemove: MouseEvent;
35
- mouseover: MouseEvent;
36
- mouseout: MouseEvent;
37
- mouseup: MouseEvent;
38
- wheel: WheelEvent;
39
- } & {
40
- [evt: string]: CustomEvent<any>;
41
- };
42
- slots: {
43
- default: {
44
- checked: boolean;
45
- disabled: boolean;
46
- inputId: string | undefined;
47
- value: any;
48
- variant: string;
49
- };
50
- };
51
- exports?: undefined;
52
- bindings?: undefined;
53
- };
54
- export type CheckboxProps = typeof __propDef.props;
55
- export type CheckboxEvents = typeof __propDef.events;
56
- export type CheckboxSlots = typeof __propDef.slots;
1
+ /// <reference types="svelte" />
2
+ import type { HTMLInputAttributes } from 'svelte/elements';
57
3
  /** A styled HTML input type=checkbox element. */
58
- export default class Checkbox extends SvelteComponent<CheckboxProps, CheckboxEvents, CheckboxSlots> {
59
- get blur(): () => void;
60
- get click(): () => void;
61
- get focus(): (options?: FocusOptions | undefined) => void;
62
- }
63
- export {};
4
+ declare const Checkbox: import("svelte").Component<HTMLInputAttributes, {
5
+ blur: () => void;
6
+ click: () => void;
7
+ focus: (options?: FocusOptions) => void;
8
+ }, "disabled" | "checked">;
9
+ type Checkbox = ReturnType<typeof Checkbox>;
10
+ export default Checkbox;
@@ -1,25 +1,15 @@
1
- <script>import { onMount, setContext, tick } from 'svelte';
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">import { onMount, setContext, tick } from 'svelte';
2
4
  import Button from './Button.svelte';
3
5
  import { STERLING_PORTAL_CONTEXT_ID } from './Portal.constants';
4
6
  import { writable } from 'svelte/store';
5
7
  const dialogFadeDuration = 250;
6
- // ----- Props ----- //
7
- /** When true, clicking outside the dialog causes the dialog close. */
8
- export let backdropCloses = false;
9
- /** When true, the dialog is open; otherwise the dialog is closed. */
10
- export let open = false;
11
- /**
12
- * The return value from the dialog:
13
- * - an empty string indicates cancellation
14
- * - a value indicates form submission.
15
- */
16
- export let returnValue = '';
17
- /** Additional class names to apply. */
18
- export let variant = '';
19
- // ----- State ----- //
8
+ let { backdropCloses = false, open = $bindable(false), body, class: _class, content, footer, header, returnValue = $bindable(''), headerTitle, ...rest } = $props();
20
9
  let dialogRef;
21
10
  let contentRef;
22
11
  let formRef;
12
+ // svelte-ignore non_reactive_update
23
13
  let closing = false;
24
14
  const portalHostStore = writable(undefined);
25
15
  // ----- Context ----- //
@@ -101,9 +91,9 @@ const onSubmit = (event) => {
101
91
  return false;
102
92
  }
103
93
  };
104
- $: {
94
+ $effect(() => {
105
95
  updateDialog(open);
106
- }
96
+ });
107
97
  onMount(() => {
108
98
  updateDialog(open);
109
99
  // Use the dialog for any element portals
@@ -116,44 +106,46 @@ onMount(() => {
116
106
  });
117
107
  </script>
118
108
 
119
- <!-- @component
120
- A styled &lt;dialog&gt; element
121
-
122
- - Slots for typical dialog content.
123
- - Props and events to make using &lt;dialog&gt; easier
124
- -->
125
109
  <dialog
126
110
  bind:this={dialogRef}
127
- class={`sterling-dialog ${variant}`}
111
+ class={`sterling-dialog ${_class}`}
128
112
  class:open
129
113
  class:closing
130
- on:close
131
- on:cancel
132
- {...$$restProps}
114
+ {...rest}
133
115
  >
134
- <form method="dialog" bind:this={formRef} on:submit={onSubmit}>
116
+ <form method="dialog" bind:this={formRef} onsubmit={onSubmit}>
135
117
  <div class="content" bind:this={contentRef}>
136
- <slot name="content">
118
+ {#if content}
119
+ {@render content()}
120
+ {:else}
137
121
  <div class="header">
138
- <slot name="header">
122
+ {#if header}
123
+ {@render header()}
124
+ {:else}
139
125
  <div class="title">
140
- <slot name="title" />
126
+ {#if headerTitle}
127
+ {#if typeof headerTitle === 'string'}
128
+ {headerTitle}
129
+ {:else}
130
+ {@render headerTitle()}
131
+ {/if}
132
+ {/if}
141
133
  </div>
142
134
  <div class="close">
143
- <Button variant={`circular tool ${variant}`} on:click={() => closeDialog()}>
144
- <div class="close-x" />
135
+ <Button class={`circular tool`} onclick={() => closeDialog()}>
136
+ <div class="close-x"></div>
145
137
  </Button>
146
138
  </div>
147
- </slot>
139
+ {/if}
148
140
  </div>
149
141
  <div class="body">
150
- <slot name="body" />
142
+ {@render body?.()}
151
143
  </div>
152
- <div class="separator" />
144
+ <div class="separator"></div>
153
145
  <div class="footer">
154
- <slot name="footer" />
146
+ {@render footer?.()}
155
147
  </div>
156
- </slot>
148
+ {/if}
157
149
  </div>
158
150
  </form>
159
151
  </dialog>