@linktr.ee/messaging-react 1.28.0-rc-1776233688 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Creator-BJ6UBWsR.js → Creator-VyMyIk2b.js} +87 -84
- package/dist/Creator-VyMyIk2b.js.map +1 -0
- package/dist/{MediaPlayer-DXz4IBLx.js → MediaPlayer-Bf-xPB8Z.js} +99 -94
- package/dist/MediaPlayer-Bf-xPB8Z.js.map +1 -0
- package/dist/Visitor-C4WqnN8H.js +218 -0
- package/dist/Visitor-C4WqnN8H.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +80 -80
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/CustomMessage/CustomMessage.stories.tsx +11 -6
- package/src/components/CustomMessage/index.tsx +1 -1
- package/src/components/LockedAttachment/LockedAttachment.stories.tsx +15 -28
- package/src/components/LockedAttachment/components/Creator.tsx +7 -3
- package/src/components/LockedAttachment/components/MediaPlayer.tsx +10 -2
- package/src/components/LockedAttachment/components/Visitor.tsx +75 -33
- package/dist/Creator-BJ6UBWsR.js.map +0 -1
- package/dist/MediaPlayer-DXz4IBLx.js.map +0 -1
- package/dist/Visitor-C1Fcrgd6.js +0 -199
- package/dist/Visitor-C1Fcrgd6.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsxs as f, jsx as e, Fragment as
|
|
2
|
-
import { XIcon as
|
|
3
|
-
import
|
|
4
|
-
import { useState as
|
|
5
|
-
import { g as
|
|
6
|
-
const
|
|
7
|
-
const { onClose: n } =
|
|
1
|
+
import { jsxs as f, jsx as e, Fragment as j } from "react/jsx-runtime";
|
|
2
|
+
import { XIcon as O, CheckCircleIcon as S, LockOpenIcon as X, LockIcon as D, PauseIcon as q, PlayIcon as B, EyeSlashIcon as M, EyeIcon as K } from "@phosphor-icons/react";
|
|
3
|
+
import T from "classnames";
|
|
4
|
+
import { useState as g, useRef as P, useEffect as y, useCallback as E } from "react";
|
|
5
|
+
import { g as U, r as z, M as V } from "./MediaPlayer-Bf-xPB8Z.js";
|
|
6
|
+
const R = (c) => {
|
|
7
|
+
const { onClose: n } = c;
|
|
8
8
|
return /* @__PURE__ */ e(
|
|
9
9
|
"button",
|
|
10
10
|
{
|
|
@@ -12,17 +12,17 @@ const M = (u) => {
|
|
|
12
12
|
onClick: n,
|
|
13
13
|
className: "absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
|
|
14
14
|
"aria-label": "Close preview",
|
|
15
|
-
children: /* @__PURE__ */ e(
|
|
15
|
+
children: /* @__PURE__ */ e(K, { className: "size-4", weight: "fill" })
|
|
16
16
|
}
|
|
17
17
|
);
|
|
18
|
-
},
|
|
19
|
-
const { thumbnail: n, mimeType: s, overlayIcon: i, darkOverlay: l, onClick: o } =
|
|
18
|
+
}, I = (c) => {
|
|
19
|
+
const { thumbnail: n, mimeType: s, overlayIcon: i, darkOverlay: l, onClick: o } = c;
|
|
20
20
|
return /* @__PURE__ */ f(
|
|
21
21
|
"button",
|
|
22
22
|
{
|
|
23
23
|
type: "button",
|
|
24
24
|
disabled: !o,
|
|
25
|
-
className:
|
|
25
|
+
className: T(
|
|
26
26
|
"relative aspect-video block w-full overflow-hidden border-0 bg-black/5 p-0 text-left appearance-none",
|
|
27
27
|
{ "cursor-pointer": !!o, "cursor-default": !o }
|
|
28
28
|
),
|
|
@@ -36,7 +36,7 @@ const M = (u) => {
|
|
|
36
36
|
alt: "",
|
|
37
37
|
className: "absolute inset-0 h-full w-full object-cover"
|
|
38
38
|
}
|
|
39
|
-
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children:
|
|
39
|
+
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(s, {
|
|
40
40
|
className: "size-12 text-black/20",
|
|
41
41
|
weight: "regular"
|
|
42
42
|
}) }),
|
|
@@ -45,52 +45,54 @@ const M = (u) => {
|
|
|
45
45
|
]
|
|
46
46
|
}
|
|
47
47
|
);
|
|
48
|
-
},
|
|
49
|
-
const { source: n, thumbnail: s, mimeType: i } =
|
|
50
|
-
|
|
48
|
+
}, $ = (c) => {
|
|
49
|
+
const { source: n, thumbnail: s, mimeType: i } = c, [l, o] = g(!1), [r, u] = g(0), [b, w] = g(!1), p = P(null), x = P(null), m = P(null);
|
|
50
|
+
y(() => {
|
|
51
51
|
const t = p.current;
|
|
52
52
|
t && (l ? t.play().catch(() => o(!1)) : t.pause());
|
|
53
|
-
}, [l]),
|
|
53
|
+
}, [l]), y(() => {
|
|
54
54
|
if (!l) {
|
|
55
55
|
m.current !== null && cancelAnimationFrame(m.current);
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
const t = () => {
|
|
59
59
|
const a = p.current;
|
|
60
|
-
a && a.duration && !b &&
|
|
60
|
+
a && a.duration && !b && u(a.currentTime / a.duration), m.current = requestAnimationFrame(t);
|
|
61
61
|
};
|
|
62
62
|
return m.current = requestAnimationFrame(t), () => {
|
|
63
63
|
m.current !== null && cancelAnimationFrame(m.current);
|
|
64
64
|
};
|
|
65
|
-
}, [l, b])
|
|
66
|
-
|
|
65
|
+
}, [l, b]);
|
|
66
|
+
const [k, v] = g(!1);
|
|
67
|
+
y(() => {
|
|
68
|
+
o(!1), u(0), v(!1);
|
|
67
69
|
}, [n]);
|
|
68
|
-
const
|
|
70
|
+
const d = E(
|
|
69
71
|
(t) => {
|
|
70
|
-
var
|
|
72
|
+
var A, L;
|
|
71
73
|
const a = x.current;
|
|
72
74
|
if (!a) return 0;
|
|
73
|
-
const
|
|
74
|
-
return Math.max(0, Math.min(1, (
|
|
75
|
+
const N = "touches" in t ? ((A = t.touches[0]) == null ? void 0 : A.clientX) ?? ((L = t.changedTouches[0]) == null ? void 0 : L.clientX) ?? 0 : t.clientX, C = a.getBoundingClientRect();
|
|
76
|
+
return Math.max(0, Math.min(1, (N - C.left) / C.width));
|
|
75
77
|
},
|
|
76
78
|
[]
|
|
77
|
-
),
|
|
79
|
+
), h = E((t) => {
|
|
78
80
|
const a = p.current;
|
|
79
81
|
a && a.duration && (a.currentTime = t * a.duration);
|
|
80
82
|
}, []);
|
|
81
|
-
|
|
83
|
+
y(() => {
|
|
82
84
|
if (!b) return;
|
|
83
|
-
const t = (
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
}, a = (
|
|
87
|
-
w(!1),
|
|
85
|
+
const t = (N) => {
|
|
86
|
+
const C = d(N);
|
|
87
|
+
u(C), h(C);
|
|
88
|
+
}, a = (N) => {
|
|
89
|
+
w(!1), h(d(N));
|
|
88
90
|
};
|
|
89
91
|
return window.addEventListener("mousemove", t), window.addEventListener("mouseup", a), window.addEventListener("touchmove", t, { passive: !0 }), window.addEventListener("touchend", a), () => {
|
|
90
92
|
window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", a), window.removeEventListener("touchmove", t), window.removeEventListener("touchend", a);
|
|
91
93
|
};
|
|
92
|
-
}, [b,
|
|
93
|
-
const
|
|
94
|
+
}, [b, d, h]);
|
|
95
|
+
const F = E(() => o((t) => !t), []);
|
|
94
96
|
return /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
95
97
|
n && /* @__PURE__ */ e(
|
|
96
98
|
"audio",
|
|
@@ -98,22 +100,23 @@ const M = (u) => {
|
|
|
98
100
|
ref: p,
|
|
99
101
|
src: n,
|
|
100
102
|
loop: !0,
|
|
103
|
+
onCanPlay: () => v(!0),
|
|
101
104
|
onEnded: () => {
|
|
102
|
-
o(!1),
|
|
105
|
+
o(!1), u(0);
|
|
103
106
|
},
|
|
104
107
|
children: /* @__PURE__ */ e("track", { kind: "captions" })
|
|
105
108
|
}
|
|
106
109
|
),
|
|
107
110
|
/* @__PURE__ */ e(
|
|
108
|
-
|
|
111
|
+
I,
|
|
109
112
|
{
|
|
110
113
|
thumbnail: s,
|
|
111
114
|
mimeType: i,
|
|
112
|
-
overlayIcon: n ? l ?
|
|
113
|
-
onClick: n ?
|
|
115
|
+
overlayIcon: n && k ? l ? q : B : void 0,
|
|
116
|
+
onClick: n && k ? F : void 0
|
|
114
117
|
}
|
|
115
118
|
),
|
|
116
|
-
n && /* @__PURE__ */ e("div", { className: "absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent", children: /* @__PURE__ */ e(
|
|
119
|
+
n && k && /* @__PURE__ */ e("div", { className: "absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent", children: /* @__PURE__ */ e(
|
|
117
120
|
"div",
|
|
118
121
|
{
|
|
119
122
|
ref: x,
|
|
@@ -126,17 +129,17 @@ const M = (u) => {
|
|
|
126
129
|
className: "relative flex h-4 w-full cursor-pointer items-center",
|
|
127
130
|
onMouseDown: (t) => {
|
|
128
131
|
t.stopPropagation(), w(!0);
|
|
129
|
-
const a =
|
|
130
|
-
|
|
132
|
+
const a = d(t);
|
|
133
|
+
u(a), h(a);
|
|
131
134
|
},
|
|
132
135
|
onTouchStart: (t) => {
|
|
133
136
|
t.stopPropagation(), w(!0);
|
|
134
|
-
const a =
|
|
135
|
-
|
|
137
|
+
const a = d(t);
|
|
138
|
+
u(a), h(a);
|
|
136
139
|
},
|
|
137
140
|
onClick: (t) => t.stopPropagation(),
|
|
138
141
|
onKeyDown: (t) => {
|
|
139
|
-
t.key === "ArrowRight" &&
|
|
142
|
+
t.key === "ArrowRight" && h(Math.min(1, r + 0.05)), t.key === "ArrowLeft" && h(Math.max(0, r - 0.05));
|
|
140
143
|
},
|
|
141
144
|
children: /* @__PURE__ */ e("div", { className: "w-full overflow-hidden rounded-full bg-white/30 h-1", children: /* @__PURE__ */ e(
|
|
142
145
|
"div",
|
|
@@ -148,19 +151,19 @@ const M = (u) => {
|
|
|
148
151
|
}
|
|
149
152
|
) })
|
|
150
153
|
] });
|
|
151
|
-
},
|
|
152
|
-
const { source: n, thumbnail: s, mimeType: i } =
|
|
153
|
-
return
|
|
154
|
+
}, G = (c) => {
|
|
155
|
+
const { source: n, thumbnail: s, mimeType: i } = c, [l, o] = g(!1), r = () => o(!1);
|
|
156
|
+
return y(() => {
|
|
154
157
|
o(!1);
|
|
155
158
|
}, [n]), n ? /* @__PURE__ */ f(
|
|
156
159
|
"div",
|
|
157
160
|
{
|
|
158
|
-
className:
|
|
161
|
+
className: T("relative overflow-hidden", {
|
|
159
162
|
"aspect-video": !l
|
|
160
163
|
}),
|
|
161
164
|
children: [
|
|
162
165
|
/* @__PURE__ */ e(
|
|
163
|
-
|
|
166
|
+
V,
|
|
164
167
|
{
|
|
165
168
|
source: n,
|
|
166
169
|
mimeType: i,
|
|
@@ -188,21 +191,21 @@ const M = (u) => {
|
|
|
188
191
|
alt: "",
|
|
189
192
|
className: "absolute inset-0 h-full w-full object-cover"
|
|
190
193
|
}
|
|
191
|
-
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children:
|
|
194
|
+
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(i, {
|
|
192
195
|
className: "size-12 text-black/20",
|
|
193
196
|
weight: "regular"
|
|
194
197
|
}) }),
|
|
195
|
-
/* @__PURE__ */ e("div", { className: "pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white", children: /* @__PURE__ */ e(
|
|
198
|
+
/* @__PURE__ */ e("div", { className: "pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white", children: /* @__PURE__ */ e(M, { className: "size-4", weight: "fill" }) })
|
|
196
199
|
]
|
|
197
200
|
}
|
|
198
201
|
),
|
|
199
|
-
l && /* @__PURE__ */ e(
|
|
202
|
+
l && /* @__PURE__ */ e(R, { onClose: r })
|
|
200
203
|
]
|
|
201
204
|
}
|
|
202
|
-
) : /* @__PURE__ */ e(
|
|
203
|
-
},
|
|
204
|
-
const { source: n, thumbnail: s, mimeType: i, title: l } =
|
|
205
|
-
return
|
|
205
|
+
) : /* @__PURE__ */ e(I, { thumbnail: s, mimeType: i });
|
|
206
|
+
}, H = (c) => {
|
|
207
|
+
const { source: n, thumbnail: s, mimeType: i, title: l } = c, [o, r] = g(!1), u = () => r(!1);
|
|
208
|
+
return y(() => {
|
|
206
209
|
r(!1);
|
|
207
210
|
}, [n]), o && n ? /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
208
211
|
/* @__PURE__ */ e(
|
|
@@ -210,22 +213,22 @@ const M = (u) => {
|
|
|
210
213
|
{
|
|
211
214
|
type: "button",
|
|
212
215
|
className: "block w-full cursor-pointer border-0 p-0 text-left appearance-none",
|
|
213
|
-
onClick:
|
|
216
|
+
onClick: u,
|
|
214
217
|
"aria-label": "Close preview",
|
|
215
218
|
children: /* @__PURE__ */ e("img", { src: n, alt: l ?? "", className: "block w-full" })
|
|
216
219
|
}
|
|
217
220
|
),
|
|
218
|
-
/* @__PURE__ */ e(
|
|
221
|
+
/* @__PURE__ */ e(R, { onClose: u })
|
|
219
222
|
] }) : /* @__PURE__ */ e(
|
|
220
|
-
|
|
223
|
+
I,
|
|
221
224
|
{
|
|
222
225
|
thumbnail: s,
|
|
223
226
|
mimeType: i,
|
|
224
|
-
overlayIcon: n ?
|
|
227
|
+
overlayIcon: n ? M : void 0,
|
|
225
228
|
onClick: n ? () => r(!0) : void 0
|
|
226
229
|
}
|
|
227
230
|
);
|
|
228
|
-
},
|
|
231
|
+
}, _ = (c) => {
|
|
229
232
|
const {
|
|
230
233
|
title: n,
|
|
231
234
|
mimeType: s = "application/octet-stream",
|
|
@@ -233,27 +236,27 @@ const M = (u) => {
|
|
|
233
236
|
source: l,
|
|
234
237
|
detail: o,
|
|
235
238
|
amountText: r,
|
|
236
|
-
placeholderTitle:
|
|
239
|
+
placeholderTitle: u = "Attachment title",
|
|
237
240
|
placeholderAmountText: b,
|
|
238
241
|
paymentStatus: w,
|
|
239
242
|
onDismiss: p,
|
|
240
243
|
isPreview: x = !1
|
|
241
|
-
} =
|
|
242
|
-
let
|
|
243
|
-
return x && m === "audio" ?
|
|
244
|
-
|
|
244
|
+
} = c, m = U(s), k = r ?? b, v = !r && !!b;
|
|
245
|
+
let d;
|
|
246
|
+
return x && m === "audio" ? d = /* @__PURE__ */ e($, { source: l, thumbnail: i, mimeType: s }) : x && m === "video" ? d = /* @__PURE__ */ e(G, { source: l, thumbnail: i, mimeType: s }) : x && m === "image" ? d = /* @__PURE__ */ e(
|
|
247
|
+
H,
|
|
245
248
|
{
|
|
246
249
|
source: l,
|
|
247
250
|
thumbnail: i,
|
|
248
251
|
mimeType: s,
|
|
249
252
|
title: n
|
|
250
253
|
}
|
|
251
|
-
) :
|
|
252
|
-
|
|
254
|
+
) : d = /* @__PURE__ */ e(
|
|
255
|
+
I,
|
|
253
256
|
{
|
|
254
257
|
thumbnail: i,
|
|
255
258
|
mimeType: s,
|
|
256
|
-
overlayIcon: p ? void 0 : w === "paid" ?
|
|
259
|
+
overlayIcon: p ? void 0 : w === "paid" ? X : D,
|
|
257
260
|
darkOverlay: !0
|
|
258
261
|
}
|
|
259
262
|
), /* @__PURE__ */ f("div", { className: "relative w-[280px] select-none overflow-hidden rounded-3xl bg-white shadow-card", children: [
|
|
@@ -264,44 +267,44 @@ const M = (u) => {
|
|
|
264
267
|
onClick: p,
|
|
265
268
|
className: "absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
|
|
266
269
|
"aria-label": "Dismiss attachment",
|
|
267
|
-
children: /* @__PURE__ */ e(
|
|
270
|
+
children: /* @__PURE__ */ e(O, { className: "size-4", weight: "bold" })
|
|
268
271
|
}
|
|
269
272
|
),
|
|
270
|
-
|
|
273
|
+
d,
|
|
271
274
|
/* @__PURE__ */ f("div", { className: "px-4 pb-3 pt-3", children: [
|
|
272
275
|
/* @__PURE__ */ e(
|
|
273
276
|
"p",
|
|
274
277
|
{
|
|
275
|
-
className:
|
|
278
|
+
className: T("mb-1.5 truncate text-base font-medium", {
|
|
276
279
|
"text-black/30": !n,
|
|
277
280
|
"text-black": !!n
|
|
278
281
|
}),
|
|
279
|
-
children: n ||
|
|
282
|
+
children: n || u
|
|
280
283
|
}
|
|
281
284
|
),
|
|
282
285
|
/* @__PURE__ */ f("div", { className: "flex items-center gap-1", children: [
|
|
283
|
-
|
|
286
|
+
z(s, {
|
|
284
287
|
className: "size-5 shrink-0 text-black/55",
|
|
285
288
|
weight: "regular"
|
|
286
289
|
}),
|
|
287
290
|
o && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: o }),
|
|
288
|
-
w === "paid" ? /* @__PURE__ */ f(
|
|
291
|
+
w === "paid" ? /* @__PURE__ */ f(j, { children: [
|
|
289
292
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
|
|
290
293
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-[#008236]", children: "Purchased" }),
|
|
291
294
|
/* @__PURE__ */ e(
|
|
292
|
-
|
|
295
|
+
S,
|
|
293
296
|
{
|
|
294
297
|
className: "size-4 text-[#008236]",
|
|
295
298
|
weight: "bold"
|
|
296
299
|
}
|
|
297
300
|
)
|
|
298
|
-
] }) :
|
|
301
|
+
] }) : k && /* @__PURE__ */ f(j, { children: [
|
|
299
302
|
/* @__PURE__ */ e(
|
|
300
303
|
"span",
|
|
301
304
|
{
|
|
302
|
-
className:
|
|
303
|
-
"text-black/30":
|
|
304
|
-
"text-black/55": !
|
|
305
|
+
className: T("text-xs font-medium", {
|
|
306
|
+
"text-black/30": v,
|
|
307
|
+
"text-black/55": !v
|
|
305
308
|
}),
|
|
306
309
|
children: "•"
|
|
307
310
|
}
|
|
@@ -309,11 +312,11 @@ const M = (u) => {
|
|
|
309
312
|
/* @__PURE__ */ e(
|
|
310
313
|
"span",
|
|
311
314
|
{
|
|
312
|
-
className:
|
|
313
|
-
"text-black/30":
|
|
314
|
-
"text-black/55": !
|
|
315
|
+
className: T("text-xs font-medium", {
|
|
316
|
+
"text-black/30": v,
|
|
317
|
+
"text-black/55": !v
|
|
315
318
|
}),
|
|
316
|
-
children:
|
|
319
|
+
children: k
|
|
317
320
|
}
|
|
318
321
|
)
|
|
319
322
|
] })
|
|
@@ -322,6 +325,6 @@ const M = (u) => {
|
|
|
322
325
|
] });
|
|
323
326
|
};
|
|
324
327
|
export {
|
|
325
|
-
|
|
328
|
+
_ as default
|
|
326
329
|
};
|
|
327
|
-
//# sourceMappingURL=Creator-
|
|
330
|
+
//# sourceMappingURL=Creator-VyMyIk2b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Creator-VyMyIk2b.js","sources":["../src/components/LockedAttachment/components/Creator.tsx"],"sourcesContent":["import {\n CheckCircleIcon,\n EyeIcon,\n EyeSlashIcon,\n LockIcon,\n LockOpenIcon,\n PauseIcon,\n PlayIcon,\n XIcon,\n} from '@phosphor-icons/react'\nimport classNames from 'classnames'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { LockedAttachmentBaseProps } from '../types'\nimport { renderTypeIcon } from '../utils/icons'\nimport { getSourceType } from '../utils/mimeType'\n\nimport MediaPlayer from './MediaPlayer'\n\nexport interface CreatorCardProps extends LockedAttachmentBaseProps {\n isPreview?: boolean\n placeholderTitle?: string\n placeholderAmountText?: string\n onDismiss?: () => void\n}\n\ninterface CloseButtonProps {\n onClose: () => void\n}\n\nconst CloseButton: React.FC<CloseButtonProps> = (props) => {\n const { onClose } = props\n return (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\"\n aria-label=\"Close preview\"\n >\n <EyeIcon className=\"size-4\" weight=\"fill\" />\n </button>\n )\n}\n\ninterface CollapsedThumbnailProps {\n thumbnail?: string\n mimeType: string\n overlayIcon?: React.ElementType\n darkOverlay?: boolean\n onClick?: () => void\n}\n\nconst CollapsedThumbnail: React.FC<CollapsedThumbnailProps> = (props) => {\n const { thumbnail, mimeType, overlayIcon: OverlayIcon, darkOverlay, onClick } = props\n return (\n <button\n type=\"button\"\n disabled={!onClick}\n className={classNames(\n 'relative aspect-video block w-full overflow-hidden border-0 bg-black/5 p-0 text-left appearance-none',\n { 'cursor-pointer': !!onClick, 'cursor-default': !onClick }\n )}\n onClick={onClick}\n aria-label={OverlayIcon ? 'Toggle preview' : undefined}\n >\n {thumbnail ? (\n <img\n src={thumbnail}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, {\n className: 'size-12 text-black/20',\n weight: 'regular',\n })}\n </div>\n )}\n {darkOverlay && (\n <div className=\"pointer-events-none absolute inset-0 bg-black/30\" />\n )}\n {OverlayIcon && (\n <div className=\"pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\">\n <OverlayIcon className=\"size-4\" weight=\"fill\" />\n </div>\n )}\n </button>\n )\n}\n\n\ninterface AudioPreviewProps {\n source?: string\n thumbnail?: string\n mimeType: string\n}\n\nconst AudioPreview: React.FC<AudioPreviewProps> = (props) => {\n const { source, thumbnail, mimeType } = props\n const [playing, setPlaying] = useState(false)\n const [played, setPlayed] = useState(0)\n const [seeking, setSeeking] = useState(false)\n const audioRef = useRef<HTMLAudioElement>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n const rafRef = useRef<number | null>(null)\n\n useEffect(() => {\n const el = audioRef.current\n if (!el) return\n if (playing) {\n void el.play().catch(() => setPlaying(false))\n } else {\n el.pause()\n }\n }, [playing])\n\n useEffect(() => {\n if (!playing) {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n return\n }\n const tick = () => {\n const el = audioRef.current\n if (el && el.duration && !seeking) setPlayed(el.currentTime / el.duration)\n rafRef.current = requestAnimationFrame(tick)\n }\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [playing, seeking])\n\n const [audioReady, setAudioReady] = useState(false)\n\n useEffect(() => {\n setPlaying(false)\n setPlayed(0)\n setAudioReady(false)\n }, [source])\n\n const getFraction = useCallback(\n (e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n const track = trackRef.current\n if (!track) return 0\n const clientX =\n 'touches' in e\n ? (e.touches[0]?.clientX ?? e.changedTouches[0]?.clientX ?? 0)\n : e.clientX\n const rect = track.getBoundingClientRect()\n return Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n },\n []\n )\n\n const seekTo = useCallback((fraction: number) => {\n const el = audioRef.current\n if (el && el.duration) el.currentTime = fraction * el.duration\n }, [])\n\n useEffect(() => {\n if (!seeking) return\n const onMove = (e: MouseEvent | TouchEvent) => {\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }\n const onUp = (e: MouseEvent | TouchEvent) => {\n setSeeking(false)\n seekTo(getFraction(e))\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n window.addEventListener('touchmove', onMove, { passive: true })\n window.addEventListener('touchend', onUp)\n return () => {\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('mouseup', onUp)\n window.removeEventListener('touchmove', onMove)\n window.removeEventListener('touchend', onUp)\n }\n }, [seeking, getFraction, seekTo])\n\n const toggle = useCallback(() => setPlaying((p) => !p), [])\n\n return (\n <div className=\"relative\">\n {source && (\n <audio\n ref={audioRef}\n src={source}\n loop\n onCanPlay={() => setAudioReady(true)}\n onEnded={() => {\n setPlaying(false)\n setPlayed(0)\n }}\n >\n <track kind=\"captions\" />\n </audio>\n )}\n <CollapsedThumbnail\n thumbnail={thumbnail}\n mimeType={mimeType}\n overlayIcon={source && audioReady ? (playing ? PauseIcon : PlayIcon) : undefined}\n onClick={source && audioReady ? toggle : undefined}\n />\n {source && audioReady && (\n <div className=\"absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent\">\n <div\n ref={trackRef}\n role=\"slider\"\n aria-label=\"Playback position\"\n aria-valuenow={Math.round(played * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={0}\n className=\"relative flex h-4 w-full cursor-pointer items-center\"\n onMouseDown={(e) => {\n e.stopPropagation()\n setSeeking(true)\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }}\n onTouchStart={(e) => {\n e.stopPropagation()\n setSeeking(true)\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') seekTo(Math.min(1, played + 0.05))\n if (e.key === 'ArrowLeft') seekTo(Math.max(0, played - 0.05))\n }}\n >\n <div className=\"w-full overflow-hidden rounded-full bg-white/30 h-1\">\n <div\n className=\"h-full rounded-full bg-white\"\n style={{ width: `${Math.round(played * 100)}%` }}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\ninterface VideoPreviewProps {\n source?: string\n thumbnail?: string\n mimeType: string\n}\n\nconst VideoPreview: React.FC<VideoPreviewProps> = (props) => {\n const { source, thumbnail, mimeType } = props\n const [expanded, setExpanded] = useState(false)\n const collapse = () => setExpanded(false)\n\n useEffect(() => {\n setExpanded(false)\n }, [source])\n\n if (!source) {\n return <CollapsedThumbnail thumbnail={thumbnail} mimeType={mimeType} />\n }\n\n return (\n <div\n className={classNames('relative overflow-hidden', {\n 'aspect-video': !expanded,\n })}\n >\n <MediaPlayer\n source={source}\n mimeType={mimeType}\n poster={thumbnail}\n playing={expanded}\n loop\n controls={false}\n showProgress\n onContainerClick={collapse}\n muted\n />\n {!expanded && (\n <button\n type=\"button\"\n className=\"absolute inset-0 block cursor-pointer border-0 p-0 text-left appearance-none\"\n onClick={() => setExpanded(true)}\n aria-label=\"Expand video preview\"\n >\n {thumbnail ? (\n <img\n src={thumbnail}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, {\n className: 'size-12 text-black/20',\n weight: 'regular',\n })}\n </div>\n )}\n <div className=\"pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\">\n <EyeSlashIcon className=\"size-4\" weight=\"fill\" />\n </div>\n </button>\n )}\n {expanded && <CloseButton onClose={collapse} />}\n </div>\n )\n}\n\ninterface ImagePreviewProps {\n source?: string\n thumbnail?: string\n mimeType: string\n title?: string\n}\n\nconst ImagePreview: React.FC<ImagePreviewProps> = (props) => {\n const { source, thumbnail, mimeType, title } = props\n const [expanded, setExpanded] = useState(false)\n const collapse = () => setExpanded(false)\n\n useEffect(() => {\n setExpanded(false)\n }, [source])\n\n if (expanded && source) {\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"block w-full cursor-pointer border-0 p-0 text-left appearance-none\"\n onClick={collapse}\n aria-label=\"Close preview\"\n >\n <img src={source} alt={title ?? ''} className=\"block w-full\" />\n </button>\n <CloseButton onClose={collapse} />\n </div>\n )\n }\n\n return (\n <CollapsedThumbnail\n thumbnail={thumbnail}\n mimeType={mimeType}\n overlayIcon={source ? EyeSlashIcon : undefined}\n onClick={source ? () => setExpanded(true) : undefined}\n />\n )\n}\n\n\nconst CreatorCard: React.FC<CreatorCardProps> = (props) => {\n const {\n title,\n mimeType = 'application/octet-stream',\n thumbnail,\n source,\n detail,\n amountText,\n placeholderTitle = 'Attachment title',\n placeholderAmountText,\n paymentStatus,\n onDismiss,\n isPreview = false,\n } = props\n const sourceType = getSourceType(mimeType)\n const displayAmountText = amountText ?? placeholderAmountText\n const isPlaceholderAmount = !amountText && !!placeholderAmountText\n\n let mediaPreview: React.ReactNode\n if (isPreview && sourceType === 'audio') {\n mediaPreview = (\n <AudioPreview source={source} thumbnail={thumbnail} mimeType={mimeType} />\n )\n } else if (isPreview && sourceType === 'video') {\n mediaPreview = (\n <VideoPreview source={source} thumbnail={thumbnail} mimeType={mimeType} />\n )\n } else if (isPreview && sourceType === 'image') {\n mediaPreview = (\n <ImagePreview\n source={source}\n thumbnail={thumbnail}\n mimeType={mimeType}\n title={title}\n />\n )\n } else {\n const lockedOverlayIcon = onDismiss\n ? undefined\n : paymentStatus === 'paid'\n ? LockOpenIcon\n : LockIcon\n mediaPreview = (\n <CollapsedThumbnail\n thumbnail={thumbnail}\n mimeType={mimeType}\n overlayIcon={lockedOverlayIcon}\n darkOverlay\n />\n )\n }\n\n return (\n <div className=\"relative w-[280px] select-none overflow-hidden rounded-3xl bg-white shadow-card\">\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\"\n aria-label=\"Dismiss attachment\"\n >\n <XIcon className=\"size-4\" weight=\"bold\" />\n </button>\n )}\n {mediaPreview}\n <div className=\"px-4 pb-3 pt-3\">\n <p\n className={classNames('mb-1.5 truncate text-base font-medium', {\n 'text-black/30': !title,\n 'text-black': !!title,\n })}\n >\n {title || placeholderTitle}\n </p>\n <div className=\"flex items-center gap-1\">\n {renderTypeIcon(mimeType, {\n className: 'size-5 shrink-0 text-black/55',\n weight: 'regular',\n })}\n {detail && (\n <span className=\"text-xs font-medium text-black/55\">{detail}</span>\n )}\n {paymentStatus === 'paid' ? (\n <>\n <span className=\"text-xs font-medium text-black/55\">•</span>\n <span className=\"text-xs font-medium text-[#008236]\">\n Purchased\n </span>\n <CheckCircleIcon\n className=\"size-4 text-[#008236]\"\n weight=\"bold\"\n />\n </>\n ) : (\n displayAmountText && (\n <>\n <span\n className={classNames('text-xs font-medium', {\n 'text-black/30': isPlaceholderAmount,\n 'text-black/55': !isPlaceholderAmount,\n })}\n >\n •\n </span>\n <span\n className={classNames('text-xs font-medium', {\n 'text-black/30': isPlaceholderAmount,\n 'text-black/55': !isPlaceholderAmount,\n })}\n >\n {displayAmountText}\n </span>\n </>\n )\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default CreatorCard\n"],"names":["CloseButton","props","onClose","jsx","EyeIcon","CollapsedThumbnail","thumbnail","mimeType","OverlayIcon","darkOverlay","onClick","jsxs","classNames","AudioPreview","source","playing","setPlaying","useState","played","setPlayed","seeking","setSeeking","audioRef","useRef","trackRef","rafRef","useEffect","el","tick","audioReady","setAudioReady","getFraction","useCallback","e","track","clientX","_a","_b","rect","seekTo","fraction","onMove","f","onUp","toggle","p","PauseIcon","PlayIcon","VideoPreview","expanded","setExpanded","collapse","MediaPlayer","EyeSlashIcon","ImagePreview","title","CreatorCard","detail","amountText","placeholderTitle","placeholderAmountText","paymentStatus","onDismiss","isPreview","sourceType","getSourceType","displayAmountText","isPlaceholderAmount","mediaPreview","LockOpenIcon","LockIcon","XIcon","renderTypeIcon","Fragment","CheckCircleIcon"],"mappings":"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"}
|