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