@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.
@@ -1,9 +1,9 @@
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) => {
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(K, { className: "size-4", weight: "fill" })
15
+ children: /* @__PURE__ */ e(q, { className: "size-4", weight: "fill" })
16
16
  }
17
17
  );
18
- }, I = (c) => {
19
- const { thumbnail: n, mimeType: s, overlayIcon: i, darkOverlay: l, onClick: o } = c;
20
- return /* @__PURE__ */ f(
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: !o,
25
- className: T(
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": !!o, "cursor-default": !o }
27
+ { "cursor-pointer": !!r, "cursor-default": !r }
28
28
  ),
29
- onClick: o,
30
- "aria-label": i ? "Toggle preview" : void 0,
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(s, {
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
- i && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white", children: /* @__PURE__ */ e(i, { className: "size-4", weight: "fill" }) })
44
+ 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
- }, $ = (c) => {
49
- const { source: n, thumbnail: s, mimeType: i } = c, [l, o] = g(!1), [r, u] = g(0), [b, w] = g(!1), p = P(null), x = P(null), m = P(null);
50
- y(() => {
51
- const t = p.current;
52
- t && (l ? t.play().catch(() => o(!1)) : t.pause());
53
- }, [l]), y(() => {
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
- m.current !== null && cancelAnimationFrame(m.current);
55
+ d.current !== null && cancelAnimationFrame(d.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 a = f.current;
60
+ a && a.duration && !b && h(a.currentTime / a.duration), d.current = requestAnimationFrame(t);
61
61
  };
62
- return m.current = requestAnimationFrame(t), () => {
63
- m.current !== null && cancelAnimationFrame(m.current);
62
+ return d.current = requestAnimationFrame(t), () => {
63
+ d.current !== null && cancelAnimationFrame(d.current);
64
64
  };
65
65
  }, [l, b]);
66
- const [k, v] = g(!1);
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 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));
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
- ), h = E((t) => {
80
- const a = p.current;
75
+ ), p = E((t) => {
76
+ const a = f.current;
81
77
  a && a.duration && (a.currentTime = t * a.duration);
82
78
  }, []);
83
- y(() => {
79
+ P(() => {
84
80
  if (!b) return;
85
- const t = (N) => {
86
- const C = d(N);
87
- u(C), h(C);
88
- }, a = (N) => {
89
- w(!1), h(d(N));
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, d, h]);
95
- const F = E(() => o((t) => !t), []);
96
- return /* @__PURE__ */ f("div", { className: "relative", children: [
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: p,
96
+ ref: f,
101
97
  src: n,
102
98
  loop: !0,
103
- onCanPlay: () => v(!0),
99
+ onCanPlay: () => g(!0),
104
100
  onEnded: () => {
105
- o(!1), u(0);
101
+ r(!1), h(0);
106
102
  },
107
103
  children: /* @__PURE__ */ e("track", { kind: "captions" })
108
104
  }
109
105
  ),
110
106
  /* @__PURE__ */ e(
111
- I,
107
+ T,
112
108
  {
113
- thumbnail: s,
114
- mimeType: i,
115
- overlayIcon: n && k ? l ? q : B : void 0,
116
- onClick: n && k ? F : void 0
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 && 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(
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(r * 100),
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(), w(!0);
132
- const a = d(t);
133
- u(a), h(a);
127
+ t.stopPropagation(), v(!0);
128
+ const a = u(t);
129
+ h(a), p(a);
134
130
  },
135
131
  onTouchStart: (t) => {
136
- t.stopPropagation(), w(!0);
137
- const a = d(t);
138
- u(a), h(a);
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" && h(Math.min(1, r + 0.05)), t.key === "ArrowLeft" && h(Math.max(0, r - 0.05));
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(r * 100)}%` }
144
+ style: { width: `${Math.round(i * 100)}%` }
149
145
  }
150
146
  ) })
151
147
  }
152
148
  ) })
153
149
  ] });
154
- }, G = (c) => {
155
- const { source: n, thumbnail: s, mimeType: i } = c, [l, o] = g(!1), r = () => o(!1);
156
- return y(() => {
157
- o(!1);
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: T("relative overflow-hidden", {
155
+ className: C("relative overflow-hidden", {
162
156
  "aspect-video": !l
163
157
  }),
164
158
  children: [
165
159
  /* @__PURE__ */ e(
166
- V,
160
+ K,
167
161
  {
168
162
  source: n,
169
- mimeType: i,
170
- poster: s,
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: r,
176
- muted: !0
170
+ onContainerClick: i
177
171
  }
178
172
  ),
179
- !l && /* @__PURE__ */ f(
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: () => o(!0),
178
+ onClick: () => r(!0),
185
179
  "aria-label": "Expand video preview",
186
180
  children: [
187
- s ? /* @__PURE__ */ e(
181
+ o ? /* @__PURE__ */ e(
188
182
  "img",
189
183
  {
190
- src: s,
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(i, {
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(R, { onClose: r })
196
+ l && /* @__PURE__ */ e(U, { onClose: i })
203
197
  ]
204
198
  }
205
- ) : /* @__PURE__ */ e(I, { thumbnail: s, mimeType: i });
206
- }, H = (c) => {
207
- const { source: n, thumbnail: s, mimeType: i, title: l } = c, [o, r] = g(!1), u = () => r(!1);
208
- return y(() => {
209
- r(!1);
210
- }, [n]), o && n ? /* @__PURE__ */ f("div", { className: "relative", children: [
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: u,
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(R, { onClose: u })
213
+ /* @__PURE__ */ e(U, { onClose: () => i(!1) })
222
214
  ] }) : /* @__PURE__ */ e(
223
- I,
215
+ T,
224
216
  {
225
- thumbnail: s,
226
- mimeType: i,
217
+ thumbnailUrl: o,
218
+ mimeType: s,
227
219
  overlayIcon: n ? M : void 0,
228
- onClick: n ? () => r(!0) : void 0
220
+ onClick: n ? () => i(!0) : void 0
229
221
  }
230
222
  );
231
- }, _ = (c) => {
223
+ }, Z = (c) => {
232
224
  const {
233
225
  title: n,
234
- mimeType: s = "application/octet-stream",
235
- thumbnail: i,
236
- source: l,
237
- detail: o,
238
- amountText: r,
239
- placeholderTitle: u = "Attachment title",
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: w,
242
- onDismiss: p,
233
+ paymentStatus: v,
234
+ onDismiss: f,
243
235
  isPreview: x = !1
244
- } = c, m = U(s), k = r ?? b, v = !r && !!b;
245
- let d;
246
- return x && m === "audio" ? d = /* @__PURE__ */ e($, { source: l, thumbnail: i, mimeType: s }) : x && m === "video" ? d = /* @__PURE__ */ e(G, { source: l, thumbnail: i, mimeType: s }) : x && m === "image" ? d = /* @__PURE__ */ e(
247
- H,
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
- source: l,
250
- thumbnail: i,
251
- mimeType: s,
241
+ sourceUrl: l,
242
+ thumbnailUrl: s,
243
+ mimeType: o,
252
244
  title: n
253
- }
254
- ) : d = /* @__PURE__ */ e(
255
- I,
245
+ },
246
+ l
247
+ ) : u = /* @__PURE__ */ e(
248
+ T,
256
249
  {
257
- thumbnail: i,
258
- mimeType: s,
259
- overlayIcon: p ? void 0 : w === "paid" ? X : D,
250
+ thumbnailUrl: s,
251
+ mimeType: o,
252
+ overlayIcon: f ? void 0 : v === "paid" ? O : S,
260
253
  darkOverlay: !0
261
254
  }
262
- ), /* @__PURE__ */ f("div", { className: "relative w-[280px] select-none overflow-hidden rounded-[24px] bg-white shadow-card", children: [
263
- p && /* @__PURE__ */ e(
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: p,
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(O, { className: "size-4", weight: "bold" })
263
+ children: /* @__PURE__ */ e(_, { className: "size-4", weight: "bold" })
271
264
  }
272
265
  ),
273
- d,
274
- /* @__PURE__ */ f("div", { className: "px-4 pb-3 pt-3", children: [
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: T("mb-1.5 truncate text-base font-medium", {
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 || u
275
+ children: n || h
283
276
  }
284
277
  ),
285
- /* @__PURE__ */ f("div", { className: "flex items-center gap-1", children: [
286
- z(s, {
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
- o && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: o }),
291
- w === "paid" ? /* @__PURE__ */ f(j, { children: [
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
- S,
288
+ F,
296
289
  {
297
290
  className: "size-4 text-[#008236]",
298
291
  weight: "bold"
299
292
  }
300
293
  )
301
- ] }) : k && /* @__PURE__ */ f(j, { children: [
294
+ ] }) : w && /* @__PURE__ */ m(j, { children: [
302
295
  /* @__PURE__ */ e(
303
296
  "span",
304
297
  {
305
- className: T("text-xs font-medium", {
306
- "text-black/30": v,
307
- "text-black/55": !v
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: T("text-xs font-medium", {
316
- "text-black/30": v,
317
- "text-black/55": !v
308
+ className: C("text-xs font-medium", {
309
+ "text-black/30": g,
310
+ "text-black/55": !g
318
311
  }),
319
- children: k
312
+ children: w
320
313
  }
321
314
  )
322
315
  ] })
@@ -325,6 +318,6 @@ const R = (c) => {
325
318
  ] });
326
319
  };
327
320
  export {
328
- _ as default
321
+ Z as default
329
322
  };
330
- //# sourceMappingURL=Creator-77XnrIxc.js.map
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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"}