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