@dorsk/tsumikit 0.74.0 → 0.75.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 (127) hide show
  1. package/README.md +38 -1
  2. package/dist/autoresize.d.ts +2 -0
  3. package/dist/autoresize.js +8 -1
  4. package/dist/components/atoms/Artwork.svelte +12 -5
  5. package/dist/components/atoms/Avatar.svelte +1 -1
  6. package/dist/components/atoms/Badge.svelte +59 -23
  7. package/dist/components/atoms/Button.svelte +130 -96
  8. package/dist/components/atoms/Button.svelte.d.ts +2 -0
  9. package/dist/components/atoms/Card.svelte +10 -4
  10. package/dist/components/atoms/Checkbox.svelte +36 -9
  11. package/dist/components/atoms/Checkbox.svelte.d.ts +2 -0
  12. package/dist/components/atoms/Gauge.svelte +20 -14
  13. package/dist/components/atoms/Heading.svelte +1 -1
  14. package/dist/components/atoms/Icon.svelte +1 -0
  15. package/dist/components/atoms/Input.svelte +67 -13
  16. package/dist/components/atoms/Kbd.svelte +3 -3
  17. package/dist/components/atoms/Link.svelte +7 -2
  18. package/dist/components/atoms/Progress.svelte +4 -2
  19. package/dist/components/atoms/Scrim.svelte +3 -8
  20. package/dist/components/atoms/SegmentedProgress.svelte +5 -4
  21. package/dist/components/atoms/Select.svelte +58 -27
  22. package/dist/components/atoms/Slider.svelte +79 -22
  23. package/dist/components/atoms/Slider.svelte.d.ts +2 -0
  24. package/dist/components/atoms/Swatch.svelte +19 -8
  25. package/dist/components/atoms/Switch.svelte +34 -21
  26. package/dist/components/atoms/Switch.svelte.d.ts +2 -0
  27. package/dist/components/atoms/Text.svelte +1 -1
  28. package/dist/components/atoms/Textarea.svelte +34 -12
  29. package/dist/components/atoms/TimeDisplay.svelte +4 -2
  30. package/dist/components/layouts/AppShell.svelte +26 -15
  31. package/dist/components/layouts/MasterDetail.svelte +23 -21
  32. package/dist/components/layouts/NavBar.svelte +11 -8
  33. package/dist/components/layouts/NavItem.svelte +15 -7
  34. package/dist/components/layouts/NavSection.svelte +1 -1
  35. package/dist/components/layouts/ResizablePanel.svelte +37 -16
  36. package/dist/components/layouts/TabBar.svelte +24 -14
  37. package/dist/components/layouts/TabBar.svelte.d.ts +2 -0
  38. package/dist/components/molecules/Accordion.svelte +4 -0
  39. package/dist/components/molecules/Accordion.svelte.d.ts +2 -0
  40. package/dist/components/molecules/AttachmentList.svelte +14 -11
  41. package/dist/components/molecules/Breadcrumb.svelte +13 -9
  42. package/dist/components/molecules/Callout.svelte +3 -3
  43. package/dist/components/molecules/CapBar.svelte +23 -22
  44. package/dist/components/molecules/Carousel.svelte +27 -17
  45. package/dist/components/molecules/ChatBubble.svelte +2 -2
  46. package/dist/components/molecules/CodeBlock.svelte +2 -2
  47. package/dist/components/molecules/Combobox.svelte +30 -1
  48. package/dist/components/molecules/Combobox.svelte.d.ts +4 -0
  49. package/dist/components/molecules/Composer.svelte +2 -2
  50. package/dist/components/molecules/ConfirmModal.svelte +4 -0
  51. package/dist/components/molecules/ConfirmModal.svelte.d.ts +2 -0
  52. package/dist/components/molecules/CopyButton.svelte +46 -2
  53. package/dist/components/molecules/CopyButton.svelte.d.ts +2 -0
  54. package/dist/components/molecules/Disclosure.svelte +23 -12
  55. package/dist/components/molecules/Disclosure.svelte.d.ts +2 -0
  56. package/dist/components/molecules/Drawer.svelte +43 -23
  57. package/dist/components/molecules/Drawer.svelte.d.ts +2 -0
  58. package/dist/components/molecules/Dropzone.svelte +24 -8
  59. package/dist/components/molecules/EmojiPicker.svelte +27 -8
  60. package/dist/components/molecules/EmojiPicker.svelte.d.ts +2 -0
  61. package/dist/components/molecules/EmptyState.svelte +5 -5
  62. package/dist/components/molecules/Fieldset.svelte +8 -13
  63. package/dist/components/molecules/FileButton.svelte +57 -31
  64. package/dist/components/molecules/FileButton.svelte.d.ts +2 -0
  65. package/dist/components/molecules/FilterInput.svelte +51 -11
  66. package/dist/components/molecules/FontScalePicker.svelte +20 -9
  67. package/dist/components/molecules/GitRef.svelte +9 -7
  68. package/dist/components/molecules/GlyphStack.svelte +38 -14
  69. package/dist/components/molecules/IconButton.svelte +6 -3
  70. package/dist/components/molecules/IconButton.svelte.d.ts +2 -0
  71. package/dist/components/molecules/InputGroup.svelte +13 -12
  72. package/dist/components/molecules/LoadMore.svelte +6 -1
  73. package/dist/components/molecules/LoadMore.svelte.d.ts +2 -0
  74. package/dist/components/molecules/Menu.svelte +33 -7
  75. package/dist/components/molecules/Menu.svelte.d.ts +2 -0
  76. package/dist/components/molecules/Metric.svelte +11 -9
  77. package/dist/components/molecules/Modal.svelte +76 -26
  78. package/dist/components/molecules/Modal.svelte.d.ts +2 -0
  79. package/dist/components/molecules/OptionButton.svelte +28 -10
  80. package/dist/components/molecules/OptionButton.svelte.d.ts +2 -0
  81. package/dist/components/molecules/Pagination.svelte +26 -9
  82. package/dist/components/molecules/Pagination.svelte.d.ts +2 -0
  83. package/dist/components/molecules/Popover.svelte +107 -51
  84. package/dist/components/molecules/Popover.svelte.d.ts +2 -0
  85. package/dist/components/molecules/Prose.svelte +1 -1
  86. package/dist/components/molecules/PullToRefresh.svelte +14 -10
  87. package/dist/components/molecules/PullToRefresh.svelte.d.ts +2 -0
  88. package/dist/components/molecules/RadialMenu.svelte +52 -19
  89. package/dist/components/molecules/RadialMenu.svelte.d.ts +2 -0
  90. package/dist/components/molecules/RadioGroup.svelte +38 -23
  91. package/dist/components/molecules/RadioGroup.svelte.d.ts +2 -0
  92. package/dist/components/molecules/SectionHeader.svelte +13 -8
  93. package/dist/components/molecules/SeekSlider.svelte +38 -27
  94. package/dist/components/molecules/SeekSlider.svelte.d.ts +2 -0
  95. package/dist/components/molecules/SegmentedControl.svelte +139 -86
  96. package/dist/components/molecules/SegmentedControl.svelte.d.ts +2 -0
  97. package/dist/components/molecules/SelectButton.svelte +21 -6
  98. package/dist/components/molecules/SelectButton.svelte.d.ts +2 -0
  99. package/dist/components/molecules/SortableList.svelte +10 -11
  100. package/dist/components/molecules/SoundSettings.svelte +161 -0
  101. package/dist/components/molecules/SoundSettings.svelte.d.ts +17 -0
  102. package/dist/components/molecules/SplitButton.svelte +30 -3
  103. package/dist/components/molecules/SplitButton.svelte.d.ts +2 -0
  104. package/dist/components/molecules/SwipeRow.svelte +18 -15
  105. package/dist/components/molecules/SwipeRow.svelte.d.ts +2 -0
  106. package/dist/components/molecules/Tabs.svelte +92 -10
  107. package/dist/components/molecules/Tabs.svelte.d.ts +2 -0
  108. package/dist/components/molecules/ThemePicker.svelte +25 -10
  109. package/dist/components/molecules/Timestamp.svelte +12 -7
  110. package/dist/components/molecules/Toaster.svelte +65 -14
  111. package/dist/components/molecules/Toaster.svelte.d.ts +2 -0
  112. package/dist/components/molecules/Toggle.svelte +36 -13
  113. package/dist/components/molecules/Toggle.svelte.d.ts +2 -0
  114. package/dist/components/molecules/Tooltip.svelte +41 -10
  115. package/dist/components/molecules/Tooltip.svelte.d.ts +1 -1
  116. package/dist/components/molecules/VolumeSlider.svelte +34 -14
  117. package/dist/components/molecules/VolumeSlider.svelte.d.ts +2 -0
  118. package/dist/components/molecules/WorkingDir.svelte +1 -0
  119. package/dist/components/organisms/ConversationFeed.svelte +4 -0
  120. package/dist/components/organisms/DataTable.svelte +37 -14
  121. package/dist/floating.js +26 -0
  122. package/dist/index.d.ts +1 -0
  123. package/dist/index.js +1 -0
  124. package/dist/sound-synth.js +17 -12
  125. package/dist/stores/toast.svelte.d.ts +9 -0
  126. package/dist/stores/toast.svelte.js +45 -9
  127. package/package.json +1 -1
