gentiq 0.10.3 → 0.11.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.
- package/dist/{checkbox-Bk6TjhJn.js → checkbox-Bo_Q86i6.js} +500 -474
- package/dist/gentiq-admin.es.js +925 -871
- package/dist/gentiq-index.es.js +2 -2
- package/dist/gentiq.css +1 -1
- package/dist/src/admin/lib/api.d.ts +4 -0
- package/dist/src/locales/en.json.d.ts +3 -0
- package/dist/src/locales/fa.json.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { jsx as i, jsxs as k, Fragment as oe } from "react/jsx-runtime";
|
|
2
2
|
import * as Ke from "react";
|
|
3
|
-
import { createContext as pe, useContext as ke, useState as P, useEffect as V, useCallback as W, useMemo as de, useRef as Z, Children as
|
|
4
|
-
import { useTranslation as z, initReactI18next as
|
|
5
|
-
import { Slot as
|
|
3
|
+
import { createContext as pe, useContext as ke, useState as P, useEffect as V, useCallback as W, useMemo as de, useRef as Z, Children as $n, memo as Re } from "react";
|
|
4
|
+
import { useTranslation as z, initReactI18next as Bn } from "react-i18next";
|
|
5
|
+
import { Slot as Kt } from "@radix-ui/react-slot";
|
|
6
6
|
import { cva as ot } from "class-variance-authority";
|
|
7
|
-
import { QuoteIcon as Oe, CheckIcon as Le, SendIcon as
|
|
7
|
+
import { QuoteIcon as Oe, CheckIcon as Le, SendIcon as Hn, ArrowDownIcon as jn, ChevronDownIcon as we, BookIcon as Gn, XIcon as be, ArrowUpIcon as Wn, Loader2Icon as Vn, SquareIcon as Yn, FileIcon as Qt, PaperclipIcon as Xn, RefreshCcwIcon as Kn, ThumbsUpIcon as Qn, ThumbsDownIcon as Zn, CopyIcon as Zt, BrainIcon as Jn, WrenchIcon as eo, ImagePlusIcon as to, CodeIcon as no, DownloadIcon as Te, GlobeIcon as oo, XCircleIcon as Jt, CheckCircleIcon as ro, ClockIcon as ao, CircleIcon as io, ChevronUpIcon as lo } from "lucide-react";
|
|
8
8
|
import * as ce from "@radix-ui/react-tooltip";
|
|
9
|
-
import { toast as
|
|
10
|
-
import { createPortal as
|
|
11
|
-
import { nanoid as
|
|
12
|
-
import { useQuery as
|
|
13
|
-
import { Streamdown as
|
|
9
|
+
import { toast as so } from "sonner";
|
|
10
|
+
import { createPortal as co } from "react-dom";
|
|
11
|
+
import { nanoid as en } from "nanoid";
|
|
12
|
+
import { useQuery as uo } from "@tanstack/react-query";
|
|
13
|
+
import { Streamdown as po } from "streamdown";
|
|
14
14
|
import ht from "katex";
|
|
15
15
|
import { useControllableState as gt } from "@radix-ui/react-use-controllable-state";
|
|
16
16
|
import * as rt from "@radix-ui/react-collapsible";
|
|
17
17
|
import * as J from "@radix-ui/react-dialog";
|
|
18
18
|
import { PrismLight as K } from "react-syntax-highlighter";
|
|
19
|
-
import { StickToBottom as
|
|
20
|
-
import
|
|
19
|
+
import { StickToBottom as tn, useStickToBottomContext as nn } from "use-stick-to-bottom";
|
|
20
|
+
import ho from "i18next";
|
|
21
21
|
import * as M from "@radix-ui/react-select";
|
|
22
22
|
import * as ye from "@radix-ui/react-dropdown-menu";
|
|
23
23
|
import * as mt from "@radix-ui/react-checkbox";
|
|
24
|
-
import { clsx as
|
|
25
|
-
import { twMerge as
|
|
26
|
-
const
|
|
24
|
+
import { clsx as go } from "clsx";
|
|
25
|
+
import { twMerge as mo } from "tailwind-merge";
|
|
26
|
+
const fo = {
|
|
27
27
|
theme: "system",
|
|
28
28
|
setTheme: () => null,
|
|
29
29
|
accent: void 0,
|
|
30
30
|
setAccent: () => null,
|
|
31
31
|
radius: void 0,
|
|
32
32
|
setRadius: () => null
|
|
33
|
-
},
|
|
33
|
+
}, on = pe(fo);
|
|
34
34
|
function pl({
|
|
35
35
|
children: e,
|
|
36
36
|
defaultTheme: t = "system",
|
|
@@ -78,20 +78,20 @@ function pl({
|
|
|
78
78
|
d ? window.localStorage.setItem(n + "-radius", d) : window.localStorage.removeItem(n + "-radius"), g(d);
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
return /* @__PURE__ */ i(
|
|
81
|
+
return /* @__PURE__ */ i(on.Provider, { ...r, value: h, children: e });
|
|
82
82
|
}
|
|
83
|
-
const hl = () => ke(
|
|
83
|
+
const hl = () => ke(on), rn = pe(null);
|
|
84
84
|
function at() {
|
|
85
|
-
const e = ke(
|
|
85
|
+
const e = ke(rn);
|
|
86
86
|
if (!e)
|
|
87
87
|
throw new Error("useGentiqApi() must be used within a <GentiqProvider>.");
|
|
88
88
|
return e;
|
|
89
89
|
}
|
|
90
90
|
function gl({ api: e, children: t }) {
|
|
91
|
-
return /* @__PURE__ */ i(
|
|
91
|
+
return /* @__PURE__ */ i(rn.Provider, { value: e, children: t });
|
|
92
92
|
}
|
|
93
93
|
const j = (e) => e;
|
|
94
|
-
function
|
|
94
|
+
function bo(e, t) {
|
|
95
95
|
const n = at(), [o, r] = P(
|
|
96
96
|
e.metadata?.feedback
|
|
97
97
|
), a = W((c) => {
|
|
@@ -117,7 +117,7 @@ function fo(e, t) {
|
|
|
117
117
|
copy: a
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
-
const
|
|
120
|
+
const yo = /* @__PURE__ */ new Set([
|
|
121
121
|
"ar",
|
|
122
122
|
"fa",
|
|
123
123
|
"he",
|
|
@@ -131,7 +131,7 @@ const bo = /* @__PURE__ */ new Set([
|
|
|
131
131
|
"arc",
|
|
132
132
|
"syc"
|
|
133
133
|
]);
|
|
134
|
-
function
|
|
134
|
+
function _o() {
|
|
135
135
|
const { i18n: e } = z(["translation"]), { app: t } = ge(), n = at(), o = de(() => {
|
|
136
136
|
const c = n.getConfig(), s = t || c.app;
|
|
137
137
|
return {
|
|
@@ -141,7 +141,7 @@ function yo() {
|
|
|
141
141
|
language: e.language || s?.language || "en",
|
|
142
142
|
showToolDetails: s?.showToolDetails ?? !0
|
|
143
143
|
};
|
|
144
|
-
}, [e.language, t, n]), r = (o.language ?? "").split("-")[0].toLowerCase(), a =
|
|
144
|
+
}, [e.language, t, n]), r = (o.language ?? "").split("-")[0].toLowerCase(), a = yo.has(r), l = t?.language;
|
|
145
145
|
return V(() => {
|
|
146
146
|
if (typeof window > "u") return;
|
|
147
147
|
const c = localStorage.getItem("gentiq-last-default-lang");
|
|
@@ -157,14 +157,14 @@ function yo() {
|
|
|
157
157
|
};
|
|
158
158
|
}
|
|
159
159
|
function v(...e) {
|
|
160
|
-
return go(
|
|
160
|
+
return mo(go(e));
|
|
161
161
|
}
|
|
162
162
|
function ml(e, t) {
|
|
163
163
|
if (t === "/") return e;
|
|
164
164
|
const n = e.endsWith("/") ? e.slice(0, -1) : e, o = t.startsWith("/") ? t : "/" + t;
|
|
165
165
|
return n + o;
|
|
166
166
|
}
|
|
167
|
-
const
|
|
167
|
+
const an = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
168
168
|
const n = $(e);
|
|
169
169
|
return n.length <= t ? n : `${n.slice(0, Math.max(0, t - 1)).trim()}...`;
|
|
170
170
|
}, ft = (e) => [
|
|
@@ -173,7 +173,7 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
173
173
|
e.partIndex,
|
|
174
174
|
e.kind,
|
|
175
175
|
$(e.excerpt)
|
|
176
|
-
].filter((t) => t !== void 0 && t !== "").join(":"),
|
|
176
|
+
].filter((t) => t !== void 0 && t !== "").join(":"), vo = (e) => ({
|
|
177
177
|
kind: e.dataset.gentiqReferenceKind || "card",
|
|
178
178
|
messageId: e.dataset.gentiqReferenceMessageId,
|
|
179
179
|
partIndex: e.dataset.gentiqReferencePartIndex ? Number(e.dataset.gentiqReferencePartIndex) : void 0,
|
|
@@ -181,7 +181,7 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
181
181
|
label: e.dataset.gentiqReferenceLabel || "Reference",
|
|
182
182
|
excerpt: e.dataset.gentiqReferenceExcerpt || $(e.textContent || ""),
|
|
183
183
|
role: e.dataset.gentiqReferenceRole
|
|
184
|
-
}), Ae = (e) => $(e).slice(0, 2e3),
|
|
184
|
+
}), Ae = (e) => $(e).slice(0, 2e3), ln = (e) => {
|
|
185
185
|
const t = document.createTreeWalker(e, NodeFilter.SHOW_TEXT), n = [];
|
|
186
186
|
let o = t.nextNode();
|
|
187
187
|
for (; o; )
|
|
@@ -197,7 +197,7 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
197
197
|
}
|
|
198
198
|
return null;
|
|
199
199
|
}, yt = (e, t, n) => {
|
|
200
|
-
const o =
|
|
200
|
+
const o = ln(e);
|
|
201
201
|
let r = 0;
|
|
202
202
|
for (const a of o) {
|
|
203
203
|
const l = a.nodeValue?.length || 0;
|
|
@@ -206,10 +206,10 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
206
206
|
r += l;
|
|
207
207
|
}
|
|
208
208
|
return null;
|
|
209
|
-
},
|
|
209
|
+
}, ko = (e, t) => {
|
|
210
210
|
const n = yt(e, t.startContainer, t.startOffset), o = yt(e, t.endContainer, t.endOffset);
|
|
211
211
|
return n === null || o === null || o <= n ? null : { textStart: n, textEnd: o };
|
|
212
|
-
},
|
|
212
|
+
}, wo = (e) => {
|
|
213
213
|
let t = "";
|
|
214
214
|
const n = [];
|
|
215
215
|
let o = !0;
|
|
@@ -220,7 +220,7 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
220
220
|
}
|
|
221
221
|
t += r, n.push(a), o = !1;
|
|
222
222
|
}), t.endsWith(" ") && (t = t.slice(0, -1), n.pop()), { normalized: t, map: n };
|
|
223
|
-
},
|
|
223
|
+
}, xo = (e) => {
|
|
224
224
|
let t = e.parentElement;
|
|
225
225
|
for (; t; ) {
|
|
226
226
|
const n = window.getComputedStyle(t);
|
|
@@ -228,8 +228,8 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
228
228
|
t = t.parentElement;
|
|
229
229
|
}
|
|
230
230
|
return null;
|
|
231
|
-
},
|
|
232
|
-
const t =
|
|
231
|
+
}, So = (e) => {
|
|
232
|
+
const t = xo(e);
|
|
233
233
|
if (!t) {
|
|
234
234
|
e.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
235
235
|
return;
|
|
@@ -239,7 +239,7 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
239
239
|
top: Math.max(0, r),
|
|
240
240
|
behavior: "smooth"
|
|
241
241
|
});
|
|
242
|
-
}, Ee = (e) => typeof CSS < "u" && CSS.escape ? CSS.escape(e) : e.replace(/"/g, '\\"'),
|
|
242
|
+
}, Ee = (e) => typeof CSS < "u" && CSS.escape ? CSS.escape(e) : e.replace(/"/g, '\\"'), Eo = (e) => {
|
|
243
243
|
if (e.sourceId) {
|
|
244
244
|
const r = document.querySelector(
|
|
245
245
|
`[data-gentiq-reference-source-id="${Ee(e.sourceId)}"]`
|
|
@@ -297,11 +297,11 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
297
297
|
if (c) return c;
|
|
298
298
|
}
|
|
299
299
|
return null;
|
|
300
|
-
},
|
|
300
|
+
}, sn = (e, t, n) => {
|
|
301
301
|
if (t < 0 || n <= t) return !1;
|
|
302
302
|
const o = e.textContent?.length || 0;
|
|
303
303
|
if (t > o || n > o) return !1;
|
|
304
|
-
const r =
|
|
304
|
+
const r = ln(e), a = bt(r, t), l = bt(r, n);
|
|
305
305
|
if (!a || !l) return !1;
|
|
306
306
|
const c = document.createRange();
|
|
307
307
|
c.setStart(a.node, a.offset), c.setEnd(l.node, l.offset);
|
|
@@ -321,19 +321,19 @@ const rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
|
|
|
321
321
|
u.removeChild(s), u.normalize();
|
|
322
322
|
}
|
|
323
323
|
}, 1800), s;
|
|
324
|
-
},
|
|
324
|
+
}, No = (e, t) => {
|
|
325
325
|
const n = e.textContent || "", o = t.replace(/\.\.\.$/, "").trim();
|
|
326
326
|
if (!o) return !1;
|
|
327
327
|
let r = n.indexOf(o), a = r + o.length;
|
|
328
328
|
if (r === -1) {
|
|
329
|
-
const l =
|
|
329
|
+
const l = wo(n), c = $(o), s = l.normalized.indexOf(c);
|
|
330
330
|
if (s !== -1) {
|
|
331
331
|
r = l.map[s];
|
|
332
332
|
const u = s + c.length - 1;
|
|
333
333
|
a = (l.map[u] ?? r) + 1;
|
|
334
334
|
}
|
|
335
335
|
}
|
|
336
|
-
return r === -1 || a <= r ? !1 :
|
|
336
|
+
return r === -1 || a <= r ? !1 : sn(e, r, a);
|
|
337
337
|
};
|
|
338
338
|
function fl({
|
|
339
339
|
enabled: e = !0,
|
|
@@ -351,7 +351,7 @@ function fl({
|
|
|
351
351
|
if (!b) return null;
|
|
352
352
|
const T = {
|
|
353
353
|
...x,
|
|
354
|
-
id: x.id || `ref_${
|
|
354
|
+
id: x.id || `ref_${en(10)}`,
|
|
355
355
|
label: Me(x.label || a("reference"), 90),
|
|
356
356
|
excerpt: Me(x.excerpt, o)
|
|
357
357
|
};
|
|
@@ -367,10 +367,10 @@ function fl({
|
|
|
367
367
|
c([]);
|
|
368
368
|
}, []), y = W((x) => {
|
|
369
369
|
if (typeof document > "u") return !1;
|
|
370
|
-
const T =
|
|
370
|
+
const T = Eo(x);
|
|
371
371
|
if (!T) return !1;
|
|
372
|
-
const O = typeof x.metadata?.textStart == "number" ? x.metadata.textStart : void 0, U = typeof x.metadata?.textEnd == "number" ? x.metadata.textEnd : void 0, q = x.kind === "text" ? O !== void 0 && U !== void 0 ?
|
|
373
|
-
return
|
|
372
|
+
const O = typeof x.metadata?.textStart == "number" ? x.metadata.textStart : void 0, U = typeof x.metadata?.textEnd == "number" ? x.metadata.textEnd : void 0, q = x.kind === "text" ? O !== void 0 && U !== void 0 ? sn(T, O, U) : No(T, x.excerpt) : !1;
|
|
373
|
+
return So(q || T), q || (T.classList.add("gentiq-reference-highlight"), m.current && window.clearTimeout(m.current), m.current = window.setTimeout(() => {
|
|
374
374
|
T.classList.remove("gentiq-reference-highlight"), m.current = null;
|
|
375
375
|
}, 1800)), !0;
|
|
376
376
|
}, []);
|
|
@@ -396,12 +396,12 @@ function fl({
|
|
|
396
396
|
u(null);
|
|
397
397
|
return;
|
|
398
398
|
}
|
|
399
|
-
const Se =
|
|
399
|
+
const Se = ko(Y, q), X = q.getBoundingClientRect();
|
|
400
400
|
if (!X.width && !X.height) {
|
|
401
401
|
u(null);
|
|
402
402
|
return;
|
|
403
403
|
}
|
|
404
|
-
const ee = g.current.get(Y.dataset.gentiqReferenceSourceId || "") ||
|
|
404
|
+
const ee = g.current.get(Y.dataset.gentiqReferenceSourceId || "") || vo(Y), N = Y.textContent || "";
|
|
405
405
|
u({
|
|
406
406
|
top: Math.max(8, X.top - 42),
|
|
407
407
|
left: X.left + X.width / 2,
|
|
@@ -452,9 +452,9 @@ function fl({
|
|
|
452
452
|
e
|
|
453
453
|
]
|
|
454
454
|
);
|
|
455
|
-
return /* @__PURE__ */ k(
|
|
455
|
+
return /* @__PURE__ */ k(an.Provider, { value: C, children: [
|
|
456
456
|
r,
|
|
457
|
-
s && typeof document < "u" &&
|
|
457
|
+
s && typeof document < "u" && co(
|
|
458
458
|
/* @__PURE__ */ i(
|
|
459
459
|
"button",
|
|
460
460
|
{
|
|
@@ -475,7 +475,7 @@ function fl({
|
|
|
475
475
|
] });
|
|
476
476
|
}
|
|
477
477
|
function it() {
|
|
478
|
-
const e = ke(
|
|
478
|
+
const e = ke(an);
|
|
479
479
|
return e || {
|
|
480
480
|
references: [],
|
|
481
481
|
addReference: () => null,
|
|
@@ -498,7 +498,7 @@ function Qe({
|
|
|
498
498
|
children: o,
|
|
499
499
|
...r
|
|
500
500
|
}) {
|
|
501
|
-
const { t: a } = z(["chat"]), { addReference: l, registerSource: c, unregisterSource: s, enabled: u } = it(), g = Z(null), m = Z(`source_${
|
|
501
|
+
const { t: a } = z(["chat"]), { addReference: l, registerSource: c, unregisterSource: s, enabled: u } = it(), g = Z(null), m = Z(`source_${en(8)}`), b = de(
|
|
502
502
|
() => e.sourceId || [e.messageId, e.partIndex, e.kind].filter(Boolean).join("-") || m.current,
|
|
503
503
|
[e.kind, e.messageId, e.partIndex, e.sourceId]
|
|
504
504
|
), p = de(
|
|
@@ -574,7 +574,7 @@ function fe(e) {
|
|
|
574
574
|
allowCustom: t.allowCustom !== !1
|
|
575
575
|
};
|
|
576
576
|
}
|
|
577
|
-
function
|
|
577
|
+
function Co(e) {
|
|
578
578
|
if (!e) return [];
|
|
579
579
|
const t = [], n = (r) => {
|
|
580
580
|
r && t.push({ type: "text", text: r });
|
|
@@ -597,7 +597,7 @@ function No(e) {
|
|
|
597
597
|
}
|
|
598
598
|
return t;
|
|
599
599
|
}
|
|
600
|
-
function
|
|
600
|
+
function To({ part: e, disabled: t, onAnswer: n }) {
|
|
601
601
|
const o = de(() => fe(e.data), [e.data]), [r, a] = P(""), [l, c] = P(null), [s, u] = P(!1);
|
|
602
602
|
if (!o) return null;
|
|
603
603
|
const g = t || s || l !== null || !n, m = async (p) => {
|
|
@@ -668,13 +668,13 @@ function Co({ part: e, disabled: t, onAnswer: n }) {
|
|
|
668
668
|
className: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground transition hover:bg-primary/90 focus-visible:ring-2 focus-visible:ring-primary/30 disabled:cursor-not-allowed disabled:opacity-50",
|
|
669
669
|
"aria-label": "Send custom answer",
|
|
670
670
|
title: "Send custom answer",
|
|
671
|
-
children: /* @__PURE__ */ i(
|
|
671
|
+
children: /* @__PURE__ */ i(Hn, { className: "size-4" })
|
|
672
672
|
}
|
|
673
673
|
)
|
|
674
674
|
] })
|
|
675
675
|
] }) });
|
|
676
676
|
}
|
|
677
|
-
function
|
|
677
|
+
function Ao(e) {
|
|
678
678
|
const {
|
|
679
679
|
part: t,
|
|
680
680
|
message: n,
|
|
@@ -687,7 +687,7 @@ function To(e) {
|
|
|
687
687
|
renderMessagePart: u,
|
|
688
688
|
chat: g,
|
|
689
689
|
readonly: m
|
|
690
|
-
} = e, { showToolDetails: b } =
|
|
690
|
+
} = e, { showToolDetails: b } = _o(), {
|
|
691
691
|
TextPart: p,
|
|
692
692
|
ReasoningPart: h,
|
|
693
693
|
ToolPart: d,
|
|
@@ -697,7 +697,7 @@ function To(e) {
|
|
|
697
697
|
toolComponents: C,
|
|
698
698
|
referenceAdapters: x,
|
|
699
699
|
threadActions: T
|
|
700
|
-
} = ge(), { feedback: O, handleFeedback: U, copy: q } =
|
|
700
|
+
} = ge(), { feedback: O, handleFeedback: U, copy: q } = bo(n, c), I = (N) => {
|
|
701
701
|
if (N.toolName) return N.toolName;
|
|
702
702
|
if (typeof N.type == "string" && N.type.startsWith("tool-")) {
|
|
703
703
|
const S = N.type.slice(5);
|
|
@@ -783,7 +783,7 @@ function To(e) {
|
|
|
783
783
|
}
|
|
784
784
|
},
|
|
785
785
|
ie
|
|
786
|
-
), S = j(t).text || "", L =
|
|
786
|
+
), S = j(t).text || "", L = Co(S);
|
|
787
787
|
if (!L.some((G) => G.type === "choice-question"))
|
|
788
788
|
return N(S, "text");
|
|
789
789
|
const Pe = n.parts.some(
|
|
@@ -876,18 +876,18 @@ const ze = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: v("
|
|
|
876
876
|
}
|
|
877
877
|
},
|
|
878
878
|
n
|
|
879
|
-
)) }),
|
|
879
|
+
)) }), Io = /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/;
|
|
880
880
|
function De(e, t = "ltr") {
|
|
881
881
|
if (!e) return t;
|
|
882
882
|
for (const n of e) {
|
|
883
|
-
if (
|
|
883
|
+
if (Io.test(n))
|
|
884
884
|
return "rtl";
|
|
885
885
|
if (/[A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8]/.test(n))
|
|
886
886
|
return "ltr";
|
|
887
887
|
}
|
|
888
888
|
return "ltr";
|
|
889
889
|
}
|
|
890
|
-
const
|
|
890
|
+
const Ro = ot(
|
|
891
891
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
892
892
|
{
|
|
893
893
|
variants: {
|
|
@@ -919,10 +919,10 @@ function _e({
|
|
|
919
919
|
asChild: o = !1,
|
|
920
920
|
...r
|
|
921
921
|
}) {
|
|
922
|
-
return /* @__PURE__ */ i(o ?
|
|
922
|
+
return /* @__PURE__ */ i(o ? Kt : "button", { "data-slot": "button", className: v(Ro({ variant: t, size: n, className: e })), ...r });
|
|
923
923
|
}
|
|
924
|
-
const
|
|
925
|
-
|
|
924
|
+
const Oo = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
925
|
+
tn,
|
|
926
926
|
{
|
|
927
927
|
className: v("relative flex-1 overflow-hidden", e),
|
|
928
928
|
initial: "smooth",
|
|
@@ -930,23 +930,23 @@ const Ro = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
|
930
930
|
role: "log",
|
|
931
931
|
...t
|
|
932
932
|
}
|
|
933
|
-
),
|
|
934
|
-
|
|
933
|
+
), Lo = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
934
|
+
tn.Content,
|
|
935
935
|
{
|
|
936
936
|
className: v("p-4 pb-6 stick-to-bottom", e),
|
|
937
937
|
scrollClassName: "custom-scrollbar",
|
|
938
938
|
...t
|
|
939
939
|
}
|
|
940
|
-
),
|
|
941
|
-
const { scrollToBottom: t } =
|
|
940
|
+
), Do = ({ status: e }) => {
|
|
941
|
+
const { scrollToBottom: t } = nn(), n = Z(e);
|
|
942
942
|
return V(() => {
|
|
943
943
|
e === "submitted" && n.current !== "submitted" && t(), n.current = e;
|
|
944
944
|
}, [e, t]), null;
|
|
945
|
-
},
|
|
945
|
+
}, Fo = ({
|
|
946
946
|
className: e,
|
|
947
947
|
...t
|
|
948
948
|
}) => {
|
|
949
|
-
const { isAtBottom: n, scrollToBottom: o } =
|
|
949
|
+
const { isAtBottom: n, scrollToBottom: o } = nn(), r = W(() => {
|
|
950
950
|
o();
|
|
951
951
|
}, [o]);
|
|
952
952
|
return n ? null : /* @__PURE__ */ i(
|
|
@@ -966,7 +966,7 @@ const Ro = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
|
966
966
|
type: "button",
|
|
967
967
|
"aria-label": "Scroll to bottom",
|
|
968
968
|
...t,
|
|
969
|
-
children: /* @__PURE__ */ i(
|
|
969
|
+
children: /* @__PURE__ */ i(jn, { className: "size-3.5" })
|
|
970
970
|
}
|
|
971
971
|
);
|
|
972
972
|
};
|
|
@@ -979,13 +979,13 @@ function st({ ...e }) {
|
|
|
979
979
|
function ct({ ...e }) {
|
|
980
980
|
return /* @__PURE__ */ i(rt.CollapsibleContent, { "data-slot": "collapsible-content", ...e });
|
|
981
981
|
}
|
|
982
|
-
const
|
|
982
|
+
const Po = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not-prose mb-4 text-primary text-xs", e), ...t }), Mo = ({ className: e, count: t, children: n, ...o }) => {
|
|
983
983
|
const { t: r } = z(["chat"]);
|
|
984
984
|
return /* @__PURE__ */ i(st, { className: v("flex items-center gap-2", e), ...o, children: n ?? /* @__PURE__ */ k(oe, { children: [
|
|
985
985
|
/* @__PURE__ */ i("p", { className: "font-medium", children: r("used_sources", { count: t }) }),
|
|
986
986
|
/* @__PURE__ */ i(we, { className: "h-4 w-4" })
|
|
987
987
|
] }) });
|
|
988
|
-
},
|
|
988
|
+
}, zo = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
989
989
|
ct,
|
|
990
990
|
{
|
|
991
991
|
className: v(
|
|
@@ -995,10 +995,10 @@ const Fo = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
995
995
|
),
|
|
996
996
|
...t
|
|
997
997
|
}
|
|
998
|
-
),
|
|
999
|
-
/* @__PURE__ */ i(
|
|
998
|
+
), Uo = ({ href: e, title: t, children: n, ...o }) => /* @__PURE__ */ i("a", { className: "flex items-center gap-2", href: e, rel: "noreferrer", target: "_blank", ...o, children: n ?? /* @__PURE__ */ k(oe, { children: [
|
|
999
|
+
/* @__PURE__ */ i(Gn, { className: "h-4 w-4" }),
|
|
1000
1000
|
/* @__PURE__ */ i("span", { className: "block font-medium", children: t })
|
|
1001
|
-
] }) }),
|
|
1001
|
+
] }) }), qo = ({
|
|
1002
1002
|
latestProgress: e,
|
|
1003
1003
|
parts: t
|
|
1004
1004
|
}) => {
|
|
@@ -1032,7 +1032,7 @@ const Fo = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
1032
1032
|
}
|
|
1033
1033
|
);
|
|
1034
1034
|
};
|
|
1035
|
-
function
|
|
1035
|
+
function $o({
|
|
1036
1036
|
messages: e,
|
|
1037
1037
|
status: t,
|
|
1038
1038
|
isLoadingHistory: n,
|
|
@@ -1044,29 +1044,29 @@ function qo({
|
|
|
1044
1044
|
readonly: s
|
|
1045
1045
|
}) {
|
|
1046
1046
|
const { i18n: u, t: g } = z(["chat", "translation"]), m = u.language === "fa", b = e[e.length - 1], p = b?.role === "assistant" && (t === "ready" || b.parts.some((h) => h.type === "data-chat-finished"));
|
|
1047
|
-
return /* @__PURE__ */ k(
|
|
1048
|
-
/* @__PURE__ */ i(
|
|
1049
|
-
/* @__PURE__ */ k(
|
|
1047
|
+
return /* @__PURE__ */ k(Oo, { className: v("min-h-0 flex-1", c), children: [
|
|
1048
|
+
/* @__PURE__ */ i(Do, { status: t }),
|
|
1049
|
+
/* @__PURE__ */ k(Lo, { className: "max-w-4xl mx-auto w-full px-4 md:px-0 pb-32", dir: "ltr", children: [
|
|
1050
1050
|
e.length === 0 && !n ? null : e.map((h) => /* @__PURE__ */ k(
|
|
1051
1051
|
"div",
|
|
1052
1052
|
{
|
|
1053
1053
|
"data-gentiq-message-id": h.id,
|
|
1054
1054
|
"data-gentiq-message-role": h.role,
|
|
1055
1055
|
children: [
|
|
1056
|
-
h.role === "assistant" && h.parts.filter((d) => d.type === "source-url").length > 0 && /* @__PURE__ */ k(
|
|
1056
|
+
h.role === "assistant" && h.parts.filter((d) => d.type === "source-url").length > 0 && /* @__PURE__ */ k(Po, { children: [
|
|
1057
1057
|
/* @__PURE__ */ i(
|
|
1058
|
-
|
|
1058
|
+
Mo,
|
|
1059
1059
|
{
|
|
1060
1060
|
count: h.parts.filter((d) => d.type === "source-url").length
|
|
1061
1061
|
}
|
|
1062
1062
|
),
|
|
1063
1063
|
h.parts.filter((d) => d.type === "source-url").map((d, w) => {
|
|
1064
1064
|
const _ = j(d).url;
|
|
1065
|
-
return /* @__PURE__ */ i(
|
|
1065
|
+
return /* @__PURE__ */ i(zo, { children: /* @__PURE__ */ i(Uo, { href: _, title: _ }, `${h.id}-${w}`) }, `${h.id}-${w}`);
|
|
1066
1066
|
})
|
|
1067
1067
|
] }),
|
|
1068
1068
|
h.parts.map((d, w) => /* @__PURE__ */ i(
|
|
1069
|
-
|
|
1069
|
+
Ao,
|
|
1070
1070
|
{
|
|
1071
1071
|
part: d,
|
|
1072
1072
|
message: h,
|
|
@@ -1090,7 +1090,7 @@ function qo({
|
|
|
1090
1090
|
const h = b.parts.filter((w) => w.type === "data-progress-update");
|
|
1091
1091
|
if (h.length === 0) return null;
|
|
1092
1092
|
const d = h[h.length - 1];
|
|
1093
|
-
return d ? /* @__PURE__ */ i(
|
|
1093
|
+
return d ? /* @__PURE__ */ i(qo, { latestProgress: d, parts: b.parts }) : null;
|
|
1094
1094
|
})(),
|
|
1095
1095
|
(n || t === "submitted") && /* @__PURE__ */ i("div", { className: "animate-in-bubble", children: /* @__PURE__ */ i(ze, {}) }),
|
|
1096
1096
|
t === "streaming" && (() => {
|
|
@@ -1128,10 +1128,10 @@ function qo({
|
|
|
1128
1128
|
}
|
|
1129
1129
|
) })
|
|
1130
1130
|
] }),
|
|
1131
|
-
/* @__PURE__ */ i(
|
|
1131
|
+
/* @__PURE__ */ i(Fo, {})
|
|
1132
1132
|
] });
|
|
1133
1133
|
}
|
|
1134
|
-
function
|
|
1134
|
+
function Bo({ className: e, ...t }) {
|
|
1135
1135
|
return /* @__PURE__ */ i(
|
|
1136
1136
|
"textarea",
|
|
1137
1137
|
{
|
|
@@ -1144,7 +1144,7 @@ function $o({ className: e, ...t }) {
|
|
|
1144
1144
|
}
|
|
1145
1145
|
);
|
|
1146
1146
|
}
|
|
1147
|
-
const
|
|
1147
|
+
const Ho = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg-transparent w-full", children: /* @__PURE__ */ i(
|
|
1148
1148
|
"form",
|
|
1149
1149
|
{
|
|
1150
1150
|
className: v(
|
|
@@ -1159,7 +1159,7 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1159
1159
|
),
|
|
1160
1160
|
...t
|
|
1161
1161
|
}
|
|
1162
|
-
) }),
|
|
1162
|
+
) }), jo = ({
|
|
1163
1163
|
onChange: e,
|
|
1164
1164
|
className: t,
|
|
1165
1165
|
placeholder: n = "What would you like to know?",
|
|
@@ -1175,7 +1175,7 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1175
1175
|
}
|
|
1176
1176
|
}, { i18n: a } = z(["chat"]), l = De(o.value, a.dir());
|
|
1177
1177
|
return /* @__PURE__ */ i(
|
|
1178
|
-
|
|
1178
|
+
Bo,
|
|
1179
1179
|
{
|
|
1180
1180
|
dir: l,
|
|
1181
1181
|
className: v(
|
|
@@ -1196,13 +1196,13 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1196
1196
|
...o
|
|
1197
1197
|
}
|
|
1198
1198
|
);
|
|
1199
|
-
},
|
|
1199
|
+
}, Go = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: v("flex shrink-0 items-center gap-1.5 pb-1", e), ...t }), Wo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: v("flex items-center gap-0.5", e), ...t }), Vo = ({
|
|
1200
1200
|
variant: e = "ghost",
|
|
1201
1201
|
className: t,
|
|
1202
1202
|
size: n,
|
|
1203
1203
|
...o
|
|
1204
1204
|
}) => {
|
|
1205
|
-
const r = n ??
|
|
1205
|
+
const r = n ?? $n.count(o.children) > 1 ? "default" : "icon";
|
|
1206
1206
|
return /* @__PURE__ */ i(
|
|
1207
1207
|
_e,
|
|
1208
1208
|
{
|
|
@@ -1220,7 +1220,7 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1220
1220
|
...o
|
|
1221
1221
|
}
|
|
1222
1222
|
);
|
|
1223
|
-
},
|
|
1223
|
+
}, Yo = ({
|
|
1224
1224
|
className: e,
|
|
1225
1225
|
variant: t = "default",
|
|
1226
1226
|
size: n = "icon",
|
|
@@ -1228,8 +1228,8 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1228
1228
|
children: r,
|
|
1229
1229
|
...a
|
|
1230
1230
|
}) => {
|
|
1231
|
-
let l = /* @__PURE__ */ i(
|
|
1232
|
-
return o === "submitted" ? (l = /* @__PURE__ */ i(
|
|
1231
|
+
let l = /* @__PURE__ */ i(Wn, { className: "size-4" }), c = "Send message";
|
|
1232
|
+
return o === "submitted" ? (l = /* @__PURE__ */ i(Vn, { className: "size-4 animate-spin" }), c = "Sending…") : o === "streaming" ? (l = /* @__PURE__ */ i(Yn, { className: "size-3.5 fill-current" }), c = "Stop generation") : o === "error" && (l = /* @__PURE__ */ i(be, { className: "size-4" }), c = "Error — try again"), /* @__PURE__ */ i(
|
|
1233
1233
|
_e,
|
|
1234
1234
|
{
|
|
1235
1235
|
"aria-label": c,
|
|
@@ -1255,16 +1255,16 @@ const Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg
|
|
|
1255
1255
|
}
|
|
1256
1256
|
);
|
|
1257
1257
|
};
|
|
1258
|
-
function
|
|
1258
|
+
function cn({ delayDuration: e = 400, ...t }) {
|
|
1259
1259
|
return /* @__PURE__ */ i(ce.Provider, { "data-slot": "tooltip-provider", delayDuration: e, ...t });
|
|
1260
1260
|
}
|
|
1261
|
-
function cn({ ...e }) {
|
|
1262
|
-
return /* @__PURE__ */ i(sn, { children: /* @__PURE__ */ i(ce.Root, { "data-slot": "tooltip", ...e }) });
|
|
1263
|
-
}
|
|
1264
1261
|
function un({ ...e }) {
|
|
1262
|
+
return /* @__PURE__ */ i(cn, { children: /* @__PURE__ */ i(ce.Root, { "data-slot": "tooltip", ...e }) });
|
|
1263
|
+
}
|
|
1264
|
+
function dn({ ...e }) {
|
|
1265
1265
|
return /* @__PURE__ */ i(ce.Trigger, { "data-slot": "tooltip-trigger", ...e });
|
|
1266
1266
|
}
|
|
1267
|
-
function
|
|
1267
|
+
function pn({
|
|
1268
1268
|
className: e,
|
|
1269
1269
|
sideOffset: t = 0,
|
|
1270
1270
|
children: n,
|
|
@@ -1288,7 +1288,7 @@ function dn({
|
|
|
1288
1288
|
) });
|
|
1289
1289
|
}
|
|
1290
1290
|
const Ue = 768;
|
|
1291
|
-
function
|
|
1291
|
+
function Xo() {
|
|
1292
1292
|
const [e, t] = Ke.useState(void 0);
|
|
1293
1293
|
return Ke.useEffect(() => {
|
|
1294
1294
|
const n = window.matchMedia(`(max-width: ${Ue - 1}px)`), o = () => {
|
|
@@ -1299,10 +1299,10 @@ function Yo() {
|
|
|
1299
1299
|
};
|
|
1300
1300
|
}, []), !!e;
|
|
1301
1301
|
}
|
|
1302
|
-
const
|
|
1303
|
-
function
|
|
1304
|
-
const { app: t } = ge(), n = at(), o = t?.cacheNamespace || "gentiq", r =
|
|
1305
|
-
queryKey:
|
|
1302
|
+
const Ko = (e) => [e, "currentUser"];
|
|
1303
|
+
function Qo(e = {}) {
|
|
1304
|
+
const { app: t } = ge(), n = at(), o = t?.cacheNamespace || "gentiq", r = uo({
|
|
1305
|
+
queryKey: Ko(o),
|
|
1306
1306
|
queryFn: () => n.getMe(),
|
|
1307
1307
|
enabled: e.enabled ?? !0
|
|
1308
1308
|
}), a = r.data ?? null, l = a?.name.trim() || null;
|
|
@@ -1312,10 +1312,10 @@ function Ko(e = {}) {
|
|
|
1312
1312
|
firstName: l
|
|
1313
1313
|
};
|
|
1314
1314
|
}
|
|
1315
|
-
function
|
|
1315
|
+
function hn({
|
|
1316
1316
|
enabled: e = !0
|
|
1317
1317
|
} = {}) {
|
|
1318
|
-
const { t, i18n: n } = z(["chat", "translation"]), { welcome: o } = ge(), r = typeof o?.greeting == "function", a = typeof o?.typingPrompts == "function", { user: l, firstName: c, isLoading: s } =
|
|
1318
|
+
const { t, i18n: n } = z(["chat", "translation"]), { welcome: o } = ge(), r = typeof o?.greeting == "function", a = typeof o?.typingPrompts == "function", { user: l, firstName: c, isLoading: s } = Qo({
|
|
1319
1319
|
enabled: e && (r || a)
|
|
1320
1320
|
}), g = (typeof o?.typingPrompts == "function" ? o.typingPrompts({ user: l, firstName: c, isLoading: s, t }) : o?.typingPrompts ?? []).map((h) => t(h)).filter((h) => h !== null && h !== ""), m = o?.greeting, b = typeof m == "function" ? m({ user: l, firstName: c, isLoading: s, t }) : m ? t(m) ?? m : t("welcome.title"), p = o?.subtitle ? t(o.subtitle) : null;
|
|
1321
1321
|
return {
|
|
@@ -1326,8 +1326,8 @@ function pn({
|
|
|
1326
1326
|
icon: o?.icon
|
|
1327
1327
|
};
|
|
1328
1328
|
}
|
|
1329
|
-
const
|
|
1330
|
-
function
|
|
1329
|
+
const Zo = () => typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
1330
|
+
function Jo(e, t = {}) {
|
|
1331
1331
|
const { typingSpeed: n = 20, deletingSpeed: o = 15, pauseMs: r = 2e3, startDelayMs: a = 250 } = t, l = e.join("\0"), [c, s] = P(""), u = Z(e);
|
|
1332
1332
|
return u.current = e, V(() => {
|
|
1333
1333
|
const g = u.current;
|
|
@@ -1336,7 +1336,7 @@ function Zo(e, t = {}) {
|
|
|
1336
1336
|
return;
|
|
1337
1337
|
}
|
|
1338
1338
|
let m, b = 0, p = "typing", h = 0;
|
|
1339
|
-
if (
|
|
1339
|
+
if (Zo()) {
|
|
1340
1340
|
s(g[0]);
|
|
1341
1341
|
const _ = setInterval(() => {
|
|
1342
1342
|
b = (b + 1) % g.length, s(g[b]);
|
|
@@ -1358,7 +1358,7 @@ function Zo(e, t = {}) {
|
|
|
1358
1358
|
return s(""), m = setTimeout(w, a), () => clearTimeout(m);
|
|
1359
1359
|
}, [l, n, o, r, a]), c;
|
|
1360
1360
|
}
|
|
1361
|
-
function
|
|
1361
|
+
function er({
|
|
1362
1362
|
onSend: e,
|
|
1363
1363
|
status: t,
|
|
1364
1364
|
isLastMessageFinished: n,
|
|
@@ -1368,7 +1368,7 @@ function Jo({
|
|
|
1368
1368
|
newChat: l,
|
|
1369
1369
|
className: c
|
|
1370
1370
|
}) {
|
|
1371
|
-
const { t: s } = z(["chat", "translation"]), { composer: u } = ge(), { typingMessages: g } =
|
|
1371
|
+
const { t: s } = z(["chat", "translation"]), { composer: u } = ge(), { typingMessages: g } = hn({ enabled: !!l }), m = Jo(l ? g : []), b = !!l && g.length > 0, p = u?.placeholder ? s(u.placeholder) : s("input_placeholder"), h = b ? m : p, [d, w] = P(""), [_, y] = P([]), C = Xo(), {
|
|
1372
1372
|
references: x,
|
|
1373
1373
|
removeReference: T,
|
|
1374
1374
|
clearReferences: O,
|
|
@@ -1387,7 +1387,7 @@ function Jo({
|
|
|
1387
1387
|
if (S.target.files) {
|
|
1388
1388
|
const L = Array.from(S.target.files), D = u?.attachments?.maxSize;
|
|
1389
1389
|
if (D && L.filter((Pe) => Pe.size > D).length > 0) {
|
|
1390
|
-
|
|
1390
|
+
so.error(s("file_too_large", { size: D }));
|
|
1391
1391
|
return;
|
|
1392
1392
|
}
|
|
1393
1393
|
y((Q) => [...Q, ...L]);
|
|
@@ -1403,7 +1403,7 @@ function Jo({
|
|
|
1403
1403
|
_.forEach((D) => L.items.add(D)), e(d, L.files, x), w(""), y([]), O();
|
|
1404
1404
|
}
|
|
1405
1405
|
};
|
|
1406
|
-
return /* @__PURE__ */ i("div", { className: v("shrink-0 px-4 pb-5 pt-2 md:px-6 md:pb-6 w-full", c), children: /* @__PURE__ */ i("div", { className: "max-w-[50rem] mx-auto w-full", children: /* @__PURE__ */ k(
|
|
1406
|
+
return /* @__PURE__ */ i("div", { className: v("shrink-0 px-4 pb-5 pt-2 md:px-6 md:pb-6 w-full", c), children: /* @__PURE__ */ i("div", { className: "max-w-[50rem] mx-auto w-full", children: /* @__PURE__ */ k(Ho, { onSubmit: N, children: [
|
|
1407
1407
|
/* @__PURE__ */ i(
|
|
1408
1408
|
"input",
|
|
1409
1409
|
{
|
|
@@ -1463,7 +1463,7 @@ function Jo({
|
|
|
1463
1463
|
alt: S.name,
|
|
1464
1464
|
className: "size-7 rounded-lg object-cover ring-1 ring-border/50"
|
|
1465
1465
|
}
|
|
1466
|
-
) : /* @__PURE__ */ i(
|
|
1466
|
+
) : /* @__PURE__ */ i(Qt, { className: "size-3.5 text-muted-foreground shrink-0" }),
|
|
1467
1467
|
/* @__PURE__ */ i("span", { className: "max-w-[120px] truncate text-xs font-medium text-foreground/80", children: S.name }),
|
|
1468
1468
|
/* @__PURE__ */ i(
|
|
1469
1469
|
"button",
|
|
@@ -1480,7 +1480,7 @@ function Jo({
|
|
|
1480
1480
|
`${S.name}-${L}`
|
|
1481
1481
|
)) }),
|
|
1482
1482
|
/* @__PURE__ */ i(
|
|
1483
|
-
|
|
1483
|
+
jo,
|
|
1484
1484
|
{
|
|
1485
1485
|
ref: I,
|
|
1486
1486
|
onChange: (S) => w(S.target.value),
|
|
@@ -1492,22 +1492,22 @@ function Jo({
|
|
|
1492
1492
|
}
|
|
1493
1493
|
)
|
|
1494
1494
|
] }),
|
|
1495
|
-
/* @__PURE__ */ k(
|
|
1496
|
-
/* @__PURE__ */ i(
|
|
1497
|
-
/* @__PURE__ */ i(
|
|
1498
|
-
|
|
1495
|
+
/* @__PURE__ */ k(Go, { children: [
|
|
1496
|
+
/* @__PURE__ */ i(Wo, { children: (u?.attachments?.enabled ?? !1) && /* @__PURE__ */ k(un, { children: [
|
|
1497
|
+
/* @__PURE__ */ i(dn, { asChild: !0, children: /* @__PURE__ */ i(
|
|
1498
|
+
Vo,
|
|
1499
1499
|
{
|
|
1500
1500
|
variant: "ghost",
|
|
1501
1501
|
onClick: () => me.current?.click(),
|
|
1502
1502
|
disabled: ee,
|
|
1503
1503
|
"aria-label": s("attach_file"),
|
|
1504
|
-
children: /* @__PURE__ */ i(
|
|
1504
|
+
children: /* @__PURE__ */ i(Xn, { className: "size-4" })
|
|
1505
1505
|
}
|
|
1506
1506
|
) }),
|
|
1507
|
-
/* @__PURE__ */ i(
|
|
1507
|
+
/* @__PURE__ */ i(pn, { children: s("attach_file") })
|
|
1508
1508
|
] }) }),
|
|
1509
1509
|
/* @__PURE__ */ i(
|
|
1510
|
-
|
|
1510
|
+
Yo,
|
|
1511
1511
|
{
|
|
1512
1512
|
disabled: t !== "streaming" && !d && _.length === 0 && x.length === 0,
|
|
1513
1513
|
status: r ? "error" : t === "error" ? void 0 : n ? "ready" : (
|
|
@@ -1520,8 +1520,8 @@ function Jo({
|
|
|
1520
1520
|
] })
|
|
1521
1521
|
] }) }) });
|
|
1522
1522
|
}
|
|
1523
|
-
const
|
|
1524
|
-
const { title: t, subtitle: n, isRtl: o, icon: r } =
|
|
1523
|
+
const tr = (e) => {
|
|
1524
|
+
const { title: t, subtitle: n, isRtl: o, icon: r } = hn();
|
|
1525
1525
|
return /* @__PURE__ */ k(
|
|
1526
1526
|
"div",
|
|
1527
1527
|
{
|
|
@@ -1539,7 +1539,7 @@ const er = (e) => {
|
|
|
1539
1539
|
]
|
|
1540
1540
|
}
|
|
1541
1541
|
);
|
|
1542
|
-
},
|
|
1542
|
+
}, gn = ({ className: e, from: t, ...n }) => /* @__PURE__ */ i(
|
|
1543
1543
|
"div",
|
|
1544
1544
|
{
|
|
1545
1545
|
className: v(
|
|
@@ -1549,7 +1549,7 @@ const er = (e) => {
|
|
|
1549
1549
|
),
|
|
1550
1550
|
...n
|
|
1551
1551
|
}
|
|
1552
|
-
),
|
|
1552
|
+
), mn = ({ children: e, className: t, isPlain: n, ...o }) => /* @__PURE__ */ i(
|
|
1553
1553
|
"div",
|
|
1554
1554
|
{
|
|
1555
1555
|
className: v(
|
|
@@ -1573,7 +1573,7 @@ const er = (e) => {
|
|
|
1573
1573
|
...o,
|
|
1574
1574
|
children: e
|
|
1575
1575
|
}
|
|
1576
|
-
),
|
|
1576
|
+
), nr = ({ className: e, children: t, ...n }) => /* @__PURE__ */ i(
|
|
1577
1577
|
"div",
|
|
1578
1578
|
{
|
|
1579
1579
|
className: v(
|
|
@@ -1615,9 +1615,9 @@ const er = (e) => {
|
|
|
1615
1615
|
]
|
|
1616
1616
|
}
|
|
1617
1617
|
);
|
|
1618
|
-
return e ? /* @__PURE__ */ i(
|
|
1619
|
-
/* @__PURE__ */ i(
|
|
1620
|
-
/* @__PURE__ */ i(
|
|
1618
|
+
return e ? /* @__PURE__ */ i(cn, { children: /* @__PURE__ */ k(un, { children: [
|
|
1619
|
+
/* @__PURE__ */ i(dn, { asChild: !0, children: c }),
|
|
1620
|
+
/* @__PURE__ */ i(pn, { children: /* @__PURE__ */ i("p", { children: e }) })
|
|
1621
1621
|
] }) }) : c;
|
|
1622
1622
|
};
|
|
1623
1623
|
class xe {
|
|
@@ -1638,7 +1638,7 @@ class xe {
|
|
|
1638
1638
|
xe.prototype.normal = {};
|
|
1639
1639
|
xe.prototype.property = {};
|
|
1640
1640
|
xe.prototype.space = void 0;
|
|
1641
|
-
function
|
|
1641
|
+
function fn(e, t) {
|
|
1642
1642
|
const n = {}, o = {};
|
|
1643
1643
|
for (const r of e)
|
|
1644
1644
|
Object.assign(n, r.property), Object.assign(o, r.normal);
|
|
@@ -1672,10 +1672,10 @@ B.prototype.overloadedBoolean = !1;
|
|
|
1672
1672
|
B.prototype.property = "";
|
|
1673
1673
|
B.prototype.spaceSeparated = !1;
|
|
1674
1674
|
B.prototype.space = void 0;
|
|
1675
|
-
let
|
|
1675
|
+
let or = 0;
|
|
1676
1676
|
const E = re(), F = re(), Ze = re(), f = re(), A = re(), ue = re(), H = re();
|
|
1677
1677
|
function re() {
|
|
1678
|
-
return 2 ** ++
|
|
1678
|
+
return 2 ** ++or;
|
|
1679
1679
|
}
|
|
1680
1680
|
const Je = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1681
1681
|
__proto__: null,
|
|
@@ -1730,7 +1730,7 @@ function he(e) {
|
|
|
1730
1730
|
}
|
|
1731
1731
|
return new xe(t, n, e.space);
|
|
1732
1732
|
}
|
|
1733
|
-
const
|
|
1733
|
+
const bn = he({
|
|
1734
1734
|
properties: {
|
|
1735
1735
|
ariaActiveDescendant: null,
|
|
1736
1736
|
ariaAtomic: F,
|
|
@@ -1786,13 +1786,13 @@ const fn = he({
|
|
|
1786
1786
|
return t === "role" ? t : "aria-" + t.slice(4).toLowerCase();
|
|
1787
1787
|
}
|
|
1788
1788
|
});
|
|
1789
|
-
function
|
|
1789
|
+
function yn(e, t) {
|
|
1790
1790
|
return t in e ? e[t] : t;
|
|
1791
1791
|
}
|
|
1792
|
-
function
|
|
1793
|
-
return
|
|
1792
|
+
function _n(e, t) {
|
|
1793
|
+
return yn(e, t.toLowerCase());
|
|
1794
1794
|
}
|
|
1795
|
-
const
|
|
1795
|
+
const rr = he({
|
|
1796
1796
|
attributes: {
|
|
1797
1797
|
acceptcharset: "accept-charset",
|
|
1798
1798
|
classname: "class",
|
|
@@ -2152,8 +2152,8 @@ const or = he({
|
|
|
2152
2152
|
unselectable: null
|
|
2153
2153
|
},
|
|
2154
2154
|
space: "html",
|
|
2155
|
-
transform:
|
|
2156
|
-
}),
|
|
2155
|
+
transform: _n
|
|
2156
|
+
}), ar = he({
|
|
2157
2157
|
attributes: {
|
|
2158
2158
|
accentHeight: "accent-height",
|
|
2159
2159
|
alignmentBaseline: "alignment-baseline",
|
|
@@ -2711,8 +2711,8 @@ const or = he({
|
|
|
2711
2711
|
zoomAndPan: null
|
|
2712
2712
|
},
|
|
2713
2713
|
space: "svg",
|
|
2714
|
-
transform:
|
|
2715
|
-
}),
|
|
2714
|
+
transform: yn
|
|
2715
|
+
}), vn = he({
|
|
2716
2716
|
properties: {
|
|
2717
2717
|
xLinkActuate: null,
|
|
2718
2718
|
xLinkArcRole: null,
|
|
@@ -2726,31 +2726,31 @@ const or = he({
|
|
|
2726
2726
|
transform(e, t) {
|
|
2727
2727
|
return "xlink:" + t.slice(5).toLowerCase();
|
|
2728
2728
|
}
|
|
2729
|
-
}),
|
|
2729
|
+
}), kn = he({
|
|
2730
2730
|
attributes: { xmlnsxlink: "xmlns:xlink" },
|
|
2731
2731
|
properties: { xmlnsXLink: null, xmlns: null },
|
|
2732
2732
|
space: "xmlns",
|
|
2733
|
-
transform:
|
|
2734
|
-
}),
|
|
2733
|
+
transform: _n
|
|
2734
|
+
}), wn = he({
|
|
2735
2735
|
properties: { xmlBase: null, xmlLang: null, xmlSpace: null },
|
|
2736
2736
|
space: "xml",
|
|
2737
2737
|
transform(e, t) {
|
|
2738
2738
|
return "xml:" + t.slice(3).toLowerCase();
|
|
2739
2739
|
}
|
|
2740
|
-
}),
|
|
2741
|
-
function
|
|
2740
|
+
}), ir = /[A-Z]/g, wt = /-[a-z]/g, lr = /^data[-\w.:]+$/i;
|
|
2741
|
+
function sr(e, t) {
|
|
2742
2742
|
const n = ve(t);
|
|
2743
2743
|
let o = t, r = B;
|
|
2744
2744
|
if (n in e.normal)
|
|
2745
2745
|
return e.property[e.normal[n]];
|
|
2746
|
-
if (n.length > 4 && n.slice(0, 4) === "data" &&
|
|
2746
|
+
if (n.length > 4 && n.slice(0, 4) === "data" && lr.test(t)) {
|
|
2747
2747
|
if (t.charAt(4) === "-") {
|
|
2748
|
-
const a = t.slice(5).replace(wt,
|
|
2748
|
+
const a = t.slice(5).replace(wt, ur);
|
|
2749
2749
|
o = "data" + a.charAt(0).toUpperCase() + a.slice(1);
|
|
2750
2750
|
} else {
|
|
2751
2751
|
const a = t.slice(4);
|
|
2752
2752
|
if (!wt.test(a)) {
|
|
2753
|
-
let l = a.replace(
|
|
2753
|
+
let l = a.replace(ir, cr);
|
|
2754
2754
|
l.charAt(0) !== "-" && (l = "-" + l), t = "data" + l;
|
|
2755
2755
|
}
|
|
2756
2756
|
}
|
|
@@ -2758,13 +2758,13 @@ function lr(e, t) {
|
|
|
2758
2758
|
}
|
|
2759
2759
|
return new r(o, t);
|
|
2760
2760
|
}
|
|
2761
|
-
function
|
|
2761
|
+
function cr(e) {
|
|
2762
2762
|
return "-" + e.toLowerCase();
|
|
2763
2763
|
}
|
|
2764
|
-
function
|
|
2764
|
+
function ur(e) {
|
|
2765
2765
|
return e.charAt(1).toUpperCase();
|
|
2766
2766
|
}
|
|
2767
|
-
const
|
|
2767
|
+
const dr = fn([bn, rr, vn, kn, wn], "html"), pr = fn([bn, ar, vn, kn, wn], "svg");
|
|
2768
2768
|
function xt(e) {
|
|
2769
2769
|
const t = [], n = String(e || "");
|
|
2770
2770
|
let o = n.indexOf(","), r = 0, a = !1;
|
|
@@ -2776,7 +2776,7 @@ function xt(e) {
|
|
|
2776
2776
|
return t;
|
|
2777
2777
|
}
|
|
2778
2778
|
const St = /[#.]/g;
|
|
2779
|
-
function
|
|
2779
|
+
function hr(e, t) {
|
|
2780
2780
|
const n = e || "", o = {};
|
|
2781
2781
|
let r = 0, a, l;
|
|
2782
2782
|
for (; r < n.length; ) {
|
|
@@ -2796,8 +2796,8 @@ function Et(e) {
|
|
|
2796
2796
|
const t = String(e || "").trim();
|
|
2797
2797
|
return t ? t.split(/[ \t\n\r\f]+/g) : [];
|
|
2798
2798
|
}
|
|
2799
|
-
function
|
|
2800
|
-
const o = n ?
|
|
2799
|
+
function xn(e, t, n) {
|
|
2800
|
+
const o = n ? br(n) : void 0;
|
|
2801
2801
|
function r(a, l, ...c) {
|
|
2802
2802
|
let s;
|
|
2803
2803
|
if (a == null) {
|
|
@@ -2808,13 +2808,13 @@ function wn(e, t, n) {
|
|
|
2808
2808
|
);
|
|
2809
2809
|
c.unshift(u);
|
|
2810
2810
|
} else {
|
|
2811
|
-
s =
|
|
2811
|
+
s = hr(a, t);
|
|
2812
2812
|
const u = s.tagName.toLowerCase(), g = o ? o.get(u) : void 0;
|
|
2813
|
-
if (s.tagName = g || u,
|
|
2813
|
+
if (s.tagName = g || u, gr(l))
|
|
2814
2814
|
c.unshift(l);
|
|
2815
2815
|
else
|
|
2816
2816
|
for (const [m, b] of Object.entries(l))
|
|
2817
|
-
|
|
2817
|
+
mr(e, s.properties, m, b);
|
|
2818
2818
|
}
|
|
2819
2819
|
for (const u of c)
|
|
2820
2820
|
et(s.children, u);
|
|
@@ -2822,7 +2822,7 @@ function wn(e, t, n) {
|
|
|
2822
2822
|
}
|
|
2823
2823
|
return r;
|
|
2824
2824
|
}
|
|
2825
|
-
function
|
|
2825
|
+
function gr(e) {
|
|
2826
2826
|
if (e === null || typeof e != "object" || Array.isArray(e))
|
|
2827
2827
|
return !0;
|
|
2828
2828
|
if (typeof e.type != "string") return !1;
|
|
@@ -2845,14 +2845,14 @@ function hr(e) {
|
|
|
2845
2845
|
}
|
|
2846
2846
|
return !!("children" in e && Array.isArray(e.children));
|
|
2847
2847
|
}
|
|
2848
|
-
function
|
|
2849
|
-
const r =
|
|
2848
|
+
function mr(e, t, n, o) {
|
|
2849
|
+
const r = sr(e, n);
|
|
2850
2850
|
let a;
|
|
2851
2851
|
if (o != null) {
|
|
2852
2852
|
if (typeof o == "number") {
|
|
2853
2853
|
if (Number.isNaN(o)) return;
|
|
2854
2854
|
a = o;
|
|
2855
|
-
} else typeof o == "boolean" ? a = o : typeof o == "string" ? r.spaceSeparated ? a = Et(o) : r.commaSeparated ? a = xt(o) : r.commaOrSpaceSeparated ? a = Et(xt(o).join(" ")) : a = Nt(r, r.property, o) : Array.isArray(o) ? a = [...o] : a = r.property === "style" ?
|
|
2855
|
+
} else typeof o == "boolean" ? a = o : typeof o == "string" ? r.spaceSeparated ? a = Et(o) : r.commaSeparated ? a = xt(o) : r.commaOrSpaceSeparated ? a = Et(xt(o).join(" ")) : a = Nt(r, r.property, o) : Array.isArray(o) ? a = [...o] : a = r.property === "style" ? fr(o) : String(o);
|
|
2856
2856
|
if (Array.isArray(a)) {
|
|
2857
2857
|
const l = [];
|
|
2858
2858
|
for (const c of a)
|
|
@@ -2888,19 +2888,19 @@ function Nt(e, t, n) {
|
|
|
2888
2888
|
}
|
|
2889
2889
|
return n;
|
|
2890
2890
|
}
|
|
2891
|
-
function
|
|
2891
|
+
function fr(e) {
|
|
2892
2892
|
const t = [];
|
|
2893
2893
|
for (const [n, o] of Object.entries(e))
|
|
2894
2894
|
t.push([n, o].join(": "));
|
|
2895
2895
|
return t.join("; ");
|
|
2896
2896
|
}
|
|
2897
|
-
function
|
|
2897
|
+
function br(e) {
|
|
2898
2898
|
const t = /* @__PURE__ */ new Map();
|
|
2899
2899
|
for (const n of e)
|
|
2900
2900
|
t.set(n.toLowerCase(), n);
|
|
2901
2901
|
return t;
|
|
2902
2902
|
}
|
|
2903
|
-
const
|
|
2903
|
+
const yr = [
|
|
2904
2904
|
"altGlyph",
|
|
2905
2905
|
"altGlyphDef",
|
|
2906
2906
|
"altGlyphItem",
|
|
@@ -2940,28 +2940,28 @@ const br = [
|
|
|
2940
2940
|
"solidColor",
|
|
2941
2941
|
"textArea",
|
|
2942
2942
|
"textPath"
|
|
2943
|
-
],
|
|
2943
|
+
], _r = xn(dr, "div"), vr = xn(pr, "g", yr), $e = {
|
|
2944
2944
|
html: "http://www.w3.org/1999/xhtml",
|
|
2945
2945
|
svg: "http://www.w3.org/2000/svg"
|
|
2946
2946
|
};
|
|
2947
|
-
function
|
|
2948
|
-
return
|
|
2947
|
+
function kr(e, t) {
|
|
2948
|
+
return Sn(e, {}) || { type: "root", children: [] };
|
|
2949
2949
|
}
|
|
2950
|
-
function
|
|
2951
|
-
const n =
|
|
2950
|
+
function Sn(e, t) {
|
|
2951
|
+
const n = wr(e, t);
|
|
2952
2952
|
return n && t.afterTransform && t.afterTransform(e, n), n;
|
|
2953
2953
|
}
|
|
2954
|
-
function
|
|
2954
|
+
function wr(e, t) {
|
|
2955
2955
|
switch (e.nodeType) {
|
|
2956
2956
|
case 1:
|
|
2957
|
-
return
|
|
2957
|
+
return Nr(
|
|
2958
2958
|
/** @type {Element} */
|
|
2959
2959
|
e,
|
|
2960
2960
|
t
|
|
2961
2961
|
);
|
|
2962
2962
|
// Ignore: Attr (2).
|
|
2963
2963
|
case 3:
|
|
2964
|
-
return
|
|
2964
|
+
return Sr(
|
|
2965
2965
|
/** @type {Text} */
|
|
2966
2966
|
e
|
|
2967
2967
|
);
|
|
@@ -2970,7 +2970,7 @@ function kr(e, t) {
|
|
|
2970
2970
|
// Removed: Entity (6)
|
|
2971
2971
|
// Ignore: Processing instruction (7).
|
|
2972
2972
|
case 8:
|
|
2973
|
-
return
|
|
2973
|
+
return Er(
|
|
2974
2974
|
/** @type {Comment} */
|
|
2975
2975
|
e
|
|
2976
2976
|
);
|
|
@@ -2981,7 +2981,7 @@ function kr(e, t) {
|
|
|
2981
2981
|
t
|
|
2982
2982
|
);
|
|
2983
2983
|
case 10:
|
|
2984
|
-
return
|
|
2984
|
+
return xr();
|
|
2985
2985
|
case 11:
|
|
2986
2986
|
return Ct(
|
|
2987
2987
|
/** @type {DocumentFragment} */
|
|
@@ -2993,45 +2993,45 @@ function kr(e, t) {
|
|
|
2993
2993
|
}
|
|
2994
2994
|
}
|
|
2995
2995
|
function Ct(e, t) {
|
|
2996
|
-
return { type: "root", children:
|
|
2996
|
+
return { type: "root", children: En(e, t) };
|
|
2997
2997
|
}
|
|
2998
|
-
function
|
|
2998
|
+
function xr() {
|
|
2999
2999
|
return { type: "doctype" };
|
|
3000
3000
|
}
|
|
3001
|
-
function
|
|
3001
|
+
function Sr(e) {
|
|
3002
3002
|
return { type: "text", value: e.nodeValue || "" };
|
|
3003
3003
|
}
|
|
3004
|
-
function
|
|
3004
|
+
function Er(e) {
|
|
3005
3005
|
return { type: "comment", value: e.nodeValue || "" };
|
|
3006
3006
|
}
|
|
3007
|
-
function
|
|
3008
|
-
const n = e.namespaceURI, o = n === $e.svg ?
|
|
3007
|
+
function Nr(e, t) {
|
|
3008
|
+
const n = e.namespaceURI, o = n === $e.svg ? vr : _r, r = n === $e.html ? e.tagName.toLowerCase() : e.tagName, a = (
|
|
3009
3009
|
// @ts-expect-error: DOM types are wrong, content can exist.
|
|
3010
3010
|
n === $e.html && r === "template" ? e.content : e
|
|
3011
3011
|
), l = e.getAttributeNames(), c = {};
|
|
3012
3012
|
let s = -1;
|
|
3013
3013
|
for (; ++s < l.length; )
|
|
3014
3014
|
c[l[s]] = e.getAttribute(l[s]) || "";
|
|
3015
|
-
return o(r, c,
|
|
3015
|
+
return o(r, c, En(a, t));
|
|
3016
3016
|
}
|
|
3017
|
-
function
|
|
3017
|
+
function En(e, t) {
|
|
3018
3018
|
const n = e.childNodes, o = [];
|
|
3019
3019
|
let r = -1;
|
|
3020
3020
|
for (; ++r < n.length; ) {
|
|
3021
|
-
const a =
|
|
3021
|
+
const a = Sn(n[r], t);
|
|
3022
3022
|
a !== void 0 && o.push(a);
|
|
3023
3023
|
}
|
|
3024
3024
|
return o;
|
|
3025
3025
|
}
|
|
3026
3026
|
new DOMParser();
|
|
3027
|
-
function
|
|
3028
|
-
const n =
|
|
3027
|
+
function Cr(e, t) {
|
|
3028
|
+
const n = Tr(e);
|
|
3029
3029
|
return (
|
|
3030
3030
|
/** @type {Root} */
|
|
3031
|
-
|
|
3031
|
+
kr(n)
|
|
3032
3032
|
);
|
|
3033
3033
|
}
|
|
3034
|
-
function
|
|
3034
|
+
function Tr(e) {
|
|
3035
3035
|
const t = document.createElement("template");
|
|
3036
3036
|
return t.innerHTML = e, t.content;
|
|
3037
3037
|
}
|
|
@@ -3052,24 +3052,24 @@ const dt = (
|
|
|
3052
3052
|
*/
|
|
3053
3053
|
(function(e) {
|
|
3054
3054
|
if (e == null)
|
|
3055
|
-
return
|
|
3055
|
+
return Or;
|
|
3056
3056
|
if (typeof e == "function")
|
|
3057
3057
|
return Fe(e);
|
|
3058
3058
|
if (typeof e == "object")
|
|
3059
|
-
return Array.isArray(e) ?
|
|
3059
|
+
return Array.isArray(e) ? Ar(e) : (
|
|
3060
3060
|
// Cast because `ReadonlyArray` goes into the above but `isArray`
|
|
3061
3061
|
// narrows to `Array`.
|
|
3062
|
-
|
|
3062
|
+
Ir(
|
|
3063
3063
|
/** @type {Props} */
|
|
3064
3064
|
e
|
|
3065
3065
|
)
|
|
3066
3066
|
);
|
|
3067
3067
|
if (typeof e == "string")
|
|
3068
|
-
return
|
|
3068
|
+
return Rr(e);
|
|
3069
3069
|
throw new Error("Expected function, string, or object as test");
|
|
3070
3070
|
})
|
|
3071
3071
|
);
|
|
3072
|
-
function
|
|
3072
|
+
function Ar(e) {
|
|
3073
3073
|
const t = [];
|
|
3074
3074
|
let n = -1;
|
|
3075
3075
|
for (; ++n < e.length; )
|
|
@@ -3082,7 +3082,7 @@ function Tr(e) {
|
|
|
3082
3082
|
return !1;
|
|
3083
3083
|
}
|
|
3084
3084
|
}
|
|
3085
|
-
function
|
|
3085
|
+
function Ir(e) {
|
|
3086
3086
|
const t = (
|
|
3087
3087
|
/** @type {Record<string, unknown>} */
|
|
3088
3088
|
e
|
|
@@ -3100,7 +3100,7 @@ function Ar(e) {
|
|
|
3100
3100
|
return !0;
|
|
3101
3101
|
}
|
|
3102
3102
|
}
|
|
3103
|
-
function
|
|
3103
|
+
function Rr(e) {
|
|
3104
3104
|
return Fe(t);
|
|
3105
3105
|
function t(n) {
|
|
3106
3106
|
return n && n.type === e;
|
|
@@ -3109,7 +3109,7 @@ function Ir(e) {
|
|
|
3109
3109
|
function Fe(e) {
|
|
3110
3110
|
return t;
|
|
3111
3111
|
function t(n, o, r) {
|
|
3112
|
-
return !!(
|
|
3112
|
+
return !!(Lr(n) && e.call(
|
|
3113
3113
|
this,
|
|
3114
3114
|
n,
|
|
3115
3115
|
typeof o == "number" ? o : void 0,
|
|
@@ -3117,10 +3117,10 @@ function Fe(e) {
|
|
|
3117
3117
|
));
|
|
3118
3118
|
}
|
|
3119
3119
|
}
|
|
3120
|
-
function
|
|
3120
|
+
function Or() {
|
|
3121
3121
|
return !0;
|
|
3122
3122
|
}
|
|
3123
|
-
function
|
|
3123
|
+
function Lr(e) {
|
|
3124
3124
|
return e !== null && typeof e == "object" && "type" in e;
|
|
3125
3125
|
}
|
|
3126
3126
|
const Tt = (
|
|
@@ -3166,17 +3166,17 @@ const Tt = (
|
|
|
3166
3166
|
*/
|
|
3167
3167
|
(function(e) {
|
|
3168
3168
|
if (e == null)
|
|
3169
|
-
return
|
|
3169
|
+
return Pr;
|
|
3170
3170
|
if (typeof e == "string")
|
|
3171
|
-
return
|
|
3171
|
+
return Fr(e);
|
|
3172
3172
|
if (typeof e == "object")
|
|
3173
|
-
return
|
|
3173
|
+
return Dr(e);
|
|
3174
3174
|
if (typeof e == "function")
|
|
3175
3175
|
return pt(e);
|
|
3176
3176
|
throw new Error("Expected function, string, or array as `test`");
|
|
3177
3177
|
})
|
|
3178
3178
|
);
|
|
3179
|
-
function
|
|
3179
|
+
function Dr(e) {
|
|
3180
3180
|
const t = [];
|
|
3181
3181
|
let n = -1;
|
|
3182
3182
|
for (; ++n < e.length; )
|
|
@@ -3189,7 +3189,7 @@ function Lr(e) {
|
|
|
3189
3189
|
return !1;
|
|
3190
3190
|
}
|
|
3191
3191
|
}
|
|
3192
|
-
function
|
|
3192
|
+
function Fr(e) {
|
|
3193
3193
|
return pt(t);
|
|
3194
3194
|
function t(n) {
|
|
3195
3195
|
return n.tagName === e;
|
|
@@ -3198,7 +3198,7 @@ function Dr(e) {
|
|
|
3198
3198
|
function pt(e) {
|
|
3199
3199
|
return t;
|
|
3200
3200
|
function t(n, o, r) {
|
|
3201
|
-
return !!(
|
|
3201
|
+
return !!(Mr(n) && e.call(
|
|
3202
3202
|
this,
|
|
3203
3203
|
n,
|
|
3204
3204
|
typeof o == "number" ? o : void 0,
|
|
@@ -3206,13 +3206,13 @@ function pt(e) {
|
|
|
3206
3206
|
));
|
|
3207
3207
|
}
|
|
3208
3208
|
}
|
|
3209
|
-
function
|
|
3209
|
+
function Pr(e) {
|
|
3210
3210
|
return !!(e && typeof e == "object" && "type" in e && e.type === "element" && "tagName" in e && typeof e.tagName == "string");
|
|
3211
3211
|
}
|
|
3212
|
-
function
|
|
3212
|
+
function Mr(e) {
|
|
3213
3213
|
return e !== null && typeof e == "object" && "type" in e && "tagName" in e;
|
|
3214
3214
|
}
|
|
3215
|
-
const At = /\n/g, It = /[\t ]+/g, tt = ae("br"), Rt = ae(
|
|
3215
|
+
const At = /\n/g, It = /[\t ]+/g, tt = ae("br"), Rt = ae(Gr), zr = ae("p"), Ot = ae("tr"), Ur = ae([
|
|
3216
3216
|
// List from: <https://html.spec.whatwg.org/multipage/rendering.html#hidden-elements>
|
|
3217
3217
|
"datalist",
|
|
3218
3218
|
"head",
|
|
@@ -3226,10 +3226,10 @@ const At = /\n/g, It = /[\t ]+/g, tt = ae("br"), Rt = ae(jr), Mr = ae("p"), Ot =
|
|
|
3226
3226
|
"template",
|
|
3227
3227
|
"title",
|
|
3228
3228
|
// Hidden attribute.
|
|
3229
|
-
|
|
3229
|
+
jr,
|
|
3230
3230
|
// From: <https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3>
|
|
3231
|
-
|
|
3232
|
-
]),
|
|
3231
|
+
Wr
|
|
3232
|
+
]), Nn = ae([
|
|
3233
3233
|
"address",
|
|
3234
3234
|
// Flow content
|
|
3235
3235
|
"article",
|
|
@@ -3311,12 +3311,12 @@ const At = /\n/g, It = /[\t ]+/g, tt = ae("br"), Rt = ae(jr), Mr = ae("p"), Ot =
|
|
|
3311
3311
|
"xmp"
|
|
3312
3312
|
// Flow content (legacy)
|
|
3313
3313
|
]);
|
|
3314
|
-
function
|
|
3315
|
-
const n = t || {}, o = "children" in e ? e.children : [], r =
|
|
3314
|
+
function qr(e, t) {
|
|
3315
|
+
const n = t || {}, o = "children" in e ? e.children : [], r = Nn(e), a = An(e, {
|
|
3316
3316
|
whitespace: n.whitespace || "normal"
|
|
3317
3317
|
}), l = [];
|
|
3318
3318
|
(e.type === "text" || e.type === "comment") && l.push(
|
|
3319
|
-
...
|
|
3319
|
+
...Tn(e, {
|
|
3320
3320
|
breakBefore: !0,
|
|
3321
3321
|
breakAfter: !0
|
|
3322
3322
|
})
|
|
@@ -3324,7 +3324,7 @@ function Ur(e, t) {
|
|
|
3324
3324
|
let c = -1;
|
|
3325
3325
|
for (; ++c < o.length; )
|
|
3326
3326
|
l.push(
|
|
3327
|
-
...
|
|
3327
|
+
...Cn(
|
|
3328
3328
|
o[c],
|
|
3329
3329
|
// @ts-expect-error: `tree` is a parent if we’re here.
|
|
3330
3330
|
e,
|
|
@@ -3344,20 +3344,20 @@ function Ur(e, t) {
|
|
|
3344
3344
|
}
|
|
3345
3345
|
return s.join("");
|
|
3346
3346
|
}
|
|
3347
|
-
function
|
|
3348
|
-
return e.type === "element" ?
|
|
3347
|
+
function Cn(e, t, n) {
|
|
3348
|
+
return e.type === "element" ? $r(e, t, n) : e.type === "text" ? n.whitespace === "normal" ? Tn(e, n) : Br(e) : [];
|
|
3349
3349
|
}
|
|
3350
|
-
function
|
|
3351
|
-
const o =
|
|
3350
|
+
function $r(e, t, n) {
|
|
3351
|
+
const o = An(e, n), r = e.children || [];
|
|
3352
3352
|
let a = -1, l = [];
|
|
3353
|
-
if (
|
|
3353
|
+
if (Ur(e))
|
|
3354
3354
|
return l;
|
|
3355
3355
|
let c, s;
|
|
3356
3356
|
for (tt(e) || Ot(e) && // @ts-expect-error: something up with types of parents.
|
|
3357
3357
|
Tt(t, e, Ot) ? s = `
|
|
3358
|
-
` :
|
|
3358
|
+
` : zr(e) ? (c = 2, s = 2) : Nn(e) && (c = 1, s = 1); ++a < r.length; )
|
|
3359
3359
|
l = l.concat(
|
|
3360
|
-
|
|
3360
|
+
Cn(r[a], e, {
|
|
3361
3361
|
whitespace: o,
|
|
3362
3362
|
breakBefore: a ? void 0 : c,
|
|
3363
3363
|
breakAfter: a < r.length - 1 ? tt(r[a + 1]) : s
|
|
@@ -3366,7 +3366,7 @@ function qr(e, t, n) {
|
|
|
3366
3366
|
return Rt(e) && // @ts-expect-error: something up with types of parents.
|
|
3367
3367
|
Tt(t, e, Rt) && l.push(" "), c && l.unshift(c), s && l.push(s), l;
|
|
3368
3368
|
}
|
|
3369
|
-
function
|
|
3369
|
+
function Tn(e, t) {
|
|
3370
3370
|
const n = String(e.value), o = [], r = [];
|
|
3371
3371
|
let a = 0;
|
|
3372
3372
|
for (; a <= n.length; ) {
|
|
@@ -3375,7 +3375,7 @@ function Cn(e, t) {
|
|
|
3375
3375
|
o.push(
|
|
3376
3376
|
// Any sequence of collapsible spaces and tabs immediately preceding or
|
|
3377
3377
|
// following a segment break is removed.
|
|
3378
|
-
|
|
3378
|
+
Hr(
|
|
3379
3379
|
// […] ignoring bidi formatting characters (characters with the
|
|
3380
3380
|
// Bidi_Control property [UAX9]: ALM, LTR, RTL, LRE-RLO, LRI-PDI) as if
|
|
3381
3381
|
// they were not there.
|
|
@@ -3390,10 +3390,10 @@ function Cn(e, t) {
|
|
|
3390
3390
|
o[l].charCodeAt(o[l].length - 1) === 8203 || l < o.length - 1 && o[l + 1].charCodeAt(0) === 8203 ? (r.push(o[l]), c = void 0) : o[l] ? (typeof c == "number" && r.push(c), r.push(o[l]), c = 0) : (l === 0 || l === o.length - 1) && r.push(0);
|
|
3391
3391
|
return r;
|
|
3392
3392
|
}
|
|
3393
|
-
function
|
|
3393
|
+
function Br(e) {
|
|
3394
3394
|
return [String(e.value)];
|
|
3395
3395
|
}
|
|
3396
|
-
function
|
|
3396
|
+
function Hr(e, t, n) {
|
|
3397
3397
|
const o = [];
|
|
3398
3398
|
let r = 0, a;
|
|
3399
3399
|
for (; r < e.length; ) {
|
|
@@ -3403,7 +3403,7 @@ function Br(e, t, n) {
|
|
|
3403
3403
|
}
|
|
3404
3404
|
return r !== a && !n && o.push(""), o.join(" ");
|
|
3405
3405
|
}
|
|
3406
|
-
function
|
|
3406
|
+
function An(e, t) {
|
|
3407
3407
|
if (e.type === "element") {
|
|
3408
3408
|
const n = e.properties || {};
|
|
3409
3409
|
switch (e.tagName) {
|
|
@@ -3424,17 +3424,17 @@ function Tn(e, t) {
|
|
|
3424
3424
|
}
|
|
3425
3425
|
return t.whitespace;
|
|
3426
3426
|
}
|
|
3427
|
-
function
|
|
3427
|
+
function jr(e) {
|
|
3428
3428
|
return !!(e.properties || {}).hidden;
|
|
3429
3429
|
}
|
|
3430
|
-
function
|
|
3430
|
+
function Gr(e) {
|
|
3431
3431
|
return e.tagName === "td" || e.tagName === "th";
|
|
3432
3432
|
}
|
|
3433
|
-
function
|
|
3433
|
+
function Wr(e) {
|
|
3434
3434
|
return e.tagName === "dialog" && !(e.properties || {}).open;
|
|
3435
3435
|
}
|
|
3436
|
-
const
|
|
3437
|
-
function
|
|
3436
|
+
const In = [], Vr = !0, Lt = !1, Rn = "skip";
|
|
3437
|
+
function Yr(e, t, n, o) {
|
|
3438
3438
|
let r;
|
|
3439
3439
|
r = t;
|
|
3440
3440
|
const a = dt(r), l = 1;
|
|
@@ -3458,15 +3458,15 @@ function Vr(e, t, n, o) {
|
|
|
3458
3458
|
}
|
|
3459
3459
|
return b;
|
|
3460
3460
|
function b() {
|
|
3461
|
-
let p =
|
|
3462
|
-
if (a(s, u, g[g.length - 1] || void 0) && (p =
|
|
3461
|
+
let p = In, h, d, w;
|
|
3462
|
+
if (a(s, u, g[g.length - 1] || void 0) && (p = Xr(n(s, g)), p[0] === Lt))
|
|
3463
3463
|
return p;
|
|
3464
3464
|
if ("children" in s && s.children) {
|
|
3465
3465
|
const _ = (
|
|
3466
3466
|
/** @type {UnistParent} */
|
|
3467
3467
|
s
|
|
3468
3468
|
);
|
|
3469
|
-
if (_.children && p[0] !==
|
|
3469
|
+
if (_.children && p[0] !== Rn)
|
|
3470
3470
|
for (d = -1 + l, w = g.concat(_); d > -1 && d < _.children.length; ) {
|
|
3471
3471
|
const y = _.children[d];
|
|
3472
3472
|
if (h = c(y, d, w)(), h[0] === Lt)
|
|
@@ -3478,21 +3478,21 @@ function Vr(e, t, n, o) {
|
|
|
3478
3478
|
}
|
|
3479
3479
|
}
|
|
3480
3480
|
}
|
|
3481
|
-
function
|
|
3482
|
-
return Array.isArray(e) ? e : typeof e == "number" ? [
|
|
3481
|
+
function Xr(e) {
|
|
3482
|
+
return Array.isArray(e) ? e : typeof e == "number" ? [Vr, e] : e == null ? In : [e];
|
|
3483
3483
|
}
|
|
3484
|
-
const
|
|
3485
|
-
function
|
|
3486
|
-
const t = e ||
|
|
3484
|
+
const Kr = {}, Qr = [];
|
|
3485
|
+
function Zr(e) {
|
|
3486
|
+
const t = e || Kr;
|
|
3487
3487
|
return function(n, o) {
|
|
3488
|
-
|
|
3489
|
-
const l = Array.isArray(r.properties.className) ? r.properties.className :
|
|
3488
|
+
Yr(n, "element", function(r, a) {
|
|
3489
|
+
const l = Array.isArray(r.properties.className) ? r.properties.className : Qr, c = l.includes("language-math"), s = l.includes("math-display"), u = l.includes("math-inline");
|
|
3490
3490
|
let g = s;
|
|
3491
3491
|
if (!c && !s && !u)
|
|
3492
3492
|
return;
|
|
3493
3493
|
let m = a[a.length - 1], b = r;
|
|
3494
3494
|
if (r.tagName === "code" && c && m && m.type === "element" && m.tagName === "pre" && (b = m, m = a[a.length - 2], g = !0), !m) return;
|
|
3495
|
-
const p =
|
|
3495
|
+
const p = qr(b, { whitespace: "pre" });
|
|
3496
3496
|
let h;
|
|
3497
3497
|
try {
|
|
3498
3498
|
h = ht.renderToString(p, {
|
|
@@ -3535,20 +3535,20 @@ function Qr(e) {
|
|
|
3535
3535
|
}
|
|
3536
3536
|
}
|
|
3537
3537
|
typeof h == "string" && (h = /** @type {Array<ElementContent>} */
|
|
3538
|
-
|
|
3538
|
+
Cr(h).children);
|
|
3539
3539
|
const d = m.children.indexOf(b);
|
|
3540
|
-
return m.children.splice(d, 1, ...h),
|
|
3540
|
+
return m.children.splice(d, 1, ...h), Rn;
|
|
3541
3541
|
});
|
|
3542
3542
|
};
|
|
3543
3543
|
}
|
|
3544
|
-
function
|
|
3544
|
+
function Jr(e, t) {
|
|
3545
3545
|
const n = String(e);
|
|
3546
3546
|
let o = n.indexOf(t), r = o, a = 0, l = 0;
|
|
3547
3547
|
for (; o !== -1; )
|
|
3548
3548
|
o === r ? ++a > l && (l = a) : a = 1, r = o + t.length, o = n.indexOf(t, r);
|
|
3549
3549
|
return l;
|
|
3550
3550
|
}
|
|
3551
|
-
function
|
|
3551
|
+
function ea() {
|
|
3552
3552
|
return {
|
|
3553
3553
|
enter: {
|
|
3554
3554
|
mathFlow: e,
|
|
@@ -3624,7 +3624,7 @@ function Jr() {
|
|
|
3624
3624
|
this.config.enter.data.call(this, s), this.config.exit.data.call(this, s);
|
|
3625
3625
|
}
|
|
3626
3626
|
}
|
|
3627
|
-
function
|
|
3627
|
+
function ta(e) {
|
|
3628
3628
|
let t = (e || {}).singleDollarTextMath;
|
|
3629
3629
|
return t == null && (t = !0), o.peek = r, {
|
|
3630
3630
|
unsafe: [
|
|
@@ -3642,7 +3642,7 @@ function ea(e) {
|
|
|
3642
3642
|
handlers: { math: n, inlineMath: o }
|
|
3643
3643
|
};
|
|
3644
3644
|
function n(a, l, c, s) {
|
|
3645
|
-
const u = a.value || "", g = c.createTracker(s), m = "$".repeat(Math.max(
|
|
3645
|
+
const u = a.value || "", g = c.createTracker(s), m = "$".repeat(Math.max(Jr(u, "$") + 1, 2)), b = c.enter("mathFlow");
|
|
3646
3646
|
let p = g.move(m);
|
|
3647
3647
|
if (a.meta) {
|
|
3648
3648
|
const h = c.enter("mathFlowMeta");
|
|
@@ -3703,15 +3703,15 @@ function Ce(e, t, n, o) {
|
|
|
3703
3703
|
return Dt(s) && a++ < r ? (e.consume(s), c) : (e.exit(n), t(s));
|
|
3704
3704
|
}
|
|
3705
3705
|
}
|
|
3706
|
-
const
|
|
3707
|
-
tokenize:
|
|
3706
|
+
const na = {
|
|
3707
|
+
tokenize: oa,
|
|
3708
3708
|
concrete: !0,
|
|
3709
3709
|
name: "mathFlow"
|
|
3710
3710
|
}, Ft = {
|
|
3711
|
-
tokenize:
|
|
3711
|
+
tokenize: ra,
|
|
3712
3712
|
partial: !0
|
|
3713
3713
|
};
|
|
3714
|
-
function
|
|
3714
|
+
function oa(e, t, n) {
|
|
3715
3715
|
const o = this, r = o.events[o.events.length - 1], a = r && r[1].type === "linePrefix" ? r[2].sliceSerialize(r[1], !0).length : 0;
|
|
3716
3716
|
let l = 0;
|
|
3717
3717
|
return c;
|
|
@@ -3764,7 +3764,7 @@ function na(e, t, n) {
|
|
|
3764
3764
|
}
|
|
3765
3765
|
}
|
|
3766
3766
|
}
|
|
3767
|
-
function
|
|
3767
|
+
function ra(e, t, n) {
|
|
3768
3768
|
const o = this;
|
|
3769
3769
|
return r;
|
|
3770
3770
|
function r(l) {
|
|
@@ -3774,12 +3774,12 @@ function oa(e, t, n) {
|
|
|
3774
3774
|
return o.parser.lazy[o.now().line] ? n(l) : t(l);
|
|
3775
3775
|
}
|
|
3776
3776
|
}
|
|
3777
|
-
function
|
|
3777
|
+
function aa(e) {
|
|
3778
3778
|
let n = (e || {}).singleDollarTextMath;
|
|
3779
3779
|
return n == null && (n = !0), {
|
|
3780
3780
|
tokenize: o,
|
|
3781
|
-
resolve:
|
|
3782
|
-
previous:
|
|
3781
|
+
resolve: ia,
|
|
3782
|
+
previous: la,
|
|
3783
3783
|
name: "mathText"
|
|
3784
3784
|
};
|
|
3785
3785
|
function o(r, a, l) {
|
|
@@ -3802,7 +3802,7 @@ function ra(e) {
|
|
|
3802
3802
|
}
|
|
3803
3803
|
}
|
|
3804
3804
|
}
|
|
3805
|
-
function
|
|
3805
|
+
function ia(e) {
|
|
3806
3806
|
let t = e.length - 4, n = 3, o, r;
|
|
3807
3807
|
if ((e[n][1].type === "lineEnding" || e[n][1].type === "space") && (e[t][1].type === "lineEnding" || e[t][1].type === "space")) {
|
|
3808
3808
|
for (o = n; ++o < t; )
|
|
@@ -3815,38 +3815,38 @@ function aa(e) {
|
|
|
3815
3815
|
r === void 0 ? o !== t && e[o][1].type !== "lineEnding" && (r = o) : (o === t || e[o][1].type === "lineEnding") && (e[r][1].type = "mathTextData", o !== r + 2 && (e[r][1].end = e[o - 1][1].end, e.splice(r + 2, o - r - 2), t -= o - r - 2, o = r + 2), r = void 0);
|
|
3816
3816
|
return e;
|
|
3817
3817
|
}
|
|
3818
|
-
function
|
|
3818
|
+
function la(e) {
|
|
3819
3819
|
return e !== 36 || this.events[this.events.length - 1][1].type === "characterEscape";
|
|
3820
3820
|
}
|
|
3821
|
-
function
|
|
3821
|
+
function sa(e) {
|
|
3822
3822
|
return {
|
|
3823
3823
|
flow: {
|
|
3824
|
-
36:
|
|
3824
|
+
36: na
|
|
3825
3825
|
},
|
|
3826
3826
|
text: {
|
|
3827
|
-
36:
|
|
3827
|
+
36: aa(e)
|
|
3828
3828
|
}
|
|
3829
3829
|
};
|
|
3830
3830
|
}
|
|
3831
|
-
const
|
|
3832
|
-
function
|
|
3831
|
+
const ca = {};
|
|
3832
|
+
function ua(e) {
|
|
3833
3833
|
const t = (
|
|
3834
3834
|
/** @type {Processor} */
|
|
3835
3835
|
this
|
|
3836
|
-
), n = e ||
|
|
3837
|
-
r.push(
|
|
3836
|
+
), n = e || ca, o = t.data(), r = o.micromarkExtensions || (o.micromarkExtensions = []), a = o.fromMarkdownExtensions || (o.fromMarkdownExtensions = []), l = o.toMarkdownExtensions || (o.toMarkdownExtensions = []);
|
|
3837
|
+
r.push(sa(n)), a.push(ea()), l.push(ta(n));
|
|
3838
3838
|
}
|
|
3839
|
-
function
|
|
3839
|
+
function da(e = {}) {
|
|
3840
3840
|
var t, n;
|
|
3841
|
-
let o = [
|
|
3841
|
+
let o = [ua, { singleDollarTextMath: (t = e.singleDollarTextMath) != null ? t : !1 }], r = [Zr, { errorColor: (n = e.errorColor) != null ? n : "var(--color-muted-foreground)" }];
|
|
3842
3842
|
return { name: "katex", type: "math", remarkPlugin: o, rehypePlugin: r, getStyles() {
|
|
3843
3843
|
return "katex/dist/katex.min.css";
|
|
3844
3844
|
} };
|
|
3845
3845
|
}
|
|
3846
|
-
var Pt =
|
|
3846
|
+
var Pt = da();
|
|
3847
3847
|
const Ie = Re(
|
|
3848
3848
|
({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
3849
|
-
|
|
3849
|
+
po,
|
|
3850
3850
|
{
|
|
3851
3851
|
className: v("size-full [&>*:first-child]:mt-0 [&>*:last-child]:mb-0 code-bg ", e),
|
|
3852
3852
|
...t,
|
|
@@ -3857,7 +3857,7 @@ const Ie = Re(
|
|
|
3857
3857
|
(e, t) => e.children === t.children
|
|
3858
3858
|
);
|
|
3859
3859
|
Ie.displayName = "Response";
|
|
3860
|
-
function
|
|
3860
|
+
function pa({
|
|
3861
3861
|
part: e,
|
|
3862
3862
|
message: t,
|
|
3863
3863
|
status: n,
|
|
@@ -3875,7 +3875,7 @@ function da({
|
|
|
3875
3875
|
const { t: p } = z(["chat"]), { textComponents: h, remarkPlugins: d, rehypePlugins: w } = ge(), _ = De(e.text), y = !o && r && (n === "streaming" || n === "submitted"), C = l || (() => {
|
|
3876
3876
|
});
|
|
3877
3877
|
return /* @__PURE__ */ k("div", { className: "group py-2 first:pt-4 animate-in-bubble", children: [
|
|
3878
|
-
/* @__PURE__ */ i(
|
|
3878
|
+
/* @__PURE__ */ i(gn, { from: t.role, children: /* @__PURE__ */ i(mn, { dir: _, children: b ? /* @__PURE__ */ i(Qe, { showAction: !1, reference: b, children: /* @__PURE__ */ i(
|
|
3879
3879
|
Ie,
|
|
3880
3880
|
{
|
|
3881
3881
|
className: v(t.role === "user" && "whitespace-pre-wrap break-words"),
|
|
@@ -3894,7 +3894,7 @@ function da({
|
|
|
3894
3894
|
children: e.text
|
|
3895
3895
|
}
|
|
3896
3896
|
) }) }),
|
|
3897
|
-
a && !y && /* @__PURE__ */ k(
|
|
3897
|
+
a && !y && /* @__PURE__ */ k(nr, { className: v("mt-1.5 ml-0.5", t.role === "user" && "justify-end"), children: [
|
|
3898
3898
|
t.role === "assistant" && /* @__PURE__ */ k(oe, { children: [
|
|
3899
3899
|
r && m && /* @__PURE__ */ i(
|
|
3900
3900
|
Ne,
|
|
@@ -3902,7 +3902,7 @@ function da({
|
|
|
3902
3902
|
onClick: () => C(t.id),
|
|
3903
3903
|
label: p("retry"),
|
|
3904
3904
|
tooltip: p("retry"),
|
|
3905
|
-
children: /* @__PURE__ */ i(
|
|
3905
|
+
children: /* @__PURE__ */ i(Kn, { className: "size-3" })
|
|
3906
3906
|
}
|
|
3907
3907
|
),
|
|
3908
3908
|
g && /* @__PURE__ */ k(oe, { children: [
|
|
@@ -3913,7 +3913,7 @@ function da({
|
|
|
3913
3913
|
label: p("like"),
|
|
3914
3914
|
tooltip: p("like"),
|
|
3915
3915
|
className: c === "like" ? "text-primary" : "",
|
|
3916
|
-
children: /* @__PURE__ */ i(
|
|
3916
|
+
children: /* @__PURE__ */ i(Qn, { className: "size-3" })
|
|
3917
3917
|
}
|
|
3918
3918
|
),
|
|
3919
3919
|
/* @__PURE__ */ i(
|
|
@@ -3923,7 +3923,7 @@ function da({
|
|
|
3923
3923
|
label: p("dislike"),
|
|
3924
3924
|
tooltip: p("dislike"),
|
|
3925
3925
|
className: c === "dislike" ? "text-destructive" : "",
|
|
3926
|
-
children: /* @__PURE__ */ i(
|
|
3926
|
+
children: /* @__PURE__ */ i(Zn, { className: "size-3" })
|
|
3927
3927
|
}
|
|
3928
3928
|
)
|
|
3929
3929
|
] })
|
|
@@ -3936,18 +3936,18 @@ function da({
|
|
|
3936
3936
|
},
|
|
3937
3937
|
label: p("copy"),
|
|
3938
3938
|
tooltip: p("copy"),
|
|
3939
|
-
children: /* @__PURE__ */ i(
|
|
3939
|
+
children: /* @__PURE__ */ i(Zt, { className: "size-3" })
|
|
3940
3940
|
}
|
|
3941
3941
|
)
|
|
3942
3942
|
] })
|
|
3943
3943
|
] });
|
|
3944
3944
|
}
|
|
3945
|
-
const
|
|
3946
|
-
const e = ke(
|
|
3945
|
+
const On = pe(null), ha = () => {
|
|
3946
|
+
const e = ke(On);
|
|
3947
3947
|
if (!e)
|
|
3948
3948
|
throw new Error("Reasoning components must be used within Reasoning");
|
|
3949
3949
|
return e;
|
|
3950
|
-
},
|
|
3950
|
+
}, ga = 1e3, ma = 1e3, Ln = Re(
|
|
3951
3951
|
({
|
|
3952
3952
|
className: e,
|
|
3953
3953
|
isStreaming: t = !1,
|
|
@@ -3968,12 +3968,12 @@ const Rn = pe(null), pa = () => {
|
|
|
3968
3968
|
defaultProp: 0
|
|
3969
3969
|
}), [b, p] = P(!1), [h, d] = P(null);
|
|
3970
3970
|
V(() => {
|
|
3971
|
-
t ? h === null && d(Date.now()) : h !== null && (m(Math.ceil((Date.now() - h) /
|
|
3971
|
+
t ? h === null && d(Date.now()) : h !== null && (m(Math.ceil((Date.now() - h) / ma)), d(null));
|
|
3972
3972
|
}, [t, h, m]), V(() => {
|
|
3973
3973
|
if (o && !t && s && !b) {
|
|
3974
3974
|
const _ = setTimeout(() => {
|
|
3975
3975
|
u(!1), p(!0);
|
|
3976
|
-
},
|
|
3976
|
+
}, ga);
|
|
3977
3977
|
return () => {
|
|
3978
3978
|
clearTimeout(_);
|
|
3979
3979
|
};
|
|
@@ -3982,7 +3982,7 @@ const Rn = pe(null), pa = () => {
|
|
|
3982
3982
|
const w = (_) => {
|
|
3983
3983
|
u(_);
|
|
3984
3984
|
};
|
|
3985
|
-
return /* @__PURE__ */ i(
|
|
3985
|
+
return /* @__PURE__ */ i(On.Provider, { value: { isStreaming: t, isOpen: s, setIsOpen: u, duration: g }, children: /* @__PURE__ */ i(
|
|
3986
3986
|
lt,
|
|
3987
3987
|
{
|
|
3988
3988
|
className: v("not-prose mb-4", e),
|
|
@@ -3993,15 +3993,15 @@ const Rn = pe(null), pa = () => {
|
|
|
3993
3993
|
}
|
|
3994
3994
|
) });
|
|
3995
3995
|
}
|
|
3996
|
-
),
|
|
3997
|
-
const { isStreaming: o, isOpen: r, duration: a } =
|
|
3996
|
+
), Dn = Re(({ className: e, children: t, ...n }) => {
|
|
3997
|
+
const { isStreaming: o, isOpen: r, duration: a } = ha();
|
|
3998
3998
|
return /* @__PURE__ */ i(
|
|
3999
3999
|
st,
|
|
4000
4000
|
{
|
|
4001
4001
|
className: v("flex items-center gap-2 text-muted-foreground text-sm", e),
|
|
4002
4002
|
...n,
|
|
4003
4003
|
children: t ?? /* @__PURE__ */ k(oe, { children: [
|
|
4004
|
-
/* @__PURE__ */ i(
|
|
4004
|
+
/* @__PURE__ */ i(Jn, { className: "size-4" }),
|
|
4005
4005
|
o || a === 0 ? /* @__PURE__ */ i("p", { children: "Thinking..." }) : /* @__PURE__ */ k("p", { children: [
|
|
4006
4006
|
"Thought for ",
|
|
4007
4007
|
a,
|
|
@@ -4020,7 +4020,7 @@ const Rn = pe(null), pa = () => {
|
|
|
4020
4020
|
] })
|
|
4021
4021
|
}
|
|
4022
4022
|
);
|
|
4023
|
-
}),
|
|
4023
|
+
}), Fn = Re(({ className: e, children: t, ...n }) => /* @__PURE__ */ i(
|
|
4024
4024
|
ct,
|
|
4025
4025
|
{
|
|
4026
4026
|
className: v(
|
|
@@ -4032,10 +4032,10 @@ const Rn = pe(null), pa = () => {
|
|
|
4032
4032
|
children: /* @__PURE__ */ i(Ie, { className: "grid gap-2", children: t })
|
|
4033
4033
|
}
|
|
4034
4034
|
));
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
function
|
|
4035
|
+
Ln.displayName = "Reasoning";
|
|
4036
|
+
Dn.displayName = "ReasoningTrigger";
|
|
4037
|
+
Fn.displayName = "ReasoningContent";
|
|
4038
|
+
function fa({
|
|
4039
4039
|
part: e,
|
|
4040
4040
|
status: t,
|
|
4041
4041
|
index: n,
|
|
@@ -4044,18 +4044,18 @@ function ma({
|
|
|
4044
4044
|
}) {
|
|
4045
4045
|
const a = De(e.text);
|
|
4046
4046
|
return /* @__PURE__ */ k(
|
|
4047
|
-
|
|
4047
|
+
Ln,
|
|
4048
4048
|
{
|
|
4049
4049
|
className: "w-full animate-in-bubble",
|
|
4050
4050
|
isStreaming: t === "streaming" && n === o - 1 && r,
|
|
4051
4051
|
children: [
|
|
4052
|
-
/* @__PURE__ */ i(
|
|
4053
|
-
/* @__PURE__ */ i(
|
|
4052
|
+
/* @__PURE__ */ i(Dn, {}),
|
|
4053
|
+
/* @__PURE__ */ i(Fn, { dir: a, children: e.text })
|
|
4054
4054
|
]
|
|
4055
4055
|
}
|
|
4056
4056
|
);
|
|
4057
4057
|
}
|
|
4058
|
-
const
|
|
4058
|
+
const ba = ot(
|
|
4059
4059
|
"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
4060
4060
|
{
|
|
4061
4061
|
variants: {
|
|
@@ -4071,27 +4071,27 @@ const fa = ot(
|
|
|
4071
4071
|
}
|
|
4072
4072
|
}
|
|
4073
4073
|
);
|
|
4074
|
-
function
|
|
4074
|
+
function ya({
|
|
4075
4075
|
className: e,
|
|
4076
4076
|
variant: t,
|
|
4077
4077
|
asChild: n = !1,
|
|
4078
4078
|
...o
|
|
4079
4079
|
}) {
|
|
4080
|
-
return /* @__PURE__ */ i(n ?
|
|
4080
|
+
return /* @__PURE__ */ i(n ? Kt : "span", { "data-slot": "badge", className: v(ba({ variant: t }), e), ...o });
|
|
4081
4081
|
}
|
|
4082
|
-
function
|
|
4082
|
+
function _a({ ...e }) {
|
|
4083
4083
|
return /* @__PURE__ */ i(J.Root, { "data-slot": "dialog", ...e });
|
|
4084
4084
|
}
|
|
4085
|
-
function
|
|
4085
|
+
function va({ ...e }) {
|
|
4086
4086
|
return /* @__PURE__ */ i(J.Trigger, { "data-slot": "dialog-trigger", ...e });
|
|
4087
4087
|
}
|
|
4088
|
-
function
|
|
4088
|
+
function ka({ ...e }) {
|
|
4089
4089
|
return /* @__PURE__ */ i(J.Portal, { "data-slot": "dialog-portal", ...e });
|
|
4090
4090
|
}
|
|
4091
4091
|
function bl({ ...e }) {
|
|
4092
4092
|
return /* @__PURE__ */ i(J.Close, { "data-slot": "dialog-close", ...e });
|
|
4093
4093
|
}
|
|
4094
|
-
function
|
|
4094
|
+
function wa({ className: e, ...t }) {
|
|
4095
4095
|
return /* @__PURE__ */ i(
|
|
4096
4096
|
J.Overlay,
|
|
4097
4097
|
{
|
|
@@ -4104,14 +4104,14 @@ function ka({ className: e, ...t }) {
|
|
|
4104
4104
|
}
|
|
4105
4105
|
);
|
|
4106
4106
|
}
|
|
4107
|
-
function
|
|
4107
|
+
function xa({
|
|
4108
4108
|
className: e,
|
|
4109
4109
|
children: t,
|
|
4110
4110
|
showCloseButton: n = !0,
|
|
4111
4111
|
...o
|
|
4112
4112
|
}) {
|
|
4113
|
-
return /* @__PURE__ */ k(
|
|
4114
|
-
/* @__PURE__ */ i(
|
|
4113
|
+
return /* @__PURE__ */ k(ka, { "data-slot": "dialog-portal", children: [
|
|
4114
|
+
/* @__PURE__ */ i(wa, {}),
|
|
4115
4115
|
/* @__PURE__ */ k(
|
|
4116
4116
|
J.Content,
|
|
4117
4117
|
{
|
|
@@ -4139,7 +4139,7 @@ function wa({
|
|
|
4139
4139
|
)
|
|
4140
4140
|
] });
|
|
4141
4141
|
}
|
|
4142
|
-
function
|
|
4142
|
+
function Sa({ className: e, ...t }) {
|
|
4143
4143
|
return /* @__PURE__ */ i(
|
|
4144
4144
|
"div",
|
|
4145
4145
|
{
|
|
@@ -4159,7 +4159,7 @@ function yl({ className: e, ...t }) {
|
|
|
4159
4159
|
}
|
|
4160
4160
|
);
|
|
4161
4161
|
}
|
|
4162
|
-
function
|
|
4162
|
+
function Ea({ className: e, ...t }) {
|
|
4163
4163
|
return /* @__PURE__ */ i(
|
|
4164
4164
|
J.Title,
|
|
4165
4165
|
{
|
|
@@ -4179,7 +4179,7 @@ function _l({ className: e, ...t }) {
|
|
|
4179
4179
|
}
|
|
4180
4180
|
);
|
|
4181
4181
|
}
|
|
4182
|
-
const
|
|
4182
|
+
const Na = {
|
|
4183
4183
|
'code[class*="language-"]': {
|
|
4184
4184
|
background: "hsl(220, 13%, 18%)",
|
|
4185
4185
|
color: "hsl(220, 14%, 71%)",
|
|
@@ -4679,7 +4679,7 @@ const Ea = {
|
|
|
4679
4679
|
".prism-previewer-easing.prism-previewer-easing line": {
|
|
4680
4680
|
stroke: "hsl(220, 14%, 71%)"
|
|
4681
4681
|
}
|
|
4682
|
-
},
|
|
4682
|
+
}, Ca = {
|
|
4683
4683
|
'code[class*="language-"]': {
|
|
4684
4684
|
background: "hsl(230, 1%, 98%)",
|
|
4685
4685
|
color: "hsl(230, 8%, 24%)",
|
|
@@ -5172,7 +5172,7 @@ function te(e) {
|
|
|
5172
5172
|
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
|
|
5173
5173
|
}
|
|
5174
5174
|
var Be, Mt;
|
|
5175
|
-
function
|
|
5175
|
+
function Ta() {
|
|
5176
5176
|
if (Mt) return Be;
|
|
5177
5177
|
Mt = 1, Be = e, e.displayName = "python", e.aliases = ["py"];
|
|
5178
5178
|
function e(t) {
|
|
@@ -5240,10 +5240,10 @@ function Ca() {
|
|
|
5240
5240
|
}
|
|
5241
5241
|
return Be;
|
|
5242
5242
|
}
|
|
5243
|
-
var
|
|
5244
|
-
const
|
|
5243
|
+
var Aa = Ta();
|
|
5244
|
+
const Ia = /* @__PURE__ */ te(Aa);
|
|
5245
5245
|
var He, zt;
|
|
5246
|
-
function
|
|
5246
|
+
function Ra() {
|
|
5247
5247
|
if (zt) return He;
|
|
5248
5248
|
zt = 1, He = e, e.displayName = "javascript", e.aliases = ["js"];
|
|
5249
5249
|
function e(t) {
|
|
@@ -5372,10 +5372,10 @@ function Ia() {
|
|
|
5372
5372
|
}
|
|
5373
5373
|
return He;
|
|
5374
5374
|
}
|
|
5375
|
-
var
|
|
5376
|
-
const
|
|
5375
|
+
var Oa = Ra();
|
|
5376
|
+
const La = /* @__PURE__ */ te(Oa);
|
|
5377
5377
|
var je, Ut;
|
|
5378
|
-
function
|
|
5378
|
+
function Da() {
|
|
5379
5379
|
if (Ut) return je;
|
|
5380
5380
|
Ut = 1, je = e, e.displayName = "typescript", e.aliases = ["ts"];
|
|
5381
5381
|
function e(t) {
|
|
@@ -5427,10 +5427,10 @@ function La() {
|
|
|
5427
5427
|
}
|
|
5428
5428
|
return je;
|
|
5429
5429
|
}
|
|
5430
|
-
var
|
|
5431
|
-
const
|
|
5430
|
+
var Fa = Da();
|
|
5431
|
+
const Pa = /* @__PURE__ */ te(Fa);
|
|
5432
5432
|
var Ge, qt;
|
|
5433
|
-
function
|
|
5433
|
+
function Ma() {
|
|
5434
5434
|
if (qt) return Ge;
|
|
5435
5435
|
qt = 1, Ge = e, e.displayName = "json", e.aliases = ["webmanifest"];
|
|
5436
5436
|
function e(t) {
|
|
@@ -5461,10 +5461,10 @@ function Pa() {
|
|
|
5461
5461
|
}
|
|
5462
5462
|
return Ge;
|
|
5463
5463
|
}
|
|
5464
|
-
var
|
|
5465
|
-
const
|
|
5464
|
+
var za = Ma();
|
|
5465
|
+
const Ua = /* @__PURE__ */ te(za);
|
|
5466
5466
|
var We, $t;
|
|
5467
|
-
function
|
|
5467
|
+
function qa() {
|
|
5468
5468
|
if ($t) return We;
|
|
5469
5469
|
$t = 1, We = e, e.displayName = "bash", e.aliases = ["shell"];
|
|
5470
5470
|
function e(t) {
|
|
@@ -5683,10 +5683,10 @@ function Ua() {
|
|
|
5683
5683
|
}
|
|
5684
5684
|
return We;
|
|
5685
5685
|
}
|
|
5686
|
-
var
|
|
5687
|
-
const
|
|
5686
|
+
var $a = qa();
|
|
5687
|
+
const Ba = /* @__PURE__ */ te($a);
|
|
5688
5688
|
var Ve, Bt;
|
|
5689
|
-
function
|
|
5689
|
+
function Ha() {
|
|
5690
5690
|
if (Bt) return Ve;
|
|
5691
5691
|
Bt = 1, Ve = e, e.displayName = "sql", e.aliases = [];
|
|
5692
5692
|
function e(t) {
|
|
@@ -5726,10 +5726,10 @@ function Ba() {
|
|
|
5726
5726
|
}
|
|
5727
5727
|
return Ve;
|
|
5728
5728
|
}
|
|
5729
|
-
var
|
|
5730
|
-
const
|
|
5729
|
+
var ja = Ha();
|
|
5730
|
+
const Ga = /* @__PURE__ */ te(ja);
|
|
5731
5731
|
var Ye, Ht;
|
|
5732
|
-
function
|
|
5732
|
+
function Wa() {
|
|
5733
5733
|
if (Ht) return Ye;
|
|
5734
5734
|
Ht = 1, Ye = e, e.displayName = "yaml", e.aliases = ["yml"];
|
|
5735
5735
|
function e(t) {
|
|
@@ -5817,10 +5817,10 @@ function Ga() {
|
|
|
5817
5817
|
}
|
|
5818
5818
|
return Ye;
|
|
5819
5819
|
}
|
|
5820
|
-
var
|
|
5821
|
-
const
|
|
5820
|
+
var Va = Wa();
|
|
5821
|
+
const Ya = /* @__PURE__ */ te(Va);
|
|
5822
5822
|
var Xe, jt;
|
|
5823
|
-
function
|
|
5823
|
+
function Xa() {
|
|
5824
5824
|
if (jt) return Xe;
|
|
5825
5825
|
jt = 1, Xe = e, e.displayName = "markdown", e.aliases = ["md"];
|
|
5826
5826
|
function e(t) {
|
|
@@ -6149,17 +6149,17 @@ function Ya() {
|
|
|
6149
6149
|
}
|
|
6150
6150
|
return Xe;
|
|
6151
6151
|
}
|
|
6152
|
-
var
|
|
6153
|
-
const
|
|
6154
|
-
K.registerLanguage("python",
|
|
6155
|
-
K.registerLanguage("javascript",
|
|
6156
|
-
K.registerLanguage("typescript",
|
|
6157
|
-
K.registerLanguage("json",
|
|
6158
|
-
K.registerLanguage("bash",
|
|
6159
|
-
K.registerLanguage("sql",
|
|
6160
|
-
K.registerLanguage("yaml",
|
|
6161
|
-
K.registerLanguage("markdown",
|
|
6162
|
-
const
|
|
6152
|
+
var Ka = Xa();
|
|
6153
|
+
const Qa = /* @__PURE__ */ te(Ka);
|
|
6154
|
+
K.registerLanguage("python", Ia);
|
|
6155
|
+
K.registerLanguage("javascript", La);
|
|
6156
|
+
K.registerLanguage("typescript", Pa);
|
|
6157
|
+
K.registerLanguage("json", Ua);
|
|
6158
|
+
K.registerLanguage("bash", Ba);
|
|
6159
|
+
K.registerLanguage("sql", Ga);
|
|
6160
|
+
K.registerLanguage("yaml", Ya);
|
|
6161
|
+
K.registerLanguage("markdown", Qa);
|
|
6162
|
+
const Za = pe({
|
|
6163
6163
|
code: ""
|
|
6164
6164
|
}), nt = ({
|
|
6165
6165
|
code: e,
|
|
@@ -6168,7 +6168,7 @@ const Qa = pe({
|
|
|
6168
6168
|
className: o,
|
|
6169
6169
|
children: r,
|
|
6170
6170
|
...a
|
|
6171
|
-
}) => /* @__PURE__ */ i(
|
|
6171
|
+
}) => /* @__PURE__ */ i(Za.Provider, { value: { code: e }, children: /* @__PURE__ */ i(
|
|
6172
6172
|
"div",
|
|
6173
6173
|
{
|
|
6174
6174
|
className: v(
|
|
@@ -6199,7 +6199,7 @@ const Qa = pe({
|
|
|
6199
6199
|
minWidth: "2.5rem"
|
|
6200
6200
|
},
|
|
6201
6201
|
showLineNumbers: n,
|
|
6202
|
-
style:
|
|
6202
|
+
style: Ca,
|
|
6203
6203
|
children: e
|
|
6204
6204
|
}
|
|
6205
6205
|
),
|
|
@@ -6224,7 +6224,7 @@ const Qa = pe({
|
|
|
6224
6224
|
minWidth: "2.5rem"
|
|
6225
6225
|
},
|
|
6226
6226
|
showLineNumbers: n,
|
|
6227
|
-
style:
|
|
6227
|
+
style: Na,
|
|
6228
6228
|
children: e
|
|
6229
6229
|
}
|
|
6230
6230
|
),
|
|
@@ -6232,32 +6232,32 @@ const Qa = pe({
|
|
|
6232
6232
|
] })
|
|
6233
6233
|
}
|
|
6234
6234
|
) });
|
|
6235
|
-
function
|
|
6235
|
+
function Ja(e, t = "size-4") {
|
|
6236
6236
|
return {
|
|
6237
|
-
web_search: /* @__PURE__ */ i(
|
|
6237
|
+
web_search: /* @__PURE__ */ i(oo, { className: t }),
|
|
6238
6238
|
web_fetch: /* @__PURE__ */ i(Te, { className: t }),
|
|
6239
|
-
code_execution: /* @__PURE__ */ i(
|
|
6240
|
-
image_generation: /* @__PURE__ */ i(
|
|
6241
|
-
}[e] ?? /* @__PURE__ */ i(
|
|
6239
|
+
code_execution: /* @__PURE__ */ i(no, { className: t }),
|
|
6240
|
+
image_generation: /* @__PURE__ */ i(to, { className: t })
|
|
6241
|
+
}[e] ?? /* @__PURE__ */ i(eo, { className: t });
|
|
6242
6242
|
}
|
|
6243
|
-
const
|
|
6243
|
+
const ei = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not-prose mb-4 w-full rounded-md border", e), ...t }), ti = ({ status: e }) => {
|
|
6244
6244
|
const { t } = z(["tools_ui"]), n = {
|
|
6245
6245
|
"input-streaming": t("pending"),
|
|
6246
6246
|
"input-available": t("running"),
|
|
6247
6247
|
"output-available": t("completed"),
|
|
6248
6248
|
"output-error": t("error")
|
|
6249
6249
|
};
|
|
6250
|
-
return /* @__PURE__ */ k(
|
|
6250
|
+
return /* @__PURE__ */ k(ya, { className: "gap-1.5 rounded-full text-xs", variant: "secondary", children: [
|
|
6251
6251
|
{
|
|
6252
|
-
"input-streaming": /* @__PURE__ */ i(
|
|
6253
|
-
"input-available": /* @__PURE__ */ i(
|
|
6254
|
-
"output-available": /* @__PURE__ */ i(
|
|
6255
|
-
"output-error": /* @__PURE__ */ i(
|
|
6252
|
+
"input-streaming": /* @__PURE__ */ i(io, { className: "size-4" }),
|
|
6253
|
+
"input-available": /* @__PURE__ */ i(ao, { className: "size-4 animate-pulse" }),
|
|
6254
|
+
"output-available": /* @__PURE__ */ i(ro, { className: "size-4 text-green-600" }),
|
|
6255
|
+
"output-error": /* @__PURE__ */ i(Jt, { className: "size-4 text-red-600" })
|
|
6256
6256
|
}[e],
|
|
6257
6257
|
n[e]
|
|
6258
6258
|
] });
|
|
6259
|
-
},
|
|
6260
|
-
const a = o || (t.startsWith("tool-") ? t.slice(5) : t), l =
|
|
6259
|
+
}, ni = ({ className: e, type: t, state: n, toolName: o, ...r }) => {
|
|
6260
|
+
const a = o || (t.startsWith("tool-") ? t.slice(5) : t), l = Ja(a, "size-4 text-muted-foreground");
|
|
6261
6261
|
return /* @__PURE__ */ k(
|
|
6262
6262
|
st,
|
|
6263
6263
|
{
|
|
@@ -6267,13 +6267,13 @@ const Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
6267
6267
|
/* @__PURE__ */ k("div", { className: "flex items-center gap-2", children: [
|
|
6268
6268
|
l,
|
|
6269
6269
|
/* @__PURE__ */ i("span", { className: "font-medium text-sm", children: a }),
|
|
6270
|
-
/* @__PURE__ */ i(
|
|
6270
|
+
/* @__PURE__ */ i(ti, { status: n })
|
|
6271
6271
|
] }),
|
|
6272
6272
|
/* @__PURE__ */ i(we, { className: "size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" })
|
|
6273
6273
|
]
|
|
6274
6274
|
}
|
|
6275
6275
|
);
|
|
6276
|
-
},
|
|
6276
|
+
}, oi = ({ className: e, ...t }) => /* @__PURE__ */ i(
|
|
6277
6277
|
ct,
|
|
6278
6278
|
{
|
|
6279
6279
|
className: v(
|
|
@@ -6282,7 +6282,7 @@ const Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
6282
6282
|
),
|
|
6283
6283
|
...t
|
|
6284
6284
|
}
|
|
6285
|
-
),
|
|
6285
|
+
), Pn = (e) => {
|
|
6286
6286
|
if (typeof e == "string")
|
|
6287
6287
|
try {
|
|
6288
6288
|
return JSON.stringify(JSON.parse(e), null, 2);
|
|
@@ -6290,13 +6290,13 @@ const Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
6290
6290
|
return e;
|
|
6291
6291
|
}
|
|
6292
6292
|
return JSON.stringify(e, null, 2);
|
|
6293
|
-
},
|
|
6293
|
+
}, ri = ({ className: e, input: t, ...n }) => {
|
|
6294
6294
|
const { t: o } = z(["tools_ui"]);
|
|
6295
6295
|
return /* @__PURE__ */ k("div", { className: v("space-y-2 overflow-hidden p-4", e), ...n, children: [
|
|
6296
6296
|
/* @__PURE__ */ i("h4", { className: "font-medium text-muted-foreground text-xs uppercase tracking-wide", children: o("parameters") }),
|
|
6297
|
-
/* @__PURE__ */ i("div", { className: "rounded-md bg-muted/50", children: /* @__PURE__ */ i(nt, { code:
|
|
6297
|
+
/* @__PURE__ */ i("div", { className: "rounded-md bg-muted/50", children: /* @__PURE__ */ i(nt, { code: Pn(t), language: "json" }) })
|
|
6298
6298
|
] });
|
|
6299
|
-
},
|
|
6299
|
+
}, ai = ({ className: e, output: t, errorText: n, ...o }) => {
|
|
6300
6300
|
const { t: r } = z(["tools_ui"]), [a, l] = P(!1);
|
|
6301
6301
|
if (!(t || n))
|
|
6302
6302
|
return null;
|
|
@@ -6316,17 +6316,17 @@ const Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
6316
6316
|
};
|
|
6317
6317
|
return /* @__PURE__ */ k("div", { className: v("space-y-2 p-4", e), ...o, children: [
|
|
6318
6318
|
/* @__PURE__ */ i("h4", { className: "font-medium text-muted-foreground text-xs uppercase tracking-wide", children: r(n ? "error" : "result") }),
|
|
6319
|
-
n && /* @__PURE__ */ k(
|
|
6320
|
-
/* @__PURE__ */ i(
|
|
6321
|
-
/* @__PURE__ */ i(
|
|
6319
|
+
n && /* @__PURE__ */ k(_a, { children: [
|
|
6320
|
+
/* @__PURE__ */ i(va, { asChild: !0, children: /* @__PURE__ */ k(_e, { variant: "destructive", size: "sm", children: [
|
|
6321
|
+
/* @__PURE__ */ i(Jt, { className: "mr-1.5 size-4" }),
|
|
6322
6322
|
r("view_error")
|
|
6323
6323
|
] }) }),
|
|
6324
|
-
/* @__PURE__ */ k(
|
|
6325
|
-
/* @__PURE__ */ i(
|
|
6324
|
+
/* @__PURE__ */ k(xa, { className: "max-w-2xl", children: [
|
|
6325
|
+
/* @__PURE__ */ i(Sa, { children: /* @__PURE__ */ i(Ea, { className: "text-destructive", children: r("tool_error") }) }),
|
|
6326
6326
|
/* @__PURE__ */ k("div", { className: "space-y-4", children: [
|
|
6327
|
-
/* @__PURE__ */ i("div", { className: "max-h-96 overflow-auto rounded-md bg-destructive/10 p-4 text-destructive text-sm", children: /* @__PURE__ */ i("pre", { className: "whitespace-pre-wrap break-words", children:
|
|
6327
|
+
/* @__PURE__ */ i("div", { className: "max-h-96 overflow-auto rounded-md bg-destructive/10 p-4 text-destructive text-sm", children: /* @__PURE__ */ i("pre", { className: "whitespace-pre-wrap break-words", children: Pn(n) }) }),
|
|
6328
6328
|
/* @__PURE__ */ k(_e, { variant: "outline", size: "sm", onClick: c, children: [
|
|
6329
|
-
/* @__PURE__ */ i(
|
|
6329
|
+
/* @__PURE__ */ i(Zt, { className: "mr-1.5 size-4" }),
|
|
6330
6330
|
r(a ? "copied" : "copy_error")
|
|
6331
6331
|
] })
|
|
6332
6332
|
] })
|
|
@@ -6335,7 +6335,7 @@ const Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not
|
|
|
6335
6335
|
t && !n && /* @__PURE__ */ i("div", { className: "overflow-x-auto rounded-md bg-muted/50 text-foreground text-xs [&_table]:w-full line-clamp-[20]", children: /* @__PURE__ */ i("div", { children: s() }) })
|
|
6336
6336
|
] });
|
|
6337
6337
|
};
|
|
6338
|
-
function
|
|
6338
|
+
function ii({ part: e, message: t, chat: n, toolComponents: o, showToolCalls: r }) {
|
|
6339
6339
|
const a = j(e);
|
|
6340
6340
|
let l = a.toolName;
|
|
6341
6341
|
if (!l && e.type.startsWith("tool-")) {
|
|
@@ -6356,28 +6356,28 @@ function ai({ part: e, message: t, chat: n, toolComponents: o, showToolCalls: r
|
|
|
6356
6356
|
const c = o[l];
|
|
6357
6357
|
return /* @__PURE__ */ i(c, { part: e, message: t, chat: n });
|
|
6358
6358
|
}
|
|
6359
|
-
return r ? /* @__PURE__ */ k(
|
|
6359
|
+
return r ? /* @__PURE__ */ k(ei, { className: "animate-in-bubble", children: [
|
|
6360
6360
|
/* @__PURE__ */ i(
|
|
6361
|
-
|
|
6361
|
+
ni,
|
|
6362
6362
|
{
|
|
6363
6363
|
type: e.type,
|
|
6364
6364
|
state: a.state,
|
|
6365
6365
|
toolName: l
|
|
6366
6366
|
}
|
|
6367
6367
|
),
|
|
6368
|
-
/* @__PURE__ */ k(
|
|
6369
|
-
/* @__PURE__ */ i(
|
|
6370
|
-
(a.state === "output-available" || a.state === "output-error") && /* @__PURE__ */ i(
|
|
6368
|
+
/* @__PURE__ */ k(oi, { children: [
|
|
6369
|
+
/* @__PURE__ */ i(ri, { input: a.input }),
|
|
6370
|
+
(a.state === "output-available" || a.state === "output-error") && /* @__PURE__ */ i(ai, { errorText: a.errorText, output: a.output })
|
|
6371
6371
|
] })
|
|
6372
6372
|
] }) : null;
|
|
6373
6373
|
}
|
|
6374
|
-
function
|
|
6374
|
+
function li({ part: e, message: t }) {
|
|
6375
6375
|
const { t: n } = z(["chat", "admin"]), o = j(e), r = (o.mediaType || o.media_type)?.startsWith("image/"), a = o.filename ?? "file", l = (c) => {
|
|
6376
6376
|
if (c.preventDefault(), !o.url) return;
|
|
6377
6377
|
const s = document.createElement("a");
|
|
6378
6378
|
s.href = o.url, s.download = a, document.body.appendChild(s), s.click(), document.body.removeChild(s);
|
|
6379
6379
|
};
|
|
6380
|
-
return /* @__PURE__ */ i("div", { className: "py-2 animate-in-bubble", children: /* @__PURE__ */ i(
|
|
6380
|
+
return /* @__PURE__ */ i("div", { className: "py-2 animate-in-bubble", children: /* @__PURE__ */ i(gn, { from: t.role, children: /* @__PURE__ */ i(mn, { isPlain: !0, children: r ? /* @__PURE__ */ k("div", { className: "group relative max-w-[280px] rounded-xl overflow-hidden border border-border/5 transition-all duration-300 hover:border-primary/30 hover:shadow-[0_0_20px_var(--glow)]", children: [
|
|
6381
6381
|
/* @__PURE__ */ i(
|
|
6382
6382
|
"img",
|
|
6383
6383
|
{
|
|
@@ -6407,7 +6407,7 @@ function ii({ part: e, message: t }) {
|
|
|
6407
6407
|
}
|
|
6408
6408
|
) })
|
|
6409
6409
|
] }) : /* @__PURE__ */ i("div", { className: "flex flex-col gap-1.5", children: /* @__PURE__ */ k("div", { className: "group inline-flex items-center gap-3 rounded-xl p-3 text-sm transition-all duration-300 bg-secondary/10 border border-border/5 hover:border-primary/30 hover:bg-secondary/20 hover:shadow-[0_0_15px_var(--glow)]", children: [
|
|
6410
|
-
/* @__PURE__ */ i("div", { className: "p-2.5 rounded-lg bg-background/50 border border-border/10 group-hover:border-primary/20 group-hover:text-primary transition-colors", children: /* @__PURE__ */ i(
|
|
6410
|
+
/* @__PURE__ */ i("div", { className: "p-2.5 rounded-lg bg-background/50 border border-border/10 group-hover:border-primary/20 group-hover:text-primary transition-colors", children: /* @__PURE__ */ i(Qt, { className: "size-4 shrink-0" }) }),
|
|
6411
6411
|
/* @__PURE__ */ k("div", { className: "flex flex-col min-w-0 mr-4", children: [
|
|
6412
6412
|
/* @__PURE__ */ i("span", { className: "truncate max-w-[180px] font-semibold text-foreground/90 leading-none mb-1 group-hover:text-foreground transition-colors", children: a }),
|
|
6413
6413
|
(o.mediaType || o.media_type) && /* @__PURE__ */ i("span", { className: "text-[10px] text-muted-foreground uppercase font-bold tracking-widest opacity-60", children: (o.mediaType || o.media_type)?.split("/").pop() })
|
|
@@ -6423,7 +6423,7 @@ function ii({ part: e, message: t }) {
|
|
|
6423
6423
|
)
|
|
6424
6424
|
] }) }) }) }) });
|
|
6425
6425
|
}
|
|
6426
|
-
function
|
|
6426
|
+
function si({ part: e, message: t }) {
|
|
6427
6427
|
const { t: n } = z(["chat"]), { focusReference: o } = it(), [r, a] = P(!1), l = e.data || e.reference;
|
|
6428
6428
|
if (!l) return null;
|
|
6429
6429
|
const c = l.excerpt || l.label || n("source_unavailable"), s = l.label && l.label !== c ? l.label : n("referenced_context");
|
|
@@ -6447,15 +6447,15 @@ function li({ part: e, message: t }) {
|
|
|
6447
6447
|
) });
|
|
6448
6448
|
}
|
|
6449
6449
|
const R = {
|
|
6450
|
-
MessageList:
|
|
6451
|
-
PromptInput:
|
|
6452
|
-
WelcomeScreen:
|
|
6453
|
-
TextPart:
|
|
6454
|
-
ReasoningPart:
|
|
6455
|
-
ToolPart:
|
|
6456
|
-
FilePart:
|
|
6457
|
-
ReferencePart:
|
|
6458
|
-
ChoiceQuestionPart:
|
|
6450
|
+
MessageList: $o,
|
|
6451
|
+
PromptInput: er,
|
|
6452
|
+
WelcomeScreen: tr,
|
|
6453
|
+
TextPart: pa,
|
|
6454
|
+
ReasoningPart: fa,
|
|
6455
|
+
ToolPart: ii,
|
|
6456
|
+
FilePart: li,
|
|
6457
|
+
ReferencePart: si,
|
|
6458
|
+
ChoiceQuestionPart: To,
|
|
6459
6459
|
toolComponents: void 0,
|
|
6460
6460
|
referenceAdapters: void 0,
|
|
6461
6461
|
textComponents: void 0,
|
|
@@ -6506,9 +6506,9 @@ const R = {
|
|
|
6506
6506
|
account: { enabled: !0, fields: {} }
|
|
6507
6507
|
}
|
|
6508
6508
|
}
|
|
6509
|
-
},
|
|
6509
|
+
}, Mn = pe(R);
|
|
6510
6510
|
function ge() {
|
|
6511
|
-
return ke(
|
|
6511
|
+
return ke(Mn);
|
|
6512
6512
|
}
|
|
6513
6513
|
function vl({
|
|
6514
6514
|
components: e,
|
|
@@ -6554,23 +6554,23 @@ function vl({
|
|
|
6554
6554
|
}),
|
|
6555
6555
|
[e, t, n, o, r, a, l, c, s, u]
|
|
6556
6556
|
);
|
|
6557
|
-
return /* @__PURE__ */ i(
|
|
6557
|
+
return /* @__PURE__ */ i(Mn.Provider, { value: m, children: g });
|
|
6558
6558
|
}
|
|
6559
6559
|
const {
|
|
6560
|
-
slice:
|
|
6561
|
-
forEach:
|
|
6560
|
+
slice: ci,
|
|
6561
|
+
forEach: ui
|
|
6562
6562
|
} = [];
|
|
6563
|
-
function
|
|
6564
|
-
return
|
|
6563
|
+
function di(e) {
|
|
6564
|
+
return ui.call(ci.call(arguments, 1), (t) => {
|
|
6565
6565
|
if (t)
|
|
6566
6566
|
for (const n in t)
|
|
6567
6567
|
e[n] === void 0 && (e[n] = t[n]);
|
|
6568
6568
|
}), e;
|
|
6569
6569
|
}
|
|
6570
|
-
function
|
|
6570
|
+
function pi(e) {
|
|
6571
6571
|
return typeof e != "string" ? !1 : [/<\s*script.*?>/i, /<\s*\/\s*script\s*>/i, /<\s*img.*?on\w+\s*=/i, /<\s*\w+\s*on\w+\s*=.*?>/i, /javascript\s*:/i, /vbscript\s*:/i, /expression\s*\(/i, /eval\s*\(/i, /alert\s*\(/i, /document\.cookie/i, /document\.write\s*\(/i, /window\.location/i, /innerHTML/i].some((n) => n.test(e));
|
|
6572
6572
|
}
|
|
6573
|
-
const Gt = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,
|
|
6573
|
+
const Gt = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/, hi = function(e, t) {
|
|
6574
6574
|
const o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {
|
|
6575
6575
|
path: "/"
|
|
6576
6576
|
}, r = encodeURIComponent(t);
|
|
@@ -6619,7 +6619,7 @@ const Gt = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/, pi = function(e, t) {
|
|
|
6619
6619
|
path: "/",
|
|
6620
6620
|
sameSite: "strict"
|
|
6621
6621
|
};
|
|
6622
|
-
n && (r.expires = /* @__PURE__ */ new Date(), r.expires.setTime(r.expires.getTime() + n * 60 * 1e3)), o && (r.domain = o), document.cookie =
|
|
6622
|
+
n && (r.expires = /* @__PURE__ */ new Date(), r.expires.setTime(r.expires.getTime() + n * 60 * 1e3)), o && (r.domain = o), document.cookie = hi(e, t, r);
|
|
6623
6623
|
},
|
|
6624
6624
|
read(e) {
|
|
6625
6625
|
const t = `${e}=`, n = document.cookie.split(";");
|
|
@@ -6634,7 +6634,7 @@ const Gt = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/, pi = function(e, t) {
|
|
|
6634
6634
|
this.create(e, "", -1, t);
|
|
6635
6635
|
}
|
|
6636
6636
|
};
|
|
6637
|
-
var
|
|
6637
|
+
var gi = {
|
|
6638
6638
|
name: "cookie",
|
|
6639
6639
|
// Deconstruct the options object and extract the lookupCookie property
|
|
6640
6640
|
lookup(e) {
|
|
@@ -6654,7 +6654,7 @@ var hi = {
|
|
|
6654
6654
|
} = t;
|
|
6655
6655
|
n && typeof document < "u" && Wt.create(n, e, o, r, a);
|
|
6656
6656
|
}
|
|
6657
|
-
},
|
|
6657
|
+
}, mi = {
|
|
6658
6658
|
name: "querystring",
|
|
6659
6659
|
// Deconstruct the options object and extract the lookupQuerystring property
|
|
6660
6660
|
lookup(e) {
|
|
@@ -6674,7 +6674,7 @@ var hi = {
|
|
|
6674
6674
|
}
|
|
6675
6675
|
return n;
|
|
6676
6676
|
}
|
|
6677
|
-
},
|
|
6677
|
+
}, fi = {
|
|
6678
6678
|
name: "hash",
|
|
6679
6679
|
// Deconstruct the options object and extract the lookupHash property and the lookupFromHashIndex property
|
|
6680
6680
|
lookup(e) {
|
|
@@ -6718,7 +6718,7 @@ const Vt = () => {
|
|
|
6718
6718
|
}
|
|
6719
6719
|
return le;
|
|
6720
6720
|
};
|
|
6721
|
-
var
|
|
6721
|
+
var bi = {
|
|
6722
6722
|
name: "localStorage",
|
|
6723
6723
|
// Deconstruct the options object and extract the lookupLocalStorage property
|
|
6724
6724
|
lookup(e) {
|
|
@@ -6749,7 +6749,7 @@ const Yt = () => {
|
|
|
6749
6749
|
}
|
|
6750
6750
|
return se;
|
|
6751
6751
|
};
|
|
6752
|
-
var
|
|
6752
|
+
var yi = {
|
|
6753
6753
|
name: "sessionStorage",
|
|
6754
6754
|
lookup(e) {
|
|
6755
6755
|
let {
|
|
@@ -6764,7 +6764,7 @@ var bi = {
|
|
|
6764
6764
|
} = t;
|
|
6765
6765
|
n && Yt() && window.sessionStorage.setItem(n, e);
|
|
6766
6766
|
}
|
|
6767
|
-
},
|
|
6767
|
+
}, _i = {
|
|
6768
6768
|
name: "navigator",
|
|
6769
6769
|
lookup(e) {
|
|
6770
6770
|
const t = [];
|
|
@@ -6781,7 +6781,7 @@ var bi = {
|
|
|
6781
6781
|
}
|
|
6782
6782
|
return t.length > 0 ? t : void 0;
|
|
6783
6783
|
}
|
|
6784
|
-
},
|
|
6784
|
+
}, vi = {
|
|
6785
6785
|
name: "htmlTag",
|
|
6786
6786
|
// Deconstruct the options object and extract the htmlTag property
|
|
6787
6787
|
lookup(e) {
|
|
@@ -6791,7 +6791,7 @@ var bi = {
|
|
|
6791
6791
|
const o = t || (typeof document < "u" ? document.documentElement : null);
|
|
6792
6792
|
return o && typeof o.getAttribute == "function" && (n = o.getAttribute("lang")), n;
|
|
6793
6793
|
}
|
|
6794
|
-
},
|
|
6794
|
+
}, ki = {
|
|
6795
6795
|
name: "path",
|
|
6796
6796
|
// Deconstruct the options object and extract the lookupFromPathIndex property
|
|
6797
6797
|
lookup(e) {
|
|
@@ -6802,7 +6802,7 @@ var bi = {
|
|
|
6802
6802
|
const n = window.location.pathname.match(/\/([a-zA-Z-]*)/g);
|
|
6803
6803
|
return Array.isArray(n) ? n[typeof t == "number" ? t : 0]?.replace("/", "") : void 0;
|
|
6804
6804
|
}
|
|
6805
|
-
},
|
|
6805
|
+
}, wi = {
|
|
6806
6806
|
name: "subdomain",
|
|
6807
6807
|
lookup(e) {
|
|
6808
6808
|
let {
|
|
@@ -6813,15 +6813,15 @@ var bi = {
|
|
|
6813
6813
|
return o[n];
|
|
6814
6814
|
}
|
|
6815
6815
|
};
|
|
6816
|
-
let
|
|
6816
|
+
let zn = !1;
|
|
6817
6817
|
try {
|
|
6818
|
-
document.cookie,
|
|
6818
|
+
document.cookie, zn = !0;
|
|
6819
6819
|
} catch {
|
|
6820
6820
|
}
|
|
6821
|
-
const
|
|
6822
|
-
|
|
6823
|
-
const
|
|
6824
|
-
order:
|
|
6821
|
+
const Un = ["querystring", "cookie", "localStorage", "sessionStorage", "navigator", "htmlTag"];
|
|
6822
|
+
zn || Un.splice(1, 1);
|
|
6823
|
+
const xi = () => ({
|
|
6824
|
+
order: Un,
|
|
6825
6825
|
lookupQuerystring: "lng",
|
|
6826
6826
|
lookupCookie: "i18next",
|
|
6827
6827
|
lookupLocalStorage: "i18nextLng",
|
|
@@ -6833,7 +6833,7 @@ const wi = () => ({
|
|
|
6833
6833
|
// cookieDomain: 'myDomain'
|
|
6834
6834
|
convertDetectedLanguage: (e) => e
|
|
6835
6835
|
});
|
|
6836
|
-
class
|
|
6836
|
+
class qn {
|
|
6837
6837
|
constructor(t) {
|
|
6838
6838
|
let n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
6839
6839
|
this.type = "languageDetector", this.detectors = {}, this.init(t, n);
|
|
@@ -6842,7 +6842,7 @@ class Un {
|
|
|
6842
6842
|
let t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {
|
|
6843
6843
|
languageUtils: {}
|
|
6844
6844
|
}, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
|
6845
|
-
this.services = t, this.options =
|
|
6845
|
+
this.services = t, this.options = di(n, this.options || {}, xi()), typeof this.options.convertDetectedLanguage == "string" && this.options.convertDetectedLanguage.indexOf("15897") > -1 && (this.options.convertDetectedLanguage = (r) => r.replace("-", "_")), this.options.lookupFromUrlIndex && (this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex), this.i18nOptions = o, this.addDetector(gi), this.addDetector(mi), this.addDetector(bi), this.addDetector(yi), this.addDetector(_i), this.addDetector(vi), this.addDetector(ki), this.addDetector(wi), this.addDetector(fi);
|
|
6846
6846
|
}
|
|
6847
6847
|
addDetector(t) {
|
|
6848
6848
|
return this.detectors[t.name] = t, this;
|
|
@@ -6854,7 +6854,7 @@ class Un {
|
|
|
6854
6854
|
let r = this.detectors[o].lookup(this.options);
|
|
6855
6855
|
r && typeof r == "string" && (r = [r]), r && (n = n.concat(r));
|
|
6856
6856
|
}
|
|
6857
|
-
}), n = n.filter((o) => o != null && !
|
|
6857
|
+
}), n = n.filter((o) => o != null && !pi(o)).map((o) => this.options.convertDetectedLanguage(o)), this.services && this.services.languageUtils && this.services.languageUtils.getBestMatchFromCodes ? n : n.length > 0 ? n[0] : null;
|
|
6858
6858
|
}
|
|
6859
6859
|
cacheUserLanguage(t) {
|
|
6860
6860
|
let n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.options.caches;
|
|
@@ -6863,45 +6863,62 @@ class Un {
|
|
|
6863
6863
|
}));
|
|
6864
6864
|
}
|
|
6865
6865
|
}
|
|
6866
|
-
|
|
6867
|
-
const xi = { new_conversation: "New conversation", tooltip_new_conversation: "Start a new conversation", delete_conversation: "Delete", delete_confirm_title: "Delete conversation?", delete_confirm_description: "Are you sure you want to delete this chat? This action cannot be undone.", cancel: "Cancel", delete: "Delete", chat_deleted_success: "Chat deleted successfully", logout: "Logout", new_chat: "New Chat", rename_conversation: "Rename", rename_success: "Conversation renamed successfully", rename_failed: "Failed to rename conversation", search_conversations: "Search conversations...", save: "Save", no_conversations: "No conversations yet", loading_more: "Loading more...", pinned_success: "Conversation pinned", unpinned_success: "Conversation unpinned", pin_failed: "Failed to pin conversation", share_success: "Link copied", share_description: "The shareable link has been copied to your clipboard.", share_failed: "Failed to generate share link", pin_conversation: "Pin", unpin_conversation: "Unpin", share_conversation: "Share" }, Si = { tools: "Tools", error: "Error:", input_placeholder: "Ask something...", insufficient_balance: "Insufficient balance. Please recharge your account to continue.", regenerate: "Regenerate", retry: "Retry", copy: "Copy", like: "Like", dislike: "Dislike", attach_file: "Attach file", remove_file: "Remove file", reference: "Reference", reference_selection: "Reference selection", remove_reference: "Remove reference", referenced_context: "Referenced context", source_unavailable: "Source unavailable", tool_reference: "Tool reference", card_reference: "Card reference", used_sources: "Used {{count}} sources", welcome: { title: "Hello! How can I help you today?", subtitle: "Ask me anything and I'll do my best to help.", suggestions: ["What can you help me with?", "Tell me something interesting", "Help me write an email", "Explain a concept to me"] }, disclaimer: "AI can make mistakes. Check important info." }, Ei = { pending: "Pending", running: "Running", completed: "Completed", error: "Error", parameters: "Parameters", result: "Result", view_error: "View Error", tool_error: "Tool Error", copied: "Copied!", copy_error: "Copy Error" }, Ni = { login_tab: "Login", signup_tab: "Sign Up", phone: "Phone", phone_placeholder: "Phone number", password: "Password", name: "Name", name_placeholder: "First Name", surname: "Surname", surname_placeholder: "Last Name", loading: "Loading...", logging_in: "Logging in...", signing_up: "Signing up...", auth_page_disabled_title: "The sign-in page is currently disabled.", auth_page_disabled_description: "Please contact the administrator for access.", select_placeholder: "Select an option", login_button: "Login", signup_button: "Sign Up" }, Ci = { toggle: "Change theme", light: "Switch to light theme", dark: "Switch to dark theme", system: "Switch to system theme" }, Ti = /* @__PURE__ */ JSON.parse(`{"select_placeholder":"Select an option","loading":"Loading...","retry":"Retry","save":"Save","saving":"Saving...","cancel":"Cancel","delete":"Delete","edit":"Edit","search":"Search","search_placeholder":"Search...","no_data":"No data available","loading_more":"Loading more...","confirm_delete":"Are you sure you want to delete?","error_loading":"Error loading data","close":"Close","jobs":{"section_title":"Maintenance Jobs","no_jobs":"No jobs are registered for this deployment.","run":"Run","run_dry":"Dry run","run_started":"Started \\"{{name}}\\"","run_failed":"Failed to start job","history":"Run history","history_help":"Recent runs. Click a row to see its inputs and output.","view_history":"View run history","inputs":"Inputs","no_runs":"No runs yet.","dry_run":"Dry run","dry_run_help":"Simulate the job without writing any changes.","confirm_destructive":"This is a destructive job. Type \\"{{name}}\\" to confirm.","output":"Output","no_output":"(no output)","output_truncated":"...[output truncated]","result":"Result","cancel_run":"Cancel run","triggered_by":"Triggered by {{user}}","triggered_by_api":"Triggered via API key","danger":{"safe":"safe","caution":"caution","destructive":"destructive"},"status":{"queued":"Queued","processing":"Running","completed":"Completed","failed":"Failed","cancelled":"Cancelled"},"raw":{"title":"Run raw Python","warning":"This executes arbitrary Python on the server with full process privileges. There is no sandbox — only access control and an audit log. Use only when you know exactly what you are doing.","confirm_label":"Type \\"{{phrase}}\\" to enable running.","run":"Execute"}},"dashboard":{"title":"Admin Panel","logout":"Logout","tabs":{"analytics":"Analytics","chat_history":"Chats","users":"Users","admins":"Admins","settings":"Settings"}},"app_settings":{"title":"System Settings","subtitle":"Manage global configuration for application appearance and behavior.","sections":{"general":"Basic Information","chat":"Chat Experience","user_billing":"User & Billing"},"general":{"app_name":"App Name","admin_title":"Admin Panel Title","language":"Default Language","language_help":"The language users see on their first visit (if not auto-detected).","appearance":"Default Appearance","appearance_help":"These values apply when a user has not saved their own appearance preferences.","default_theme":"Default Theme","default_accent":"Default Accent Color","default_accent_help":"Enter any browser-supported CSS color, such as #3b82f6, rgb(59 130 246), or oklch(0.623 0.214 259.815).","default_accent_invalid":"Enter a valid browser-supported CSS color.","default_accent_preview":"Accent color preview"},"chat":{"welcome_greeting":"Welcome Greeting","welcome_subtitle":"Welcome Subtitle","disclaimer":"Disclaimer Text","show_tool_details":"Show technical tool details","show_tool_details_help":"Enable this to show professional technical details of AI tools to users.","show_settings":"Show settings icon for users","show_settings_help":"Show a settings gear icon in the chat interface for user customization.","show_version_in_settings":"Show app version in user settings","show_version_in_settings_help":"Show the app version at the bottom of the user settings dialog. This does not affect the admin settings page.","disable_signup":"Disable signup","disable_signup_help":"Hide the signup tab so users can only log in.","disable_auth_page":"Disable login/signup page","disable_auth_page_help":"Hide the entire auth page and prevent users from reaching login or signup forms.","composer_attachments":"Enable File Attachments","composer_attachments_help":"Allow users to upload and attach files to their messages.","thread_actions_feedback":"Enable Feedback Buttons","thread_actions_feedback_help":"Show like/dislike buttons on AI responses.","thread_actions_retry":"Enable Retry Button","thread_actions_retry_help":"Show a retry button to regenerate the last AI response.","history_enabled":"Enable Chat History Sidebar","history_enabled_help":"Show the sidebar containing previous conversations.","history_show_delete":"Allow Deleting Conversations","history_show_rename":"Allow Renaming Conversations","history_show_share":"Allow Sharing Conversations","history_show_pin":"Allow Pinning Conversations","sections_modes":"Settings Tab Modes","sections_modes_help":"Control visibility and interactability of settings tabs for users.","mode_editable":"Enable (Editable)","mode_faded":"Fade (Readonly)","mode_hidden":"Hide (Disable)","general_tab":"General Tab","profile_tab":"Profile Tab","account_tab":"Account Tab","inner_fields_modes":"Inner Fields Visibility","inner_fields_modes_help":"Configure visibility for individual fields within each tab."},"user_billing":{"initial_balance_tokens":"Default Initial Tokens","initial_balance_requests":"Default Initial Requests","initial_balance_help":"These values will be assigned to new users by default if not specified during creation."},"save_success":"Settings saved successfully","save_error":"Failed to save settings","save":"Save Changes","translations_management":"Translations Management","editor_tips":"All changes are saved automatically to local state. Don't forget to push 'Save Changes' to persist.","sync_from_code":"Sync from Code","reset_button":"Reset to Defaults","reset_confirm_title":"Reset Settings?","reset_confirm_description":"This will reset all fields to their original default values from the code. Current unsaved changes will be lost.","preview":"Preview","tips_label":"TIPS"},"analytics":{"title":"Analytics & Statistics","days":"{{count}} Days","time_range_label":"Last","days_unit":"days","total_users":"Total Users","total_threads":"Total Threads","total_messages":"Total Messages","total_token_usage":"Total Token Usage","usage_cost":"Usage & Cost","input":"Input","output":"Output","cost":"Cost","threads_chart":"Threads","messages_chart":"Messages","token_usage_chart":"Token Usage","cost_chart":"Cost Per Day","active_users":"Active Users","conversations":"conversations","threads":"threads","feedback":"User Feedback","total_feedback":"Total Feedback","positive":"Positive","negative":"Negative","loading_analytics":"Loading analytics...","error_loading":"Error loading data","source_human":"Users","source_service":"Service","source_all":"All","source_caption_human":"Showing real users only","source_caption_service":"Showing service traffic only","source_caption_all":"Showing all traffic"},"chat_history":{"title":"Chat History Management","search_placeholder":"Search by name, phone, thread title, or ID...","search_button":"Search","threads_list":"Threads List","thread_count":"{{count}}","no_thread_title":"Untitled conversation","messages":"Messages","messages_for":"Messages for: {{title}}","select_thread":"Select a conversation to view","no_threads":"No conversations found","empty_thread":"This conversation is empty","loading_threads":"Loading...","loading_messages":"Loading messages...","user_label":"User","assistant_label":"AI Assistant","input_tokens":"Input: {{value}}","output_tokens":"Output: {{value}}","total_tokens":"Total: {{value}}","cost":"Cost: {{value}}","unpriced":"Unpriced","all_feedbacks":"All Conversations","liked_feedbacks":"Liked 👍","disliked_feedbacks":"Disliked 👎","any_feedback":"With Feedback","output_available":"Output Available","running":"Running...","unnamed_file":"Unnamed File","download_file":"Download File","source_human":"Users","source_service":"Service","source_all":"All sources","external_user_id":"Service ref"},"users":{"title":"User Management","user_count":"User count: {{count}}","add_user":"Add New User","edit_user":"Edit User","phone":"Phone Number","phone_placeholder":"09123456789","name":"Name","surname":"Surname","initial_tokens":"Initial Tokens (optional)","initial_requests":"Initial Requests (optional)","balance":"Balance","requests_label":"Requests","tokens_label":"Tokens","token_limit":"Token Limit","request_limit":"Request Limit","tokens_usage":"Tokens Usage","requests_usage":"Requests Usage","actions":"Actions","copy_token":"Copy Token (auto-refresh)","token_copied":"Token copied successfully","no_token":"No token found for this user","recharge":"Recharge Balance","full_charge":"Full Charge","update_balance":"Update Balance","update_balance_for":"Update Balance for","token_count":"Token Count","request_count":"Request Count","updating":"Updating...","no_users":"No users found.","sort_ascending":"Sort ascending","sort_descending":"Sort descending","confirm_delete_user":"Are you sure you want to delete this user?","tokens_exceed_limit":"Tokens cannot exceed the specified limit","requests_exceed_limit":"Requests cannot exceed the specified limit","metadata":"Metadata (JSON)","initial_balance":"Initial Balance","custom_fields":"Additional Fields","metadata_raw":"Metadata (Raw JSON)","advanced_usage":"Advanced usage","invalid_json":"Invalid JSON format","auto_recharge":"Automatic Balance Renewal","auto_recharge_help":"Restore this user's balance to its limits on a recurring schedule.","enabled":"Enabled","recharge_interval":"Every","recharge_unit":"Interval Unit","recharge_unit_minute":"Minute(s)","recharge_unit_hour":"Hour(s)","recharge_unit_day":"Day(s)","recharge_unit_week":"Week(s)","recharge_unit_month":"Month(s)","recharge_schedule_help":"New schedules begin when saved. Existing schedules keep their current cycle anchor.","next_recharge":"Next renewal","last_recharge":"Last automatic renewal","not_available":"Not available","recharge_interval_invalid":"The renewal interval must be a positive whole number","recharge_policy_not_saved":"The backend did not save the renewal policy. Restart or update the backend to the version that supports automatic renewal.","usage_summary":"Usage Summary","input_tokens":"Input Tokens","output_tokens":"Output Tokens","total_tokens":"Total Tokens","requests_made":"Requests Made","total_cost":"Total Cost","renewals":"Balance Renewals","unpriced_requests":"Unpriced Requests","bulk_balance":"Bulk Balance","bulk_balance_help":"Apply a balance change to all matching users using search, explicit IDs, and metadata filters.","bulk_operation":"Operation","bulk_operation_add":"Add to balance","bulk_operation_set":"Set exact balance","bulk_operation_full_charge":"Fill to limits","bulk_use_current_search":"Use current search text","bulk_user_ids":"User IDs (optional)","bulk_metadata_filters":"Metadata Filters (JSON)","bulk_available_metadata":"Available metadata keys","bulk_preview_empty":"Affected users will be checked before applying.","bulk_preview_count":"{{count}} users match","apply_bulk_balance":"Apply Change","bulk_balance_confirm":"Apply this balance change to {{count}} users?","matching_users":"matching","bulk_apply_balance":"Update balances","bulk_apply_renewal":"Update renewal policy","bulk_select_change":"Select at least one bulk change to apply.","bulk_renewal_policy":"Renewal Policy","bulk_renewal_policy_help":"Enable or disable automatic renewal for every matched user.","bulk_renewal_anchor":"First renewal time (optional)","source_human":"Users","source_service":"Service","source_all":"All","account_type":"Account type","account_type_human":"Human user","account_type_service":"Service (external API)","account_type_service_help":"External API consumer. Phone is optional; share this account’s token with the integrating service.","service_name":"Service name","service_name_placeholder":"e.g. Acme CRM integration","optional":"optional"},"admins":{"title":"Admin Management","admin_count":"Admin count: {{count}}","add_admin":"Add New Admin","edit_admin":"Edit Admin","username":"Username","name":"Name","password":"Password","password_edit":"New Password (leave empty to keep current)","permissions":"Permissions","perm_chat_history":"Chat History","perm_admin_management":"Admin Management","perm_user_management":"User Management","perm_analytics":"Analytics","perm_settings":"Settings","no_admins":"No admins found.","confirm_delete_admin":"Are you sure you want to delete this admin?"},"errors":{"access_denied_title":"Access Denied","access_denied_message":"You don't have the necessary permissions to access this page. You can contact the administrator!","back_to_dashboard":"Back to Dashboard"},"login":{"title":"Admin Panel","setup_title":"Initial Setup","setup_description":"No admin account exists yet. Set a password for the default admin user to get started.","set_password":"Set Password","set_password_placeholder":"Choose a strong password","confirm_password":"Confirm Password","confirm_password_placeholder":"Re-enter the password","passwords_mismatch":"Passwords do not match","password_too_short":"Password must be at least 4 characters","create_admin":"Create Admin & Login","setting_up":"Setting up...","username":"Username","username_placeholder":"Username","password":"Password","password_placeholder":"••••••••","submit":"Login","logging_in":"Logging in...","error":"Login failed","copyright":"© 2026 AI Chatbot Platform"}}`), Ai = { title: "Settings", sections: { profile: "Profile", general: "General", account: "Account" }, profile: { title: "Profile Information", subtitle: "Update your personal details below.", name: "First Name", surname: "Last Name", phone: "Phone Number", password: "New Password", password_placeholder: "Leave empty to keep current", save: "Save Changes", saving: "Saving...", success: "Profile updated successfully", error: "Failed to update profile", select_placeholder: "Select an option" }, general: { title: "General Settings", subtitle: "Configure look and feel and language.", theme: "Theme", language: "Language", themes: { light: "Light", dark: "Dark", system: "System" }, accent: "Accent Color", radius: "Rounded Corners", radius_levels: { sharp: "Sharp", round: "Round" }, languages: { en: "English", fa: "Persian" } }, account: { title: "Account & Usage", subtitle: "Monitor your quotas and manage your session.", balance: "Current Balance", tokens: "Tokens", requests: "Requests", logout: "Logout", logout_confirm: "Are you sure you want to logout?", last_recharge: "Last balance update on" } }, Ii = { unauthorized: "Authentication required. Please login again.", invalid_credentials: "Invalid phone number or password.", phone_required: "Phone number is required.", password_required: "Password is required.", name_surname_required: "Name and surname are required.", phone_already_exists: "This phone number is already registered.", invalid_token: "Your session has expired. Please login again.", user_not_found: "User not found.", insufficient_balance: "Insufficient balance. Please recharge your account.", me_update_failed: "Failed to update profile information.", thread_not_found: "Conversation not found.", access_denied: "You do not have permission to perform this action.", feedback_save_failed: "Failed to save feedback.", thread_update_failed: "Failed to update conversation.", thread_delete_failed: "Failed to delete conversation.", attachment_not_found: "Attachment not found.", thread_share_failed: "Failed to share conversation.", model_quota_reached_error: "The system cannot respond at this time. Please try again later.", admin_already_exists: "Admin with this username already exists.", admin_not_found: "Admin not found.", cannot_delete_self: "You cannot delete your own admin account.", admin_update_failed: "Failed to update admin information.", internal_error: "An internal server error occurred. Please try again later.", validation_error: "Invalid data provided. Please check your input.", not_found: "The requested resource was not found." }, Ri = {
|
|
6868
|
-
sidebar:
|
|
6869
|
-
chat:
|
|
6870
|
-
tools_ui:
|
|
6871
|
-
login:
|
|
6872
|
-
theme:
|
|
6873
|
-
admin:
|
|
6874
|
-
settings:
|
|
6875
|
-
errors:
|
|
6876
|
-
}, Oi = { new_conversation: "گفتگوی جدید", tooltip_new_conversation: "شروع یک گفتگوی جدید", delete_conversation: "حذف", delete_confirm_title: "حذف گفتگو؟", delete_confirm_description: "آیا از حذف این گفتگو اطمینان دارید؟ این عمل قابل بازگشت نیست.", cancel: "انصراف", delete: "حذف", chat_deleted_success: "گفتگو با موفقیت حذف شد", logout: "خروج", new_chat: "گفتگوی جدید", rename_conversation: "تغییر نام", rename_success: "نام گفتگو با موفقیت تغییر کرد", rename_failed: "خطا در تغییر نام گفتگو", search_conversations: "جستجوی گفتگوها...", save: "ذخیره", no_conversations: "هنوز گفتگویی ندارید", loading_more: "در حال بارگذاری...", pinned_success: "گفتگو پین شد", unpinned_success: "گفتگو از حالت پین خارج شد", pin_failed: "خطا در پین کردن گفتگو", share_success: "لینک کپی شد", share_description: "لینک اشتراکگذاری در حافظه موقت کپی شد.", share_failed: "خطا در ایجاد لینک اشتراکگذاری", pin_conversation: "پین", unpin_conversation: "برداشتن پین", share_conversation: "اشتراکگذاری" }, Li = { tools: "ابزارها", error: "خطا:", input_placeholder: "سوالتو اینجا بپرس...", insufficient_balance: "موجودی حساب شما کافی نیست. لطفا برای ادامه، حساب خود را شارژ کنید.", regenerate: "تولید مجدد", retry: "تلاش مجدد", copy: "کپی", like: "پسندیدم", dislike: "نپسندیدم", attach_file: "پیوست فایل", remove_file: "حذف فایل", reference: "ارجاع", reference_selection: "ارجاع به بخش انتخابشده", remove_reference: "حذف ارجاع", referenced_context: "بخش ارجاعشده", source_unavailable: "منبع در دسترس نیست", tool_reference: "ارجاع به ابزار", card_reference: "ارجاع به کارت", used_sources: "از {{count}} منبع استفاده شد", welcome: { title: "سلام! چطور میتونم کمکت کنم؟", subtitle: "هر سوالی داری بپرس، تمام تلاشمو میکنم کمکت کنم.", suggestions: ["چه کارهایی میتونی انجام بدی؟", "یه چیز جالب بهم بگو", "کمکم کن یه ایمیل بنویسم", "یه مفهوم رو برام توضیح بده"] }, disclaimer: "هوش مصنوعی ممکن است اشتباه کند. اطلاعات مهم را بررسی کنید." }, Di = { pending: "در انتظار", running: "در حال اجرا", completed: "تکمیل شده", error: "خطا", parameters: "پارامترها", result: "نتیجه", view_error: "نمایش خطا", tool_error: "خطای ابزار", copied: "کپی شد!", copy_error: "کپی خطا" }, Fi = { login_tab: "ورود", signup_tab: "ثبت نام", phone: "شماره تلفن", phone_placeholder: "شماره تلفن", password: "رمز عبور", name: "نام", name_placeholder: "نام", surname: "نام خانوادگی", surname_placeholder: "نام خانوادگی", logging_in: "در حال ورود...", signing_up: "در حال ثبت نام...", auth_page_disabled_title: "صفحه ورود غیرفعال شده است.", auth_page_disabled_description: "برای دسترسی با مدیر سامانه تماس بگیرید.", select_placeholder: "انتخاب کنید", login_button: "ورود", signup_button: "ثبت نام" }, Pi = { toggle: "تغییر تم", light: "تغییر به تم روشن", dark: "تغییر به تم تاریک", system: "تغییر به تم سیستم" }, Mi = /* @__PURE__ */ JSON.parse('{"select_placeholder":"انتخاب کنید","loading":"در حال بارگذاری...","retry":"تلاش مجدد","save":"ذخیره","saving":"در حال ذخیره...","cancel":"انصراف","delete":"حذف","edit":"ویرایش","search":"جستجو","search_placeholder":"جستجو...","no_data":"دادهای موجود نیست","loading_more":"در حال بارگذاری بیشتر...","confirm_delete":"آیا از حذف اطمینان دارید؟","error_loading":"خطا در بارگذاری دادهها","close":"بستن","jobs":{"section_title":"کارهای سیستمی","no_jobs":"هیچ کاری برای این برنامه تعریف نشده است.","run":"اجرا","run_dry":"اجرای آزمایشی","run_started":"کار «{{name}}» اجرا شد","run_failed":"اجرای کار با خطا مواجه شد","history":"تاریخچهٔ اجراها","history_help":"اجراهای اخیر. برای دیدن ورودیها و خروجی هر اجرا روی آن کلیک کنید.","view_history":"مشاهدهٔ تاریخچهٔ اجراها","inputs":"ورودیها","no_runs":"هنوز هیچ کاری اجرا نشده است.","dry_run":"اجرای آزمایشی","dry_run_help":"کار را بدون اعمال هیچ تغییری شبیهسازی میکند.","confirm_destructive":"این یک کار مخرب است. برای تأیید، نام «{{name}}» را وارد کنید.","output":"خروجی","no_output":"(خروجیای ثبت نشد)","output_truncated":"...[خروجی کوتاه شد]","result":"نتیجه","cancel_run":"لغو اجرا","triggered_by":"اجرا شده توسط {{user}}","triggered_by_api":"اجرا شده با کلید API","danger":{"safe":"بیخطر","caution":"نیازمند احتیاط","destructive":"مخرب"},"status":{"queued":"در صف","processing":"در حال اجرا","completed":"انجام شد","failed":"ناموفق","cancelled":"لغو شد"},"raw":{"title":"اجرای کد پایتون","warning":"این بخش کد پایتون دلخواه را با دسترسی کامل روی سرور اجرا میکند. هیچ ایزولهسازیای در کار نیست؛ تنها محافظت، کنترل دسترسی و ثبت در گزارش است. فقط زمانی استفاده کنید که از کاری که انجام میدهید کاملاً مطمئن هستید.","confirm_label":"برای فعال شدن دکمهٔ اجرا، عبارت «{{phrase}}» را وارد کنید.","run":"اجرای کد"}},"dashboard":{"title":"پنل ادمین","logout":"خروج","tabs":{"analytics":"تحلیل و آمار","chat_history":"گفتگوها","users":"کاربران","admins":"ادمینها","settings":"تنظیمات"}},"app_settings":{"title":"تنظیمات سامانه","subtitle":"پیکربندی کلی ظاهر و رفتار سامانه را مدیریت کنید.","sections":{"general":"اطلاعات پایه","chat":"تنظیمات گفتگو","user_billing":"کاربری و مالی"},"general":{"app_name":"نام سامانه","admin_title":"عنوان پنل ادمین","language":"زبان پیشفرض","language_help":"زبانی که کاربر در اولین ورود مشاهده میکند (در صورت عدم تشخیص خودکار).","appearance":"ظاهر پیشفرض","appearance_help":"این مقادیر زمانی اعمال میشوند که کاربر تنظیمات ظاهری خود را ذخیره نکرده باشد.","default_theme":"پوسته پیشفرض","default_accent":"رنگ اصلی پیشفرض","default_accent_help":"هر رنگ CSS پشتیبانیشده توسط مرورگر را وارد کنید؛ مانند #3b82f6 یا rgb(59 130 246).","default_accent_invalid":"یک رنگ CSS معتبر و پشتیبانیشده توسط مرورگر وارد کنید.","default_accent_preview":"پیشنمایش رنگ اصلی"},"chat":{"welcome_greeting":"پیام خوشآمدگویی","welcome_subtitle":"زیرعنوان خوشآمدگویی","disclaimer":"متن سلب مسئولیت","show_tool_details":"نمایش جزئیات فنی ابزارها (Tools)","show_tool_details_help":"برای نمایش جزئیات فنی و نحوه عملکرد ابزارهای هوش مصنوعی به کاربران، این گزینه را فعال کنید.","show_settings":"نمایش آیکون تنظیمات برای کاربران","show_settings_help":"نمایش چرخدنده تنظیمات در محیط چت برای شخصیسازی توسط کاربر.","show_version_in_settings":"نمایش نسخه برنامه در تنظیمات کاربر","show_version_in_settings_help":"نسخه برنامه را در پایین پنجره تنظیمات کاربر نمایش میدهد. این گزینه روی صفحه تنظیمات ادمین اثری ندارد.","disable_signup":"غیرفعالسازی ثبتنام","disable_signup_help":"تب ثبتنام را مخفی میکند تا کاربران فقط بتوانند وارد شوند.","disable_auth_page":"غیرفعالسازی صفحه ورود/ثبتنام","disable_auth_page_help":"کل صفحه احراز هویت را مخفی میکند و دسترسی به فرمهای ورود و ثبتنام را میبندد.","composer_attachments":"فعالسازی پیوست فایل","composer_attachments_help":"اجازه به کاربران برای آپلود و پیوست فایل به پیامها.","thread_actions_feedback":"فعالسازی دکمههای بازخورد","thread_actions_feedback_help":"نمایش دکمههای پسندیدن/نپسندیدن در پاسخهای هوش مصنوعی.","thread_actions_retry":"فعالسازی دکمه تلاش مجدد","thread_actions_retry_help":"نمایش دکمه تلاش مجدد برای تولید دوباره آخرین پاسخ هوش مصنوعی.","history_enabled":"فعالسازی سایدبار تاریخچه","history_enabled_help":"نمایش منوی کناری شامل گفتگوهای قبلی.","history_show_delete":"اجازه حذف گفتگوها","history_show_rename":"اجازه تغییر نام گفتگوها","history_show_share":"اجازه اشتراکگذاری گفتگوها","history_show_pin":"اجازه پین کردن گفتگوها","sections_modes":"وضعیت نمایش تبهای تنظیمات","sections_modes_help":"کنترل نمایش یا غیرفعال بودن تبهای مختلف در بخش تنظیمات کاربر.","mode_editable":"فعال (قابل ویرایش)","mode_faded":"محو (فقط خواندنی)","mode_hidden":"مخفی (غیرفعال)","general_tab":"تب عمومی","profile_tab":"تب پروفایل","account_tab":"تب حساب کاربری","inner_fields_modes":"مشاهدهپذیری فیلدهای داخلی","inner_fields_modes_help":"وضعیت نمایش فیلدهای هر تب را بهصورت مجزا پیکربندی کنید."},"user_billing":{"initial_balance_tokens":"توکن اولیه پیشفرض","initial_balance_requests":"تعداد درخواست اولیه پیشفرض","initial_balance_help":"این مقادیر بهصورت خودکار به کاربران جدید اختصاص داده میشوند، مگر اینکه هنگام ایجاد کاربر مقدار دیگری تعیین شود."},"save_success":"تنظیمات با موفقیت ذخیره شد","save_error":"خطا در ذخیرهسازی تنظیمات","save":"ذخیره تغییرات","translations_management":"مدیریت ترجمهها","editor_tips":"تمام تغییرات بهصورت خودکار در حالت محلی ذخیره میشوند. برای نهاییسازی، دکمه «ذخیره تغییرات» را بزنید.","sync_from_code":"همگامسازی از کد","reset_button":"بازنشانی به تنظیمات اولیه","reset_confirm_title":"بازنشانی تنظیمات؟","reset_confirm_description":"این عمل تمام فیلدها را به مقادیر پیشفرض در کد بازمیگرداند. تغییرات ذخیره نشده فعلی از بین خواهند رفت.","preview":"پیشنمایش","tips_label":"نکته"},"analytics":{"title":"تحلیل و آمار","days":"{{count}} روز","time_range_label":"بازه","days_unit":"روز","total_users":"تعداد کاربران","total_threads":"تعداد گفتگوها","total_messages":"تعداد پیامها","total_token_usage":"مصرف کل توکن","usage_cost":"مصرف و هزینه","input":"ورودی","output":"خروجی","cost":"هزینه","threads_chart":"گفتگوها","messages_chart":"پیامها","token_usage_chart":"مصرف توکن","cost_chart":"هزینه روزانه","active_users":"کاربران فعال","conversations":"گفتگو","threads":"گفتگو","feedback":"نظرات کاربران","total_feedback":"کل نظرات","positive":"مثبت","negative":"منفی","loading_analytics":"در حال بارگذاری تحلیلها...","error_loading":"خطا در بارگذاری دادهها","source_human":"کاربران","source_service":"سرویس","source_all":"همه","source_caption_human":"نمایش فقط کاربران واقعی","source_caption_service":"نمایش فقط ترافیک سرویس","source_caption_all":"نمایش همهٔ ترافیک"},"chat_history":{"title":"مدیریت تاریخچه گفتگوها","search_placeholder":"جستجو بر اساس نام، شماره تماس، عنوان گفتگو یا شناسه...","search_button":"جستجو","threads_list":"لیست گفتگوها","thread_count":"{{count}}","no_thread_title":"گفتگو بدون عنوان","messages":"پیامها","messages_for":"پیامهای گفتگو: {{title}}","select_thread":"یک گفتگو را برای مشاهده انتخاب کنید","no_threads":"هیچ گفتگویی یافت نشد","empty_thread":"این گفتگو خالی است","loading_threads":"در حال بارگذاری...","loading_messages":"در حال بارگذاری پیامها...","user_label":"کاربر","assistant_label":"دستیار هوشمند","input_tokens":"ورودی: {{value}}","output_tokens":"خروجی: {{value}}","total_tokens":"کل: {{value}}","cost":"هزینه: {{value}}","unpriced":"بدون هزینه","all_feedbacks":"همه گفتگوها","liked_feedbacks":"پسندیده شده 👍","disliked_feedbacks":"نپسندیده شده 👎","any_feedback":"دارای بازخورد","output_available":"خروجی موجود است","running":"در حال اجرا...","unnamed_file":"فایل بدون نام","download_file":"دانلود فایل","source_human":"کاربران","source_service":"سرویس","source_all":"همهٔ منابع","external_user_id":"شناسهٔ سرویس"},"users":{"title":"مدیریت کاربران","user_count":"تعداد کاربران: {{count}}","add_user":"افزودن کاربر جدید","edit_user":"ویرایش کاربر","phone":"شماره تلفن","phone_placeholder":"۰۹۱۲۳۴۵۶۷۸۹","name":"نام","surname":"نام خانوادگی","initial_tokens":"تعداد توکن اولیه (اختیاری)","initial_requests":"تعداد درخواست اولیه (اختیاری)","balance":"موجودی","requests_label":"درخواستها","tokens_label":"توکنها","token_limit":"سقف توکن","request_limit":"سقف درخواست","tokens_usage":"میزان مصرف توکن","requests_usage":"میزان مصرف درخواست","actions":"عملیات","copy_token":"کپی توکن (با بروزرسانی خودکار)","token_copied":"توکن با موفقیت کپی شد","no_token":"توکنی برای این کاربر یافت نشد","recharge":"شارژ موجودی","full_charge":"شارژ کامل","update_balance":"بروزرسانی موجودی","update_balance_for":"بروزرسانی موجودی","token_count":"تعداد توکن","request_count":"تعداد درخواست","updating":"در حال بروزرسانی...","no_users":"هیچ کاربری یافت نشد.","sort_ascending":"مرتبسازی صعودی","sort_descending":"مرتبسازی نزولی","confirm_delete_user":"آیا از حذف این کاربر اطمینان دارید؟","tokens_exceed_limit":"تعداد توکن نمیتواند بیشتر از سقف مجاز باشد","requests_exceed_limit":"تعداد درخواست نمیتواند بیشتر از سقف مجاز باشد","metadata":"متادیتا (JSON)","initial_balance":"موجودی اولیه","custom_fields":"فیلدهای اضافه","metadata_raw":"متادیتا (JSON خام)","advanced_usage":"استفاده پیشرفته","invalid_json":"فرمت JSON نامعتبر است","auto_recharge":"تمدید خودکار موجودی","auto_recharge_help":"موجودی این کاربر را طبق یک برنامه تکرارشونده تا سقف تعیینشده بازنشانی میکند.","enabled":"فعال","recharge_interval":"هر","recharge_unit":"واحد بازه","recharge_unit_minute":"دقیقه","recharge_unit_hour":"ساعت","recharge_unit_day":"روز","recharge_unit_week":"هفته","recharge_unit_month":"ماه","recharge_schedule_help":"برنامه جدید از زمان ذخیره آغاز میشود. برنامه موجود مبدأ دوره فعلی خود را حفظ میکند.","next_recharge":"تمدید بعدی","last_recharge":"آخرین تمدید خودکار","not_available":"در دسترس نیست","recharge_interval_invalid":"بازه تمدید باید یک عدد صحیح مثبت باشد","recharge_policy_not_saved":"سرور تنظیمات تمدید خودکار را ذخیره نکرد. سرور را راهاندازی مجدد یا به نسخه پشتیبانکننده از تمدید خودکار بروزرسانی کنید.","usage_summary":"خلاصه مصرف","input_tokens":"توکنهای ورودی","output_tokens":"توکنهای خروجی","total_tokens":"کل توکنها","requests_made":"تعداد درخواستها","total_cost":"هزینه کل","renewals":"دفعات شارژ موجودی","unpriced_requests":"درخواستهای بدون هزینهی ثبت شده","bulk_balance":"تغییر گروهی موجودی","bulk_balance_help":"تغییر موجودی را روی کاربران مطابق جستجو، شناسههای مشخص و فیلترهای متادیتا اعمال کنید.","bulk_operation":"عملیات","bulk_operation_add":"افزودن به موجودی","bulk_operation_set":"تنظیم مقدار دقیق","bulk_operation_full_charge":"شارژ تا سقف","bulk_use_current_search":"استفاده از جستجوی فعلی","bulk_user_ids":"شناسه کاربران (اختیاری)","bulk_metadata_filters":"فیلترهای متادیتا (JSON)","bulk_available_metadata":"کلیدهای متادیتای در دسترس","bulk_preview_empty":"تعداد کاربران مطابق قبل از اعمال بررسی میشود.","bulk_preview_count":"{{count}} کاربر مطابق هستند","apply_bulk_balance":"اعمال تغییر","bulk_balance_confirm":"این تغییر موجودی برای {{count}} کاربر اعمال شود؟","matching_users":"کاربران مطابق","bulk_apply_balance":"بروزرسانی موجودی","bulk_apply_renewal":"بروزرسانی سیاست تمدید","bulk_select_change":"حداقل یک تغییر گروهی را برای اعمال انتخاب کنید.","bulk_renewal_policy":"سیاست تمدید","bulk_renewal_policy_help":"تمدید خودکار را برای همه کاربران مطابق فعال یا غیرفعال کنید.","bulk_renewal_anchor":"زمان اولین تمدید (اختیاری)","source_human":"کاربران","source_service":"سرویس","source_all":"همه","account_type":"نوع حساب","account_type_human":"کاربر انسانی","account_type_service":"سرویس","account_type_service_help":"مصرفکنندهٔ سرویس خارجی. شمارهٔ تلفن اختیاری است؛ توکن این حساب را با سرویس یکپارچهشونده به اشتراک بگذارید.","service_name":"نام سرویس","service_name_placeholder":"مثلاً یکپارچهسازی CRM","optional":"اختیاری"},"admins":{"title":"مدیریت ادمینها","admin_count":"تعداد ادمینها: {{count}}","add_admin":"افزودن ادمین جدید","edit_admin":"ویرایش ادمین","username":"نام کاربری","name":"نام","password":"رمز عبور","password_edit":"رمز عبور جدید (خالی بگذارید تا تغییر نکند)","permissions":"دسترسیها","perm_chat_history":"تاریخچه گفتگوها","perm_admin_management":"مدیریت ادمینها","perm_user_management":"مدیریت کاربران","perm_analytics":"تحلیل و آمار","perm_settings":"تنظیمات","no_admins":"هیچ ادمینی یافت نشد.","confirm_delete_admin":"آیا از حذف این ادمین اطمینان دارید؟"},"errors":{"access_denied_title":"عدم دسترسی","access_denied_message":"شما مجوزهای لازم برای دسترسی به این صفحه را ندارید. میتوانید با مدیر سیستم تماس بگیرید.","back_to_dashboard":"بازگشت به پیشخوان"},"login":{"title":"پنل ادمین","setup_title":"راهاندازی اولیه","setup_description":"هنوز حساب ادمینی وجود ندارد. برای شروع، یک رمز عبور برای کاربر ادمین پیشفرض تنظیم کنید.","set_password":"تعیین رمز عبور","set_password_placeholder":"یک رمز عبور قوی انتخاب کنید","confirm_password":"تأیید رمز عبور","confirm_password_placeholder":"رمز عبور را دوباره وارد کنید","passwords_mismatch":"رمزهای عبور مطابقت ندارند","password_too_short":"رمز عبور باید حداقل ۴ کاراکتر باشد","create_admin":"ایجاد ادمین و ورود","setting_up":"در حال راهاندازی...","username":"نام کاربری","username_placeholder":"نام کاربری","password":"رمز عبور","password_placeholder":"••••••••","submit":"ورود به پنل","logging_in":"در حال ورود...","error":"خطا در ورود","copyright":"© ۲۰۲۶ پلتفرم چتبات هوشمند"}}'), zi = { title: "تنظیمات", sections: { profile: "پروفایل", general: "عمومی", account: "حساب کاربری" }, profile: { title: "اطلاعات پروفایل", subtitle: "اطلاعات شخصی خود را در زیر بروز کنید.", name: "نام", surname: "نام خانوادگی", phone: "شماره تلفن", password: "رمز عبور جدید", password_placeholder: "برای عدم تغییر خالی بگذارید", save: "ذخیره تغییرات", saving: "در حال ذخیره...", success: "پروفایل با موفقیت بروزرسانی شد", error: "خطا در بروزرسانی پروفایل", select_placeholder: "انتخاب کنید" }, general: { title: "تنظیمات عمومی", subtitle: "ظاهر و زبان برنامه را تنظیم کنید.", theme: "تم", language: "زبان", themes: { light: "روشن", dark: "تاریک", system: "سیستم" }, accent: "رنگ اصلی", radius: "میزان گردی لبهها", radius_levels: { sharp: "تیز", round: "گرد" }, languages: { en: "English", fa: "فارسی" } }, account: { title: "حساب و میزان مصرف", subtitle: "سهمیه مصرف و نشست خود را مدیریت کنید.", balance: "موجود فعلی", tokens: "توکنها", requests: "درخواستها", logout: "خروج از حساب", logout_confirm: "آیا از خروج اطمینان دارید؟", last_recharge: "آخرین بروزرسانی اعتبار در تاریخ" } }, Ui = { unauthorized: "دسترسی مجاز نیست. لطفاً دوباره وارد شوید.", invalid_credentials: "شماره تلفن یا رمز عبور اشتباه است.", phone_required: "شماره تلفن الزامی است.", password_required: "رمز عبور الزامی است.", name_surname_required: "نام و نام خانوادگی الزامی است.", phone_already_exists: "این شماره تلفن قبلاً ثبت شده است.", invalid_token: "نشست شما منقضی شده است. لطفاً دوباره وارد شوید.", user_not_found: "کاربر یافت نشد.", insufficient_balance: "موجودی کافی نیست. لطفاً حساب خود را شارژ کنید.", me_update_failed: "خطا در بروزرسانی اطلاعات پروفایل.", thread_not_found: "گفتگو یافت نشد.", access_denied: "شما اجازه انجام این عملیات را ندارید.", feedback_save_failed: "خطا در ثبت بازخورد.", thread_update_failed: "خطا در بروزرسانی گفتگو.", thread_delete_failed: "خطا در حذف گفتگو.", attachment_not_found: "فایل پیوست یافت نشد.", thread_share_failed: "خطا در اشتراکگذاری گفتگو.", model_quota_reached_error: "سامانه در حال حاضر قادر به پاسخگویی نیست. لطفاً بعداً دوباره تلاش کنید.", admin_already_exists: "ادمین با این نام کاربری قبلاً ایجاد شده است.", admin_not_found: "ادمین یافت نشد.", cannot_delete_self: "شما نمیتوانید حساب مدیریت خود را حذف کنید.", admin_update_failed: "خطا در بروزرسانی اطلاعات ادمین.", internal_error: "یک خطای داخلی در سرور رخ داده است. لطفاً بعداً تلاش کنید.", validation_error: "دادههای ارسالی معتبر نیستند. لطفاً ورودیهای خود را بررسی کنید.", not_found: "منبع مورد نظر یافت نشد." }, qi = {
|
|
6877
|
-
sidebar:
|
|
6878
|
-
chat:
|
|
6879
|
-
tools_ui:
|
|
6880
|
-
login:
|
|
6881
|
-
theme:
|
|
6882
|
-
admin:
|
|
6883
|
-
settings:
|
|
6884
|
-
errors:
|
|
6885
|
-
},
|
|
6886
|
-
en:
|
|
6887
|
-
fa:
|
|
6888
|
-
},
|
|
6889
|
-
|
|
6890
|
-
resources:
|
|
6866
|
+
qn.type = "languageDetector";
|
|
6867
|
+
const Si = { new_conversation: "New conversation", tooltip_new_conversation: "Start a new conversation", delete_conversation: "Delete", delete_confirm_title: "Delete conversation?", delete_confirm_description: "Are you sure you want to delete this chat? This action cannot be undone.", cancel: "Cancel", delete: "Delete", chat_deleted_success: "Chat deleted successfully", logout: "Logout", new_chat: "New Chat", rename_conversation: "Rename", rename_success: "Conversation renamed successfully", rename_failed: "Failed to rename conversation", search_conversations: "Search conversations...", save: "Save", no_conversations: "No conversations yet", loading_more: "Loading more...", pinned_success: "Conversation pinned", unpinned_success: "Conversation unpinned", pin_failed: "Failed to pin conversation", share_success: "Link copied", share_description: "The shareable link has been copied to your clipboard.", share_failed: "Failed to generate share link", pin_conversation: "Pin", unpin_conversation: "Unpin", share_conversation: "Share" }, Ei = { tools: "Tools", error: "Error:", input_placeholder: "Ask something...", insufficient_balance: "Insufficient balance. Please recharge your account to continue.", regenerate: "Regenerate", retry: "Retry", copy: "Copy", like: "Like", dislike: "Dislike", attach_file: "Attach file", remove_file: "Remove file", reference: "Reference", reference_selection: "Reference selection", remove_reference: "Remove reference", referenced_context: "Referenced context", source_unavailable: "Source unavailable", tool_reference: "Tool reference", card_reference: "Card reference", used_sources: "Used {{count}} sources", welcome: { title: "Hello! How can I help you today?", subtitle: "Ask me anything and I'll do my best to help.", suggestions: ["What can you help me with?", "Tell me something interesting", "Help me write an email", "Explain a concept to me"] }, disclaimer: "AI can make mistakes. Check important info." }, Ni = { pending: "Pending", running: "Running", completed: "Completed", error: "Error", parameters: "Parameters", result: "Result", view_error: "View Error", tool_error: "Tool Error", copied: "Copied!", copy_error: "Copy Error" }, Ci = { login_tab: "Login", signup_tab: "Sign Up", phone: "Phone", phone_placeholder: "Phone number", password: "Password", name: "Name", name_placeholder: "First Name", surname: "Surname", surname_placeholder: "Last Name", loading: "Loading...", logging_in: "Logging in...", signing_up: "Signing up...", auth_page_disabled_title: "The sign-in page is currently disabled.", auth_page_disabled_description: "Please contact the administrator for access.", select_placeholder: "Select an option", login_button: "Login", signup_button: "Sign Up" }, Ti = { toggle: "Change theme", light: "Switch to light theme", dark: "Switch to dark theme", system: "Switch to system theme" }, Ai = /* @__PURE__ */ JSON.parse(`{"select_placeholder":"Select an option","loading":"Loading...","retry":"Retry","save":"Save","saving":"Saving...","cancel":"Cancel","delete":"Delete","edit":"Edit","search":"Search","search_placeholder":"Search...","no_data":"No data available","loading_more":"Loading more...","confirm_delete":"Are you sure you want to delete?","error_loading":"Error loading data","close":"Close","jobs":{"section_title":"Maintenance Jobs","no_jobs":"No jobs are registered for this deployment.","run":"Run","run_dry":"Dry run","run_started":"Started \\"{{name}}\\"","run_failed":"Failed to start job","history":"Run history","history_help":"Recent runs. Click a row to see its inputs and output.","view_history":"View run history","inputs":"Inputs","no_runs":"No runs yet.","dry_run":"Dry run","dry_run_help":"Simulate the job without writing any changes.","confirm_destructive":"This is a destructive job. Type \\"{{name}}\\" to confirm.","output":"Output","no_output":"(no output)","output_truncated":"...[output truncated]","result":"Result","cancel_run":"Cancel run","triggered_by":"Triggered by {{user}}","triggered_by_api":"Triggered via API key","danger":{"safe":"safe","caution":"caution","destructive":"destructive"},"status":{"queued":"Queued","processing":"Running","completed":"Completed","failed":"Failed","cancelled":"Cancelled"},"raw":{"title":"Run raw Python","warning":"This executes arbitrary Python on the server with full process privileges. There is no sandbox — only access control and an audit log. Use only when you know exactly what you are doing.","confirm_label":"Type \\"{{phrase}}\\" to enable running.","run":"Execute"}},"dashboard":{"title":"Admin Panel","logout":"Logout","tabs":{"analytics":"Analytics","chat_history":"Chats","users":"Users","admins":"Admins","settings":"Settings"}},"app_settings":{"title":"System Settings","subtitle":"Manage global configuration for application appearance and behavior.","sections":{"general":"Basic Information","chat":"Chat Experience","user_billing":"User & Billing"},"general":{"app_name":"App Name","admin_title":"Admin Panel Title","language":"Default Language","language_help":"The language users see on their first visit (if not auto-detected).","appearance":"Default Appearance","appearance_help":"These values apply when a user has not saved their own appearance preferences.","default_theme":"Default Theme","default_accent":"Default Accent Color","default_accent_help":"Enter any browser-supported CSS color, such as #3b82f6, rgb(59 130 246), or oklch(0.623 0.214 259.815).","default_accent_invalid":"Enter a valid browser-supported CSS color.","default_accent_preview":"Accent color preview"},"chat":{"welcome_greeting":"Welcome Greeting","welcome_subtitle":"Welcome Subtitle","disclaimer":"Disclaimer Text","show_tool_details":"Show technical tool details","show_tool_details_help":"Enable this to show professional technical details of AI tools to users.","show_settings":"Show settings icon for users","show_settings_help":"Show a settings gear icon in the chat interface for user customization.","show_version_in_settings":"Show app version in user settings","show_version_in_settings_help":"Show the app version at the bottom of the user settings dialog. This does not affect the admin settings page.","disable_signup":"Disable signup","disable_signup_help":"Hide the signup tab so users can only log in.","disable_auth_page":"Disable login/signup page","disable_auth_page_help":"Hide the entire auth page and prevent users from reaching login or signup forms.","composer_attachments":"Enable File Attachments","composer_attachments_help":"Allow users to upload and attach files to their messages.","thread_actions_feedback":"Enable Feedback Buttons","thread_actions_feedback_help":"Show like/dislike buttons on AI responses.","thread_actions_retry":"Enable Retry Button","thread_actions_retry_help":"Show a retry button to regenerate the last AI response.","history_enabled":"Enable Chat History Sidebar","history_enabled_help":"Show the sidebar containing previous conversations.","history_show_delete":"Allow Deleting Conversations","history_show_rename":"Allow Renaming Conversations","history_show_share":"Allow Sharing Conversations","history_show_pin":"Allow Pinning Conversations","sections_modes":"Settings Tab Modes","sections_modes_help":"Control visibility and interactability of settings tabs for users.","mode_editable":"Enable (Editable)","mode_faded":"Fade (Readonly)","mode_hidden":"Hide (Disable)","general_tab":"General Tab","profile_tab":"Profile Tab","account_tab":"Account Tab","inner_fields_modes":"Inner Fields Visibility","inner_fields_modes_help":"Configure visibility for individual fields within each tab."},"user_billing":{"initial_balance_tokens":"Default Initial Tokens","initial_balance_requests":"Default Initial Requests","initial_balance_help":"These values will be assigned to new users by default if not specified during creation."},"save_success":"Settings saved successfully","save_error":"Failed to save settings","save":"Save Changes","translations_management":"Translations Management","editor_tips":"All changes are saved automatically to local state. Don't forget to push 'Save Changes' to persist.","sync_from_code":"Sync from Code","reset_button":"Reset to Defaults","reset_confirm_title":"Reset Settings?","reset_confirm_description":"This will reset all fields to their original default values from the code. Current unsaved changes will be lost.","preview":"Preview","tips_label":"TIPS"},"analytics":{"title":"Analytics & Statistics","days":"{{count}} Days","time_range_label":"Last","days_unit":"days","total_users":"Total Users","total_threads":"Total Threads","total_messages":"Total Messages","total_token_usage":"Total Token Usage","usage_cost":"Usage & Cost","input":"Input","output":"Output","cost":"Cost","threads_chart":"Threads","messages_chart":"Messages","token_usage_chart":"Token Usage","cost_chart":"Cost Per Day","active_users":"Active Users","conversations":"conversations","threads":"threads","feedback":"User Feedback","total_feedback":"Total Feedback","positive":"Positive","negative":"Negative","loading_analytics":"Loading analytics...","error_loading":"Error loading data","source_human":"Users","source_service":"Service","source_all":"All","source_caption_human":"Showing real users only","source_caption_service":"Showing service traffic only","source_caption_all":"Showing all traffic"},"chat_history":{"title":"Chat History Management","search_placeholder":"Search by name, phone, thread title, or ID...","search_button":"Search","threads_list":"Threads List","thread_count":"{{count}}","no_thread_title":"Untitled conversation","messages":"Messages","messages_for":"Messages for: {{title}}","select_thread":"Select a conversation to view","no_threads":"No conversations found","empty_thread":"This conversation is empty","loading_threads":"Loading...","loading_messages":"Loading messages...","user_label":"User","assistant_label":"AI Assistant","subagent_label":"Subagent","input_tokens":"Input: {{value}}","output_tokens":"Output: {{value}}","total_tokens":"Total: {{value}}","cost":"Cost: {{value}}","unpriced":"Unpriced","all_feedbacks":"All Conversations","liked_feedbacks":"Liked 👍","disliked_feedbacks":"Disliked 👎","any_feedback":"With Feedback","output_available":"Output Available","running":"Running...","unnamed_file":"Unnamed File","download_file":"Download File","source_human":"Users","source_service":"Service","source_all":"All sources","external_user_id":"Service ref"},"users":{"title":"User Management","user_count":"User count: {{count}}","add_user":"Add New User","edit_user":"Edit User","phone":"Phone Number","phone_placeholder":"09123456789","name":"Name","surname":"Surname","initial_tokens":"Initial Tokens (optional)","initial_requests":"Initial Requests (optional)","balance":"Balance","requests_label":"Requests","tokens_label":"Tokens","token_limit":"Token Limit","request_limit":"Request Limit","tokens_usage":"Tokens Usage","requests_usage":"Requests Usage","actions":"Actions","copy_token":"Copy Token (auto-refresh)","token_copied":"Token copied successfully","no_token":"No token found for this user","recharge":"Recharge Balance","full_charge":"Full Charge","update_balance":"Update Balance","update_balance_for":"Update Balance for","token_count":"Token Count","request_count":"Request Count","updating":"Updating...","no_users":"No users found.","sort_ascending":"Sort ascending","sort_descending":"Sort descending","confirm_delete_user":"Are you sure you want to delete this user?","tokens_exceed_limit":"Tokens cannot exceed the specified limit","requests_exceed_limit":"Requests cannot exceed the specified limit","metadata":"Metadata (JSON)","initial_balance":"Initial Balance","custom_fields":"Additional Fields","metadata_raw":"Metadata (Raw JSON)","advanced_usage":"Advanced usage","invalid_json":"Invalid JSON format","auto_recharge":"Automatic Balance Renewal","auto_recharge_help":"Restore this user's balance to its limits on a recurring schedule.","enabled":"Enabled","recharge_interval":"Every","recharge_unit":"Interval Unit","recharge_unit_minute":"Minute(s)","recharge_unit_hour":"Hour(s)","recharge_unit_day":"Day(s)","recharge_unit_week":"Week(s)","recharge_unit_month":"Month(s)","recharge_schedule_help":"New schedules begin when saved. Existing schedules keep their current cycle anchor.","next_recharge":"Next renewal","last_recharge":"Last automatic renewal","not_available":"Not available","recharge_interval_invalid":"The renewal interval must be a positive whole number","recharge_policy_not_saved":"The backend did not save the renewal policy. Restart or update the backend to the version that supports automatic renewal.","usage_summary":"Usage Summary","input_tokens":"Input Tokens","output_tokens":"Output Tokens","total_tokens":"Total Tokens","requests_made":"Requests Made","total_cost":"Total Cost","renewals":"Balance Renewals","unpriced_requests":"Unpriced Requests","bulk_balance":"Bulk Balance","bulk_balance_help":"Apply a balance change to all matching users using search, explicit IDs, and metadata filters.","bulk_operation":"Operation","bulk_operation_add":"Add to balance","bulk_operation_set":"Set exact balance","bulk_operation_full_charge":"Fill to limits","bulk_use_current_search":"Use current search text","bulk_user_ids":"User IDs (optional)","bulk_metadata_filters":"Metadata Filters (JSON)","bulk_available_metadata":"Available metadata keys","bulk_preview_empty":"Affected users will be checked before applying.","bulk_preview_count":"{{count}} users match","apply_bulk_balance":"Apply Change","bulk_balance_confirm":"Apply this balance change to {{count}} users?","matching_users":"matching","bulk_apply_balance":"Update balances","bulk_apply_renewal":"Update renewal policy","bulk_select_change":"Select at least one bulk change to apply.","bulk_renewal_policy":"Renewal Policy","bulk_renewal_policy_help":"Enable or disable automatic renewal for every matched user.","bulk_renewal_anchor":"First renewal time (optional)","source_human":"Users","source_service":"Service","source_all":"All","account_type":"Account type","account_type_human":"Human user","account_type_service":"Service (external API)","account_type_service_help":"External API consumer. Phone is optional; share this account’s token with the integrating service.","service_name":"Service name","service_name_placeholder":"e.g. Acme CRM integration","optional":"optional"},"admins":{"title":"Admin Management","admin_count":"Admin count: {{count}}","add_admin":"Add New Admin","edit_admin":"Edit Admin","username":"Username","name":"Name","password":"Password","password_edit":"New Password (leave empty to keep current)","permissions":"Permissions","perm_chat_history":"Chat History","perm_admin_management":"Admin Management","perm_user_management":"User Management","perm_analytics":"Analytics","perm_settings":"Settings","no_admins":"No admins found.","confirm_delete_admin":"Are you sure you want to delete this admin?"},"errors":{"access_denied_title":"Access Denied","access_denied_message":"You don't have the necessary permissions to access this page. You can contact the administrator!","back_to_dashboard":"Back to Dashboard"},"login":{"title":"Admin Panel","setup_title":"Initial Setup","setup_description":"No admin account exists yet. Set a password for the default admin user to get started.","set_password":"Set Password","set_password_placeholder":"Choose a strong password","confirm_password":"Confirm Password","confirm_password_placeholder":"Re-enter the password","passwords_mismatch":"Passwords do not match","password_too_short":"Password must be at least 4 characters","create_admin":"Create Admin & Login","setting_up":"Setting up...","username":"Username","username_placeholder":"Username","password":"Password","password_placeholder":"••••••••","submit":"Login","logging_in":"Logging in...","error":"Login failed","copyright":"© 2026 AI Chatbot Platform"}}`), Ii = { title: "Settings", sections: { profile: "Profile", general: "General", account: "Account" }, profile: { title: "Profile Information", subtitle: "Update your personal details below.", name: "First Name", surname: "Last Name", phone: "Phone Number", password: "New Password", password_placeholder: "Leave empty to keep current", save: "Save Changes", saving: "Saving...", success: "Profile updated successfully", error: "Failed to update profile", select_placeholder: "Select an option" }, general: { title: "General Settings", subtitle: "Configure look and feel and language.", theme: "Theme", language: "Language", themes: { light: "Light", dark: "Dark", system: "System" }, accent: "Accent Color", radius: "Rounded Corners", radius_levels: { sharp: "Sharp", round: "Round" }, languages: { en: "English", fa: "Persian" } }, account: { title: "Account & Usage", subtitle: "Monitor your quotas and manage your session.", balance: "Current Balance", tokens: "Tokens", requests: "Requests", logout: "Logout", logout_confirm: "Are you sure you want to logout?", last_recharge: "Last balance update on" } }, Ri = { unauthorized: "Authentication required. Please login again.", invalid_credentials: "Invalid phone number or password.", phone_required: "Phone number is required.", password_required: "Password is required.", name_surname_required: "Name and surname are required.", phone_already_exists: "This phone number is already registered.", invalid_token: "Your session has expired. Please login again.", user_not_found: "User not found.", insufficient_balance: "Insufficient balance. Please recharge your account.", insufficient_balance_recharge: "You've reached your balance quota. It will be reset on {{datetime, datetime}}.", insufficient_balance_no_recharge: "You've run out of balance. Please contact support to recharge your account.", me_update_failed: "Failed to update profile information.", thread_not_found: "Conversation not found.", access_denied: "You do not have permission to perform this action.", feedback_save_failed: "Failed to save feedback.", thread_update_failed: "Failed to update conversation.", thread_delete_failed: "Failed to delete conversation.", attachment_not_found: "Attachment not found.", thread_share_failed: "Failed to share conversation.", model_quota_reached_error: "The system cannot respond at this time. Please try again later.", admin_already_exists: "Admin with this username already exists.", admin_not_found: "Admin not found.", cannot_delete_self: "You cannot delete your own admin account.", admin_update_failed: "Failed to update admin information.", internal_error: "An internal server error occurred. Please try again later.", validation_error: "Invalid data provided. Please check your input.", not_found: "The requested resource was not found." }, Oi = {
|
|
6868
|
+
sidebar: Si,
|
|
6869
|
+
chat: Ei,
|
|
6870
|
+
tools_ui: Ni,
|
|
6871
|
+
login: Ci,
|
|
6872
|
+
theme: Ti,
|
|
6873
|
+
admin: Ai,
|
|
6874
|
+
settings: Ii,
|
|
6875
|
+
errors: Ri
|
|
6876
|
+
}, Li = { new_conversation: "گفتگوی جدید", tooltip_new_conversation: "شروع یک گفتگوی جدید", delete_conversation: "حذف", delete_confirm_title: "حذف گفتگو؟", delete_confirm_description: "آیا از حذف این گفتگو اطمینان دارید؟ این عمل قابل بازگشت نیست.", cancel: "انصراف", delete: "حذف", chat_deleted_success: "گفتگو با موفقیت حذف شد", logout: "خروج", new_chat: "گفتگوی جدید", rename_conversation: "تغییر نام", rename_success: "نام گفتگو با موفقیت تغییر کرد", rename_failed: "خطا در تغییر نام گفتگو", search_conversations: "جستجوی گفتگوها...", save: "ذخیره", no_conversations: "هنوز گفتگویی ندارید", loading_more: "در حال بارگذاری...", pinned_success: "گفتگو پین شد", unpinned_success: "گفتگو از حالت پین خارج شد", pin_failed: "خطا در پین کردن گفتگو", share_success: "لینک کپی شد", share_description: "لینک اشتراکگذاری در حافظه موقت کپی شد.", share_failed: "خطا در ایجاد لینک اشتراکگذاری", pin_conversation: "پین", unpin_conversation: "برداشتن پین", share_conversation: "اشتراکگذاری" }, Di = { tools: "ابزارها", error: "خطا:", input_placeholder: "سوالتو اینجا بپرس...", insufficient_balance: "موجودی حساب شما کافی نیست. لطفا برای ادامه، حساب خود را شارژ کنید.", regenerate: "تولید مجدد", retry: "تلاش مجدد", copy: "کپی", like: "پسندیدم", dislike: "نپسندیدم", attach_file: "پیوست فایل", remove_file: "حذف فایل", reference: "ارجاع", reference_selection: "ارجاع به بخش انتخابشده", remove_reference: "حذف ارجاع", referenced_context: "بخش ارجاعشده", source_unavailable: "منبع در دسترس نیست", tool_reference: "ارجاع به ابزار", card_reference: "ارجاع به کارت", used_sources: "از {{count}} منبع استفاده شد", welcome: { title: "سلام! چطور میتونم کمکت کنم؟", subtitle: "هر سوالی داری بپرس، تمام تلاشمو میکنم کمکت کنم.", suggestions: ["چه کارهایی میتونی انجام بدی؟", "یه چیز جالب بهم بگو", "کمکم کن یه ایمیل بنویسم", "یه مفهوم رو برام توضیح بده"] }, disclaimer: "هوش مصنوعی ممکن است اشتباه کند. اطلاعات مهم را بررسی کنید." }, Fi = { pending: "در انتظار", running: "در حال اجرا", completed: "تکمیل شده", error: "خطا", parameters: "پارامترها", result: "نتیجه", view_error: "نمایش خطا", tool_error: "خطای ابزار", copied: "کپی شد!", copy_error: "کپی خطا" }, Pi = { login_tab: "ورود", signup_tab: "ثبت نام", phone: "شماره تلفن", phone_placeholder: "شماره تلفن", password: "رمز عبور", name: "نام", name_placeholder: "نام", surname: "نام خانوادگی", surname_placeholder: "نام خانوادگی", logging_in: "در حال ورود...", signing_up: "در حال ثبت نام...", auth_page_disabled_title: "صفحه ورود غیرفعال شده است.", auth_page_disabled_description: "برای دسترسی با مدیر سامانه تماس بگیرید.", select_placeholder: "انتخاب کنید", login_button: "ورود", signup_button: "ثبت نام" }, Mi = { toggle: "تغییر تم", light: "تغییر به تم روشن", dark: "تغییر به تم تاریک", system: "تغییر به تم سیستم" }, zi = /* @__PURE__ */ JSON.parse('{"select_placeholder":"انتخاب کنید","loading":"در حال بارگذاری...","retry":"تلاش مجدد","save":"ذخیره","saving":"در حال ذخیره...","cancel":"انصراف","delete":"حذف","edit":"ویرایش","search":"جستجو","search_placeholder":"جستجو...","no_data":"دادهای موجود نیست","loading_more":"در حال بارگذاری بیشتر...","confirm_delete":"آیا از حذف اطمینان دارید؟","error_loading":"خطا در بارگذاری دادهها","close":"بستن","jobs":{"section_title":"کارهای سیستمی","no_jobs":"هیچ کاری برای این برنامه تعریف نشده است.","run":"اجرا","run_dry":"اجرای آزمایشی","run_started":"کار «{{name}}» اجرا شد","run_failed":"اجرای کار با خطا مواجه شد","history":"تاریخچهٔ اجراها","history_help":"اجراهای اخیر. برای دیدن ورودیها و خروجی هر اجرا روی آن کلیک کنید.","view_history":"مشاهدهٔ تاریخچهٔ اجراها","inputs":"ورودیها","no_runs":"هنوز هیچ کاری اجرا نشده است.","dry_run":"اجرای آزمایشی","dry_run_help":"کار را بدون اعمال هیچ تغییری شبیهسازی میکند.","confirm_destructive":"این یک کار مخرب است. برای تأیید، نام «{{name}}» را وارد کنید.","output":"خروجی","no_output":"(خروجیای ثبت نشد)","output_truncated":"...[خروجی کوتاه شد]","result":"نتیجه","cancel_run":"لغو اجرا","triggered_by":"اجرا شده توسط {{user}}","triggered_by_api":"اجرا شده با کلید API","danger":{"safe":"بیخطر","caution":"نیازمند احتیاط","destructive":"مخرب"},"status":{"queued":"در صف","processing":"در حال اجرا","completed":"انجام شد","failed":"ناموفق","cancelled":"لغو شد"},"raw":{"title":"اجرای کد پایتون","warning":"این بخش کد پایتون دلخواه را با دسترسی کامل روی سرور اجرا میکند. هیچ ایزولهسازیای در کار نیست؛ تنها محافظت، کنترل دسترسی و ثبت در گزارش است. فقط زمانی استفاده کنید که از کاری که انجام میدهید کاملاً مطمئن هستید.","confirm_label":"برای فعال شدن دکمهٔ اجرا، عبارت «{{phrase}}» را وارد کنید.","run":"اجرای کد"}},"dashboard":{"title":"پنل ادمین","logout":"خروج","tabs":{"analytics":"تحلیل و آمار","chat_history":"گفتگوها","users":"کاربران","admins":"ادمینها","settings":"تنظیمات"}},"app_settings":{"title":"تنظیمات سامانه","subtitle":"پیکربندی کلی ظاهر و رفتار سامانه را مدیریت کنید.","sections":{"general":"اطلاعات پایه","chat":"تنظیمات گفتگو","user_billing":"کاربری و مالی"},"general":{"app_name":"نام سامانه","admin_title":"عنوان پنل ادمین","language":"زبان پیشفرض","language_help":"زبانی که کاربر در اولین ورود مشاهده میکند (در صورت عدم تشخیص خودکار).","appearance":"ظاهر پیشفرض","appearance_help":"این مقادیر زمانی اعمال میشوند که کاربر تنظیمات ظاهری خود را ذخیره نکرده باشد.","default_theme":"پوسته پیشفرض","default_accent":"رنگ اصلی پیشفرض","default_accent_help":"هر رنگ CSS پشتیبانیشده توسط مرورگر را وارد کنید؛ مانند #3b82f6 یا rgb(59 130 246).","default_accent_invalid":"یک رنگ CSS معتبر و پشتیبانیشده توسط مرورگر وارد کنید.","default_accent_preview":"پیشنمایش رنگ اصلی"},"chat":{"welcome_greeting":"پیام خوشآمدگویی","welcome_subtitle":"زیرعنوان خوشآمدگویی","disclaimer":"متن سلب مسئولیت","show_tool_details":"نمایش جزئیات فنی ابزارها (Tools)","show_tool_details_help":"برای نمایش جزئیات فنی و نحوه عملکرد ابزارهای هوش مصنوعی به کاربران، این گزینه را فعال کنید.","show_settings":"نمایش آیکون تنظیمات برای کاربران","show_settings_help":"نمایش چرخدنده تنظیمات در محیط چت برای شخصیسازی توسط کاربر.","show_version_in_settings":"نمایش نسخه برنامه در تنظیمات کاربر","show_version_in_settings_help":"نسخه برنامه را در پایین پنجره تنظیمات کاربر نمایش میدهد. این گزینه روی صفحه تنظیمات ادمین اثری ندارد.","disable_signup":"غیرفعالسازی ثبتنام","disable_signup_help":"تب ثبتنام را مخفی میکند تا کاربران فقط بتوانند وارد شوند.","disable_auth_page":"غیرفعالسازی صفحه ورود/ثبتنام","disable_auth_page_help":"کل صفحه احراز هویت را مخفی میکند و دسترسی به فرمهای ورود و ثبتنام را میبندد.","composer_attachments":"فعالسازی پیوست فایل","composer_attachments_help":"اجازه به کاربران برای آپلود و پیوست فایل به پیامها.","thread_actions_feedback":"فعالسازی دکمههای بازخورد","thread_actions_feedback_help":"نمایش دکمههای پسندیدن/نپسندیدن در پاسخهای هوش مصنوعی.","thread_actions_retry":"فعالسازی دکمه تلاش مجدد","thread_actions_retry_help":"نمایش دکمه تلاش مجدد برای تولید دوباره آخرین پاسخ هوش مصنوعی.","history_enabled":"فعالسازی سایدبار تاریخچه","history_enabled_help":"نمایش منوی کناری شامل گفتگوهای قبلی.","history_show_delete":"اجازه حذف گفتگوها","history_show_rename":"اجازه تغییر نام گفتگوها","history_show_share":"اجازه اشتراکگذاری گفتگوها","history_show_pin":"اجازه پین کردن گفتگوها","sections_modes":"وضعیت نمایش تبهای تنظیمات","sections_modes_help":"کنترل نمایش یا غیرفعال بودن تبهای مختلف در بخش تنظیمات کاربر.","mode_editable":"فعال (قابل ویرایش)","mode_faded":"محو (فقط خواندنی)","mode_hidden":"مخفی (غیرفعال)","general_tab":"تب عمومی","profile_tab":"تب پروفایل","account_tab":"تب حساب کاربری","inner_fields_modes":"مشاهدهپذیری فیلدهای داخلی","inner_fields_modes_help":"وضعیت نمایش فیلدهای هر تب را بهصورت مجزا پیکربندی کنید."},"user_billing":{"initial_balance_tokens":"توکن اولیه پیشفرض","initial_balance_requests":"تعداد درخواست اولیه پیشفرض","initial_balance_help":"این مقادیر بهصورت خودکار به کاربران جدید اختصاص داده میشوند، مگر اینکه هنگام ایجاد کاربر مقدار دیگری تعیین شود."},"save_success":"تنظیمات با موفقیت ذخیره شد","save_error":"خطا در ذخیرهسازی تنظیمات","save":"ذخیره تغییرات","translations_management":"مدیریت ترجمهها","editor_tips":"تمام تغییرات بهصورت خودکار در حالت محلی ذخیره میشوند. برای نهاییسازی، دکمه «ذخیره تغییرات» را بزنید.","sync_from_code":"همگامسازی از کد","reset_button":"بازنشانی به تنظیمات اولیه","reset_confirm_title":"بازنشانی تنظیمات؟","reset_confirm_description":"این عمل تمام فیلدها را به مقادیر پیشفرض در کد بازمیگرداند. تغییرات ذخیره نشده فعلی از بین خواهند رفت.","preview":"پیشنمایش","tips_label":"نکته"},"analytics":{"title":"تحلیل و آمار","days":"{{count}} روز","time_range_label":"بازه","days_unit":"روز","total_users":"تعداد کاربران","total_threads":"تعداد گفتگوها","total_messages":"تعداد پیامها","total_token_usage":"مصرف کل توکن","usage_cost":"مصرف و هزینه","input":"ورودی","output":"خروجی","cost":"هزینه","threads_chart":"گفتگوها","messages_chart":"پیامها","token_usage_chart":"مصرف توکن","cost_chart":"هزینه روزانه","active_users":"کاربران فعال","conversations":"گفتگو","threads":"گفتگو","feedback":"نظرات کاربران","total_feedback":"کل نظرات","positive":"مثبت","negative":"منفی","loading_analytics":"در حال بارگذاری تحلیلها...","error_loading":"خطا در بارگذاری دادهها","source_human":"کاربران","source_service":"سرویس","source_all":"همه","source_caption_human":"نمایش فقط کاربران واقعی","source_caption_service":"نمایش فقط ترافیک سرویس","source_caption_all":"نمایش همهٔ ترافیک"},"chat_history":{"title":"مدیریت تاریخچه گفتگوها","search_placeholder":"جستجو بر اساس نام، شماره تماس، عنوان گفتگو یا شناسه...","search_button":"جستجو","threads_list":"لیست گفتگوها","thread_count":"{{count}}","no_thread_title":"گفتگو بدون عنوان","messages":"پیامها","messages_for":"پیامهای گفتگو: {{title}}","select_thread":"یک گفتگو را برای مشاهده انتخاب کنید","no_threads":"هیچ گفتگویی یافت نشد","empty_thread":"این گفتگو خالی است","loading_threads":"در حال بارگذاری...","loading_messages":"در حال بارگذاری پیامها...","user_label":"کاربر","assistant_label":"دستیار هوشمند","subagent_label":"زیرعامل","input_tokens":"ورودی: {{value}}","output_tokens":"خروجی: {{value}}","total_tokens":"کل: {{value}}","cost":"هزینه: {{value}}","unpriced":"بدون هزینه","all_feedbacks":"همه گفتگوها","liked_feedbacks":"پسندیده شده 👍","disliked_feedbacks":"نپسندیده شده 👎","any_feedback":"دارای بازخورد","output_available":"خروجی موجود است","running":"در حال اجرا...","unnamed_file":"فایل بدون نام","download_file":"دانلود فایل","source_human":"کاربران","source_service":"سرویس","source_all":"همهٔ منابع","external_user_id":"شناسهٔ سرویس"},"users":{"title":"مدیریت کاربران","user_count":"تعداد کاربران: {{count}}","add_user":"افزودن کاربر جدید","edit_user":"ویرایش کاربر","phone":"شماره تلفن","phone_placeholder":"۰۹۱۲۳۴۵۶۷۸۹","name":"نام","surname":"نام خانوادگی","initial_tokens":"تعداد توکن اولیه (اختیاری)","initial_requests":"تعداد درخواست اولیه (اختیاری)","balance":"موجودی","requests_label":"درخواستها","tokens_label":"توکنها","token_limit":"سقف توکن","request_limit":"سقف درخواست","tokens_usage":"میزان مصرف توکن","requests_usage":"میزان مصرف درخواست","actions":"عملیات","copy_token":"کپی توکن (با بروزرسانی خودکار)","token_copied":"توکن با موفقیت کپی شد","no_token":"توکنی برای این کاربر یافت نشد","recharge":"شارژ موجودی","full_charge":"شارژ کامل","update_balance":"بروزرسانی موجودی","update_balance_for":"بروزرسانی موجودی","token_count":"تعداد توکن","request_count":"تعداد درخواست","updating":"در حال بروزرسانی...","no_users":"هیچ کاربری یافت نشد.","sort_ascending":"مرتبسازی صعودی","sort_descending":"مرتبسازی نزولی","confirm_delete_user":"آیا از حذف این کاربر اطمینان دارید؟","tokens_exceed_limit":"تعداد توکن نمیتواند بیشتر از سقف مجاز باشد","requests_exceed_limit":"تعداد درخواست نمیتواند بیشتر از سقف مجاز باشد","metadata":"متادیتا (JSON)","initial_balance":"موجودی اولیه","custom_fields":"فیلدهای اضافه","metadata_raw":"متادیتا (JSON خام)","advanced_usage":"استفاده پیشرفته","invalid_json":"فرمت JSON نامعتبر است","auto_recharge":"تمدید خودکار موجودی","auto_recharge_help":"موجودی این کاربر را طبق یک برنامه تکرارشونده تا سقف تعیینشده بازنشانی میکند.","enabled":"فعال","recharge_interval":"هر","recharge_unit":"واحد بازه","recharge_unit_minute":"دقیقه","recharge_unit_hour":"ساعت","recharge_unit_day":"روز","recharge_unit_week":"هفته","recharge_unit_month":"ماه","recharge_schedule_help":"برنامه جدید از زمان ذخیره آغاز میشود. برنامه موجود مبدأ دوره فعلی خود را حفظ میکند.","next_recharge":"تمدید بعدی","last_recharge":"آخرین تمدید خودکار","not_available":"در دسترس نیست","recharge_interval_invalid":"بازه تمدید باید یک عدد صحیح مثبت باشد","recharge_policy_not_saved":"سرور تنظیمات تمدید خودکار را ذخیره نکرد. سرور را راهاندازی مجدد یا به نسخه پشتیبانکننده از تمدید خودکار بروزرسانی کنید.","usage_summary":"خلاصه مصرف","input_tokens":"توکنهای ورودی","output_tokens":"توکنهای خروجی","total_tokens":"کل توکنها","requests_made":"تعداد درخواستها","total_cost":"هزینه کل","renewals":"دفعات شارژ موجودی","unpriced_requests":"درخواستهای بدون هزینهی ثبت شده","bulk_balance":"تغییر گروهی موجودی","bulk_balance_help":"تغییر موجودی را روی کاربران مطابق جستجو، شناسههای مشخص و فیلترهای متادیتا اعمال کنید.","bulk_operation":"عملیات","bulk_operation_add":"افزودن به موجودی","bulk_operation_set":"تنظیم مقدار دقیق","bulk_operation_full_charge":"شارژ تا سقف","bulk_use_current_search":"استفاده از جستجوی فعلی","bulk_user_ids":"شناسه کاربران (اختیاری)","bulk_metadata_filters":"فیلترهای متادیتا (JSON)","bulk_available_metadata":"کلیدهای متادیتای در دسترس","bulk_preview_empty":"تعداد کاربران مطابق قبل از اعمال بررسی میشود.","bulk_preview_count":"{{count}} کاربر مطابق هستند","apply_bulk_balance":"اعمال تغییر","bulk_balance_confirm":"این تغییر موجودی برای {{count}} کاربر اعمال شود؟","matching_users":"کاربران مطابق","bulk_apply_balance":"بروزرسانی موجودی","bulk_apply_renewal":"بروزرسانی سیاست تمدید","bulk_select_change":"حداقل یک تغییر گروهی را برای اعمال انتخاب کنید.","bulk_renewal_policy":"سیاست تمدید","bulk_renewal_policy_help":"تمدید خودکار را برای همه کاربران مطابق فعال یا غیرفعال کنید.","bulk_renewal_anchor":"زمان اولین تمدید (اختیاری)","source_human":"کاربران","source_service":"سرویس","source_all":"همه","account_type":"نوع حساب","account_type_human":"کاربر انسانی","account_type_service":"سرویس","account_type_service_help":"مصرفکنندهٔ سرویس خارجی. شمارهٔ تلفن اختیاری است؛ توکن این حساب را با سرویس یکپارچهشونده به اشتراک بگذارید.","service_name":"نام سرویس","service_name_placeholder":"مثلاً یکپارچهسازی CRM","optional":"اختیاری"},"admins":{"title":"مدیریت ادمینها","admin_count":"تعداد ادمینها: {{count}}","add_admin":"افزودن ادمین جدید","edit_admin":"ویرایش ادمین","username":"نام کاربری","name":"نام","password":"رمز عبور","password_edit":"رمز عبور جدید (خالی بگذارید تا تغییر نکند)","permissions":"دسترسیها","perm_chat_history":"تاریخچه گفتگوها","perm_admin_management":"مدیریت ادمینها","perm_user_management":"مدیریت کاربران","perm_analytics":"تحلیل و آمار","perm_settings":"تنظیمات","no_admins":"هیچ ادمینی یافت نشد.","confirm_delete_admin":"آیا از حذف این ادمین اطمینان دارید؟"},"errors":{"access_denied_title":"عدم دسترسی","access_denied_message":"شما مجوزهای لازم برای دسترسی به این صفحه را ندارید. میتوانید با مدیر سیستم تماس بگیرید.","back_to_dashboard":"بازگشت به پیشخوان"},"login":{"title":"پنل ادمین","setup_title":"راهاندازی اولیه","setup_description":"هنوز حساب ادمینی وجود ندارد. برای شروع، یک رمز عبور برای کاربر ادمین پیشفرض تنظیم کنید.","set_password":"تعیین رمز عبور","set_password_placeholder":"یک رمز عبور قوی انتخاب کنید","confirm_password":"تأیید رمز عبور","confirm_password_placeholder":"رمز عبور را دوباره وارد کنید","passwords_mismatch":"رمزهای عبور مطابقت ندارند","password_too_short":"رمز عبور باید حداقل ۴ کاراکتر باشد","create_admin":"ایجاد ادمین و ورود","setting_up":"در حال راهاندازی...","username":"نام کاربری","username_placeholder":"نام کاربری","password":"رمز عبور","password_placeholder":"••••••••","submit":"ورود به پنل","logging_in":"در حال ورود...","error":"خطا در ورود","copyright":"© ۲۰۲۶ پلتفرم چتبات هوشمند"}}'), Ui = { title: "تنظیمات", sections: { profile: "پروفایل", general: "عمومی", account: "حساب کاربری" }, profile: { title: "اطلاعات پروفایل", subtitle: "اطلاعات شخصی خود را در زیر بروز کنید.", name: "نام", surname: "نام خانوادگی", phone: "شماره تلفن", password: "رمز عبور جدید", password_placeholder: "برای عدم تغییر خالی بگذارید", save: "ذخیره تغییرات", saving: "در حال ذخیره...", success: "پروفایل با موفقیت بروزرسانی شد", error: "خطا در بروزرسانی پروفایل", select_placeholder: "انتخاب کنید" }, general: { title: "تنظیمات عمومی", subtitle: "ظاهر و زبان برنامه را تنظیم کنید.", theme: "تم", language: "زبان", themes: { light: "روشن", dark: "تاریک", system: "سیستم" }, accent: "رنگ اصلی", radius: "میزان گردی لبهها", radius_levels: { sharp: "تیز", round: "گرد" }, languages: { en: "English", fa: "فارسی" } }, account: { title: "حساب و میزان مصرف", subtitle: "سهمیه مصرف و نشست خود را مدیریت کنید.", balance: "موجود فعلی", tokens: "توکنها", requests: "درخواستها", logout: "خروج از حساب", logout_confirm: "آیا از خروج اطمینان دارید؟", last_recharge: "آخرین بروزرسانی اعتبار در تاریخ" } }, qi = { unauthorized: "دسترسی مجاز نیست. لطفاً دوباره وارد شوید.", invalid_credentials: "شماره تلفن یا رمز عبور اشتباه است.", phone_required: "شماره تلفن الزامی است.", password_required: "رمز عبور الزامی است.", name_surname_required: "نام و نام خانوادگی الزامی است.", phone_already_exists: "این شماره تلفن قبلاً ثبت شده است.", invalid_token: "نشست شما منقضی شده است. لطفاً دوباره وارد شوید.", user_not_found: "کاربر یافت نشد.", insufficient_balance: "موجودی کافی نیست. لطفاً حساب خود را شارژ کنید.", insufficient_balance_recharge: "شما به سقف موجودی خود رسیدهاید. موجودی شما {{datetime, datetime}} بازنشانی خواهد شد.", insufficient_balance_no_recharge: "موجودی شما به پایان رسیده است. لطفاً برای شارژ حساب خود با پشتیبانی تماس بگیرید.", me_update_failed: "خطا در بروزرسانی اطلاعات پروفایل.", thread_not_found: "گفتگو یافت نشد.", access_denied: "شما اجازه انجام این عملیات را ندارید.", feedback_save_failed: "خطا در ثبت بازخورد.", thread_update_failed: "خطا در بروزرسانی گفتگو.", thread_delete_failed: "خطا در حذف گفتگو.", attachment_not_found: "فایل پیوست یافت نشد.", thread_share_failed: "خطا در اشتراکگذاری گفتگو.", model_quota_reached_error: "سامانه در حال حاضر قادر به پاسخگویی نیست. لطفاً بعداً دوباره تلاش کنید.", admin_already_exists: "ادمین با این نام کاربری قبلاً ایجاد شده است.", admin_not_found: "ادمین یافت نشد.", cannot_delete_self: "شما نمیتوانید حساب مدیریت خود را حذف کنید.", admin_update_failed: "خطا در بروزرسانی اطلاعات ادمین.", internal_error: "یک خطای داخلی در سرور رخ داده است. لطفاً بعداً تلاش کنید.", validation_error: "دادههای ارسالی معتبر نیستند. لطفاً ورودیهای خود را بررسی کنید.", not_found: "منبع مورد نظر یافت نشد." }, $i = {
|
|
6877
|
+
sidebar: Li,
|
|
6878
|
+
chat: Di,
|
|
6879
|
+
tools_ui: Fi,
|
|
6880
|
+
login: Pi,
|
|
6881
|
+
theme: Mi,
|
|
6882
|
+
admin: zi,
|
|
6883
|
+
settings: Ui,
|
|
6884
|
+
errors: qi
|
|
6885
|
+
}, Bi = {
|
|
6886
|
+
en: Oi,
|
|
6887
|
+
fa: $i
|
|
6888
|
+
}, Hi = ho.createInstance();
|
|
6889
|
+
Hi.use(qn).use(Bn).init({
|
|
6890
|
+
resources: Bi,
|
|
6891
6891
|
fallbackLng: "en",
|
|
6892
6892
|
returnNull: !1,
|
|
6893
6893
|
returnEmptyString: !1,
|
|
6894
6894
|
nsSeparator: ":",
|
|
6895
6895
|
interpolation: {
|
|
6896
|
-
escapeValue: !1
|
|
6896
|
+
escapeValue: !1,
|
|
6897
6897
|
// React already escapes values
|
|
6898
|
+
// Custom formatters usable from translations via `{{value, formatName}}`.
|
|
6899
|
+
// `datetime` renders a Date (or ISO string) in the active language, using the
|
|
6900
|
+
// Persian calendar for `fa` and the viewer's own timezone in every language.
|
|
6901
|
+
format: (e, t, n) => {
|
|
6902
|
+
if (t === "datetime" && e != null) {
|
|
6903
|
+
const o = e instanceof Date ? e : new Date(e);
|
|
6904
|
+
return Number.isNaN(o.getTime()) ? String(e) : new Intl.DateTimeFormat(n, {
|
|
6905
|
+
year: "numeric",
|
|
6906
|
+
month: "short",
|
|
6907
|
+
day: "numeric",
|
|
6908
|
+
hour: "2-digit",
|
|
6909
|
+
minute: "2-digit",
|
|
6910
|
+
calendar: n === "fa" ? "persian" : "gregory"
|
|
6911
|
+
}).format(o);
|
|
6912
|
+
}
|
|
6913
|
+
return String(e);
|
|
6914
|
+
}
|
|
6898
6915
|
},
|
|
6899
6916
|
detection: {
|
|
6900
6917
|
order: ["querystring", "localStorage"],
|
|
6901
6918
|
caches: ["localStorage"]
|
|
6902
6919
|
}
|
|
6903
6920
|
});
|
|
6904
|
-
const
|
|
6921
|
+
const Xt = {
|
|
6905
6922
|
// Auth Errors
|
|
6906
6923
|
UNAUTHORIZED: "unauthorized",
|
|
6907
6924
|
INVALID_CREDENTIALS: "invalid_credentials",
|
|
@@ -6942,9 +6959,18 @@ class kl extends Error {
|
|
|
6942
6959
|
}
|
|
6943
6960
|
}
|
|
6944
6961
|
function wl(e, t) {
|
|
6945
|
-
const n = typeof e == "string", o = e, r = n ? e : o?.message ?? "", a = n ? e : o?.code || (Object.values(
|
|
6962
|
+
const n = typeof e == "string", o = e, r = n ? e : o?.message ?? "", a = n ? e : o?.code || (Object.values(Xt).includes(r) ? r : void 0);
|
|
6946
6963
|
if (typeof a != "string")
|
|
6947
6964
|
return r || String(e);
|
|
6965
|
+
if (a === Xt.INSUFFICIENT_BALANCE && !n) {
|
|
6966
|
+
const s = o?.details;
|
|
6967
|
+
if (s?.recharge_enabled && s.next_recharge_at)
|
|
6968
|
+
return t("errors:insufficient_balance_recharge", {
|
|
6969
|
+
datetime: new Date(s.next_recharge_at)
|
|
6970
|
+
});
|
|
6971
|
+
if (s && s.recharge_enabled === !1)
|
|
6972
|
+
return t("errors:insufficient_balance_no_recharge");
|
|
6973
|
+
}
|
|
6948
6974
|
const l = `errors:${a}`, c = t(l);
|
|
6949
6975
|
return c === l ? !n && r ? r : a.replace(/_/g, " ").replace(/\b\w/g, (s) => s.toUpperCase()) : c;
|
|
6950
6976
|
}
|
|
@@ -7085,7 +7111,7 @@ function Wi({ className: e, ...t }) {
|
|
|
7085
7111
|
"data-slot": "select-scroll-up-button",
|
|
7086
7112
|
className: v("flex cursor-default items-center justify-center py-1", e),
|
|
7087
7113
|
...t,
|
|
7088
|
-
children: /* @__PURE__ */ i(
|
|
7114
|
+
children: /* @__PURE__ */ i(lo, { className: "size-4" })
|
|
7089
7115
|
}
|
|
7090
7116
|
);
|
|
7091
7117
|
}
|
|
@@ -7189,68 +7215,68 @@ export {
|
|
|
7189
7215
|
De as A,
|
|
7190
7216
|
_e as B,
|
|
7191
7217
|
vl as C,
|
|
7192
|
-
|
|
7218
|
+
_a as D,
|
|
7193
7219
|
Dl as E,
|
|
7194
7220
|
Fl as F,
|
|
7195
7221
|
kl as G,
|
|
7196
7222
|
Pl as H,
|
|
7197
7223
|
xl as I,
|
|
7198
7224
|
Ml as J,
|
|
7199
|
-
|
|
7225
|
+
Sa as K,
|
|
7200
7226
|
Gi as L,
|
|
7201
|
-
|
|
7227
|
+
Ea as M,
|
|
7202
7228
|
_l as N,
|
|
7203
7229
|
yl as O,
|
|
7204
7230
|
zl as P,
|
|
7205
7231
|
ze as Q,
|
|
7206
|
-
|
|
7232
|
+
To as R,
|
|
7207
7233
|
El as S,
|
|
7208
7234
|
pl as T,
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
|
|
7214
|
-
|
|
7235
|
+
li as U,
|
|
7236
|
+
$o as V,
|
|
7237
|
+
Ao as W,
|
|
7238
|
+
er as X,
|
|
7239
|
+
fa as Y,
|
|
7240
|
+
si as Z,
|
|
7215
7241
|
Qe as _,
|
|
7216
7242
|
gl as a,
|
|
7217
7243
|
Il as a0,
|
|
7218
7244
|
Vi as a1,
|
|
7219
7245
|
Wi as a2,
|
|
7220
7246
|
Ol as a3,
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7247
|
+
pa as a4,
|
|
7248
|
+
ii as a5,
|
|
7249
|
+
tr as a6,
|
|
7224
7250
|
it as a7,
|
|
7225
|
-
|
|
7226
|
-
|
|
7227
|
-
|
|
7228
|
-
|
|
7251
|
+
Qo as a8,
|
|
7252
|
+
Jo as a9,
|
|
7253
|
+
Bo as aa,
|
|
7254
|
+
ya as ab,
|
|
7229
7255
|
bl as ac,
|
|
7230
|
-
|
|
7231
|
-
|
|
7256
|
+
qn as ad,
|
|
7257
|
+
_o as b,
|
|
7232
7258
|
at as c,
|
|
7233
|
-
|
|
7259
|
+
Bi as d,
|
|
7234
7260
|
j as e,
|
|
7235
7261
|
wl as f,
|
|
7236
|
-
|
|
7262
|
+
Hi as g,
|
|
7237
7263
|
fl as h,
|
|
7238
7264
|
v as i,
|
|
7239
7265
|
ml as j,
|
|
7240
|
-
|
|
7241
|
-
|
|
7242
|
-
|
|
7243
|
-
|
|
7244
|
-
|
|
7266
|
+
Xo as k,
|
|
7267
|
+
cn as l,
|
|
7268
|
+
un as m,
|
|
7269
|
+
dn as n,
|
|
7270
|
+
pn as o,
|
|
7245
7271
|
hl as p,
|
|
7246
7272
|
Ll as q,
|
|
7247
|
-
|
|
7248
|
-
|
|
7273
|
+
va as r,
|
|
7274
|
+
xa as s,
|
|
7249
7275
|
Tl as t,
|
|
7250
7276
|
ge as u,
|
|
7251
7277
|
Cl as v,
|
|
7252
7278
|
Al as w,
|
|
7253
7279
|
Rl as x,
|
|
7254
|
-
|
|
7280
|
+
Ko as y,
|
|
7255
7281
|
Sl as z
|
|
7256
7282
|
};
|