@geoffcox/sterling-svelte 1.0.12 → 2.0.0

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 (325) hide show
  1. package/.DS_Store +0 -0
  2. package/Button.svelte +25 -0
  3. package/Button.svelte.d.ts +9 -0
  4. package/{dist/Callout.svelte → Callout.svelte} +47 -72
  5. package/Callout.svelte.d.ts +15 -0
  6. package/Callout.types.d.ts +11 -0
  7. package/Checkbox.svelte +43 -0
  8. package/Checkbox.svelte.d.ts +10 -0
  9. package/{dist/Dialog.svelte → Dialog.svelte} +30 -38
  10. package/Dialog.svelte.d.ts +14 -0
  11. package/{dist/Dropdown.svelte → Dropdown.svelte} +39 -71
  12. package/Dropdown.svelte.d.ts +18 -0
  13. package/Input.svelte +55 -0
  14. package/Input.svelte.d.ts +12 -0
  15. package/Label.svelte +91 -0
  16. package/Label.svelte.d.ts +17 -0
  17. package/Link.svelte +25 -0
  18. package/Link.svelte.d.ts +12 -0
  19. package/{dist/List.svelte → List.svelte} +35 -85
  20. package/List.svelte.d.ts +20 -0
  21. package/List.types.d.ts +5 -0
  22. package/ListItem.svelte +49 -0
  23. package/ListItem.svelte.d.ts +13 -0
  24. package/{dist/Menu.svelte → Menu.svelte} +18 -45
  25. package/Menu.svelte.d.ts +13 -0
  26. package/{dist/MenuBar.svelte → MenuBar.svelte} +36 -78
  27. package/MenuBar.svelte.d.ts +13 -0
  28. package/MenuButton.svelte +116 -0
  29. package/MenuButton.svelte.d.ts +20 -0
  30. package/{dist/MenuItem.svelte → MenuItem.svelte} +107 -151
  31. package/MenuItem.svelte.d.ts +22 -0
  32. package/{dist/MenuItem.types.d.ts → MenuItem.types.d.ts} +1 -9
  33. package/MenuSeparator.svelte +11 -0
  34. package/MenuSeparator.svelte.d.ts +6 -0
  35. package/{dist/Popover.svelte → Popover.svelte} +45 -64
  36. package/Popover.svelte.d.ts +15 -0
  37. package/Progress.constants.d.ts +1 -0
  38. package/Progress.constants.js +1 -0
  39. package/Progress.svelte +36 -0
  40. package/Progress.svelte.d.ts +12 -0
  41. package/Progress.types.d.ts +4 -0
  42. package/Radio.svelte +53 -0
  43. package/Radio.svelte.d.ts +13 -0
  44. package/{dist/Select.svelte → Select.svelte} +55 -94
  45. package/Select.svelte.d.ts +20 -0
  46. package/Slider.svelte +133 -0
  47. package/Slider.svelte.d.ts +19 -0
  48. package/Switch.svelte +61 -0
  49. package/Switch.svelte.d.ts +21 -0
  50. package/Tab.svelte +51 -0
  51. package/Tab.svelte.d.ts +12 -0
  52. package/{dist/TabList.svelte → TabList.svelte} +50 -76
  53. package/TabList.svelte.d.ts +18 -0
  54. package/TabList.types.d.ts +5 -0
  55. package/{dist/TextArea.svelte → TextArea.svelte} +17 -59
  56. package/TextArea.svelte.d.ts +19 -0
  57. package/Tooltip.svelte +63 -0
  58. package/Tooltip.svelte.d.ts +10 -0
  59. package/Tree.svelte +53 -0
  60. package/Tree.svelte.d.ts +15 -0
  61. package/Tree.types.d.ts +5 -0
  62. package/TreeChevron.svelte +27 -0
  63. package/TreeChevron.svelte.d.ts +9 -0
  64. package/{dist/TreeItem.svelte → TreeItem.svelte} +105 -159
  65. package/TreeItem.svelte.d.ts +22 -0
  66. package/TreeItem.types.d.ts +4 -0
  67. package/{dist/actions → actions}/clickOutside.d.ts +1 -0
  68. package/{dist/actions → actions}/clickOutside.js +1 -0
  69. package/actions/extraClass.d.ts +8 -0
  70. package/actions/extraClass.js +14 -0
  71. package/{dist/index.d.ts → index.d.ts} +4 -12
  72. package/{dist/index.js → index.js} +3 -9
  73. package/package.json +26 -28
  74. package/README.md +0 -18
  75. package/dist/Button.constants.d.ts +0 -2
  76. package/dist/Button.constants.js +0 -2
  77. package/dist/Button.svelte +0 -63
  78. package/dist/Button.svelte.d.ts +0 -65
  79. package/dist/Button.types.d.ts +0 -6
  80. package/dist/Callout.svelte.d.ts +0 -56
  81. package/dist/Checkbox.svelte +0 -79
  82. package/dist/Checkbox.svelte.d.ts +0 -63
  83. package/dist/ColorPicker.constants.d.ts +0 -1
  84. package/dist/ColorPicker.constants.js +0 -1
  85. package/dist/ColorPicker.svelte +0 -287
  86. package/dist/ColorPicker.svelte.d.ts +0 -52
  87. package/dist/ColorPicker.types.d.ts +0 -4
  88. package/dist/ColorPicker.types.js +0 -1
  89. package/dist/Dialog.svelte.d.ts +0 -37
  90. package/dist/Dropdown.svelte.d.ts +0 -77
  91. package/dist/HexColorSliders.svelte +0 -103
  92. package/dist/HexColorSliders.svelte.d.ts +0 -51
  93. package/dist/HslColorSliders.svelte +0 -128
  94. package/dist/HslColorSliders.svelte.d.ts +0 -51
  95. package/dist/Input.svelte +0 -89
  96. package/dist/Input.svelte.d.ts +0 -74
  97. package/dist/Label.svelte +0 -197
  98. package/dist/Label.svelte.d.ts +0 -82
  99. package/dist/Label.types.d.ts +0 -6
  100. package/dist/Label.types.js +0 -1
  101. package/dist/Link.svelte +0 -57
  102. package/dist/Link.svelte.d.ts +0 -65
  103. package/dist/List.svelte.d.ts +0 -75
  104. package/dist/List.types.d.ts +0 -13
  105. package/dist/ListItem.svelte +0 -78
  106. package/dist/ListItem.svelte.d.ts +0 -67
  107. package/dist/Menu.svelte.d.ts +0 -63
  108. package/dist/MenuBar.svelte.d.ts +0 -58
  109. package/dist/MenuButton.svelte +0 -145
  110. package/dist/MenuButton.svelte.d.ts +0 -71
  111. package/dist/MenuItem.svelte.d.ts +0 -83
  112. package/dist/MenuItemDisplay.svelte +0 -32
  113. package/dist/MenuItemDisplay.svelte.d.ts +0 -39
  114. package/dist/MenuSeparator.svelte +0 -9
  115. package/dist/MenuSeparator.svelte.d.ts +0 -20
  116. package/dist/Popover.svelte.d.ts +0 -59
  117. package/dist/Progress.constants.d.ts +0 -1
  118. package/dist/Progress.constants.js +0 -1
  119. package/dist/Progress.svelte +0 -83
  120. package/dist/Progress.svelte.d.ts +0 -61
  121. package/dist/Progress.types.d.ts +0 -4
  122. package/dist/Radio.svelte +0 -126
  123. package/dist/Radio.svelte.d.ts +0 -65
  124. package/dist/RgbColorSliders.svelte +0 -93
  125. package/dist/RgbColorSliders.svelte.d.ts +0 -24
  126. package/dist/Select.svelte.d.ts +0 -83
  127. package/dist/Slider.svelte +0 -190
  128. package/dist/Slider.svelte.d.ts +0 -66
  129. package/dist/Switch.svelte +0 -110
  130. package/dist/Switch.svelte.d.ts +0 -74
  131. package/dist/Tab.svelte +0 -94
  132. package/dist/Tab.svelte.d.ts +0 -71
  133. package/dist/TabList.svelte.d.ts +0 -70
  134. package/dist/TabList.types.d.ts +0 -13
  135. package/dist/TextArea.svelte.d.ts +0 -69
  136. package/dist/Tooltip.svelte +0 -106
  137. package/dist/Tooltip.svelte.d.ts +0 -70
  138. package/dist/Tree.svelte +0 -104
  139. package/dist/Tree.svelte.d.ts +0 -67
  140. package/dist/Tree.types.d.ts +0 -13
  141. package/dist/TreeChevron.svelte +0 -66
  142. package/dist/TreeChevron.svelte.d.ts +0 -53
  143. package/dist/TreeItem.svelte.d.ts +0 -101
  144. package/dist/TreeItem.types.d.ts +0 -14
  145. package/dist/TreeItemDisplay.svelte +0 -74
  146. package/dist/TreeItemDisplay.svelte.d.ts +0 -73
  147. package/dist/css/Button.base.css +0 -54
  148. package/dist/css/Button.colorful.css +0 -17
  149. package/dist/css/Button.css +0 -8
  150. package/dist/css/Button.disabled.css +0 -22
  151. package/dist/css/Button.secondary.colorful.css +0 -15
  152. package/dist/css/Button.secondary.css +0 -11
  153. package/dist/css/Button.shapes.css +0 -14
  154. package/dist/css/Button.tool.colorful.css +0 -13
  155. package/dist/css/Button.tool.css +0 -18
  156. package/dist/css/Callout.base.css +0 -55
  157. package/dist/css/Callout.colorful.css +0 -5
  158. package/dist/css/Callout.css +0 -2
  159. package/dist/css/Checkbox.base.css +0 -121
  160. package/dist/css/Checkbox.colorful.css +0 -17
  161. package/dist/css/Checkbox.css +0 -3
  162. package/dist/css/Checkbox.disabled.css +0 -28
  163. package/dist/css/ColorPicker.base.css +0 -23
  164. package/dist/css/ColorPicker.css +0 -1
  165. package/dist/css/Dialog.base.css +0 -114
  166. package/dist/css/Dialog.css +0 -1
  167. package/dist/css/Dropdown.base.css +0 -105
  168. package/dist/css/Dropdown.colorful.css +0 -23
  169. package/dist/css/Dropdown.composed.css +0 -11
  170. package/dist/css/Dropdown.css +0 -4
  171. package/dist/css/Dropdown.disabled.css +0 -32
  172. package/dist/css/HexColorSliders.base.css +0 -87
  173. package/dist/css/HexColorSliders.css +0 -1
  174. package/dist/css/HslColorSliders.base.css +0 -105
  175. package/dist/css/HslColorSliders.css +0 -1
  176. package/dist/css/Input.base.css +0 -72
  177. package/dist/css/Input.colorful.css +0 -22
  178. package/dist/css/Input.composed.css +0 -12
  179. package/dist/css/Input.css +0 -4
  180. package/dist/css/Input.disabled.css +0 -24
  181. package/dist/css/Label.base.css +0 -114
  182. package/dist/css/Label.boxed.colorful.css +0 -21
  183. package/dist/css/Label.boxed.css +0 -31
  184. package/dist/css/Label.colorful.css +0 -3
  185. package/dist/css/Label.css +0 -5
  186. package/dist/css/Label.disabled.css +0 -9
  187. package/dist/css/Link.base.css +0 -43
  188. package/dist/css/Link.colorful.css +0 -15
  189. package/dist/css/Link.css +0 -11
  190. package/dist/css/Link.disabled.css +0 -10
  191. package/dist/css/Link.ghost.colorful.css +0 -7
  192. package/dist/css/Link.ghost.css +0 -11
  193. package/dist/css/Link.text-underline.css +0 -8
  194. package/dist/css/Link.text-underline.ghost.css +0 -13
  195. package/dist/css/Link.undecorated.colorful.css +0 -8
  196. package/dist/css/Link.undecorated.css +0 -8
  197. package/dist/css/Link.undecorated.ghost.css +0 -8
  198. package/dist/css/Link.undecorated.underline.css +0 -8
  199. package/dist/css/List.base.css +0 -84
  200. package/dist/css/List.composed.css +0 -8
  201. package/dist/css/List.css +0 -3
  202. package/dist/css/List.disabled.css +0 -7
  203. package/dist/css/ListItem.base.css +0 -33
  204. package/dist/css/ListItem.css +0 -2
  205. package/dist/css/ListItem.disabled.css +0 -28
  206. package/dist/css/Menu.base.css +0 -21
  207. package/dist/css/Menu.css +0 -1
  208. package/dist/css/MenuBar.base.css +0 -9
  209. package/dist/css/MenuBar.css +0 -1
  210. package/dist/css/MenuButton.base.css +0 -13
  211. package/dist/css/MenuButton.css +0 -1
  212. package/dist/css/MenuItem.base.css +0 -48
  213. package/dist/css/MenuItem.css +0 -1
  214. package/dist/css/MenuItemDisplay.base.css +0 -79
  215. package/dist/css/MenuItemDisplay.css +0 -2
  216. package/dist/css/MenuItemDisplay.disabled.css +0 -28
  217. package/dist/css/MenuSeparator.base.css +0 -5
  218. package/dist/css/MenuSeparator.css +0 -1
  219. package/dist/css/Popover.css +0 -21
  220. package/dist/css/Progress.base.css +0 -85
  221. package/dist/css/Progress.css +0 -2
  222. package/dist/css/Progress.disabled.css +0 -17
  223. package/dist/css/Radio.base.css +0 -109
  224. package/dist/css/Radio.colorful.css +0 -18
  225. package/dist/css/Radio.css +0 -3
  226. package/dist/css/Radio.disabled.css +0 -28
  227. package/dist/css/RgbColorSliders.base.css +0 -94
  228. package/dist/css/RgbColorSliders.css +0 -1
  229. package/dist/css/Select.base.css +0 -101
  230. package/dist/css/Select.colorful.css +0 -24
  231. package/dist/css/Select.composed.css +0 -12
  232. package/dist/css/Select.css +0 -4
  233. package/dist/css/Select.disabled.css +0 -28
  234. package/dist/css/Slider.base.css +0 -152
  235. package/dist/css/Slider.colorful.css +0 -11
  236. package/dist/css/Slider.composed.css +0 -8
  237. package/dist/css/Slider.css +0 -4
  238. package/dist/css/Slider.disabled.css +0 -30
  239. package/dist/css/Switch.base.css +0 -175
  240. package/dist/css/Switch.colorful.css +0 -45
  241. package/dist/css/Switch.css +0 -3
  242. package/dist/css/Switch.disabled.css +0 -30
  243. package/dist/css/Tab.base.css +0 -96
  244. package/dist/css/Tab.colorful.css +0 -13
  245. package/dist/css/Tab.css +0 -3
  246. package/dist/css/Tab.disabled.css +0 -36
  247. package/dist/css/TabList.base.css +0 -34
  248. package/dist/css/TabList.css +0 -1
  249. package/dist/css/TextArea.base.css +0 -62
  250. package/dist/css/TextArea.colorful.css +0 -17
  251. package/dist/css/TextArea.composed.css +0 -8
  252. package/dist/css/TextArea.css +0 -4
  253. package/dist/css/TextArea.disabled.css +0 -28
  254. package/dist/css/Tooltip.base.css +0 -6
  255. package/dist/css/Tooltip.css +0 -1
  256. package/dist/css/Tree.base.css +0 -49
  257. package/dist/css/Tree.composed.css +0 -8
  258. package/dist/css/Tree.css +0 -3
  259. package/dist/css/Tree.disabled.css +0 -27
  260. package/dist/css/TreeChevron.base.css +0 -86
  261. package/dist/css/TreeChevron.css +0 -1
  262. package/dist/css/TreeItem.base.css +0 -3
  263. package/dist/css/TreeItem.css +0 -1
  264. package/dist/css/TreeItemDisplay.base.css +0 -48
  265. package/dist/css/TreeItemDisplay.colorful.css +0 -9
  266. package/dist/css/TreeItemDisplay.css +0 -3
  267. package/dist/css/TreeItemDisplay.disabled.css +0 -28
  268. package/dist/css/dark-mode.css +0 -134
  269. package/dist/css/light-mode.css +0 -134
  270. package/dist/css/sterling.css +0 -37
  271. package/dist/package.json +0 -108
  272. /package/{dist/@types → @types}/clickOutside.d.ts +0 -0
  273. /package/{dist/Button.types.js → Callout.types.js} +0 -0
  274. /package/{dist/Label.constants.d.ts → Label.constants.d.ts} +0 -0
  275. /package/{dist/Label.constants.js → Label.constants.js} +0 -0
  276. /package/{dist/List.constants.d.ts → List.constants.d.ts} +0 -0
  277. /package/{dist/List.constants.js → List.constants.js} +0 -0
  278. /package/{dist/List.types.js → List.types.js} +0 -0
  279. /package/{dist/MenuBar.constants.d.ts → MenuBar.constants.d.ts} +0 -0
  280. /package/{dist/MenuBar.constants.js → MenuBar.constants.js} +0 -0
  281. /package/{dist/MenuBar.types.d.ts → MenuBar.types.d.ts} +0 -0
  282. /package/{dist/MenuBar.types.js → MenuBar.types.js} +0 -0
  283. /package/{dist/MenuItem.constants.d.ts → MenuItem.constants.d.ts} +0 -0
  284. /package/{dist/MenuItem.constants.js → MenuItem.constants.js} +0 -0
  285. /package/{dist/MenuItem.types.js → MenuItem.types.js} +0 -0
  286. /package/{dist/MenuItem.utils.d.ts → MenuItem.utils.d.ts} +0 -0
  287. /package/{dist/MenuItem.utils.js → MenuItem.utils.js} +0 -0
  288. /package/{dist/Popover.constants.d.ts → Popover.constants.d.ts} +0 -0
  289. /package/{dist/Popover.constants.js → Popover.constants.js} +0 -0
  290. /package/{dist/Popover.types.d.ts → Popover.types.d.ts} +0 -0
  291. /package/{dist/Popover.types.js → Popover.types.js} +0 -0
  292. /package/{dist/Portal.constants.d.ts → Portal.constants.d.ts} +0 -0
  293. /package/{dist/Portal.constants.js → Portal.constants.js} +0 -0
  294. /package/{dist/Portal.types.d.ts → Portal.types.d.ts} +0 -0
  295. /package/{dist/Portal.types.js → Portal.types.js} +0 -0
  296. /package/{dist/Progress.types.js → Progress.types.js} +0 -0
  297. /package/{dist/TabList.constants.d.ts → TabList.constants.d.ts} +0 -0
  298. /package/{dist/TabList.constants.js → TabList.constants.js} +0 -0
  299. /package/{dist/TabList.types.js → TabList.types.js} +0 -0
  300. /package/{dist/TextArea.constants.d.ts → TextArea.constants.d.ts} +0 -0
  301. /package/{dist/TextArea.constants.js → TextArea.constants.js} +0 -0
  302. /package/{dist/TextArea.types.d.ts → TextArea.types.d.ts} +0 -0
  303. /package/{dist/TextArea.types.js → TextArea.types.js} +0 -0
  304. /package/{dist/Tree.constants.d.ts → Tree.constants.d.ts} +0 -0
  305. /package/{dist/Tree.constants.js → Tree.constants.js} +0 -0
  306. /package/{dist/Tree.types.js → Tree.types.js} +0 -0
  307. /package/{dist/TreeItem.constants.d.ts → TreeItem.constants.d.ts} +0 -0
  308. /package/{dist/TreeItem.constants.js → TreeItem.constants.js} +0 -0
  309. /package/{dist/TreeItem.types.js → TreeItem.types.js} +0 -0
  310. /package/{dist/actions → actions}/applyLightDarkMode.d.ts +0 -0
  311. /package/{dist/actions → actions}/applyLightDarkMode.js +0 -0
  312. /package/{dist/actions → actions}/forwardEvents.d.ts +0 -0
  313. /package/{dist/actions → actions}/forwardEvents.js +0 -0
  314. /package/{dist/actions → actions}/portal.d.ts +0 -0
  315. /package/{dist/actions → actions}/portal.js +0 -0
  316. /package/{dist/actions → actions}/trapKeyboardFocus.d.ts +0 -0
  317. /package/{dist/actions → actions}/trapKeyboardFocus.js +0 -0
  318. /package/{dist/idGenerator.d.ts → idGenerator.d.ts} +0 -0
  319. /package/{dist/idGenerator.js → idGenerator.js} +0 -0
  320. /package/{dist/mediaQueries → mediaQueries}/prefersColorSchemeDark.d.ts +0 -0
  321. /package/{dist/mediaQueries → mediaQueries}/prefersColorSchemeDark.js +0 -0
  322. /package/{dist/mediaQueries → mediaQueries}/prefersReducedMotion.d.ts +0 -0
  323. /package/{dist/mediaQueries → mediaQueries}/prefersReducedMotion.js +0 -0
  324. /package/{dist/mediaQueries → mediaQueries}/usingKeyboard.d.ts +0 -0
  325. /package/{dist/mediaQueries → mediaQueries}/usingKeyboard.js +0 -0