@@ -5,22 +5,54 @@
5
5
  export const TOAST_MS = 4000;
6
6
  /** Toasts with an action linger longer: the action is only reachable while visible. */
7
7
  export const ACTION_TOAST_MS = 7000;
8
+ /** Matches `--dur-exit-slow`; the removal never waits on `transitionend` alone. */
9
+ export const TOAST_EXIT_MS = 200;
8
10
  let seq = 0;
9
11
  class Toasts {
10
12
  items = $state([]);
11
13
  #timers = new Map();
14
+ #due = new Map();
15
+ #paused = new Map();
16
+ #arm(id, ms) {
17
+ this.#due.set(id, Date.now() + ms);
18
+ this.#timers.set(id, setTimeout(() => this.dismiss(id), ms));
19
+ }
20
+ #disarm(id) {
21
+ const timer = this.#timers.get(id);
22
+ if (timer)
23
+ clearTimeout(timer);
24
+ this.#timers.delete(id);
25
+ this.#due.delete(id);
26
+ this.#paused.delete(id);
27
+ }
12
28
  show(message, opts = {}) {
13
29
  const id = ++seq;
14
30
  const duration = opts.duration ?? (opts.action ? ACTION_TOAST_MS : TOAST_MS);
15
31
  const tone = opts.tone === 'danger' ? 'error' : (opts.tone ?? 'neutral');
16
32
  this.items = [
17
33
  ...this.items,
18
- { id, message, tone, duration, action: opts.action, pending: false },
34
+ { id, message, tone, duration, action: opts.action, pending: false, leaving: false },
19
35
  ];
20
36
  if (duration > 0)
21
- this.#timers.set(id, setTimeout(() => this.dismiss(id), duration));
37
+ this.#arm(id, duration);
22
38
  return id;
23
39
  }
