@chaibuilder/sdk 4.0.0-beta.44 → 4.0.0-beta.46

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 (108) hide show
  1. package/dist/{2SSKDMRQ-BrCeJE2w.js → 2SSKDMRQ-B6pWs8Zk.js} +2 -2
  2. package/dist/{2SSKDMRQ-BKWkM_6d.cjs → 2SSKDMRQ-B7Va8HeK.cjs} +1 -1
  3. package/dist/{AP7HFJJL-CskLuLc8.js → AP7HFJJL-CNIRZpP-.js} +1 -1
  4. package/dist/{AP7HFJJL-vt0XlZqG.cjs → AP7HFJJL-Xv13XYXE.cjs} +1 -1
  5. package/dist/{IconPicker-BJ6a_dl-.js → IconPicker-CGtjTiWr.js} +1 -1
  6. package/dist/{WDYDFRGG-BN61b01J.js → WDYDFRGG-5Lwxhw_-.js} +2 -2
  7. package/dist/{WDYDFRGG-Nw-WmjVB.cjs → WDYDFRGG-zZ8jN8rF.cjs} +1 -1
  8. package/dist/{actions-registery-CMKfEXxX.js → actions-registery-B1VeX52Y.js} +1565 -1529
  9. package/dist/{actions-registery-CqhNZFV3.cjs → actions-registery-BQ31lpix.cjs} +19 -19
  10. package/dist/actions.cjs +1 -1
  11. package/dist/actions.d.ts +132 -0
  12. package/dist/actions.js +7 -6
  13. package/dist/{active-in-another-tab-DHTYNRjQ.cjs → active-in-another-tab-C8FXtXk5.cjs} +1 -1
  14. package/dist/{active-in-another-tab-CZHN4gdI.js → active-in-another-tab-HtM97aRN.js} +4 -4
  15. package/dist/{add-new-language-page-DUm56cDk.cjs → add-new-language-page-gbvPI58M.cjs} +1 -1
  16. package/dist/{add-new-language-page-J0FxQGri.js → add-new-language-page-x88_n8EW.js} +3 -3
  17. package/dist/{add-new-page-B4dH-sG6.js → add-new-page-BMSePgKl.js} +2 -2
  18. package/dist/{add-new-page-D0H-HGrE.cjs → add-new-page-CPB4yhqv.cjs} +1 -1
  19. package/dist/{ai-panel-default-lang-BHzxr8XE.cjs → ai-panel-default-lang-DKGh1pbz.cjs} +2 -2
  20. package/dist/{ai-panel-default-lang-DrKTSHgh.js → ai-panel-default-lang-Dav6FRUY.js} +10 -10
  21. package/dist/{ai-panel-other-lang-CMs97ftp.js → ai-panel-other-lang-CdFx2x23.js} +14 -14
  22. package/dist/{ai-panel-other-lang-B6cRPiU9.cjs → ai-panel-other-lang-DdDn2I8h.cjs} +1 -1
  23. package/dist/ai-prompt-input-B8SFfk6N.cjs +1 -0
  24. package/dist/ai-prompt-input-bleYNRnH.js +650 -0
  25. package/dist/{ai-translation-prompt-Ddum5Ge5.cjs → ai-translation-prompt-DGrNA2Od.cjs} +1 -1
  26. package/dist/{ai-translation-prompt-BfJry6ZR.js → ai-translation-prompt-DvHdOZ6t.js} +1 -1
  27. package/dist/{change-password-modal-C4ngPnKd.js → change-password-modal-C9afEHLW.js} +4 -4
  28. package/dist/{change-password-modal-UTKwQzI4.cjs → change-password-modal-bce5bF3K.cjs} +1 -1
  29. package/dist/{code-editor-LNL_FEZ0.js → code-editor-BfGHceIq.js} +1 -1
  30. package/dist/{continue-editing-in-this-client-rjJy4-cq.cjs → continue-editing-in-this-client-4bvChAL-.cjs} +1 -1
  31. package/dist/{continue-editing-in-this-client-CuBlXJb6.js → continue-editing-in-this-client-BFptv8tA.js} +2 -2
  32. package/dist/core.js +18 -18
  33. package/dist/{css-import-modal-ChRsUOVa.js → css-import-modal-CEQccCmc.js} +1 -1
  34. package/dist/{delete-page-BegGYX7_.js → delete-page-8h4dNP7d.js} +2 -2
  35. package/dist/{delete-page-BaJ0oesv.cjs → delete-page-BOxoMgyl.cjs} +1 -1
  36. package/dist/{design-token-usage-Bgphgz_u.js → design-token-usage-CVPBTF21.js} +8 -8
  37. package/dist/{digital-asset-manager-BPy9RYlx.js → digital-asset-manager-83B0Y6L-.js} +3 -3
  38. package/dist/{digital-asset-manager-uzOuwVMR.cjs → digital-asset-manager-JtBK07Ob.cjs} +1 -1
  39. package/dist/{duplicate-page-n6osptll.js → duplicate-page-DIa59iDe.js} +12 -12
  40. package/dist/{duplicate-page-BofwxP4t.cjs → duplicate-page-DVqC24Rd.cjs} +1 -1
  41. package/dist/{dynamic-page-selector-6EWhAHX0.js → dynamic-page-selector-C9vYslOg.js} +12 -12
  42. package/dist/{dynamic-page-selector-CVI1LwdD.cjs → dynamic-page-selector-YRCRqWlz.cjs} +1 -1
  43. package/dist/{image-editor-D1euq0rl.js → image-editor-CzxSXo-u.js} +1 -1
  44. package/dist/index-DXBHjFwY.cjs +5 -0
  45. package/dist/{index-fxuo68Am.js → index-DlTEPwjW.js} +1344 -1289
  46. package/dist/{index-fThd1uce.js → index-RwAuF_BE.js} +39 -39
  47. package/dist/{json-diff-viewer-B2Q7bs-U.cjs → json-diff-viewer-Bpsk0toO.cjs} +1 -1
  48. package/dist/{json-diff-viewer-C0kg3Rss.js → json-diff-viewer-is2P3TOV.js} +6 -6
  49. package/dist/{lang-panel-MB00AgoJ.cjs → lang-panel-BI5OFsBY.cjs} +1 -1
  50. package/dist/{lang-panel-DgDlmKaN.js → lang-panel-DwiCJRs9.js} +22 -22
  51. package/dist/{manage-design-tokens-nTmzLQyq.js → manage-design-tokens-D2Oz-jVp.js} +2 -2
  52. package/dist/{manage-design-tokens-modal-ayqKkRLc.js → manage-design-tokens-modal-ZR8PuhWC.js} +2 -2
  53. package/dist/{mark-as-template-BARMivkY.js → mark-as-template-C0Z2P_UF.js} +2 -2
  54. package/dist/{mark-as-template-CProQdMy.cjs → mark-as-template-muKJE1gk.cjs} +1 -1
  55. package/dist/{models-D95ZYr_x.js → models-BCu-p_QK.js} +4 -4
  56. package/dist/{models-5gOsRC56.cjs → models-D0RH2u4C.cjs} +1 -1
  57. package/dist/{nested-path-selector-content-DxW18z33.js → nested-path-selector-content-Ct80kFX-.js} +1 -1
  58. package/dist/{no-language-page-content-CB_UK8pU.js → no-language-page-content-BekrmPc5.js} +4 -4
  59. package/dist/{no-language-page-content-C2Q-PlyR.cjs → no-language-page-content-zn3891M8.cjs} +1 -1
  60. package/dist/{no-language-page-dialog-DsZDAaRd.js → no-language-page-dialog-dHlAqLlU.js} +2 -2
  61. package/dist/{no-language-page-dialog-B7SNu92-.cjs → no-language-page-dialog-wEXIlBuQ.cjs} +1 -1
  62. package/dist/{page-creator-CulX1J10.js → page-creator-6L7ehzhL.js} +4 -4
  63. package/dist/page-creator-CN2phGn5.cjs +1 -0
  64. package/dist/{page-lock-DbH7spVl.js → page-lock-C--D8qD7.js} +2 -2
  65. package/dist/{page-lock-BQr6vqz-.cjs → page-lock-DllloCJE.cjs} +1 -1
  66. package/dist/{page-locked-dialog-BgaqVH5J.js → page-locked-dialog-BD8LHbdC.js} +15 -15
  67. package/dist/{page-locked-dialog-B3ZmWOt_.cjs → page-locked-dialog-DzB8p0wl.cjs} +1 -1
  68. package/dist/{page-manager-new-ydVnl9s6.cjs → page-manager-new-DyjhsvPx.cjs} +1 -1
  69. package/dist/{page-manager-new-DNBm5H5A.js → page-manager-new-uFcGaZZY.js} +29 -29
  70. package/dist/{page-manager-search-and-filter-jYP_ub36.js → page-manager-search-and-filter-DK883UmG.js} +26 -26
  71. package/dist/{page-manager-search-and-filter-BhBT7qY0.cjs → page-manager-search-and-filter-zfR5i_GU.cjs} +1 -1
  72. package/dist/{page-revisions-content-ZOroDtgV.cjs → page-revisions-content-Bi2ehMnj.cjs} +1 -1
  73. package/dist/{page-revisions-content-YGYK8pv9.js → page-revisions-content-D3rIJj9X.js} +24 -24
  74. package/dist/pages.cjs +1 -1
  75. package/dist/pages.d.ts +2 -0
  76. package/dist/pages.js +24 -23
  77. package/dist/{publish-pages-content-Du3LgWM2.cjs → publish-pages-content-BQUHNRCX.cjs} +1 -1
  78. package/dist/{publish-pages-content-BgdFWGKT.js → publish-pages-content-ByPf4lvE.js} +23 -23
  79. package/dist/{rte-widget-modal-B7wA8UGi.js → rte-widget-modal-Tj_pS3ql.js} +1 -1
  80. package/dist/{save-to-lib-hHRxVrjy.js → save-to-lib-CcUqS0s1.js} +62 -62
  81. package/dist/{save-to-lib-Dxisxuo9.cjs → save-to-lib-Cyeqcelv.cjs} +1 -1
  82. package/dist/{selected-block-display-5hDghITH.cjs → selected-block-display-Benbb_OW.cjs} +1 -1
  83. package/dist/{selected-block-display-BNX9ZuNH.js → selected-block-display-C6LxDm0H.js} +11 -11
  84. package/dist/{seo-panel-CBEV-Nds.js → seo-panel-1U9Q0Ato.js} +25 -25
  85. package/dist/{seo-panel-C1DEkfcC.cjs → seo-panel-CCuvQpwV.cjs} +1 -1
  86. package/dist/{shared-json-ld-4o0YbV25.js → shared-json-ld-DbzUITto.js} +46 -46
  87. package/dist/{shared-json-ld-DuXm_88W.cjs → shared-json-ld-bj77fq_b.cjs} +1 -1
  88. package/dist/{slug-input-DE-a4dMb.js → slug-input-P-CLfUrw.js} +1 -1
  89. package/dist/supabase-actions.cjs +1 -1
  90. package/dist/supabase-actions.d.ts +4 -7
  91. package/dist/supabase-actions.js +1 -1
  92. package/dist/{take-over-request-WL-btbiZ.js → take-over-request-Bwj_2nPR.js} +5 -5
  93. package/dist/{take-over-request-DR4RC8TT.cjs → take-over-request-R3HRgShm.cjs} +1 -1
  94. package/dist/{translation-warning-modal-Cef9OsyI.js → translation-warning-modal-BdkToZwn.js} +1 -1
  95. package/dist/{unmark-as-template-Dexn_9W7.cjs → unmark-as-template-BG882c_S.cjs} +1 -1
  96. package/dist/{unmark-as-template-D-5cQ61Q.js → unmark-as-template-DHDMooLZ.js} +2 -2
  97. package/dist/{unpublish-page-C-7RnGgj.js → unpublish-page-C4e_gIX8.js} +2 -2
  98. package/dist/{unpublish-page-C14PYuLT.cjs → unpublish-page-DudJ1znF.cjs} +1 -1
  99. package/dist/{unpublished-partials-modal-O0E8HViJ.js → unpublished-partials-modal-p_0N6V23.js} +1 -1
  100. package/dist/{web-preview-DOJ6E273.js → web-preview-BA08d7DN.js} +1 -1
  101. package/dist/{web-preview-CgKfKkdH.cjs → web-preview-MG0HZxgA.cjs} +1 -1
  102. package/package.json +1 -1
  103. package/dist/ai-panel-content-BV5Hzsso.js +0 -62
  104. package/dist/ai-panel-content-D0ugQDEu.cjs +0 -1
  105. package/dist/ai-prompt-input-MPIh7805.cjs +0 -1
  106. package/dist/ai-prompt-input-__vuJNRC.js +0 -652
  107. package/dist/index-Dh-fEHei.cjs +0 -5
  108. package/dist/page-creator-CnyQu1Te.cjs +0 -1
