@joewinke/jatui 0.1.31 → 0.2.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 (239) hide show
  1. package/CLAUDE.md +22 -0
  2. package/dist/actions/attention.d.ts +24 -0
  3. package/dist/actions/attention.js +94 -0
  4. package/dist/actions/collapse.js +29 -15
  5. package/dist/actions/floating.d.ts +53 -0
  6. package/dist/actions/floating.js +158 -0
  7. package/dist/actions/listNav.js +137 -108
  8. package/dist/actions/railNav.js +89 -72
  9. package/dist/actions/staggerEntrance.d.ts +28 -0
  10. package/dist/actions/staggerEntrance.js +71 -0
  11. package/dist/actions/tooltip.d.ts +28 -0
  12. package/dist/actions/tooltip.js +186 -0
  13. package/dist/assets/sounds/README.md +47 -0
  14. package/dist/assets/sounds/error.d.ts +1 -0
  15. package/dist/assets/sounds/error.js +4 -0
  16. package/dist/assets/sounds/notify.d.ts +1 -0
  17. package/dist/assets/sounds/notify.js +4 -0
  18. package/dist/assets/sounds/pop.d.ts +1 -0
  19. package/dist/assets/sounds/pop.js +4 -0
  20. package/dist/assets/sounds/send.d.ts +1 -0
  21. package/dist/assets/sounds/send.js +4 -0
  22. package/dist/assets/sounds/success.d.ts +1 -0
  23. package/dist/assets/sounds/success.js +4 -0
  24. package/dist/assets/sounds/toggle.d.ts +1 -0
  25. package/dist/assets/sounds/toggle.js +4 -0
  26. package/dist/components/AnimatedNumber.svelte +112 -0
  27. package/dist/components/AnimatedNumber.svelte.d.ts +8 -0
  28. package/dist/components/Badge.svelte +75 -4
  29. package/dist/components/Badge.svelte.d.ts +6 -1
  30. package/dist/components/Button.svelte +196 -21
  31. package/dist/components/Button.svelte.d.ts +10 -1
  32. package/dist/components/Carousel.svelte +265 -0
  33. package/dist/components/Carousel.svelte.d.ts +21 -0
  34. package/dist/components/ChipInput.svelte +63 -3
  35. package/dist/components/Collapse.svelte +70 -14
  36. package/dist/components/Collapse.svelte.d.ts +11 -0
  37. package/dist/components/ColorSelector.svelte +21 -24
  38. package/dist/components/CommandPalette.svelte +475 -0
  39. package/dist/components/CommandPalette.svelte.d.ts +3 -0
  40. package/dist/components/ContextMenu.svelte +9 -73
  41. package/dist/components/CopyButton.svelte +156 -0
  42. package/dist/components/CopyButton.svelte.d.ts +12 -0
  43. package/dist/components/HoldToConfirm.svelte +183 -0
  44. package/dist/components/HoldToConfirm.svelte.d.ts +11 -0
  45. package/dist/components/KeyboardShortcutsOverlay.svelte +54 -8
  46. package/dist/components/KeyboardShortcutsOverlay.svelte.d.ts +3 -0
  47. package/dist/components/PasswordMeter.svelte +87 -0
  48. package/dist/components/PasswordMeter.svelte.d.ts +8 -0
  49. package/dist/components/PinInput.svelte +186 -0
  50. package/dist/components/PinInput.svelte.d.ts +13 -0
  51. package/dist/components/QuantityStepper.svelte +185 -0
  52. package/dist/components/QuantityStepper.svelte.d.ts +12 -0
  53. package/dist/components/Skeleton.svelte +123 -0
  54. package/dist/components/Skeleton.svelte.d.ts +12 -0
  55. package/dist/components/SpeechForm.svelte +37 -0
  56. package/dist/components/StatusBadge.svelte +31 -3
  57. package/dist/components/StatusBadge.svelte.d.ts +0 -5
  58. package/dist/components/Tabs.svelte +270 -0
  59. package/dist/components/Tabs.svelte.d.ts +15 -0
  60. package/dist/components/TextInput.svelte +138 -38
  61. package/dist/components/TextInput.svelte.d.ts +9 -1
  62. package/dist/components/VoicePlayer.svelte +51 -0
  63. package/dist/components/basic/Alert.svelte +36 -0
  64. package/dist/components/basic/Alert.svelte.d.ts +9 -0
  65. package/dist/components/basic/Breadcrumb.svelte +27 -0
  66. package/dist/components/basic/Breadcrumb.svelte.d.ts +11 -0
  67. package/dist/components/basic/ButtonGroup.svelte +15 -0
  68. package/dist/components/basic/ButtonGroup.svelte.d.ts +8 -0
  69. package/dist/components/basic/Checkbox.svelte +85 -0
  70. package/dist/components/basic/Checkbox.svelte.d.ts +15 -0
  71. package/dist/components/basic/Empty.svelte +17 -0
  72. package/dist/components/basic/Empty.svelte.d.ts +8 -0
  73. package/dist/components/basic/Kbd.svelte +16 -0
  74. package/dist/components/basic/Kbd.svelte.d.ts +8 -0
  75. package/dist/components/basic/Pagination.svelte +104 -0
  76. package/dist/components/basic/Pagination.svelte.d.ts +12 -0
  77. package/dist/components/basic/RadioGroup.svelte +71 -0
  78. package/dist/components/basic/RadioGroup.svelte.d.ts +18 -0
  79. package/dist/components/basic/Separator.svelte +19 -0
  80. package/dist/components/basic/Separator.svelte.d.ts +8 -0
  81. package/dist/components/basic/Slider.svelte +72 -0
  82. package/dist/components/basic/Slider.svelte.d.ts +17 -0
  83. package/dist/components/basic/Switch.svelte +88 -0
  84. package/dist/components/basic/Switch.svelte.d.ts +14 -0
  85. package/dist/components/basic/Toggle.svelte +43 -0
  86. package/dist/components/basic/Toggle.svelte.d.ts +14 -0
  87. package/dist/components/graph/GraphCanvas.svelte +103 -0
  88. package/dist/components/graph/GraphCanvas.svelte.d.ts +22 -0
  89. package/dist/components/graph/JatuiNode.svelte +128 -0
  90. package/dist/components/graph/JatuiNode.svelte.d.ts +14 -0
  91. package/dist/components/graph/theme.d.ts +27 -0
  92. package/dist/components/graph/theme.js +136 -0
  93. package/dist/components/markup.js +62 -59
  94. package/dist/components/messaging/MessageItem.svelte +92 -0
  95. package/dist/components/messaging/MessageItem.svelte.d.ts +5 -0
  96. package/dist/components/messaging/TypingIndicator.svelte +63 -0
  97. package/dist/components/messaging/TypingIndicator.svelte.d.ts +7 -0
  98. package/dist/components/pipeline/PipelineColumn.svelte +44 -3
  99. package/dist/components/progress/ProgressBar.svelte +189 -0
  100. package/dist/components/progress/ProgressBar.svelte.d.ts +17 -0
  101. package/dist/components/progress/ProgressRing.svelte +138 -0
  102. package/dist/components/progress/ProgressRing.svelte.d.ts +12 -0
  103. package/dist/components/progress/Steps.svelte +195 -0
  104. package/dist/components/progress/Steps.svelte.d.ts +14 -0
  105. package/dist/components/session-nav/transcriptModel.js +66 -49
  106. package/dist/components/shell/NavigationMenu.svelte +422 -0
  107. package/dist/components/shell/NavigationMenu.svelte.d.ts +43 -0
  108. package/dist/components/shell/Sidebar.svelte +276 -0
  109. package/dist/components/shell/Sidebar.svelte.d.ts +32 -0
  110. package/dist/components/shell/SidebarGroup.svelte +180 -0
  111. package/dist/components/shell/SidebarGroup.svelte.d.ts +19 -0
  112. package/dist/components/shell/SidebarItem.svelte +170 -0
  113. package/dist/components/shell/SidebarItem.svelte.d.ts +24 -0
  114. package/dist/components/shell/shell.d.ts +30 -0
  115. package/dist/components/shell/shell.js +65 -0
  116. package/dist/components/table/DataTable.svelte +364 -0
  117. package/dist/components/table/DataTable.svelte.d.ts +4 -0
  118. package/dist/components/table/flexRender.d.ts +31 -0
  119. package/dist/components/table/flexRender.js +32 -0
  120. package/dist/components/table/types.d.ts +28 -0
  121. package/dist/components/table/types.js +1 -0
  122. package/dist/components/toast/ToastHost.svelte +21 -0
  123. package/dist/components/toast/ToastHost.svelte.d.ts +3 -0
  124. package/dist/components/toast/ToastItem.svelte +287 -0
  125. package/dist/components/toast/ToastItem.svelte.d.ts +9 -0
  126. package/dist/data/emojis.js +4 -4
  127. package/dist/dnd/autoScroll.js +12 -10
  128. package/dist/dnd/createDndBoard.svelte.js +110 -76
  129. package/dist/dnd/createDndBoard.test.js +161 -85
  130. package/dist/dnd/draggable.js +23 -15
  131. package/dist/dnd/dropTarget.js +29 -15
  132. package/dist/dnd/index.d.ts +0 -1
  133. package/dist/dnd/index.js +0 -1
  134. package/dist/dnd/types.d.ts +0 -9
  135. package/dist/dnd/types.js +14 -2
  136. package/dist/index.d.ts +60 -6
  137. package/dist/index.js +73 -6
  138. package/dist/showcase/AnimatedBeam.svelte +183 -0
  139. package/dist/showcase/AnimatedBeam.svelte.d.ts +26 -0
  140. package/dist/showcase/AuroraDrift.svelte +74 -0
  141. package/dist/showcase/AuroraDrift.svelte.d.ts +9 -0
  142. package/dist/showcase/BentoCard.svelte +50 -0
  143. package/dist/showcase/BentoCard.svelte.d.ts +14 -0
  144. package/dist/showcase/BentoGrid.svelte +43 -0
  145. package/dist/showcase/BentoGrid.svelte.d.ts +12 -0
  146. package/dist/showcase/BorderBeam.svelte +79 -0
  147. package/dist/showcase/BorderBeam.svelte.d.ts +12 -0
  148. package/dist/showcase/ClipWipe.svelte +82 -0
  149. package/dist/showcase/ClipWipe.svelte.d.ts +12 -0
  150. package/dist/showcase/Confetti.svelte +71 -0
  151. package/dist/showcase/Confetti.svelte.d.ts +10 -0
  152. package/dist/showcase/CursorSpotlight.svelte +85 -0
  153. package/dist/showcase/CursorSpotlight.svelte.d.ts +9 -0
  154. package/dist/showcase/DeviceMock.svelte +186 -0
  155. package/dist/showcase/DeviceMock.svelte.d.ts +11 -0
  156. package/dist/showcase/Dock.svelte +123 -0
  157. package/dist/showcase/Dock.svelte.d.ts +17 -0
  158. package/dist/showcase/FlipCard.svelte +103 -0
  159. package/dist/showcase/FlipCard.svelte.d.ts +10 -0
  160. package/dist/showcase/FocusReveal.svelte +83 -0
  161. package/dist/showcase/FocusReveal.svelte.d.ts +11 -0
  162. package/dist/showcase/Globe.svelte +202 -0
  163. package/dist/showcase/Globe.svelte.d.ts +16 -0
  164. package/dist/showcase/KenBurns.svelte +105 -0
  165. package/dist/showcase/KenBurns.svelte.d.ts +13 -0
  166. package/dist/showcase/Marquee.svelte +89 -0
  167. package/dist/showcase/Marquee.svelte.d.ts +9 -0
  168. package/dist/showcase/ParallaxTilt.svelte +98 -0
  169. package/dist/showcase/ParallaxTilt.svelte.d.ts +10 -0
  170. package/dist/showcase/ScrambleText.svelte +98 -0
  171. package/dist/showcase/ScrambleText.svelte.d.ts +11 -0
  172. package/dist/showcase/ShineSweep.svelte +81 -0
  173. package/dist/showcase/ShineSweep.svelte.d.ts +9 -0
  174. package/dist/showcase/Terminal.svelte +230 -0
  175. package/dist/showcase/Terminal.svelte.d.ts +18 -0
  176. package/dist/showcase/TextSplitReveal.svelte +146 -0
  177. package/dist/showcase/TextSplitReveal.svelte.d.ts +13 -0
  178. package/dist/showcase/TextWave.svelte +55 -0
  179. package/dist/showcase/TextWave.svelte.d.ts +8 -0
  180. package/dist/showcase/TypewriterText.svelte +130 -0
  181. package/dist/showcase/TypewriterText.svelte.d.ts +9 -0
  182. package/dist/showcase/backdrop/GrainGradient.svelte +126 -0
  183. package/dist/showcase/backdrop/GrainGradient.svelte.d.ts +23 -0
  184. package/dist/showcase/backdrop/MeshGradient.svelte +104 -0
  185. package/dist/showcase/backdrop/MeshGradient.svelte.d.ts +20 -0
  186. package/dist/showcase/backdrop/Metaballs.svelte +116 -0
  187. package/dist/showcase/backdrop/Metaballs.svelte.d.ts +18 -0
  188. package/dist/showcase/backdrop/NeuroNoise.svelte +115 -0
  189. package/dist/showcase/backdrop/NeuroNoise.svelte.d.ts +20 -0
  190. package/dist/showcase/backdrop/ShowcaseBackdrop.svelte +48 -0
  191. package/dist/showcase/backdrop/ShowcaseBackdrop.svelte.d.ts +12 -0
  192. package/dist/showcase/generative/GenerativeBackdrop.svelte +234 -0
  193. package/dist/showcase/generative/GenerativeBackdrop.svelte.d.ts +9 -0
  194. package/dist/showcase/generative/intent.d.ts +7 -0
  195. package/dist/showcase/generative/intent.js +67 -0
  196. package/dist/showcase/generative/manifest.d.ts +9 -0
  197. package/dist/showcase/generative/manifest.js +97 -0
  198. package/dist/showcase/generative/types.d.ts +48 -0
  199. package/dist/showcase/generative/types.js +8 -0
  200. package/dist/showcase/index.d.ts +36 -0
  201. package/dist/showcase/index.js +46 -0
  202. package/dist/showcase/scroll/SmoothScroll.svelte +49 -0
  203. package/dist/showcase/scroll/SmoothScroll.svelte.d.ts +12 -0
  204. package/dist/showcase/scroll/scrollProgress.d.ts +24 -0
  205. package/dist/showcase/scroll/scrollProgress.js +65 -0
  206. package/dist/showcase/scroll/scrollReveal.d.ts +30 -0
  207. package/dist/showcase/scroll/scrollReveal.js +70 -0
  208. package/dist/stores/commandPalette.svelte.d.ts +24 -0
  209. package/dist/stores/commandPalette.svelte.js +82 -0
  210. package/dist/stores/confirmDialog.svelte.js +5 -5
  211. package/dist/stores/inputDialog.svelte.js +5 -5
  212. package/dist/stores/toast.svelte.d.ts +28 -0
  213. package/dist/stores/toast.svelte.js +33 -0
  214. package/dist/styles/motion.css +46 -0
  215. package/dist/styles/tokens.css +31 -0
  216. package/dist/transitions/glide.d.ts +31 -0
  217. package/dist/transitions/glide.js +58 -0
  218. package/dist/types/booking.js +4 -4
  219. package/dist/types/comments.js +2 -2
  220. package/dist/types/messaging.js +3 -3
  221. package/dist/types/pipeline.js +2 -2
  222. package/dist/utils/currency.js +4 -2
  223. package/dist/utils/daisyuiColors.js +27 -25
  224. package/dist/utils/dateFormatters.d.ts +20 -0
  225. package/dist/utils/dateFormatters.js +65 -44
  226. package/dist/utils/googleMapsLoader.js +100 -46
  227. package/dist/utils/mentionParser.js +30 -30
  228. package/dist/utils/phone.js +27 -21
  229. package/dist/utils/phoneFormat.js +9 -9
  230. package/dist/utils/sound.d.ts +6 -0
  231. package/dist/utils/sound.js +113 -0
  232. package/dist/utils/splitText.d.ts +25 -0
  233. package/dist/utils/splitText.js +94 -0
  234. package/dist/utils/taskUtils.js +1 -1
  235. package/dist/utils/themeWipe.d.ts +21 -0
  236. package/dist/utils/themeWipe.js +94 -0
  237. package/dist/utils/viewTransition.d.ts +23 -0
  238. package/dist/utils/viewTransition.js +75 -0
  239. package/package.json +56 -4