40
+ /** Hold the auto-dismiss (pointer over the toast); `resume` restarts the remaining time. */
41
+ pause(id) {
42
+ const due = this.#due.get(id);
43
+ if (due === undefined)
44
+ return;
45
+ const left = Math.max(0, due - Date.now());
46
+ this.#disarm(id);
47
+ this.#paused.set(id, left);
48
+ }
49
+ resume(id) {
50
+ const left = this.#paused.get(id);
51
+ this.#paused.delete(id);
52
+ if (left === undefined || !this.items.some((t) => t.id === id && !t.leaving))
53
+ return;
54
+ this.#arm(id, left);
55
+ }
24
56
  ok(message, duration, action) {
25
57
  return this.show(message, { tone: 'ok', duration, action });
26
58
  }
@@ -31,10 +63,16 @@ class Toasts {
31
63
  return this.show(message, { tone: 'info', duration, action });
32
64
  }
33
65
  dismiss(id) {
34
- const timer = this.#timers.get(id);
35
- if (timer)
36
- clearTimeout(timer);
37
- this.#timers.delete(id);
66
+ this.#disarm(id);
67
+ const t = this.items.find((x) => x.id === id);
68
+ if (!t || t.leaving)
69
+ return;
70
+ this.items = this.items.map((x) => (x.id === id ? { ...x, leaving: true } : x));
71
+ setTimeout(() => this.remove(id), TOAST_EXIT_MS);
72
+ }
73
+ /** Drop a toast at once, skipping the exit. */
74
+ remove(id) {
75
+ this.#disarm(id);
38
76
  this.items = this.items.filter((t) => t.id !== id);
39
77
  }
40
78
  /** Run a toast's action once: the toast stays (button loading) until run settles, then dismisses. */
@@ -42,9 +80,7 @@ class Toasts {
42
80
  const t = this.items.find((x) => x.id === id);
43
81
  if (!t?.action || t.pending)
44
82
  return;
45
- const timer = this.#timers.get(id);
46
- if (timer)
47
- clearTimeout(timer);
83
+ this.#disarm(id);
48
84
  this.items = this.items.map((x) => (x.id === id ? { ...x, pending: true } : x));
49
85
  try {
50
86
  await t.action.run();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dorsk/tsumikit",
3
- "version": "0.74.0",
3
+ "version": "0.75.0",
4
4
  "description": "Minimal, dependency-free Svelte 5 + pure-CSS UI kit. Token-driven atoms, molecules & layouts with theming out of the box.",
5
5
  "type": "module",
6
6
  "license": "MIT",