@linktr.ee/messaging-react 1.31.0-rc-1776677746 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/{Creator-DGe3CQ_j.js → Card-C5t3dZ5q.js} +177 -150
  2. package/dist/Card-C5t3dZ5q.js.map +1 -0
  3. package/dist/Card-Cn2va-Qr.js +205 -0
  4. package/dist/Card-Cn2va-Qr.js.map +1 -0
  5. package/dist/index.d.ts +35 -30
  6. package/dist/index.js +951 -956
  7. package/dist/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/components/ChannelView.tsx +24 -36
  10. package/src/components/CustomMessage/CustomMessage.stories.tsx +1 -14
  11. package/src/components/CustomMessage/context.tsx +20 -0
  12. package/src/components/CustomMessage/index.tsx +39 -28
  13. package/src/components/LockedAttachment/LockedAttachment.stories.tsx +8 -13
  14. package/src/components/LockedAttachment/components/Creator/Card.tsx +159 -0
  15. package/src/components/LockedAttachment/components/Creator/CardAudioPreview.tsx +161 -0
  16. package/src/components/LockedAttachment/components/Creator/CardCollapsedThumbnail.tsx +58 -0
  17. package/src/components/LockedAttachment/components/Creator/CardImagePreview.tsx +56 -0
  18. package/src/components/LockedAttachment/components/Creator/CardVideoPreview.tsx +91 -0
  19. package/src/components/LockedAttachment/components/Creator/index.tsx +2 -0
  20. package/src/components/LockedAttachment/components/Visitor/Card.tsx +186 -0
  21. package/src/components/LockedAttachment/components/Visitor/CardActions.tsx +71 -0
  22. package/src/components/LockedAttachment/components/Visitor/CardImagePreview.tsx +39 -0
  23. package/src/components/LockedAttachment/components/Visitor/CardMediaPreview.tsx +36 -0
  24. package/src/components/LockedAttachment/components/Visitor/CardThumbnailPreview.tsx +45 -0
  25. package/src/components/LockedAttachment/components/Visitor/index.ts +2 -0
  26. package/src/components/LockedAttachment/index.tsx +16 -23
  27. package/src/components/LockedAttachment/types.ts +14 -1
  28. package/src/components/MessagingShell/index.tsx +0 -6
  29. package/src/index.ts +4 -1
  30. package/src/types.ts +0 -21
  31. package/dist/Creator-DGe3CQ_j.js.map +0 -1
  32. package/dist/Visitor-DyJTWB2_.js +0 -204
  33. package/dist/Visitor-DyJTWB2_.js.map +0 -1
  34. package/src/components/LockedAttachment/components/Creator.tsx +0 -470
  35. package/src/components/LockedAttachment/components/Visitor.tsx +0 -356
@@ -1,121 +1,112 @@
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";
1
+ import { jsxs as m, jsx as e, Fragment as L } from "react/jsx-runtime";
2
+ import { PauseIcon as _, PlayIcon as F, EyeSlashIcon as M, EyeIcon as R, XIcon as S, CheckCircleIcon as X, LockOpenIcon as D, LockIcon as B } from "@phosphor-icons/react";
3
3
  import C from "classnames";
