@chaibuilder/pages 0.16.12 → 0.16.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.
Files changed (84) hide show
  1. package/dist/{2AITGKQY-D1mM4eEh.js → 2AITGKQY-B7xwscsX.js} +2 -2
  2. package/dist/{2AITGKQY-AK2WgbeT.cjs → 2AITGKQY-B9AnRLq_.cjs} +1 -1
  3. package/dist/{NCMVHL6D-BeRsWdGV.js → NCMVHL6D-B1mwht0Q.js} +4 -4
  4. package/dist/{NCMVHL6D-DItDf9IY.cjs → NCMVHL6D-CRMC-wXy.cjs} +1 -1
  5. package/dist/{ZDWCUMSJ-COSBY-at.cjs → ZDWCUMSJ-BqqPEOij.cjs} +1 -1
  6. package/dist/{ZDWCUMSJ-D6caRaY7.js → ZDWCUMSJ-CxKNtXtp.js} +1 -1
  7. package/dist/{add-new-language-page-CQcFi0Tp.cjs → add-new-language-page-D2a6GK-7.cjs} +1 -1
  8. package/dist/{add-new-language-page-nnaUe-qk.js → add-new-language-page-DD0qvJJs.js} +2 -2
  9. package/dist/{add-new-page-DxObnvo_.cjs → add-new-page-01GDCaa4.cjs} +1 -1
  10. package/dist/{add-new-page-Ba1fq6LH.js → add-new-page-CYtuChN1.js} +1 -1
  11. package/dist/ai-panel-content-DfdnvlS8.js +123 -0
  12. package/dist/ai-panel-content-Ouz6pu_0.cjs +1 -0
  13. package/dist/ai-panel-default-lang-Bi2fH1so.js +317 -0
  14. package/dist/ai-panel-default-lang-N1pb8rzQ.cjs +3 -0
  15. package/dist/{ai-panel-other-lang-B4euTuod.js → ai-panel-other-lang-2JPRSyO1.js} +10 -9
  16. package/dist/ai-panel-other-lang-BysU1464.cjs +1 -0
  17. package/dist/ai-prompt-input-DadL_cng.js +1071 -0
  18. package/dist/ai-prompt-input-JeIqWZco.cjs +1 -0
  19. package/dist/{ai-translation-prompt-CVuPbgXw.js → ai-translation-prompt-B0si-R0R.js} +1 -1
  20. package/dist/{ai-translation-prompt-Ip7w2_Ey.cjs → ai-translation-prompt-CQb1L7NM.cjs} +1 -1
  21. package/dist/{delete-page-CbY8q5M3.cjs → delete-page-C8Nt7IYF.cjs} +1 -1
  22. package/dist/{delete-page-SX9X35nA.js → delete-page-_96Di9yN.js} +1 -1
  23. package/dist/{digital-asset-manager-CIMo79Di.cjs → digital-asset-manager-B5FQGtGY.cjs} +1 -1
  24. package/dist/{digital-asset-manager-SAFNO_mx.js → digital-asset-manager-jfnmWRJj.js} +1 -1
  25. package/dist/{duplicate-page-CXK2HcxD.cjs → duplicate-page-BNjfZ7Wd.cjs} +1 -1
  26. package/dist/{duplicate-page-5SwLvmkX.js → duplicate-page-CERjaPIW.js} +9 -9
  27. package/dist/{dynamic-page-selector-Crd3y4Hk.cjs → dynamic-page-selector-Bpz_bvRu.cjs} +1 -1
  28. package/dist/{dynamic-page-selector-DfcuTqRN.js → dynamic-page-selector-XEWV4iCf.js} +1 -1
  29. package/dist/{index-Bz7smSC0.cjs → index-Pdb5tSRL.cjs} +2 -2
  30. package/dist/{index-EnM7J19_.js → index-e9WlBH0R.js} +70 -70
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.js +4 -4
  33. package/dist/{json-diff-viewer-CDwpbuag.js → json-diff-viewer-DyvKomxd.js} +1 -1
  34. package/dist/{json-diff-viewer-D34kDA_c.cjs → json-diff-viewer-H-2DkGza.cjs} +1 -1
  35. package/dist/{lang-panel-CUIeO5bb.js → lang-panel-BWP5A-FD.js} +2 -2
  36. package/dist/{lang-panel-CaFrYllL.cjs → lang-panel-DcZ7u4em.cjs} +1 -1
  37. package/dist/{mark-as-template-D0dLQaIB.js → mark-as-template-1oVraE1x.js} +1 -1
  38. package/dist/{mark-as-template-v182tmN6.cjs → mark-as-template-B_FyVRRO.cjs} +1 -1
  39. package/dist/{no-language-page-content-ByRFD_qA.js → no-language-page-content-CEci_4j7.js} +1 -1
  40. package/dist/{no-language-page-content-Bk4fEx_p.cjs → no-language-page-content-JO4YYUx7.cjs} +1 -1
  41. package/dist/{page-creator-BnvaGZVI.cjs → page-creator-BGgoOA92.cjs} +1 -1
  42. package/dist/{page-creator-Bh0IUGR3.js → page-creator-DJJFl7px.js} +2 -2
  43. package/dist/{page-lock-request-C2b1kqyA.cjs → page-lock-request-BoYzkcyt.cjs} +1 -1
  44. package/dist/{page-lock-request-CaNqxfD6.js → page-lock-request-WzpcD2ZN.js} +6 -6
  45. package/dist/{page-locked-by-dialog--WLDdkw9.js → page-locked-by-dialog-Djvjp2Hx.js} +1 -1
  46. package/dist/{page-locked-by-dialog-90ElC8aG.cjs → page-locked-by-dialog-bvI27OZ6.cjs} +1 -1
  47. package/dist/{page-manager-new-SNRQn7Az.cjs → page-manager-new-CMfGorRQ.cjs} +1 -1
  48. package/dist/{page-manager-new-Bo4-zwfW.js → page-manager-new-DmVX0qLk.js} +14 -14
  49. package/dist/{page-manager-search-and-filter-BETHSa3y.js → page-manager-search-and-filter-DbUoW8Di.js} +1 -1
  50. package/dist/{page-manager-search-and-filter-hyUIHOD_.cjs → page-manager-search-and-filter-Dgh8iyGp.cjs} +1 -1
  51. package/dist/{page-revisions-content-BCMjvZRZ.cjs → page-revisions-content-CwoXXE53.cjs} +1 -1
  52. package/dist/{page-revisions-content-VWthKL7O.js → page-revisions-content-CxEJGxLY.js} +18 -18
  53. package/dist/pages.css +1 -1
  54. package/dist/{publish-pages-content-CaBwfekc.cjs → publish-pages-content-BRu7qwAo.cjs} +1 -1
  55. package/dist/{publish-pages-content-6N7aEcM1.js → publish-pages-content-CfAlmivf.js} +6 -6
  56. package/dist/{save-to-lib-YYBxY7MV.js → save-to-lib-BCaBfh0I.js} +1 -1
  57. package/dist/{save-to-lib-CtGpDkC6.cjs → save-to-lib-DpyJA0y1.cjs} +1 -1
  58. package/dist/{selected-block-display-DdW-DWF1.js → selected-block-display-BmNhvYKu.js} +1 -1
  59. package/dist/{selected-block-display-BEbuJn0l.cjs → selected-block-display-CqnwyGRp.cjs} +1 -1
  60. package/dist/{seo-panel-CqJDhbj-.js → seo-panel-BH8fcGqr.js} +1 -1
  61. package/dist/{seo-panel-B9P7fXjo.cjs → seo-panel-D-nKfsRJ.cjs} +1 -1
  62. package/dist/server.cjs +2 -2
  63. package/dist/server.d.ts +3 -2
  64. package/dist/server.js +48 -48
  65. package/dist/{shared-json-ld-CyxmC9y5.cjs → shared-json-ld-m_OsVv8h.cjs} +1 -1
  66. package/dist/{shared-json-ld-DxEPILj_.js → shared-json-ld-zTDoJzUv.js} +1 -1
  67. package/dist/{slug-input-j5z5ZQn9.js → slug-input-CumDDlCk.js} +1 -1
  68. package/dist/{slug-input-RNiSrU3p.cjs → slug-input-vzNtu37S.cjs} +1 -1
  69. package/dist/{theme-panel-footer-CCsiDIVl.cjs → theme-panel-footer-CKccBcd9.cjs} +1 -1
  70. package/dist/{theme-panel-footer-DD2yalfG.js → theme-panel-footer-CdUmjB-e.js} +1 -1
  71. package/dist/{unmark-as-template-B2hKhAHn.js → unmark-as-template-6ew-7bf8.js} +1 -1
  72. package/dist/{unmark-as-template-DXjLbqOM.cjs → unmark-as-template-BNFOsxIg.cjs} +1 -1
  73. package/dist/{unpublish-page-BdJScWMX.cjs → unpublish-page-BZQpTpU3.cjs} +1 -1
  74. package/dist/{unpublish-page-BvB1PGSz.js → unpublish-page-BomE76Wg.js} +1 -1
  75. package/dist/{web-preview-BI4jd0O7.cjs → web-preview-C5QTX7bS.cjs} +1 -1
  76. package/dist/{web-preview-CwVpkcwU.js → web-preview-jo8lnpEx.js} +1 -1
  77. package/package.json +1 -1
  78. package/dist/ai-panel-content-B2AgBWqo.cjs +0 -1
  79. package/dist/ai-panel-content-M1UnzG_f.js +0 -54
  80. package/dist/ai-panel-default-lang-CHOFEwmV.js +0 -313
  81. package/dist/ai-panel-default-lang-sy6vkQJh.cjs +0 -3
  82. package/dist/ai-panel-other-lang-BwjSDD3L.cjs +0 -1
  83. package/dist/ai-prompt-input-B_NRADBT.js +0 -988
  84. package/dist/ai-prompt-input-DcyVXcLG.cjs +0 -1