@@ -1,36 +1,43 @@
1
- <script>import { createEventDispatcher, setContext } from 'svelte';
2
- import { writable } from 'svelte/store';
1
+ <svelte:options runes={true} />
2
+
3
+ <script lang="ts">import { setContext } from 'svelte';
3
4
  import { TAB_LIST_CONTEXT_KEY } from './TabList.constants';
4
- // ----- Props ----- //
5
- /** When true, the tab list and its tabs are disabled. */
6
- export let disabled = false;
7
- /** The value of the currently selected tab. */
8
- export let selectedValue = undefined;
9
- /** When true, the tab list is displayed vertically. */
10
- export let vertical = false;
11
- /** Additional class names to apply. */
12
- export let variant = '';
13
- // ----- State ----- //
5
+ let { children, class: _class, disabled = false, onSelect, selectedValue = $bindable(), vertical = false, ...rest } = $props();
14
6
  let tabListRef;
15
7
  let lastSelectedTabRef;
16
- const disabledStore = writable(disabled);
17
- const selectedValueStore = writable(selectedValue);
18
- const verticalStore = writable(vertical);
19
- $: disabledStore.set(disabled);
20
- $: selectedValueStore.set(selectedValue);
21
- $: {
22
- selectedValue = $selectedValueStore;
23
- }
24
- $: verticalStore.set(vertical);
25
- // ----- Events ----- //
26
- const dispatch = createEventDispatcher();
27
- const raiseSelect = (value) => {
28
- dispatch('select', { value });
8
+ let tabListContext = {
9
+ get disabled() {
10
+ return disabled;
11
+ },
12
+ set disabled(value) {
13
+ disabled = value;
14
+ },
15
+ get selectedValue() {
16
+ return selectedValue;
17
+ },
18
+ set selectedValue(value) {
19
+ selectedValue = value;
20
+ },
21
+ get vertical() {
22
+ return vertical;
23
+ },
24
+ set vertical(value) {
25
+ vertical = value;
26
+ }
29
27
  };
30
- $: {
31
- raiseSelect(selectedValue);
32
- }
33
- // ----- Methods ----- //
28
+ $effect(() => {
29
+ tabListContext.disabled = disabled;
30
+ });
31
+ $effect(() => {
32
+ tabListContext.selectedValue = selectedValue;
33
+ });
34
+ $effect(() => {
35
+ tabListContext.vertical = vertical;
36
+ });
37
+ setContext(TAB_LIST_CONTEXT_KEY, tabListContext);
38
+ $effect(() => {
39
+ onSelect?.(selectedValue);
40
+ });
34
41
  export const blur = () => {
35
42
  tabListRef?.blur();
36
43
  };
@@ -43,7 +50,6 @@ export const focus = (options) => {
43
50
  selectFirstTab();
44
51
  }
45
52
  };
