@linktr.ee/messaging-react 1.30.0 → 1.30.1-rc-1776660256
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-77XnrIxc.js → Creator-C8EwYYcW.js} +83 -83
- package/dist/Creator-C8EwYYcW.js.map +1 -0
- package/dist/{MediaPlayer-Bf-xPB8Z.js → MediaPlayer-dT6eJALR.js} +60 -62
- package/dist/MediaPlayer-dT6eJALR.js.map +1 -0
- package/dist/{Visitor-C9HSYm3D.js → Visitor-BACiehsg.js} +81 -78
- package/dist/Visitor-BACiehsg.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/CustomMessage/index.tsx +1 -1
- package/src/components/LockedAttachment/LockedAttachment.stories.tsx +41 -41
- package/src/components/LockedAttachment/components/Creator.tsx +41 -41
- package/src/components/LockedAttachment/components/MediaPlayer.tsx +3 -8
- package/src/components/LockedAttachment/components/Visitor.tsx +49 -39
- package/src/components/LockedAttachment/index.tsx +1 -1
- package/src/components/LockedAttachment/types.ts +2 -2
- package/src/types.ts +4 -1
- package/dist/Creator-77XnrIxc.js.map +0 -1
- package/dist/MediaPlayer-Bf-xPB8Z.js.map +0 -1
- package/dist/Visitor-C9HSYm3D.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsxs as f, jsx as e, Fragment as j } from "react/jsx-runtime";
|
|
2
|
-
import { XIcon as
|
|
2
|
+
import { XIcon as _, CheckCircleIcon as F, LockOpenIcon as O, LockIcon as S, PauseIcon as X, PlayIcon as D, EyeSlashIcon as M, EyeIcon as q } from "@phosphor-icons/react";
|
|
3
3
|
import T from "classnames";
|
|
4
|
-
import { useState as
|
|
5
|
-
import { g as
|
|
6
|
-
const
|
|
4
|
+
import { useState as k, useRef as P, useEffect as y, useCallback as E } from "react";
|
|
5
|
+
import { g as B, r as z, M as K } from "./MediaPlayer-dT6eJALR.js";
|
|
6
|
+
const U = (c) => {
|
|
7
7
|
const { onClose: n } = c;
|
|
8
8
|
return /* @__PURE__ */ e(
|
|
9
9
|
"button",
|
|
@@ -12,11 +12,11 @@ const R = (c) => {
|
|
|
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(q, { className: "size-4", weight: "fill" })
|
|
16
16
|
}
|
|
17
17
|
);
|
|
18
18
|
}, I = (c) => {
|
|
19
|
-
const {
|
|
19
|
+
const { thumbnailUrl: n, mimeType: s, overlayIcon: r, darkOverlay: a, onClick: o } = c;
|
|
20
20
|
return /* @__PURE__ */ f(
|
|
21
21
|
"button",
|
|
22
22
|
{
|
|
@@ -27,7 +27,7 @@ const R = (c) => {
|
|
|
27
27
|
{ "cursor-pointer": !!o, "cursor-default": !o }
|
|
28
28
|
),
|
|
29
29
|
onClick: o,
|
|
30
|
-
"aria-label":
|
|
30
|
+
"aria-label": r ? "Toggle preview" : void 0,
|
|
31
31
|
children: [
|
|
32
32
|
n ? /* @__PURE__ */ e(
|
|
33
33
|
"img",
|
|
@@ -40,59 +40,59 @@ const R = (c) => {
|
|
|
40
40
|
className: "size-12 text-black/20",
|
|
41
41
|
weight: "regular"
|
|
42
42
|
}) }),
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
a && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute inset-0 bg-black/30" }),
|
|
44
|
+
r && /* @__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(r, { className: "size-4", weight: "fill" }) })
|
|
45
45
|
]
|
|
46
46
|
}
|
|
47
47
|
);
|
|
48
|
-
},
|
|
49
|
-
const {
|
|
48
|
+
}, V = (c) => {
|
|
49
|
+
const { sourceUrl: n, thumbnailUrl: s, mimeType: r } = c, [a, o] = k(!1), [i, u] = k(0), [b, x] = k(!1), p = P(null), w = P(null), m = P(null);
|
|
50
50
|
y(() => {
|
|
51
51
|
const t = p.current;
|
|
52
|
-
t && (
|
|
53
|
-
}, [
|
|
54
|
-
if (!
|
|
52
|
+
t && (a ? t.play().catch(() => o(!1)) : t.pause());
|
|
53
|
+
}, [a]), y(() => {
|
|
54
|
+
if (!a) {
|
|
55
55
|
m.current !== null && cancelAnimationFrame(m.current);
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
const t = () => {
|
|
59
|
-
const
|
|
60
|
-
|
|
59
|
+
const l = p.current;
|
|
60
|
+
l && l.duration && !b && u(l.currentTime / l.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
|
-
}, [
|
|
66
|
-
const [
|
|
65
|
+
}, [a, b]);
|
|
66
|
+
const [g, v] = k(!1);
|
|
67
67
|
y(() => {
|
|
68
68
|
o(!1), u(0), v(!1);
|
|
69
69
|
}, [n]);
|
|
70
70
|
const d = E(
|
|
71
71
|
(t) => {
|
|
72
72
|
var A, L;
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
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 =
|
|
73
|
+
const l = w.current;
|
|
74
|
+
if (!l) return 0;
|
|
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 = l.getBoundingClientRect();
|
|
76
76
|
return Math.max(0, Math.min(1, (N - C.left) / C.width));
|
|
77
77
|
},
|
|
78
78
|
[]
|
|
79
79
|
), h = E((t) => {
|
|
80
|
-
const
|
|
81
|
-
|
|
80
|
+
const l = p.current;
|
|
81
|
+
l && l.duration && (l.currentTime = t * l.duration);
|
|
82
82
|
}, []);
|
|
83
83
|
y(() => {
|
|
84
84
|
if (!b) return;
|
|
85
85
|
const t = (N) => {
|
|
86
86
|
const C = d(N);
|
|
87
87
|
u(C), h(C);
|
|
88
|
-
},
|
|
89
|
-
|
|
88
|
+
}, l = (N) => {
|
|
89
|
+
x(!1), h(d(N));
|
|
90
90
|
};
|
|
91
|
-
return window.addEventListener("mousemove", t), window.addEventListener("mouseup",
|
|
92
|
-
window.removeEventListener("mousemove", t), window.removeEventListener("mouseup",
|
|
91
|
+
return window.addEventListener("mousemove", t), window.addEventListener("mouseup", l), window.addEventListener("touchmove", t, { passive: !0 }), window.addEventListener("touchend", l), () => {
|
|
92
|
+
window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", l), window.removeEventListener("touchmove", t), window.removeEventListener("touchend", l);
|
|
93
93
|
};
|
|
94
94
|
}, [b, d, h]);
|
|
95
|
-
const
|
|
95
|
+
const R = E(() => o((t) => !t), []);
|
|
96
96
|
return /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
97
97
|
n && /* @__PURE__ */ e(
|
|
98
98
|
"audio",
|
|
@@ -110,73 +110,73 @@ const R = (c) => {
|
|
|
110
110
|
/* @__PURE__ */ e(
|
|
111
111
|
I,
|
|
112
112
|
{
|
|
113
|
-
|
|
114
|
-
mimeType:
|
|
115
|
-
overlayIcon: n &&
|
|
116
|
-
onClick: n &&
|
|
113
|
+
thumbnailUrl: s,
|
|
114
|
+
mimeType: r,
|
|
115
|
+
overlayIcon: n && g ? a ? X : D : void 0,
|
|
116
|
+
onClick: n && g ? R : void 0
|
|
117
117
|
}
|
|
118
118
|
),
|
|
119
|
-
n &&
|
|
119
|
+
n && g && /* @__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(
|
|
120
120
|
"div",
|
|
121
121
|
{
|
|
122
|
-
ref:
|
|
122
|
+
ref: w,
|
|
123
123
|
role: "slider",
|
|
124
124
|
"aria-label": "Playback position",
|
|
125
|
-
"aria-valuenow": Math.round(
|
|
125
|
+
"aria-valuenow": Math.round(i * 100),
|
|
126
126
|
"aria-valuemin": 0,
|
|
127
127
|
"aria-valuemax": 100,
|
|
128
128
|
tabIndex: 0,
|
|
129
129
|
className: "relative flex h-4 w-full cursor-pointer items-center",
|
|
130
130
|
onMouseDown: (t) => {
|
|
131
|
-
t.stopPropagation(),
|
|
132
|
-
const
|
|
133
|
-
u(
|
|
131
|
+
t.stopPropagation(), x(!0);
|
|
132
|
+
const l = d(t);
|
|
133
|
+
u(l), h(l);
|
|
134
134
|
},
|
|
135
135
|
onTouchStart: (t) => {
|
|
136
|
-
t.stopPropagation(),
|
|
137
|
-
const
|
|
138
|
-
u(
|
|
136
|
+
t.stopPropagation(), x(!0);
|
|
137
|
+
const l = d(t);
|
|
138
|
+
u(l), h(l);
|
|
139
139
|
},
|
|
140
140
|
onClick: (t) => t.stopPropagation(),
|
|
141
141
|
onKeyDown: (t) => {
|
|
142
|
-
t.key === "ArrowRight" && h(Math.min(1,
|
|
142
|
+
t.key === "ArrowRight" && h(Math.min(1, i + 0.05)), t.key === "ArrowLeft" && h(Math.max(0, i - 0.05));
|
|
143
143
|
},
|
|
144
144
|
children: /* @__PURE__ */ e("div", { className: "w-full overflow-hidden rounded-full bg-white/30 h-1", children: /* @__PURE__ */ e(
|
|
145
145
|
"div",
|
|
146
146
|
{
|
|
147
147
|
className: "h-full rounded-full bg-white",
|
|
148
|
-
style: { width: `${Math.round(
|
|
148
|
+
style: { width: `${Math.round(i * 100)}%` }
|
|
149
149
|
}
|
|
150
150
|
) })
|
|
151
151
|
}
|
|
152
152
|
) })
|
|
153
153
|
] });
|
|
154
|
-
},
|
|
155
|
-
const {
|
|
154
|
+
}, $ = (c) => {
|
|
155
|
+
const { sourceUrl: n, thumbnailUrl: s, mimeType: r } = c, [a, o] = k(!1), i = () => o(!1);
|
|
156
156
|
return y(() => {
|
|
157
157
|
o(!1);
|
|
158
158
|
}, [n]), n ? /* @__PURE__ */ f(
|
|
159
159
|
"div",
|
|
160
160
|
{
|
|
161
161
|
className: T("relative overflow-hidden", {
|
|
162
|
-
"aspect-video": !
|
|
162
|
+
"aspect-video": !a
|
|
163
163
|
}),
|
|
164
164
|
children: [
|
|
165
165
|
/* @__PURE__ */ e(
|
|
166
|
-
|
|
166
|
+
K,
|
|
167
167
|
{
|
|
168
168
|
source: n,
|
|
169
|
-
mimeType:
|
|
169
|
+
mimeType: r,
|
|
170
170
|
poster: s,
|
|
171
|
-
playing:
|
|
171
|
+
playing: a,
|
|
172
172
|
loop: !0,
|
|
173
173
|
controls: !1,
|
|
174
174
|
showProgress: !0,
|
|
175
|
-
onContainerClick:
|
|
175
|
+
onContainerClick: i,
|
|
176
176
|
muted: !0
|
|
177
177
|
}
|
|
178
178
|
),
|
|
179
|
-
!
|
|
179
|
+
!a && /* @__PURE__ */ f(
|
|
180
180
|
"button",
|
|
181
181
|
{
|
|
182
182
|
type: "button",
|
|
@@ -191,7 +191,7 @@ const R = (c) => {
|
|
|
191
191
|
alt: "",
|
|
192
192
|
className: "absolute inset-0 h-full w-full object-cover"
|
|
193
193
|
}
|
|
194
|
-
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(
|
|
194
|
+
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(r, {
|
|
195
195
|
className: "size-12 text-black/20",
|
|
196
196
|
weight: "regular"
|
|
197
197
|
}) }),
|
|
@@ -199,14 +199,14 @@ const R = (c) => {
|
|
|
199
199
|
]
|
|
200
200
|
}
|
|
201
201
|
),
|
|
202
|
-
|
|
202
|
+
a && /* @__PURE__ */ e(U, { onClose: i })
|
|
203
203
|
]
|
|
204
204
|
}
|
|
205
|
-
) : /* @__PURE__ */ e(I, {
|
|
206
|
-
},
|
|
207
|
-
const {
|
|
205
|
+
) : /* @__PURE__ */ e(I, { thumbnailUrl: s, mimeType: r });
|
|
206
|
+
}, G = (c) => {
|
|
207
|
+
const { sourceUrl: n, thumbnailUrl: s, mimeType: r, title: a } = c, [o, i] = k(!1), u = () => i(!1);
|
|
208
208
|
return y(() => {
|
|
209
|
-
|
|
209
|
+
i(!1);
|
|
210
210
|
}, [n]), o && n ? /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
211
211
|
/* @__PURE__ */ e(
|
|
212
212
|
"button",
|
|
@@ -215,51 +215,51 @@ const R = (c) => {
|
|
|
215
215
|
className: "block w-full cursor-pointer border-0 p-0 text-left appearance-none",
|
|
216
216
|
onClick: u,
|
|
217
217
|
"aria-label": "Close preview",
|
|
218
|
-
children: /* @__PURE__ */ e("img", { src: n, alt:
|
|
218
|
+
children: /* @__PURE__ */ e("img", { src: n, alt: a ?? "", className: "block w-full" })
|
|
219
219
|
}
|
|
220
220
|
),
|
|
221
|
-
/* @__PURE__ */ e(
|
|
221
|
+
/* @__PURE__ */ e(U, { onClose: u })
|
|
222
222
|
] }) : /* @__PURE__ */ e(
|
|
223
223
|
I,
|
|
224
224
|
{
|
|
225
|
-
|
|
226
|
-
mimeType:
|
|
225
|
+
thumbnailUrl: s,
|
|
226
|
+
mimeType: r,
|
|
227
227
|
overlayIcon: n ? M : void 0,
|
|
228
|
-
onClick: n ? () =>
|
|
228
|
+
onClick: n ? () => i(!0) : void 0
|
|
229
229
|
}
|
|
230
230
|
);
|
|
231
|
-
},
|
|
231
|
+
}, Z = (c) => {
|
|
232
232
|
const {
|
|
233
233
|
title: n,
|
|
234
234
|
mimeType: s = "application/octet-stream",
|
|
235
|
-
|
|
236
|
-
|
|
235
|
+
thumbnailUrl: r,
|
|
236
|
+
sourceUrl: a,
|
|
237
237
|
detail: o,
|
|
238
|
-
amountText:
|
|
238
|
+
amountText: i,
|
|
239
239
|
placeholderTitle: u = "Attachment title",
|
|
240
240
|
placeholderAmountText: b,
|
|
241
|
-
paymentStatus:
|
|
241
|
+
paymentStatus: x,
|
|
242
242
|
onDismiss: p,
|
|
243
|
-
isPreview:
|
|
244
|
-
} = c, m =
|
|
243
|
+
isPreview: w = !1
|
|
244
|
+
} = c, m = B(s), g = i ?? b, v = !i && !!b;
|
|
245
245
|
let d;
|
|
246
|
-
return
|
|
247
|
-
|
|
246
|
+
return w && m === "audio" ? d = /* @__PURE__ */ e(V, { sourceUrl: a, thumbnailUrl: r, mimeType: s }) : w && m === "video" ? d = /* @__PURE__ */ e($, { sourceUrl: a, thumbnailUrl: r, mimeType: s }) : w && m === "image" ? d = /* @__PURE__ */ e(
|
|
247
|
+
G,
|
|
248
248
|
{
|
|
249
|
-
|
|
250
|
-
|
|
249
|
+
sourceUrl: a,
|
|
250
|
+
thumbnailUrl: r,
|
|
251
251
|
mimeType: s,
|
|
252
252
|
title: n
|
|
253
253
|
}
|
|
254
254
|
) : d = /* @__PURE__ */ e(
|
|
255
255
|
I,
|
|
256
256
|
{
|
|
257
|
-
|
|
257
|
+
thumbnailUrl: r,
|
|
258
258
|
mimeType: s,
|
|
259
|
-
overlayIcon: p ? void 0 :
|
|
259
|
+
overlayIcon: p ? void 0 : x === "paid" ? O : S,
|
|
260
260
|
darkOverlay: !0
|
|
261
261
|
}
|
|
262
|
-
), /* @__PURE__ */ f("div", { className: "relative w-[280px] select-none overflow-hidden rounded-[24px] bg-white shadow-
|
|
262
|
+
), /* @__PURE__ */ f("div", { className: "relative w-[280px] select-none overflow-hidden rounded-[24px] bg-white shadow-[0_0_0_1px_rgba(0,0,0,0.04),0_4px_8px_rgba(0,0,0,0.06)]", children: [
|
|
263
263
|
p && /* @__PURE__ */ e(
|
|
264
264
|
"button",
|
|
265
265
|
{
|
|
@@ -267,7 +267,7 @@ const R = (c) => {
|
|
|
267
267
|
onClick: p,
|
|
268
268
|
className: "absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
|
|
269
269
|
"aria-label": "Dismiss attachment",
|
|
270
|
-
children: /* @__PURE__ */ e(
|
|
270
|
+
children: /* @__PURE__ */ e(_, { className: "size-4", weight: "bold" })
|
|
271
271
|
}
|
|
272
272
|
),
|
|
273
273
|
d,
|
|
@@ -288,17 +288,17 @@ const R = (c) => {
|
|
|
288
288
|
weight: "regular"
|
|
289
289
|
}),
|
|
290
290
|
o && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: o }),
|
|
291
|
-
|
|
291
|
+
x === "paid" ? /* @__PURE__ */ f(j, { children: [
|
|
292
292
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
|
|
293
293
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-[#008236]", children: "Purchased" }),
|
|
294
294
|
/* @__PURE__ */ e(
|
|
295
|
-
|
|
295
|
+
F,
|
|
296
296
|
{
|
|
297
297
|
className: "size-4 text-[#008236]",
|
|
298
298
|
weight: "bold"
|
|
299
299
|
}
|
|
300
300
|
)
|
|
301
|
-
] }) :
|
|
301
|
+
] }) : g && /* @__PURE__ */ f(j, { children: [
|
|
302
302
|
/* @__PURE__ */ e(
|
|
303
303
|
"span",
|
|
304
304
|
{
|
|
@@ -316,7 +316,7 @@ const R = (c) => {
|
|
|
316
316
|
"text-black/30": v,
|
|
317
317
|
"text-black/55": !v
|
|
318
318
|
}),
|
|
319
|
-
children:
|
|
319
|
+
children: g
|
|
320
320
|
}
|
|
321
321
|
)
|
|
322
322
|
] })
|
|
@@ -325,6 +325,6 @@ const R = (c) => {
|
|
|
325
325
|
] });
|
|
326
326
|
};
|
|
327
327
|
export {
|
|
328
|
-
|
|
328
|
+
Z as default
|
|
329
329
|
};
|
|
330
|
-
//# sourceMappingURL=Creator-
|
|
330
|
+
//# sourceMappingURL=Creator-C8EwYYcW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Creator-C8EwYYcW.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 thumbnailUrl?: string\n mimeType: string\n overlayIcon?: React.ElementType\n darkOverlay?: boolean\n onClick?: () => void\n}\n\nconst CollapsedThumbnail: React.FC<CollapsedThumbnailProps> = (props) => {\n const { thumbnailUrl, 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 {thumbnailUrl ? (\n <img\n src={thumbnailUrl}\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 sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n}\n\nconst AudioPreview: React.FC<AudioPreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, 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 }, [sourceUrl])\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 {sourceUrl && (\n <audio\n ref={audioRef}\n src={sourceUrl}\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 thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n overlayIcon={sourceUrl && audioReady ? (playing ? PauseIcon : PlayIcon) : undefined}\n onClick={sourceUrl && audioReady ? toggle : undefined}\n />\n {sourceUrl && 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 sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n}\n\nconst VideoPreview: React.FC<VideoPreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, mimeType } = props\n const [expanded, setExpanded] = useState(false)\n const collapse = () => setExpanded(false)\n\n useEffect(() => {\n setExpanded(false)\n }, [sourceUrl])\n\n if (!sourceUrl) {\n return <CollapsedThumbnail thumbnailUrl={thumbnailUrl} mimeType={mimeType} />\n }\n\n return (\n <div\n className={classNames('relative overflow-hidden', {\n 'aspect-video': !expanded,\n })}\n >\n <MediaPlayer\n source={sourceUrl}\n mimeType={mimeType}\n poster={thumbnailUrl}\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 {thumbnailUrl ? (\n <img\n src={thumbnailUrl}\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 sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n title?: string\n}\n\nconst ImagePreview: React.FC<ImagePreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, mimeType, title } = props\n const [expanded, setExpanded] = useState(false)\n const collapse = () => setExpanded(false)\n\n useEffect(() => {\n setExpanded(false)\n }, [sourceUrl])\n\n if (expanded && sourceUrl) {\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={sourceUrl} alt={title ?? ''} className=\"block w-full\" />\n </button>\n <CloseButton onClose={collapse} />\n </div>\n )\n }\n\n return (\n <CollapsedThumbnail\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n overlayIcon={sourceUrl ? EyeSlashIcon : undefined}\n onClick={sourceUrl ? () => setExpanded(true) : undefined}\n />\n )\n}\n\n\nconst CreatorCard: React.FC<CreatorCardProps> = (props) => {\n const {\n title,\n mimeType = 'application/octet-stream',\n thumbnailUrl,\n sourceUrl,\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 sourceUrl={sourceUrl} thumbnailUrl={thumbnailUrl} mimeType={mimeType} />\n )\n } else if (isPreview && sourceType === 'video') {\n mediaPreview = (\n <VideoPreview sourceUrl={sourceUrl} thumbnailUrl={thumbnailUrl} mimeType={mimeType} />\n )\n } else if (isPreview && sourceType === 'image') {\n mediaPreview = (\n <ImagePreview\n sourceUrl={sourceUrl}\n thumbnailUrl={thumbnailUrl}\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 thumbnailUrl={thumbnailUrl}\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-[24px] bg-white shadow-[0_0_0_1px_rgba(0,0,0,0.04),0_4px_8px_rgba(0,0,0,0.06)]\">\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","thumbnailUrl","mimeType","OverlayIcon","darkOverlay","onClick","jsxs","classNames","AudioPreview","sourceUrl","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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"}
|