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