46
- // ----- Selection ----- //
47
53
  const isElementTab = (candidate) => {
48
54
  return (candidate &&
49
55
  candidate.getAttribute('data-value') !== null &&
@@ -61,7 +67,7 @@ const getSelectedTabElement = () => {
61
67
  }
62
68
  };
63
69
  const selectTab = (value, element) => {
64
- selectedValueStore.set(value);
70
+ selectedValue = value;
65
71
  lastSelectedTabRef = element;
66
72
  element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
67
73
  element.focus();
@@ -116,7 +122,6 @@ export const selectLastTab = () => {
116
122
  }
117
123
  return false;
118
124
  };
119
- // ----- EventHandlers ----- //
120
125
  const onClick = (event) => {
121
126
  if (!disabled) {
122
127
  let candidate = event.target;
@@ -129,6 +134,7 @@ const onClick = (event) => {
129
134
  selectTab(candidateValue, candidate);
130
135
  }
131
136
  }
137
+ rest.onclick?.(event);
132
138
  };
133
139
  const onKeydown = (event) => {
134
140
  // if using arrows, only move when there are no modifier keys
@@ -138,91 +144,59 @@ const onKeydown = (event) => {
138
144
  selectFirstTab();
139
145
  event.preventDefault();
140
146
  event.stopPropagation();
141
- return false;
147
+ break;
142
148
  case 'End':
143
149
  selectLastTab();
144
150
  event.preventDefault();
145
151
  event.stopPropagation();
146
- return false;
152
+ break;
147
153
  case 'ArrowLeft':
148
154
  if (!vertical) {
149
155
  selectPreviousTab();
150
156
  }
151
157
  event.preventDefault();
152
158
  event.stopPropagation();
153
- return false;
159
+ break;
154
160
  case 'ArrowRight':
155
161
  if (!vertical) {
156
162
  selectNextTab();
157
163
  }
158
164
  event.preventDefault();
159
165
  event.stopPropagation();
160
- return false;
166
+ break;
161
167
  case 'ArrowUp':
162
168
  if (vertical) {
163
169
  selectPreviousTab();
164
170
  }
165
171
  event.preventDefault();
166
172
  event.stopPropagation();
167
- return false;
173
+ break;
168
174
  case 'ArrowDown':
169
175
  if (vertical) {
170
176
  selectNextTab();
171
177
  }
172
178
  event.preventDefault();
173
179
  event.stopPropagation();
174
- return false;
180
+ break;
175
181
  default:
176
182
  break;
177
183
  }
178
184
  }
185
+ rest.onkeydown?.(event);
179
186
  };
