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.
@@ -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 qn, memo as Re } from "react";
4
- import { useTranslation as z, initReactI18next as $n } from "react-i18next";
5
- import { Slot as Xt } from "@radix-ui/react-slot";
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 Bn, ArrowDownIcon as Hn, ChevronDownIcon as we, BookIcon as jn, XIcon as be, ArrowUpIcon as Gn, Loader2Icon as Wn, SquareIcon as Vn, FileIcon as Kt, PaperclipIcon as Yn, RefreshCcwIcon as Xn, ThumbsUpIcon as Kn, ThumbsDownIcon as Qn, CopyIcon as Qt, BrainIcon as Zn, WrenchIcon as Jn, ImagePlusIcon as eo, CodeIcon as to, DownloadIcon as Te, GlobeIcon as no, XCircleIcon as Zt, CheckCircleIcon as oo, ClockIcon as ro, CircleIcon as ao, ChevronUpIcon as io } from "lucide-react";
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 lo } from "sonner";
10
- import { createPortal as so } from "react-dom";
11
- import { nanoid as Jt } from "nanoid";
12
- import { useQuery as co } from "@tanstack/react-query";
13
- import { Streamdown as uo } from "streamdown";
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 en, useStickToBottomContext as tn } from "use-stick-to-bottom";
20
- import po from "i18next";
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 ho } from "clsx";
25
- import { twMerge as go } from "tailwind-merge";
26
- const mo = {
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
- }, nn = pe(mo);
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(nn.Provider, { ...r, value: h, children: e });
81
+ return /* @__PURE__ */ i(on.Provider, { ...r, value: h, children: e });
82
82
  }
83
- const hl = () => ke(nn), on = pe(null);
83
+ const hl = () => ke(on), rn = pe(null);
84
84
  function at() {
85
- const e = ke(on);
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(on.Provider, { value: e, children: t });
91
+ return /* @__PURE__ */ i(rn.Provider, { value: e, children: t });
92
92
  }
93
93
  const j = (e) => e;
94
- function fo(e, t) {
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 bo = /* @__PURE__ */ new Set([
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 yo() {
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 = bo.has(r), l = t?.language;
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(ho(e));
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 rn = pe(null), $ = (e) => e.replace(/\s+/g, " ").trim(), Me = (e, t) => {
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(":"), _o = (e) => ({
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), an = (e) => {
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 = an(e);
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
- }, vo = (e, t) => {
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
- }, ko = (e) => {
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
- }, wo = (e) => {
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
- }, xo = (e) => {
232
- const t = wo(e);
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, '\\"'), So = (e) => {
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
- }, ln = (e, t, n) => {
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 = an(e), a = bt(r, t), l = bt(r, n);
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
- }, Eo = (e, t) => {
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 = ko(n), c = $(o), s = l.normalized.indexOf(c);
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 : ln(e, r, a);
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_${Jt(10)}`,
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 = So(x);
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 ? ln(T, O, U) : Eo(T, x.excerpt) : !1;
373
- return xo(q || T), q || (T.classList.add("gentiq-reference-highlight"), m.current && window.clearTimeout(m.current), m.current = window.setTimeout(() => {
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 = vo(Y, q), X = q.getBoundingClientRect();
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 || "") || _o(Y), N = Y.textContent || "";
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(rn.Provider, { value: C, children: [
455
+ return /* @__PURE__ */ k(an.Provider, { value: C, children: [
456
456
  r,
457
- s && typeof document < "u" && so(
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(rn);
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_${Jt(8)}`), b = de(
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 No(e) {
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 Co({ part: e, disabled: t, onAnswer: n }) {
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(Bn, { className: "size-4" })
671
+ children: /* @__PURE__ */ i(Hn, { className: "size-4" })
672
672
  }
673
673
  )
674
674
  ] })
675
675
  ] }) });
676
676
  }
677
- function To(e) {
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 } = yo(), {
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 } = fo(n, c), I = (N) => {
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 = No(S);
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
- )) }), Ao = /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/;
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 (Ao.test(n))
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 Io = ot(
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 ? Xt : "button", { "data-slot": "button", className: v(Io({ variant: t, size: n, className: e })), ...r });
922
+ return /* @__PURE__ */ i(o ? Kt : "button", { "data-slot": "button", className: v(Ro({ variant: t, size: n, className: e })), ...r });
923
923
  }
