@floegence/floe-webapp-core 0.86.31 → 0.86.33

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,256 +1,342 @@
1
- import { use as B, insert as o, createComponent as i, effect as h, setAttribute as n, memo as _, className as Q, template as m, delegateEvents as X } from "solid-js/web";
2
- import { createSignal as S, onMount as Y, onCleanup as D, createMemo as Z, createEffect as q, on as p, Switch as N, Match as x, Show as M } from "solid-js";
3
- import { FloatingWindow as ee } from "../../ui/FloatingWindow.js";
4
- import { Refresh as te, FolderOpen as re, Eye as V, Minus as ae, Maximize as le, ExternalLink as ne } from "../../icons/index.js";
5
- import { cn as ie } from "../../../utils/cn.js";
6
- import { sandboxedMarkdownHtml as W, safeMarkdownMediaURL as oe } from "../markdown/media.js";
7
- var ce = /* @__PURE__ */ m("<span class=chat-media-placeholder role=status>"), de = /* @__PURE__ */ m("<span class=chat-media-placeholder role=status><span></span><button type=button class=chat-media-retry>"), se = /* @__PURE__ */ m("<button type=button class=chat-media-image-button><img class=chat-media-image loading=lazy decoding=async referrerpolicy=no-referrer>", !0, !1, !1), ve = /* @__PURE__ */ m("<video class=chat-media-video controls playsinline preload=metadata>"), ue = /* @__PURE__ */ m("<audio class=chat-media-audio controls preload=metadata>"), he = /* @__PURE__ */ m("<iframe class=chat-media-html sandbox=allow-scripts referrerpolicy=no-referrer>"), z = /* @__PURE__ */ m("<button type=button class=chat-media-action>"), me = /* @__PURE__ */ m("<button type=button class=chat-media-action data-chat-media-action=preview>"), ge = /* @__PURE__ */ m("<div class=chat-media-preview-content><img referrerpolicy=no-referrer class=chat-media-full-image>"), be = /* @__PURE__ */ m("<span><span class=chat-media-viewport></span><span class=chat-media-header><span class=chat-media-heading><span class=chat-media-kind></span><span class=chat-media-title></span></span><span class=chat-media-actions>"), fe = /* @__PURE__ */ m('<a class=chat-media-action target=_blank rel="noopener noreferrer">');
8
- async function we(a) {
9
- const k = oe(a.src ?? "");
10
- if (!k || a.kind === "html") throw new Error("A host resolver is required");
1
+ import { use as z, insert as h, createComponent as i, memo as E, effect as f, setAttribute as u, className as p, template as m, delegateEvents as ee } from "solid-js/web";
2
+ import { createSignal as S, onMount as te, onCleanup as j, createMemo as re, createEffect as ne, on as ae, Show as y, Switch as G, Match as _ } from "solid-js";
3
+ import { HtmlPreviewCanvas as le } from "./HtmlPreviewCanvas.js";
4
+ import { FloatingWindow as J } from "../../ui/FloatingWindow.js";
5
+ import { Refresh as ie, FolderOpen as oe, Eye as K, ExternalLink as ce } from "../../icons/index.js";
6
+ import { cn as se } from "../../../utils/cn.js";
7
+ import { safeMarkdownMediaURL as de } from "../markdown/media.js";
8
+ import { SandboxedHtmlFrame as Q } from "../../html-preview/SandboxedHtmlFrame.js";
9
+ var ue = /* @__PURE__ */ m("<div class=chat-media-preview-content><img referrerpolicy=no-referrer class=chat-media-full-image>"), ve = /* @__PURE__ */ m("<div class=chat-media-preview-content>"), he = /* @__PURE__ */ m("<span>"), me = /* @__PURE__ */ m("<span class=chat-media-placeholder role=status>"), ge = /* @__PURE__ */ m("<span class=chat-media-placeholder role=status><span></span><button type=button class=chat-media-retry>"), be = /* @__PURE__ */ m("<button type=button class=chat-media-image-button><img class=chat-media-image loading=lazy decoding=async referrerpolicy=no-referrer>", !0, !1, !1), we = /* @__PURE__ */ m("<video class=chat-media-video controls playsinline preload=metadata>"), fe = /* @__PURE__ */ m("<audio class=chat-media-audio controls preload=metadata>"), ke = /* @__PURE__ */ m("<span class=chat-media-viewport>"), X = /* @__PURE__ */ m("<button type=button class=chat-media-action>"), $e = /* @__PURE__ */ m("<button type=button class=chat-media-action data-chat-media-action=preview>"), ye = /* @__PURE__ */ m("<span class=chat-media-header><span class=chat-media-heading><span class=chat-media-kind></span><span class=chat-media-title></span></span><span class=chat-media-actions>"), Se = /* @__PURE__ */ m('<a class=chat-media-action target=_blank rel="noopener noreferrer">');
10
+ async function Le(e) {
11
+ const k = de(e.src ?? "");
12
+ if (!k || e.kind === "html") throw new Error("A host resolver is required");
11
13
  return {
12
14
  src: k,
13
15
  openURL: k
14
16
  };
15
17
  }
16
- const Se = (a) => {
17
- let k, I;
18
- const [j, O] = S(!1);
19
- Y(() => {
18
+ const Re = (e) => {
19
+ let k, O;
20
+ const [Y, I] = S(!1);
21
+ te(() => {
20
22
  if (typeof IntersectionObserver > "u") {
21
- O(!0);
23
+ I(!0);
22
24
  return;
23
25
  }
24
- const c = new IntersectionObserver((d) => {
25
- d.some((C) => C.isIntersecting) && (O(!0), c.disconnect());
26
+ const c = new IntersectionObserver((o) => {
27
+ o.some((r) => r.isIntersecting) && (I(!0), c.disconnect());
26
28
  }, {
27
29
  rootMargin: "400px"
28
30
  });
29
- c.observe(k), D(() => c.disconnect());
31
+ c.observe(k), j(() => c.disconnect());
30
32
  });
31
- const [v, U] = S(), [G, H] = S(), [y, L] = S("loading"), [J, K] = S(0), [b, R] = S(!1), g = () => a.source.title || a.labels[a.source.kind], P = Z(() => a.source), E = () => v()?.preview?.label || (a.source.kind === "image" ? a.labels.previewImage : a.labels.previewHTML) || a.labels.open, A = (c) => {
32
- I = c.currentTarget;
33
- const d = v()?.preview;
34
- d ? d.onSelect() : R(!0);
35
- };
36
- return q(p([j, P, () => a.resolve, J], ([c, d, C]) => {
33
+ const [g, P] = S(), [T, C] = S(), [$, L] = S("loading"), [Z, A] = S(0), [R, H] = S(!1), [q, U] = S(!1), b = () => e.source.title || e.labels[e.source.kind], F = re(() => e.source), M = () => g()?.preview?.label || (e.source.kind === "image" ? e.labels.previewImage : e.labels.previewHTMLWindow ?? "Open preview window") || e.labels.open, B = (c) => {
34
+ O = c.currentTarget;
35
+ const o = g()?.preview;
36
+ o ? o.onSelect() : H(!0);
37
+ }, W = (c) => {
38
+ O = c?.currentTarget ?? k.querySelector('[aria-haspopup="menu"]') ?? void 0;
39
+ const o = g()?.preview;
40
+ o ? o.onSelect() : U(!0);
41
+ }, D = () => {
42
+ const c = e.onOpenLink, o = F();
43
+ return c ? (r, n) => c(o, r, n) : void 0;
44
+ }, N = () => ({
45
+ linkUnavailable: e.labels.linkUnavailable ?? "Opening links is unavailable in this preview.",
46
+ anchorUnavailable: e.labels.anchorUnavailable ?? "The linked section was not found."
47
+ });
48
+ return ne(ae([Y, F, () => e.resolve, Z, () => e.htmlState], ([c, o, r]) => {
37
49
  if (!c) return;
38
- const T = C ?? we, u = new AbortController();
39
- D(() => u.abort()), U(void 0), H(void 0), L("loading"), R(!1), (async () => {
40
- if (d.kind === "html" && d.html !== void 0) {
41
- if (d.html.length > 1e6) throw new Error("HTML preview is too large");
42
- u.signal.aborted || H(W(d.html));
50
+ const n = r ?? Le, t = new AbortController();
51
+ if (j(() => t.abort()), P(void 0), C(void 0), L("loading"), U(!1), o.kind !== "html" && H(!1), o.kind === "html" && e.htmlState) {
52
+ C(o.html);
53
+ return;
54
+ }
55
+ (async () => {
56
+ if (o.kind === "html" && o.html !== void 0) {
57
+ if (o.html.length > 1e6) throw new Error("HTML preview is too large");
58
+ t.signal.aborted || C(o.html);
43
59
  } else {
44
- const $ = await T(d, u.signal);
45
- if (u.signal.aborted) return;
46
- if (d.kind === "html") {
47
- if (!$.loadHTML) throw new Error("HTML loader is required");
48
- const f = await $.loadHTML(u.signal);
49
- if (u.signal.aborted) return;
50
- if (f.length > 1e6) throw new Error("HTML preview is too large");
51
- H(W(f));
52
- } else if (!$.src) throw new Error("Media URL is required");
53
- U($);
60
+ const a = await n(o, t.signal);
61
+ if (t.signal.aborted) return;
62
+ if (o.kind === "html") {
63
+ if (!a.loadHTML) throw new Error("HTML loader is required");
64
+ const s = await a.loadHTML(t.signal);
65
+ if (t.signal.aborted) return;
66
+ if (s.length > 1e6) throw new Error("HTML preview is too large");
67
+ C(s);
68
+ } else if (!a.src) throw new Error("Media URL is required");
69
+ P(a);
54
70
  }
55
- u.signal.aborted || L("ready");
71
+ t.signal.aborted || L("ready");
56
72
  })().catch(() => {
57
- u.signal.aborted || L("error");
73
+ t.signal.aborted || L("error");
58
74
  });
59
75
  })), (() => {
60
- var c = be(), d = c.firstChild, C = d.nextSibling, T = C.firstChild, u = T.firstChild, $ = u.nextSibling, f = T.nextSibling, F = k;
61
- return typeof F == "function" ? B(F, c) : k = c, o(d, i(N, {
76
+ var c = he(), o = k;
77
+ return typeof o == "function" ? z(o, c) : k = c, h(c, i(y, {
78
+ get when() {
79
+ return e.source.kind === "html";
80
+ },
81
+ get fallback() {
82
+ return [(() => {
83
+ var r = ke();
84
+ return h(r, i(G, {
85
+ get children() {
86
+ return [i(_, {
87
+ get when() {
88
+ return $() === "loading";
89
+ },
90
+ get children() {
91
+ var n = me();
92
+ return h(n, () => e.labels.loading), n;
93
+ }
94
+ }), i(_, {
95
+ get when() {
96
+ return $() === "error";
97
+ },
98
+ get children() {
99
+ var n = ge(), t = n.firstChild, a = t.nextSibling;
100
+ return h(t, () => e.labels.unavailable), a.$$click = () => A((s) => s + 1), h(a, i(ie, {}), null), h(a, () => e.labels.retry, null), n;
101
+ }
102
+ }), i(_, {
103
+ get when() {
104
+ return $() === "ready";
105
+ },
106
+ get children() {
107
+ return i(G, {
108
+ get children() {
109
+ return [i(_, {
110
+ get when() {
111
+ return e.source.kind === "image";
112
+ },
113
+ get children() {
114
+ var n = be(), t = n.firstChild;
115
+ return n.$$click = B, t.addEventListener("error", () => L("error")), f((a) => {
116
+ var s = `${M()}: ${b()}`, d = g()?.src, l = b();
117
+ return s !== a.e && u(n, "aria-label", a.e = s), d !== a.t && u(t, "src", a.t = d), l !== a.a && u(t, "alt", a.a = l), a;
118
+ }, {
119
+ e: void 0,
120
+ t: void 0,
121
+ a: void 0
122
+ }), n;
123
+ }
124
+ }), i(_, {
125
+ get when() {
126
+ return e.source.kind === "video";
127
+ },
128
+ get children() {
129
+ var n = we();
130
+ return n.addEventListener("error", () => L("error")), f((t) => {
131
+ var a = g()?.src, s = b();
132
+ return a !== t.e && u(n, "src", t.e = a), s !== t.t && u(n, "aria-label", t.t = s), t;
133
+ }, {
134
+ e: void 0,
135
+ t: void 0
136
+ }), n;
137
+ }
138
+ }), i(_, {
139
+ get when() {
140
+ return e.source.kind === "audio";
141
+ },
142
+ get children() {
143
+ var n = fe();
144
+ return n.addEventListener("error", () => L("error")), f((t) => {
145
+ var a = g()?.src, s = b();
146
+ return a !== t.e && u(n, "src", t.e = a), s !== t.t && u(n, "aria-label", t.t = s), t;
147
+ }, {
148
+ e: void 0,
149
+ t: void 0
150
+ }), n;
151
+ }
152
+ })];
153
+ }
154
+ });
155
+ }
156
+ })];
157
+ }
158
+ })), r;
159
+ })(), (() => {
160
+ var r = ye(), n = r.firstChild, t = n.firstChild, a = t.nextSibling, s = n.nextSibling;
161
+ return h(t, () => e.labels[e.source.kind]), h(a, b), h(s, i(y, {
162
+ get when() {
163
+ return E(() => $() === "ready")() && g()?.reveal;
164
+ },
165
+ children: (d) => (() => {
166
+ var l = X();
167
+ return l.$$click = () => d().onSelect(), h(l, i(oe, {})), f((v) => {
168
+ var w = d().label, x = d().label;
169
+ return w !== v.e && u(l, "aria-label", v.e = w), x !== v.t && u(l, "title", v.t = x), v;
170
+ }, {
171
+ e: void 0,
172
+ t: void 0
173
+ }), l;
174
+ })()
175
+ }), null), h(s, i(y, {
176
+ get when() {
177
+ return E(() => $() === "ready")() && e.source.kind === "image";
178
+ },
179
+ get children() {
180
+ var d = X();
181
+ return d.$$click = B, h(d, i(K, {})), f((l) => {
182
+ var v = M(), w = M();
183
+ return v !== l.e && u(d, "aria-label", l.e = v), w !== l.t && u(d, "title", l.t = w), l;
184
+ }, {
185
+ e: void 0,
186
+ t: void 0
187
+ }), d;
188
+ }
189
+ }), null), h(s, i(y, {
190
+ get when() {
191
+ return E(() => $() === "ready" && e.source.kind !== "image")() && g()?.preview;
192
+ },
193
+ get children() {
194
+ var d = $e();
195
+ return d.$$click = W, h(d, i(K, {})), f((l) => {
196
+ var v = M(), w = M();
197
+ return v !== l.e && u(d, "aria-label", l.e = v), w !== l.t && u(d, "title", l.t = w), l;
198
+ }, {
199
+ e: void 0,
200
+ t: void 0
201
+ }), d;
202
+ }
203
+ }), null), h(s, i(y, {
204
+ get when() {
205
+ return E(() => e.source.kind !== "image" && !g()?.reveal)() && g()?.openURL;
206
+ },
207
+ children: (d) => (() => {
208
+ var l = Se();
209
+ return h(l, i(ce, {})), f((v) => {
210
+ var w = d(), x = e.labels.open, V = e.labels.open;
211
+ return w !== v.e && u(l, "href", v.e = w), x !== v.t && u(l, "aria-label", v.t = x), V !== v.a && u(l, "title", v.a = V), v;
212
+ }, {
213
+ e: void 0,
214
+ t: void 0,
215
+ a: void 0
216
+ }), l;
217
+ })()
218
+ }), null), f(() => u(a, "title", b())), r;
219
+ })()];
220
+ },
62
221
  get children() {
63
- return [i(x, {
64
- get when() {
65
- return y() === "loading";
222
+ return i(le, {
223
+ get state() {
224
+ return e.htmlState ?? $();
66
225
  },
67
- get children() {
68
- var e = ce();
69
- return o(e, () => a.labels.loading), e;
70
- }
71
- }), i(x, {
72
- get when() {
73
- return y() === "error";
226
+ get html() {
227
+ return T() ?? e.source.html ?? "";
74
228
  },
75
- get children() {
76
- var e = de(), t = e.firstChild, r = t.nextSibling;
77
- return o(t, () => a.labels.unavailable), r.$$click = () => K((l) => l + 1), o(r, i(te, {}), null), o(r, () => a.labels.retry, null), e;
78
- }
79
- }), i(x, {
80
- get when() {
81
- return y() === "ready";
229
+ get labels() {
230
+ return e.labels;
231
+ },
232
+ get expanded() {
233
+ return R();
234
+ },
235
+ onExpand: () => H((r) => !r),
236
+ onRetry: () => A((r) => r + 1),
237
+ onPreview: () => W(),
238
+ get previewLabel() {
239
+ return M();
240
+ },
241
+ get resource() {
242
+ return g();
82
243
  },
83
244
  get children() {
84
- return i(N, {
245
+ return i(y, {
246
+ get when() {
247
+ return E(() => $() === "ready")() && !e.htmlState;
248
+ },
85
249
  get children() {
86
- return [i(x, {
87
- get when() {
88
- return a.source.kind === "image";
250
+ return i(Q, {
251
+ class: "chat-media-html",
252
+ get title() {
253
+ return b();
89
254
  },
90
- get children() {
91
- var e = se(), t = e.firstChild;
92
- return e.$$click = A, t.addEventListener("error", () => L("error")), h((r) => {
93
- var l = `${E()}: ${g()}`, s = v()?.src, w = g();
94
- return l !== r.e && n(e, "aria-label", r.e = l), s !== r.t && n(t, "src", r.t = s), w !== r.a && n(t, "alt", r.a = w), r;
95
- }, {
96
- e: void 0,
97
- t: void 0,
98
- a: void 0
99
- }), e;
100
- }
101
- }), i(x, {
102
- get when() {
103
- return a.source.kind === "video";
104
- },
105
- get children() {
106
- var e = ve();
107
- return e.addEventListener("error", () => L("error")), h((t) => {
108
- var r = v()?.src, l = g();
109
- return r !== t.e && n(e, "src", t.e = r), l !== t.t && n(e, "aria-label", t.t = l), t;
110
- }, {
111
- e: void 0,
112
- t: void 0
113
- }), e;
114
- }
115
- }), i(x, {
116
- get when() {
117
- return a.source.kind === "audio";
255
+ get html() {
256
+ return T() ?? "";
118
257
  },
119
- get children() {
120
- var e = ue();
121
- return e.addEventListener("error", () => L("error")), h((t) => {
122
- var r = v()?.src, l = g();
123
- return r !== t.e && n(e, "src", t.e = r), l !== t.t && n(e, "aria-label", t.t = l), t;
124
- }, {
125
- e: void 0,
126
- t: void 0
127
- }), e;
128
- }
129
- }), i(x, {
130
- get when() {
131
- return a.source.kind === "html";
258
+ get labels() {
259
+ return N();
132
260
  },
133
- get children() {
134
- var e = he();
135
- return h((t) => {
136
- var r = g(), l = G();
137
- return r !== t.e && n(e, "title", t.e = r), l !== t.t && n(e, "srcdoc", t.t = l), t;
138
- }, {
139
- e: void 0,
140
- t: void 0
141
- }), e;
261
+ get onOpenLink() {
262
+ return D();
142
263
  }
143
- })];
264
+ });
144
265
  }
145
266
  });
146
267
  }
147
- })];
148
- }
149
- })), o(u, () => a.labels[a.source.kind]), o($, g), o(f, i(M, {
150
- get when() {
151
- return _(() => y() === "ready")() && v()?.reveal;
152
- },
153
- children: (e) => (() => {
154
- var t = z();
155
- return t.$$click = () => e().onSelect(), o(t, i(re, {})), h((r) => {
156
- var l = e().label, s = e().label;
157
- return l !== r.e && n(t, "aria-label", r.e = l), s !== r.t && n(t, "title", r.t = s), r;
158
- }, {
159
- e: void 0,
160
- t: void 0
161
- }), t;
162
- })()
163
- }), null), o(f, i(M, {
164
- get when() {
165
- return _(() => y() === "ready")() && a.source.kind === "image";
166
- },
167
- get children() {
168
- var e = z();
169
- return e.$$click = A, o(e, i(V, {})), h((t) => {
170
- var r = E(), l = E();
171
- return r !== t.e && n(e, "aria-label", t.e = r), l !== t.t && n(e, "title", t.t = l), t;
172
- }, {
173
- e: void 0,
174
- t: void 0
175
- }), e;
176
- }
177
- }), null), o(f, i(M, {
178
- get when() {
179
- return _(() => !!(y() === "ready" && v()?.preview))() && a.source.kind !== "image";
180
- },
181
- get children() {
182
- var e = me();
183
- return e.$$click = () => v()?.preview?.onSelect(), o(e, i(V, {})), h((t) => {
184
- var r = E(), l = E();
185
- return r !== t.e && n(e, "aria-label", t.e = r), l !== t.t && n(e, "title", t.t = l), t;
186
- }, {
187
- e: void 0,
188
- t: void 0
189
- }), e;
268
+ });
190
269
  }
191
- }), null), o(f, i(M, {
270
+ }), null), h(c, i(y, {
192
271
  get when() {
193
- return _(() => y() === "ready")() && a.source.kind === "html";
272
+ return e.source.kind === "image";
194
273
  },
195
274
  get children() {
196
- var e = z();
197
- return e.$$click = () => R(!b()), o(e, i(M, {
198
- get when() {
275
+ return i(J, {
276
+ get open() {
277
+ return R();
278
+ },
279
+ onOpenChange: (r) => {
280
+ H(r), r || O?.focus({
281
+ preventScroll: !0
282
+ });
283
+ },
284
+ get title() {
199
285
  return b();
200
286
  },
201
- get fallback() {
202
- return i(le, {});
287
+ get labels() {
288
+ return {
289
+ close: e.labels.close,
290
+ maximize: e.labels.expand,
291
+ restore: e.labels.collapse
292
+ };
293
+ },
294
+ defaultSize: {
295
+ width: 960,
296
+ height: 680
297
+ },
298
+ minSize: {
299
+ width: 280,
300
+ height: 240
203
301
  },
302
+ compactBelow: 640,
303
+ class: "chat-media-preview-window",
204
304
  get children() {
205
- return i(ae, {});
305
+ var r = ue(), n = r.firstChild;
306
+ return z((t) => queueMicrotask(() => t.closest('[role="dialog"]')?.focus({
307
+ preventScroll: !0
308
+ })), r), f((t) => {
309
+ var a = g()?.src, s = b();
310
+ return a !== t.e && u(n, "src", t.e = a), s !== t.t && u(n, "alt", t.t = s), t;
311
+ }, {
312
+ e: void 0,
313
+ t: void 0
314
+ }), r;
206
315
  }
207
- })), h((t) => {
208
- var r = b() ? "collapse" : "expand", l = b() ? a.labels.collapse : a.labels.expand, s = b() ? a.labels.collapse : a.labels.expand, w = b();
209
- return r !== t.e && n(e, "data-chat-media-action", t.e = r), l !== t.t && n(e, "aria-label", t.t = l), s !== t.a && n(e, "title", t.a = s), w !== t.o && n(e, "aria-expanded", t.o = w), t;
210
- }, {
211
- e: void 0,
212
- t: void 0,
213
- a: void 0,
214
- o: void 0
215
- }), e;
316
+ });
216
317
  }
217
- }), null), o(f, i(M, {
218
- get when() {
219
- return _(() => a.source.kind !== "image" && !v()?.reveal)() && v()?.openURL;
220
- },
221
- children: (e) => (() => {
222
- var t = fe();
223
- return o(t, i(ne, {})), h((r) => {
224
- var l = e(), s = a.labels.open, w = a.labels.open;
225
- return l !== r.e && n(t, "href", r.e = l), s !== r.t && n(t, "aria-label", r.t = s), w !== r.a && n(t, "title", r.a = w), r;
226
- }, {
227
- e: void 0,
228
- t: void 0,
229
- a: void 0
230
- }), t;
231
- })()
232
- }), null), o(c, i(M, {
318
+ }), null), h(c, i(y, {
233
319
  get when() {
234
- return a.source.kind === "image";
320
+ return e.source.kind === "html";
235
321
  },
236
322
  get children() {
237
- return i(ee, {
323
+ return i(J, {
238
324
  get open() {
239
- return b();
325
+ return q();
240
326
  },
241
- onOpenChange: (e) => {
242
- R(e), e || I?.focus({
327
+ onOpenChange: (r) => {
328
+ U(r), r || O?.focus({
243
329
  preventScroll: !0
244
330
  });
245
331
  },
246
332
  get title() {
247
- return g();
333
+ return b();
248
334
  },
249
335
  get labels() {
250
336
  return {
251
- close: a.labels.close,
252
- maximize: a.labels.expand,
253
- restore: a.labels.collapse
337
+ close: e.labels.close,
338
+ maximize: e.labels.expand,
339
+ restore: e.labels.collapse
254
340
  };
255
341
  },
256
342
  defaultSize: {
@@ -264,30 +350,37 @@ const Se = (a) => {
264
350
  compactBelow: 640,
265
351
  class: "chat-media-preview-window",
266
352
  get children() {
267
- var e = ge(), t = e.firstChild;
268
- return B((r) => queueMicrotask(() => r.closest('[role="dialog"]')?.focus({
353
+ var r = ve();
354
+ return z((n) => queueMicrotask(() => n.closest('[role="dialog"]')?.focus({
269
355
  preventScroll: !0
270
- })), e), h((r) => {
271
- var l = v()?.src, s = g();
272
- return l !== r.e && n(t, "src", r.e = l), s !== r.t && n(t, "alt", r.t = s), r;
273
- }, {
274
- e: void 0,
275
- t: void 0
276
- }), e;
356
+ })), r), h(r, i(Q, {
357
+ class: "chat-media-html",
358
+ get title() {
359
+ return b();
360
+ },
361
+ get html() {
362
+ return T() ?? "";
363
+ },
364
+ get labels() {
365
+ return N();
366
+ },
367
+ get onOpenLink() {
368
+ return D();
369
+ }
370
+ })), r;
277
371
  }
278
372
  });
279
373
  }
280
- }), null), h((e) => {
281
- var t = ie("chat-media", b() && a.source.kind === "html" && "chat-media-expanded", a.class), r = a.source.kind, l = g();
282
- return t !== e.e && Q(c, e.e = t), r !== e.t && n(c, "data-media-kind", e.t = r), l !== e.a && n($, "title", e.a = l), e;
374
+ }), null), f((r) => {
375
+ var n = se("chat-media", R() && e.source.kind === "html" && "chat-media-expanded", e.class), t = e.source.kind;
376
+ return n !== r.e && p(c, r.e = n), t !== r.t && u(c, "data-media-kind", r.t = t), r;
283
377
  }, {
284
378
  e: void 0,
285
- t: void 0,
286
- a: void 0
379
+ t: void 0
287
380
  }), c;
288
381
  })();
289
382
  };
290
- X(["click"]);
383
+ ee(["click"]);
291
384
  export {
292
- Se as MarkdownMedia
385
+ Re as MarkdownMedia
293
386
  };
@@ -0,0 +1,18 @@
1
+ import { type JSX } from 'solid-js';
2
+ export interface SandboxedHtmlFrameLabels {
3
+ linkUnavailable: string;
4
+ anchorUnavailable: string;
5
+ }
6
+ export interface SandboxedHtmlFrameProps {
7
+ html: string;
8
+ title: string;
9
+ class?: string;
10
+ style?: JSX.CSSProperties;
11
+ inert?: boolean;
12
+ tabIndex?: number;
13
+ labels?: SandboxedHtmlFrameLabels;
14
+ /** An untrusted link intent. The host must resolve and authorize every target. */
15
+ onOpenLink?: (href: string, signal: AbortSignal) => void | Promise<void>;
16
+ }
17
+ /** A self-contained opaque document with a user-activated, host-authorized link boundary. */
18
+ export declare function SandboxedHtmlFrame(props: SandboxedHtmlFrameProps): JSX.Element;