180
- // ----- Set Context ----- //
181
- setContext(TAB_LIST_CONTEXT_KEY, {
182
- disabled: disabledStore,
183
- selectedValue: selectedValueStore,
184
- vertical: verticalStore
185
- });
186
187
  </script>
187
188
 
188
189
  <div
189
190
  aria-orientation={vertical ? 'vertical' : 'horizontal'}
190
191
  bind:this={tabListRef}
191
- class={`sterling-tab-list ${variant}`}
192
+ class={`sterling-tab-list ${_class}`}
192
193
  class:disabled
193
194
  class:vertical
194
195
  role="tablist"
195
196
  tabindex="-1"
196
- on:blur
197
- on:click
198
- on:click={onClick}
199
- on:copy
200
- on:cut
201
- on:dblclick
202
- on:dragend
203
- on:dragenter
204
- on:dragleave
205
- on:dragover
206
- on:dragstart
207
- on:drop
208
- on:focus
209
- on:focusin
210
- on:focusout
211
- on:keydown
212
- on:keydown={onKeydown}
213
- on:keypress
214
- on:keyup
215
- on:mousedown
216
- on:mouseenter
217
- on:mouseleave
218
- on:mousemove
219
- on:mouseover
220
- on:mouseout
221
- on:mouseup
222
- on:scroll
223
- on:wheel|passive
224
- on:paste
225
- {...$$restProps}
197
+ onclick={onClick}
198
+ onkeydown={onKeydown}
199
+ {...rest}
226
200
  >
