@linktr.ee/messaging-react 1.30.0 → 1.30.1-rc-1776660256

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