@@ -1,313 +0,0 @@
1
- import { jsxs as S, Fragment as F, jsx as m } from "react/jsx-runtime";
2
- import { C as P, a as W, b as O, R as $, c as V, d as q, T as j, M as K, e as _, f as z, h as G, S as U, i as J } from "./selected-block-display-DdW-DWF1.js";
3
- import { useAddBlock as Q, useReplaceBlock as X, useRemoveBlocks as Y, getBlocksFromHTML as L, useSelectedBlock as Z, useSelectedBlockIds as tt, useBlocksHtmlForAi as et } from "@chaibuilder/sdk";
4
- import { Bot as nt } from "lucide-react";
5
- import { useCallback as rt, lazy as st, Fragment as ot, Suspense as it } from "react";
6
- import { toast as at } from "sonner";
7
- const ct = () => {
8
- const { addPredefinedBlock: A } = Q(), x = X(), k = Y(), B = async (r, e) => {
9
- if (!e) return;
10
- const o = L(e);
11
- await A(o, r.parentId, r.position);
12
- }, v = async (r, e) => {
13
- if (!r.blockId || !e) return;
14
- const o = L(e);
15
- await x(r.blockId, o);
16
- }, y = async (r) => {
17
- !r.ids || r.ids.length === 0 || await k(r.ids);
18
- };
19
- let u = null;
20
- const N = (r, e) => {
21
- const o = document.getElementById("canvas-iframe");
22
- if (!o)
23
- return null;
24
- const a = o == null ? void 0 : o.contentDocument;
25
- if (!a)
26
- return null;
27
- a.querySelectorAll("[data-stream-canvas]").forEach((f) => f.remove());
28
- let n = null;
29
- if (r && r !== "undefined" && (n = a.querySelector(`[data-block-id="${r}"]`)), n || (n = a.body), !n)
30
- return null;
31
- if (u = a.createElement("div"), u.setAttribute("data-stream-canvas", "true"), e !== void 0 && e >= 0 && n.children) {
32
- const f = Math.min(e, n.children.length);
33
- f < n.children.length ? n.insertBefore(u, n.children[f]) : n.appendChild(u);
34
- } else
35
- n.appendChild(u);
36
- return u;
37
- }, C = (r) => {
38
- var n;
39
- const e = document.getElementById("canvas-iframe");
40
- if (!e)
41
- return null;
42
- const o = e == null ? void 0 : e.contentDocument;
43
- if (!o)
44
- return null;
45
- o.querySelectorAll("[data-stream-canvas]").forEach((f) => f.remove());
46
- const d = o.querySelector(`[data-block-id="${r}"]`);
47
- return d ? (u = o.createElement("div"), u.setAttribute("data-stream-canvas", "true"), (n = d.parentNode) == null || n.insertBefore(u, d.nextSibling), d.style.display = "none", u) : null;
48
- }, w = (r, e, o) => {
49
- const a = N(e, o);
50
- if (a) {
51
- a.innerHTML = r;
52
- const d = a.getBoundingClientRect(), n = document.getElementById("canvas-iframe"), f = n == null ? void 0 : n.contentWindow;
53
- f && (d.top >= 0 && d.bottom <= f.innerHeight || a.scrollIntoView({ behavior: "smooth", block: "nearest" }));
54
- }
55
- }, T = (r, e) => {
56
- const o = C(e);
57
- o && (o.innerHTML = r);
58
- }, E = (r) => {
59
- const e = r.match(/^--ACTION=(.+)--$/);
60
- if (!e) return null;
61
- let a = e[1].replace(/--/g, "").split("|");
62
- const n = { type: a[0] };
63
- return a.forEach((f) => {
64
- const t = f.trim();
65
- if (t.startsWith("PARENT=")) {
66
- const s = t.substring(7);
67
- n.parentId = s === "undefined" ? void 0 : s;
68
- } else t.startsWith("POS=") ? n.position = parseInt(t.substring(4)) : t.startsWith("ID=") ? n.blockId = t.substring(3) : t.startsWith("IDS=") && (n.ids = t.substring(4).split(",").map((s) => s.trim()));
69
- }), n;
70
- };
71
- return rt(
72
- async (r, e) => {
73
- const o = new TextDecoder();
74
- let a = "", d = "", n = !1, f = null;
75
- const t = {
76
- isInAction: !1,
77
- currentAction: null,
78
- htmlBuffer: "",
79
- isCapturingHtml: !1
80
- }, s = async (g) => {
81
- const i = g.trim();
82
- if (i === "--START--") {
83
- n = !0;
84
- return;
85
- }
86
- if (n) {
87
- if (i === "--END--") {
88
- t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await I(t.currentAction, t.htmlBuffer), u && (u.remove(), u = null);
89
- return;
90
- }
91
- if (i.startsWith("--THINKING=")) {
92
- const c = i.substring(11);
93
- e((l) => {
94
- const h = [...l], p = h[h.length - 1];
95
- if (p && p.role === "assistant" && p.isReasoning)
96
- p.content = c, p.isStreaming = !1;
97
- else {
98
- const M = {
99
- id: Date.now().toString(),
100
- role: "assistant",
101
- content: c,
102
- isReasoning: !0,
103
- isStreaming: !1
104
- };
105
- h.push(M);
106
- }
107
- return h;
108
- });
109
- return;
110
- }
111
- if (i.startsWith("--TASK=")) {
112
- const c = i.substring(7), l = `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, h = {
113
- id: l,
114
- role: "assistant",
115
- content: c.replace(/--$/, ""),
116
- isTask: !0,
117
- isTaskLoading: !0,
118
- isTaskCompleted: !1
119
- };
120
- f = l, e((p) => [...p, h]);
121
- return;
122
- }
123
- if (i.startsWith("--MSG=")) {
124
- const c = i.substring(6), l = {
125
- id: Date.now().toString(),
126
- role: "assistant",
127
- content: c.replace(/--$/g, ""),
128
- isReasoning: !1,
129
- isStreaming: !1
130
- };
131
- e((h) => [...h, l]);
132
- return;
133
- }
134
- if (i.startsWith("--ACTION=")) {
135
- t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await I(t.currentAction, t.htmlBuffer), t.currentAction = E(i), t.htmlBuffer = "", t.isInAction = !0;
136
- return;
137
- }
138
- if (i === "--ENDACTION--") {
139
- t.currentAction && (t.htmlBuffer || t.currentAction.type === "REMOVE") && await I(t.currentAction, t.htmlBuffer), f && (e((c) => c.map((l) => l.isTask ? { ...l, isTaskCompleted: !0 } : l)), f = null), t.currentAction = null, t.htmlBuffer = "", t.isInAction = !1;
140
- return;
141
- }
142
- if (i === "--HTML--") {
143
- t.isCapturingHtml = !0;
144
- return;
145
- }
146
- if (i === "--ENDHTML--") {
147
- t.isCapturingHtml = !1;
148
- return;
149
- }
150
- if (i.startsWith("--HTML--") && i.includes("--ENDHTML--")) {
151
- const c = i.match(/^--HTML--(.+?)--ENDHTML--$/);
152
- if (c && t.currentAction) {
153
- const l = c[1];
154
- t.htmlBuffer += l, t.currentAction.type === "ADD" ? w(t.htmlBuffer, t.currentAction.parentId, t.currentAction.position) : t.currentAction.type === "EDIT" && t.currentAction.blockId && T(t.htmlBuffer, t.currentAction.blockId);
155
- }
156
- return;
157
- }
158
- t.isCapturingHtml && t.currentAction && (t.htmlBuffer += g + `
159
- `, t.currentAction.type === "ADD" ? w(t.htmlBuffer, t.currentAction.parentId, t.currentAction.position) : t.currentAction.type === "EDIT" && t.currentAction.blockId && T(t.htmlBuffer, t.currentAction.blockId));
160
- }
161
- }, I = async (g, i) => {
162
- try {
163
- switch (g.type) {
164
- case "ADD":
165
- await B(g, i);
166
- break;
167
- case "EDIT":
168
- await v(g, i);
169
- break;
170
- case "REMOVE":
171
- await y(g);
172
- break;
173
- }
174
- e((c) => c.filter((l) => !l.isTask));
175
- } catch (c) {
176
- console.log(c);
177
- }
178
- };
179
- try {
180
- for (; ; ) {
181
- const { done: g, value: i } = await r.read();
182
- if (g) break;
183
- const c = o.decode(i, { stream: !0 });
184
- a += c, d += c;
185
- const l = d.split(`
186
- `);
187
- d = l.pop() || "";
188
- for (const h of l)
189
- await s(h);
190
- }
191
- d && await s(d);
192
- } catch (g) {
193
- console.log(g);
194
- }
195
- },
196
- [k]
197
- );
198
- }, lt = st(() => import("./ai-prompt-input-B_NRADBT.js")), pt = ({
199
- t: A,
200
- fetch: x,
201
- input: k,
202
- messages: B,
203
- setInput: v,
204
- isLoading: y,
205
- setMessages: u,
206
- handleStop: N,
207
- setIsLoading: C,
208
- currentBlock: w,
209
- fallbackLang: T,
210
- setCurrentBlock: E,
211
- setAbortController: r,
212
- selectedModel: e = "google/gemini-2.5-pro",
213
- onModelChange: o
214
- }) => {
215
- const a = Z(), [, d] = tt(), n = et(), f = ct(), t = async (s, I, g, i) => {
216
- var M;
217
- if (!s || y) return;
218
- E(a);
219
- const c = n(a ? { blockId: a._id, additionalCoreBlocks: ["Icon"] } : { additionalCoreBlocks: ["Icon"] });
220
- if (a && !c) {
221
- at.error(A("Something went wrong. Please try again."));
222
- return;
223
- }
224
- const l = {
225
- id: Date.now().toString(),
226
- role: "user",
227
- content: J({
228
- language: T,
229
- userInput: I || s,
230
- currentHtml: c
231
- }),
232
- userMessage: s
233
- }, h = {
234
- id: (Date.now() + 1).toString(),
235
- role: "assistant",
236
- content: "",
237
- isReasoning: !0,
238
- isStreaming: !0
239
- };
240
- u((b) => [...b, l, h]), C(!0);
241
- const p = new AbortController();
242
- r(p);
243
- try {
244
- const b = {
245
- messages: [l].map((H) => ({
246
- role: H.role,
247
- content: H.content
248
- })),
249
- model: i || e
250
- };
251
- g && (b.image = g);
252
- const D = await x({ body: { action: "ASK_AI", data: b }, streamResponse: !0 });
253
- if (!D.ok)
254
- throw new Error(A("Failed to get AI response"));
255
- const R = (M = D.body) == null ? void 0 : M.getReader();
256
- if (!R) throw new Error(A("Response body is not readable"));
257
- await f(R, u);
258
- } catch (b) {
259
- if (b.name !== "AbortError") {
260
- const D = {
261
- id: (Date.now() + 1).toString(),
262
- role: "assistant",
263
- content: A("Sorry, I encountered an error. Please try again.")
264
- };
265
- u((R) => [...R, D]);
266
- }
267
- } finally {
268
- v(""), C(!1), E(null), r(null);
269
- }
270
- };
271
- return /* @__PURE__ */ S(F, { children: [
272
- /* @__PURE__ */ S(P, { className: "no-scrollbar", children: [
273
- /* @__PURE__ */ S(W, { className: "gap-2 px-0", children: [
274
- B.length === 0 && /* @__PURE__ */ m(
275
- O,
276
- {
277
- icon: /* @__PURE__ */ m(nt, { size: 48, className: "text-gray-300" }),
278
- title: "Start a conversation",
279
- description: A("Start a conversation with the AI assistant to add/edit current page")
280
- }
281
- ),
282
- B.map(
283
- (s) => s.role !== "system" && /* @__PURE__ */ m(ot, { children: s.isReasoning ? /* @__PURE__ */ S($, { isStreaming: s.isStreaming, defaultOpen: !0, children: [
284
- /* @__PURE__ */ m(V, { className: "text-xs [&_p]:text-muted-foreground" }),
285
- /* @__PURE__ */ m(q, { className: "p-0 text-xs", children: s.content })
286
- ] }) : s.isTask && !s.isTaskCompleted ? /* @__PURE__ */ m(j, { content: s.content, isLoading: s.isTaskLoading }) : /* @__PURE__ */ m(K, { from: s.role, children: /* @__PURE__ */ m(_, { className: "p-0", children: s.role === "assistant" ? /* @__PURE__ */ m(z, { className: "p-0 text-xs", children: s.content }) : /* @__PURE__ */ m("div", { className: "p-0 text-xs", children: s.userMessage || s.content }) }) }) }, s.id)
287
- )
288
- ] }),
289
- /* @__PURE__ */ m(G, {})
290
- ] }),
291
- /* @__PURE__ */ S("div", { className: "border-gray-200 pb-2", children: [
292
- /* @__PURE__ */ m(U, { onRemove: () => d([]), isLoading: y }),
293
- /* @__PURE__ */ m(it, { fallback: /* @__PURE__ */ m("div", { children: "Loading..." }), children: /* @__PURE__ */ m(
294
- lt,
295
- {
296
- input: k,
297
- setInput: v,
298
- onSend: t,
299
- onStop: N,
300
- isLoading: y,
301
- selectedLang: "",
302
- currentBlock: a || w,
303
- disabled: (k == null ? void 0 : k.length) === 0,
304
- selectedModel: e,
305
- onModelChange: o
306
- }
307
- ) })
308
- ] })
309
- ] });
310
- };
311
- export {
312
- pt as default
313
- };
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),h=require("./selected-block-display-BEbuJn0l.cjs"),k=require("@chaibuilder/sdk"),P=require("lucide-react"),j=require("react"),q=require("sonner"),F=()=>{const{addPredefinedBlock:b}=k.useAddBlock(),H=k.useReplaceBlock(),y=k.useRemoveBlocks(),v=async(r,e)=>{if(!e)return;const o=k.getBlocksFromHTML(e);await b(o,r.parentId,r.position)},x=async(r,e)=>{if(!r.blockId||!e)return;const o=k.getBlocksFromHTML(e);await H(r.blockId,o)},I=async r=>{!r.ids||r.ids.length===0||await y(r.ids)};let d=null;const N=(r,e)=>{const o=document.getElementById("canvas-iframe");if(!o)return null;const a=o==null?void 0:o.contentDocument;if(!a)return null;a.querySelectorAll("[data-stream-canvas]").forEach(m=>m.remove());let n=null;if(r&&r!=="undefined"&&(n=a.querySelector(`[data-block-id="${r}"]`)),n||(n=a.body),!n)return null;if(d=a.createElement("div"),d.setAttribute("data-stream-canvas","true"),e!==void 0&&e>=0&&n.children){const m=Math.min(e,n.children.length);m<n.children.length?n.insertBefore(d,n.children[m]):n.appendChild(d)}else n.appendChild(d);return d},T=r=>{var n;const e=document.getElementById("canvas-iframe");if(!e)return null;const o=e==null?void 0:e.contentDocument;if(!o)return null;o.querySelectorAll("[data-stream-canvas]").forEach(m=>m.remove());const f=o.querySelector(`[data-block-id="${r}"]`);return f?(d=o.createElement("div"),d.setAttribute("data-stream-canvas","true"),(n=f.parentNode)==null||n.insertBefore(d,f.nextSibling),f.style.display="none",d):null},w=(r,e,o)=>{const a=N(e,o);if(a){a.innerHTML=r;const f=a.getBoundingClientRect(),n=document.getElementById("canvas-iframe"),m=n==null?void 0:n.contentWindow;m&&(f.top>=0&&f.bottom<=m.innerHeight||a.scrollIntoView({behavior:"smooth",block:"nearest"}))}},C=(r,e)=>{const o=T(e);o&&(o.innerHTML=r)},E=r=>{const e=r.match(/^--ACTION=(.+)--$/);if(!e)return null;let a=e[1].replace(/--/g,"").split("|");const n={type:a[0]};return a.forEach(m=>{const t=m.trim();if(t.startsWith("PARENT=")){const s=t.substring(7);n.parentId=s==="undefined"?void 0:s}else t.startsWith("POS=")?n.position=parseInt(t.substring(4)):t.startsWith("ID=")?n.blockId=t.substring(3):t.startsWith("IDS=")&&(n.ids=t.substring(4).split(",").map(s=>s.trim()))}),n};return j.useCallback(async(r,e)=>{const o=new TextDecoder;let a="",f="",n=!1,m=null;const t={isInAction:!1,currentAction:null,htmlBuffer:"",isCapturingHtml:!1},s=async g=>{const i=g.trim();if(i==="--START--"){n=!0;return}if(n){if(i==="--END--"){t.currentAction&&(t.htmlBuffer||t.currentAction.type==="REMOVE")&&await S(t.currentAction,t.htmlBuffer),d&&(d.remove(),d=null);return}if(i.startsWith("--THINKING=")){const c=i.substring(11);e(u=>{const p=[...u],A=p[p.length-1];if(A&&A.role==="assistant"&&A.isReasoning)A.content=c,A.isStreaming=!1;else{const M={id:Date.now().toString(),role:"assistant",content:c,isReasoning:!0,isStreaming:!1};p.push(M)}return p});return}if(i.startsWith("--TASK=")){const c=i.substring(7),u=`task-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,p={id:u,role:"assistant",content:c.replace(/--$/,""),isTask:!0,isTaskLoading:!0,isTaskCompleted:!1};m=u,e(A=>[...A,p]);return}if(i.startsWith("--MSG=")){const c=i.substring(6),u={id:Date.now().toString(),role:"assistant",content:c.replace(/--$/g,""),isReasoning:!1,isStreaming:!1};e(p=>[...p,u]);return}if(i.startsWith("--ACTION=")){t.currentAction&&(t.htmlBuffer||t.currentAction.type==="REMOVE")&&await S(t.currentAction,t.htmlBuffer),t.currentAction=E(i),t.htmlBuffer="",t.isInAction=!0;return}if(i==="--ENDACTION--"){t.currentAction&&(t.htmlBuffer||t.currentAction.type==="REMOVE")&&await S(t.currentAction,t.htmlBuffer),m&&(e(c=>c.map(u=>u.isTask?{...u,isTaskCompleted:!0}:u)),m=null),t.currentAction=null,t.htmlBuffer="",t.isInAction=!1;return}if(i==="--HTML--"){t.isCapturingHtml=!0;return}if(i==="--ENDHTML--"){t.isCapturingHtml=!1;return}if(i.startsWith("--HTML--")&&i.includes("--ENDHTML--")){const c=i.match(/^--HTML--(.+?)--ENDHTML--$/);if(c&&t.currentAction){const u=c[1];t.htmlBuffer+=u,t.currentAction.type==="ADD"?w(t.htmlBuffer,t.currentAction.parentId,t.currentAction.position):t.currentAction.type==="EDIT"&&t.currentAction.blockId&&C(t.htmlBuffer,t.currentAction.blockId)}return}t.isCapturingHtml&&t.currentAction&&(t.htmlBuffer+=g+`
2
- `,t.currentAction.type==="ADD"?w(t.htmlBuffer,t.currentAction.parentId,t.currentAction.position):t.currentAction.type==="EDIT"&&t.currentAction.blockId&&C(t.htmlBuffer,t.currentAction.blockId))}},S=async(g,i)=>{try{switch(g.type){case"ADD":await v(g,i);break;case"EDIT":await x(g,i);break;case"REMOVE":await I(g);break}e(c=>c.filter(u=>!u.isTask))}catch(c){console.log(c)}};try{for(;;){const{done:g,value:i}=await r.read();if(g)break;const c=o.decode(i,{stream:!0});a+=c,f+=c;const u=f.split(`
3
- `);f=u.pop()||"";for(const p of u)await s(p)}f&&await s(f)}catch(g){console.log(g)}},[y])},O=j.lazy(()=>Promise.resolve().then(()=>require("./ai-prompt-input-DcyVXcLG.cjs"))),W=({t:b,fetch:H,input:y,messages:v,setInput:x,isLoading:I,setMessages:d,handleStop:N,setIsLoading:T,currentBlock:w,fallbackLang:C,setCurrentBlock:E,setAbortController:r,selectedModel:e="google/gemini-2.5-pro",onModelChange:o})=>{const a=k.useSelectedBlock(),[,f]=k.useSelectedBlockIds(),n=k.useBlocksHtmlForAi(),m=F(),t=async(s,S,g,i)=>{var M;if(!s||I)return;E(a);const c=n(a?{blockId:a._id,additionalCoreBlocks:["Icon"]}:{additionalCoreBlocks:["Icon"]});if(a&&!c){q.toast.error(b("Something went wrong. Please try again."));return}const u={id:Date.now().toString(),role:"user",content:h.getUserPrompt({language:C,userInput:S||s,currentHtml:c}),userMessage:s},p={id:(Date.now()+1).toString(),role:"assistant",content:"",isReasoning:!0,isStreaming:!0};d(B=>[...B,u,p]),T(!0);const A=new AbortController;r(A);try{const B={messages:[u].map(L=>({role:L.role,content:L.content})),model:i||e};g&&(B.image=g);const D=await H({body:{action:"ASK_AI",data:B},streamResponse:!0});if(!D.ok)throw new Error(b("Failed to get AI response"));const R=(M=D.body)==null?void 0:M.getReader();if(!R)throw new Error(b("Response body is not readable"));await m(R,d)}catch(B){if(B.name!=="AbortError"){const D={id:(Date.now()+1).toString(),role:"assistant",content:b("Sorry, I encountered an error. Please try again.")};d(R=>[...R,D])}}finally{x(""),T(!1),E(null),r(null)}};return l.jsxs(l.Fragment,{children:[l.jsxs(h.Conversation,{className:"no-scrollbar",children:[l.jsxs(h.ConversationContent,{className:"gap-2 px-0",children:[v.length===0&&l.jsx(h.ConversationEmptyState,{icon:l.jsx(P.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")}),v.map(s=>s.role!=="system"&&l.jsx(j.Fragment,{children:s.isReasoning?l.jsxs(h.Reasoning,{isStreaming:s.isStreaming,defaultOpen:!0,children:[l.jsx(h.ReasoningTrigger,{className:"text-xs [&_p]:text-muted-foreground"}),l.jsx(h.ReasoningContent,{className:"p-0 text-xs",children:s.content})]}):s.isTask&&!s.isTaskCompleted?l.jsx(h.TaskMessage,{content:s.content,isLoading:s.isTaskLoading}):l.jsx(h.Message,{from:s.role,children:l.jsx(h.MessageContent,{className:"p-0",children:s.role==="assistant"?l.jsx(h.MessageResponse,{className:"p-0 text-xs",children:s.content}):l.jsx("div",{className:"p-0 text-xs",children:s.userMessage||s.content})})})},s.id))]}),l.jsx(h.ConversationScrollButton,{})]}),l.jsxs("div",{className:"border-gray-200 pb-2",children:[l.jsx(h.SelectedBlockDisplay,{onRemove:()=>f([]),isLoading:I}),l.jsx(j.Suspense,{fallback:l.jsx("div",{children:"Loading..."}),children:l.jsx(O,{input:y,setInput:x,onSend:t,onStop:N,isLoading:I,selectedLang:"",currentBlock:a||w,disabled:(y==null?void 0:y.length)===0,selectedModel:e,onModelChange:o})})]})]})};exports.default=W;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("./selected-block-display-BEbuJn0l.cjs"),a=require("@chaibuilder/sdk"),G=require("lucide-react"),o=require("react"),H=o.lazy(()=>Promise.resolve().then(()=>require("./ai-translation-prompt-Ip7w2_Ey.cjs"))),Q=o.lazy(()=>Promise.resolve().then(()=>require("./ai-prompt-input-DcyVXcLG.cjs"))),X=({fetch:v,input:c,messages:u,setInput:j,isLoading:i,handleStop:A,setMessages:y,setIsLoading:h,selectedLang:l,currentBlock:P,fallbackLang:q,abortController:x,setAbortController:E,setCurrentBlock:k,selectedModel:S="google/gemini-2.5-pro",onModelChange:M})=>{const{t:n}=a.useTranslation(),O=o.useRef(null),d=a.useSelectedBlock(),[,C]=a.useSelectedBlockIds(),T=a.useI18nBlocks(),D=a.useStreamMultipleBlocksProps(),I=()=>{var t;(t=O.current)==null||t.scrollIntoView({behavior:"smooth"})};o.useEffect(()=>{I()},[u,i]);const f=async(t,m,F)=>{var b;d&&k(d);const p=(t==null?void 0:t.toLowerCase())==="translate",R={id:Date.now().toString(),role:"user",content:s.getTranslationUserPrompt({fallbackLang:q,userInput:m||t,language:l,blocks:p?T():T(l)}),userMessage:m||t||n("Translate the content")},_={id:(Date.now()+1).toString(),role:"assistant",content:"Thinking...",isReasoning:!0,isStreaming:!0};h(!0);const z=new AbortController;E(z),y(w=>[...w,R,_]),h(!0);try{const N=await v({body:{action:"ASK_AI",data:{messages:[R],initiator:p?"TRANSLATE_CONTENT":"UPDATE_CONTENT",model:F||S}},streamResponse:!0});if(!N.ok)throw new Error(n("Failed to get AI response"));const B=(b=N.body)==null?void 0:b.getReader(),U=new TextDecoder;let r="";if(!B)throw new Error(n("Response body is not readable"));for(;;){const{done:K,value:V}=await B.read();if(K)break;const W=U.decode(V,{stream:!0});r+=W,y(g=>(g[g.length-1].content=r,[...g]))}const J=JSON.parse(r==null?void 0:r.replace("```json","").replace("```",""));D(J)}catch{x==null||x.abort()}finally{h(!1),j(""),k(null)}};return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"py-2",children:e.jsx(o.Suspense,{fallback:e.jsx("div",{children:n("Loading...")}),children:e.jsx(H,{isLoading:i,selectedBlock:d,selectedLang:l,onClick:f})})}),e.jsx(s.Conversation,{children:e.jsxs(s.ConversationContent,{className:"gap-4 px-0",children:[u.length===0&&e.jsx(s.ConversationEmptyState,{icon:e.jsx(G.Bot,{size:48,className:"text-gray-300"}),title:n("Start a conversation with the AI assistant to translate/edit your content"),description:n("Only content can be edited in secondary languages. To edit layout, styles and more, switch to the default language.")}),u.map(t=>t.role!=="system"&&e.jsx(o.Fragment,{children:t.isReasoning?e.jsxs(s.Reasoning,{isStreaming:t.isStreaming,defaultOpen:!0,children:[e.jsx(s.ReasoningTrigger,{className:"text-xs [&_p]:text-muted-foreground"}),e.jsx(s.ReasoningContent,{className:"p-0 text-xs",children:t.content})]}):t.isTask?e.jsx(s.TaskMessage,{content:t.content,isLoading:t.isTaskLoading}):e.jsx(s.Message,{from:t.role,children:e.jsx(s.MessageContent,{className:"p-0",children:t.role==="assistant"?e.jsx(s.MessageResponse,{className:"p-0 text-xs",children:t.content}):e.jsx("div",{className:"p-0 text-xs",children:t.userMessage||t.content})})})},t.id))]})}),e.jsxs("div",{className:"border-gray-200 pb-2",children:[e.jsx(s.SelectedBlockDisplay,{onRemove:()=>C([]),isLoading:i}),e.jsx(o.Suspense,{fallback:e.jsx("div",{children:n("Loading...")}),children:e.jsx(Q,{input:c,setInput:j,onSend:f,onStop:A,isLoading:i,selectedLang:l,currentBlock:d||P,disabled:(c==null?void 0:c.length)===0,selectedModel:S,onModelChange:M})})]})]})};exports.default=X;