227
- <slot {disabled} {selectedValue} {variant} {vertical} />
201
+ {@render children?.()}
228
202
  </div>
@@ -0,0 +1,18 @@
1
+ /// <reference types="svelte" />
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type Props = HTMLAttributes<HTMLDivElement> & {
4
+ disabled?: boolean | null;
5
+ selectedValue?: string;
6
+ vertical?: boolean | null;
7
+ onSelect?: (value?: string) => void;
8
+ };
9
+ declare const TabList: import("svelte").Component<Props, {
10
+ blur: () => void;
11
+ focus: (options?: FocusOptions) => void;
12
+ selectFirstTab: () => boolean;
13
+ selectPreviousTab: () => boolean;
14
+ selectNextTab: () => boolean;
15
+ selectLastTab: () => boolean;
16
+ }, "selectedValue">;
17
+ type TabList = ReturnType<typeof TabList>;
18
+ export default TabList;
@@ -0,0 +1,5 @@
1
+ export type TabListContext = {
2
+ disabled?: boolean | null | undefined;
3
+ selectedValue?: string | undefined;
4
+ vertical?: boolean | null | undefined;
5
+ };
@@ -1,17 +1,9 @@
1
- <script>import { onMount, tick } from 'svelte';
2
- // ----- Props ----- //
3
- export let disabled = false;
4
- export let value = '';
5
- /** When true, the text area will resize itself vertically to fit text.*/
6
- export let autoHeight = false;
7
- /** Sets the resize handle direction. */
8
- export let resize = 'none';
9
- /** Additional class names to apply. */
10
- export let variant = '';
11
- // ----- State ----- //
1
+ <svelte:options runes={true} />
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();
12
5
  let textAreaRef;
