react-docs-ui 0.6.12 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AISettingsPanel-CaGVDZ2z.js → AISettingsPanel-Cvu2lFDx.js} +44 -44
- package/dist/DocsApp-CodPVxvb.js +35173 -0
- package/dist/{GlobalContextMenu-CSEpdhY4.js → GlobalContextMenu-B-Yx5Wqe.js} +2 -2
- package/dist/MdxContent-BdKn0Oni.js +812 -0
- package/dist/MdxContent.lazy-BrPJ1yjA.js +1512 -0
- package/dist/{SearchDialog-B67saUjp.js → SearchDialog-Cyz5zTp6.js} +4 -4
- package/dist/{SearchRuntime-CsSmQWdV.js → SearchRuntime-ClG0KzkU.js} +2 -2
- package/dist/{context-menu-BX0jqPJI.js → context-menu-C46tlmGf.js} +1 -1
- package/dist/docs-app.es.js +8 -2
- package/dist/index-B8So8dyN.js +12 -0
- package/dist/react-docs-ui.css +1 -1
- package/dist/react-docs-ui.es.js +15 -15
- package/dist/types/components/FontProvider.d.ts.map +1 -1
- package/dist/types/components/MdxContent.d.ts.map +1 -1
- package/dist/types/components/MdxContent.lazy.d.ts.map +1 -1
- package/dist/types/docs-app.d.ts +3 -1
- package/dist/types/docs-app.d.ts.map +1 -1
- package/dist/types/generated/shiki-bundle.d.ts +1 -0
- package/dist/types/generated/shiki-bundle.d.ts.map +1 -1
- package/dist/types/lib/component-scanner.d.ts +1 -0
- package/dist/types/lib/component-scanner.d.ts.map +1 -1
- package/dist/types/lib/shiki-highlighter.d.ts +2 -0
- package/dist/types/lib/shiki-highlighter.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/DocsApp-CEu0IOyd.js +0 -26909
- package/dist/MdxContent-Bbj-p4XT.js +0 -10512
- package/dist/MdxContent.lazy-BttoJj5k.js +0 -4
- package/dist/fonts/02c687e7ed17b3df.woff2 +0 -0
- package/dist/fonts/09d4de25241bfe76.woff +0 -0
- package/dist/fonts/09dfac589fa421e8.woff2 +0 -0
- package/dist/fonts/0d29b2b1f8303138.ttf +0 -0
- package/dist/fonts/0e9f19247ab3bbab.ttf +0 -0
- package/dist/fonts/1969dbe1bc0fb3ba.woff +0 -0
- package/dist/fonts/1f89d2fedc85c386.woff +0 -0
- package/dist/fonts/20b388d1a51f5745.ttf +0 -0
- package/dist/fonts/21851da450182870.ttf +0 -0
- package/dist/fonts/22d5c4e6cd1e9474.woff2 +0 -0
- package/dist/fonts/22e83d374a2e6691.woff +0 -0
- package/dist/fonts/2f36d9db5ff365d4.woff +0 -0
- package/dist/fonts/314032aa9f107304.woff2 +0 -0
- package/dist/fonts/3533cc38c9cdc602.ttf +0 -0
- package/dist/fonts/3d0f44e32f2e74f2.ttf +0 -0
- package/dist/fonts/4124e542a1b58f9d.woff +0 -0
- package/dist/fonts/46d68807665c21f9.ttf +0 -0
- package/dist/fonts/4e1eaced156586d3.ttf +0 -0
- package/dist/fonts/4fc7ad74569941de.woff +0 -0
- package/dist/fonts/552292117efd3f42.ttf +0 -0
- package/dist/fonts/552f66ef43fc7522.woff +0 -0
- package/dist/fonts/5600e0919751e982.woff +0 -0
- package/dist/fonts/58d42913cac4cb53.woff2 +0 -0
- package/dist/fonts/5cff588fceb2856c.ttf +0 -0
- package/dist/fonts/5d09426707f9d063.ttf +0 -0
- package/dist/fonts/607b70ee0da7b15f.woff2 +0 -0
- package/dist/fonts/6652f5c5affcddc6.ttf +0 -0
- package/dist/fonts/69732d145fb77d46.ttf +0 -0
- package/dist/fonts/69ed18356e7517f2.woff2 +0 -0
- package/dist/fonts/705a1783b9c1d57b.ttf +0 -0
- package/dist/fonts/72bb9b68fd978fda.woff +0 -0
- package/dist/fonts/745939d4e3f4755f.woff2 +0 -0
- package/dist/fonts/7591411ae35bc580.woff +0 -0
- package/dist/fonts/786e88705bcced94.woff2 +0 -0
- package/dist/fonts/79d8b432f0a85a07.woff +0 -0
- package/dist/fonts/83b99a8c57312e6e.woff2 +0 -0
- package/dist/fonts/83fb1a9d8474dd56.woff2 +0 -0
- package/dist/fonts/8cfd3def12a3c5ef.ttf +0 -0
- package/dist/fonts/90b626c33ef816d4.ttf +0 -0
- package/dist/fonts/96bbd8e3dc776eb1.woff +0 -0
- package/dist/fonts/99d6d1362d7b9b12.woff2 +0 -0
- package/dist/fonts/a27661173f0a7433.woff2 +0 -0
- package/dist/fonts/abe35a8c78edf887.woff +0 -0
- package/dist/fonts/ad9576beef3f1d4e.woff2 +0 -0
- package/dist/fonts/adbfefebea65cf02.ttf +0 -0
- package/dist/fonts/b4aab29b79f992e3.woff2 +0 -0
- package/dist/fonts/b9b897e4301ad703.woff2 +0 -0
- package/dist/fonts/be03438595f83d0f.ttf +0 -0
- package/dist/fonts/c2b56591519e9293.woff2 +0 -0
- package/dist/fonts/c505bdad51c9abfa.ttf +0 -0
- package/dist/fonts/c811e89c187ceac5.woff +0 -0
- package/dist/fonts/ce2290c5c835ea00.woff +0 -0
- package/dist/fonts/ce4cb83d70539101.woff2 +0 -0
- package/dist/fonts/d601cb8345d82ba5.ttf +0 -0
- package/dist/fonts/d6f6ac428c874555.woff +0 -0
- package/dist/fonts/debedc918129c66f.woff2 +0 -0
- package/dist/fonts/e079035466b8f120.woff +0 -0
- package/dist/fonts/e618042c847fd3b9.woff2 +0 -0
- package/dist/fonts/e71ae6d3e7debcfd.woff +0 -0
- package/dist/fonts/f61879e5a60b36a0.woff +0 -0
- package/dist/index-DHF5A5Uk.js +0 -12
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { u as ee, j as e, c as x,
|
|
1
|
+
import { u as ee, j as e, c as x, aL as ie, al as J, aM as le, ao as se, ab as ce, ap as de, an as ue, az as me, aD as xe } from "./DocsApp-CodPVxvb.js";
|
|
2
2
|
import Q, { useState as d, useRef as D, useCallback as S, useEffect as _ } from "react";
|
|
3
3
|
import { Bot as $, User as ge, X as G, CheckCheck as pe, CheckCircle as he, Copy as re, Loader2 as X, AlertCircle as fe, Check as oe, RefreshCw as ve, Pencil as be, Trash2 as te, Square as je, Send as ye, AlertTriangle as Ne, GripVertical as we, Settings as ke, Plus as ne, Star as Ce, ExternalLink as Pe, EyeOff as Ie, Eye as Ee, Info as Se, Save as Ae } from "lucide-react";
|
|
4
4
|
import Te from "react-markdown";
|
|
@@ -44,7 +44,7 @@ function $e() {
|
|
|
44
44
|
document.removeEventListener("mousedown", w), document.removeEventListener("mouseup", C), document.removeEventListener("selectionchange", c), document.removeEventListener("click", a), h.current && clearTimeout(h.current);
|
|
45
45
|
};
|
|
46
46
|
}, [N, b]);
|
|
47
|
-
const
|
|
47
|
+
const R = S(() => {
|
|
48
48
|
if (i) {
|
|
49
49
|
if (!p) {
|
|
50
50
|
m();
|
|
@@ -61,7 +61,7 @@ function $e() {
|
|
|
61
61
|
"button",
|
|
62
62
|
{
|
|
63
63
|
ref: M,
|
|
64
|
-
onClick:
|
|
64
|
+
onClick: R,
|
|
65
65
|
className: x(
|
|
66
66
|
"fixed z-50 flex items-center justify-center w-10 h-10 rounded-full",
|
|
67
67
|
"bg-primary text-primary-foreground shadow-lg",
|
|
@@ -90,7 +90,7 @@ function De({ message: r, onRegenerate: p, onEdit: n, onDelete: m }) {
|
|
|
90
90
|
document.body.removeChild(a);
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
}, []),
|
|
93
|
+
}, []), R = S(async () => {
|
|
94
94
|
try {
|
|
95
95
|
await b(r.content), u(!0), setTimeout(() => u(!1), 2e3);
|
|
96
96
|
} catch {
|
|
@@ -243,7 +243,7 @@ function De({ message: r, onRegenerate: p, onEdit: n, onDelete: m }) {
|
|
|
243
243
|
/* @__PURE__ */ e.jsx(
|
|
244
244
|
"button",
|
|
245
245
|
{
|
|
246
|
-
onClick:
|
|
246
|
+
onClick: R,
|
|
247
247
|
className: "p-1.5 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
|
|
248
248
|
title: "复制",
|
|
249
249
|
children: i ? /* @__PURE__ */ e.jsx(oe, { className: "w-3.5 h-3.5 text-green-500" }) : /* @__PURE__ */ e.jsx(re, { className: "w-3.5 h-3.5" })
|
|
@@ -285,7 +285,7 @@ function De({ message: r, onRegenerate: p, onEdit: n, onDelete: m }) {
|
|
|
285
285
|
}
|
|
286
286
|
);
|
|
287
287
|
}
|
|
288
|
-
function
|
|
288
|
+
function Le({
|
|
289
289
|
onSend: r,
|
|
290
290
|
onStop: p,
|
|
291
291
|
isLoading: n = !1,
|
|
@@ -357,7 +357,7 @@ function Re({
|
|
|
357
357
|
)
|
|
358
358
|
] });
|
|
359
359
|
}
|
|
360
|
-
const
|
|
360
|
+
const Re = 300, Fe = 700, He = 500;
|
|
361
361
|
function Ge() {
|
|
362
362
|
const {
|
|
363
363
|
isDialogOpen: r,
|
|
@@ -374,12 +374,12 @@ function Ge() {
|
|
|
374
374
|
stopGeneration: T,
|
|
375
375
|
editMessage: h,
|
|
376
376
|
deleteMessage: M
|
|
377
|
-
} = ee(), N = D(null), b = D(null),
|
|
377
|
+
} = ee(), N = D(null), b = D(null), R = D(null), v = D(null), w = D(!0), [C, c] = d(He), [a, j] = d(!1), [y, g] = d({ x: 0, y: 0 }), [A, H] = d(!1), K = D({ x: 0, y: 0, posX: 0, posY: 0 }), O = S((s = "smooth") => {
|
|
378
378
|
N.current && N.current.scrollIntoView({ behavior: s });
|
|
379
379
|
}, []), W = S(() => {
|
|
380
380
|
const s = b.current;
|
|
381
381
|
if (!s) return;
|
|
382
|
-
const { scrollTop: P, scrollHeight: z, clientHeight:
|
|
382
|
+
const { scrollTop: P, scrollHeight: z, clientHeight: L } = s, F = z - P - L < 100;
|
|
383
383
|
w.current = F;
|
|
384
384
|
}, []);
|
|
385
385
|
_(() => {
|
|
@@ -393,31 +393,31 @@ function Ge() {
|
|
|
393
393
|
};
|
|
394
394
|
return document.addEventListener("keydown", s), () => document.removeEventListener("keydown", s);
|
|
395
395
|
}, [r, p]);
|
|
396
|
-
const
|
|
396
|
+
const U = S((s) => {
|
|
397
397
|
s.preventDefault(), j(!0);
|
|
398
|
-
const P = s.clientY, z = C,
|
|
399
|
-
const V = P - Y.clientY, q = Math.min(Fe, Math.max(
|
|
398
|
+
const P = s.clientY, z = C, L = (Y) => {
|
|
399
|
+
const V = P - Y.clientY, q = Math.min(Fe, Math.max(Re, z + V));
|
|
400
400
|
c(q);
|
|
401
401
|
}, F = () => {
|
|
402
|
-
j(!1), document.removeEventListener("mousemove",
|
|
402
|
+
j(!1), document.removeEventListener("mousemove", L), document.removeEventListener("mouseup", F);
|
|
403
403
|
};
|
|
404
|
-
document.addEventListener("mousemove",
|
|
405
|
-
}, [C]),
|
|
404
|
+
document.addEventListener("mousemove", L), document.addEventListener("mouseup", F);
|
|
405
|
+
}, [C]), B = S((s) => {
|
|
406
406
|
if (s.target.closest("button")) return;
|
|
407
|
-
s.preventDefault(),
|
|
407
|
+
s.preventDefault(), H(!0), K.current = {
|
|
408
408
|
x: s.clientX,
|
|
409
409
|
y: s.clientY,
|
|
410
410
|
posX: y.x,
|
|
411
411
|
posY: y.y
|
|
412
412
|
};
|
|
413
|
-
const P = (
|
|
414
|
-
const F =
|
|
413
|
+
const P = (L) => {
|
|
414
|
+
const F = L.clientX - K.current.x, Y = L.clientY - K.current.y;
|
|
415
415
|
g({
|
|
416
|
-
x:
|
|
417
|
-
y:
|
|
416
|
+
x: K.current.posX + F,
|
|
417
|
+
y: K.current.posY + Y
|
|
418
418
|
});
|
|
419
419
|
}, z = () => {
|
|
420
|
-
|
|
420
|
+
H(!1), document.removeEventListener("mousemove", P), document.removeEventListener("mouseup", z);
|
|
421
421
|
};
|
|
422
422
|
document.addEventListener("mousemove", P), document.addEventListener("mouseup", z);
|
|
423
423
|
}, [y]), Z = S(() => {
|
|
@@ -472,7 +472,7 @@ function Ge() {
|
|
|
472
472
|
children: /* @__PURE__ */ e.jsxs(
|
|
473
473
|
"div",
|
|
474
474
|
{
|
|
475
|
-
ref:
|
|
475
|
+
ref: R,
|
|
476
476
|
className: x(
|
|
477
477
|
"bg-background border rounded-xl shadow-2xl overflow-hidden",
|
|
478
478
|
"animate-in slide-in-from-bottom-4 duration-300",
|
|
@@ -486,7 +486,7 @@ function Ge() {
|
|
|
486
486
|
"div",
|
|
487
487
|
{
|
|
488
488
|
className: "flex items-center justify-between p-4 border-b shrink-0 cursor-grab active:cursor-grabbing",
|
|
489
|
-
onMouseDown:
|
|
489
|
+
onMouseDown: B,
|
|
490
490
|
children: [
|
|
491
491
|
/* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
492
492
|
/* @__PURE__ */ e.jsx(we, { className: "w-4 h-4 text-muted-foreground" }),
|
|
@@ -568,7 +568,7 @@ function Ge() {
|
|
|
568
568
|
),
|
|
569
569
|
u && /* @__PURE__ */ e.jsx("div", { className: "px-4 py-2 bg-destructive/10 text-destructive text-sm border-t", children: u }),
|
|
570
570
|
/* @__PURE__ */ e.jsx(
|
|
571
|
-
|
|
571
|
+
Le,
|
|
572
572
|
{
|
|
573
573
|
onSend: k,
|
|
574
574
|
onStop: T,
|
|
@@ -581,7 +581,7 @@ function Ge() {
|
|
|
581
581
|
{
|
|
582
582
|
ref: v,
|
|
583
583
|
className: "absolute top-0 left-1/2 -translate-x-1/2 w-20 h-2 cursor-ns-resize flex items-center justify-center",
|
|
584
|
-
onMouseDown:
|
|
584
|
+
onMouseDown: U,
|
|
585
585
|
children: /* @__PURE__ */ e.jsx("div", { className: "w-8 h-1 rounded-full bg-muted-foreground/30" })
|
|
586
586
|
}
|
|
587
587
|
)
|
|
@@ -592,21 +592,21 @@ function Ge() {
|
|
|
592
592
|
) : null;
|
|
593
593
|
}
|
|
594
594
|
function _e() {
|
|
595
|
-
const { isSettingsOpen: r, closeSettings: p, config: n, updateConfig: m } = ee(), { toast: i } = ie(), [u, I] = d("openai"), [o, k] = d(J("openai")), [E, l] = d(""), [T, h] = d("providers"), [M, N] = d(!1), [b,
|
|
595
|
+
const { isSettingsOpen: r, closeSettings: p, config: n, updateConfig: m } = ee(), { toast: i } = ie(), [u, I] = d("openai"), [o, k] = d(J("openai")), [E, l] = d(""), [T, h] = d("providers"), [M, N] = d(!1), [b, R] = d(""), [v, w] = d({
|
|
596
596
|
modelId: "",
|
|
597
597
|
apiKey: "",
|
|
598
598
|
baseUrl: "",
|
|
599
599
|
maxTokens: 4096,
|
|
600
600
|
temperature: 0.7,
|
|
601
601
|
enabled: !0
|
|
602
|
-
}), [C, c] = d(!1), [a, j] = d(!1), [y, g] = d(null), [A,
|
|
602
|
+
}), [C, c] = d(!1), [a, j] = d(!1), [y, g] = d(null), [A, H] = d(!1), [K, O] = d(["openai", "claude", "gemini"]), W = ["openai", "claude", "gemini"], U = (t) => W.includes(t);
|
|
603
603
|
_(() => {
|
|
604
604
|
if (n) {
|
|
605
605
|
const t = n.provider || "openai";
|
|
606
|
-
I(t), k(n.models[t] || J("openai")), l(n.systemPrompt || ""),
|
|
606
|
+
I(t), k(n.models[t] || J("openai")), l(n.systemPrompt || ""), B();
|
|
607
607
|
}
|
|
608
608
|
}, [n]);
|
|
609
|
-
const
|
|
609
|
+
const B = async () => {
|
|
610
610
|
const t = await le();
|
|
611
611
|
O(t);
|
|
612
612
|
}, Z = (t) => {
|
|
@@ -642,7 +642,7 @@ function _e() {
|
|
|
642
642
|
j(!1);
|
|
643
643
|
}
|
|
644
644
|
}, z = async () => {
|
|
645
|
-
|
|
645
|
+
H(!0);
|
|
646
646
|
try {
|
|
647
647
|
await m({
|
|
648
648
|
provider: u,
|
|
@@ -662,9 +662,9 @@ function _e() {
|
|
|
662
662
|
variant: "destructive"
|
|
663
663
|
});
|
|
664
664
|
} finally {
|
|
665
|
-
|
|
665
|
+
H(!1);
|
|
666
666
|
}
|
|
667
|
-
},
|
|
667
|
+
}, L = async () => {
|
|
668
668
|
if (!b.trim()) {
|
|
669
669
|
i({
|
|
670
670
|
title: "请输入 Provider 名称",
|
|
@@ -672,7 +672,7 @@ function _e() {
|
|
|
672
672
|
});
|
|
673
673
|
return;
|
|
674
674
|
}
|
|
675
|
-
if (
|
|
675
|
+
if (U(b)) {
|
|
676
676
|
i({
|
|
677
677
|
title: "不能使用预定义的 Provider 名称",
|
|
678
678
|
variant: "destructive"
|
|
@@ -701,14 +701,14 @@ function _e() {
|
|
|
701
701
|
...n?.models || {},
|
|
702
702
|
[b]: v
|
|
703
703
|
}
|
|
704
|
-
}), N(!1),
|
|
704
|
+
}), N(!1), R(""), w({
|
|
705
705
|
modelId: "",
|
|
706
706
|
apiKey: "",
|
|
707
707
|
baseUrl: "",
|
|
708
708
|
maxTokens: 4096,
|
|
709
709
|
temperature: 0.7,
|
|
710
710
|
enabled: !0
|
|
711
|
-
}), await
|
|
711
|
+
}), await B(), I(b), k(v), i({
|
|
712
712
|
title: "添加成功",
|
|
713
713
|
description: `Provider "${b}" 已添加`
|
|
714
714
|
});
|
|
@@ -720,7 +720,7 @@ function _e() {
|
|
|
720
720
|
});
|
|
721
721
|
}
|
|
722
722
|
}, F = async (t) => {
|
|
723
|
-
if (
|
|
723
|
+
if (U(t)) {
|
|
724
724
|
i({
|
|
725
725
|
title: "不能删除预定义的 Provider",
|
|
726
726
|
variant: "destructive"
|
|
@@ -729,7 +729,7 @@ function _e() {
|
|
|
729
729
|
}
|
|
730
730
|
if (confirm(`确定要删除 "${t}" 吗?`))
|
|
731
731
|
try {
|
|
732
|
-
await ce(t), await
|
|
732
|
+
await ce(t), await B(), u === t && (I("openai"), k(n?.models.openai || J("openai"))), i({
|
|
733
733
|
title: "删除成功",
|
|
734
734
|
description: `Provider "${t}" 已删除`
|
|
735
735
|
});
|
|
@@ -741,7 +741,7 @@ function _e() {
|
|
|
741
741
|
});
|
|
742
742
|
}
|
|
743
743
|
}, Y = async () => {
|
|
744
|
-
|
|
744
|
+
H(!0);
|
|
745
745
|
try {
|
|
746
746
|
await m({ systemPrompt: E }), i({
|
|
747
747
|
title: "保存成功",
|
|
@@ -754,12 +754,12 @@ function _e() {
|
|
|
754
754
|
variant: "destructive"
|
|
755
755
|
});
|
|
756
756
|
} finally {
|
|
757
|
-
|
|
757
|
+
H(!1);
|
|
758
758
|
}
|
|
759
759
|
};
|
|
760
760
|
if (!r)
|
|
761
761
|
return null;
|
|
762
|
-
const V = de(u), q = ue(u), ae =
|
|
762
|
+
const V = de(u), q = ue(u), ae = U(u);
|
|
763
763
|
return /* @__PURE__ */ e.jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [
|
|
764
764
|
/* @__PURE__ */ e.jsx(
|
|
765
765
|
"div",
|
|
@@ -830,7 +830,7 @@ function _e() {
|
|
|
830
830
|
}
|
|
831
831
|
)
|
|
832
832
|
] }),
|
|
833
|
-
/* @__PURE__ */ e.jsx("div", { className: "grid grid-cols-2 gap-2", children:
|
|
833
|
+
/* @__PURE__ */ e.jsx("div", { className: "grid grid-cols-2 gap-2", children: K.map((t) => /* @__PURE__ */ e.jsxs(
|
|
834
834
|
"div",
|
|
835
835
|
{
|
|
836
836
|
className: x(
|
|
@@ -1044,7 +1044,7 @@ function _e() {
|
|
|
1044
1044
|
{
|
|
1045
1045
|
type: "text",
|
|
1046
1046
|
value: b,
|
|
1047
|
-
onChange: (t) =>
|
|
1047
|
+
onChange: (t) => R(t.target.value),
|
|
1048
1048
|
placeholder: "deepseek",
|
|
1049
1049
|
className: "w-full px-3 py-2 rounded-lg border bg-background text-sm focus:outline-none focus:ring-2 focus:ring-ring"
|
|
1050
1050
|
}
|
|
@@ -1102,7 +1102,7 @@ function _e() {
|
|
|
1102
1102
|
/* @__PURE__ */ e.jsx(
|
|
1103
1103
|
"button",
|
|
1104
1104
|
{
|
|
1105
|
-
onClick:
|
|
1105
|
+
onClick: L,
|
|
1106
1106
|
disabled: A,
|
|
1107
1107
|
className: x(
|
|
1108
1108
|
"flex items-center gap-2 px-4 py-2 rounded-lg text-sm ml-auto",
|
|
@@ -1166,6 +1166,6 @@ export {
|
|
|
1166
1166
|
$e as A,
|
|
1167
1167
|
Ge as a,
|
|
1168
1168
|
_e as b,
|
|
1169
|
-
|
|
1169
|
+
Le as c,
|
|
1170
1170
|
De as d
|
|
1171
1171
|
};
|