@linktr.ee/messaging-react 1.28.0-rc-1776231821 → 1.28.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/{Creator-BFpHsh2u.js → Creator-VyMyIk2b.js} +126 -114
- 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 +640 -636
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/LockedAttachment/LockedAttachment.stories.tsx +24 -7
- package/src/components/LockedAttachment/components/Creator.tsx +25 -5
- package/src/components/LockedAttachment/components/MediaPlayer.tsx +10 -2
- package/src/components/LockedAttachment/components/Visitor.tsx +75 -33
- package/src/components/MessagingShell/index.tsx +4 -0
- package/dist/Creator-BFpHsh2u.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
1
|
import { jsxs as f, jsx as e, Fragment as j } from "react/jsx-runtime";
|
|
2
|
-
import { XIcon as
|
|
3
|
-
import
|
|
4
|
-
import { useState as
|
|
5
|
-
import { g as
|
|
6
|
-
const
|
|
7
|
-
const { onClose: n } =
|
|
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,22 +12,22 @@ const L = (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:
|
|
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
|
-
disabled: !
|
|
25
|
-
className:
|
|
24
|
+
disabled: !o,
|
|
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
|
-
{ "cursor-pointer": !!
|
|
27
|
+
{ "cursor-pointer": !!o, "cursor-default": !o }
|
|
28
28
|
),
|
|
29
|
-
onClick:
|
|
30
|
-
"aria-label":
|
|
29
|
+
onClick: o,
|
|
30
|
+
"aria-label": i ? "Toggle preview" : void 0,
|
|
31
31
|
children: [
|
|
32
32
|
n ? /* @__PURE__ */ e(
|
|
33
33
|
"img",
|
|
@@ -40,135 +40,139 @@ const L = (u) => {
|
|
|
40
40
|
className: "size-12 text-black/20",
|
|
41
41
|
weight: "regular"
|
|
42
42
|
}) }),
|
|
43
|
-
|
|
43
|
+
l && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute inset-0 bg-black/30" }),
|
|
44
|
+
i && /* @__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(i, { className: "size-4", weight: "fill" }) })
|
|
44
45
|
]
|
|
45
46
|
}
|
|
46
47
|
);
|
|
47
|
-
},
|
|
48
|
-
const { source: n, thumbnail: s, mimeType:
|
|
49
|
-
|
|
50
|
-
const t =
|
|
51
|
-
t && (l ? t.play().catch(() =>
|
|
52
|
-
}, [l]),
|
|
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
|
+
const t = p.current;
|
|
52
|
+
t && (l ? t.play().catch(() => o(!1)) : t.pause());
|
|
53
|
+
}, [l]), y(() => {
|
|
53
54
|
if (!l) {
|
|
54
55
|
m.current !== null && cancelAnimationFrame(m.current);
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
58
|
const t = () => {
|
|
58
|
-
const a =
|
|
59
|
-
a && a.duration && !
|
|
59
|
+
const a = p.current;
|
|
60
|
+
a && a.duration && !b && u(a.currentTime / a.duration), m.current = requestAnimationFrame(t);
|
|
60
61
|
};
|
|
61
62
|
return m.current = requestAnimationFrame(t), () => {
|
|
62
63
|
m.current !== null && cancelAnimationFrame(m.current);
|
|
63
64
|
};
|
|
64
|
-
}, [l,
|
|
65
|
-
|
|
65
|
+
}, [l, b]);
|
|
66
|
+
const [k, v] = g(!1);
|
|
67
|
+
y(() => {
|
|
68
|
+
o(!1), u(0), v(!1);
|
|
66
69
|
}, [n]);
|
|
67
|
-
const
|
|
70
|
+
const d = E(
|
|
68
71
|
(t) => {
|
|
69
|
-
var
|
|
70
|
-
const a =
|
|
72
|
+
var A, L;
|
|
73
|
+
const a = x.current;
|
|
71
74
|
if (!a) return 0;
|
|
72
|
-
const
|
|
73
|
-
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));
|
|
74
77
|
},
|
|
75
78
|
[]
|
|
76
|
-
),
|
|
77
|
-
const a =
|
|
79
|
+
), h = E((t) => {
|
|
80
|
+
const a = p.current;
|
|
78
81
|
a && a.duration && (a.currentTime = t * a.duration);
|
|
79
82
|
}, []);
|
|
80
|
-
|
|
81
|
-
if (!
|
|
82
|
-
const t = (
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
}, a = (
|
|
86
|
-
|
|
83
|
+
y(() => {
|
|
84
|
+
if (!b) return;
|
|
85
|
+
const t = (N) => {
|
|
86
|
+
const C = d(N);
|
|
87
|
+
u(C), h(C);
|
|
88
|
+
}, a = (N) => {
|
|
89
|
+
w(!1), h(d(N));
|
|
87
90
|
};
|
|
88
91
|
return window.addEventListener("mousemove", t), window.addEventListener("mouseup", a), window.addEventListener("touchmove", t, { passive: !0 }), window.addEventListener("touchend", a), () => {
|
|
89
92
|
window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", a), window.removeEventListener("touchmove", t), window.removeEventListener("touchend", a);
|
|
90
93
|
};
|
|
91
|
-
}, [
|
|
92
|
-
const
|
|
94
|
+
}, [b, d, h]);
|
|
95
|
+
const F = E(() => o((t) => !t), []);
|
|
93
96
|
return /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
94
97
|
n && /* @__PURE__ */ e(
|
|
95
98
|
"audio",
|
|
96
99
|
{
|
|
97
|
-
ref:
|
|
100
|
+
ref: p,
|
|
98
101
|
src: n,
|
|
99
102
|
loop: !0,
|
|
103
|
+
onCanPlay: () => v(!0),
|
|
100
104
|
onEnded: () => {
|
|
101
|
-
|
|
105
|
+
o(!1), u(0);
|
|
102
106
|
},
|
|
103
107
|
children: /* @__PURE__ */ e("track", { kind: "captions" })
|
|
104
108
|
}
|
|
105
109
|
),
|
|
106
110
|
/* @__PURE__ */ e(
|
|
107
|
-
|
|
111
|
+
I,
|
|
108
112
|
{
|
|
109
113
|
thumbnail: s,
|
|
110
|
-
mimeType:
|
|
111
|
-
overlayIcon: n ? l ?
|
|
112
|
-
onClick: n ?
|
|
114
|
+
mimeType: i,
|
|
115
|
+
overlayIcon: n && k ? l ? q : B : void 0,
|
|
116
|
+
onClick: n && k ? F : void 0
|
|
113
117
|
}
|
|
114
118
|
),
|
|
115
|
-
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(
|
|
116
120
|
"div",
|
|
117
121
|
{
|
|
118
|
-
ref:
|
|
122
|
+
ref: x,
|
|
119
123
|
role: "slider",
|
|
120
124
|
"aria-label": "Playback position",
|
|
121
|
-
"aria-valuenow": Math.round(
|
|
125
|
+
"aria-valuenow": Math.round(r * 100),
|
|
122
126
|
"aria-valuemin": 0,
|
|
123
127
|
"aria-valuemax": 100,
|
|
124
128
|
tabIndex: 0,
|
|
125
129
|
className: "relative flex h-4 w-full cursor-pointer items-center",
|
|
126
130
|
onMouseDown: (t) => {
|
|
127
|
-
t.stopPropagation(),
|
|
128
|
-
const a =
|
|
129
|
-
|
|
131
|
+
t.stopPropagation(), w(!0);
|
|
132
|
+
const a = d(t);
|
|
133
|
+
u(a), h(a);
|
|
130
134
|
},
|
|
131
135
|
onTouchStart: (t) => {
|
|
132
|
-
t.stopPropagation(),
|
|
133
|
-
const a =
|
|
134
|
-
|
|
136
|
+
t.stopPropagation(), w(!0);
|
|
137
|
+
const a = d(t);
|
|
138
|
+
u(a), h(a);
|
|
135
139
|
},
|
|
136
140
|
onClick: (t) => t.stopPropagation(),
|
|
137
141
|
onKeyDown: (t) => {
|
|
138
|
-
t.key === "ArrowRight" &&
|
|
142
|
+
t.key === "ArrowRight" && h(Math.min(1, r + 0.05)), t.key === "ArrowLeft" && h(Math.max(0, r - 0.05));
|
|
139
143
|
},
|
|
140
144
|
children: /* @__PURE__ */ e("div", { className: "w-full overflow-hidden rounded-full bg-white/30 h-1", children: /* @__PURE__ */ e(
|
|
141
145
|
"div",
|
|
142
146
|
{
|
|
143
147
|
className: "h-full rounded-full bg-white",
|
|
144
|
-
style: { width: `${Math.round(
|
|
148
|
+
style: { width: `${Math.round(r * 100)}%` }
|
|
145
149
|
}
|
|
146
150
|
) })
|
|
147
151
|
}
|
|
148
152
|
) })
|
|
149
153
|
] });
|
|
150
|
-
},
|
|
151
|
-
const { source: n, thumbnail: s, mimeType:
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
+
}, G = (c) => {
|
|
155
|
+
const { source: n, thumbnail: s, mimeType: i } = c, [l, o] = g(!1), r = () => o(!1);
|
|
156
|
+
return y(() => {
|
|
157
|
+
o(!1);
|
|
154
158
|
}, [n]), n ? /* @__PURE__ */ f(
|
|
155
159
|
"div",
|
|
156
160
|
{
|
|
157
|
-
className:
|
|
161
|
+
className: T("relative overflow-hidden", {
|
|
158
162
|
"aspect-video": !l
|
|
159
163
|
}),
|
|
160
164
|
children: [
|
|
161
165
|
/* @__PURE__ */ e(
|
|
162
|
-
|
|
166
|
+
V,
|
|
163
167
|
{
|
|
164
168
|
source: n,
|
|
165
|
-
mimeType:
|
|
169
|
+
mimeType: i,
|
|
166
170
|
poster: s,
|
|
167
171
|
playing: l,
|
|
168
172
|
loop: !0,
|
|
169
173
|
controls: !1,
|
|
170
174
|
showProgress: !0,
|
|
171
|
-
onContainerClick:
|
|
175
|
+
onContainerClick: r,
|
|
172
176
|
muted: !0
|
|
173
177
|
}
|
|
174
178
|
),
|
|
@@ -177,7 +181,7 @@ const L = (u) => {
|
|
|
177
181
|
{
|
|
178
182
|
type: "button",
|
|
179
183
|
className: "absolute inset-0 block cursor-pointer border-0 p-0 text-left appearance-none",
|
|
180
|
-
onClick: () =>
|
|
184
|
+
onClick: () => o(!0),
|
|
181
185
|
"aria-label": "Expand video preview",
|
|
182
186
|
children: [
|
|
183
187
|
s ? /* @__PURE__ */ e(
|
|
@@ -187,7 +191,7 @@ const L = (u) => {
|
|
|
187
191
|
alt: "",
|
|
188
192
|
className: "absolute inset-0 h-full w-full object-cover"
|
|
189
193
|
}
|
|
190
|
-
) : /* @__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(i, {
|
|
191
195
|
className: "size-12 text-black/20",
|
|
192
196
|
weight: "regular"
|
|
193
197
|
}) }),
|
|
@@ -195,79 +199,87 @@ const L = (u) => {
|
|
|
195
199
|
]
|
|
196
200
|
}
|
|
197
201
|
),
|
|
198
|
-
l && /* @__PURE__ */ e(
|
|
202
|
+
l && /* @__PURE__ */ e(R, { onClose: r })
|
|
199
203
|
]
|
|
200
204
|
}
|
|
201
|
-
) : /* @__PURE__ */ e(
|
|
202
|
-
},
|
|
203
|
-
const { source: n, thumbnail: s, mimeType:
|
|
204
|
-
return
|
|
205
|
-
|
|
206
|
-
}, [n]),
|
|
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(() => {
|
|
209
|
+
r(!1);
|
|
210
|
+
}, [n]), o && n ? /* @__PURE__ */ f("div", { className: "relative", children: [
|
|
207
211
|
/* @__PURE__ */ e(
|
|
208
212
|
"button",
|
|
209
213
|
{
|
|
210
214
|
type: "button",
|
|
211
215
|
className: "block w-full cursor-pointer border-0 p-0 text-left appearance-none",
|
|
212
|
-
onClick:
|
|
216
|
+
onClick: u,
|
|
213
217
|
"aria-label": "Close preview",
|
|
214
218
|
children: /* @__PURE__ */ e("img", { src: n, alt: l ?? "", className: "block w-full" })
|
|
215
219
|
}
|
|
216
220
|
),
|
|
217
|
-
/* @__PURE__ */ e(
|
|
221
|
+
/* @__PURE__ */ e(R, { onClose: u })
|
|
218
222
|
] }) : /* @__PURE__ */ e(
|
|
219
|
-
|
|
223
|
+
I,
|
|
220
224
|
{
|
|
221
225
|
thumbnail: s,
|
|
222
|
-
mimeType:
|
|
226
|
+
mimeType: i,
|
|
223
227
|
overlayIcon: n ? M : void 0,
|
|
224
|
-
onClick: n ? () =>
|
|
228
|
+
onClick: n ? () => r(!0) : void 0
|
|
225
229
|
}
|
|
226
230
|
);
|
|
227
|
-
},
|
|
231
|
+
}, _ = (c) => {
|
|
228
232
|
const {
|
|
229
233
|
title: n,
|
|
230
234
|
mimeType: s = "application/octet-stream",
|
|
231
|
-
thumbnail:
|
|
235
|
+
thumbnail: i,
|
|
232
236
|
source: l,
|
|
233
|
-
detail:
|
|
234
|
-
amountText:
|
|
235
|
-
placeholderTitle:
|
|
236
|
-
placeholderAmountText:
|
|
237
|
-
paymentStatus:
|
|
238
|
-
onDismiss:
|
|
239
|
-
isPreview:
|
|
240
|
-
} =
|
|
241
|
-
let
|
|
242
|
-
return
|
|
243
|
-
|
|
237
|
+
detail: o,
|
|
238
|
+
amountText: r,
|
|
239
|
+
placeholderTitle: u = "Attachment title",
|
|
240
|
+
placeholderAmountText: b,
|
|
241
|
+
paymentStatus: w,
|
|
242
|
+
onDismiss: p,
|
|
243
|
+
isPreview: x = !1
|
|
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,
|
|
244
248
|
{
|
|
245
249
|
source: l,
|
|
246
|
-
thumbnail:
|
|
250
|
+
thumbnail: i,
|
|
247
251
|
mimeType: s,
|
|
248
252
|
title: n
|
|
249
253
|
}
|
|
250
|
-
) :
|
|
251
|
-
|
|
254
|
+
) : d = /* @__PURE__ */ e(
|
|
255
|
+
I,
|
|
256
|
+
{
|
|
257
|
+
thumbnail: i,
|
|
258
|
+
mimeType: s,
|
|
259
|
+
overlayIcon: p ? void 0 : w === "paid" ? X : D,
|
|
260
|
+
darkOverlay: !0
|
|
261
|
+
}
|
|
262
|
+
), /* @__PURE__ */ f("div", { className: "relative w-[280px] select-none overflow-hidden rounded-3xl bg-white shadow-card", children: [
|
|
263
|
+
p && /* @__PURE__ */ e(
|
|
252
264
|
"button",
|
|
253
265
|
{
|
|
254
266
|
type: "button",
|
|
255
|
-
onClick:
|
|
267
|
+
onClick: p,
|
|
256
268
|
className: "absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
|
|
257
269
|
"aria-label": "Dismiss attachment",
|
|
258
|
-
children: /* @__PURE__ */ e(
|
|
270
|
+
children: /* @__PURE__ */ e(O, { className: "size-4", weight: "bold" })
|
|
259
271
|
}
|
|
260
272
|
),
|
|
261
|
-
|
|
273
|
+
d,
|
|
262
274
|
/* @__PURE__ */ f("div", { className: "px-4 pb-3 pt-3", children: [
|
|
263
275
|
/* @__PURE__ */ e(
|
|
264
276
|
"p",
|
|
265
277
|
{
|
|
266
|
-
className:
|
|
278
|
+
className: T("mb-1.5 truncate text-base font-medium", {
|
|
267
279
|
"text-black/30": !n,
|
|
268
280
|
"text-black": !!n
|
|
269
281
|
}),
|
|
270
|
-
children: n ||
|
|
282
|
+
children: n || u
|
|
271
283
|
}
|
|
272
284
|
),
|
|
273
285
|
/* @__PURE__ */ f("div", { className: "flex items-center gap-1", children: [
|
|
@@ -275,24 +287,24 @@ const L = (u) => {
|
|
|
275
287
|
className: "size-5 shrink-0 text-black/55",
|
|
276
288
|
weight: "regular"
|
|
277
289
|
}),
|
|
278
|
-
|
|
279
|
-
|
|
290
|
+
o && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: o }),
|
|
291
|
+
w === "paid" ? /* @__PURE__ */ f(j, { children: [
|
|
280
292
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
|
|
281
293
|
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-[#008236]", children: "Purchased" }),
|
|
282
294
|
/* @__PURE__ */ e(
|
|
283
|
-
|
|
295
|
+
S,
|
|
284
296
|
{
|
|
285
297
|
className: "size-4 text-[#008236]",
|
|
286
298
|
weight: "bold"
|
|
287
299
|
}
|
|
288
300
|
)
|
|
289
|
-
] }) :
|
|
301
|
+
] }) : k && /* @__PURE__ */ f(j, { children: [
|
|
290
302
|
/* @__PURE__ */ e(
|
|
291
303
|
"span",
|
|
292
304
|
{
|
|
293
|
-
className:
|
|
294
|
-
"text-black/30":
|
|
295
|
-
"text-black/55": !
|
|
305
|
+
className: T("text-xs font-medium", {
|
|
306
|
+
"text-black/30": v,
|
|
307
|
+
"text-black/55": !v
|
|
296
308
|
}),
|
|
297
309
|
children: "•"
|
|
298
310
|
}
|
|
@@ -300,11 +312,11 @@ const L = (u) => {
|
|
|
300
312
|
/* @__PURE__ */ e(
|
|
301
313
|
"span",
|
|
302
314
|
{
|
|
303
|
-
className:
|
|
304
|
-
"text-black/30":
|
|
305
|
-
"text-black/55": !
|
|
315
|
+
className: T("text-xs font-medium", {
|
|
316
|
+
"text-black/30": v,
|
|
317
|
+
"text-black/55": !v
|
|
306
318
|
}),
|
|
307
|
-
children:
|
|
319
|
+
children: k
|
|
308
320
|
}
|
|
309
321
|
)
|
|
310
322
|
] })
|
|
@@ -313,6 +325,6 @@ const L = (u) => {
|
|
|
313
325
|
] });
|
|
314
326
|
};
|
|
315
327
|
export {
|
|
316
|
-
|
|
328
|
+
_ as default
|
|
317
329
|
};
|
|
318
|
-
//# 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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"}
|