@apteva/apteva-kit 0.1.39 → 0.1.41

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/index.js CHANGED
@@ -1290,21 +1290,50 @@ function Message({ message, onAction, enableWidgets, onWidgetRender }) {
1290
1290
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: text });
1291
1291
  }
1292
1292
  const parsed = parseWidgetsFromText(text);
1293
- if (parsed.segments.length === 0) {
1293
+ const cleanedText = parsed.segments.filter((seg) => seg.type === "text" && seg.content).map((seg) => seg.content).join("");
1294
+ if (!cleanedText.trim()) {
1294
1295
  return null;
1295
1296
  }
1296
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: parsed.segments.map((segment, index) => {
1297
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: cleanedText });
1298
+ };
1299
+ const renderContentWithWidgets = () => {
1300
+ if (!enableWidgets || isUser || !message.content) {
1301
+ return null;
1302
+ }
1303
+ const parsed = parseWidgetsFromText(message.content);
1304
+ const elements = [];
1305
+ let textBuffer = "";
1306
+ parsed.segments.forEach((segment, index) => {
1297
1307
  if (segment.type === "text" && segment.content) {
1298
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: segment.content }, `text-${index}`);
1299
- }
1300
- if (segment.type === "widget" && segment.widget) {
1301
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "my-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetRenderer, { widget: segment.widget, onAction }) }, `widget-${index}`);
1302
- }
1303
- if (segment.type === "widget_pending" && segment.pendingType) {
1304
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "my-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetSkeleton, { type: segment.pendingType }) }, `pending-${index}`);
1308
+ textBuffer += segment.content;
1309
+ } else if (segment.type === "widget" && segment.widget) {
1310
+ if (textBuffer.trim()) {
1311
+ elements.push(
1312
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, `text-${index}`)
1313
+ );
1314
+ textBuffer = "";
1315
+ }
1316
+ elements.push(
1317
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetRenderer, { widget: segment.widget, onAction }) }, `widget-${index}`)
1318
+ );
1319
+ } else if (segment.type === "widget_pending" && segment.pendingType) {
1320
+ if (textBuffer.trim()) {
1321
+ elements.push(
1322
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, `text-${index}`)
1323
+ );
1324
+ textBuffer = "";
1325
+ }
1326
+ elements.push(
1327
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetSkeleton, { type: segment.pendingType }) }, `pending-${index}`)
1328
+ );
1305
1329
  }
1306
- return null;
1307
- }) });
1330
+ });
1331
+ if (textBuffer.trim()) {
1332
+ elements.push(
1333
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, "text-final")
1334
+ );
1335
+ }
1336
+ return elements.length > 0 ? elements : null;
1308
1337
  };
1309
1338
  const renderContent = () => {
1310
1339
  if (isUser) {
@@ -1322,6 +1351,45 @@ function Message({ message, onAction, enableWidgets, onWidgetRender }) {
1322
1351
  }
1323
1352
  return renderTextContent(message.content);
1324
1353
  };
1354
+ const renderTextSegmentWithWidgets = (text, keyPrefix) => {
1355
+ if (!enableWidgets) {
1356
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: text }) }) }, keyPrefix);
1357
+ }
1358
+ const parsed = parseWidgetsFromText(text);
1359
+ const elements = [];
1360
+ let textBuffer = "";
1361
+ parsed.segments.forEach((seg, idx) => {
1362
+ if (seg.type === "text" && seg.content) {
1363
+ textBuffer += seg.content;
1364
+ } else if (seg.type === "widget" && seg.widget) {
1365
+ if (textBuffer.trim()) {
1366
+ elements.push(
1367
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-${idx}`)
1368
+ );
1369
+ textBuffer = "";
1370
+ }
1371
+ elements.push(
1372
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetRenderer, { widget: seg.widget, onAction }) }, `${keyPrefix}-widget-${idx}`)
1373
+ );
1374
+ } else if (seg.type === "widget_pending" && seg.pendingType) {
1375
+ if (textBuffer.trim()) {
1376
+ elements.push(
1377
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-${idx}`)
1378
+ );
1379
+ textBuffer = "";
1380
+ }
1381
+ elements.push(
1382
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, WidgetSkeleton, { type: seg.pendingType }) }, `${keyPrefix}-pending-${idx}`)
1383
+ );
1384
+ }
1385
+ });
1386
+ if (textBuffer.trim()) {
1387
+ elements.push(
1388
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-bubble apteva-message-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownContent, { content: textBuffer }) }) }, `${keyPrefix}-text-final`)
1389
+ );
1390
+ }
1391
+ return elements;
1392
+ };
1325
1393
  const renderSegmentedContent = () => {
1326
1394
  if (!contentSegments || contentSegments.length === 0) {
1327
1395
  return null;
@@ -1329,16 +1397,12 @@ function Message({ message, onAction, enableWidgets, onWidgetRender }) {
1329
1397
  const elements = [];
1330
1398
  contentSegments.forEach((segment, index) => {
1331
1399
  if (segment.type === "text" && segment.content) {
1332
- elements.push(
1333
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1334
- "div",
1335
- {
1336
- className: "apteva-message-bubble apteva-message-assistant",
1337
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-content-assistant", children: renderTextContent(segment.content) })
1338
- },
1339
- `text-${index}`
1340
- )
1341
- );
1400
+ const textElements = renderTextSegmentWithWidgets(segment.content, `seg-${index}`);
1401
+ if (Array.isArray(textElements)) {
1402
+ elements.push(...textElements);
1403
+ } else {
1404
+ elements.push(textElements);
1405
+ }
1342
1406
  } else if (segment.type === "tool") {
1343
1407
  elements.push(
1344
1408
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-tool-call-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1356,7 +1420,15 @@ function Message({ message, onAction, enableWidgets, onWidgetRender }) {
1356
1420
  if (!isUser && contentSegments && contentSegments.length > 0) {
1357
1421
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "apteva-message-segmented", children: [
1358
1422
  renderSegmentedContent(),
1359
- message.widgets && message.widgets.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-widgets", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Widgets, { widgets: message.widgets, onAction, layout: "stack" }) }),
1423
+ message.widgets && message.widgets.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Widgets, { widgets: message.widgets, onAction, layout: "stack" }) }),
1424
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-timestamp apteva-message-timestamp-assistant", suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) })
1425
+ ] });
1426
+ }
1427
+ const widgetContent = renderContentWithWidgets();
1428
+ if (!isUser && enableWidgets && widgetContent) {
1429
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "apteva-message-segmented", children: [
1430
+ widgetContent,
1431
+ message.widgets && message.widgets.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Widgets, { widgets: message.widgets, onAction, layout: "stack" }) }),
1360
1432
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-timestamp apteva-message-timestamp-assistant", suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) })
1361
1433
  ] });
1362
1434
  }
@@ -1369,7 +1441,7 @@ function Message({ message, onAction, enableWidgets, onWidgetRender }) {
1369
1441
  ),
1370
1442
  children: [
1371
1443
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: isUser ? "apteva-message-content-user" : "apteva-message-content-assistant", children: renderContent() }),
1372
- message.widgets && message.widgets.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-message-widgets", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Widgets, { widgets: message.widgets, onAction, layout: "stack" }) }),
1444
+ message.widgets && message.widgets.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "apteva-widget-standalone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Widgets, { widgets: message.widgets, onAction, layout: "stack" }) }),
1373
1445
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: cn("apteva-message-timestamp", isUser ? "apteva-message-timestamp-user" : "apteva-message-timestamp-assistant"), suppressHydrationWarning: true, children: message.timestamp.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) })
1374
1446
  ]
1375
1447
  }