4
- import { 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
- const { onClose: n } = c;
8
- return /* @__PURE__ */ e(
9
- "button",
10
- {
11
- type: "button",
12
- onClick: n,
13
- className: "absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
14
- "aria-label": "Close preview",
15
- children: /* @__PURE__ */ e(q, { className: "size-4", weight: "fill" })
16
- }
17
- );
18
- }, T = (c) => {
19
- const { thumbnailUrl: n, mimeType: o, overlayIcon: s, darkOverlay: l, onClick: r } = c;
20
- return /* @__PURE__ */ m(
21
- "button",
22
- {
23
- type: "button",
24
- disabled: !r,
25
- className: C(
26
- "relative aspect-video block w-full overflow-hidden border-0 bg-black/5 p-0 text-left appearance-none",
27
- { "cursor-pointer": !!r, "cursor-default": !r }
28
- ),
29
- onClick: r,
30
- "aria-label": s ? "Toggle preview" : void 0,
31
- children: [
32
- n ? /* @__PURE__ */ e(
33
- "img",
34
- {
35
- src: n,
36
- alt: "",
37
- className: "absolute inset-0 h-full w-full object-cover"
38
- }
39
- ) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(o, {
40
- className: "size-12 text-black/20",
41
- weight: "regular"
42
- }) }),
43
- l && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute inset-0 bg-black/30" }),
44
- s && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white", children: /* @__PURE__ */ e(s, { className: "size-4", weight: "fill" }) })
45
- ]
46
- }
47
- );
48
- }, V = (c) => {
49
- const { sourceUrl: n, thumbnailUrl: o, mimeType: s } = c, [l, r] = k(!1), [i, h] = k(0), [b, v] = k(!1), f = I(null), x = I(null), d = I(null);
50
- P(() => {
4
+ import { r as I, M as q, g as O } from "./MediaPlayer-BCsdmsON.js";
5
+ import { useState as k, useRef as T, useEffect as z, useCallback as E } from "react";
6
+ const P = ({
7
+ thumbnailUrl: o,
8
+ mimeType: a,
9
+ overlayIcon: s,
10
+ darkOverlay: r,
11
+ onClick: n
12
+ }) => /* @__PURE__ */ m(
13
+ "button",
14
+ {
15
+ type: "button",
16
+ disabled: !n,
17
+ className: C(
18
+ "relative aspect-video block w-full overflow-hidden border-0 bg-black/5 p-0 text-left appearance-none",
19
+ { "cursor-pointer": !!n, "cursor-default": !n }
20
+ ),
21
+ onClick: n,
22
+ "aria-label": s ? "Toggle preview" : void 0,
23
+ children: [
24
+ o ? /* @__PURE__ */ e(
25
+ "img",
26
+ {
27
+ src: o,
28
+ alt: "",
29
+ className: "absolute inset-0 h-full w-full object-cover"
30
+ }
31
+ ) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: I(a, {
32
+ className: "size-12 text-black/20",
33
+ weight: "regular"
34
+ }) }),
35
+ r && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute inset-0 bg-black/30" }),
36
+ s && /* @__PURE__ */ e("div", { className: "pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white", children: /* @__PURE__ */ e(s, { className: "size-4", weight: "fill" }) })
37
+ ]
38
+ }
39
+ ), $ = (o) => {
40
+ const { sourceUrl: a, thumbnailUrl: s, mimeType: r } = o, [n, c] = k(!1), [i, h] = k(0), [b, v] = k(!1), f = T(null), w = T(null), d = T(null);
41
+ z(() => {
51
42
  const t = f.current;
52
- t && (l ? t.play().catch(() => r(!1)) : t.pause());
53
- }, [l]), P(() => {
54
- if (!l) {
43
+ t && (n ? t.play().catch(() => c(!1)) : t.pause());
44
+ }, [n]), z(() => {
45
+ if (!n) {
55
46
  d.current !== null && cancelAnimationFrame(d.current);
56
47
  return;
57
48
  }
58
49
  const t = () => {
59
- const a = f.current;
60
- a && a.duration && !b && h(a.currentTime / a.duration), d.current = requestAnimationFrame(t);
50
+ const l = f.current;
51
+ l && l.duration && !b && h(l.currentTime / l.duration), d.current = requestAnimationFrame(t);
61
52
  };
62
53
  return d.current = requestAnimationFrame(t), () => {
63
54
  d.current !== null && cancelAnimationFrame(d.current);
64
55
  };
65
- }, [l, b]);
66
- const [w, g] = k(!1), u = E(
56
+ }, [n, b]);
57
+ const [x, g] = k(!1), u = E(
67
58
  (t) => {
68
- var A, L;
69
- const a = x.current;
70
- if (!a) return 0;
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();
59
+ var A, j;
60
+ const l = w.current;
61
+ if (!l) return 0;
62
+ const y = "touches" in t ? ((A = t.touches[0]) == null ? void 0 : A.clientX) ?? ((j = t.changedTouches[0]) == null ? void 0 : j.clientX) ?? 0 : t.clientX, N = l.getBoundingClientRect();
72
63
  return Math.max(0, Math.min(1, (y - N.left) / N.width));
73
64
  },
74
65
  []
75
66
  ), p = E((t) => {
76
- const a = f.current;
77
- a && a.duration && (a.currentTime = t * a.duration);
67
+ const l = f.current;
68
+ l && l.duration && (l.currentTime = t * l.duration);
78
69
  }, []);
79
- P(() => {
70
+ z(() => {
80
71
  if (!b) return;
81
72
  const t = (y) => {
82
73
  const N = u(y);
83
74
  h(N), p(N);
84
- }, a = (y) => {
75
+ }, l = (y) => {
85
76
  v(!1), p(u(y));
86
77
  };
87
- return window.addEventListener("mousemove", t), window.addEventListener("mouseup", a), window.addEventListener("touchmove", t, { passive: !0 }), window.addEventListener("touchend", a), () => {
88
- window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", a), window.removeEventListener("touchmove", t), window.removeEventListener("touchend", a);
78
+ return window.addEventListener("mousemove", t), window.addEventListener("mouseup", l), window.addEventListener("touchmove", t, { passive: !0 }), window.addEventListener("touchend", l), () => {
79
+ window.removeEventListener("mousemove", t), window.removeEventListener("mouseup", l), window.removeEventListener("touchmove", t), window.removeEventListener("touchend", l);
89
80
  };
90
81
  }, [b, u, p]);
91
- const R = E(() => r((t) => !t), []);
82
+ const U = E(() => c((t) => !t), []);
92
83
  return /* @__PURE__ */ m("div", { className: "relative", children: [
93
- n && /* @__PURE__ */ e(
84
+ a && /* @__PURE__ */ e(
94
85
  "audio",
95
86
  {
96
87
  ref: f,
97
- src: n,
88
+ src: a,
98
89
  loop: !0,
99
90
  onCanPlay: () => g(!0),
100
91
  onEnded: () => {
101
- r(!1), h(0);
92
+ c(!1), h(0);
102
93
  },
103
94
  children: /* @__PURE__ */ e("track", { kind: "captions" })
104
95
  }
105
96
  ),
106
97
  /* @__PURE__ */ e(
107
- T,
98
+ P,
108
99
  {
109
- thumbnailUrl: o,
110
- mimeType: s,
111
- overlayIcon: n && w ? l ? X : D : void 0,
112
- onClick: n && w ? R : void 0
100
+ thumbnailUrl: s,
101
+ mimeType: r,
102
+ overlayIcon: a && x ? n ? _ : F : void 0,
103
+ onClick: a && x ? U : void 0
113
104
  }
114
105
  ),
115
- 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(
106
+ a && x && /* @__PURE__ */ e("div", { className: "absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent", children: /* @__PURE__ */ e(
116
107
  "div",
117
108
  {
118
- ref: x,
109
+ ref: w,
119
110
  role: "slider",
120
111
  "aria-label": "Playback position",
121
112
  "aria-valuenow": Math.round(i * 100),
@@ -125,13 +116,13 @@ const U = (c) => {
125
116
  className: "relative flex h-4 w-full cursor-pointer items-center",
126
117
  onMouseDown: (t) => {
127
118
  t.stopPropagation(), v(!0);
128
- const a = u(t);
129
- h(a), p(a);
119
+ const l = u(t);
120
+ h(l), p(l);
130
121
  },
131
122
  onTouchStart: (t) => {
132
123
  t.stopPropagation(), v(!0);
133
- const a = u(t);
134
- h(a), p(a);
124
+ const l = u(t);
125
+ h(l), p(l);
135
126
  },
136
127
  onClick: (t) => t.stopPropagation(),
137
128
  onKeyDown: (t) => {
@@ -147,22 +138,56 @@ const U = (c) => {
147
138
  }
148
139
  ) })
149
140
  ] });
150
- }, $ = (c) => {
151
- const { sourceUrl: n, thumbnailUrl: o, mimeType: s } = c, [l, r] = k(!1), i = () => r(!1);
152
- return n ? /* @__PURE__ */ m(
141
+ }, K = (o) => {
142
+ const { sourceUrl: a, thumbnailUrl: s, mimeType: r, title: n } = o, [c, i] = k(!1);
143
+ return c && a ? /* @__PURE__ */ m("div", { className: "relative", children: [
144
+ /* @__PURE__ */ e(
145
+ "button",
146
+ {
147
+ type: "button",
148
+ className: "block w-full cursor-pointer border-0 p-0 text-left appearance-none",
149
+ onClick: () => i(!1),
150
+ "aria-label": "Close preview",
151
+ children: /* @__PURE__ */ e("img", { src: a, alt: n ?? "", className: "block w-full" })
152
+ }
153
+ ),
154
+ /* @__PURE__ */ e(V, { onClose: () => i(!1) })
155
+ ] }) : /* @__PURE__ */ e(
156
+ P,
157
+ {
158
+ thumbnailUrl: s,
159
+ mimeType: r,
160
+ overlayIcon: a ? M : void 0,
161
+ onClick: a ? () => i(!0) : void 0
162
+ }
163
+ );
164
+ }, V = ({ onClose: o }) => /* @__PURE__ */ e(
165
+ "button",
166
+ {
167
+ type: "button",
168
+ onClick: o,
169
+ className: "absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
170
+ "aria-label": "Close preview",
171
+ children: /* @__PURE__ */ e(R, { className: "size-4", weight: "fill" })
172
+ }
173
+ ), G = (o) => {
174
+ const { sourceUrl: a, thumbnailUrl: s, mimeType: r } = o, [n, c] = k(!1), i = () => {
175
+ c(!1);
176
+ };
177
+ return a ? /* @__PURE__ */ m(
153
178
  "div",
154
179
  {
155
180
  className: C("relative overflow-hidden", {
156
- "aspect-video": !l
181
+ "aspect-video": !n
157
182
  }),
158
183
  children: [
159
184
  /* @__PURE__ */ e(
160
- K,
185
+ q,
161
186
  {
162
- source: n,
163
- mimeType: s,
164
- poster: o,
165
- playing: l,
187
+ source: a,
188
+ mimeType: r,
189
+ poster: s,
190
+ playing: n,
166
191
  loop: !0,
167
192
  controls: !1,
168
193
  muted: !0,
@@ -170,22 +195,22 @@ const U = (c) => {
170
195
  onContainerClick: i
171
196
  }
172
197
  ),
173
- !l && /* @__PURE__ */ m(
198
+ !n && /* @__PURE__ */ m(
174
199
  "button",
175
200
  {
176
201
  type: "button",
177
202
  className: "absolute inset-0 block cursor-pointer border-0 p-0 text-left appearance-none",
178
- onClick: () => r(!0),
203
+ onClick: () => c(!0),
179
204
  "aria-label": "Expand video preview",
180
205
  children: [
181
- o ? /* @__PURE__ */ e(
206
+ s ? /* @__PURE__ */ e(
182
207
  "img",
183
208
  {
184
- src: o,
209
+ src: s,
185
210
  alt: "",
186
211
  className: "absolute inset-0 h-full w-full object-cover"
187
212
  }
188
- ) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(s, {
213
+ ) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: I(r, {
189
214
  className: "size-12 text-black/20",
190
215
  weight: "regular"
191
216
  }) }),
@@ -193,63 +218,65 @@ const U = (c) => {
193
218
  ]
194
219
  }
195
220
  ),
196
- l && /* @__PURE__ */ e(U, { onClose: i })
221
+ n && /* @__PURE__ */ e(H, { onClose: i })
197
222
  ]
198
223
  }
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: [
203
- /* @__PURE__ */ e(
204
- "button",
205
- {
206
- type: "button",
207
- className: "block w-full cursor-pointer border-0 p-0 text-left appearance-none",
208
- onClick: () => i(!1),
209
- "aria-label": "Close preview",
210
- children: /* @__PURE__ */ e("img", { src: n, alt: l ?? "", className: "block w-full" })
211
- }
212
- ),
213
- /* @__PURE__ */ e(U, { onClose: () => i(!1) })
214
- ] }) : /* @__PURE__ */ e(
215
- T,
216
- {
217
- thumbnailUrl: o,
218
- mimeType: s,
219
- overlayIcon: n ? M : void 0,
220
- onClick: n ? () => i(!0) : void 0
221
- }
222
- );
223
- }, Z = (c) => {
224
+ ) : /* @__PURE__ */ e(P, { thumbnailUrl: s, mimeType: r });
225
+ }, H = ({ onClose: o }) => /* @__PURE__ */ e(
226
+ "button",
227
+ {
228
+ type: "button",
229
+ onClick: o,
230
+ className: "absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
231
+ "aria-label": "Close preview",
232
+ children: /* @__PURE__ */ e(R, { className: "size-4", weight: "fill" })
233
+ }
234
+ ), ee = (o) => {
224
235
  const {
225
- title: n,
226
- mimeType: o = "application/octet-stream",
227
- thumbnailUrl: s,
228
- sourceUrl: l,
229
- detail: r,
236
+ title: a,
237
+ mimeType: s = "application/octet-stream",
238
+ thumbnailUrl: r,
239
+ sourceUrl: n,
240
+ detail: c,
230
241
  amountText: i,
231
242
  placeholderTitle: h = "Attachment title",
232
243
  placeholderAmountText: b,
233
244
  paymentStatus: v,
234
245
  onDismiss: f,
235
- isPreview: x = !1
236
- } = c, d = B(o), w = i ?? b, g = !i && !!b;
246
+ isPreview: w = !1
247
+ } = o, d = O(s), x = i ?? b, g = !i && !!b;
237
248
  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(
249
+ return w && d === "audio" ? u = /* @__PURE__ */ e(
250
+ $,
251
+ {
252
+ sourceUrl: n,
253
+ thumbnailUrl: r,
254
+ mimeType: s
255
+ },
256
+ n
257
+ ) : w && d === "video" ? u = /* @__PURE__ */ e(
239
258
  G,
240
259
  {
241
- sourceUrl: l,
242
- thumbnailUrl: s,
243
- mimeType: o,
244
- title: n
260
+ sourceUrl: n,
261
+ thumbnailUrl: r,
262
+ mimeType: s
263
+ },
264
+ n
265
+ ) : w && d === "image" ? u = /* @__PURE__ */ e(
266
+ K,
267
+ {
268
+ sourceUrl: n,
269
+ thumbnailUrl: r,
270
+ mimeType: s,
271
+ title: a
245
272
  },
246
- l
273
+ n
247
274
  ) : u = /* @__PURE__ */ e(
248
- T,
275
+ P,
249
276
  {
250
- thumbnailUrl: s,
251
- mimeType: o,
252
- overlayIcon: f ? void 0 : v === "paid" ? O : S,
277
+ thumbnailUrl: r,
278
+ mimeType: s,
279
+ overlayIcon: f ? void 0 : v === "paid" ? D : B,
253
280
  darkOverlay: !0
254
281
  }
255
282
  ), /* @__PURE__ */ m("div", { className: "relative w-[280px] select-none overflow-hidden rounded-[24px] bg-white shadow-[0_0_0_1px_rgba(0,0,0,0.04),0_4px_8px_rgba(0,0,0,0.06)]", children: [
@@ -260,7 +287,7 @@ const U = (c) => {
260
287
  onClick: f,
261
288
  className: "absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white",
262
289
  "aria-label": "Dismiss attachment",
263
- children: /* @__PURE__ */ e(_, { className: "size-4", weight: "bold" })
290
+ children: /* @__PURE__ */ e(S, { className: "size-4", weight: "bold" })
264
291
  }
265
292
  ),
266
293
  u,
@@ -269,29 +296,29 @@ const U = (c) => {
269
296
  "p",
270
297
  {
271
298
  className: C("mb-1.5 truncate text-base font-medium", {
272
- "text-black/30": !n,
273
- "text-black": !!n
299
+ "text-black/30": !a,
300
+ "text-black": !!a
274
301
  }),
275
- children: n || h
302
+ children: a || h
276
303
  }
277
304
  ),
278
305
  /* @__PURE__ */ m("div", { className: "flex items-center gap-1", children: [
279
- z(o, {
306
+ I(s, {
280
307
  className: "size-5 shrink-0 text-black/55",
281
308
  weight: "regular"
282
309
  }),
283
- r && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: r }),
284
- v === "paid" ? /* @__PURE__ */ m(j, { children: [
310
+ c && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: c }),
311
+ v === "paid" ? /* @__PURE__ */ m(L, { children: [
285
312
  /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
286
313
  /* @__PURE__ */ e("span", { className: "text-xs font-medium text-[#008236]", children: "Purchased" }),
287
314
  /* @__PURE__ */ e(
288
- F,
315
+ X,
289
316
  {
290
317
  className: "size-4 text-[#008236]",
291
318
  weight: "bold"
292
319
  }
293
320
  )
294
- ] }) : w && /* @__PURE__ */ m(j, { children: [
321
+ ] }) : x && /* @__PURE__ */ m(L, { children: [
295
322
  /* @__PURE__ */ e(
296
323
  "span",
297
324
  {
@@ -309,7 +336,7 @@ const U = (c) => {
309
336
  "text-black/30": g,
310
337
  "text-black/55": !g
311
338
  }),
312
- children: w
339
+ children: x
313
340
  }
314
341
  )
315
342
  ] })
@@ -318,6 +345,6 @@ const U = (c) => {
318
345
  ] });
319
346
  };
320
347
  export {
321
- Z as default
348
+ ee as default
322
349
  };
323
- //# sourceMappingURL=Creator-DGe3CQ_j.js.map
350
+ //# sourceMappingURL=Card-C5t3dZ5q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-C5t3dZ5q.js","sources":["../src/components/LockedAttachment/components/Creator/CardCollapsedThumbnail.tsx","../src/components/LockedAttachment/components/Creator/CardAudioPreview.tsx","../src/components/LockedAttachment/components/Creator/CardImagePreview.tsx","../src/components/LockedAttachment/components/Creator/CardVideoPreview.tsx","../src/components/LockedAttachment/components/Creator/Card.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport React from 'react'\n\nimport { renderTypeIcon } from '../../utils/icons'\n\ninterface CollapsedThumbnailProps {\n thumbnailUrl?: string\n mimeType: string\n overlayIcon?: React.ElementType\n darkOverlay?: boolean\n onClick?: () => void\n}\n\nconst CollapsedThumbnail: React.FC<CollapsedThumbnailProps> = ({\n thumbnailUrl,\n mimeType,\n overlayIcon: OverlayIcon,\n darkOverlay,\n onClick,\n}) => {\n return (\n <button\n type=\"button\"\n disabled={!onClick}\n className={classNames(\n 'relative aspect-video block w-full overflow-hidden border-0 bg-black/5 p-0 text-left appearance-none',\n { 'cursor-pointer': !!onClick, 'cursor-default': !onClick }\n )}\n onClick={onClick}\n aria-label={OverlayIcon ? 'Toggle preview' : undefined}\n >\n {thumbnailUrl ? (\n <img\n src={thumbnailUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, {\n className: 'size-12 text-black/20',\n weight: 'regular',\n })}\n </div>\n )}\n {darkOverlay && (\n <div className=\"pointer-events-none absolute inset-0 bg-black/30\" />\n )}\n {OverlayIcon && (\n <div className=\"pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\">\n <OverlayIcon className=\"size-4\" weight=\"fill\" />\n </div>\n )}\n </button>\n )\n}\n\nexport default CollapsedThumbnail\n","import { PauseIcon, PlayIcon } from '@phosphor-icons/react'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport CollapsedThumbnail from './CardCollapsedThumbnail'\n\ninterface AudioPreviewProps {\n sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n}\n\nconst AudioPreview: React.FC<AudioPreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, mimeType } = props\n const [playing, setPlaying] = useState(false)\n const [played, setPlayed] = useState(0)\n const [seeking, setSeeking] = useState(false)\n const audioRef = useRef<HTMLAudioElement>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n const rafRef = useRef<number | null>(null)\n\n useEffect(() => {\n const el = audioRef.current\n if (!el) return\n if (playing) {\n void el.play().catch(() => setPlaying(false))\n } else {\n el.pause()\n }\n }, [playing])\n\n useEffect(() => {\n if (!playing) {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n return\n }\n const tick = () => {\n const el = audioRef.current\n if (el && el.duration && !seeking) setPlayed(el.currentTime / el.duration)\n rafRef.current = requestAnimationFrame(tick)\n }\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [playing, seeking])\n\n const [audioReady, setAudioReady] = useState(false)\n\n const getFraction = useCallback(\n (e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n const track = trackRef.current\n if (!track) return 0\n const clientX =\n 'touches' in e\n ? (e.touches[0]?.clientX ?? e.changedTouches[0]?.clientX ?? 0)\n : e.clientX\n const rect = track.getBoundingClientRect()\n return Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n },\n []\n )\n\n const seekTo = useCallback((fraction: number) => {\n const el = audioRef.current\n if (el && el.duration) el.currentTime = fraction * el.duration\n }, [])\n\n useEffect(() => {\n if (!seeking) return\n const onMove = (e: MouseEvent | TouchEvent) => {\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }\n const onUp = (e: MouseEvent | TouchEvent) => {\n setSeeking(false)\n seekTo(getFraction(e))\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n window.addEventListener('touchmove', onMove, { passive: true })\n window.addEventListener('touchend', onUp)\n return () => {\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('mouseup', onUp)\n window.removeEventListener('touchmove', onMove)\n window.removeEventListener('touchend', onUp)\n }\n }, [seeking, getFraction, seekTo])\n\n const toggle = useCallback(() => setPlaying((p) => !p), [])\n\n return (\n <div className=\"relative\">\n {sourceUrl && (\n <audio\n ref={audioRef}\n src={sourceUrl}\n loop\n onCanPlay={() => setAudioReady(true)}\n onEnded={() => {\n setPlaying(false)\n setPlayed(0)\n }}\n >\n <track kind=\"captions\" />\n </audio>\n )}\n <CollapsedThumbnail\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n overlayIcon={\n sourceUrl && audioReady ? (playing ? PauseIcon : PlayIcon) : undefined\n }\n onClick={sourceUrl && audioReady ? toggle : undefined}\n />\n {sourceUrl && audioReady && (\n <div className=\"absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent\">\n <div\n ref={trackRef}\n role=\"slider\"\n aria-label=\"Playback position\"\n aria-valuenow={Math.round(played * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={0}\n className=\"relative flex h-4 w-full cursor-pointer items-center\"\n onMouseDown={(e) => {\n e.stopPropagation()\n setSeeking(true)\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }}\n onTouchStart={(e) => {\n e.stopPropagation()\n setSeeking(true)\n const f = getFraction(e)\n setPlayed(f)\n seekTo(f)\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') seekTo(Math.min(1, played + 0.05))\n if (e.key === 'ArrowLeft') seekTo(Math.max(0, played - 0.05))\n }}\n >\n <div className=\"w-full overflow-hidden rounded-full bg-white/30 h-1\">\n <div\n className=\"h-full rounded-full bg-white\"\n style={{ width: `${Math.round(played * 100)}%` }}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default AudioPreview\n","import { EyeIcon, EyeSlashIcon } from '@phosphor-icons/react'\nimport { useState } from 'react'\n\nimport CollapsedThumbnail from './CardCollapsedThumbnail'\n\ninterface ImagePreviewProps {\n sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n title?: string\n}\n\nconst ImagePreview: React.FC<ImagePreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, mimeType, title } = props\n const [expanded, setExpanded] = useState(false)\n\n if (expanded && sourceUrl) {\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n className=\"block w-full cursor-pointer border-0 p-0 text-left appearance-none\"\n onClick={() => setExpanded(false)}\n aria-label=\"Close preview\"\n >\n <img src={sourceUrl} alt={title ?? ''} className=\"block w-full\" />\n </button>\n <CloseButton onClose={() => setExpanded(false)} />\n </div>\n )\n }\n\n return (\n <CollapsedThumbnail\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n overlayIcon={sourceUrl ? EyeSlashIcon : undefined}\n onClick={sourceUrl ? () => setExpanded(true) : undefined}\n />\n )\n}\n\nconst CloseButton: React.FC<{ onClose: () => void }> = ({ onClose }) => {\n return (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\"\n aria-label=\"Close preview\"\n >\n <EyeIcon className=\"size-4\" weight=\"fill\" />\n </button>\n )\n}\n\nexport default ImagePreview\n","import { EyeIcon, EyeSlashIcon } from '@phosphor-icons/react'\nimport classNames from 'classnames'\nimport React, { useState } from 'react'\n\nimport { renderTypeIcon } from '../../utils/icons'\nimport MediaPlayer from '../MediaPlayer'\n\nimport CollapsedThumbnail from './CardCollapsedThumbnail'\n\ninterface VideoPreviewProps {\n sourceUrl?: string\n thumbnailUrl?: string\n mimeType: string\n}\n\nconst VideoPreview: React.FC<VideoPreviewProps> = (props) => {\n const { sourceUrl, thumbnailUrl, mimeType } = props\n const [expanded, setExpanded] = useState(false)\n\n const collapse = () => {\n setExpanded(false)\n }\n\n if (!sourceUrl) {\n return (\n <CollapsedThumbnail thumbnailUrl={thumbnailUrl} mimeType={mimeType} />\n )\n }\n\n return (\n <div\n className={classNames('relative overflow-hidden', {\n 'aspect-video': !expanded,\n })}\n >\n <MediaPlayer\n source={sourceUrl}\n mimeType={mimeType}\n poster={thumbnailUrl}\n playing={expanded}\n loop={true}\n controls={false}\n muted={true}\n showProgress={true}\n onContainerClick={collapse}\n />\n {!expanded && (\n <button\n type=\"button\"\n className=\"absolute inset-0 block cursor-pointer border-0 p-0 text-left appearance-none\"\n onClick={() => setExpanded(true)}\n aria-label=\"Expand video preview\"\n >\n {thumbnailUrl ? (\n <img\n src={thumbnailUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, {\n className: 'size-12 text-black/20',\n weight: 'regular',\n })}\n </div>\n )}\n <div className=\"pointer-events-none absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\">\n <EyeSlashIcon className=\"size-4\" weight=\"fill\" />\n </div>\n </button>\n )}\n {expanded && <CloseButton onClose={collapse} />}\n </div>\n )\n}\n\nconst CloseButton: React.FC<{ onClose: () => void }> = ({ onClose }) => {\n return (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"absolute left-3 top-3 z-40 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\"\n aria-label=\"Close preview\"\n >\n <EyeIcon className=\"size-4\" weight=\"fill\" />\n </button>\n )\n}\n\nexport default VideoPreview\n","import {\n CheckCircleIcon,\n LockIcon,\n LockOpenIcon,\n XIcon,\n} from '@phosphor-icons/react'\nimport classNames from 'classnames'\nimport React from 'react'\n\nimport type { LockedAttachmentBaseProps } from '../../types'\nimport { renderTypeIcon } from '../../utils/icons'\nimport { getSourceType } from '../../utils/mimeType'\n\nimport AudioPreview from './CardAudioPreview'\nimport CollapsedThumbnail from './CardCollapsedThumbnail'\nimport ImagePreview from './CardImagePreview'\nimport VideoPreview from './CardVideoPreview'\n\nexport interface CreatorCardProps extends LockedAttachmentBaseProps {\n isPreview?: boolean\n placeholderTitle?: string\n placeholderAmountText?: string\n sourceUrl?: string\n onDismiss?: () => void\n}\n\nconst CreatorCard: React.FC<CreatorCardProps> = (props) => {\n const {\n title,\n mimeType = 'application/octet-stream',\n thumbnailUrl,\n sourceUrl,\n detail,\n amountText,\n placeholderTitle = 'Attachment title',\n placeholderAmountText,\n paymentStatus,\n onDismiss,\n isPreview = false,\n } = props\n const sourceType = getSourceType(mimeType)\n const displayAmountText = amountText ?? placeholderAmountText\n const isPlaceholderAmount = !amountText && !!placeholderAmountText\n\n let mediaPreview: React.ReactNode\n if (isPreview && sourceType === 'audio') {\n mediaPreview = (\n <AudioPreview\n key={sourceUrl}\n sourceUrl={sourceUrl}\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n />\n )\n } else if (isPreview && sourceType === 'video') {\n mediaPreview = (\n <VideoPreview\n key={sourceUrl}\n sourceUrl={sourceUrl}\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n />\n )\n } else if (isPreview && sourceType === 'image') {\n mediaPreview = (\n <ImagePreview\n key={sourceUrl}\n sourceUrl={sourceUrl}\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n title={title}\n />\n )\n } else {\n const lockedOverlayIcon = onDismiss\n ? undefined\n : paymentStatus === 'paid'\n ? LockOpenIcon\n : LockIcon\n mediaPreview = (\n <CollapsedThumbnail\n thumbnailUrl={thumbnailUrl}\n mimeType={mimeType}\n overlayIcon={lockedOverlayIcon}\n darkOverlay\n />\n )\n }\n\n return (\n <div className=\"relative w-[280px] select-none overflow-hidden rounded-[24px] bg-white shadow-[0_0_0_1px_rgba(0,0,0,0.04),0_4px_8px_rgba(0,0,0,0.06)]\">\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className=\"absolute right-3 top-3 z-50 flex size-8 items-center justify-center rounded-full bg-black/60 text-white\"\n aria-label=\"Dismiss attachment\"\n >\n <XIcon className=\"size-4\" weight=\"bold\" />\n </button>\n )}\n {mediaPreview}\n <div className=\"px-4 pb-3 pt-3\">\n <p\n className={classNames('mb-1.5 truncate text-base font-medium', {\n 'text-black/30': !title,\n 'text-black': !!title,\n })}\n >\n {title || placeholderTitle}\n </p>\n <div className=\"flex items-center gap-1\">\n {renderTypeIcon(mimeType, {\n className: 'size-5 shrink-0 text-black/55',\n weight: 'regular',\n })}\n {detail && (\n <span className=\"text-xs font-medium text-black/55\">{detail}</span>\n )}\n {paymentStatus === 'paid' ? (\n <>\n <span className=\"text-xs font-medium text-black/55\">•</span>\n <span className=\"text-xs font-medium text-[#008236]\">\n Purchased\n </span>\n <CheckCircleIcon\n className=\"size-4 text-[#008236]\"\n weight=\"bold\"\n />\n </>\n ) : (\n displayAmountText && (\n <>\n <span\n className={classNames('text-xs font-medium', {\n 'text-black/30': isPlaceholderAmount,\n 'text-black/55': !isPlaceholderAmount,\n })}\n >\n •\n </span>\n <span\n className={classNames('text-xs font-medium', {\n 'text-black/30': isPlaceholderAmount,\n 'text-black/55': !isPlaceholderAmount,\n })}\n >\n {displayAmountText}\n </span>\n </>\n )\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default CreatorCard\n"],"names":["CollapsedThumbnail","thumbnailUrl","mimeType","OverlayIcon","darkOverlay","onClick","jsxs","classNames","jsx","AudioPreview","props","sourceUrl","playing","setPlaying","useState","played","setPlayed","seeking","setSeeking","audioRef","useRef","trackRef","rafRef","useEffect","el","tick","audioReady","setAudioReady","getFraction","useCallback","e","track","clientX","_a","_b","rect","seekTo","fraction","onMove","f","onUp","toggle","p","PauseIcon","PlayIcon","ImagePreview","title","expanded","setExpanded","CloseButton","EyeSlashIcon","onClose","EyeIcon","VideoPreview","collapse","MediaPlayer","CreatorCard","detail","amountText","placeholderTitle","placeholderAmountText","paymentStatus","onDismiss","isPreview","sourceType","getSourceType","displayAmountText","isPlaceholderAmount","mediaPreview","LockOpenIcon","LockIcon","XIcon","renderTypeIcon","Fragment","CheckCircleIcon"],"mappings":";;;;;AAaA,MAAMA,IAAwD,CAAC;AAAA,EAC7D,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAaC;AAAA,EACb,aAAAC;AAAA,EACA,SAAAC;AACF,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,UAAU,CAACD;AAAA,IACX,WAAWE;AAAA,MACT;AAAA,MACA,EAAE,kBAAkB,CAAC,CAACF,GAAS,kBAAkB,CAACA,EAAA;AAAA,IAAQ;AAAA,IAE5D,SAAAA;AAAA,IACA,cAAYF,IAAc,mBAAmB;AAAA,IAE5C,UAAA;AAAA,MAAAF,IACC,gBAAAO;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKP;AAAA,UACL,KAAI;AAAA,UACJ,WAAU;AAAA,QAAA;AAAA,MAAA,IAGZ,gBAAAO,EAAC,OAAA,EAAI,WAAU,qDACZ,YAAeN,GAAU;AAAA,QACxB,WAAW;AAAA,QACX,QAAQ;AAAA,MAAA,CACT,GACH;AAAA,MAEDE,KACC,gBAAAI,EAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,MAEnEL,KACC,gBAAAK,EAAC,OAAA,EAAI,WAAU,yHACb,UAAA,gBAAAA,EAACL,GAAA,EAAY,WAAU,UAAS,QAAO,OAAA,CAAO,EAAA,CAChD;AAAA,IAAA;AAAA,EAAA;AAAA,GCxCFM,IAA4C,CAACC,MAAU;AAC3D,QAAM,EAAE,WAAAC,GAAW,cAAAV,GAAc,UAAAC,EAAA,IAAaQ,GACxC,CAACE,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAQC,CAAS,IAAIF,EAAS,CAAC,GAChC,CAACG,GAASC,CAAU,IAAIJ,EAAS,EAAK,GACtCK,IAAWC,EAAyB,IAAI,GACxCC,IAAWD,EAAuB,IAAI,GACtCE,IAASF,EAAsB,IAAI;AAEzC,EAAAG,EAAU,MAAM;AACd,UAAMC,IAAKL,EAAS;AACpB,IAAKK,MACDZ,IACGY,EAAG,KAAA,EAAO,MAAM,MAAMX,EAAW,EAAK,CAAC,IAE5CW,EAAG,MAAA;AAAA,EAEP,GAAG,CAACZ,CAAO,CAAC,GAEZW,EAAU,MAAM;AACd,QAAI,CAACX,GAAS;AACZ,MAAIU,EAAO,YAAY,QAAM,qBAAqBA,EAAO,OAAO;AAChE;AAAA,IACF;AACA,UAAMG,IAAO,MAAM;AACjB,YAAMD,IAAKL,EAAS;AACpB,MAAIK,KAAMA,EAAG,YAAY,CAACP,KAASD,EAAUQ,EAAG,cAAcA,EAAG,QAAQ,GACzEF,EAAO,UAAU,sBAAsBG,CAAI;AAAA,IAC7C;AACA,WAAAH,EAAO,UAAU,sBAAsBG,CAAI,GACpC,MAAM;AACX,MAAIH,EAAO,YAAY,QAAM,qBAAqBA,EAAO,OAAO;AAAA,IAClE;AAAA,EACF,GAAG,CAACV,GAASK,CAAO,CAAC;AAErB,QAAM,CAACS,GAAYC,CAAa,IAAIb,EAAS,EAAK,GAE5Cc,IAAcC;AAAA,IAClB,CAACC,MAAqE;;AACpE,YAAMC,IAAQV,EAAS;AACvB,UAAI,CAACU,EAAO,QAAO;AACnB,YAAMC,IACJ,aAAaF,MACRG,IAAAH,EAAE,QAAQ,CAAC,MAAX,gBAAAG,EAAc,cAAWC,IAAAJ,EAAE,eAAe,CAAC,MAAlB,gBAAAI,EAAqB,YAAW,IAC1DJ,EAAE,SACFK,IAAOJ,EAAM,sBAAA;AACnB,aAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAIC,IAAUG,EAAK,QAAQA,EAAK,KAAK,CAAC;AAAA,IACpE;AAAA,IACA,CAAA;AAAA,EAAC,GAGGC,IAASP,EAAY,CAACQ,MAAqB;AAC/C,UAAMb,IAAKL,EAAS;AACpB,IAAIK,KAAMA,EAAG,aAAUA,EAAG,cAAca,IAAWb,EAAG;AAAA,EACxD,GAAG,CAAA,CAAE;AAEL,EAAAD,EAAU,MAAM;AACd,QAAI,CAACN,EAAS;AACd,UAAMqB,IAAS,CAACR,MAA+B;AAC7C,YAAMS,IAAIX,EAAYE,CAAC;AACvB,MAAAd,EAAUuB,CAAC,GACXH,EAAOG,CAAC;AAAA,IACV,GACMC,IAAO,CAACV,MAA+B;AAC3C,MAAAZ,EAAW,EAAK,GAChBkB,EAAOR,EAAYE,CAAC,CAAC;AAAA,IACvB;AACA,kBAAO,iBAAiB,aAAaQ,CAAM,GAC3C,OAAO,iBAAiB,WAAWE,CAAI,GACvC,OAAO,iBAAiB,aAAaF,GAAQ,EAAE,SAAS,IAAM,GAC9D,OAAO,iBAAiB,YAAYE,CAAI,GACjC,MAAM;AACX,aAAO,oBAAoB,aAAaF,CAAM,GAC9C,OAAO,oBAAoB,WAAWE,CAAI,GAC1C,OAAO,oBAAoB,aAAaF,CAAM,GAC9C,OAAO,oBAAoB,YAAYE,CAAI;AAAA,IAC7C;AAAA,EACF,GAAG,CAACvB,GAASW,GAAaQ,CAAM,CAAC;AAEjC,QAAMK,IAASZ,EAAY,MAAMhB,EAAW,CAAC6B,MAAM,CAACA,CAAC,GAAG,EAAE;AAE1D,SACE,gBAAApC,EAAC,OAAA,EAAI,WAAU,YACZ,UAAA;AAAA,IAAAK,KACC,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKW;AAAA,QACL,KAAKR;AAAA,QACL,MAAI;AAAA,QACJ,WAAW,MAAMgB,EAAc,EAAI;AAAA,QACnC,SAAS,MAAM;AACb,UAAAd,EAAW,EAAK,GAChBG,EAAU,CAAC;AAAA,QACb;AAAA,QAEA,UAAA,gBAAAR,EAAC,SAAA,EAAM,MAAK,WAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAG3B,gBAAAA;AAAA,MAACR;AAAA,MAAA;AAAA,QACC,cAAAC;AAAA,QACA,UAAAC;AAAA,QACA,aACES,KAAae,IAAcd,IAAU+B,IAAYC,IAAY;AAAA,QAE/D,SAASjC,KAAae,IAAae,IAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAE7C9B,KAAae,KACZ,gBAAAlB,EAAC,OAAA,EAAI,WAAU,8FACb,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKa;AAAA,QACL,MAAK;AAAA,QACL,cAAW;AAAA,QACX,iBAAe,KAAK,MAAMN,IAAS,GAAG;AAAA,QACtC,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,UAAU;AAAA,QACV,WAAU;AAAA,QACV,aAAa,CAACe,MAAM;AAClB,UAAAA,EAAE,gBAAA,GACFZ,EAAW,EAAI;AACf,gBAAMqB,IAAIX,EAAYE,CAAC;AACvB,UAAAd,EAAUuB,CAAC,GACXH,EAAOG,CAAC;AAAA,QACV;AAAA,QACA,cAAc,CAACT,MAAM;AACnB,UAAAA,EAAE,gBAAA,GACFZ,EAAW,EAAI;AACf,gBAAMqB,IAAIX,EAAYE,CAAC;AACvB,UAAAd,EAAUuB,CAAC,GACXH,EAAOG,CAAC;AAAA,QACV;AAAA,QACA,SAAS,CAACT,MAAMA,EAAE,gBAAA;AAAA,QAClB,WAAW,CAACA,MAAM;AAChB,UAAIA,EAAE,QAAQ,gBAAcM,EAAO,KAAK,IAAI,GAAGrB,IAAS,IAAI,CAAC,GACzDe,EAAE,QAAQ,eAAaM,EAAO,KAAK,IAAI,GAAGrB,IAAS,IAAI,CAAC;AAAA,QAC9D;AAAA,QAEA,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,uDACb,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAO,GAAG,KAAK,MAAMO,IAAS,GAAG,CAAC,IAAA;AAAA,UAAI;AAAA,QAAA,EACjD,CACF;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GAEJ;AAEJ,GClJM8B,IAA4C,CAACnC,MAAU;AAC3D,QAAM,EAAE,WAAAC,GAAW,cAAAV,GAAc,UAAAC,GAAU,OAAA4C,MAAUpC,GAC/C,CAACqC,GAAUC,CAAW,IAAIlC,EAAS,EAAK;AAE9C,SAAIiC,KAAYpC,IAEZ,gBAAAL,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAMwC,EAAY,EAAK;AAAA,QAChC,cAAW;AAAA,QAEX,UAAA,gBAAAxC,EAAC,SAAI,KAAKG,GAAW,KAAKmC,KAAS,IAAI,WAAU,eAAA,CAAe;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEjEG,GAAA,EAAY,SAAS,MAAMD,EAAY,EAAK,EAAA,CAAG;AAAA,EAAA,GAClD,IAKF,gBAAAxC;AAAA,IAACR;AAAA,IAAA;AAAA,MACC,cAAAC;AAAA,MACA,UAAAC;AAAA,MACA,aAAaS,IAAYuC,IAAe;AAAA,MACxC,SAASvC,IAAY,MAAMqC,EAAY,EAAI,IAAI;AAAA,IAAA;AAAA,EAAA;AAGrD,GAEMC,IAAiD,CAAC,EAAE,SAAAE,QAEtD,gBAAA3C;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS2C;AAAA,IACT,WAAU;AAAA,IACV,cAAW;AAAA,IAEX,UAAA,gBAAA3C,EAAC4C,GAAA,EAAQ,WAAU,UAAS,QAAO,OAAA,CAAO;AAAA,EAAA;AAAA,GCnC1CC,IAA4C,CAAC3C,MAAU;AAC3D,QAAM,EAAE,WAAAC,GAAW,cAAAV,GAAc,UAAAC,EAAA,IAAaQ,GACxC,CAACqC,GAAUC,CAAW,IAAIlC,EAAS,EAAK,GAExCwC,IAAW,MAAM;AACrB,IAAAN,EAAY,EAAK;AAAA,EACnB;AAEA,SAAKrC,IAOH,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAW,4BAA4B;AAAA,QAChD,gBAAgB,CAACwC;AAAA,MAAA,CAClB;AAAA,MAED,UAAA;AAAA,QAAA,gBAAAvC;AAAA,UAAC+C;AAAA,UAAA;AAAA,YACC,QAAQ5C;AAAA,YACR,UAAAT;AAAA,YACA,QAAQD;AAAA,YACR,SAAS8C;AAAA,YACT,MAAM;AAAA,YACN,UAAU;AAAA,YACV,OAAO;AAAA,YACP,cAAc;AAAA,YACd,kBAAkBO;AAAA,UAAA;AAAA,QAAA;AAAA,QAEnB,CAACP,KACA,gBAAAzC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAM0C,EAAY,EAAI;AAAA,YAC/B,cAAW;AAAA,YAEV,UAAA;AAAA,cAAA/C,IACC,gBAAAO;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAKP;AAAA,kBACL,KAAI;AAAA,kBACJ,WAAU;AAAA,gBAAA;AAAA,cAAA,IAGZ,gBAAAO,EAAC,OAAA,EAAI,WAAU,qDACZ,YAAeN,GAAU;AAAA,gBACxB,WAAW;AAAA,gBACX,QAAQ;AAAA,cAAA,CACT,GACH;AAAA,cAEF,gBAAAM,EAAC,OAAA,EAAI,WAAU,yHACb,UAAA,gBAAAA,EAAC0C,KAAa,WAAU,UAAS,QAAO,OAAA,CAAO,EAAA,CACjD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGHH,KAAY,gBAAAvC,EAACyC,GAAA,EAAY,SAASK,EAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IA/C7C,gBAAA9C,EAACR,GAAA,EAAmB,cAAAC,GAA4B,UAAAC,EAAA,CAAoB;AAkD1E,GAEM+C,IAAiD,CAAC,EAAE,SAAAE,QAEtD,gBAAA3C;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS2C;AAAA,IACT,WAAU;AAAA,IACV,cAAW;AAAA,IAEX,UAAA,gBAAA3C,EAAC4C,GAAA,EAAQ,WAAU,UAAS,QAAO,OAAA,CAAO;AAAA,EAAA;AAAA,GC3D1CI,KAA0C,CAAC9C,MAAU;AACzD,QAAM;AAAA,IACJ,OAAAoC;AAAA,IACA,UAAA5C,IAAW;AAAA,IACX,cAAAD;AAAA,IACA,WAAAU;AAAA,IACA,QAAA8C;AAAA,IACA,YAAAC;AAAA,IACA,kBAAAC,IAAmB;AAAA,IACnB,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,EAAA,IACVrD,GACEsD,IAAaC,EAAc/D,CAAQ,GACnCgE,IAAoBR,KAAcE,GAClCO,IAAsB,CAACT,KAAc,CAAC,CAACE;AAE7C,MAAIQ;AACJ,SAAIL,KAAaC,MAAe,UAC9BI,IACE,gBAAA5D;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,WAAAE;AAAA,MACA,cAAAV;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,IAHKS;AAAA,EAAA,IAMAoD,KAAaC,MAAe,UACrCI,IACE,gBAAA5D;AAAA,IAAC6C;AAAA,IAAA;AAAA,MAEC,WAAA1C;AAAA,MACA,cAAAV;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,IAHKS;AAAA,EAAA,IAMAoD,KAAaC,MAAe,UACrCI,IACE,gBAAA5D;AAAA,IAACqC;AAAA,IAAA;AAAA,MAEC,WAAAlC;AAAA,MACA,cAAAV;AAAA,MACA,UAAAC;AAAA,MACA,OAAA4C;AAAA,IAAA;AAAA,IAJKnC;AAAA,EAAA,IAaTyD,IACE,gBAAA5D;AAAA,IAACR;AAAA,IAAA;AAAA,MACC,cAAAC;AAAA,MACA,UAAAC;AAAA,MACA,aATsB4D,IACtB,SACAD,MAAkB,SAChBQ,IACAC;AAAA,MAMF,aAAW;AAAA,IAAA;AAAA,EAAA,GAMf,gBAAAhE,EAAC,OAAA,EAAI,WAAU,yIACZ,UAAA;AAAA,IAAAwD,KACC,gBAAAtD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAASsD;AAAA,QACT,WAAU;AAAA,QACV,cAAW;AAAA,QAEX,UAAA,gBAAAtD,EAAC+D,GAAA,EAAM,WAAU,UAAS,QAAO,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAG3CH;AAAA,IACD,gBAAA9D,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD,EAAW,yCAAyC;AAAA,YAC7D,iBAAiB,CAACuC;AAAA,YAClB,cAAc,CAAC,CAACA;AAAA,UAAA,CACjB;AAAA,UAEA,UAAAA,KAASa;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAArD,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,QAAAkE,EAAetE,GAAU;AAAA,UACxB,WAAW;AAAA,UACX,QAAQ;AAAA,QAAA,CACT;AAAA,QACAuD,KACC,gBAAAjD,EAAC,QAAA,EAAK,WAAU,qCAAqC,UAAAiD,GAAO;AAAA,QAE7DI,MAAkB,SACjB,gBAAAvD,EAAAmE,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAjE,EAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,KAAC;AAAA,UACrD,gBAAAA,EAAC,QAAA,EAAK,WAAU,sCAAqC,UAAA,aAErD;AAAA,UACA,gBAAAA;AAAA,YAACkE;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,QAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACT,EAAA,CACF,IAEAR,KACE,gBAAA5D,EAAAmE,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAjE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAW,uBAAuB;AAAA,gBAC3C,iBAAiB4D;AAAA,gBACjB,iBAAiB,CAACA;AAAA,cAAA,CACnB;AAAA,cACF,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAA3D;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAW,uBAAuB;AAAA,gBAC3C,iBAAiB4D;AAAA,gBACjB,iBAAiB,CAACA;AAAA,cAAA,CACnB;AAAA,cAEA,UAAAD;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EAAA,CACF;AAAA,MAAA,EAAA,CAGN;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}