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