@floegence/floe-webapp-core 0.86.25 → 0.86.28
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.
package/dist/chat.css
CHANGED
|
@@ -1860,11 +1860,14 @@ pre.chat-md-code-block *::selection,
|
|
|
1860
1860
|
.chat-media-heading { min-width: 0; }
|
|
1861
1861
|
.chat-media-kind { display: none; }
|
|
1862
1862
|
.chat-media-title { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .6875rem; line-height: 1.5; color: var(--muted-foreground); }
|
|
1863
|
-
.chat-media-actions { position: absolute; top: .5rem; right: .5rem; display: flex; align-items: center; gap: .
|
|
1863
|
+
.chat-media-actions { position: absolute; top: .5rem; right: .5rem; display: flex; align-items: center; gap: .2rem; padding: .25rem; border: 1px solid rgb(255 255 255 / .18); border-radius: .7rem; background: rgb(24 24 24 / .78); box-shadow: 0 .45rem 1.25rem rgb(0 0 0 / .2); backdrop-filter: blur(12px); color: white; opacity: 0; transform: translateY(-2px); transition: opacity 140ms ease, transform 140ms ease; }
|
|
1864
1864
|
.chat-media-actions:empty { display: none; }
|
|
1865
1865
|
.chat-media:hover .chat-media-actions, .chat-media:focus-within .chat-media-actions { opacity: 1; transform: none; }
|
|
1866
|
-
.chat-media-action { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border: 0; padding: 0; border-radius: .
|
|
1867
|
-
.chat-media-action:hover { background: rgb(255 255 255 / .16); }
|
|
1866
|
+
.chat-media-action { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border: 0; padding: 0; border-radius: .45rem; background: transparent; color: inherit; cursor: pointer; transition: background 120ms ease, color 120ms ease, transform 120ms ease; }
|
|
1867
|
+
.chat-media-action:hover { background: rgb(255 255 255 / .16); transform: translateY(-1px); }
|
|
1868
|
+
.chat-media-action[data-chat-media-action="preview"] { background: rgb(255 255 255 / .12); }
|
|
1869
|
+
.chat-media-action[data-chat-media-action="preview"]:hover { background: var(--primary); color: var(--primary-foreground); }
|
|
1870
|
+
.chat-media-action[data-chat-media-action="collapse"] { background: rgb(255 255 255 / .2); }
|
|
1868
1871
|
.chat-media-action svg, .chat-media-retry svg { width: .95rem; height: .95rem; }
|
|
1869
1872
|
.chat-media-action:focus-visible { outline: 2px solid white; outline-offset: -2px; }
|
|
1870
1873
|
.chat-media-image-button:focus-visible, .chat-media-retry:focus-visible { outline: 2px solid var(--ring); outline-offset: 3px; }
|
|
@@ -1881,6 +1884,6 @@ pre.chat-md-code-block *::selection,
|
|
|
1881
1884
|
.chat-media-preview-content { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; min-height: 0; padding: .5rem; }
|
|
1882
1885
|
.chat-media-full-image { display: block; width: 100%; height: 100%; min-height: 0; object-fit: contain; }
|
|
1883
1886
|
@media (hover: none) { .chat-media-actions { opacity: 1; transform: none; } }
|
|
1884
|
-
@media (prefers-reduced-motion: reduce) { .chat-media-actions { transition: none; } }
|
|
1887
|
+
@media (prefers-reduced-motion: reduce) { .chat-media-actions, .chat-media-action { transition: none; } }
|
|
1885
1888
|
@media (max-width: 480px) { .chat-media[data-media-kind="html"] .chat-media-viewport, .chat-media-html { height: 18rem; } .chat-media-expanded[data-media-kind="html"] .chat-media-viewport { height: min(70vh, 48rem); } }
|
|
1886
1889
|
}
|
|
@@ -7,6 +7,8 @@ export interface MarkdownMediaLabels {
|
|
|
7
7
|
video: string;
|
|
8
8
|
audio: string;
|
|
9
9
|
html: string;
|
|
10
|
+
/** Label for opening an HTML file in the host's file preview surface. */
|
|
11
|
+
previewHTML?: string;
|
|
10
12
|
loading: string;
|
|
11
13
|
unavailable: string;
|
|
12
14
|
retry: string;
|
|
@@ -21,7 +23,7 @@ export interface ResolvedMarkdownMedia {
|
|
|
21
23
|
/** Optional host-authorized source link. */
|
|
22
24
|
openURL?: string;
|
|
23
25
|
loadHTML?: (signal: AbortSignal) => Promise<string>;
|
|
24
|
-
/** Open the
|
|
26
|
+
/** Open the media in the host's existing preview surface. */
|
|
25
27
|
preview?: {
|
|
26
28
|
label: string;
|
|
27
29
|
onSelect: () => void;
|
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
import { use as B, insert as o, createComponent as i, effect as
|
|
2
|
-
import { createSignal as
|
|
3
|
-
import { FloatingWindow as
|
|
4
|
-
import { Refresh as
|
|
5
|
-
import { cn as
|
|
6
|
-
import { sandboxedMarkdownHtml as
|
|
7
|
-
var
|
|
8
|
-
async function
|
|
9
|
-
const
|
|
10
|
-
if (!
|
|
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");
|
|
11
11
|
return {
|
|
12
|
-
src:
|
|
13
|
-
openURL:
|
|
12
|
+
src: k,
|
|
13
|
+
openURL: k
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
const
|
|
17
|
-
let
|
|
18
|
-
const [
|
|
19
|
-
|
|
16
|
+
const Se = (a) => {
|
|
17
|
+
let k, I;
|
|
18
|
+
const [j, O] = S(!1);
|
|
19
|
+
Y(() => {
|
|
20
20
|
if (typeof IntersectionObserver > "u") {
|
|
21
21
|
O(!0);
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
const
|
|
25
|
-
|
|
24
|
+
const c = new IntersectionObserver((d) => {
|
|
25
|
+
d.some((C) => C.isIntersecting) && (O(!0), c.disconnect());
|
|
26
26
|
}, {
|
|
27
27
|
rootMargin: "400px"
|
|
28
28
|
});
|
|
29
|
-
|
|
29
|
+
c.observe(k), D(() => c.disconnect());
|
|
30
30
|
});
|
|
31
|
-
const [
|
|
32
|
-
I =
|
|
33
|
-
const
|
|
34
|
-
|
|
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
35
|
};
|
|
36
|
-
return
|
|
37
|
-
if (!
|
|
38
|
-
const
|
|
39
|
-
D(() =>
|
|
40
|
-
if (
|
|
41
|
-
if (
|
|
42
|
-
|
|
36
|
+
return q(p([j, P, () => a.resolve, J], ([c, d, C]) => {
|
|
37
|
+
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));
|
|
43
43
|
} else {
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
46
|
-
if (
|
|
47
|
-
if (
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
} else if (
|
|
53
|
-
U(
|
|
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($);
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
u.signal.aborted || L("ready");
|
|
56
56
|
})().catch(() => {
|
|
57
|
-
|
|
57
|
+
u.signal.aborted || L("error");
|
|
58
58
|
});
|
|
59
59
|
})), (() => {
|
|
60
|
-
var
|
|
61
|
-
return typeof F == "function" ? B(F,
|
|
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, {
|
|
62
62
|
get children() {
|
|
63
|
-
return [i(
|
|
63
|
+
return [i(x, {
|
|
64
64
|
get when() {
|
|
65
65
|
return y() === "loading";
|
|
66
66
|
},
|
|
67
67
|
get children() {
|
|
68
|
-
var e =
|
|
68
|
+
var e = ce();
|
|
69
69
|
return o(e, () => a.labels.loading), e;
|
|
70
70
|
}
|
|
71
|
-
}), i(
|
|
71
|
+
}), i(x, {
|
|
72
72
|
get when() {
|
|
73
73
|
return y() === "error";
|
|
74
74
|
},
|
|
75
75
|
get children() {
|
|
76
|
-
var e =
|
|
77
|
-
return o(
|
|
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
78
|
}
|
|
79
|
-
}), i(
|
|
79
|
+
}), i(x, {
|
|
80
80
|
get when() {
|
|
81
81
|
return y() === "ready";
|
|
82
82
|
},
|
|
83
83
|
get children() {
|
|
84
84
|
return i(N, {
|
|
85
85
|
get children() {
|
|
86
|
-
return [i(
|
|
86
|
+
return [i(x, {
|
|
87
87
|
get when() {
|
|
88
88
|
return a.source.kind === "image";
|
|
89
89
|
},
|
|
90
90
|
get children() {
|
|
91
|
-
var e =
|
|
92
|
-
return e.$$click = A,
|
|
93
|
-
var l = `${
|
|
94
|
-
return l !==
|
|
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
95
|
}, {
|
|
96
96
|
e: void 0,
|
|
97
97
|
t: void 0,
|
|
98
98
|
a: void 0
|
|
99
99
|
}), e;
|
|
100
100
|
}
|
|
101
|
-
}), i(
|
|
101
|
+
}), i(x, {
|
|
102
102
|
get when() {
|
|
103
103
|
return a.source.kind === "video";
|
|
104
104
|
},
|
|
105
105
|
get children() {
|
|
106
|
-
var e =
|
|
107
|
-
return e.addEventListener("error", () =>
|
|
108
|
-
var
|
|
109
|
-
return
|
|
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
110
|
}, {
|
|
111
111
|
e: void 0,
|
|
112
112
|
t: void 0
|
|
113
113
|
}), e;
|
|
114
114
|
}
|
|
115
|
-
}), i(
|
|
115
|
+
}), i(x, {
|
|
116
116
|
get when() {
|
|
117
117
|
return a.source.kind === "audio";
|
|
118
118
|
},
|
|
119
119
|
get children() {
|
|
120
|
-
var e =
|
|
121
|
-
return e.addEventListener("error", () =>
|
|
122
|
-
var
|
|
123
|
-
return
|
|
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
124
|
}, {
|
|
125
125
|
e: void 0,
|
|
126
126
|
t: void 0
|
|
127
127
|
}), e;
|
|
128
128
|
}
|
|
129
|
-
}), i(
|
|
129
|
+
}), i(x, {
|
|
130
130
|
get when() {
|
|
131
131
|
return a.source.kind === "html";
|
|
132
132
|
},
|
|
133
133
|
get children() {
|
|
134
|
-
var e =
|
|
135
|
-
return
|
|
136
|
-
var
|
|
137
|
-
return
|
|
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
138
|
}, {
|
|
139
139
|
e: void 0,
|
|
140
140
|
t: void 0
|
|
@@ -146,75 +146,100 @@ const Me = (a) => {
|
|
|
146
146
|
}
|
|
147
147
|
})];
|
|
148
148
|
}
|
|
149
|
-
})), o(
|
|
149
|
+
})), o(u, () => a.labels[a.source.kind]), o($, g), o(f, i(M, {
|
|
150
150
|
get when() {
|
|
151
|
-
return
|
|
151
|
+
return _(() => y() === "ready")() && v()?.reveal;
|
|
152
152
|
},
|
|
153
153
|
children: (e) => (() => {
|
|
154
|
-
var
|
|
155
|
-
return
|
|
156
|
-
var l = e().label,
|
|
157
|
-
return l !==
|
|
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
158
|
}, {
|
|
159
159
|
e: void 0,
|
|
160
160
|
t: void 0
|
|
161
|
-
}),
|
|
161
|
+
}), t;
|
|
162
162
|
})()
|
|
163
|
-
}), null), o(
|
|
163
|
+
}), null), o(f, i(M, {
|
|
164
164
|
get when() {
|
|
165
|
-
return
|
|
165
|
+
return _(() => y() === "ready")() && a.source.kind === "image";
|
|
166
166
|
},
|
|
167
167
|
get children() {
|
|
168
168
|
var e = z();
|
|
169
|
-
return e.$$click = A, o(e, i(
|
|
170
|
-
var
|
|
171
|
-
return
|
|
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;
|
|
172
186
|
}, {
|
|
173
187
|
e: void 0,
|
|
174
188
|
t: void 0
|
|
175
189
|
}), e;
|
|
176
190
|
}
|
|
177
|
-
}), null), o(
|
|
191
|
+
}), null), o(f, i(M, {
|
|
178
192
|
get when() {
|
|
179
|
-
return
|
|
193
|
+
return _(() => y() === "ready")() && a.source.kind === "html";
|
|
180
194
|
},
|
|
181
195
|
get children() {
|
|
182
196
|
var e = z();
|
|
183
|
-
return e.$$click = () =>
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
return e.$$click = () => R(!b()), o(e, i(M, {
|
|
198
|
+
get when() {
|
|
199
|
+
return b();
|
|
200
|
+
},
|
|
201
|
+
get fallback() {
|
|
202
|
+
return i(le, {});
|
|
203
|
+
},
|
|
204
|
+
get children() {
|
|
205
|
+
return i(ae, {});
|
|
206
|
+
}
|
|
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;
|
|
186
210
|
}, {
|
|
187
211
|
e: void 0,
|
|
188
212
|
t: void 0,
|
|
189
|
-
a: void 0
|
|
213
|
+
a: void 0,
|
|
214
|
+
o: void 0
|
|
190
215
|
}), e;
|
|
191
216
|
}
|
|
192
|
-
}), null), o(
|
|
217
|
+
}), null), o(f, i(M, {
|
|
193
218
|
get when() {
|
|
194
|
-
return
|
|
219
|
+
return _(() => a.source.kind !== "image" && !v()?.reveal)() && v()?.openURL;
|
|
195
220
|
},
|
|
196
221
|
children: (e) => (() => {
|
|
197
|
-
var
|
|
198
|
-
return o(
|
|
199
|
-
var l = e(),
|
|
200
|
-
return l !==
|
|
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;
|
|
201
226
|
}, {
|
|
202
227
|
e: void 0,
|
|
203
228
|
t: void 0,
|
|
204
229
|
a: void 0
|
|
205
|
-
}),
|
|
230
|
+
}), t;
|
|
206
231
|
})()
|
|
207
|
-
}), null), o(
|
|
232
|
+
}), null), o(c, i(M, {
|
|
208
233
|
get when() {
|
|
209
234
|
return a.source.kind === "image";
|
|
210
235
|
},
|
|
211
236
|
get children() {
|
|
212
|
-
return i(
|
|
237
|
+
return i(ee, {
|
|
213
238
|
get open() {
|
|
214
|
-
return
|
|
239
|
+
return b();
|
|
215
240
|
},
|
|
216
241
|
onOpenChange: (e) => {
|
|
217
|
-
|
|
242
|
+
R(e), e || I?.focus({
|
|
218
243
|
preventScroll: !0
|
|
219
244
|
});
|
|
220
245
|
},
|
|
@@ -239,12 +264,12 @@ const Me = (a) => {
|
|
|
239
264
|
compactBelow: 640,
|
|
240
265
|
class: "chat-media-preview-window",
|
|
241
266
|
get children() {
|
|
242
|
-
var e =
|
|
243
|
-
return B((
|
|
267
|
+
var e = ge(), t = e.firstChild;
|
|
268
|
+
return B((r) => queueMicrotask(() => r.closest('[role="dialog"]')?.focus({
|
|
244
269
|
preventScroll: !0
|
|
245
|
-
})), e),
|
|
246
|
-
var l =
|
|
247
|
-
return l !==
|
|
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;
|
|
248
273
|
}, {
|
|
249
274
|
e: void 0,
|
|
250
275
|
t: void 0
|
|
@@ -252,17 +277,17 @@ const Me = (a) => {
|
|
|
252
277
|
}
|
|
253
278
|
});
|
|
254
279
|
}
|
|
255
|
-
}), null),
|
|
256
|
-
var
|
|
257
|
-
return
|
|
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;
|
|
258
283
|
}, {
|
|
259
284
|
e: void 0,
|
|
260
285
|
t: void 0,
|
|
261
286
|
a: void 0
|
|
262
|
-
}),
|
|
287
|
+
}), c;
|
|
263
288
|
})();
|
|
264
289
|
};
|
|
265
|
-
|
|
290
|
+
X(["click"]);
|
|
266
291
|
export {
|
|
267
|
-
|
|
292
|
+
Se as MarkdownMedia
|
|
268
293
|
};
|
|
@@ -2,6 +2,10 @@ import { type JSX } from 'solid-js';
|
|
|
2
2
|
export interface TabItem {
|
|
3
3
|
id: string;
|
|
4
4
|
label: string;
|
|
5
|
+
/** DOM identity for references such as TabPanel.labelledBy. */
|
|
6
|
+
domId?: string;
|
|
7
|
+
/** DOM identity of the host-owned panel controlled by this tab. */
|
|
8
|
+
panelId?: string;
|
|
5
9
|
icon?: JSX.Element;
|
|
6
10
|
closable?: boolean;
|
|
7
11
|
disabled?: boolean;
|