@automattic/agenttic-ui 0.1.14 → 0.1.16
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/assets/translations.d.ts +6 -0
- package/dist/assets/translations.d.ts.map +1 -0
- package/dist/components/AgentUIContainer.d.ts +2 -1
- package/dist/components/AgentUIContainer.d.ts.map +1 -1
- package/dist/components/chat/Chat.d.ts.map +1 -1
- package/dist/components/chat/ChatFooter.d.ts.map +1 -1
- package/dist/components/chat/ChatInput.d.ts +3 -1
- package/dist/components/chat/ChatInput.d.ts.map +1 -1
- package/dist/components/chat/ChatInput.stories.d.ts +4 -0
- package/dist/components/chat/ChatInput.stories.d.ts.map +1 -1
- package/dist/components/chat/EmptyView.d.ts +11 -0
- package/dist/components/chat/EmptyView.d.ts.map +1 -0
- package/dist/components/chat/ImageUploader.d.ts +35 -0
- package/dist/components/chat/ImageUploader.d.ts.map +1 -0
- package/dist/components/chat/Message.d.ts.map +1 -1
- package/dist/components/chat/MessageActions.stories.d.ts.map +1 -1
- package/dist/components/chat/Suggestions.d.ts +1 -0
- package/dist/components/chat/Suggestions.d.ts.map +1 -1
- package/dist/components/chat/ThinkingMessage.d.ts.map +1 -1
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/composable/AgentUIConversationView.d.ts.map +1 -1
- package/dist/components/composable/AgentUINotice.d.ts.map +1 -1
- package/dist/components/composable/AgentUISuggestions.d.ts.map +1 -1
- package/dist/components/views/CompactView.d.ts +2 -1
- package/dist/components/views/CompactView.d.ts.map +1 -1
- package/dist/context/AgentUIContext.d.ts +1 -0
- package/dist/context/AgentUIContext.d.ts.map +1 -1
- package/dist/hooks/useInput.d.ts +3 -1
- package/dist/hooks/useInput.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21183 -1247
- package/dist/markdown-extensions/charts/BarChart.d.ts +16 -0
- package/dist/markdown-extensions/charts/BarChart.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/BaseChart.d.ts +36 -0
- package/dist/markdown-extensions/charts/BaseChart.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/ChartBlock.d.ts +34 -0
- package/dist/markdown-extensions/charts/ChartBlock.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/ChartError.d.ts +17 -0
- package/dist/markdown-extensions/charts/ChartError.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/ChartErrorBoundary.d.ts +30 -0
- package/dist/markdown-extensions/charts/ChartErrorBoundary.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/LineChart.d.ts +14 -0
- package/dist/markdown-extensions/charts/LineChart.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/index.d.ts +294 -0
- package/dist/markdown-extensions/charts/index.d.ts.map +1 -0
- package/dist/markdown-extensions/charts/utils/chartUtils.d.ts +56 -0
- package/dist/markdown-extensions/charts/utils/chartUtils.d.ts.map +1 -0
- package/dist/markdown-extensions/index.d.ts +34 -0
- package/dist/markdown-extensions/index.d.ts.map +1 -0
- package/dist/markdown-extensions/types.d.ts +52 -0
- package/dist/markdown-extensions/types.d.ts.map +1 -0
- package/dist/marked.esm-CXPn2rbO.js +1090 -0
- package/dist/message-actions/utils.d.ts +24 -0
- package/dist/message-actions/utils.d.ts.map +1 -0
- package/dist/parseBlocks-DtWG2dnE.js +34 -0
- package/dist/parseIncompleteMarkdown-Di9Hun9H.js +211 -0
- package/dist/stories/charts/BarChart.stories.d.ts +1 -1
- package/dist/stories/charts/BarChart.stories.d.ts.map +1 -1
- package/dist/stories/charts/LineChart.stories.d.ts +1 -1
- package/dist/stories/charts/LineChart.stories.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/chatStorage.d.ts +15 -0
- package/dist/utils/chatStorage.d.ts.map +1 -0
- package/dist/utils/createMessageRenderer.d.ts +27 -0
- package/dist/utils/createMessageRenderer.d.ts.map +1 -0
- package/dist/utils/streaming/parseBlocks.d.ts +26 -0
- package/dist/utils/streaming/parseBlocks.d.ts.map +1 -0
- package/dist/utils/streaming/parseIncompleteMarkdown.d.ts +24 -0
- package/dist/utils/streaming/parseIncompleteMarkdown.d.ts.map +1 -0
- package/dist/utils/translation-loader.d.ts +19 -0
- package/dist/utils/translation-loader.d.ts.map +1 -0
- package/package.json +9 -5
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Message, MessageAction } from '../types';
|
|
2
|
+
export interface FeedbackActionsConfig {
|
|
3
|
+
onFeedback: (messageId: string, feedback: 'up' | 'down') => void | Promise<void>;
|
|
4
|
+
condition?: (message: Message) => boolean;
|
|
5
|
+
icons: {
|
|
6
|
+
up: React.ReactNode;
|
|
7
|
+
down: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface FeedbackActionsManager {
|
|
11
|
+
getActionsForMessage: (message: Message) => MessageAction[];
|
|
12
|
+
clearFeedback: (messageId: string) => void;
|
|
13
|
+
clearAllFeedback: () => void;
|
|
14
|
+
onChange: (listener: () => void) => void;
|
|
15
|
+
offChange: (listener: () => void) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates a stateful feedback actions manager that tracks feedback state internally
|
|
19
|
+
*
|
|
20
|
+
* @param config - Configuration for feedback actions
|
|
21
|
+
* @return FeedbackActionsManager with methods to get actions and manage state
|
|
22
|
+
*/
|
|
23
|
+
export declare const createFeedbackActions: (config: FeedbackActionsConfig) => FeedbackActionsManager;
|
|
24
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/message-actions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,GAAG,MAAM,KACnB,IAAI,GAAG,OAAO,CAAE,IAAI,CAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAE,OAAO,EAAE,OAAO,KAAM,OAAO,CAAC;IAC5C,KAAK,EAAE;QACN,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,sBAAsB;IACtC,oBAAoB,EAAE,CAAE,OAAO,EAAE,OAAO,KAAM,aAAa,EAAE,CAAC;IAC9D,aAAa,EAAE,CAAE,SAAS,EAAE,MAAM,KAAM,IAAI,CAAC;IAC7C,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAE,QAAQ,EAAE,MAAM,IAAI,KAAM,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAE,QAAQ,EAAE,MAAM,IAAI,KAAM,IAAI,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GACjC,QAAQ,qBAAqB,KAC3B,sBA8FF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
let s = null;
|
|
2
|
+
async function l() {
|
|
3
|
+
return s || (s = await import("./marked.esm-CXPn2rbO.js")), s;
|
|
4
|
+
}
|
|
5
|
+
const h = async (c) => {
|
|
6
|
+
const a = (await l()).Lexer.lex(c, { gfm: !0 }).map((n) => n.raw), t = [];
|
|
7
|
+
for (const n of a) {
|
|
8
|
+
if (n.trim() === "$$" && t.length > 0) {
|
|
9
|
+
const r = t.at(-1);
|
|
10
|
+
if (!r)
|
|
11
|
+
continue;
|
|
12
|
+
const o = r.trimStart().startsWith("$$"), e = (r.match(/\$\$/g) || []).length;
|
|
13
|
+
if (o && e % 2 === 1) {
|
|
14
|
+
t[t.length - 1] = r + n;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (t.length > 0 && n.trimEnd().endsWith("$$")) {
|
|
19
|
+
const r = t.at(-1);
|
|
20
|
+
if (!r)
|
|
21
|
+
continue;
|
|
22
|
+
const o = r.trimStart().startsWith("$$"), e = (r.match(/\$\$/g) || []).length, i = (n.match(/\$\$/g) || []).length;
|
|
23
|
+
if (o && e % 2 === 1 && !n.trimStart().startsWith("$$") && i === 1) {
|
|
24
|
+
t[t.length - 1] = r + n;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
t.push(n);
|
|
29
|
+
}
|
|
30
|
+
return t;
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
h as parseMarkdownIntoBlocks
|
|
34
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
const h = /(!?\[)([^\]]*?)$/, k = /(\*\*)([^*]*?)$/, d = /(__)([^_]*?)$/, g = /(\*\*\*)([^*]*?)$/, $ = /(\*)([^*]*?)$/, p = /(_)([^_]*?)$/, m = /(`)([^`]*?)$/, I = /(~~)([^~]*?)$/, a = (n) => {
|
|
2
|
+
const r = (n.match(/```/g) || []).length;
|
|
3
|
+
return r > 0 && r % 2 === 0 && n.includes(`
|
|
4
|
+
`);
|
|
5
|
+
}, M = (n) => {
|
|
6
|
+
const r = n.match(h);
|
|
7
|
+
if (r) {
|
|
8
|
+
if (r[1].startsWith("!")) {
|
|
9
|
+
const i = n.lastIndexOf(r[1]);
|
|
10
|
+
return n.substring(0, i);
|
|
11
|
+
}
|
|
12
|
+
return `${n}](agenttic:incomplete-link)`;
|
|
13
|
+
}
|
|
14
|
+
return n;
|
|
15
|
+
}, _ = (n) => {
|
|
16
|
+
if (a(n))
|
|
17
|
+
return n;
|
|
18
|
+
const r = n.match(k);
|
|
19
|
+
if (r) {
|
|
20
|
+
const e = r[2];
|
|
21
|
+
if (!e || /^[\s_~*`]*$/.test(e))
|
|
22
|
+
return n;
|
|
23
|
+
const i = n.lastIndexOf(r[1]), s = n.substring(0, i).lastIndexOf(`
|
|
24
|
+
`), c = s === -1 ? 0 : s + 1, o = n.substring(c, i);
|
|
25
|
+
if (/^[\s]*[-*+][\s]+$/.test(o) && e.includes(`
|
|
26
|
+
`))
|
|
27
|
+
return n;
|
|
28
|
+
if ((n.match(/\*\*/g) || []).length % 2 === 1)
|
|
29
|
+
return `${n}**`;
|
|
30
|
+
}
|
|
31
|
+
return n;
|
|
32
|
+
}, b = (n) => {
|
|
33
|
+
const r = n.match(d);
|
|
34
|
+
if (r) {
|
|
35
|
+
const e = r[2];
|
|
36
|
+
if (!e || /^[\s_~*`]*$/.test(e))
|
|
37
|
+
return n;
|
|
38
|
+
const i = n.lastIndexOf(r[1]), s = n.substring(0, i).lastIndexOf(`
|
|
39
|
+
`), c = s === -1 ? 0 : s + 1, o = n.substring(c, i);
|
|
40
|
+
if (/^[\s]*[-*+][\s]+$/.test(o) && e.includes(`
|
|
41
|
+
`))
|
|
42
|
+
return n;
|
|
43
|
+
if ((n.match(/__/g) || []).length % 2 === 1)
|
|
44
|
+
return `${n}__`;
|
|
45
|
+
}
|
|
46
|
+
return n;
|
|
47
|
+
}, A = (n) => n.split("").reduce((r, e, i) => {
|
|
48
|
+
if (e === "*") {
|
|
49
|
+
const t = n[i - 1], s = n[i + 1];
|
|
50
|
+
if (t === "\\")
|
|
51
|
+
return r;
|
|
52
|
+
let c = i;
|
|
53
|
+
for (let l = i - 1; l >= 0; l--) {
|
|
54
|
+
if (n[l] === `
|
|
55
|
+
`) {
|
|
56
|
+
c = l + 1;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
if (l === 0) {
|
|
60
|
+
c = 0;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (n.substring(c, i).trim() === "" && (s === " " || s === " "))
|
|
65
|
+
return r;
|
|
66
|
+
if (t !== "*" && s !== "*")
|
|
67
|
+
return r + 1;
|
|
68
|
+
}
|
|
69
|
+
return r;
|
|
70
|
+
}, 0), B = (n) => {
|
|
71
|
+
if (a(n))
|
|
72
|
+
return n;
|
|
73
|
+
if (n.match($)) {
|
|
74
|
+
let e = -1;
|
|
75
|
+
for (let s = 0; s < n.length; s++)
|
|
76
|
+
if (n[s] === "*" && n[s - 1] !== "*" && n[s + 1] !== "*") {
|
|
77
|
+
e = s;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
if (e === -1)
|
|
81
|
+
return n;
|
|
82
|
+
const i = n.substring(
|
|
83
|
+
e + 1
|
|
84
|
+
);
|
|
85
|
+
if (!i || /^[\s_~*`]*$/.test(i))
|
|
86
|
+
return n;
|
|
87
|
+
if (A(n) % 2 === 1)
|
|
88
|
+
return `${n}*`;
|
|
89
|
+
}
|
|
90
|
+
return n;
|
|
91
|
+
}, f = (n, r) => {
|
|
92
|
+
let e = !1, i = !1;
|
|
93
|
+
for (let t = 0; t < n.length && t < r; t++) {
|
|
94
|
+
if (n[t] === "\\" && n[t + 1] === "$") {
|
|
95
|
+
t++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
n[t] === "$" && (n[t + 1] === "$" ? (i = !i, t++, e = !1) : i || (e = !e));
|
|
99
|
+
}
|
|
100
|
+
return e || i;
|
|
101
|
+
}, C = (n) => n.split("").reduce((r, e, i) => {
|
|
102
|
+
if (e === "_") {
|
|
103
|
+
const t = n[i - 1], s = n[i + 1];
|
|
104
|
+
if (t === "\\" || f(n, i) || t && s && /[\p{L}\p{N}_]/u.test(t) && /[\p{L}\p{N}_]/u.test(s))
|
|
105
|
+
return r;
|
|
106
|
+
if (t !== "_" && s !== "_")
|
|
107
|
+
return r + 1;
|
|
108
|
+
}
|
|
109
|
+
return r;
|
|
110
|
+
}, 0), P = (n) => {
|
|
111
|
+
if (a(n))
|
|
112
|
+
return n;
|
|
113
|
+
if (n.match(p)) {
|
|
114
|
+
let e = -1;
|
|
115
|
+
for (let s = 0; s < n.length; s++)
|
|
116
|
+
if (n[s] === "_" && n[s - 1] !== "_" && n[s + 1] !== "_" && n[s - 1] !== "\\" && !f(n, s)) {
|
|
117
|
+
const c = s > 0 ? n[s - 1] : "", o = s < n.length - 1 ? n[s + 1] : "";
|
|
118
|
+
if (c && o && /[\p{L}\p{N}_]/u.test(c) && /[\p{L}\p{N}_]/u.test(o))
|
|
119
|
+
continue;
|
|
120
|
+
e = s;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
if (e === -1)
|
|
124
|
+
return n;
|
|
125
|
+
const i = n.substring(
|
|
126
|
+
e + 1
|
|
127
|
+
);
|
|
128
|
+
if (!i || /^[\s_~*`]*$/.test(i))
|
|
129
|
+
return n;
|
|
130
|
+
if (C(n) % 2 === 1) {
|
|
131
|
+
const s = n.match(/\n+$/);
|
|
132
|
+
return s ? `${n.slice(
|
|
133
|
+
0,
|
|
134
|
+
-s[0].length
|
|
135
|
+
)}_${s[0]}` : `${n}_`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return n;
|
|
139
|
+
}, N = (n, r) => {
|
|
140
|
+
const e = n.substring(r, r + 3) === "```", i = r > 0 && n.substring(r - 1, r + 2) === "```", t = r > 1 && n.substring(r - 2, r + 1) === "```";
|
|
141
|
+
return e || i || t;
|
|
142
|
+
}, S = (n) => {
|
|
143
|
+
let r = 0;
|
|
144
|
+
for (let e = 0; e < n.length; e++)
|
|
145
|
+
n[e] === "`" && !N(n, e) && r++;
|
|
146
|
+
return r;
|
|
147
|
+
}, w = (n) => {
|
|
148
|
+
if (n.match(/^```[^`\n]*```?$/) && !n.includes(`
|
|
149
|
+
`))
|
|
150
|
+
return n.endsWith("``") && !n.endsWith("```") ? `${n}\`` : n;
|
|
151
|
+
const e = (n.match(/```/g) || []).length, i = e % 2 === 1;
|
|
152
|
+
if (e > 0 && e % 2 === 0 && n.includes(`
|
|
153
|
+
`) || (n.endsWith("```\n") || n.endsWith("```")) && e % 2 === 0)
|
|
154
|
+
return n;
|
|
155
|
+
const t = n.match(m);
|
|
156
|
+
if (t && !i) {
|
|
157
|
+
const s = t[2];
|
|
158
|
+
if (!s || /^[\s_~*`]*$/.test(s))
|
|
159
|
+
return n;
|
|
160
|
+
if (S(n) % 2 === 1)
|
|
161
|
+
return `${n}\``;
|
|
162
|
+
}
|
|
163
|
+
return n;
|
|
164
|
+
}, U = (n) => {
|
|
165
|
+
const r = n.match(I);
|
|
166
|
+
if (r) {
|
|
167
|
+
const e = r[2];
|
|
168
|
+
if (!e || /^[\s_~*`]*$/.test(e))
|
|
169
|
+
return n;
|
|
170
|
+
if ((n.match(/~~/g) || []).length % 2 === 1)
|
|
171
|
+
return `${n}~~`;
|
|
172
|
+
}
|
|
173
|
+
return n;
|
|
174
|
+
}, O = (n) => {
|
|
175
|
+
if ((n.match(/\$\$/g) || []).length % 2 === 0)
|
|
176
|
+
return n;
|
|
177
|
+
const e = n.indexOf("$$");
|
|
178
|
+
return e !== -1 && n.indexOf(`
|
|
179
|
+
`, e) !== -1 && !n.endsWith(`
|
|
180
|
+
`) ? `${n}
|
|
181
|
+
$$` : `${n}$$`;
|
|
182
|
+
}, T = (n) => {
|
|
183
|
+
let r = 0;
|
|
184
|
+
const e = n.match(/\*+/g) || [];
|
|
185
|
+
for (const i of e) {
|
|
186
|
+
const t = i.length;
|
|
187
|
+
t >= 3 && (r += Math.floor(t / 3));
|
|
188
|
+
}
|
|
189
|
+
return r;
|
|
190
|
+
}, W = (n) => {
|
|
191
|
+
if (a(n) || /^\*{4,}$/.test(n))
|
|
192
|
+
return n;
|
|
193
|
+
const r = n.match(g);
|
|
194
|
+
if (r) {
|
|
195
|
+
const e = r[2];
|
|
196
|
+
if (!e || /^[\s_~*`]*$/.test(e))
|
|
197
|
+
return n;
|
|
198
|
+
if (T(n) % 2 === 1)
|
|
199
|
+
return `${n}***`;
|
|
200
|
+
}
|
|
201
|
+
return n;
|
|
202
|
+
}, L = (n) => {
|
|
203
|
+
if (!n || typeof n != "string")
|
|
204
|
+
return n;
|
|
205
|
+
let r = n;
|
|
206
|
+
const e = M(r);
|
|
207
|
+
return e.endsWith("](agenttic:incomplete-link)") ? e : (r = e, r = W(r), r = _(r), r = b(r), r = B(r), r = P(r), r = w(r), r = U(r), r = O(r), r);
|
|
208
|
+
};
|
|
209
|
+
export {
|
|
210
|
+
L as parseIncompleteMarkdown
|
|
211
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { ChartBlock } from '
|
|
2
|
+
import { ChartBlock } from '../../markdown-extensions/charts';
|
|
3
3
|
declare const meta: Meta<typeof ChartBlock>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BarChart.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/charts/BarChart.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"BarChart.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/charts/BarChart.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAE,OAAO,UAAU,CAoBE,CAAC;AAEtC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAE,OAAO,IAAI,CAAE,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAoCrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAoC5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAuC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAiCrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAuBxB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { ChartBlock } from '
|
|
2
|
+
import { ChartBlock } from '../../markdown-extensions/charts';
|
|
3
3
|
declare const meta: Meta<typeof ChartBlock>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChart.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/charts/LineChart.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"LineChart.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/charts/LineChart.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAE,OAAO,UAAU,CAoBE,CAAC;AAEtC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAE,OAAO,IAAI,CAAE,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAoCrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,KAiDzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAyC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAmCrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAuBxB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -31,7 +31,6 @@ export interface MessageAction {
|
|
|
31
31
|
pressed?: boolean;
|
|
32
32
|
showLabel?: boolean;
|
|
33
33
|
}
|
|
34
|
-
export declare const DEFAULT_PLACEHOLDER: import("@wordpress/i18n").TranslatableText<"Ask anything">;
|
|
35
34
|
export interface AgentUIProps {
|
|
36
35
|
messages: Message[];
|
|
37
36
|
isProcessing: boolean;
|
|
@@ -54,9 +53,13 @@ export interface AgentUIProps {
|
|
|
54
53
|
messageRenderer?: ComponentType<{
|
|
55
54
|
children: string;
|
|
56
55
|
}>;
|
|
56
|
+
expandOnClick?: boolean;
|
|
57
57
|
inputValue?: string;
|
|
58
58
|
onInputChange?: (value: string) => void;
|
|
59
59
|
draggableStates?: ChatState[];
|
|
60
|
+
locale?: string;
|
|
61
|
+
maxInputLength?: number;
|
|
62
|
+
onInputLimitExceeded?: () => void;
|
|
60
63
|
}
|
|
61
64
|
export interface NoticeConfig {
|
|
62
65
|
icon?: React.ReactNode;
|
|
@@ -67,6 +70,7 @@ export interface NoticeConfig {
|
|
|
67
70
|
};
|
|
68
71
|
dismissible?: boolean;
|
|
69
72
|
onDismiss?: () => void;
|
|
73
|
+
status?: 'success' | 'warning' | 'error';
|
|
70
74
|
}
|
|
71
75
|
export interface ChatProps extends AgentUIProps {
|
|
72
76
|
floatingChatState?: ChatState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for persisting chat UI preferences in localStorage
|
|
3
|
+
*/
|
|
4
|
+
export type ChatPosition = 'left' | 'right';
|
|
5
|
+
/**
|
|
6
|
+
* Get the saved chat position from localStorage
|
|
7
|
+
* @return The saved position or 'left' as default
|
|
8
|
+
*/
|
|
9
|
+
export declare function getChatPosition(): ChatPosition;
|
|
10
|
+
/**
|
|
11
|
+
* Save the chat position to localStorage
|
|
12
|
+
* @param position - The position to save ('left' or 'right')
|
|
13
|
+
*/
|
|
14
|
+
export declare function setChatPosition(position: ChatPosition): void;
|
|
15
|
+
//# sourceMappingURL=chatStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatStorage.d.ts","sourceRoot":"","sources":["../../src/utils/chatStorage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAe9C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAE,QAAQ,EAAE,YAAY,GAAI,IAAI,CAQ9D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a configured message renderer component
|
|
3
|
+
*
|
|
4
|
+
* This factory creates a React component that renders markdown content
|
|
5
|
+
* with the specified extensions and custom components.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { Components } from 'react-markdown';
|
|
9
|
+
import type { PluggableList } from 'unified';
|
|
10
|
+
import type { MarkdownExtensions } from '../markdown-extensions/types';
|
|
11
|
+
export type MarkdownComponents = Components;
|
|
12
|
+
export type { MarkdownExtensions } from '../markdown-extensions/types';
|
|
13
|
+
interface CreateMessageRendererOptions {
|
|
14
|
+
components?: Components;
|
|
15
|
+
extensions?: MarkdownExtensions;
|
|
16
|
+
remarkPlugins?: PluggableList;
|
|
17
|
+
enableStreaming?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a message renderer component with pre-configured markdown settings
|
|
21
|
+
* @param options - Configuration options for markdown rendering
|
|
22
|
+
* @return A React component that renders markdown with the specified configuration
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMessageRenderer(options?: CreateMessageRendererOptions): React.ComponentType<{
|
|
25
|
+
children: string;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=createMessageRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMessageRenderer.d.ts","sourceRoot":"","sources":["../../src/utils/createMessageRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAgCvE,UAAU,4BAA4B;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,GAAE,4BAAiC,GACxC,KAAK,CAAC,aAAa,CAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAE,CAwD7C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Markdown into Blocks
|
|
3
|
+
*
|
|
4
|
+
* Based on code from Streamdown (https://github.com/vercel/streamdown)
|
|
5
|
+
* Copyright 2023 Vercel, Inc.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*
|
|
19
|
+
* Modifications:
|
|
20
|
+
* - Changed to use dynamic imports for optional marked dependency
|
|
21
|
+
* - Made function async to handle dynamic import
|
|
22
|
+
* - Added lazy loading pattern for marked module
|
|
23
|
+
* - Adapted for use in agenttic-client
|
|
24
|
+
*/
|
|
25
|
+
export declare const parseMarkdownIntoBlocks: (markdown: string) => Promise<string[]>;
|
|
26
|
+
//# sourceMappingURL=parseBlocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseBlocks.d.ts","sourceRoot":"","sources":["../../../src/utils/streaming/parseBlocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAYH,eAAO,MAAM,uBAAuB,GACnC,UAAU,MAAM,KACd,OAAO,CAAE,MAAM,EAAE,CAqEnB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Incomplete Markdown
|
|
3
|
+
*
|
|
4
|
+
* Based on code from Streamdown (https://github.com/vercel/streamdown)
|
|
5
|
+
* Copyright 2023 Vercel, Inc.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*
|
|
19
|
+
* Modifications:
|
|
20
|
+
* - Changed incomplete link marker from "streamdown:incomplete-link" to "agenttic:incomplete-link"
|
|
21
|
+
* - Adapted for use in agenttic-client
|
|
22
|
+
*/
|
|
23
|
+
export declare const parseIncompleteMarkdown: (text: string) => string;
|
|
24
|
+
//# sourceMappingURL=parseIncompleteMarkdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIncompleteMarkdown.d.ts","sourceRoot":"","sources":["../../../src/utils/streaming/parseIncompleteMarkdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAqjBH,eAAO,MAAM,uBAAuB,GAAK,MAAM,MAAM,KAAI,MAiCxD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translation loader for agenttic pacakges using pre-parsed translation objects
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for translation loading
|
|
6
|
+
*/
|
|
7
|
+
interface TranslationConfig {
|
|
8
|
+
domain?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Load translations for agenttic packages from pre-parsed objects
|
|
12
|
+
*
|
|
13
|
+
* @param locale - Language locale (e.g., 'es', 'fr', 'de-DE'). Defaults to en.
|
|
14
|
+
* @param config - Translation configuration
|
|
15
|
+
* @return boolean - Success status
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadAgentticTranslations(locale?: string, config?: TranslationConfig): boolean;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=translation-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-loader.d.ts","sourceRoot":"","sources":["../../src/utils/translation-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,UAAU,iBAAiB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAsED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACvC,MAAM,GAAE,MAAa,EACrB,MAAM,GAAE,iBAAsB,GAC5B,OAAO,CAoBT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automattic/agenttic-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UI components for the Agenttic framework",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"vitest": "^1.0.0"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
+
"@automattic/charts": ">=0.14.0 <1.0.0",
|
|
62
63
|
"@radix-ui/react-scroll-area": "^1.2.9",
|
|
63
64
|
"@radix-ui/react-slot": "^1.2.3",
|
|
64
65
|
"@visx/xychart": "^3.12.0",
|
|
@@ -71,7 +72,11 @@
|
|
|
71
72
|
"react-dom": "^18.0.0",
|
|
72
73
|
"react-markdown": "^10.1.0",
|
|
73
74
|
"react-textarea-autosize": "^8.5.9",
|
|
74
|
-
"
|
|
75
|
+
"remark-gfm": "^4.0.1",
|
|
76
|
+
"unified": "^11.0.5"
|
|
77
|
+
},
|
|
78
|
+
"optionalDependencies": {
|
|
79
|
+
"marked": "^16.2.1"
|
|
75
80
|
},
|
|
76
81
|
"peerDependencies": {
|
|
77
82
|
"react": "^18.0.0",
|
|
@@ -82,7 +87,7 @@
|
|
|
82
87
|
"branch": "trunk"
|
|
83
88
|
},
|
|
84
89
|
"scripts": {
|
|
85
|
-
"build": "pnpm run clean && vite build && tsc --project tsconfig.json --emitDeclarationOnly",
|
|
90
|
+
"build": "pnpm run clean && pnpm i18n:download-json && vite build && tsc --project tsconfig.json --emitDeclarationOnly",
|
|
86
91
|
"dev": "vite",
|
|
87
92
|
"clean": "rm -rf dist",
|
|
88
93
|
"type-check": "tsc --noEmit",
|
|
@@ -91,7 +96,6 @@
|
|
|
91
96
|
"test": "vitest run",
|
|
92
97
|
"storybook": "storybook dev -p 6006",
|
|
93
98
|
"build-storybook": "storybook build -o storybook-static",
|
|
94
|
-
"i18n:
|
|
95
|
-
"i18n:update": "npx --no-install @wordpress/i18n-command make-json languages --domain=a8c-agenttic"
|
|
99
|
+
"i18n:download-json": "../../scripts/download-translation-files.js"
|
|
96
100
|
}
|
|
97
101
|
}
|