@lumerahq/ui 0.9.0 → 0.10.0-dev.0
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/{RecordSheet-DnEqk0gH.js → RecordSheet-CZ-x6AeG.js} +3586 -2064
- package/dist/{automations-DNWw-HT7.js → automations-Bb9nlU05.js} +281 -22
- package/dist/components/agent-chat/AgentChat.d.ts +1 -1
- package/dist/components/agent-chat/AgentChat.d.ts.map +1 -1
- package/dist/components/agent-chat/ArtifactCard.d.ts +8 -0
- package/dist/components/agent-chat/ArtifactCard.d.ts.map +1 -0
- package/dist/components/agent-chat/index.d.ts +4 -0
- package/dist/components/agent-chat/index.d.ts.map +1 -1
- package/dist/components/agent-chat/tool-renderers/ArtifactRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/ArtifactRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/BashRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/BashRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/DefaultRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/DefaultRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/EditRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/EditRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/FindRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/FindRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/GrepRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/GrepRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/IntegrationProxyRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/IntegrationProxyRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/LsRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/LsRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/LumeraApiRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/LumeraApiRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/ReadRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/ReadRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/SqlQueryRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/SqlQueryRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/ToolCallCard.d.ts +15 -0
- package/dist/components/agent-chat/tool-renderers/ToolCallCard.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/WebSearchRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/WebSearchRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/WriteRenderer.d.ts +3 -0
- package/dist/components/agent-chat/tool-renderers/WriteRenderer.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/index.d.ts +13 -0
- package/dist/components/agent-chat/tool-renderers/index.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/types.d.ts +27 -0
- package/dist/components/agent-chat/tool-renderers/types.d.ts.map +1 -0
- package/dist/components/agent-chat/tool-renderers/utils.d.ts +33 -0
- package/dist/components/agent-chat/tool-renderers/utils.d.ts.map +1 -0
- package/dist/components/agent-chat/types.d.ts +37 -0
- package/dist/components/agent-chat/types.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +15 -6
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/{highlighted-body-OFNGDK62-ClX2-0Ut.js → highlighted-body-OFNGDK62-DMJuoRQR.js} +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/use-agent-chat.d.ts +19 -1
- package/dist/hooks/use-agent-chat.d.ts.map +1 -1
- package/dist/hooks/use-discovery-poll.d.ts +26 -0
- package/dist/hooks/use-discovery-poll.d.ts.map +1 -0
- package/dist/index.js +64 -56
- package/dist/lib/index.js +52 -53
- package/dist/mermaid-GHXKKRXX-oYSoQafD.js +4 -0
- package/dist/ui.css +135 -10
- package/dist/{use-automation-run-D_1647k0.js → use-automation-run-BnhDQAJ6.js} +255 -11
- package/dist/{use-sql-table-8APCNryn.js → use-sql-table-D5tupvS2.js} +1 -2
- package/package.json +2 -2
- package/dist/api-Bm4dzr1n.js +0 -262
- package/dist/mermaid-GHXKKRXX-srRS7-dD.js +0 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumerahq/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0-dev.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css"
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"@tanstack/react-query": "^5.90.12",
|
|
54
54
|
"class-variance-authority": "^0.7.1",
|
|
55
55
|
"clsx": "^2.1.1",
|
|
56
|
-
"lucide-react": "^
|
|
56
|
+
"lucide-react": "^1.7.0",
|
|
57
57
|
"streamdown": "^2.5.0",
|
|
58
58
|
"tailwind-merge": "^3.4.0"
|
|
59
59
|
},
|
package/dist/api-Bm4dzr1n.js
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import { p as parentApiRequest, B as BridgeError } from "./automations-DNWw-HT7.js";
|
|
2
|
-
const API_PREFIX = "/api";
|
|
3
|
-
const buildUrl = (path) => {
|
|
4
|
-
const normalized = path.startsWith("/") ? path : `/${path}`;
|
|
5
|
-
return normalized.startsWith(API_PREFIX) ? normalized : `${API_PREFIX}${normalized}`;
|
|
6
|
-
};
|
|
7
|
-
const request = async (path, options) => {
|
|
8
|
-
const response = await parentApiRequest({
|
|
9
|
-
...options,
|
|
10
|
-
url: buildUrl(path)
|
|
11
|
-
});
|
|
12
|
-
if (!response.ok) {
|
|
13
|
-
const message = extractErrorMessage(response);
|
|
14
|
-
throw new BridgeError(message, response.status, response);
|
|
15
|
-
}
|
|
16
|
-
return parseResponseBody(response);
|
|
17
|
-
};
|
|
18
|
-
const extractErrorMessage = (response) => {
|
|
19
|
-
if (typeof response.error === "string" && response.error.trim()) {
|
|
20
|
-
return response.error;
|
|
21
|
-
}
|
|
22
|
-
if (typeof response.body === "string" && response.body.trim()) {
|
|
23
|
-
return response.body;
|
|
24
|
-
}
|
|
25
|
-
return `Request failed (${response.status})`;
|
|
26
|
-
};
|
|
27
|
-
const parseResponseBody = (response) => {
|
|
28
|
-
if (typeof response.body === "string") {
|
|
29
|
-
try {
|
|
30
|
-
return JSON.parse(response.body);
|
|
31
|
-
} catch {
|
|
32
|
-
return response.body;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return response.body;
|
|
36
|
-
};
|
|
37
|
-
const validateSql = (req) => {
|
|
38
|
-
const trimmed = req.sql?.trim();
|
|
39
|
-
if (!trimmed) {
|
|
40
|
-
throw new Error("SQL string is required");
|
|
41
|
-
}
|
|
42
|
-
if (req.params && req.args) {
|
|
43
|
-
throw new Error("Use either named params or positional args, not both");
|
|
44
|
-
}
|
|
45
|
-
return trimmed;
|
|
46
|
-
};
|
|
47
|
-
const fileToBase64 = (file) => new Promise((resolve, reject) => {
|
|
48
|
-
const reader = new FileReader();
|
|
49
|
-
reader.onloadend = () => {
|
|
50
|
-
const result = reader.result;
|
|
51
|
-
resolve(result.split(",")[1]);
|
|
52
|
-
};
|
|
53
|
-
reader.onerror = reject;
|
|
54
|
-
reader.readAsDataURL(file);
|
|
55
|
-
});
|
|
56
|
-
async function pbSql(req) {
|
|
57
|
-
const sql = validateSql(req);
|
|
58
|
-
return request("/pb/sql", {
|
|
59
|
-
method: "POST",
|
|
60
|
-
headers: { "Content-Type": "application/json" },
|
|
61
|
-
body: { ...req, sql }
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
async function pbGet(collection, id, expand) {
|
|
65
|
-
if (!collection) throw new Error("Collection is required for pbGet");
|
|
66
|
-
if (!id) throw new Error("Record ID is required for pbGet");
|
|
67
|
-
const params = expand ? `?expand=${encodeURIComponent(expand)}` : "";
|
|
68
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records/${encodeURIComponent(id)}${params}`, {
|
|
69
|
-
method: "GET"
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
async function pbList(collection, options = {}) {
|
|
73
|
-
if (!collection) throw new Error("Collection is required for pbList");
|
|
74
|
-
const { page = 1, perPage = 20, filter, sort, expand } = options;
|
|
75
|
-
if (page < 1) throw new Error("Page must be >= 1");
|
|
76
|
-
if (perPage < 1 || perPage > 500) throw new Error("perPage must be between 1 and 500");
|
|
77
|
-
const params = new URLSearchParams({
|
|
78
|
-
page: String(page),
|
|
79
|
-
perPage: String(perPage)
|
|
80
|
-
});
|
|
81
|
-
if (filter) params.set("filter", filter);
|
|
82
|
-
if (sort) params.set("sort", sort);
|
|
83
|
-
if (expand) params.set("expand", expand);
|
|
84
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records?${params}`, {
|
|
85
|
-
method: "GET"
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async function pbSearch(collection, query, options = {}) {
|
|
89
|
-
if (!collection) throw new Error("Collection is required");
|
|
90
|
-
const { page = 1, perPage = 20, sort, expand } = options;
|
|
91
|
-
const params = new URLSearchParams({
|
|
92
|
-
q: query,
|
|
93
|
-
page: String(page),
|
|
94
|
-
perPage: String(perPage)
|
|
95
|
-
});
|
|
96
|
-
if (sort) params.set("sort", sort);
|
|
97
|
-
if (expand) params.set("expand", expand);
|
|
98
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/search?${params}`, {
|
|
99
|
-
method: "GET"
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
async function pbCreate(collection, data) {
|
|
103
|
-
if (!collection) throw new Error("Collection is required");
|
|
104
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records`, {
|
|
105
|
-
method: "POST",
|
|
106
|
-
headers: { "Content-Type": "application/json" },
|
|
107
|
-
body: data
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
async function pbUpdate(collection, id, data) {
|
|
111
|
-
if (!collection) throw new Error("Collection is required");
|
|
112
|
-
if (!id) throw new Error("Record ID is required");
|
|
113
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records/${encodeURIComponent(id)}`, {
|
|
114
|
-
method: "PATCH",
|
|
115
|
-
headers: { "Content-Type": "application/json" },
|
|
116
|
-
body: data
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
async function pbDelete(collection, id) {
|
|
120
|
-
if (!collection) throw new Error("Collection is required");
|
|
121
|
-
if (!id) throw new Error("Record ID is required");
|
|
122
|
-
await request(`/pb/collections/${encodeURIComponent(collection)}/records/${encodeURIComponent(id)}`, {
|
|
123
|
-
method: "DELETE"
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
const MAX_BULK_SIZE = 1e3;
|
|
127
|
-
async function pbBulkUpdate(collection, records) {
|
|
128
|
-
if (!collection) throw new Error("Collection is required for pbBulkUpdate");
|
|
129
|
-
if (!records.length) return { succeeded: 0, failed: 0, errors: [] };
|
|
130
|
-
if (records.length > MAX_BULK_SIZE) {
|
|
131
|
-
throw new Error(`Bulk update limited to ${MAX_BULK_SIZE} records. Consider batching larger operations.`);
|
|
132
|
-
}
|
|
133
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records/bulk/update`, {
|
|
134
|
-
method: "POST",
|
|
135
|
-
headers: { "Content-Type": "application/json" },
|
|
136
|
-
body: { records, transaction: true }
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
async function pbBulkDelete(collection, ids) {
|
|
140
|
-
if (!collection) throw new Error("Collection is required for pbBulkDelete");
|
|
141
|
-
if (!ids.length) return { succeeded: 0, failed: 0, errors: [] };
|
|
142
|
-
if (ids.length > MAX_BULK_SIZE) {
|
|
143
|
-
throw new Error(`Bulk delete limited to ${MAX_BULK_SIZE} records. Consider batching larger operations.`);
|
|
144
|
-
}
|
|
145
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records/bulk/delete`, {
|
|
146
|
-
method: "POST",
|
|
147
|
-
headers: { "Content-Type": "application/json" },
|
|
148
|
-
body: { ids }
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
async function pbUpsert(collection, data) {
|
|
152
|
-
if (!collection) throw new Error("Collection is required");
|
|
153
|
-
if (!data.external_id) throw new Error("external_id is required for upsert");
|
|
154
|
-
return request(`/pb/collections/${encodeURIComponent(collection)}/records/upsert`, {
|
|
155
|
-
method: "POST",
|
|
156
|
-
headers: { "Content-Type": "application/json" },
|
|
157
|
-
body: data
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
async function getUploadUrl(filename, contentType, options) {
|
|
161
|
-
if (!filename) throw new Error("Filename is required");
|
|
162
|
-
if (!options.collectionId) throw new Error("Collection ID is required");
|
|
163
|
-
if (!options.fieldName) throw new Error("Field name is required");
|
|
164
|
-
return request("/pb/uploads/presign", {
|
|
165
|
-
method: "POST",
|
|
166
|
-
headers: { "Content-Type": "application/json" },
|
|
167
|
-
body: {
|
|
168
|
-
collection_id: options.collectionId,
|
|
169
|
-
field_name: options.fieldName,
|
|
170
|
-
filename,
|
|
171
|
-
content_type: contentType
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
const DEFAULT_UPLOAD_TIMEOUT_MS = 6e4;
|
|
176
|
-
async function uploadFile(file, options) {
|
|
177
|
-
const { object_key, upload_url } = await getUploadUrl(file.name, file.type || "application/octet-stream", options);
|
|
178
|
-
if (!upload_url) {
|
|
179
|
-
throw new Error("Missing upload URL in response");
|
|
180
|
-
}
|
|
181
|
-
const base64 = await fileToBase64(file);
|
|
182
|
-
const contentType = file.type || "application/octet-stream";
|
|
183
|
-
const response = await parentApiRequest({
|
|
184
|
-
method: "PUT",
|
|
185
|
-
url: upload_url,
|
|
186
|
-
headers: { "Content-Type": contentType },
|
|
187
|
-
body: base64,
|
|
188
|
-
isBase64: true,
|
|
189
|
-
timeout: options.timeout ?? DEFAULT_UPLOAD_TIMEOUT_MS
|
|
190
|
-
});
|
|
191
|
-
if (!response.ok) {
|
|
192
|
-
throw new BridgeError(`Upload failed: ${response.error || response.status}`, response.status);
|
|
193
|
-
}
|
|
194
|
-
const descriptor = {
|
|
195
|
-
object_key,
|
|
196
|
-
original_name: file.name,
|
|
197
|
-
size: file.size,
|
|
198
|
-
content_type: contentType,
|
|
199
|
-
uploaded_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
200
|
-
};
|
|
201
|
-
return { objectKey: object_key, descriptor };
|
|
202
|
-
}
|
|
203
|
-
async function getDownloadUrl(objectKey) {
|
|
204
|
-
if (!objectKey) throw new Error("Object key is required");
|
|
205
|
-
const response = await request("/pb/uploads/download", {
|
|
206
|
-
method: "POST",
|
|
207
|
-
headers: { "Content-Type": "application/json" },
|
|
208
|
-
body: { object_key: objectKey }
|
|
209
|
-
});
|
|
210
|
-
if (!response?.download_url) {
|
|
211
|
-
throw new Error("Missing download URL in response");
|
|
212
|
-
}
|
|
213
|
-
return response.download_url;
|
|
214
|
-
}
|
|
215
|
-
async function sendEmail(options) {
|
|
216
|
-
if (!options.to || Array.isArray(options.to) && options.to.length === 0) {
|
|
217
|
-
throw new Error("At least one recipient is required");
|
|
218
|
-
}
|
|
219
|
-
if (!options.subject?.trim()) {
|
|
220
|
-
throw new Error("Subject is required");
|
|
221
|
-
}
|
|
222
|
-
if (!options.body_html && !options.body_text) {
|
|
223
|
-
throw new Error("At least one of body_html or body_text is required");
|
|
224
|
-
}
|
|
225
|
-
const payload = {
|
|
226
|
-
to: Array.isArray(options.to) ? options.to : [options.to],
|
|
227
|
-
subject: options.subject
|
|
228
|
-
};
|
|
229
|
-
if (options.body_html) payload.body_html = options.body_html;
|
|
230
|
-
if (options.body_text) payload.body_text = options.body_text;
|
|
231
|
-
if (options.cc) payload.cc = Array.isArray(options.cc) ? options.cc : [options.cc];
|
|
232
|
-
if (options.bcc) payload.bcc = Array.isArray(options.bcc) ? options.bcc : [options.bcc];
|
|
233
|
-
if (options.from_address) payload.from = options.from_address;
|
|
234
|
-
if (options.from_name) payload.from_name = options.from_name;
|
|
235
|
-
if (options.reply_to) payload.reply_to = options.reply_to;
|
|
236
|
-
if (options.tags) payload.tags = options.tags;
|
|
237
|
-
return request("/email/send", {
|
|
238
|
-
method: "POST",
|
|
239
|
-
headers: { "Content-Type": "application/json" },
|
|
240
|
-
body: payload
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
async function pbUpdateRecord(collectionId, recordId, data) {
|
|
244
|
-
return pbUpdate(collectionId, recordId, data);
|
|
245
|
-
}
|
|
246
|
-
export {
|
|
247
|
-
getUploadUrl as a,
|
|
248
|
-
pbBulkUpdate as b,
|
|
249
|
-
pbCreate as c,
|
|
250
|
-
pbDelete as d,
|
|
251
|
-
pbGet as e,
|
|
252
|
-
pbList as f,
|
|
253
|
-
getDownloadUrl as g,
|
|
254
|
-
pbSearch as h,
|
|
255
|
-
pbSql as i,
|
|
256
|
-
pbUpdate as j,
|
|
257
|
-
pbUpdateRecord as k,
|
|
258
|
-
pbUpsert as l,
|
|
259
|
-
pbBulkDelete as p,
|
|
260
|
-
sendEmail as s,
|
|
261
|
-
uploadFile as u
|
|
262
|
-
};
|