@chaibuilder/sdk 4.0.0-beta.47 → 4.0.0-beta.49
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/{2SSKDMRQ-CVHl6i14.cjs → 2SSKDMRQ-CjvuNdPo.cjs} +1 -1
- package/dist/{2SSKDMRQ-D9rlRpnI.js → 2SSKDMRQ-Dvf9zadl.js} +2 -2
- package/dist/{AP7HFJJL-D18sv0Wh.cjs → AP7HFJJL-DYFttFoI.cjs} +1 -1
- package/dist/{AP7HFJJL-CBrphwP9.js → AP7HFJJL-q4dJdyFs.js} +1 -1
- package/dist/{IconPicker-CSewv0kY.js → IconPicker-Bf163F7t.js} +1 -1
- package/dist/{IconPicker-CxEGCcVZ.cjs → IconPicker-JWhYq2Gp.cjs} +1 -1
- package/dist/{WDYDFRGG-C0G8c0hR.cjs → WDYDFRGG-BEksfGMC.cjs} +1 -1
- package/dist/{WDYDFRGG-BCmjXFs0.js → WDYDFRGG-O9GIrtX0.js} +2 -2
- package/dist/{actions-registery-BQ31lpix.cjs → actions-registery-BHbZHkE3.cjs} +11 -3
- package/dist/{actions-registery-B1VeX52Y.js → actions-registery-gJb_wq2F.js} +25 -13
- package/dist/actions.cjs +1 -1
- package/dist/actions.d.ts +10 -3
- package/dist/actions.js +6 -4
- package/dist/{active-in-another-tab-BhbPijx9.js → active-in-another-tab-B4Ur0JP7.js} +2 -2
- package/dist/{active-in-another-tab-CMmhCRma.cjs → active-in-another-tab-BPdx4lWh.cjs} +1 -1
- package/dist/{add-new-language-page-ChQgjFwb.cjs → add-new-language-page-BfUp5Ua2.cjs} +1 -1
- package/dist/{add-new-language-page-C0sayTSF.js → add-new-language-page-CRR93tLq.js} +3 -3
- package/dist/{add-new-page-DLf5Tfb7.cjs → add-new-page-B8NGK6WS.cjs} +1 -1
- package/dist/{add-new-page-DLKzuaNM.js → add-new-page-Ppy5-y5j.js} +2 -2
- package/dist/ai-panel-default-lang-BXYQye3N.js +333 -0
- package/dist/ai-panel-default-lang-VhgmHFoQ.cjs +3 -0
- package/dist/ai-panel-other-lang-DaCf-cq4.js +148 -0
- package/dist/ai-panel-other-lang-Ds0EXeUC.cjs +1 -0
- package/dist/{ai-prompt-input-DNb1FKXQ.js → ai-prompt-input-7iWk72w5.js} +253 -258
- package/dist/ai-prompt-input-nZ5_Dm7X.cjs +1 -0
- package/dist/{ai-translation-prompt-B2MfzTjb.js → ai-translation-prompt-1OUs1P7n.js} +1 -1
- package/dist/{ai-translation-prompt-CL3yk8K1.cjs → ai-translation-prompt-B16cK-1Q.cjs} +1 -1
- package/dist/{change-password-modal-CbMifP62.js → change-password-modal-CdvJR1Ln.js} +10 -10
- package/dist/{change-password-modal-D_NFPZxI.cjs → change-password-modal-D5eXjiYq.cjs} +1 -1
- package/dist/{code-editor-53rOkfhX.js → code-editor-CyLjDiEp.js} +1 -1
- package/dist/{code-editor-CCsljULB.cjs → code-editor-SWbfFj1E.cjs} +1 -1
- package/dist/{continue-editing-in-this-client-hB4O3CHJ.js → continue-editing-in-this-client-BrSvK-Ay.js} +2 -2
- package/dist/{continue-editing-in-this-client-3QLL7tQH.cjs → continue-editing-in-this-client-Cmi-GkYZ.cjs} +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/{css-import-modal-Bmi3LrEJ.cjs → css-import-modal-Bdwgd05S.cjs} +1 -1
- package/dist/{css-import-modal-DCivkVh2.js → css-import-modal-Be47CBJn.js} +1 -1
- package/dist/{delete-page-BW2NxLZu.js → delete-page-C99K2qzS.js} +15 -15
- package/dist/{delete-page-CxVfKrBz.cjs → delete-page-DLohaU-U.cjs} +1 -1
- package/dist/{design-token-usage-WTVjf9c-.js → design-token-usage-D1lWCJ3L.js} +1 -1
- package/dist/{design-token-usage-5jsa9ojN.cjs → design-token-usage-eY2wQ0l3.cjs} +1 -1
- package/dist/{digital-asset-manager-dNK-BYdI.js → digital-asset-manager-BZMb6sC7.js} +3 -3
- package/dist/{digital-asset-manager-DlFCWUP4.cjs → digital-asset-manager-Z5aJxkq0.cjs} +1 -1
- package/dist/{duplicate-page-BbB2anQO.js → duplicate-page-CDc2X0eW.js} +12 -12
- package/dist/{duplicate-page-0o6G-oY_.cjs → duplicate-page-D5Gtvqdv.cjs} +1 -1
- package/dist/{dynamic-page-selector-Ds3MqxTF.cjs → dynamic-page-selector-DZHhX008.cjs} +1 -1
- package/dist/{dynamic-page-selector-rFO8457w.js → dynamic-page-selector-DvNBXo6o.js} +2 -2
- package/dist/{image-editor-BnVkes6Q.js → image-editor-BBvvi9Vm.js} +1 -1
- package/dist/{image-editor-DqItmbk1.cjs → image-editor-DwhTYkVR.cjs} +1 -1
- package/dist/index-BVwFJWDq.cjs +5 -0
- package/dist/{index-DTNHTRZu.cjs → index-DCJDQs1a.cjs} +8 -8
- package/dist/{index-BYjniKhj.js → index-LBTm1Jmk.js} +838 -806
- package/dist/{index-B7HAfx-2.js → index-OuHV9Ann.js} +16 -9
- package/dist/{json-diff-viewer-B4rnFiN_.cjs → json-diff-viewer-Cb1CmRqP.cjs} +1 -1
- package/dist/{json-diff-viewer-CKlyO9eW.js → json-diff-viewer-DG6qMOBS.js} +6 -6
- package/dist/{lang-panel-YT96E5Xj.js → lang-panel-B3USOxGq.js} +9 -9
- package/dist/{lang-panel-DiVz4Cay.cjs → lang-panel-DxoJ0v4y.cjs} +1 -1
- package/dist/{manage-design-tokens-LwImeKaK.js → manage-design-tokens-6YGIctip.js} +2 -2
- package/dist/{manage-design-tokens-modal-BEElCTcN.cjs → manage-design-tokens-modal-BSSCXH8Y.cjs} +1 -1
- package/dist/{manage-design-tokens-modal-DFVcoyra.js → manage-design-tokens-modal-CzsnN49F.js} +2 -2
- package/dist/{manage-design-tokens-BwrIc6dS.cjs → manage-design-tokens-udLBvkHA.cjs} +1 -1
- package/dist/{mark-as-template-DtDkh6jB.cjs → mark-as-template-B9yLcasI.cjs} +1 -1
- package/dist/{mark-as-template-D2Hpz0IE.js → mark-as-template-CP_F9ZQ4.js} +2 -2
- package/dist/{models-D0RH2u4C.cjs → models-CQaC3EBW.cjs} +1 -1
- package/dist/{models-BCu-p_QK.js → models-DZ9C6CvE.js} +4 -5
- package/dist/{nested-path-selector-content-TqjBbNys.js → nested-path-selector-content-DmtCI3q9.js} +1 -1
- package/dist/{nested-path-selector-content-CJfN8Hhw.cjs → nested-path-selector-content-aTdu-o0e.cjs} +1 -1
- package/dist/{no-language-page-content-CcD-fgMa.cjs → no-language-page-content-C-MCdPXt.cjs} +1 -1
- package/dist/{no-language-page-content-Ce3wniZT.js → no-language-page-content-D8t5dfgh.js} +2 -2
- package/dist/{no-language-page-dialog-CU1zXsYv.js → no-language-page-dialog-C_fHI2zI.js} +2 -2
- package/dist/{no-language-page-dialog-B7fhPdob.cjs → no-language-page-dialog-D4QIAHnE.cjs} +1 -1
- package/dist/{page-creator-C7XEqUx_.cjs → page-creator-Cz_ah-qE.cjs} +1 -1
- package/dist/{page-creator-wg3uymVG.js → page-creator-DKEkuGCO.js} +33 -33
- package/dist/{page-lock-BuVma3e5.js → page-lock-CwZKJ4IE.js} +2 -2
- package/dist/{page-lock-CINb2air.cjs → page-lock-DdCvtA-I.cjs} +1 -1
- package/dist/{page-locked-dialog-s-3ROcy0.cjs → page-locked-dialog-CrTDBoC4.cjs} +1 -1
- package/dist/{page-locked-dialog-C7_1gjO5.js → page-locked-dialog-DqLlooUz.js} +11 -11
- package/dist/{page-manager-new-CKWSLVrb.cjs → page-manager-new-ah6QYar2.cjs} +1 -1
- package/dist/{page-manager-new-zlobCGqL.js → page-manager-new-ttsrxdW9.js} +42 -42
- package/dist/{page-manager-search-and-filter-BaOsl_5u.cjs → page-manager-search-and-filter-D7AupT6_.cjs} +1 -1
- package/dist/{page-manager-search-and-filter-BU_iNmHy.js → page-manager-search-and-filter-bsqZ6wnI.js} +2 -2
- package/dist/{page-revisions-content-BmaNPNoS.cjs → page-revisions-content-B6hsIla7.cjs} +1 -1
- package/dist/{page-revisions-content-D6l_d2jW.js → page-revisions-content-C5O8_Fms.js} +16 -16
- package/dist/pages.cjs +1 -1
- package/dist/pages.d.ts +66 -1
- package/dist/pages.js +19 -19
- package/dist/{publish-pages-content-2LG6JOrm.cjs → publish-pages-content-BrajJUcP.cjs} +1 -1
- package/dist/{publish-pages-content-CQteRtBA.js → publish-pages-content-KZVMHT6V.js} +32 -32
- package/dist/{rte-widget-modal-KzT2hLFt.cjs → rte-widget-modal-CiTwsXTr.cjs} +1 -1
- package/dist/{rte-widget-modal-CFk0Izg5.js → rte-widget-modal-IU8JzPuZ.js} +1 -1
- package/dist/{save-to-lib-D1V3bNZX.js → save-to-lib-DMnv7ENo.js} +50 -50
- package/dist/{save-to-lib-D82Vrekv.cjs → save-to-lib-Dc700Aop.cjs} +1 -1
- package/dist/{selected-block-display-BHx9N14K.cjs → selected-block-display-CAFEOrLV.cjs} +1 -1
- package/dist/{selected-block-display-BbUH5RaW.js → selected-block-display-CidmQ-wz.js} +2 -2
- package/dist/{seo-panel-CyBmGg6k.js → seo-panel-Br8gxDxu.js} +148 -158
- package/dist/{seo-panel-CPsjZLtL.cjs → seo-panel-CMY-adM-.cjs} +2 -2
- package/dist/{shared-json-ld-DyU9wqrE.cjs → shared-json-ld-CMH-eRUq.cjs} +1 -1
- package/dist/{shared-json-ld-SGykyppC.js → shared-json-ld-uvMmwCYp.js} +26 -26
- package/dist/{slug-input-BzpnOdXG.cjs → slug-input-CiHC5l3r.cjs} +1 -1
- package/dist/{slug-input-DpMI4nEB.js → slug-input-DLWTMTsO.js} +1 -1
- package/dist/supabase-actions.cjs +1 -1
- package/dist/supabase-actions.js +1 -1
- package/dist/{take-over-request-wTVLAotu.cjs → take-over-request-IRLgF1dG.cjs} +1 -1
- package/dist/{take-over-request-D97Fg-xB.js → take-over-request-KdR1_h_K.js} +5 -5
- package/dist/{translation-warning-modal-Xk6oYGFS.cjs → translation-warning-modal-CLZ9tC1F.cjs} +1 -1
- package/dist/{translation-warning-modal-Du-CnfyH.js → translation-warning-modal-CzNt6LDO.js} +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/{unmark-as-template-BHk2F0ck.js → unmark-as-template-C5ovsEBP.js} +2 -2
- package/dist/{unmark-as-template-BRnMhh7n.cjs → unmark-as-template-F7TdgWjI.cjs} +1 -1
- package/dist/{unpublish-page-BOEjCHLB.js → unpublish-page-0fR1o0b7.js} +8 -8
- package/dist/{unpublish-page-Bu75lH33.cjs → unpublish-page-CUr8Xub6.cjs} +1 -1
- package/dist/{unpublished-partials-modal-C0_0qNvV.js → unpublished-partials-modal-BhNAub_z.js} +1 -1
- package/dist/{unpublished-partials-modal-BS_GddEG.cjs → unpublished-partials-modal-Cv5R9-hi.cjs} +1 -1
- package/dist/{web-preview-DcOhTGup.cjs → web-preview-CuMYekVJ.cjs} +1 -1
- package/dist/{web-preview-C3bbIF6T.js → web-preview-D9pXonAv.js} +1 -1
- package/package.json +1 -1
- package/dist/ai-panel-default-lang-DsGjoITc.cjs +0 -3
- package/dist/ai-panel-default-lang-Dy_4L5pH.js +0 -317
- package/dist/ai-panel-other-lang-1RYtb71B.js +0 -132
- package/dist/ai-panel-other-lang-CL3coL7Z.cjs +0 -1
- package/dist/ai-prompt-input-BhTL_-mT.cjs +0 -1
- package/dist/index-BeGLwvqs.cjs +0 -5
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { jsxs as R, Fragment as X, jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { ab as Y, ac as Z, ad as tt, r as et, a as nt, ae as rt } from "./index-OuHV9Ann.js";
|
|
3
|
+
import { C as st, a as ot, b as at, R as it, c as ct, d as lt, T as ut, M as dt, e as mt, f as ft, h as pt, S as ht, i as gt } from "./selected-block-display-CidmQ-wz.js";
|
|
4
|
+
import { Bot as At } from "lucide-react";
|
|
5
|
+
import { useCallback as kt, Fragment as yt, Suspense as It, lazy as bt, startTransition as Q } from "react";
|
|
6
|
+
import { toast as St } from "sonner";
|
|
7
|
+
import { l as Ct, m as Et } from "./index-LBTm1Jmk.js";
|
|
8
|
+
import { g as U } from "./apply-binding-vAuN-TGV.js";
|
|
9
|
+
import { useQueryClient as vt } from "@tanstack/react-query";
|
|
10
|
+
const wt = () => {
|
|
11
|
+
const { addPredefinedBlock: I } = Y(), F = Z(), b = tt(), x = vt(), N = async (o, n) => {
|
|
12
|
+
if (!n) return;
|
|
13
|
+
const e = U(n);
|
|
14
|
+
await I(e, o.parentId, o.position);
|
|
15
|
+
}, w = async (o, n) => {
|
|
16
|
+
if (!o.blockId || !n) return;
|
|
17
|
+
const e = U(n);
|
|
18
|
+
await F(o.blockId, e);
|
|
19
|
+
}, C = async (o) => {
|
|
20
|
+
!o.ids || o.ids.length === 0 || await b(o.ids);
|
|
21
|
+
};
|
|
22
|
+
let d = null;
|
|
23
|
+
const H = (o, n) => {
|
|
24
|
+
const e = document.getElementById("canvas-iframe");
|
|
25
|
+
if (!e)
|
|
26
|
+
return null;
|
|
27
|
+
const l = e == null ? void 0 : e.contentDocument;
|
|
28
|
+
if (!l)
|
|
29
|
+
return null;
|
|
30
|
+
l.querySelectorAll("[data-stream-canvas]").forEach((f) => f.remove());
|
|
31
|
+
let s = null;
|
|
32
|
+
if (o && o !== "undefined" && (s = l.querySelector(`[data-block-id="${o}"]`)), s || (s = l.body), !s)
|
|
33
|
+
return null;
|
|
34
|
+
if (d = l.createElement("div"), d.setAttribute("data-stream-canvas", "true"), n !== void 0 && n >= 0 && s.children) {
|
|
35
|
+
const f = Math.min(n, s.children.length);
|
|
36
|
+
f < s.children.length ? s.insertBefore(d, s.children[f]) : s.appendChild(d);
|
|
37
|
+
} else
|
|
38
|
+
s.appendChild(d);
|
|
39
|
+
return d;
|
|
40
|
+
}, P = (o) => {
|
|
41
|
+
var s;
|
|
42
|
+
const n = document.getElementById("canvas-iframe");
|
|
43
|
+
if (!n)
|
|
44
|
+
return null;
|
|
45
|
+
const e = n == null ? void 0 : n.contentDocument;
|
|
46
|
+
if (!e)
|
|
47
|
+
return null;
|
|
48
|
+
e.querySelectorAll("[data-stream-canvas]").forEach((f) => f.remove());
|
|
49
|
+
const u = e.querySelector(`[data-block-id="${o}"]`);
|
|
50
|
+
return u ? (d = e.createElement("div"), d.setAttribute("data-stream-canvas", "true"), (s = u.parentNode) == null || s.insertBefore(d, u.nextSibling), u.style.display = "none", d) : null;
|
|
51
|
+
}, L = (o) => {
|
|
52
|
+
const n = document.getElementById("canvas-iframe");
|
|
53
|
+
(n == null ? void 0 : n.contentWindow) && o.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
54
|
+
}, B = (o, n, e) => {
|
|
55
|
+
const l = H(n, e);
|
|
56
|
+
l && (l.innerHTML = o, L(l));
|
|
57
|
+
}, T = (o, n) => {
|
|
58
|
+
const e = P(n);
|
|
59
|
+
e && (e.innerHTML = o, L(e));
|
|
60
|
+
}, O = (o) => {
|
|
61
|
+
const n = o.match(/^--ACTION=(.+)--$/);
|
|
62
|
+
if (!n) return null;
|
|
63
|
+
let l = n[1].replace(/--/g, "").split("|");
|
|
64
|
+
const s = { type: l[0] };
|
|
65
|
+
return l.forEach((f) => {
|
|
66
|
+
const t = f.trim();
|
|
67
|
+
if (t.startsWith("PARENT=")) {
|
|
68
|
+
const g = t.substring(7);
|
|
69
|
+
s.parentId = g === "undefined" ? void 0 : g;
|
|
70
|
+
} else t.startsWith("POS=") ? s.position = parseInt(t.substring(4)) : t.startsWith("ID=") ? s.blockId = t.substring(3) : t.startsWith("IDS=") && (s.ids = t.substring(4).split(",").map((g) => g.trim()));
|
|
71
|
+
}), s;
|
|
72
|
+
};
|
|
73
|
+
return kt(
|
|
74
|
+
async (o, n) => {
|
|
75
|
+
const e = new TextDecoder();
|
|
76
|
+
let l = "", u = "", s = !1, f = null;
|
|
77
|
+
const t = {
|
|
78
|
+
isInAction: !1,
|
|
79
|
+
currentAction: null,
|
|
80
|
+
htmlBuffer: "",
|
|
81
|
+
isCapturingHtml: !1
|
|
82
|
+
}, g = async (r) => {
|
|
83
|
+
const a = r.trim();
|
|
84
|
+
if (a === "--START--") {
|
|
85
|
+
s = !0;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (s) {
|
|
89
|
+
if (a === "--END--") {
|
|
90
|
+
t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await M(t.currentAction, t.htmlBuffer), d && (d.remove(), d = null);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (a.startsWith("--THINKING=")) {
|
|
94
|
+
const i = a.substring(11);
|
|
95
|
+
n((c) => {
|
|
96
|
+
const p = [...c], h = p[p.length - 1];
|
|
97
|
+
if (h && h.role === "assistant" && h.isReasoning)
|
|
98
|
+
h.content = i, h.isStreaming = !1;
|
|
99
|
+
else {
|
|
100
|
+
const $ = {
|
|
101
|
+
id: Date.now().toString(),
|
|
102
|
+
role: "assistant",
|
|
103
|
+
content: i,
|
|
104
|
+
isReasoning: !0,
|
|
105
|
+
isStreaming: !1
|
|
106
|
+
};
|
|
107
|
+
p.push($);
|
|
108
|
+
}
|
|
109
|
+
return p;
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (a.startsWith("--TASK=")) {
|
|
114
|
+
const i = a.substring(7), c = `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, p = {
|
|
115
|
+
id: c,
|
|
116
|
+
role: "assistant",
|
|
117
|
+
content: i.replace(/--$/, ""),
|
|
118
|
+
isTask: !0,
|
|
119
|
+
isTaskLoading: !0,
|
|
120
|
+
isTaskCompleted: !1
|
|
121
|
+
};
|
|
122
|
+
f = c, n((h) => [...h, p]);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (a.startsWith("--MSG=")) {
|
|
126
|
+
const i = a.substring(6), c = {
|
|
127
|
+
id: Date.now().toString(),
|
|
128
|
+
role: "assistant",
|
|
129
|
+
content: i.replace(/--$/g, ""),
|
|
130
|
+
isReasoning: !1,
|
|
131
|
+
isStreaming: !1
|
|
132
|
+
};
|
|
133
|
+
n((p) => [...p, c]);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (a.startsWith("--ACTION=")) {
|
|
137
|
+
t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await M(t.currentAction, t.htmlBuffer), t.currentAction = O(a), t.htmlBuffer = "", t.isInAction = !0;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (a === "--ENDACTION--") {
|
|
141
|
+
t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await M(t.currentAction, t.htmlBuffer), f && (n((i) => i.map((c) => c.isTask ? { ...c, isTaskCompleted: !0 } : c)), f = null), t.currentAction = null, t.htmlBuffer = "", t.isInAction = !1;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (a === "--HTML--") {
|
|
145
|
+
t.isCapturingHtml = !0;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (a === "--ENDHTML--") {
|
|
149
|
+
t.isCapturingHtml = !1;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (a.startsWith("--HTML--") && a.includes("--ENDHTML--")) {
|
|
153
|
+
const i = a.match(/^--HTML--(.+?)--ENDHTML--$/);
|
|
154
|
+
if (i && t.currentAction) {
|
|
155
|
+
const c = i[1];
|
|
156
|
+
t.htmlBuffer += c, t.currentAction.type === "ADD" ? B(t.htmlBuffer, t.currentAction.parentId, t.currentAction.position) : t.currentAction.type === "EDIT" && t.currentAction.blockId && T(t.htmlBuffer, t.currentAction.blockId);
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
t.isCapturingHtml && t.currentAction && (t.htmlBuffer += r + `
|
|
161
|
+
`, t.currentAction.type === "ADD" ? B(t.htmlBuffer, t.currentAction.parentId, t.currentAction.position) : t.currentAction.type === "EDIT" && t.currentAction.blockId && T(t.htmlBuffer, t.currentAction.blockId));
|
|
162
|
+
}
|
|
163
|
+
}, M = async (r, a) => {
|
|
164
|
+
try {
|
|
165
|
+
switch (r.type) {
|
|
166
|
+
case "ADD":
|
|
167
|
+
await N(r, a);
|
|
168
|
+
break;
|
|
169
|
+
case "EDIT":
|
|
170
|
+
await w(r, a);
|
|
171
|
+
break;
|
|
172
|
+
case "REMOVE":
|
|
173
|
+
await C(r);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
n((i) => i.filter((c) => !c.isTask));
|
|
177
|
+
} catch (i) {
|
|
178
|
+
console.log(i);
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
try {
|
|
182
|
+
for (; ; ) {
|
|
183
|
+
const { done: r, value: a } = await o.read();
|
|
184
|
+
if (r) break;
|
|
185
|
+
const i = e.decode(a, { stream: !0 });
|
|
186
|
+
l += i, u += i;
|
|
187
|
+
const c = u.split(`
|
|
188
|
+
`);
|
|
189
|
+
u = c.pop() || "";
|
|
190
|
+
for (const p of c)
|
|
191
|
+
await g(p);
|
|
192
|
+
}
|
|
193
|
+
u && await g(u), x.invalidateQueries({
|
|
194
|
+
queryKey: ["AI_USAGE"]
|
|
195
|
+
});
|
|
196
|
+
} catch (r) {
|
|
197
|
+
console.log(r);
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
[b]
|
|
201
|
+
);
|
|
202
|
+
}, Bt = bt(() => import("./ai-prompt-input-7iWk72w5.js")), Ft = ({
|
|
203
|
+
t: I,
|
|
204
|
+
fetch: F,
|
|
205
|
+
input: b,
|
|
206
|
+
messages: x,
|
|
207
|
+
setInput: N,
|
|
208
|
+
isLoading: w,
|
|
209
|
+
setMessages: C,
|
|
210
|
+
handleStop: d,
|
|
211
|
+
setIsLoading: H,
|
|
212
|
+
currentBlock: P,
|
|
213
|
+
fallbackLang: L,
|
|
214
|
+
setCurrentBlock: B,
|
|
215
|
+
setAbortController: T,
|
|
216
|
+
selectedModel: O,
|
|
217
|
+
onModelChange: o
|
|
218
|
+
}) => {
|
|
219
|
+
const { models: n } = Ct(), e = Et(), l = n.find((r) => r.id === "google/gemini-3-flash") || n[0], u = O || l.id, s = et(), [, f] = nt(), t = rt(), g = wt(), M = async (r, a, i, c) => {
|
|
220
|
+
var V, _;
|
|
221
|
+
if (!r || w) return;
|
|
222
|
+
B(s);
|
|
223
|
+
const p = t(s ? { blockId: s._id, additionalCoreBlocks: ["Icon"] } : { additionalCoreBlocks: ["Icon"] });
|
|
224
|
+
if (s && !p) {
|
|
225
|
+
St.error(I("Something went wrong. Please try again."));
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const h = {
|
|
229
|
+
id: Date.now().toString(),
|
|
230
|
+
role: "user",
|
|
231
|
+
content: gt({
|
|
232
|
+
language: L,
|
|
233
|
+
userInput: a || r,
|
|
234
|
+
currentHtml: p
|
|
235
|
+
}),
|
|
236
|
+
userMessage: r
|
|
237
|
+
}, $ = {
|
|
238
|
+
id: (Date.now() + 1).toString(),
|
|
239
|
+
role: "assistant",
|
|
240
|
+
content: "",
|
|
241
|
+
isReasoning: !0,
|
|
242
|
+
isStreaming: !0
|
|
243
|
+
};
|
|
244
|
+
C((A) => [...A, h, $]), H(!0);
|
|
245
|
+
const J = new AbortController();
|
|
246
|
+
T(J);
|
|
247
|
+
const S = c || u;
|
|
248
|
+
(V = e.onAIEvent) == null || V.call(e, { type: "stream_start", model: S, timestamp: Date.now() });
|
|
249
|
+
try {
|
|
250
|
+
const A = {
|
|
251
|
+
messages: [h].map((k) => ({
|
|
252
|
+
role: k.role,
|
|
253
|
+
content: k.content
|
|
254
|
+
})),
|
|
255
|
+
model: c || u,
|
|
256
|
+
context: e.context
|
|
257
|
+
};
|
|
258
|
+
i && (A.image = i);
|
|
259
|
+
const W = await F({ body: { action: "ASK_AI", data: A }, streamResponse: !0 });
|
|
260
|
+
if (!W.ok)
|
|
261
|
+
throw new Error(I("Failed to get AI response"));
|
|
262
|
+
const y = (_ = W.body) == null ? void 0 : _.getReader();
|
|
263
|
+
if (!y) throw new Error(I("Response body is not readable"));
|
|
264
|
+
await g(y, C), C((k) => (Q(() => {
|
|
265
|
+
var K, j, G, z;
|
|
266
|
+
const D = k.filter((q) => q.role === "assistant" && !q.isReasoning && !q.isTask), E = ((K = D[D.length - 1]) == null ? void 0 : K.content) || "", v = Date.now();
|
|
267
|
+
(j = e.onSuccess) == null || j.call(e, { content: E, model: S, timestamp: v }), (G = e.onComplete) == null || G.call(e, { success: !0, content: E, model: S, timestamp: v }), (z = e.onAIEvent) == null || z.call(e, {
|
|
268
|
+
type: "completion",
|
|
269
|
+
content: E,
|
|
270
|
+
model: S,
|
|
271
|
+
timestamp: v
|
|
272
|
+
});
|
|
273
|
+
}), k));
|
|
274
|
+
} catch (A) {
|
|
275
|
+
if (A.name !== "AbortError") {
|
|
276
|
+
const W = {
|
|
277
|
+
id: (Date.now() + 1).toString(),
|
|
278
|
+
role: "assistant",
|
|
279
|
+
content: I("Sorry, I encountered an error. Please try again.")
|
|
280
|
+
};
|
|
281
|
+
C((y) => [...y, W]), Q(() => {
|
|
282
|
+
var D, E, v;
|
|
283
|
+
const y = A instanceof Error ? A.message : String(A), k = Date.now();
|
|
284
|
+
(D = e.onError) == null || D.call(e, { error: y, model: S, timestamp: k }), (E = e.onComplete) == null || E.call(e, { success: !1, error: y, model: S, timestamp: k }), (v = e.onAIEvent) == null || v.call(e, { type: "error", error: y, model: S, timestamp: k });
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
} finally {
|
|
288
|
+
N(""), H(!1), B(null), T(null);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
return /* @__PURE__ */ R(X, { children: [
|
|
292
|
+
/* @__PURE__ */ R(st, { className: "no-scrollbar", children: [
|
|
293
|
+
/* @__PURE__ */ R(ot, { className: "gap-2 px-0", children: [
|
|
294
|
+
x.length === 0 && /* @__PURE__ */ m(
|
|
295
|
+
at,
|
|
296
|
+
{
|
|
297
|
+
icon: /* @__PURE__ */ m(At, { size: 48, className: "text-gray-300" }),
|
|
298
|
+
title: "Start a conversation",
|
|
299
|
+
description: I("Start a conversation with the AI assistant to add/edit current page")
|
|
300
|
+
}
|
|
301
|
+
),
|
|
302
|
+
x.map(
|
|
303
|
+
(r) => r.role !== "system" && /* @__PURE__ */ m(yt, { children: r.isReasoning ? /* @__PURE__ */ R(it, { isStreaming: r.isStreaming, defaultOpen: !0, children: [
|
|
304
|
+
/* @__PURE__ */ m(ct, { className: "text-xs [&_p]:text-muted-foreground" }),
|
|
305
|
+
/* @__PURE__ */ m(lt, { className: "p-0 text-xs", children: r.content })
|
|
306
|
+
] }) : r.isTask && !r.isTaskCompleted ? /* @__PURE__ */ m(ut, { content: r.content, isLoading: r.isTaskLoading }) : /* @__PURE__ */ m(dt, { from: r.role, children: /* @__PURE__ */ m(mt, { className: "p-0", children: r.role === "assistant" ? /* @__PURE__ */ m(ft, { className: "p-0 text-xs", children: r.content }) : /* @__PURE__ */ m("div", { className: "p-0 text-xs", children: r.userMessage || r.content }) }) }) }, r.id)
|
|
307
|
+
)
|
|
308
|
+
] }),
|
|
309
|
+
/* @__PURE__ */ m(pt, {})
|
|
310
|
+
] }),
|
|
311
|
+
/* @__PURE__ */ R("div", { className: "border-gray-200 pb-2", children: [
|
|
312
|
+
/* @__PURE__ */ m(ht, { onRemove: () => f([]), isLoading: w }),
|
|
313
|
+
/* @__PURE__ */ m(It, { fallback: /* @__PURE__ */ m("div", { children: "Loading..." }), children: /* @__PURE__ */ m(
|
|
314
|
+
Bt,
|
|
315
|
+
{
|
|
316
|
+
input: b,
|
|
317
|
+
setInput: N,
|
|
318
|
+
onSend: M,
|
|
319
|
+
onStop: d,
|
|
320
|
+
isLoading: w,
|
|
321
|
+
selectedLang: "",
|
|
322
|
+
currentBlock: s || P,
|
|
323
|
+
disabled: (b == null ? void 0 : b.length) === 0,
|
|
324
|
+
selectedModel: u,
|
|
325
|
+
onModelChange: o
|
|
326
|
+
}
|
|
327
|
+
) })
|
|
328
|
+
] })
|
|
329
|
+
] });
|
|
330
|
+
};
|
|
331
|
+
export {
|
|
332
|
+
Ft as default
|
|
333
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),T=require("./index-DCJDQs1a.cjs"),p=require("./selected-block-display-CAFEOrLV.cjs"),Z=require("lucide-react"),C=require("react"),ee=require("sonner"),J=require("./index-BVwFJWDq.cjs"),X=require("./apply-binding-CBSjMYSk.cjs"),te=require("@tanstack/react-query"),ne=()=>{const{addPredefinedBlock:b}=T.useAddBlock(),W=T.useReplaceBlock(),S=T.useRemoveBlocks(),N=te.useQueryClient(),H=async(o,n)=>{if(!n)return;const t=X.getBlocksFromHTML(n);await b(t,o.parentId,o.position)},w=async(o,n)=>{if(!o.blockId||!n)return;const t=X.getBlocksFromHTML(n);await W(o.blockId,t)},x=async o=>{!o.ids||o.ids.length===0||await S(o.ids)};let m=null;const q=(o,n)=>{const t=document.getElementById("canvas-iframe");if(!t)return null;const u=t==null?void 0:t.contentDocument;if(!u)return null;u.querySelectorAll("[data-stream-canvas]").forEach(f=>f.remove());let s=null;if(o&&o!=="undefined"&&(s=u.querySelector(`[data-block-id="${o}"]`)),s||(s=u.body),!s)return null;if(m=u.createElement("div"),m.setAttribute("data-stream-canvas","true"),n!==void 0&&n>=0&&s.children){const f=Math.min(n,s.children.length);f<s.children.length?s.insertBefore(m,s.children[f]):s.appendChild(m)}else s.appendChild(m);return m},F=o=>{var s;const n=document.getElementById("canvas-iframe");if(!n)return null;const t=n==null?void 0:n.contentDocument;if(!t)return null;t.querySelectorAll("[data-stream-canvas]").forEach(f=>f.remove());const d=t.querySelector(`[data-block-id="${o}"]`);return d?(m=t.createElement("div"),m.setAttribute("data-stream-canvas","true"),(s=d.parentNode)==null||s.insertBefore(m,d.nextSibling),d.style.display="none",m):null},L=o=>{const n=document.getElementById("canvas-iframe");(n==null?void 0:n.contentWindow)&&o.scrollIntoView({behavior:"smooth",block:"end"})},M=(o,n,t)=>{const u=q(n,t);u&&(u.innerHTML=o,L(u))},D=(o,n)=>{const t=F(n);t&&(t.innerHTML=o,L(t))},O=o=>{const n=o.match(/^--ACTION=(.+)--$/);if(!n)return null;let u=n[1].replace(/--/g,"").split("|");const s={type:u[0]};return u.forEach(f=>{const e=f.trim();if(e.startsWith("PARENT=")){const A=e.substring(7);s.parentId=A==="undefined"?void 0:A}else e.startsWith("POS=")?s.position=parseInt(e.substring(4)):e.startsWith("ID=")?s.blockId=e.substring(3):e.startsWith("IDS=")&&(s.ids=e.substring(4).split(",").map(A=>A.trim()))}),s};return C.useCallback(async(o,n)=>{const t=new TextDecoder;let u="",d="",s=!1,f=null;const e={isInAction:!1,currentAction:null,htmlBuffer:"",isCapturingHtml:!1},A=async r=>{const i=r.trim();if(i==="--START--"){s=!0;return}if(s){if(i==="--END--"){e.currentAction&&(e.htmlBuffer||e.currentAction.type==="REMOVE")&&await R(e.currentAction,e.htmlBuffer),m&&(m.remove(),m=null);return}if(i.startsWith("--THINKING=")){const a=i.substring(11);n(l=>{const h=[...l],g=h[h.length-1];if(g&&g.role==="assistant"&&g.isReasoning)g.content=a,g.isStreaming=!1;else{const $={id:Date.now().toString(),role:"assistant",content:a,isReasoning:!0,isStreaming:!1};h.push($)}return h});return}if(i.startsWith("--TASK=")){const a=i.substring(7),l=`task-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,h={id:l,role:"assistant",content:a.replace(/--$/,""),isTask:!0,isTaskLoading:!0,isTaskCompleted:!1};f=l,n(g=>[...g,h]);return}if(i.startsWith("--MSG=")){const a=i.substring(6),l={id:Date.now().toString(),role:"assistant",content:a.replace(/--$/g,""),isReasoning:!1,isStreaming:!1};n(h=>[...h,l]);return}if(i.startsWith("--ACTION=")){e.currentAction&&(e.htmlBuffer||e.currentAction.type==="REMOVE")&&await R(e.currentAction,e.htmlBuffer),e.currentAction=O(i),e.htmlBuffer="",e.isInAction=!0;return}if(i==="--ENDACTION--"){e.currentAction&&(e.htmlBuffer||e.currentAction.type==="REMOVE")&&await R(e.currentAction,e.htmlBuffer),f&&(n(a=>a.map(l=>l.isTask?{...l,isTaskCompleted:!0}:l)),f=null),e.currentAction=null,e.htmlBuffer="",e.isInAction=!1;return}if(i==="--HTML--"){e.isCapturingHtml=!0;return}if(i==="--ENDHTML--"){e.isCapturingHtml=!1;return}if(i.startsWith("--HTML--")&&i.includes("--ENDHTML--")){const a=i.match(/^--HTML--(.+?)--ENDHTML--$/);if(a&&e.currentAction){const l=a[1];e.htmlBuffer+=l,e.currentAction.type==="ADD"?M(e.htmlBuffer,e.currentAction.parentId,e.currentAction.position):e.currentAction.type==="EDIT"&&e.currentAction.blockId&&D(e.htmlBuffer,e.currentAction.blockId)}return}e.isCapturingHtml&&e.currentAction&&(e.htmlBuffer+=r+`
|
|
2
|
+
`,e.currentAction.type==="ADD"?M(e.htmlBuffer,e.currentAction.parentId,e.currentAction.position):e.currentAction.type==="EDIT"&&e.currentAction.blockId&&D(e.htmlBuffer,e.currentAction.blockId))}},R=async(r,i)=>{try{switch(r.type){case"ADD":await H(r,i);break;case"EDIT":await w(r,i);break;case"REMOVE":await x(r);break}n(a=>a.filter(l=>!l.isTask))}catch(a){console.log(a)}};try{for(;;){const{done:r,value:i}=await o.read();if(r)break;const a=t.decode(i,{stream:!0});u+=a,d+=a;const l=d.split(`
|
|
3
|
+
`);d=l.pop()||"";for(const h of l)await A(h)}d&&await A(d),N.invalidateQueries({queryKey:["AI_USAGE"]})}catch(r){console.log(r)}},[S])},re=C.lazy(()=>Promise.resolve().then(()=>require("./ai-prompt-input-nZ5_Dm7X.cjs"))),se=({t:b,fetch:W,input:S,messages:N,setInput:H,isLoading:w,setMessages:x,handleStop:m,setIsLoading:q,currentBlock:F,fallbackLang:L,setCurrentBlock:M,setAbortController:D,selectedModel:O,onModelChange:o})=>{const{models:n}=J.useAIModels(),t=J.useAIConfig(),u=n.find(r=>r.id==="google/gemini-3-flash")||n[0],d=O||u.id,s=T.useSelectedBlock(),[,f]=T.useSelectedBlockIds(),e=T.useBlocksHtmlForAi(),A=ne(),R=async(r,i,a,l)=>{var _,K;if(!r||w)return;M(s);const h=e(s?{blockId:s._id,additionalCoreBlocks:["Icon"]}:{additionalCoreBlocks:["Icon"]});if(s&&!h){ee.toast.error(b("Something went wrong. Please try again."));return}const g={id:Date.now().toString(),role:"user",content:p.getUserPrompt({language:L,userInput:i||r,currentHtml:h}),userMessage:r},$={id:(Date.now()+1).toString(),role:"assistant",content:"",isReasoning:!0,isStreaming:!0};x(k=>[...k,g,$]),q(!0);const Y=new AbortController;D(Y);const v=l||d;(_=t.onAIEvent)==null||_.call(t,{type:"stream_start",model:v,timestamp:Date.now()});try{const k={messages:[g].map(y=>({role:y.role,content:y.content})),model:l||d,context:t.context};a&&(k.image=a);const P=await W({body:{action:"ASK_AI",data:k},streamResponse:!0});if(!P.ok)throw new Error(b("Failed to get AI response"));const I=(K=P.body)==null?void 0:K.getReader();if(!I)throw new Error(b("Response body is not readable"));await A(I,x),x(y=>(C.startTransition(()=>{var G,Q,z,U;const j=y.filter(V=>V.role==="assistant"&&!V.isReasoning&&!V.isTask),B=((G=j[j.length-1])==null?void 0:G.content)||"",E=Date.now();(Q=t.onSuccess)==null||Q.call(t,{content:B,model:v,timestamp:E}),(z=t.onComplete)==null||z.call(t,{success:!0,content:B,model:v,timestamp:E}),(U=t.onAIEvent)==null||U.call(t,{type:"completion",content:B,model:v,timestamp:E})}),y))}catch(k){if(k.name!=="AbortError"){const P={id:(Date.now()+1).toString(),role:"assistant",content:b("Sorry, I encountered an error. Please try again.")};x(I=>[...I,P]),C.startTransition(()=>{var j,B,E;const I=k instanceof Error?k.message:String(k),y=Date.now();(j=t.onError)==null||j.call(t,{error:I,model:v,timestamp:y}),(B=t.onComplete)==null||B.call(t,{success:!1,error:I,model:v,timestamp:y}),(E=t.onAIEvent)==null||E.call(t,{type:"error",error:I,model:v,timestamp:y})})}}finally{H(""),q(!1),M(null),D(null)}};return c.jsxs(c.Fragment,{children:[c.jsxs(p.Conversation,{className:"no-scrollbar",children:[c.jsxs(p.ConversationContent,{className:"gap-2 px-0",children:[N.length===0&&c.jsx(p.ConversationEmptyState,{icon:c.jsx(Z.Bot,{size:48,className:"text-gray-300"}),title:"Start a conversation",description:b("Start a conversation with the AI assistant to add/edit current page")}),N.map(r=>r.role!=="system"&&c.jsx(C.Fragment,{children:r.isReasoning?c.jsxs(p.Reasoning,{isStreaming:r.isStreaming,defaultOpen:!0,children:[c.jsx(p.ReasoningTrigger,{className:"text-xs [&_p]:text-muted-foreground"}),c.jsx(p.ReasoningContent,{className:"p-0 text-xs",children:r.content})]}):r.isTask&&!r.isTaskCompleted?c.jsx(p.TaskMessage,{content:r.content,isLoading:r.isTaskLoading}):c.jsx(p.Message,{from:r.role,children:c.jsx(p.MessageContent,{className:"p-0",children:r.role==="assistant"?c.jsx(p.MessageResponse,{className:"p-0 text-xs",children:r.content}):c.jsx("div",{className:"p-0 text-xs",children:r.userMessage||r.content})})})},r.id))]}),c.jsx(p.ConversationScrollButton,{})]}),c.jsxs("div",{className:"border-gray-200 pb-2",children:[c.jsx(p.SelectedBlockDisplay,{onRemove:()=>f([]),isLoading:w}),c.jsx(C.Suspense,{fallback:c.jsx("div",{children:"Loading..."}),children:c.jsx(re,{input:S,setInput:H,onSend:R,onStop:m,isLoading:w,selectedLang:"",currentBlock:s||F,disabled:(S==null?void 0:S.length)===0,selectedModel:d,onModelChange:o})})]})]})};exports.default=se;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsxs as g, Fragment as L, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { r as ee, a as te, s as se, t as oe } from "./index-OuHV9Ann.js";
|
|
3
|
+
import { C as ne, a as re, b as ae, R as le, c as ce, d as ie, T as de, M as me, e as ue, f as he, S as pe, g as Se } from "./selected-block-display-CidmQ-wz.js";
|
|
4
|
+
import { Bot as ye } from "lucide-react";
|
|
5
|
+
import { useRef as Te, useEffect as ke, Suspense as P, lazy as _, Fragment as ge, startTransition as F } from "react";
|
|
6
|
+
import { useTranslation as fe } from "react-i18next";
|
|
7
|
+
import { l as we, m as xe } from "./index-LBTm1Jmk.js";
|
|
8
|
+
const Ae = _(() => import("./ai-translation-prompt-1OUs1P7n.js")), Me = _(() => import("./ai-prompt-input-7iWk72w5.js")), Ce = ({
|
|
9
|
+
fetch: j,
|
|
10
|
+
input: m,
|
|
11
|
+
messages: f,
|
|
12
|
+
setInput: A,
|
|
13
|
+
isLoading: u,
|
|
14
|
+
handleStop: z,
|
|
15
|
+
setMessages: M,
|
|
16
|
+
setIsLoading: w,
|
|
17
|
+
selectedLang: h,
|
|
18
|
+
currentBlock: U,
|
|
19
|
+
fallbackLang: q,
|
|
20
|
+
abortController: x,
|
|
21
|
+
setAbortController: J,
|
|
22
|
+
setCurrentBlock: N,
|
|
23
|
+
selectedModel: K,
|
|
24
|
+
onModelChange: V
|
|
25
|
+
}) => {
|
|
26
|
+
const { t: r } = fe(), { models: b } = we(), t = xe(), W = b.find((e) => e.id === "google/gemini-3-flash") || b[0], E = K || W.id, $ = Te(null), p = ee(), [, G] = te(), R = se(), H = oe(), Q = () => {
|
|
27
|
+
var e;
|
|
28
|
+
(e = $.current) == null || e.scrollIntoView({ behavior: "smooth" });
|
|
29
|
+
};
|
|
30
|
+
ke(() => {
|
|
31
|
+
Q();
|
|
32
|
+
}, [f, u]);
|
|
33
|
+
const v = async (e, B, X) => {
|
|
34
|
+
var D, O;
|
|
35
|
+
p && N(p);
|
|
36
|
+
const I = (e == null ? void 0 : e.toLowerCase()) === "translate", C = {
|
|
37
|
+
id: Date.now().toString(),
|
|
38
|
+
role: "user",
|
|
39
|
+
content: Se({
|
|
40
|
+
fallbackLang: q,
|
|
41
|
+
userInput: B || e,
|
|
42
|
+
language: h,
|
|
43
|
+
blocks: I ? R() : R(h)
|
|
44
|
+
}),
|
|
45
|
+
userMessage: B || e || r("Translate the content")
|
|
46
|
+
}, Y = {
|
|
47
|
+
id: (Date.now() + 1).toString(),
|
|
48
|
+
role: "assistant",
|
|
49
|
+
content: "Thinking...",
|
|
50
|
+
isReasoning: !0,
|
|
51
|
+
isStreaming: !0
|
|
52
|
+
};
|
|
53
|
+
w(!0);
|
|
54
|
+
const Z = new AbortController();
|
|
55
|
+
J(Z), M((a) => [...a, C, Y]), w(!0);
|
|
56
|
+
const n = X || E;
|
|
57
|
+
(D = t.onAIEvent) == null || D.call(t, { type: "stream_start", model: n, timestamp: Date.now() });
|
|
58
|
+
try {
|
|
59
|
+
const a = {
|
|
60
|
+
messages: [C],
|
|
61
|
+
initiator: I ? "TRANSLATE_CONTENT" : "UPDATE_CONTENT",
|
|
62
|
+
model: n,
|
|
63
|
+
context: t.context
|
|
64
|
+
}, l = await j({ body: { action: "ASK_AI", data: a }, streamResponse: !0 });
|
|
65
|
+
if (!l.ok)
|
|
66
|
+
throw new Error(r("Failed to get AI response"));
|
|
67
|
+
const c = (O = l.body) == null ? void 0 : O.getReader(), S = new TextDecoder();
|
|
68
|
+
let o = "";
|
|
69
|
+
if (!c) throw new Error(r("Response body is not readable"));
|
|
70
|
+
for (; ; ) {
|
|
71
|
+
const { done: d, value: T } = await c.read();
|
|
72
|
+
if (d)
|
|
73
|
+
break;
|
|
74
|
+
const k = S.decode(T, { stream: !0 });
|
|
75
|
+
o += k, M((i) => (i[i.length - 1].content = o, [...i]));
|
|
76
|
+
}
|
|
77
|
+
const y = JSON.parse(o == null ? void 0 : o.replace("```json", "").replace("```", ""));
|
|
78
|
+
H(y), F(() => {
|
|
79
|
+
var T, k, i;
|
|
80
|
+
const d = Date.now();
|
|
81
|
+
(T = t.onSuccess) == null || T.call(t, { content: o, model: n, timestamp: d }), (k = t.onComplete) == null || k.call(t, { success: !0, content: o, model: n, timestamp: d }), (i = t.onAIEvent) == null || i.call(t, {
|
|
82
|
+
type: "completion",
|
|
83
|
+
content: o,
|
|
84
|
+
model: n,
|
|
85
|
+
timestamp: d
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
} catch (a) {
|
|
89
|
+
x == null || x.abort(), F(() => {
|
|
90
|
+
var S, o, y;
|
|
91
|
+
const l = a instanceof Error ? a.message : String(a), c = Date.now();
|
|
92
|
+
(S = t.onError) == null || S.call(t, { error: l, model: n, timestamp: c }), (o = t.onComplete) == null || o.call(t, { success: !1, error: l, model: n, timestamp: c }), (y = t.onAIEvent) == null || y.call(t, { type: "error", error: l, model: n, timestamp: c });
|
|
93
|
+
});
|
|
94
|
+
} finally {
|
|
95
|
+
w(!1), A(""), N(null);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return /* @__PURE__ */ g(L, { children: [
|
|
99
|
+
/* @__PURE__ */ s("div", { className: "py-2", children: /* @__PURE__ */ s(P, { fallback: /* @__PURE__ */ s("div", { children: r("Loading...") }), children: /* @__PURE__ */ s(
|
|
100
|
+
Ae,
|
|
101
|
+
{
|
|
102
|
+
isLoading: u,
|
|
103
|
+
selectedBlock: p,
|
|
104
|
+
selectedLang: h,
|
|
105
|
+
onClick: v
|
|
106
|
+
}
|
|
107
|
+
) }) }),
|
|
108
|
+
/* @__PURE__ */ s(ne, { children: /* @__PURE__ */ g(re, { className: "gap-4 px-0", children: [
|
|
109
|
+
f.length === 0 && /* @__PURE__ */ s(
|
|
110
|
+
ae,
|
|
111
|
+
{
|
|
112
|
+
icon: /* @__PURE__ */ s(ye, { size: 48, className: "text-gray-300" }),
|
|
113
|
+
title: r("Start a conversation with the AI assistant to translate/edit your content"),
|
|
114
|
+
description: r(
|
|
115
|
+
"Only content can be edited in secondary languages. To edit layout, styles and more, switch to the default language."
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
f.map(
|
|
120
|
+
(e) => e.role !== "system" && /* @__PURE__ */ s(ge, { children: e.isReasoning ? /* @__PURE__ */ g(le, { isStreaming: e.isStreaming, defaultOpen: !0, children: [
|
|
121
|
+
/* @__PURE__ */ s(ce, { className: "text-xs [&_p]:text-muted-foreground" }),
|
|
122
|
+
/* @__PURE__ */ s(ie, { className: "p-0 text-xs", children: e.content })
|
|
123
|
+
] }) : e.isTask ? /* @__PURE__ */ s(de, { content: e.content, isLoading: e.isTaskLoading }) : /* @__PURE__ */ s(me, { from: e.role, children: /* @__PURE__ */ s(ue, { className: "p-0", children: e.role === "assistant" ? /* @__PURE__ */ s(he, { className: "p-0 text-xs", children: e.content }) : /* @__PURE__ */ s("div", { className: "p-0 text-xs", children: e.userMessage || e.content }) }) }) }, e.id)
|
|
124
|
+
)
|
|
125
|
+
] }) }),
|
|
126
|
+
/* @__PURE__ */ g("div", { className: "border-gray-200 pb-2", children: [
|
|
127
|
+
/* @__PURE__ */ s(pe, { onRemove: () => G([]), isLoading: u }),
|
|
128
|
+
/* @__PURE__ */ s(P, { fallback: /* @__PURE__ */ s("div", { children: r("Loading...") }), children: /* @__PURE__ */ s(
|
|
129
|
+
Me,
|
|
130
|
+
{
|
|
131
|
+
input: m,
|
|
132
|
+
setInput: A,
|
|
133
|
+
onSend: v,
|
|
134
|
+
onStop: z,
|
|
135
|
+
isLoading: u,
|
|
136
|
+
selectedLang: h,
|
|
137
|
+
currentBlock: p || U,
|
|
138
|
+
disabled: (m == null ? void 0 : m.length) === 0,
|
|
139
|
+
selectedModel: E,
|
|
140
|
+
onModelChange: V
|
|
141
|
+
}
|
|
142
|
+
) })
|
|
143
|
+
] })
|
|
144
|
+
] });
|
|
145
|
+
};
|
|
146
|
+
export {
|
|
147
|
+
Ce as default
|
|
148
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),g=require("./index-DCJDQs1a.cjs"),n=require("./selected-block-display-CAFEOrLV.cjs"),L=require("lucide-react"),r=require("react"),ee=require("react-i18next"),O=require("./index-BVwFJWDq.cjs"),te=r.lazy(()=>Promise.resolve().then(()=>require("./ai-translation-prompt-B16cK-1Q.cjs"))),se=r.lazy(()=>Promise.resolve().then(()=>require("./ai-prompt-input-nZ5_Dm7X.cjs"))),ne=({fetch:_,input:x,messages:w,setInput:b,isLoading:m,handleStop:F,setMessages:A,setIsLoading:v,selectedLang:j,currentBlock:z,fallbackLang:U,abortController:R,setAbortController:J,setCurrentBlock:M,selectedModel:K,onModelChange:V})=>{const{t:l}=ee.useTranslation(),{models:N}=O.useAIModels(),s=O.useAIConfig(),W=N.find(e=>e.id==="google/gemini-3-flash")||N[0],E=K||W.id,G=r.useRef(null),p=g.useSelectedBlock(),[,H]=g.useSelectedBlockIds(),B=g.useI18nBlocks(),Q=g.useStreamMultipleBlocksProps(),X=()=>{var e;(e=G.current)==null||e.scrollIntoView({behavior:"smooth"})};r.useEffect(()=>{X()},[w,m]);const I=async(e,f,Y)=>{var C,D;p&&M(p);const q=(e==null?void 0:e.toLowerCase())==="translate",P={id:Date.now().toString(),role:"user",content:n.getTranslationUserPrompt({fallbackLang:U,userInput:f||e,language:j,blocks:q?B():B(j)}),userMessage:f||e||l("Translate the content")},Z={id:(Date.now()+1).toString(),role:"assistant",content:"Thinking...",isReasoning:!0,isStreaming:!0};v(!0);const $=new AbortController;J($),A(c=>[...c,P,Z]),v(!0);const a=Y||E;(C=s.onAIEvent)==null||C.call(s,{type:"stream_start",model:a,timestamp:Date.now()});try{const c={messages:[P],initiator:q?"TRANSLATE_CONTENT":"UPDATE_CONTENT",model:a,context:s.context},i=await _({body:{action:"ASK_AI",data:c},streamResponse:!0});if(!i.ok)throw new Error(l("Failed to get AI response"));const d=(D=i.body)==null?void 0:D.getReader(),y=new TextDecoder;let o="";if(!d)throw new Error(l("Response body is not readable"));for(;;){const{done:h,value:T}=await d.read();if(h)break;const k=y.decode(T,{stream:!0});o+=k,A(u=>(u[u.length-1].content=o,[...u]))}const S=JSON.parse(o==null?void 0:o.replace("```json","").replace("```",""));Q(S),r.startTransition(()=>{var T,k,u;const h=Date.now();(T=s.onSuccess)==null||T.call(s,{content:o,model:a,timestamp:h}),(k=s.onComplete)==null||k.call(s,{success:!0,content:o,model:a,timestamp:h}),(u=s.onAIEvent)==null||u.call(s,{type:"completion",content:o,model:a,timestamp:h})})}catch(c){R==null||R.abort(),r.startTransition(()=>{var y,o,S;const i=c instanceof Error?c.message:String(c),d=Date.now();(y=s.onError)==null||y.call(s,{error:i,model:a,timestamp:d}),(o=s.onComplete)==null||o.call(s,{success:!1,error:i,model:a,timestamp:d}),(S=s.onAIEvent)==null||S.call(s,{type:"error",error:i,model:a,timestamp:d})})}finally{v(!1),b(""),M(null)}};return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"py-2",children:t.jsx(r.Suspense,{fallback:t.jsx("div",{children:l("Loading...")}),children:t.jsx(te,{isLoading:m,selectedBlock:p,selectedLang:j,onClick:I})})}),t.jsx(n.Conversation,{children:t.jsxs(n.ConversationContent,{className:"gap-4 px-0",children:[w.length===0&&t.jsx(n.ConversationEmptyState,{icon:t.jsx(L.Bot,{size:48,className:"text-gray-300"}),title:l("Start a conversation with the AI assistant to translate/edit your content"),description:l("Only content can be edited in secondary languages. To edit layout, styles and more, switch to the default language.")}),w.map(e=>e.role!=="system"&&t.jsx(r.Fragment,{children:e.isReasoning?t.jsxs(n.Reasoning,{isStreaming:e.isStreaming,defaultOpen:!0,children:[t.jsx(n.ReasoningTrigger,{className:"text-xs [&_p]:text-muted-foreground"}),t.jsx(n.ReasoningContent,{className:"p-0 text-xs",children:e.content})]}):e.isTask?t.jsx(n.TaskMessage,{content:e.content,isLoading:e.isTaskLoading}):t.jsx(n.Message,{from:e.role,children:t.jsx(n.MessageContent,{className:"p-0",children:e.role==="assistant"?t.jsx(n.MessageResponse,{className:"p-0 text-xs",children:e.content}):t.jsx("div",{className:"p-0 text-xs",children:e.userMessage||e.content})})})},e.id))]})}),t.jsxs("div",{className:"border-gray-200 pb-2",children:[t.jsx(n.SelectedBlockDisplay,{onRemove:()=>H([]),isLoading:m}),t.jsx(r.Suspense,{fallback:t.jsx("div",{children:l("Loading...")}),children:t.jsx(se,{input:x,setInput:b,onSend:I,onStop:F,isLoading:m,selectedLang:j,currentBlock:p||z,disabled:(x==null?void 0:x.length)===0,selectedModel:E,onModelChange:V})})]})]})};exports.default=ne;
|