@@ -0,0 +1,287 @@
1
+ <script lang="ts">
2
+ import { dismissToast, type Toast } from '../../stores/toast.svelte.js';
3
+
4
+ type Props = {
5
+ toast: Toast;
6
+ index: number;
7
+ total: number;
8
+ };
9
+
10
+ let { toast, index, total }: Props = $props();
11
+
12
+ // Stack compression: older toasts (lower index) scale down and fade behind newer ones
13
+ // index 0 = oldest (back), index total-1 = newest (front)
14
+ const stackDepth = $derived(total - 1 - index);
15
+ const stackScale = $derived(Math.max(0.88, 1 - stackDepth * 0.04));
16
+ const stackOpacity = $derived(stackDepth >= 3 ? 0 : 1 - stackDepth * 0.1);
17
+
18
+ // Drag-to-dismiss state
19
+ let dragX = $state(0);
20
+ let isDragging = $state(false);
21
+ let startX = 0;
22
+ let startVelocityX = 0;
23
+ let lastX = 0;
24
+ let lastTime = 0;
25
+
26
+ // Entrance animation
27
+ let mounted = $state(false);
28
+ let exiting = $state(false);
29
+
30
+ $effect(() => {
31
+ requestAnimationFrame(() => {
32
+ mounted = true;
33
+ });
34
+ });
35
+
36
+ // Undo countdown
37
+ let undoProgress = $state(1);
38
+ let undoTimer: ReturnType<typeof setInterval> | null = null;
39
+ let undoDone = $state(false);
40
+ let hovered = $state(false);
41
+ let focused = $state(false);
42
+
43
+ const paused = $derived(hovered || focused);
44
+
45
+ $effect(() => {
46
+ if (!toast.onUndo) return;
47
+ const totalMs = toast.durationMs;
48
+ const steps = 60;
49
+ const stepMs = totalMs / steps;
50
+ let elapsed = 0;
51
+
52
+ const tick = () => {
53
+ if (paused) return;
54
+ elapsed += stepMs;
55
+ undoProgress = Math.max(0, 1 - elapsed / totalMs);
56
+ if (undoProgress <= 0) {
57
+ clearInterval(undoTimer!);
58
+ undoTimer = null;
59
+ undoDone = true;
60
+ triggerDismiss();
61
+ }
62
+ };
63
+
64
+ undoTimer = setInterval(tick, stepMs);
65
+ return () => {
66
+ if (undoTimer) clearInterval(undoTimer);
67
+ };
68
+ });
69
+
70
+ // Auto-dismiss for non-undo toasts
71
+ let dismissTimer: ReturnType<typeof setTimeout> | null = null;
72
+
73
+ $effect(() => {
74
+ if (toast.onUndo) return;
75
+ const schedule = () => {
76
+ dismissTimer = setTimeout(() => {
77
+ if (!hovered && !focused) triggerDismiss();
78
+ else {
79
+ // Re-check on unhover
80
+ const resume = () => {
81
+ if (!hovered && !focused) triggerDismiss();
82
+ };
83
+ document.addEventListener('pointerleave', resume, { once: true });
84
+ }
85
+ }, toast.durationMs);
86
+ };
87
+ schedule();
88
+ return () => {
89
+ if (dismissTimer) clearTimeout(dismissTimer);
90
+ };
91
+ });
92
+
93
+ // Re-start timer when un-paused
94
+ $effect(() => {
95
+ if (paused && dismissTimer) {
96
+ clearTimeout(dismissTimer);
97
+ dismissTimer = null;
98
+ } else if (!paused && !dismissTimer && !toast.onUndo) {
99
+ dismissTimer = setTimeout(triggerDismiss, toast.durationMs);
100
+ }
101
+ });
102
+
103
+ function triggerDismiss() {
104
+ exiting = true;
105
+ setTimeout(() => dismissToast(toast.id), 220);
106
+ }
107
+
108
+ function handleUndo() {
109
+ if (undoTimer) clearInterval(undoTimer);
110
+ toast.onUndo?.();
111
+ triggerDismiss();
112
+ }
113
+
114
+ // Drag handlers
115
+ function onPointerDown(e: PointerEvent) {
116
+ if ((e.target as HTMLElement).closest('button')) return;
117
+ isDragging = true;
118
+ startX = e.clientX;
119
+ lastX = e.clientX;
120
+ lastTime = e.timeStamp;
121
+ dragX = 0;
122
+ startVelocityX = 0;
123
+ (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);
124
+ }
125
+
126
+ function onPointerMove(e: PointerEvent) {
127
+ if (!isDragging) return;
128
+ const now = e.timeStamp;
129
+ const dt = now - lastTime;
130
+ if (dt > 0) {
131
+ startVelocityX = (e.clientX - lastX) / dt;
132
+ }
133
+ lastX = e.clientX;
134
+ lastTime = now;
135
+ dragX = e.clientX - startX;
136
+ }
137
+
138
+ function onPointerUp(e: PointerEvent) {
139
+ if (!isDragging) return;
140
+ isDragging = false;
141
+ const THRESHOLD = 100;
142
+ // Velocity-based fling: >0.5px/ms or past threshold
143
+ if (Math.abs(dragX) > THRESHOLD || Math.abs(startVelocityX) > 0.5) {
144
+ const dir = dragX > 0 ? 1 : -1;
145
+ dragX = dir * window.innerWidth;
146
+ exiting = true;
147
+ setTimeout(() => dismissToast(toast.id), 300);
148
+ } else {
149
+ // Snap back with spring
150
+ dragX = 0;
151
+ }
152
+ }
153
+
154
+ // DaisyUI alert class per type
155
+ const alertClass: Record<string, string> = {
156
+ info: 'alert-info',
157
+ success: 'alert-success',
158
+ warning: 'alert-warning',
159
+ error: 'alert-error'
160
+ };
161
+
162
+ // ARIA role per type
163
+ const ariaRole = $derived(toast.type === 'error' ? 'alert' : 'status');
164
+ const ariaLive = $derived(toast.type === 'error' ? 'assertive' : 'polite');
165
+
166
+ // Entrance/exit transform
167
+ const itemTransform = $derived(
168
+ isDragging
169
+ ? `translateX(${dragX}px) rotate(${dragX * 0.02}deg)`
170
+ : exiting
171
+ ? `translateY(20px) scale(0.9)`
172
+ : mounted
173
+ ? `translateX(0) rotate(0deg)`
174
+ : `translateY(40px) scale(0.92)`
175
+ );
176
+
177
+ const itemOpacity = $derived(
178
+ isDragging
179
+ ? Math.max(0, 1 - Math.abs(dragX) / 200)
180
+ : exiting
181
+ ? 0
182
+ : mounted
183
+ ? 1
184
+ : 0
185
+ );
186
+
187
+ const dragTransition = $derived(
188
+ isDragging
189
+ ? 'none'
190
+ : exiting
191
+ ? 'transform var(--motion-enter) var(--motion-glide), opacity var(--motion-enter) var(--motion-glide)'
192
+ : 'transform var(--motion-enter) var(--motion-spring), opacity var(--motion-fast) var(--motion-glide)'
193
+ );
194
+ </script>
195
+
196
+ <li
197
+ class="toast-item pointer-events-auto w-full"
198
+ style:transform={itemTransform}
199
+ style:opacity={itemOpacity}
200
+ style:transition={dragTransition}
201
+ role={ariaRole}
202
+ aria-live={ariaLive}
203
+ onmouseenter={() => (hovered = true)}
204
+ onmouseleave={() => (hovered = false)}
205
+ onfocusin={() => (focused = true)}
206
+ onfocusout={() => (focused = false)}
207
+ onpointerdown={onPointerDown}
208
+ onpointermove={onPointerMove}
209
+ onpointerup={onPointerUp}
210
+ >
211
+ <div
212
+ class="alert {alertClass[toast.type]} shadow-sm relative overflow-hidden gap-3 pr-3"
213
+ style:transform="scale({stackScale})"
214
+ style:opacity={stackOpacity}
215
+ style:transition="transform var(--motion-move) var(--motion-glide), opacity var(--motion-move) var(--motion-glide)"
216
+ >
217
+ <!-- Undo countdown bar -->
218
+ {#if toast.onUndo && !undoDone}
219
+ <span
220
+ class="toast-progress absolute bottom-0 left-0 h-0.5 w-full origin-left bg-current opacity-40"
221
+ style:animation-duration="{toast.durationMs}ms"
222
+ style:animation-play-state={paused ? 'paused' : 'running'}
223
+ ></span>
224
+ {/if}
225
+
226
+ <span class="flex-1 text-sm">{toast.message}</span>
227
+
228
+ {#if toast.onUndo}
229
+ <button
230
+ type="button"
231
+ class="btn btn-ghost btn-xs font-semibold"
232
+ onclick={handleUndo}
233
+ >
234
+ Undo
235
+ </button>
236
+ {:else if toast.action}
237
+ <button
238
+ type="button"
239
+ class="btn btn-ghost btn-xs font-semibold"
240
+ onclick={() => { toast.action!.onClick(); triggerDismiss(); }}
241
+ >
242
+ {toast.action.label}
243
+ </button>
244
+ {/if}
245
+
246
+ <button
247
+ type="button"
248
+ class="btn btn-ghost btn-xs btn-square"
249
+ aria-label="Dismiss notification"
250
+ onclick={triggerDismiss}
251
+ >
252
+ <svg xmlns="http://www.w3.org/2000/svg" class="size-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
253
+ <path d="M18 6L6 18M6 6l12 12"/>
254
+ </svg>
255
+ </button>
256
+ </div>
257
+ </li>
258
+
259
+ <style>
260
+ .toast-item {
261
+ list-style: none;
262
+ touch-action: pan-y;
263
+ user-select: none;
264
+ }
265
+
266
+ .toast-progress {
267
+ animation-name: drain;
268
+ animation-timing-function: linear;
269
+ animation-fill-mode: forwards;
270
+ }
271
+
272
+ @keyframes drain {
273
+ from { transform: scaleX(1); }
274
+ to { transform: scaleX(0); }
275
+ }
276
+
277
+ @media (prefers-reduced-motion: reduce) {
278
+ .toast-progress {
279
+ animation: none;
280
+ }
281
+
282
+ .toast-item,
283
+ .toast-item > div {
284
+ transition: none !important;
285
+ }
286
+ }
287
+ </style>
@@ -0,0 +1,9 @@
1
+ import { type Toast } from '../../stores/toast.svelte.js';
2
+ type Props = {
3
+ toast: Toast;
4
+ index: number;
5
+ total: number;
6
+ };
7
+ declare const ToastItem: import("svelte").Component<Props, {}, "">;
8
+ type ToastItem = ReturnType<typeof ToastItem>;
9
+ export default ToastItem;
@@ -3,7 +3,7 @@
3
3
  * Each emoji has a character and searchable name.
4
4
  * Based on Unicode CLDR emoji ordering, minus most flags.
5
5
  */
6
- export const EMOJI_DATA = [
6
+ export var EMOJI_DATA = [
7
7
  {
8
8
  label: 'Smileys & Emotion',
9
9
  emojis: [
@@ -1186,11 +1186,11 @@ export const EMOJI_DATA = [
1186
1186
  },
1187
1187
  ];
1188
1188
  /** Flat array of all emojis for search */
1189
- export const ALL_EMOJIS = EMOJI_DATA.flatMap((g) => g.emojis);
1189
+ export var ALL_EMOJIS = EMOJI_DATA.flatMap(function (g) { return g.emojis; });
1190
1190
  /** Search emojis by name, returns matching entries */
1191
1191
  export function searchEmojis(query) {
1192
1192
  if (!query.trim())
1193
1193
  return [];
1194
- const terms = query.toLowerCase().split(/\s+/);
1195
- return ALL_EMOJIS.filter((e) => terms.every((t) => e.name.includes(t)));
1194
+ var terms = query.toLowerCase().split(/\s+/);
1195
+ return ALL_EMOJIS.filter(function (e) { return terms.every(function (t) { return e.name.includes(t); }); });
1196
1196
  }
@@ -1,25 +1,27 @@
1
1
  import { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';
2
- export const autoScroll = (node, params) => {
3
- let current = params ?? {};
2
+ export var autoScroll = function (node, params) {
3
+ var current = params !== null && params !== void 0 ? params : {};
4
4
  function register() {
5
5
  return autoScrollForElements({
6
6
  element: node,
7
- canScroll: ({ source }) => {
8
- if (!current.types?.length)
7
+ canScroll: function (_a) {
8
+ var _b;
9
+ var source = _a.source;
10
+ if (!((_b = current.types) === null || _b === void 0 ? void 0 : _b.length))
9
11
  return true;
10
12
  return current.types.includes(source.data.type);
11
13
  },
12
- getAllowedAxis: () => current.axis ?? 'all',
13
- getConfiguration: () => ({ maxScrollSpeed: current.speed ?? 'standard' }),
14
+ getAllowedAxis: function () { var _a; return (_a = current.axis) !== null && _a !== void 0 ? _a : 'all'; },
15
+ getConfiguration: function () { var _a; return ({ maxScrollSpeed: (_a = current.speed) !== null && _a !== void 0 ? _a : 'standard' }); },
14
16
  });
15
17
  }
16
- let cleanup = register();
18
+ var cleanup = register();
17
19
  return {
18
- update(next) {
19
- current = next ?? {};
20
+ update: function (next) {
21
+ current = next !== null && next !== void 0 ? next : {};
20
22
  cleanup();
21
23
  cleanup = register();
22
24
  },
23
- destroy: () => cleanup(),
25
+ destroy: function () { return cleanup(); },
24
26
  };
25
27
  };
@@ -1,28 +1,40 @@
1
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
+ if (ar || !(i in from)) {
4
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
+ ar[i] = from[i];
6
+ }
7
+ }
8
+ return to.concat(ar || Array.prototype.slice.call(from));
9
+ };
1
10
  import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
2
11
  import { extractClosestEdge, attachClosestEdge, } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
3
12
  import { SvelteMap } from 'svelte/reactivity';
4
13
  import { announce } from './announce';
5
14
  import { makeItemData, isItemData, } from './types';
6
- const SHADOW_KEY = '__dnd-shadow__';
15
+ var SHADOW_KEY = '__dnd-shadow__';
7
16
  export function createDndBoard(opts) {
8
- const edges = opts.edges ?? ['top', 'bottom'];
9
- const hover = opts.hover ?? 'indicator';
10
- const mirror = new SvelteMap();
11
- let dragging = $state(null);
12
- let proposal = $state(null);
13
- const seq = new Map();
14
- let inFlight = 0;
15
- let seedQueued = false;
17
+ var _a, _b;
18
+ var edges = (_a = opts.edges) !== null && _a !== void 0 ? _a : ['top', 'bottom'];
19
+ var hover = (_b = opts.hover) !== null && _b !== void 0 ? _b : 'indicator';
20
+ var mirror = new SvelteMap();
21
+ var dragging = $state(null);
22
+ var proposal = $state(null);
23
+ var seq = new Map();
24
+ var inFlight = 0;
25
+ var seedQueued = false;
16
26
  function seed() {
17
27
  mirror.clear();
18
- const src = opts.items();
19
- const entries = src instanceof Map
28
+ var src = opts.items();
29
+ var entries = src instanceof Map
20
30
  ? src
21
31
  : new Map(Object.entries(src));
22
- for (const [id, list] of entries)
23
- mirror.set(id, [...list]);
32
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
33
+ var _a = entries_1[_i], id = _a[0], list = _a[1];
34
+ mirror.set(id, __spreadArray([], list, true));
35
+ }
24
36
  }
25
- $effect(() => {
37
+ $effect(function () {
26
38
  opts.items();
27
39
  if (dragging || inFlight > 0) {
28
40
  seedQueued = true;
@@ -31,52 +43,57 @@ export function createDndBoard(opts) {
31
43
  seed();
32
44
  });
33
45
  function placementFrom(dropTargets) {
34
- const inner = dropTargets[0];
46
+ var _a;
47
+ var inner = dropTargets[0];
35
48
  if (!inner)
36
49
  return null;
37
- const d = inner.data;
50
+ var d = inner.data;
38
51
  if (typeof d.container !== 'string')
39
52
  return null;
40
- const list = mirror.get(d.container) ?? [];
53
+ var list = (_a = mirror.get(d.container)) !== null && _a !== void 0 ? _a : [];
41
54
  if (typeof d.index !== 'number')
42
55
  return { container: d.container, index: list.length };
43
- const edge = extractClosestEdge(d);
44
- const after = edge === 'bottom' || edge === 'right';
56
+ var edge = extractClosestEdge(d);
57
+ var after = edge === 'bottom' || edge === 'right';
45
58
  return { container: d.container, index: d.index + (after ? 1 : 0) };
46
59
  }
47
60
  function syncShadow(next) {
48
- for (const [cid, list] of mirror) {
49
- const idx = list.findIndex((item) => item[SHADOW_KEY]);
61
+ var _a;
62
+ var _b;
63
+ for (var _i = 0, mirror_1 = mirror; _i < mirror_1.length; _i++) {
64
+ var _c = mirror_1[_i], cid = _c[0], list_1 = _c[1];
65
+ var idx = list_1.findIndex(function (item) { return item[SHADOW_KEY]; });
50
66
  if (idx !== -1) {
51
- list.splice(idx, 1);
52
- mirror.set(cid, list);
67
+ list_1.splice(idx, 1);
68
+ mirror.set(cid, list_1);
53
69
  break;
54
70
  }
55
71
  }
56
72
  if (!next || !dragging)
57
73
  return;
58
- const list = [...(mirror.get(next.container) ?? [])];
59
- const shadowItem = { [SHADOW_KEY]: true, key: `${SHADOW_KEY}-${dragging.key}` };
74
+ var list = __spreadArray([], ((_b = mirror.get(next.container)) !== null && _b !== void 0 ? _b : []), true);
75
+ var shadowItem = (_a = {}, _a[SHADOW_KEY] = true, _a.key = "".concat(SHADOW_KEY, "-").concat(dragging.key), _a);
60
76
  list.splice(Math.min(next.index, list.length), 0, shadowItem);
61
77
  mirror.set(next.container, list);
62
78
  }
63
79
  function consider(next) {
64
- if (next?.container === proposal?.container && next?.index === proposal?.index)
80
+ if ((next === null || next === void 0 ? void 0 : next.container) === (proposal === null || proposal === void 0 ? void 0 : proposal.container) && (next === null || next === void 0 ? void 0 : next.index) === (proposal === null || proposal === void 0 ? void 0 : proposal.index))
65
81
  return;
66
82
  proposal = next;
67
83
  if (hover === 'shadow')
68
84
  syncShadow(next);
69
85
  }
70
86
  function applyToMirror(move) {
71
- const fromList = [...(mirror.get(move.from.container) ?? [])];
72
- const toList = move.from.container === move.to.container
87
+ var _a, _b;
88
+ var fromList = __spreadArray([], ((_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : []), true);
89
+ var toList = move.from.container === move.to.container
73
90
  ? fromList
74
- : [...(mirror.get(move.to.container) ?? [])];
75
- const srcIdx = fromList.findIndex((it) => opts.key(it) === opts.key(move.item));
91
+ : __spreadArray([], ((_b = mirror.get(move.to.container)) !== null && _b !== void 0 ? _b : []), true);
92
+ var srcIdx = fromList.findIndex(function (it) { return opts.key(it) === opts.key(move.item); });
76
93
  if (srcIdx === -1)
77
94
  return;
78
95
  fromList.splice(srcIdx, 1);
79
- let destIdx = move.to.index;
96
+ var destIdx = move.to.index;
80
97
  if (move.from.container === move.to.container && move.to.index > move.from.index) {
81
98
  destIdx = Math.max(0, destIdx - 1);
82
99
  }
@@ -87,21 +104,24 @@ export function createDndBoard(opts) {
87
104
  }
88
105
  }
89
106
  function rollback(move) {
90
- for (const [cid, list] of mirror) {
91
- const idx = list.findIndex((it) => opts.key(it) === opts.key(move.item));
107
+ var _a;
108
+ for (var _i = 0, mirror_2 = mirror; _i < mirror_2.length; _i++) {
109
+ var _b = mirror_2[_i], cid = _b[0], list = _b[1];
110
+ var idx = list.findIndex(function (it) { return opts.key(it) === opts.key(move.item); });
92
111
  if (idx !== -1) {
93
112
  list.splice(idx, 1);
94
113
  mirror.set(cid, list);
95
114
  break;
96
115
  }
97
116
  }
98
- const fromList = [...(mirror.get(move.from.container) ?? [])];
117
+ var fromList = __spreadArray([], ((_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : []), true);
99
118
  fromList.splice(Math.min(move.from.index, fromList.length), 0, move.item);
100
119
  mirror.set(move.from.container, fromList);
101
120
  }
102
121
  function finalize(dropped) {
103
- const drag = dragging;
104
- const to = dropped ? proposal : null;
122
+ var _a;
123
+ var drag = dragging;
124
+ var to = dropped ? proposal : null;
105
125
  dragging = null;
106
126
  consider(null);
107
127
  if (!drag)
@@ -114,21 +134,22 @@ export function createDndBoard(opts) {
114
134
  }
115
135
  return;
116
136
  }
117
- const move = { item: drag.item, from: drag.from, to };
137
+ var move = { item: drag.item, from: drag.from, to: to };
118
138
  applyToMirror(move);
119
139
  if (opts.announce)
120
140
  announce(opts.announce(move));
121
- const token = (seq.get(drag.key) ?? 0) + 1;
141
+ var token = ((_a = seq.get(drag.key)) !== null && _a !== void 0 ? _a : 0) + 1;
122
142
  seq.set(drag.key, token);
123
143
  inFlight++;
124
144
  opts
125
145
  .commit(move)
126
- .catch((error) => {
146
+ .catch(function (error) {
147
+ var _a;
127
148
  if (seq.get(drag.key) === token)
128
149
  rollback(move);
129
- opts.onError?.(error, move);
150
+ (_a = opts.onError) === null || _a === void 0 ? void 0 : _a.call(opts, error, move);
130
151
  })
131
- .finally(() => {
152
+ .finally(function () {
132
153
  inFlight--;
133
154
  if (inFlight === 0 && seedQueued && !dragging) {
134
155
  seedQueued = false;
@@ -136,48 +157,61 @@ export function createDndBoard(opts) {
136
157
  }
137
158
  });
138
159
  }
139
- $effect(() => monitorForElements({
140
- canMonitor: ({ source }) => isItemData(source.data, opts.type),
141
- onDragStart({ source }) {
142
- const d = source.data;
143
- dragging = {
144
- key: d.key,
145
- item: d.item,
146
- from: { container: d.container, index: d.index },
147
- };
148
- },
149
- onDropTargetChange({ location }) {
150
- consider(placementFrom(location.current.dropTargets));
151
- },
152
- onDrag({ location }) {
153
- consider(placementFrom(location.current.dropTargets));
154
- },
155
- onDrop({ location }) {
156
- finalize(location.current.dropTargets.length > 0);
157
- },
158
- }));
160
+ $effect(function () {
161
+ return monitorForElements({
162
+ canMonitor: function (_a) {
163
+ var source = _a.source;
164
+ return isItemData(source.data, opts.type);
165
+ },
166
+ onDragStart: function (_a) {
167
+ var source = _a.source;
168
+ var d = source.data;
169
+ dragging = {
170
+ key: d.key,
171
+ item: d.item,
172
+ from: { container: d.container, index: d.index },
173
+ };
174
+ },
175
+ onDropTargetChange: function (_a) {
176
+ var location = _a.location;
177
+ consider(placementFrom(location.current.dropTargets));
178
+ },
179
+ onDrag: function (_a) {
180
+ var location = _a.location;
181
+ consider(placementFrom(location.current.dropTargets));
182
+ },
183
+ onDrop: function (_a) {
184
+ var location = _a.location;
185
+ finalize(location.current.dropTargets.length > 0);
186
+ },
187
+ });
188
+ });
159
189
  return {
160
- get: (container) => mirror.get(container) ?? [],
161
- containers: () => [...mirror.keys()],
190
+ get: function (container) { var _a; return (_a = mirror.get(container)) !== null && _a !== void 0 ? _a : []; },
191
+ containers: function () { return __spreadArray([], mirror.keys(), true); },
162
192
  get dragging() {
163
193
  return dragging;
164
194
  },
165
195
  get proposal() {
166
196
  return proposal;
167
197
  },
168
- isSource: (item) => dragging?.key === opts.key(item),
169
- isShadow: (item) => !!item[SHADOW_KEY],
170
- item: (item, container, index) => ({
171
- data: () => makeItemData({ type: opts.type, key: opts.key(item), item, container, index }),
172
- }),
173
- itemTarget: (container, index) => ({
174
- data: (feedback) => attachClosestEdge({ type: `${opts.type}-target`, container, index }, { input: feedback.input, element: feedback.element, allowedEdges: edges }),
175
- accepts: (d) => isItemData(d, opts.type),
198
+ isSource: function (item) { return (dragging === null || dragging === void 0 ? void 0 : dragging.key) === opts.key(item); },
199
+ isShadow: function (item) {
200
+ return !!item[SHADOW_KEY];
201
+ },
202
+ item: function (item, container, index) { return ({
203
+ data: function () { return makeItemData({ type: opts.type, key: opts.key(item), item: item, container: container, index: index }); },
204
+ }); },
205
+ itemTarget: function (container, index) { return ({
206
+ data: function (feedback) {
207
+ return attachClosestEdge({ type: "".concat(opts.type, "-target"), container: container, index: index }, { input: feedback.input, element: feedback.element, allowedEdges: edges });
208
+ },
209
+ accepts: function (d) { return isItemData(d, opts.type); },
176
210
  sticky: true,
177
- }),
178
- containerTarget: (container) => ({
179
- data: () => ({ type: `${opts.type}-target`, container }),
180
- accepts: (d) => isItemData(d, opts.type),
181
- }),
211
+ }); },
212
+ containerTarget: function (container) { return ({
213
+ data: function () { return ({ type: "".concat(opts.type, "-target"), container: container }); },
214
+ accepts: function (d) { return isItemData(d, opts.type); },
215
+ }); },
182
216
  };
183
217
  }