13
6
  const correctResize = async () => {
14
- console.log('correctResize');
15
7
  await tick();
16
8
  setTimeout(() => {
17
9
  if (autoHeight) {
@@ -26,8 +18,6 @@ const correctResize = async () => {
26
18
  }
27
19
  }, 0);
28
20
  };
29
- $: autoHeight, resize, correctResize();
30
- // ----- autoHeight ----- //
31
21
  const autoSetHeight = () => {
32
22
  if (autoHeight && textAreaRef) {
33
23
  // the style must be directly set to avoid re-rendering looping latency
@@ -36,15 +26,16 @@ const autoSetHeight = () => {
36
26
  textAreaRef.style.height = `${textAreaRef.scrollHeight}px`;
37
27
  }
38
28
  };
39
- $: autoHeight, autoSetHeight();
40
- // ----- Event Handlers ----- //
41
- const onInput = () => {
42
- autoSetHeight();
43
- };
44
- onMount(() => {
29
+ $effect(() => {
30
+ autoHeight;
31
+ resize;
32
+ correctResize();
45
33
  autoSetHeight();
46
34
  });
47
- // ----- Methods ----- //
35
+ const onInput = (event) => {
36
+ autoSetHeight();
37
+ rest.oninput?.(event);
38
+ };
48
39
  export const blur = () => {
49
40
  textAreaRef?.blur();
50
41
  };
@@ -70,47 +61,14 @@ export const setRangeText = (replacement, start, end, selectionMode) => {
70
61
  };
71
62
  </script>
72
63
 
73
- <div class={`sterling-text-area ${variant}`} class:disabled>
64
+ <div class={`sterling-text-area ${_class}`} class:disabled>
74
65
  <textarea
75
66
  bind:this={textAreaRef}
76
67
  bind:value
77
68
  {disabled}
78
69
  rows="1"
79
- style={`--TextArea__resize: ${resize};`}
80
- on:beforeinput
81
- on:blur
82
- on:click
83
- on:change
84
- on:copy
85
- on:cut
86
- on:paste
87
- on:dblclick
88
- on:dragend
89
- on:dragenter
90
- on:dragleave
91
- on:dragover
92
- on:dragstart
93
- on:drop
94
- on:focus
95
- on:focusin
96
- on:focusout
97
- on:input
98
- on:invalid
99
- on:keydown
100
- on:keypress
101
- on:keyup
102
- on:mousedown
103
- on:mouseenter
104
- on:mouseleave
105
- on:mousemove
106
- on:mouseover
107
- on:mouseout
108
- on:mouseup
109
- on:select
110
- on:submit
111
- on:reset
112
- on:wheel|passive
113
- on:input={onInput}
114
- {...$$restProps}
115
- />
70
+ {...rest}
71
+ oninput={onInput}
72
+ style={`--TextArea__resize: ${resize};${style}`}
73
+ ></textarea>
116
74
  </div>
@@ -0,0 +1,19 @@
1
+ /// <reference types="svelte" />
2
+ import type { TextAreaResize } from './TextArea.types';
3
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
4
+ type Props = HTMLTextareaAttributes & {
5
+ autoHeight?: boolean | null | undefined;
6
+ disabled?: boolean | null | undefined;
7
+ value?: string;
8
+ resize?: TextAreaResize;
9
+ };
10
+ declare const TextArea: import("svelte").Component<Props, {
11
+ blur: () => void;
12
+ click: () => void;
13
+ focus: (options?: FocusOptions) => void;
14
+ select: () => void;
15
+ setSelectionRange: (start: number | null, end: number | null, direction?: 'forward' | 'backward' | 'none') => void;
16
+ setRangeText: (replacement: string, start?: number, end?: number, selectionMode?: SelectionMode) => void;
17
+ }, "value" | "resize">;
18
+ type TextArea = ReturnType<typeof TextArea>;
19
+ export default TextArea;
package/Tooltip.svelte ADDED
@@ -0,0 +1,63 @@
1
+ <svelte:options runes={true} />
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 = () => {
10
+ if (!disabled) {
11
+ open = true;
12
+ }
13
+ };
14
+ const hide = () => (open = false);
15
+ const delayShow = () => {
16
+ hoverDelayMilliseconds === 0
17
+ ? show()
18
+ : setTimeout(() => {
19
+ show();
20
+ }, hoverDelayMilliseconds);
21
+ };
22
+ $effect(() => {
23
+ if (disabled) {
24
+ hide();
25
+ }
26
+ });
27
+ // ----- Event Listeners ----- //
28
+ let cleanupAutoShowUpdate = () => { };
29
+ const autoShowUpdate = () => {
30
+ cleanupAutoShowUpdate();
31
+ cleanupAutoShowUpdate = () => { };
32
+ const element = reference;
33
+ open = false;
34
+ 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
+ };
41
+ }
42
+ };
43
+ $effect(() => {
44
+ reference;
45
+ autoShowUpdate();
46
+ });
47
+ // ----- EventHandlers ----- //
48
+ onMount(() => {
49
+ autoShowUpdate();
50
+ });
51
+ </script>
52
+
53
+ {@render children?.()}
54
+ <div class="sterling-tooltip-origin" bind:this={originRef}></div>
55
+ <Callout class={_class} {open} {reference} {...rest}>
56
+ {#if tip}
57
+ {#if typeof tip === 'string'}
58
+ {tip}
59
+ {:else}
60
+ {@render tip()}
61
+ {/if}
62
+ {/if}
63
+ </Callout>
@@ -0,0 +1,10 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { CalloutProps } from './Callout.types';
3
+ type Props = Omit<CalloutProps, 'reference'> & {
4
+ disabled?: boolean;
5
+ hoverDelayMilliseconds?: number;
6
+ tip?: string | Snippet;
7
+ };
8
+ declare const Tooltip: import("svelte").Component<Props, {}, "open">;
9
+ type Tooltip = ReturnType<typeof Tooltip>;
10
+ export default Tooltip;
package/Tree.svelte ADDED
@@ -0,0 +1,53 @@
1
+ <svelte:options runes={true} />
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 = {
9
+ get disabled() {
10
+ return disabled;
11
+ },
12
+ get expandedValues() {
13
+ return expandedValues;
14
+ },
15
+ set expandedValues(value) {
16
+ expandedValues = value;
17
+ },
18
+ get selectedValue() {
19
+ return selectedValue;
20
+ },
21
+ set selectedValue(value) {
22
+ selectedValue = value;
23
+ }
24
+ };
25
+ setContext(TREE_CONTEXT_KEY, treeContext);
26
+ $effect(() => {
27
+ onSelect?.(selectedValue);
28
+ });
29
+ $effect(() => {
30
+ onExpandCollapse?.(expandedValues);
31
+ });
32
+ export const blur = () => {
33
+ treeRef?.blur();
34
+ };
35
+ export const focus = (options) => {
36
+ treeRef?.focus(options);
37
+ };
38
+ </script>
39
+
40
+ <div
41
+ bind:this={treeRef}
42
+ aria-disabled={disabled}
43
+ class={`sterling-tree ${_class}`}
44
+ class:disabled
45
+ class:using-keyboard={$usingKeyboard}
46
+ role="tree"
47
+ tabindex="0"
48
+ {...rest}
49
+ >
50
+ <div class="container">
51
+ {@render children?.()}
52
+ </div>
53
+ </div>
@@ -0,0 +1,15 @@
1
+ /// <reference types="svelte" />
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type Props = HTMLAttributes<HTMLDivElement> & {
4
+ disabled?: boolean | null;
5
+ expandedValues?: string[];
6
+ selectedValue?: string;
7
+ onExpandCollapse?: (expandedValues: string[]) => void;
8
+ onSelect?: (selectedValue: string | undefined) => void;
9
+ };
10
+ declare const Tree: import("svelte").Component<Props, {
11
+ blur: () => void;
12
+ focus: (options?: FocusOptions) => void;
13
+ }, "selectedValue" | "expandedValues">;
14
+ type Tree = ReturnType<typeof Tree>;
15
+ export default Tree;
@@ -0,0 +1,5 @@
1
+ export type TreeContext = {
2
+ disabled: boolean | null | undefined;
3
+ expandedValues: string[];
4
+ selectedValue: string | undefined;
5
+ };
@@ -0,0 +1,27 @@
1
+ <svelte:options runes={true} />
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(() => {
8
+ setTimeout(() => {
9
+ mounted = true;
10
+ }, 0);
11
+ });
12
+ let animate = $state(false);
13
+ $effect(() => {
14
+ if (expanded !== previousExpanded && mounted) {
15
+ animate = true;
16
+ }
17
+ previousExpanded = expanded;
18
+ });
19
+ </script>
20
+
21
+ <div
22
+ class={`sterling-tree-chevron ${_class}`}
23
+ class:leaf={!hasChildren}
24
+ class:animate
25
+ class:expanded
26
+ {...rest}
27
+ ></div>
@@ -0,0 +1,9 @@
1
+ /// <reference types="svelte" />
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type Props = HTMLAttributes<HTMLDivElement> & {
4
+ expanded?: boolean | null | undefined;
5
+ hasChildren?: boolean | null | undefined;
6
+ };
7
+ declare const TreeChevron: import("svelte").Component<Props, {}, "">;
8
+ type TreeChevron = ReturnType<typeof TreeChevron>;
9
+ export default TreeChevron;