@@ -1,652 +0,0 @@
1
- import { jsx as e, jsxs as w, Fragment as ie } from "react/jsx-runtime";
2
- import { E as N, B as _ } from "./register-chai-top-bar-D6GjnauV.js";
3
- import { T as le, aB as ce, r as ue, s as de, t as pe, v as me, aC as fe, aD as he, D as ge, aE as ve, e as be, g as xe, C as we, i as Ne, j as Ie, l as ye, m as Se } from "./index-fThd1uce.js";
4
- import { cva as Y } from "class-variance-authority";
5
- import { PaperclipIcon as ke, XIcon as J, PlusIcon as De, ImageIcon as ze, MicIcon as Pe, CornerDownLeftIcon as Te, Loader2Icon as Ae, SquareIcon as Ce, Cpu as Le, Paperclip as Re, GlobeIcon as Me, Square as je, Send as Ue } from "lucide-react";
6
- import { nanoid as Oe } from "nanoid";
7
- import { useContext as V, useRef as M, useEffect as A, useState as P, useCallback as F, useMemo as Fe, createContext as W, Fragment as Ge, startTransition as Be, Children as Ee } from "react";
8
- import { useTranslation as _e } from "react-i18next";
9
- import { a as Ve, g as E, A as We } from "./models-D95ZYr_x.js";
10
- function He({ className: t, ...n }) {
11
- return /* @__PURE__ */ e(
12
- "div",
13
- {
14
- "data-slot": "input-group",
15
- role: "group",
16
- className: N(
17
- "group/input-group shadow-xs relative flex w-full items-center rounded-md border border-input outline-none transition-[color,box-shadow] dark:bg-input/30",
18
- "h-9 has-[>textarea]:h-auto",
19
- // Variants based on alignment.
20
- "has-[>[data-align=inline-start]]:[&>input]:pl-2",
21
- "has-[>[data-align=inline-end]]:[&>input]:pr-2",
22
- "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
23
- "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
24
- // Focus state.
25
- "has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot=input-group-control]:focus-visible]:ring-ring",
26
- // Error state.
27
- "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
28
- t
29
- ),
30
- ...n
31
- }
32
- );
33
- }
34
- const qe = Y(
35
- "text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
36
- {
37
- variants: {
38
- align: {
39
- "inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
40
- "inline-end": "order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]",
41
- "block-start": "[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5",
42
- "block-end": "[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5"
43
- }
44
- },
45
- defaultVariants: {
46
- align: "inline-start"
47
- }
48
- }
49
- );
50
- function Q({
51
- className: t,
52
- align: n = "inline-start",
53
- ...o
54
- }) {
55
- return /* @__PURE__ */ e(
56
- "div",
57
- {
58
- role: "group",
59
- "data-slot": "input-group-addon",
60
- "data-align": n,
61
- className: N(qe({ align: n }), t),
62
- onClick: (l) => {
63
- var i, p;
64
- l.target.closest("button") || (p = (i = l.currentTarget.parentElement) == null ? void 0 : i.querySelector("input")) == null || p.focus();
65
- },
66
- ...o
67
- }
68
- );
69
- }
70
- const Ke = Y("flex items-center gap-2 text-sm shadow-none", {
71
- variants: {
72
- size: {
73
- xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
74
- sm: "h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5",
75
- "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
76
- "icon-sm": "size-8 p-0 has-[>svg]:p-0"
77
- }
78
- },
79
- defaultVariants: {
80
- size: "xs"
81
- }
82
- });
83
- function Z({
84
- className: t,
85
- type: n = "button",
86
- variant: o = "ghost",
87
- size: l = "xs",
88
- ...i
89
- }) {
90
- return /* @__PURE__ */ e(
91
- _,
92
- {
93
- type: n,
94
- "data-size": l,
95
- variant: o,
96
- className: N(Ke({ size: l }), t),
97
- ...i
98
- }
99
- );
100
- }
101
- function $e({ className: t, ...n }) {
102
- return /* @__PURE__ */ e(
103
- le,
104
- {
105
- "data-slot": "input-group-control",
106
- className: N(
107
- "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
108
- t
109
- ),
110
- ...n
111
- }
112
- );
113
- }
114
- const Xe = W(null), Ye = W(null), ee = () => V(Xe), Je = () => V(Ye), te = W(null), G = () => {
115
- const t = Je(), n = V(te), o = t ?? n;
116
- if (!o)
117
- throw new Error("usePromptInputAttachments must be used within a PromptInput or PromptInputProvider");
118
- return o;
119
- };
120
- function Qe({ data: t, className: n, ...o }) {
121
- var f;
122
- const l = G(), i = t.filename || "", u = ((f = t.mediaType) != null && f.startsWith("image/") && t.url ? "image" : "file") === "image", g = i || (u ? "Image" : "Attachment");
123
- return /* @__PURE__ */ w(dt, { children: [
124
- /* @__PURE__ */ e(ce, { asChild: !0, children: /* @__PURE__ */ w(
125
- "div",
126
- {
127
- className: N(
128
- "group relative flex h-8 cursor-default select-none items-center gap-1.5 rounded-md border border-border px-1.5 text-sm font-medium transition-all hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
129
- n
130
- ),
131
- ...o,
132
- children: [
133
- /* @__PURE__ */ w("div", { className: "relative size-5 shrink-0", children: [
134
- /* @__PURE__ */ e("div", { className: "absolute inset-0 flex size-5 items-center justify-center overflow-hidden rounded bg-background transition-opacity group-hover:opacity-0", children: u ? /* @__PURE__ */ e(
135
- "img",
136
- {
137
- alt: i || "attachment",
138
- className: "size-5 object-cover",
139
- height: 20,
140
- src: t.url,
141
- width: 20
142
- }
143
- ) : /* @__PURE__ */ e("div", { className: "flex size-5 items-center justify-center text-muted-foreground", children: /* @__PURE__ */ e(ke, { className: "size-3" }) }) }),
144
- /* @__PURE__ */ w(
145
- _,
146
- {
147
- "aria-label": "Remove attachment",
148
- className: "absolute inset-0 size-5 cursor-pointer rounded p-0 opacity-0 transition-opacity group-hover:pointer-events-auto group-hover:opacity-100 [&>svg]:size-2.5",
149
- onClick: (y) => {
150
- y.stopPropagation(), l.remove(t.id);
151
- },
152
- type: "button",
153
- variant: "ghost",
154
- children: [
155
- /* @__PURE__ */ e(J, {}),
156
- /* @__PURE__ */ e("span", { className: "sr-only", children: "Remove" })
157
- ]
158
- }
159
- )
160
- ] }),
161
- /* @__PURE__ */ e("span", { className: "flex-1 truncate", children: g })
162
- ]
163
- },
164
- t.id
165
- ) }),
166
- /* @__PURE__ */ e(pt, { className: "w-auto p-2", children: /* @__PURE__ */ w("div", { className: "w-auto space-y-3", children: [
167
- u && /* @__PURE__ */ e("div", { className: "flex max-h-96 w-96 items-center justify-center overflow-hidden rounded-md border", children: /* @__PURE__ */ e(
168
- "img",
169
- {
170
- alt: i || "attachment preview",
171
- className: "max-h-full max-w-full object-contain",
172
- height: 384,
173
- src: t.url,
174
- width: 448
175
- }
176
- ) }),
177
- /* @__PURE__ */ e("div", { className: "flex items-center gap-2.5", children: /* @__PURE__ */ w("div", { className: "min-w-0 flex-1 space-y-1 px-0.5", children: [
178
- /* @__PURE__ */ e("h4", { className: "truncate text-sm font-semibold leading-none", children: i || (u ? "Image" : "Attachment") }),
179
- t.mediaType && /* @__PURE__ */ e("p", { className: "truncate font-mono text-xs text-muted-foreground", children: t.mediaType })
180
- ] }) })
181
- ] }) })
182
- ] });
183
- }
184
- function Ze({ children: t, className: n, ...o }) {
185
- const l = G();
186
- return l.files.length ? /* @__PURE__ */ e("div", { className: N("flex flex-wrap items-center gap-2 p-3", n), ...o, children: l.files.map((i) => /* @__PURE__ */ e(Ge, { children: t(i) }, i.id)) }) : null;
187
- }
188
- const et = ({
189
- label: t = "Add photos or files",
190
- ...n
191
- }) => {
192
- const o = G();
193
- return /* @__PURE__ */ w(
194
- me,
195
- {
196
- ...n,
197
- onSelect: (l) => {
198
- l.preventDefault(), o.openFileDialog();
199
- },
200
- children: [
201
- /* @__PURE__ */ e(ze, { className: "mr-2 size-4" }),
202
- " ",
203
- t
204
- ]
205
- }
206
- );
207
- }, tt = ({
208
- className: t,
209
- accept: n,
210
- multiple: o,
211
- globalDrop: l,
212
- syncHiddenInput: i,
213
- maxFiles: p,
214
- maxFileSize: u,
215
- onError: g,
216
- onSubmit: f,
217
- children: y,
218
- ...D
219
- }) => {
220
- const s = ee(), a = !!s, d = M(null), k = M(null), I = M(null);
221
- A(() => {
222
- var v;
223
- const r = (v = k.current) == null ? void 0 : v.closest("form");
224
- r instanceof HTMLFormElement && (I.current = r);
225
- }, []);
226
- const [S, C] = P([]), h = a ? s.attachments.files : S, T = F(() => {
227
- var r;
228
- (r = d.current) == null || r.click();
229
- }, []), j = F(
230
- (r) => !n || n.trim() === "" ? !0 : n.includes("image/*") ? r.type.startsWith("image/") : !0,
231
- [n]
232
- ), U = F(
233
- (r) => {
234
- const v = Array.from(r), m = v.filter((x) => j(x));
235
- if (v.length && m.length === 0) {
236
- g == null || g({
237
- code: "accept",
238
- message: "No files match the accepted types."
239
- });
240
- return;
241
- }
242
- const c = (x) => u ? x.size <= u : !0, b = m.filter(c);
243
- if (m.length > 0 && b.length === 0) {
244
- g == null || g({
245
- code: "max_file_size",
246
- message: "All files exceed the maximum size."
247
- });
248
- return;
249
- }
250
- C((x) => {
251
- const L = typeof p == "number" ? Math.max(0, p - x.length) : void 0, oe = typeof L == "number" ? b.slice(0, L) : b;
252
- typeof L == "number" && b.length > L && (g == null || g({
253
- code: "max_files",
254
- message: "Too many files. Some were not added."
255
- }));
256
- const $ = [];
257
- for (const B of oe)
258
- $.push({
259
- id: Oe(),
260
- type: "file",
261
- url: URL.createObjectURL(B),
262
- mediaType: B.type,
263
- filename: B.name
264
- });
265
- return x.concat($);
266
- });
267
- },
268
- [j, p, u, g]
269
- ), z = a ? (r) => s.attachments.add(r) : U, R = a ? (r) => s.attachments.remove(r) : (r) => C((v) => {
270
- const m = v.find((c) => c.id === r);
271
- return m != null && m.url && URL.revokeObjectURL(m.url), v.filter((c) => c.id !== r);
272
- }), O = a ? () => s.attachments.clear() : () => C((r) => {
273
- for (const v of r)
274
- v.url && URL.revokeObjectURL(v.url);
275
- return [];
276
- }), q = a ? () => s.attachments.openFileDialog() : T;
277
- A(() => {
278
- a && s.__registerFileInput(d, () => {
279
- var r;
280
- return (r = d.current) == null ? void 0 : r.click();
281
- });
282
- }, [a, s]), A(() => {
283
- i && d.current && h.length === 0 && (d.current.value = "");
284
- }, [h, i]), A(() => {
285
- const r = I.current;
286
- if (!r) return;
287
- const v = (c) => {
288
- var b, x;
289
- (x = (b = c.dataTransfer) == null ? void 0 : b.types) != null && x.includes("Files") && c.preventDefault();
290
- }, m = (c) => {
291
- var b, x, L;
292
- (x = (b = c.dataTransfer) == null ? void 0 : b.types) != null && x.includes("Files") && c.preventDefault(), (L = c.dataTransfer) != null && L.files && c.dataTransfer.files.length > 0 && z(c.dataTransfer.files);
293
- };
294
- return r.addEventListener("dragover", v), r.addEventListener("drop", m), () => {
295
- r.removeEventListener("dragover", v), r.removeEventListener("drop", m);
296
- };
297
- }, [z]), A(() => {
298
- if (!l) return;
299
- const r = (m) => {
300
- var c, b;
301
- (b = (c = m.dataTransfer) == null ? void 0 : c.types) != null && b.includes("Files") && m.preventDefault();
302
- }, v = (m) => {
303
- var c, b, x;
304
- (b = (c = m.dataTransfer) == null ? void 0 : c.types) != null && b.includes("Files") && m.preventDefault(), (x = m.dataTransfer) != null && x.files && m.dataTransfer.files.length > 0 && z(m.dataTransfer.files);
305
- };
306
- return document.addEventListener("dragover", r), document.addEventListener("drop", v), () => {
307
- document.removeEventListener("dragover", r), document.removeEventListener("drop", v);
308
- };
309
- }, [z, l]), A(
310
- () => () => {
311
- if (!a)
312
- for (const r of h)
313
- r.url && URL.revokeObjectURL(r.url);
314
- },
315
- [a, h]
316
- );
317
- const ne = (r) => {
318
- r.currentTarget.files && z(r.currentTarget.files);
319
- }, se = async (r) => {
320
- const m = await (await fetch(r)).blob();
321
- return new Promise((c, b) => {
322
- const x = new FileReader();
323
- x.onloadend = () => c(x.result), x.onerror = b, x.readAsDataURL(m);
324
- });
325
- }, re = Fe(
326
- () => ({
327
- files: h.map((r) => ({ ...r, id: r.id })),
328
- add: z,
329
- remove: R,
330
- clear: O,
331
- openFileDialog: q,
332
- fileInputRef: d
333
- }),
334
- [h, z, R, O, q]
335
- ), ae = (r) => {
336
- r.preventDefault();
337
- const v = r.currentTarget, m = a ? s.textInput.value : new FormData(v).get("message") || "";
338
- a || v.reset(), Promise.all(
339
- h.map(async ({ ...c }) => c.url && c.url.startsWith("blob:") ? {
340
- ...c,
341
- url: await se(c.url)
342
- } : c)
343
- ).then((c) => {
344
- try {
345
- const b = f({ text: m, files: c }, r);
346
- b instanceof Promise ? b.then(() => {
347
- O(), a && s.textInput.clear();
348
- }).catch(() => {
349
- }) : (O(), a && s.textInput.clear());
350
- } catch {
351
- }
352
- });
353
- }, K = /* @__PURE__ */ w(ie, { children: [
354
- /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "hidden", ref: k }),
355
- /* @__PURE__ */ e(
356
- "input",
357
- {
358
- accept: n,
359
- "aria-label": "Upload files",
360
- className: "hidden",
361
- multiple: o,
362
- onChange: ne,
363
- ref: d,
364
- title: "Upload files",
365
- type: "file"
366
- }
367
- ),
368
- /* @__PURE__ */ e("form", { className: N("w-full", t), onSubmit: ae, ...D, children: /* @__PURE__ */ e(He, { className: "overflow-hidden", children: y }) })
369
- ] });
370
- return a ? K : /* @__PURE__ */ e(te.Provider, { value: re, children: K });
371
- }, nt = ({
372
- onChange: t,
373
- className: n,
374
- placeholder: o = "What would you like to know?",
375
- ...l
376
- }) => {
377
- const i = ee(), p = G(), [u, g] = P(!1), f = (s) => {
378
- if (s.key === "Enter") {
379
- if (u || s.nativeEvent.isComposing || s.shiftKey)
380
- return;
381
- s.preventDefault();
382
- const a = s.currentTarget.form, d = a == null ? void 0 : a.querySelector('button[type="submit"]');
383
- if (d != null && d.disabled)
384
- return;
385
- a == null || a.requestSubmit();
386
- }
387
- if (s.key === "Backspace" && s.currentTarget.value === "" && p.files.length > 0) {
388
- s.preventDefault();
389
- const a = p.files.at(-1);
390
- a && p.remove(a.id);
391
- }
392
- }, y = (s) => {
393
- var k;
394
- const a = (k = s.clipboardData) == null ? void 0 : k.items;
395
- if (!a)
396
- return;
397
- const d = [];
398
- for (const I of a)
399
- if (I.kind === "file") {
400
- const S = I.getAsFile();
401
- S && d.push(S);
402
- }
403
- d.length > 0 && (s.preventDefault(), p.add(d));
404
- }, D = i ? {
405
- value: i.textInput.value,
406
- onChange: (s) => {
407
- i.textInput.setInput(s.currentTarget.value), t == null || t(s);
408
- }
409
- } : {
410
- onChange: t
411
- };
412
- return /* @__PURE__ */ e(
413
- $e,
414
- {
415
- className: N("field-sizing-content max-h-48 min-h-16", n),
416
- name: "message",
417
- onCompositionEnd: () => g(!1),
418
- onCompositionStart: () => g(!0),
419
- onKeyDown: f,
420
- onPaste: y,
421
- placeholder: o,
422
- ...l,
423
- ...D
424
- }
425
- );
426
- }, st = ({ className: t, ...n }) => /* @__PURE__ */ e(Q, { align: "block-end", className: N("order-first flex-wrap gap-1", t), ...n }), rt = ({ className: t, ...n }) => /* @__PURE__ */ e(Q, { align: "block-end", className: N("justify-between gap-1", t), ...n }), at = ({ className: t, ...n }) => /* @__PURE__ */ e("div", { className: N("flex items-center gap-1", t), ...n }), H = ({ variant: t = "ghost", className: n, size: o, ...l }) => {
427
- const i = o ?? (Ee.count(l.children) > 1 ? "sm" : "icon-sm");
428
- return /* @__PURE__ */ e(Z, { className: N(n), size: i, type: "button", variant: t, ...l });
429
- }, ot = (t) => /* @__PURE__ */ e(ue, { ...t }), it = ({ className: t, children: n, ...o }) => /* @__PURE__ */ e(de, { asChild: !0, children: /* @__PURE__ */ e(H, { className: t, ...o, children: n ?? /* @__PURE__ */ e(De, { className: "size-4" }) }) }), lt = ({ className: t, ...n }) => /* @__PURE__ */ e(pe, { align: "start", className: N(t), ...n }), ct = ({
430
- className: t,
431
- variant: n = "default",
432
- size: o = "icon-sm",
433
- status: l,
434
- children: i,
435
- ...p
436
- }) => {
437
- let u = /* @__PURE__ */ e(Te, { className: "size-4" });
438
- return l === "submitted" ? u = /* @__PURE__ */ e(Ae, { className: "size-4 animate-spin" }) : l === "streaming" ? u = /* @__PURE__ */ e(Ce, { className: "size-4" }) : l === "error" && (u = /* @__PURE__ */ e(J, { className: "size-4" })), /* @__PURE__ */ e(
439
- Z,
440
- {
441
- "aria-label": "Submit",
442
- className: N(t),
443
- size: o,
444
- type: "submit",
445
- variant: n,
446
- ...p,
447
- children: i ?? u
448
- }
449
- );
450
- }, ut = ({
451
- className: t,
452
- textareaRef: n,
453
- onTranscriptionChange: o,
454
- ...l
455
- }) => {
456
- const [i, p] = P(!1), [u, g] = P(null), f = M(null);
457
- A(() => {
458
- if (typeof window < "u" && ("SpeechRecognition" in window || "webkitSpeechRecognition" in window)) {
459
- const D = window.SpeechRecognition || window.webkitSpeechRecognition, s = new D();
460
- s.continuous = !0, s.interimResults = !0, s.lang = "en-US", s.onstart = () => {
461
- p(!0);
462
- }, s.onend = () => {
463
- p(!1);
464
- }, s.onresult = (a) => {
465
- var k;
466
- let d = "";
467
- for (let I = a.resultIndex; I < a.results.length; I++) {
468
- const S = a.results[I];
469
- S.isFinal && (d += ((k = S[0]) == null ? void 0 : k.transcript) ?? "");
470
- }
471
- if (d && (n != null && n.current)) {
472
- const I = n.current, S = I.value, C = S + (S ? " " : "") + d;
473
- I.value = C, I.dispatchEvent(new Event("input", { bubbles: !0 })), o == null || o(C);
474
- }
475
- }, s.onerror = (a) => {
476
- console.error("Speech recognition error:", a.error), p(!1);
477
- }, f.current = s, Be(() => g(s));
478
- }
479
- return () => {
480
- f.current && f.current.stop();
481
- };
482
- }, [n, o]);
483
- const y = F(() => {
484
- u && (i ? u.stop() : u.start());
485
- }, [u, i]);
486
- return /* @__PURE__ */ e(
487
- H,
488
- {
489
- className: N(
490
- "relative transition-all duration-200",
491
- i && "animate-pulse bg-accent text-accent-foreground",
492
- t
493
- ),
494
- disabled: !u,
495
- onClick: y,
496
- ...l,
497
- children: /* @__PURE__ */ e(Pe, { className: "size-4" })
498
- }
499
- );
500
- }, dt = ({ openDelay: t = 0, closeDelay: n = 0, ...o }) => /* @__PURE__ */ e(fe, { closeDelay: n, openDelay: t, ...o }), pt = ({ align: t = "start", ...n }) => /* @__PURE__ */ e(he, { align: t, ...n }), mt = (t) => /* @__PURE__ */ e(ge, { ...t }), ft = (t) => /* @__PURE__ */ e(ve, { ...t }), ht = ({
501
- className: t,
502
- children: n,
503
- title: o = "Model Selector",
504
- ...l
505
- }) => /* @__PURE__ */ w(be, { className: N("p-0", t), ...l, children: [
506
- /* @__PURE__ */ e(xe, { className: "sr-only", children: o }),
507
- /* @__PURE__ */ e(we, { className: "**:data-[slot=command-input-wrapper]:h-auto", children: n })
508
- ] }), gt = ({ className: t, ...n }) => /* @__PURE__ */ e(Ne, { className: N("h-auto py-3.5", t), ...n }), vt = (t) => /* @__PURE__ */ e(Ie, { ...t }), bt = (t) => /* @__PURE__ */ e(ye, { ...t }), xt = (t) => /* @__PURE__ */ e(Se, { ...t }), wt = ({ provider: t, className: n, ...o }) => /* @__PURE__ */ e(
509
- "img",
510
- {
511
- ...o,
512
- alt: `${t} logo`,
513
- className: N("size-3 dark:invert", n),
514
- height: 12,
515
- src: `https://models.dev/logos/${t}.svg`,
516
- width: 12
517
- }
518
- ), Nt = ({ className: t, ...n }) => /* @__PURE__ */ e("span", { className: N("flex-1 truncate text-left", t), ...n }), It = ({
519
- selectedModel: t,
520
- onModelChange: n,
521
- disabled: o = !1
522
- }) => {
523
- const [l, i] = P(!1), [p, u] = P(""), g = Ve(t) || E(), y = We.filter(
524
- (s) => s.name.toLowerCase().includes(p.toLowerCase()) || s.provider.toLowerCase().includes(p.toLowerCase())
525
- ).reduce(
526
- (s, a) => (s[a.provider] || (s[a.provider] = []), s[a.provider].push(a), s),
527
- {}
528
- ), D = (s) => {
529
- n(s), i(!1), u("");
530
- };
531
- return /* @__PURE__ */ w(mt, { open: l, onOpenChange: i, children: [
532
- /* @__PURE__ */ e(ft, { asChild: !0, children: /* @__PURE__ */ w(_, { variant: "outline", size: "sm", disabled: o, className: "h-8 gap-1 px-2 text-xs", children: [
533
- /* @__PURE__ */ e(Le, { size: 14 }),
534
- /* @__PURE__ */ e("span", { className: "max-w-20 truncate", children: g.name })
535
- ] }) }),
536
- /* @__PURE__ */ w(ht, { className: "w-96 p-0", children: [
537
- /* @__PURE__ */ e(gt, { placeholder: "Search models...", value: p, onValueChange: u }),
538
- /* @__PURE__ */ e(vt, { children: Object.entries(y).map(([s, a]) => /* @__PURE__ */ e(bt, { heading: s.charAt(0).toUpperCase() + s.slice(1), children: a.map((d) => /* @__PURE__ */ w(
539
- xt,
540
- {
541
- value: d.id,
542
- onSelect: () => D(d.id),
543
- className: "flex cursor-pointer items-center gap-2 p-2",
544
- children: [
545
- /* @__PURE__ */ e(wt, { provider: d.provider }),
546
- /* @__PURE__ */ w("div", { className: "flex flex-1 flex-col", children: [
547
- /* @__PURE__ */ e(Nt, { children: d.name }),
548
- /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: d.description })
549
- ] }),
550
- t === d.id && /* @__PURE__ */ e("div", { className: "h-2 w-2 rounded-full bg-blue-500" })
551
- ]
552
- },
553
- d.id
554
- )) }, s)) })
555
- ] })
556
- ] });
557
- }, X = "chai-ai-selected-model", Lt = ({
558
- input: t,
559
- setInput: n,
560
- onSend: o,
561
- onStop: l,
562
- isLoading: i,
563
- disabled: p,
564
- selectedLang: u,
565
- selectedModel: g = E().id,
566
- onModelChange: f
567
- }) => {
568
- const { t: y } = _e(), [D, s] = P(g), [a, d] = P(null), k = M(null), [I, S] = P(!1);
569
- return A(() => {
570
- if (!u) {
571
- const h = localStorage.getItem(X);
572
- if (h)
573
- s(h), f == null || f(h);
574
- else {
575
- const T = E().id;
576
- s(T), f == null || f(T);
577
- }
578
- }
579
- }, [u, f]), /* @__PURE__ */ e("div", { className: "relative", children: /* @__PURE__ */ e("div", { className: "border-gray-20 rounded-lg border", children: /* @__PURE__ */ w(tt, { onSubmit: (h) => {
580
- var U;
581
- const T = h.files.find((z) => {
582
- var R;
583
- return (R = z.mediaType) == null ? void 0 : R.startsWith("image/");
584
- }), j = (T == null ? void 0 : T.url) || a;
585
- o((U = h.text) == null ? void 0 : U.trim(), void 0, j, D), d(null);
586
- }, accept: "image/*", className: "flex h-auto w-full flex-col", children: [
587
- /* @__PURE__ */ e(st, { className: "p-0", children: /* @__PURE__ */ e(Ze, { className: "pb-0", children: (h) => /* @__PURE__ */ e(Qe, { className: "text-xs", data: h }) }) }),
588
- /* @__PURE__ */ e(
589
- nt,
590
- {
591
- ref: k,
592
- value: t,
593
- onChange: (h) => n(h.target.value),
594
- placeholder: y(u ? "Ask to update content" : "Ask me anything..."),
595
- disabled: i,
596
- className: "max-h-[200px] min-h-[60px] w-full",
597
- rows: 3
598
- }
599
- ),
600
- /* @__PURE__ */ w(rt, { children: [
601
- u ? /* @__PURE__ */ e("div", {}) : /* @__PURE__ */ w(at, { children: [
602
- /* @__PURE__ */ w(ot, { children: [
603
- /* @__PURE__ */ e(it, { disabled: i, children: /* @__PURE__ */ e(Re, { size: 16 }) }),
604
- /* @__PURE__ */ e(lt, { children: /* @__PURE__ */ e(et, {}) })
605
- ] }),
606
- /* @__PURE__ */ e(
607
- ut,
608
- {
609
- textareaRef: k,
610
- onTranscriptionChange: n,
611
- disabled: i
612
- }
613
- ),
614
- /* @__PURE__ */ e(
615
- It,
616
- {
617
- selectedModel: D,
618
- onModelChange: (h) => {
619
- s(h), f == null || f(h), localStorage.setItem(X, h);
620
- },
621
- disabled: i
622
- }
623
- ),
624
- /* @__PURE__ */ w(
625
- H,
626
- {
627
- className: "hidden",
628
- size: "sm",
629
- onClick: () => S(!I),
630
- variant: I ? "default" : "ghost",
631
- children: [
632
- /* @__PURE__ */ e(Me, { size: 16 }),
633
- /* @__PURE__ */ e("span", { children: "Search" })
634
- ]
635
- }
636
- )
637
- ] }),
638
- i ? /* @__PURE__ */ e(
639
- "button",
640
- {
641
- onClick: l,
642
- className: "z-50 flex items-center gap-x-1 rounded-md bg-red-500 p-1.5 text-white transition-colors hover:bg-red-600",
643
- title: y("Stop generation"),
644
- children: /* @__PURE__ */ e(je, { size: 16 })
645
- }
646
- ) : /* @__PURE__ */ e(ct, { disabled: !t.trim() || p, children: /* @__PURE__ */ e(Ue, { size: 16 }) })
647
- ] })
648
- ] }) }) });
649
- };
650
- export {
651
- Lt as default
652
- };