924
- const Ro = ({ className: e, ...t }) => /* @__PURE__ */ i(
925
- en,
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
- ), Oo = ({ className: e, ...t }) => /* @__PURE__ */ i(
934
- en.Content,
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
- ), Lo = ({ status: e }) => {
941
- const { scrollToBottom: t } = tn(), n = Z(e);
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
- }, Do = ({
945
+ }, Fo = ({
946
946
  className: e,
947
947
  ...t
948
948
  }) => {
949
- const { isAtBottom: n, scrollToBottom: o } = tn(), r = W(() => {
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(Hn, { className: "size-3.5" })
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 Fo = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not-prose mb-4 text-primary text-xs", e), ...t }), Po = ({ className: e, count: t, children: n, ...o }) => {
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
- }, Mo = ({ className: e, ...t }) => /* @__PURE__ */ i(
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
- ), zo = ({ 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(jn, { className: "h-4 w-4" }),
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
- ] }) }), Uo = ({
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 qo({
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(Ro, { className: v("min-h-0 flex-1", c), children: [
1048
- /* @__PURE__ */ i(Lo, { status: t }),
1049
- /* @__PURE__ */ k(Oo, { className: "max-w-4xl mx-auto w-full px-4 md:px-0 pb-32", dir: "ltr", children: [
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(Fo, { children: [
1056
+ h.role === "assistant" && h.parts.filter((d) => d.type === "source-url").length > 0 && /* @__PURE__ */ k(Po, { children: [
1057
1057
  /* @__PURE__ */ i(
1058
- Po,
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(Mo, { children: /* @__PURE__ */ i(zo, { href: _, title: _ }, `${h.id}-${w}`) }, `${h.id}-${w}`);
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
- To,
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(Uo, { latestProgress: d, parts: b.parts }) : null;
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(Do, {})
1131
+ /* @__PURE__ */ i(Fo, {})
1132
1132
  ] });
1133
1133
  }
1134
- function $o({ className: e, ...t }) {
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 Bo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: "bg-transparent w-full", children: /* @__PURE__ */ i(
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
- ) }), Ho = ({
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
- $o,
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
- }, jo = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: v("flex shrink-0 items-center gap-1.5 pb-1", e), ...t }), Go = ({ className: e, ...t }) => /* @__PURE__ */ i("div", { className: v("flex items-center gap-0.5", e), ...t }), Wo = ({
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 ?? qn.count(o.children) > 1 ? "default" : "icon";
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
- }, Vo = ({
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(Gn, { className: "size-4" }), c = "Send message";
1232
- return o === "submitted" ? (l = /* @__PURE__ */ i(Wn, { className: "size-4 animate-spin" }), c = "Sending…") : o === "streaming" ? (l = /* @__PURE__ */ i(Vn, { className: "size-3.5 fill-current" }), c = "Stop generation") : o === "error" && (l = /* @__PURE__ */ i(be, { className: "size-4" }), c = "Error — try again"), /* @__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 sn({ delayDuration: e = 400, ...t }) {
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 dn({
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 Yo() {
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 Xo = (e) => [e, "currentUser"];
1303
- function Ko(e = {}) {
1304
- const { app: t } = ge(), n = at(), o = t?.cacheNamespace || "gentiq", r = co({
1305
- queryKey: Xo(o),
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 pn({
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 } = Ko({
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 Qo = () => typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
1330
- function Zo(e, t = {}) {
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 (Qo()) {
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 Jo({
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 } = pn({ enabled: !!l }), m = Zo(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 = Yo(), {
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
- lo.error(s("file_too_large", { size: D }));
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(Bo, { onSubmit: N, children: [
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(Kt, { className: "size-3.5 text-muted-foreground shrink-0" }),
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
- Ho,
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(jo, { children: [
1496
- /* @__PURE__ */ i(Go, { children: (u?.attachments?.enabled ?? !1) && /* @__PURE__ */ k(cn, { children: [
1497
- /* @__PURE__ */ i(un, { asChild: !0, children: /* @__PURE__ */ i(
1498
- Wo,
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(Yn, { className: "size-4" })
1504
+ children: /* @__PURE__ */ i(Xn, { className: "size-4" })
1505
1505
  }
1506
1506
  ) }),
1507
- /* @__PURE__ */ i(dn, { children: s("attach_file") })
1507
+ /* @__PURE__ */ i(pn, { children: s("attach_file") })
1508
1508
  ] }) }),
1509
1509
  /* @__PURE__ */ i(
1510
- Vo,
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 er = (e) => {
1524
- const { title: t, subtitle: n, isRtl: o, icon: r } = pn();
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
- }, hn = ({ className: e, from: t, ...n }) => /* @__PURE__ */ i(
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
- ), gn = ({ children: e, className: t, isPlain: n, ...o }) => /* @__PURE__ */ i(
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
- ), tr = ({ className: e, children: t, ...n }) => /* @__PURE__ */ i(
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(sn, { children: /* @__PURE__ */ k(cn, { children: [
1619
- /* @__PURE__ */ i(un, { asChild: !0, children: c }),
1620
- /* @__PURE__ */ i(dn, { children: /* @__PURE__ */ i("p", { children: e }) })
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 mn(e, t) {
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 nr = 0;
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 ** ++nr;
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 fn = he({
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 bn(e, t) {
1789
+ function yn(e, t) {
1790
1790
  return t in e ? e[t] : t;
1791
1791
  }
1792
- function yn(e, t) {
1793
- return bn(e, t.toLowerCase());
1792
+ function _n(e, t) {
1793
+ return yn(e, t.toLowerCase());
1794
1794
  }
1795
- const or = he({
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: yn
2156
- }), rr = he({
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: bn
2715
- }), _n = he({
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
- }), vn = he({
2729
+ }), kn = he({
2730
2730
  attributes: { xmlnsxlink: "xmlns:xlink" },
2731
2731
  properties: { xmlnsXLink: null, xmlns: null },
2732
2732
  space: "xmlns",
2733
- transform: yn
2734
- }), kn = he({
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
- }), ar = /[A-Z]/g, wt = /-[a-z]/g, ir = /^data[-\w.:]+$/i;
2741
- function lr(e, t) {
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" && ir.test(t)) {
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, cr);
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(ar, sr);
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 sr(e) {
2761
+ function cr(e) {
2762
2762
  return "-" + e.toLowerCase();
2763
2763
  }
2764
- function cr(e) {
2764
+ function ur(e) {
2765
2765
  return e.charAt(1).toUpperCase();
2766
2766
  }
2767
- const ur = mn([fn, or, _n, vn, kn], "html"), dr = mn([fn, rr, _n, vn, kn], "svg");
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 pr(e, t) {
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 wn(e, t, n) {
2800
- const o = n ? fr(n) : void 0;
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 = pr(a, t);
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, hr(l))
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
- gr(e, s.properties, m, b);
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 hr(e) {
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 gr(e, t, n, o) {
2849
- const r = lr(e, n);
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" ? mr(o) : String(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" ? 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 mr(e) {
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 fr(e) {
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 br = [
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
- ], yr = wn(ur, "div"), _r = wn(dr, "g", br), $e = {
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 vr(e, t) {
2948
- return xn(e, {}) || { type: "root", children: [] };
2947
+ function kr(e, t) {
2948
+ return Sn(e, {}) || { type: "root", children: [] };
2949
2949
  }
2950
- function xn(e, t) {
2951
- const n = kr(e, t);
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 kr(e, t) {
2954
+ function wr(e, t) {
2955
2955
  switch (e.nodeType) {
2956
2956
  case 1:
2957
- return Er(
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 xr(
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 Sr(
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 wr();
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: Sn(e, t) };
2996
+ return { type: "root", children: En(e, t) };
2997
2997
  }
2998
- function wr() {
2998
+ function xr() {
2999
2999
  return { type: "doctype" };
3000
3000
  }
3001
- function xr(e) {
3001
+ function Sr(e) {
3002
3002
  return { type: "text", value: e.nodeValue || "" };
3003
3003
  }
3004
- function Sr(e) {
3004
+ function Er(e) {
3005
3005
  return { type: "comment", value: e.nodeValue || "" };
3006
3006
  }
3007
- function Er(e, t) {
3008
- const n = e.namespaceURI, o = n === $e.svg ? _r : yr, r = n === $e.html ? e.tagName.toLowerCase() : e.tagName, a = (
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, Sn(a, t));
3015
+ return o(r, c, En(a, t));
3016
3016
  }
3017
- function Sn(e, t) {
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 = xn(n[r], t);
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 Nr(e, t) {
3028
- const n = Cr(e);
3027
+ function Cr(e, t) {
3028
+ const n = Tr(e);
3029
3029
  return (
3030
3030
  /** @type {Root} */
3031
- vr(n)
3031
+ kr(n)
3032
3032
  );
3033
3033
  }
3034
- function Cr(e) {
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 Rr;
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) ? Tr(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
- Ar(
3062
+ Ir(
3063
3063
  /** @type {Props} */
3064
3064
  e
3065
3065
  )
3066
3066
  );
3067
3067
  if (typeof e == "string")
3068
- return Ir(e);
3068
+ return Rr(e);
3069
3069
  throw new Error("Expected function, string, or object as test");
3070
3070
  })
3071
3071
  );
3072
- function Tr(e) {
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 Ar(e) {
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 Ir(e) {
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 !!(Or(n) && e.call(
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 Rr() {
3120
+ function Or() {
3121
3121
  return !0;
3122
3122
  }
3123
- function Or(e) {
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 Fr;
3169
+ return Pr;
3170
3170
  if (typeof e == "string")
3171
- return Dr(e);
3171
+ return Fr(e);
3172
3172
  if (typeof e == "object")
3173
- return Lr(e);
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 Lr(e) {
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 Dr(e) {
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 !!(Pr(n) && e.call(
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 Fr(e) {
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 Pr(e) {
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(jr), Mr = ae("p"), Ot = ae("tr"), zr = 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
- Hr,
3229
+ jr,
3230
3230
  // From: <https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3>
3231
- Gr
3232
- ]), En = ae([
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 Ur(e, t) {
3315
- const n = t || {}, o = "children" in e ? e.children : [], r = En(e), a = Tn(e, {
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
- ...Cn(e, {
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
- ...Nn(
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 Nn(e, t, n) {
3348
- return e.type === "element" ? qr(e, t, n) : e.type === "text" ? n.whitespace === "normal" ? Cn(e, n) : $r(e) : [];
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 qr(e, t, n) {
3351
- const o = Tn(e, n), r = e.children || [];
3350
+ function $r(e, t, n) {
3351
+ const o = An(e, n), r = e.children || [];
3352
3352
  let a = -1, l = [];
3353
- if (zr(e))
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
- ` : Mr(e) ? (c = 2, s = 2) : En(e) && (c = 1, s = 1); ++a < r.length; )
3358
+ ` : zr(e) ? (c = 2, s = 2) : Nn(e) && (c = 1, s = 1); ++a < r.length; )
3359
3359
  l = l.concat(
3360
- Nn(r[a], e, {
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 Cn(e, t) {
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
- Br(
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 $r(e) {
3393
+ function Br(e) {
3394
3394
  return [String(e.value)];
3395
3395
  }
3396
- function Br(e, t, n) {
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 Tn(e, t) {
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 Hr(e) {
3427
+ function jr(e) {
3428
3428
  return !!(e.properties || {}).hidden;
3429
3429
  }
3430
- function jr(e) {
3430
+ function Gr(e) {
3431
3431
  return e.tagName === "td" || e.tagName === "th";
3432
3432
  }
3433
- function Gr(e) {
3433
+ function Wr(e) {
3434
3434
  return e.tagName === "dialog" && !(e.properties || {}).open;
3435
3435
  }
3436
- const An = [], Wr = !0, Lt = !1, In = "skip";
3437
- function Vr(e, t, n, o) {
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 = An, h, d, w;
3462
- if (a(s, u, g[g.length - 1] || void 0) && (p = Yr(n(s, g)), p[0] === Lt))
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] !== In)
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 Yr(e) {
3482
- return Array.isArray(e) ? e : typeof e == "number" ? [Wr, e] : e == null ? An : [e];
3481
+ function Xr(e) {
3482
+ return Array.isArray(e) ? e : typeof e == "number" ? [Vr, e] : e == null ? In : [e];
3483
3483
  }
3484
- const Xr = {}, Kr = [];
3485
- function Qr(e) {
3486
- const t = e || Xr;
3484
+ const Kr = {}, Qr = [];
3485
+ function Zr(e) {
3486
+ const t = e || Kr;
3487
3487
  return function(n, o) {
3488
- Vr(n, "element", function(r, a) {
3489
- const l = Array.isArray(r.properties.className) ? r.properties.className : Kr, c = l.includes("language-math"), s = l.includes("math-display"), u = l.includes("math-inline");
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 = Ur(b, { whitespace: "pre" });
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
- Nr(h).children);
3538
+ Cr(h).children);
3539
3539
  const d = m.children.indexOf(b);
3540
- return m.children.splice(d, 1, ...h), In;
3540
+ return m.children.splice(d, 1, ...h), Rn;
3541
3541
  });
3542
3542
  };
3543
3543
  }
3544
- function Zr(e, t) {
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 Jr() {
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 ea(e) {
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(Zr(u, "$") + 1, 2)), b = c.enter("mathFlow");
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 ta = {
3707
- tokenize: na,
3706
+ const na = {
3707
+ tokenize: oa,
3708
3708
  concrete: !0,
3709
3709
  name: "mathFlow"
3710
3710
  }, Ft = {
3711
- tokenize: oa,
3711
+ tokenize: ra,
3712
3712
  partial: !0
3713
3713
  };
3714
- function na(e, t, n) {
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 oa(e, t, n) {
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 ra(e) {
3777
+ function aa(e) {
3778
3778
  let n = (e || {}).singleDollarTextMath;
3779
3779
  return n == null && (n = !0), {
3780
3780
  tokenize: o,
3781
- resolve: aa,
3782
- previous: ia,
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 aa(e) {
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 ia(e) {
3818
+ function la(e) {
3819
3819
  return e !== 36 || this.events[this.events.length - 1][1].type === "characterEscape";
3820
3820
  }
3821
- function la(e) {
3821
+ function sa(e) {
3822
3822
  return {
3823
3823
  flow: {
3824
- 36: ta
3824
+ 36: na
3825
3825
  },
3826
3826
  text: {
3827
- 36: ra(e)
3827
+ 36: aa(e)
3828
3828
  }
3829
3829
  };
3830
3830
  }
3831
- const sa = {};
3832
- function ca(e) {
3831
+ const ca = {};
3832
+ function ua(e) {
3833
3833
  const t = (
3834
3834
  /** @type {Processor} */
3835
3835
  this
3836
- ), n = e || sa, o = t.data(), r = o.micromarkExtensions || (o.micromarkExtensions = []), a = o.fromMarkdownExtensions || (o.fromMarkdownExtensions = []), l = o.toMarkdownExtensions || (o.toMarkdownExtensions = []);
3837
- r.push(la(n)), a.push(Jr()), l.push(ea(n));
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 ua(e = {}) {
3839
+ function da(e = {}) {
3840
3840
  var t, n;
3841
- let o = [ca, { singleDollarTextMath: (t = e.singleDollarTextMath) != null ? t : !1 }], r = [Qr, { errorColor: (n = e.errorColor) != null ? n : "var(--color-muted-foreground)" }];
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 = ua();
3846
+ var Pt = da();
3847
3847
  const Ie = Re(
3848
3848
  ({ className: e, ...t }) => /* @__PURE__ */ i(
3849
- uo,
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 da({
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(hn, { from: t.role, children: /* @__PURE__ */ i(gn, { dir: _, children: b ? /* @__PURE__ */ i(Qe, { showAction: !1, reference: b, children: /* @__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(tr, { className: v("mt-1.5 ml-0.5", t.role === "user" && "justify-end"), children: [
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(Xn, { className: "size-3" })
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(Kn, { className: "size-3" })
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(Qn, { className: "size-3" })
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(Qt, { className: "size-3" })
3939
+ children: /* @__PURE__ */ i(Zt, { className: "size-3" })
3940
3940
  }
3941
3941
  )
3942
3942
  ] })
3943
3943
  ] });
3944
3944
  }
3945
- const Rn = pe(null), pa = () => {
3946
- const e = ke(Rn);
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
- }, ha = 1e3, ga = 1e3, On = Re(
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) / ga)), d(null));
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
- }, ha);
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(Rn.Provider, { value: { isStreaming: t, isOpen: s, setIsOpen: u, duration: g }, children: /* @__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
- ), Ln = Re(({ className: e, children: t, ...n }) => {
3997
- const { isStreaming: o, isOpen: r, duration: a } = pa();
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(Zn, { className: "size-4" }),
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
- }), Dn = Re(({ className: e, children: t, ...n }) => /* @__PURE__ */ i(
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
- On.displayName = "Reasoning";
4036
- Ln.displayName = "ReasoningTrigger";
4037
- Dn.displayName = "ReasoningContent";
4038
- function ma({
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
- On,
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(Ln, {}),
4053
- /* @__PURE__ */ i(Dn, { dir: a, children: e.text })
4052
+ /* @__PURE__ */ i(Dn, {}),
4053
+ /* @__PURE__ */ i(Fn, { dir: a, children: e.text })
4054
4054
  ]
4055
4055
  }
4056
4056
  );
4057
4057
  }
4058
- const fa = ot(
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 ba({
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 ? Xt : "span", { "data-slot": "badge", className: v(fa({ variant: t }), e), ...o });
4080
+ return /* @__PURE__ */ i(n ? Kt : "span", { "data-slot": "badge", className: v(ba({ variant: t }), e), ...o });
4081
4081
  }
4082
- function ya({ ...e }) {
4082
+ function _a({ ...e }) {
4083
4083
  return /* @__PURE__ */ i(J.Root, { "data-slot": "dialog", ...e });
4084
4084
  }
4085
- function _a({ ...e }) {
4085
+ function va({ ...e }) {
4086
4086
  return /* @__PURE__ */ i(J.Trigger, { "data-slot": "dialog-trigger", ...e });
4087
4087
  }
4088
- function va({ ...e }) {
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 ka({ className: e, ...t }) {
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 wa({
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(va, { "data-slot": "dialog-portal", children: [
4114
- /* @__PURE__ */ i(ka, {}),
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 xa({ className: e, ...t }) {
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 Sa({ className: e, ...t }) {
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 Ea = {
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
- }, Na = {
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 Ca() {
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 Ta = Ca();
5244
- const Aa = /* @__PURE__ */ te(Ta);
5243
+ var Aa = Ta();
5244
+ const Ia = /* @__PURE__ */ te(Aa);
5245
5245
  var He, zt;
5246
- function Ia() {
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 Ra = Ia();
5376
- const Oa = /* @__PURE__ */ te(Ra);
5375
+ var Oa = Ra();
5376
+ const La = /* @__PURE__ */ te(Oa);
5377
5377
  var je, Ut;
5378
- function La() {
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 Da = La();
5431
- const Fa = /* @__PURE__ */ te(Da);
5430
+ var Fa = Da();
5431
+ const Pa = /* @__PURE__ */ te(Fa);
5432
5432
  var Ge, qt;
5433
- function Pa() {
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 Ma = Pa();
5465
- const za = /* @__PURE__ */ te(Ma);
5464
+ var za = Ma();
5465
+ const Ua = /* @__PURE__ */ te(za);
5466
5466
  var We, $t;
5467
- function Ua() {
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 qa = Ua();
5687
- const $a = /* @__PURE__ */ te(qa);
5686
+ var $a = qa();
5687
+ const Ba = /* @__PURE__ */ te($a);
5688
5688
  var Ve, Bt;
5689
- function Ba() {
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 Ha = Ba();
5730
- const ja = /* @__PURE__ */ te(Ha);
5729
+ var ja = Ha();
5730
+ const Ga = /* @__PURE__ */ te(ja);
5731
5731
  var Ye, Ht;
5732
- function Ga() {
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 Wa = Ga();
5821
- const Va = /* @__PURE__ */ te(Wa);
5820
+ var Va = Wa();
5821
+ const Ya = /* @__PURE__ */ te(Va);
5822
5822
  var Xe, jt;
5823
- function Ya() {
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 Xa = Ya();
6153
- const Ka = /* @__PURE__ */ te(Xa);
6154
- K.registerLanguage("python", Aa);
6155
- K.registerLanguage("javascript", Oa);
6156
- K.registerLanguage("typescript", Fa);
6157
- K.registerLanguage("json", za);
6158
- K.registerLanguage("bash", $a);
6159
- K.registerLanguage("sql", ja);
6160
- K.registerLanguage("yaml", Va);
6161
- K.registerLanguage("markdown", Ka);
6162
- const Qa = pe({
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(Qa.Provider, { value: { code: e }, children: /* @__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: Na,
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: Ea,
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 Za(e, t = "size-4") {
6235
+ function Ja(e, t = "size-4") {
6236
6236
  return {
6237
- web_search: /* @__PURE__ */ i(no, { className: t }),
6237
+ web_search: /* @__PURE__ */ i(oo, { className: t }),
6238
6238
  web_fetch: /* @__PURE__ */ i(Te, { className: t }),
6239
- code_execution: /* @__PURE__ */ i(to, { className: t }),
6240
- image_generation: /* @__PURE__ */ i(eo, { className: t })
6241
- }[e] ?? /* @__PURE__ */ i(Jn, { className: t });
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 Ja = ({ className: e, ...t }) => /* @__PURE__ */ i(lt, { className: v("not-prose mb-4 w-full rounded-md border", e), ...t }), ei = ({ status: e }) => {
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(ba, { className: "gap-1.5 rounded-full text-xs", variant: "secondary", children: [
6250
+ return /* @__PURE__ */ k(ya, { className: "gap-1.5 rounded-full text-xs", variant: "secondary", children: [
6251
6251
  {
6252
- "input-streaming": /* @__PURE__ */ i(ao, { className: "size-4" }),
6253
- "input-available": /* @__PURE__ */ i(ro, { className: "size-4 animate-pulse" }),
6254
- "output-available": /* @__PURE__ */ i(oo, { className: "size-4 text-green-600" }),
6255
- "output-error": /* @__PURE__ */ i(Zt, { className: "size-4 text-red-600" })
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
- }, ti = ({ className: e, type: t, state: n, toolName: o, ...r }) => {
6260
- const a = o || (t.startsWith("tool-") ? t.slice(5) : t), l = Za(a, "size-4 text-muted-foreground");
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(ei, { status: n })
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
- }, ni = ({ className: e, ...t }) => /* @__PURE__ */ i(
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
- ), Fn = (e) => {
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
- }, oi = ({ className: e, input: t, ...n }) => {
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: Fn(t), language: "json" }) })
6297
+ /* @__PURE__ */ i("div", { className: "rounded-md bg-muted/50", children: /* @__PURE__ */ i(nt, { code: Pn(t), language: "json" }) })
6298
6298
  ] });
6299
- }, ri = ({ className: e, output: t, errorText: n, ...o }) => {
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(ya, { children: [
6320
- /* @__PURE__ */ i(_a, { asChild: !0, children: /* @__PURE__ */ k(_e, { variant: "destructive", size: "sm", children: [
6321
- /* @__PURE__ */ i(Zt, { className: "mr-1.5 size-4" }),
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(wa, { className: "max-w-2xl", children: [
6325
- /* @__PURE__ */ i(xa, { children: /* @__PURE__ */ i(Sa, { className: "text-destructive", children: r("tool_error") }) }),
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: Fn(n) }) }),
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(Qt, { className: "mr-1.5 size-4" }),
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 ai({ part: e, message: t, chat: n, toolComponents: o, showToolCalls: r }) {
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(Ja, { className: "animate-in-bubble", children: [
6359
+ return r ? /* @__PURE__ */ k(ei, { className: "animate-in-bubble", children: [
6360
6360
  /* @__PURE__ */ i(
6361
- ti,
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(ni, { children: [
6369
- /* @__PURE__ */ i(oi, { input: a.input }),
6370
- (a.state === "output-available" || a.state === "output-error") && /* @__PURE__ */ i(ri, { errorText: a.errorText, output: a.output })
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 ii({ part: e, message: t }) {
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(hn, { from: t.role, children: /* @__PURE__ */ i(gn, { 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: [
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(Kt, { className: "size-4 shrink-0" }) }),
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 li({ part: e, message: t }) {
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: qo,
6451
- PromptInput: Jo,
6452
- WelcomeScreen: er,
6453
- TextPart: da,
6454
- ReasoningPart: ma,
6455
- ToolPart: ai,
6456
- FilePart: ii,
6457
- ReferencePart: li,
6458
- ChoiceQuestionPart: Co,
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
- }, Pn = pe(R);
6509
+ }, Mn = pe(R);
6510
6510
  function ge() {
6511
- return ke(Pn);
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(Pn.Provider, { value: m, children: g });
6557
+ return /* @__PURE__ */ i(Mn.Provider, { value: m, children: g });
6558
6558
  }
6559
6559
  const {
6560
- slice: si,
6561
- forEach: ci
6560
+ slice: ci,
6561
+ forEach: ui
6562
6562
  } = [];
6563
- function ui(e) {
6564
- return ci.call(si.call(arguments, 1), (t) => {
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 di(e) {
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]+$/, pi = function(e, t) {
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 = pi(e, t, r);
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 hi = {
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
- }, gi = {
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
- }, mi = {
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 fi = {
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 bi = {
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
- }, yi = {
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
- }, _i = {
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
- }, vi = {
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
- }, ki = {
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 Mn = !1;
6816
+ let zn = !1;
6817
6817
  try {
6818
- document.cookie, Mn = !0;
6818
+ document.cookie, zn = !0;
6819
6819
  } catch {
6820
6820
  }
6821
- const zn = ["querystring", "cookie", "localStorage", "sessionStorage", "navigator", "htmlTag"];
6822
- Mn || zn.splice(1, 1);
6823
- const wi = () => ({
6824
- order: zn,
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 Un {
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 = ui(n, this.options || {}, wi()), 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(hi), this.addDetector(gi), this.addDetector(fi), this.addDetector(bi), this.addDetector(yi), this.addDetector(_i), this.addDetector(vi), this.addDetector(ki), this.addDetector(mi);
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 && !di(o)).map((o) => this.options.convertDetectedLanguage(o)), this.services && this.services.languageUtils && this.services.languageUtils.getBestMatchFromCodes ? n : n.length > 0 ? n[0] : 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
- Un.type = "languageDetector";
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: xi,
6869
- chat: Si,
6870
- tools_ui: Ei,
6871
- login: Ni,
6872
- theme: Ci,
6873
- admin: Ti,
6874
- settings: Ai,
6875
- errors: Ii
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: Oi,
6878
- chat: Li,
6879
- tools_ui: Di,
6880
- login: Fi,
6881
- theme: Pi,
6882
- admin: Mi,
6883
- settings: zi,
6884
- errors: Ui
6885
- }, $i = {
6886
- en: Ri,
6887
- fa: qi
6888
- }, Bi = po.createInstance();
6889
- Bi.use(Un).use($n).init({
6890
- resources: $i,
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 Hi = {
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(Hi).includes(r) ? r : void 0);
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(io, { className: "size-4" })
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
- ya as D,
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
- xa as K,
7225
+ Sa as K,
7200
7226
  Gi as L,
7201
- Sa as M,
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
- Co as R,
7232
+ To as R,
7207
7233
  El as S,
7208
7234
  pl as T,
7209
- ii as U,
7210
- qo as V,
7211
- To as W,
7212
- Jo as X,
7213
- ma as Y,
7214
- li as Z,
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
- da as a4,
7222
- ai as a5,
7223
- er as a6,
7247
+ pa as a4,
7248
+ ii as a5,
7249
+ tr as a6,
7224
7250
  it as a7,
7225
- Ko as a8,
7226
- Zo as a9,
7227
- $o as aa,
7228
- ba as ab,
7251
+ Qo as a8,
7252
+ Jo as a9,
7253
+ Bo as aa,
7254
+ ya as ab,
7229
7255
  bl as ac,
7230
- Un as ad,
7231
- yo as b,
7256
+ qn as ad,
7257
+ _o as b,
7232
7258
  at as c,
7233
- $i as d,
7259
+ Bi as d,
7234
7260
  j as e,
7235
7261
  wl as f,
7236
- Bi as g,
7262
+ Hi as g,
7237
7263
  fl as h,
7238
7264
  v as i,
7239
7265
  ml as j,
7240
- Yo as k,
7241
- sn as l,
7242
- cn as m,
7243
- un as n,
7244
- dn as o,
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
- _a as r,
7248
- wa as s,
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
- Xo as y,
7280
+ Ko as y,
7255
7281
  Sl as z
7256
7282
  };