@getmicdrop/svelte-components 5.21.3 → 5.22.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.
- package/dist/components/Toast/ToastItem.svelte +695 -0
- package/dist/components/Toast/ToastItem.svelte.d.ts +8 -0
- package/dist/components/Toast/ToastItem.svelte.d.ts.map +1 -0
- package/dist/components/Toast/Toaster.svelte +184 -0
- package/dist/components/Toast/Toaster.svelte.d.ts +11 -0
- package/dist/components/Toast/Toaster.svelte.d.ts.map +1 -0
- package/dist/components/Toast/index.d.ts +9 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Toast/index.js +13 -0
- package/dist/components/Toast/toast.svelte.d.ts +93 -0
- package/dist/components/Toast/toast.svelte.d.ts.map +1 -0
- package/dist/components/Toast/toast.svelte.js +386 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +3 -0
- package/dist/primitives/Icons/CancelledIcon.svelte +8 -0
- package/dist/primitives/Icons/CancelledIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/CancelledIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/CartIcon.svelte +12 -0
- package/dist/primitives/Icons/CartIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/CartIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ConfirmedIcon.svelte +8 -0
- package/dist/primitives/Icons/ConfirmedIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ConfirmedIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/InvitedIcon.svelte +7 -0
- package/dist/primitives/Icons/InvitedIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/InvitedIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/TicketIcon.svelte +12 -0
- package/dist/primitives/Icons/TicketIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/TicketIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ToastErrorIcon.svelte +9 -0
- package/dist/primitives/Icons/ToastErrorIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ToastErrorIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ToastInfoIcon.svelte +9 -0
- package/dist/primitives/Icons/ToastInfoIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ToastInfoIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ToastLoadingIcon.svelte +14 -0
- package/dist/primitives/Icons/ToastLoadingIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ToastLoadingIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ToastSuccessIcon.svelte +8 -0
- package/dist/primitives/Icons/ToastSuccessIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ToastSuccessIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/ToastWarningIcon.svelte +9 -0
- package/dist/primitives/Icons/ToastWarningIcon.svelte.d.ts +16 -0
- package/dist/primitives/Icons/ToastWarningIcon.svelte.d.ts.map +1 -0
- package/dist/primitives/Icons/index.d.ts +10 -0
- package/dist/primitives/Icons/index.d.ts.map +1 -1
- package/dist/primitives/Icons/index.js +12 -0
- package/dist/recipes/Toaster/Toaster.stories.svelte +9 -28
- package/dist/recipes/Toaster/Toaster.stories.svelte.d.ts +1 -1
- package/dist/recipes/Toaster/Toaster.stories.svelte.d.ts.map +1 -1
- package/dist/schemas/auth.d.ts +17 -107
- package/dist/schemas/auth.d.ts.map +1 -1
- package/dist/schemas/common.d.ts +13 -41
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/event.d.ts +41 -147
- package/dist/schemas/event.d.ts.map +1 -1
- package/dist/schemas/order.d.ts +51 -208
- package/dist/schemas/order.d.ts.map +1 -1
- package/dist/schemas/performer.d.ts +44 -199
- package/dist/schemas/performer.d.ts.map +1 -1
- package/dist/schemas/promo.d.ts +55 -221
- package/dist/schemas/promo.d.ts.map +1 -1
- package/dist/schemas/ticket.d.ts +61 -187
- package/dist/schemas/ticket.d.ts.map +1 -1
- package/dist/schemas/user.d.ts +54 -114
- package/dist/schemas/user.d.ts.map +1 -1
- package/dist/schemas/venue.d.ts +20 -238
- package/dist/schemas/venue.d.ts.map +1 -1
- package/dist/stores/formSave.svelte.js +4 -4
- package/dist/stores/formSave.svelte.spec.js +10 -6
- package/dist/stores/index.d.ts +0 -1
- package/dist/stores/index.js +0 -1
- package/package.json +5 -4
- package/dist/stores/toaster.d.ts +0 -4
- package/dist/stores/toaster.d.ts.map +0 -1
- package/dist/stores/toaster.js +0 -13
- package/dist/stores/toaster.spec.d.ts +0 -2
- package/dist/stores/toaster.spec.d.ts.map +0 -1
- package/dist/stores/toaster.spec.js +0 -59
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getToasts, toast } from './toast.svelte';
|
|
3
|
+
import ToastItem from './ToastItem.svelte';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
position?:
|
|
7
|
+
| 'top-right'
|
|
8
|
+
| 'top-left'
|
|
9
|
+
| 'bottom-right'
|
|
10
|
+
| 'bottom-left'
|
|
11
|
+
| 'top-center'
|
|
12
|
+
| 'bottom-center';
|
|
13
|
+
offset?: string;
|
|
14
|
+
gap?: string;
|
|
15
|
+
/** Max toasts visible before older ones drop off the visible stack */
|
|
16
|
+
visibleCount?: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
position = 'top-right',
|
|
21
|
+
offset = '16px',
|
|
22
|
+
gap = '14px',
|
|
23
|
+
visibleCount = 3,
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
|
|
26
|
+
// Get reactive toasts (newest at index 0)
|
|
27
|
+
let toasts = $derived(getToasts());
|
|
28
|
+
|
|
29
|
+
// Hover state — when true, stack expands and all toasts show full size
|
|
30
|
+
let isExpanded = $state(false);
|
|
31
|
+
|
|
32
|
+
// Heights of each toast, indexed by toast id (for expanded mode positioning)
|
|
33
|
+
let heights = $state<Record<string, number>>({});
|
|
34
|
+
|
|
35
|
+
// Measure each toast's natural height with a ResizeObserver action
|
|
36
|
+
function measureHeight(node: HTMLDivElement, id: string) {
|
|
37
|
+
const update = () => {
|
|
38
|
+
const h = node.offsetHeight;
|
|
39
|
+
if (h && heights[id] !== h) {
|
|
40
|
+
heights = { ...heights, [id]: h };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
update();
|
|
44
|
+
const observer = new ResizeObserver(update);
|
|
45
|
+
observer.observe(node);
|
|
46
|
+
return {
|
|
47
|
+
destroy() {
|
|
48
|
+
observer.disconnect();
|
|
49
|
+
// Clean up height entry
|
|
50
|
+
const { [id]: _, ...rest } = heights;
|
|
51
|
+
heights = rest;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Whether the stack grows from the top (top-*) or bottom (bottom-*)
|
|
57
|
+
let isTop = $derived(position.startsWith('top'));
|
|
58
|
+
|
|
59
|
+
// Position classes for the container
|
|
60
|
+
const positionClasses: Record<string, string> = {
|
|
61
|
+
'top-right': 'top-0 right-0',
|
|
62
|
+
'top-left': 'top-0 left-0',
|
|
63
|
+
'bottom-right': 'bottom-0 right-0',
|
|
64
|
+
'bottom-left': 'bottom-0 left-0',
|
|
65
|
+
'top-center': 'top-0 left-1/2 -translate-x-1/2',
|
|
66
|
+
'bottom-center': 'bottom-0 left-1/2 -translate-x-1/2',
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
let positionClass = $derived(
|
|
70
|
+
positionClasses[position] || positionClasses['top-right']
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// Compute the cumulative offset for a toast at the given index when expanded.
|
|
74
|
+
// Sums the heights of all toasts in front of it (closer to the front of the stack)
|
|
75
|
+
// plus the gap between each.
|
|
76
|
+
function getExpandedOffset(index: number): number {
|
|
77
|
+
if (index === 0) return 0;
|
|
78
|
+
let total = 0;
|
|
79
|
+
const gapPx = parseInt(gap, 10) || 14;
|
|
80
|
+
for (let i = 0; i < index; i++) {
|
|
81
|
+
const t = toasts[i];
|
|
82
|
+
if (t) {
|
|
83
|
+
total += (heights[t.id] || 60) + gapPx;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return total;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function handleMouseEnter() {
|
|
90
|
+
isExpanded = true;
|
|
91
|
+
// Pause all toasts while hovering
|
|
92
|
+
for (const t of toasts) {
|
|
93
|
+
if (t.duration !== Infinity) toast.pause(t.id);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function handleMouseLeave() {
|
|
98
|
+
isExpanded = false;
|
|
99
|
+
for (const t of toasts) {
|
|
100
|
+
if (t.duration !== Infinity && t.pausedAt) toast.resume(t.id);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
</script>
|
|
104
|
+
|
|
105
|
+
<!--
|
|
106
|
+
Sonner-style toast stack.
|
|
107
|
+
- Container is fixed, holds toasts in absolute positioning so they overlap
|
|
108
|
+
- Front toast (index 0) is at z-index top, fully visible
|
|
109
|
+
- Toasts behind peek out by ~14px each, scaled down 5% per depth
|
|
110
|
+
- On hover, stack expands: all toasts return to full size, spaced by their actual heights
|
|
111
|
+
-->
|
|
112
|
+
<div
|
|
113
|
+
class="toast-stack fixed z-70 pointer-events-none {positionClass}"
|
|
114
|
+
class:is-top={isTop}
|
|
115
|
+
class:is-expanded={isExpanded}
|
|
116
|
+
style:padding={offset}
|
|
117
|
+
role="region"
|
|
118
|
+
aria-label="Notifications"
|
|
119
|
+
onmouseenter={handleMouseEnter}
|
|
120
|
+
onmouseleave={handleMouseLeave}
|
|
121
|
+
>
|
|
122
|
+
<!-- Inner wrapper provides a relative coordinate system for absolute toasts -->
|
|
123
|
+
<div class="toast-stack-inner">
|
|
124
|
+
{#each toasts as toastData, index (toastData.id)}
|
|
125
|
+
{@const lift = 14}
|
|
126
|
+
{@const collapsedY = isTop ? index * lift : -index * lift}
|
|
127
|
+
{@const expandedOffset = getExpandedOffset(index)}
|
|
128
|
+
{@const expandedY = isTop ? expandedOffset : -expandedOffset}
|
|
129
|
+
{@const y = isExpanded ? expandedY : collapsedY}
|
|
130
|
+
{@const scale = isExpanded ? 1 : Math.max(0.85, 1 - index * 0.05)}
|
|
131
|
+
{@const isHidden = index >= visibleCount && !isExpanded}
|
|
132
|
+
<div
|
|
133
|
+
class="toast-stack-item pointer-events-auto"
|
|
134
|
+
class:hidden-from-stack={isHidden}
|
|
135
|
+
style:--y="{y}px"
|
|
136
|
+
style:--scale={scale}
|
|
137
|
+
style:z-index={1000 - index}
|
|
138
|
+
use:measureHeight={toastData.id}
|
|
139
|
+
>
|
|
140
|
+
<ToastItem data={toastData} />
|
|
141
|
+
</div>
|
|
142
|
+
{/each}
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<style>
|
|
147
|
+
.toast-stack {
|
|
148
|
+
/* Container is the hover region */
|
|
149
|
+
width: auto;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.toast-stack-inner {
|
|
153
|
+
position: relative;
|
|
154
|
+
width: 320px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.toast-stack-item {
|
|
158
|
+
position: absolute;
|
|
159
|
+
right: 0;
|
|
160
|
+
width: 100%;
|
|
161
|
+
transform: translateY(var(--y, 0)) scale(var(--scale, 1));
|
|
162
|
+
transition:
|
|
163
|
+
transform 400ms cubic-bezier(0.22, 1, 0.36, 1),
|
|
164
|
+
opacity 400ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* Top-positioned stacks anchor toasts to the top, grow downward */
|
|
168
|
+
.toast-stack.is-top .toast-stack-item {
|
|
169
|
+
top: 0;
|
|
170
|
+
transform-origin: top center;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Bottom-positioned stacks anchor to the bottom, grow upward */
|
|
174
|
+
.toast-stack:not(.is-top) .toast-stack-item {
|
|
175
|
+
bottom: 0;
|
|
176
|
+
transform-origin: bottom center;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* Hidden toasts (beyond visibleCount in collapsed mode) */
|
|
180
|
+
.toast-stack-item.hidden-from-stack {
|
|
181
|
+
pointer-events: none;
|
|
182
|
+
opacity: 0;
|
|
183
|
+
}
|
|
184
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';
|
|
3
|
+
offset?: string;
|
|
4
|
+
gap?: string;
|
|
5
|
+
/** Max toasts visible before older ones drop off the visible stack */
|
|
6
|
+
visibleCount?: number;
|
|
7
|
+
}
|
|
8
|
+
declare const Toaster: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Toaster = ReturnType<typeof Toaster>;
|
|
10
|
+
export default Toaster;
|
|
11
|
+
//# sourceMappingURL=Toaster.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toaster.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Toast/Toaster.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,KAAK;IACb,QAAQ,CAAC,EACL,WAAW,GACX,UAAU,GACV,cAAc,GACd,aAAa,GACb,YAAY,GACZ,eAAe,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmHH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as Toaster } from "./Toaster.svelte";
|
|
2
|
+
export { default as ToastItem } from "./ToastItem.svelte";
|
|
3
|
+
export type Toast = import("./toast.svelte").Toast;
|
|
4
|
+
export type ToastType = import("./toast.svelte").ToastType;
|
|
5
|
+
export type ToastOptions = import("./toast.svelte").ToastOptions;
|
|
6
|
+
export type ToastAction = import("./toast.svelte").ToastAction;
|
|
7
|
+
export type NotificationToastOptions = import("./toast.svelte").NotificationToastOptions;
|
|
8
|
+
export { toast, getToasts } from "./toast.svelte";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Toast/index.js"],"names":[],"mappings":";;oBAOa,OAAO,gBAAgB,EAAE,KAAK;wBAC9B,OAAO,gBAAgB,EAAE,SAAS;2BAClC,OAAO,gBAAgB,EAAE,YAAY;0BACrC,OAAO,gBAAgB,EAAE,WAAW;uCACpC,OAAO,gBAAgB,EAAE,wBAAwB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Toast notification system
|
|
2
|
+
export { default as Toaster } from './Toaster.svelte';
|
|
3
|
+
export { default as ToastItem } from './ToastItem.svelte';
|
|
4
|
+
export { toast, getToasts } from './toast.svelte';
|
|
5
|
+
|
|
6
|
+
// Re-export all types for consumers
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import('./toast.svelte').Toast} Toast
|
|
9
|
+
* @typedef {import('./toast.svelte').ToastType} ToastType
|
|
10
|
+
* @typedef {import('./toast.svelte').ToastOptions} ToastOptions
|
|
11
|
+
* @typedef {import('./toast.svelte').ToastAction} ToastAction
|
|
12
|
+
* @typedef {import('./toast.svelte').NotificationToastOptions} NotificationToastOptions
|
|
13
|
+
*/
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Micdrop Toast System
|
|
3
|
+
* A modern, macOS-style toast notification system built with Svelte 5 runes.
|
|
4
|
+
* Supports both simple toasts and rich notification-style toasts.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Smart batching for sales notifications (prevents spam during busy periods)
|
|
8
|
+
* - Desktop notification support (browser API)
|
|
9
|
+
* - Swipe-to-dismiss on mobile
|
|
10
|
+
* - Haptic feedback on toast display (QOL Bible)
|
|
11
|
+
*/
|
|
12
|
+
export type ToastType = 'success' | 'error' | 'warning' | 'info' | 'loading' | 'notification';
|
|
13
|
+
export interface ToastAction {
|
|
14
|
+
label: string;
|
|
15
|
+
onClick: () => void;
|
|
16
|
+
}
|
|
17
|
+
export interface ToastOptions {
|
|
18
|
+
description?: string;
|
|
19
|
+
duration?: number;
|
|
20
|
+
dismissible?: boolean;
|
|
21
|
+
onClick?: () => void;
|
|
22
|
+
action?: ToastAction;
|
|
23
|
+
}
|
|
24
|
+
export interface NotificationToastOptions {
|
|
25
|
+
name: string;
|
|
26
|
+
displayName?: string;
|
|
27
|
+
event: string;
|
|
28
|
+
status: string;
|
|
29
|
+
avatar: string;
|
|
30
|
+
message?: string;
|
|
31
|
+
performerMessage?: string;
|
|
32
|
+
eventId?: string;
|
|
33
|
+
duration?: number;
|
|
34
|
+
dismissible?: boolean;
|
|
35
|
+
onClick?: () => void;
|
|
36
|
+
}
|
|
37
|
+
export interface Toast {
|
|
38
|
+
id: string;
|
|
39
|
+
type: ToastType;
|
|
40
|
+
title?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
notification?: {
|
|
43
|
+
name: string;
|
|
44
|
+
displayName?: string;
|
|
45
|
+
event: string;
|
|
46
|
+
status: string;
|
|
47
|
+
avatar: string;
|
|
48
|
+
message?: string;
|
|
49
|
+
performerMessage?: string;
|
|
50
|
+
eventId?: string;
|
|
51
|
+
batchCount?: number;
|
|
52
|
+
batchTotal?: number;
|
|
53
|
+
};
|
|
54
|
+
duration: number;
|
|
55
|
+
dismissible: boolean;
|
|
56
|
+
showProgress?: boolean;
|
|
57
|
+
onClick?: () => void;
|
|
58
|
+
action?: ToastAction;
|
|
59
|
+
createdAt: number;
|
|
60
|
+
pausedAt?: number;
|
|
61
|
+
remainingTime?: number;
|
|
62
|
+
}
|
|
63
|
+
type PushPreferenceChecker = (status: string) => boolean;
|
|
64
|
+
declare function toast(title: string, options?: ToastOptions): string;
|
|
65
|
+
declare namespace toast {
|
|
66
|
+
var success: (title: string, options?: ToastOptions) => string;
|
|
67
|
+
var error: (title: string, options?: ToastOptions) => string;
|
|
68
|
+
var warning: (title: string, options?: ToastOptions) => string;
|
|
69
|
+
var info: (title: string, options?: ToastOptions) => string;
|
|
70
|
+
var loading: (title: string, options?: ToastOptions) => string;
|
|
71
|
+
var notification: (options: NotificationToastOptions) => string;
|
|
72
|
+
var dismiss: (id: string) => void;
|
|
73
|
+
var dismissAll: () => void;
|
|
74
|
+
var pause: (id: string) => void;
|
|
75
|
+
var resume: (id: string) => void;
|
|
76
|
+
var requestDesktopPermission: () => Promise<boolean>;
|
|
77
|
+
var getDesktopPermission: () => NotificationPermission;
|
|
78
|
+
var isDesktopEnabled: () => boolean;
|
|
79
|
+
var setPushPreferenceChecker: (checker: PushPreferenceChecker) => void;
|
|
80
|
+
var STATUS_TO_PREFERENCE: Record<string, {
|
|
81
|
+
category: "admin" | "performer";
|
|
82
|
+
key: string;
|
|
83
|
+
}>;
|
|
84
|
+
var promise: <T>(promise: Promise<T>, options: PromiseOptions) => Promise<T>;
|
|
85
|
+
}
|
|
86
|
+
interface PromiseOptions {
|
|
87
|
+
loading: string;
|
|
88
|
+
success: string;
|
|
89
|
+
error: string;
|
|
90
|
+
}
|
|
91
|
+
export declare function getToasts(): Toast[];
|
|
92
|
+
export { toast };
|
|
93
|
+
//# sourceMappingURL=toast.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Toast/toast.svelte.ts"],"names":[],"mappings":"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"}
|