@icanbwell/baileyai-chat-ui 1.0.4 → 1.0.6

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.d.ts CHANGED
@@ -168,6 +168,15 @@ export declare interface BaileyChatTransport {
168
168
  }>;
169
169
  }
170
170
 
171
+ export declare type BaileyContentPart = {
172
+ type: 'text';
173
+ text: string;
174
+ } | {
175
+ type: 'image';
176
+ src: string;
177
+ alt?: string;
178
+ };
179
+
171
180
  export declare interface BaileyLastRequest {
172
181
  model: string;
173
182
  systemPrompt: string;
@@ -204,6 +213,13 @@ export declare interface BaileyMessage {
204
213
  id: string;
205
214
  role: 'user' | 'assistant';
206
215
  content: string;
216
+ /** Additional structured content beyond `content` — currently only used to attach one or
217
+ * more images to an assistant message, rendered inline in BaileyChatPanel's transcript via
218
+ * ToolResultImage. Optional and purely additive: a message without `parts` renders exactly
219
+ * as it did before this field existed. Nothing in this package infers a `parts` entry from
220
+ * tool output automatically — a host/transport sets this directly once it knows a turn
221
+ * produced image content (see docs/superpowers/specs/2026-09-19-tool-result-image-rendering-design.md). */
222
+ parts?: BaileyContentPart[];
207
223
  streaming?: boolean;
208
224
  /** When this message was created, stamped by useBaileyChat. Optional so hosts constructing
209
225
  * BaileyMessage objects by hand (e.g. tests, seed data) aren't forced to supply it. */
@@ -359,7 +375,16 @@ export declare interface CopyMarkdownButtonProps {
359
375
 
360
376
  export declare function createBaileyMarkdownComponents({ renderTable, renderChart }?: BaileyMarkdownRenderers): Components;
361
377
 
362
- export declare function extractPseudoToolCalls(text: string): ExtractPseudoToolCallsResult;
378
+ export declare function extractPseudoToolCalls(text: string, options?: ExtractPseudoToolCallsOptions): ExtractPseudoToolCallsResult;
379
+
380
+ declare interface ExtractPseudoToolCallsOptions {
381
+ /** Hide a still-open (unclosed) recognized tag from cleanedText, the same as a completed
382
+ * block. Defaults to true for mid-stream calls, where the tag is expected to close on a later
383
+ * delta. Pass false once the stream has ended (no later delta is coming) so a tag that never
384
+ * closed - a truncated response, or a malformed tag - stays visible instead of being silently
385
+ * and permanently swallowed. */
386
+ hideOpenBlock?: boolean;
387
+ }
363
388
 
364
389
  declare interface ExtractPseudoToolCallsResult {
365
390
  /** `text` with every matched block removed. */
@@ -2,6 +2,9 @@
2
2
  var e = /^(https?|mailto):/i, t = (e) => e.replace(/[\t\n\r]/g, "").trim(), n = (n) => {
3
3
  let r = t(n);
4
4
  return !/^[a-z][a-z0-9+.-]*:/i.test(r) || e.test(r);
5
+ }, r = /^https:\/\//i, i = /^data:image\/(png|jpe?g|gif|webp);base64,[a-z0-9+/]+=*$/i, a = 2097152, o = (e) => {
6
+ let n = t(e);
7
+ return r.test(n) ? !0 : n.length <= a && i.test(n);
5
8
  };
6
9
  //#endregion
7
- export { n as t };
10
+ export { n, o as t };
@@ -0,0 +1 @@
1
+ var e=/^(https?|mailto):/i,t=e=>e.replace(/[\t\n\r]/g,``).trim(),n=n=>{let r=t(n);return!/^[a-z][a-z0-9+.-]*:/i.test(r)||e.test(r)},r=/^https:\/\//i,i=/^data:image\/(png|jpe?g|gif|webp);base64,[a-z0-9+/]+=*$/i,a=2097152,o=e=>{let n=t(e);return r.test(n)?!0:n.length<=a&&i.test(n)};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
package/dist/table.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./safeMarkdownUrl-DsMPGzpD.cjs");let t=require("react"),n=require("react/jsx-runtime"),r=require("@mui/material"),i=require("ag-grid-react"),a=require("ag-grid-community");a.ModuleRegistry.registerModules([a.ColumnAutoSizeModule,a.ColumnHoverModule,a.RowAutoHeightModule,a.RowStyleModule,a.TooltipModule,a.TextFilterModule,a.NumberFilterModule,a.ClientSideRowModelModule]);var o={resizable:!0,sortable:!0,filter:!0},s=t=>{let i=t.colDef?.field?t.data?.[`${t.colDef.field}Href`]:void 0;return typeof i!=`string`||!e.t(i)?(0,n.jsx)(n.Fragment,{children:t.value}):(0,n.jsx)(r.Link,{href:i,target:`_blank`,rel:`noopener noreferrer`,children:t.value})},c=e=>e.trim()!==``&&Number.isFinite(Number(e)),l=({headers:e,rows:l,theme:u=a.themeBalham})=>{let{columnDefs:d,rowData:f}=(0,t.useMemo)(()=>{let t=e.map((e,t)=>l.some(e=>e[t]?.href)),n=e.map((e,n)=>{if(t[n])return!1;let r=l.map(e=>e[n]).filter(e=>!!e?.text.trim());return r.length>0&&r.every(e=>c(e.text))});return{columnDefs:e.map((e,r)=>({headerName:e,field:`col${r}`,...n[r]?{cellDataType:`number`}:{},...t[r]?{cellRenderer:s}:{}})),rowData:l.map(e=>e.reduce((e,t,r)=>{let i=`col${r}`,a=t.text.trim()===``;return e[i]=n[r]?a?null:Number(t.text):t.text,t.href&&(e[`${i}Href`]=t.href),e},{}))}},[e,l]);return(0,n.jsx)(r.Box,{sx:{width:`100%`,my:1},children:(0,n.jsx)(i.AgGridReact,{theme:u,columnDefs:d,rowData:f,defaultColDef:o,domLayout:`autoHeight`})})};exports.BaileyTable=l;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./safeMarkdownUrl-CnpKNwAf.cjs");let t=require("react"),n=require("react/jsx-runtime"),r=require("@mui/material"),i=require("ag-grid-react"),a=require("ag-grid-community");a.ModuleRegistry.registerModules([a.ColumnAutoSizeModule,a.ColumnHoverModule,a.RowAutoHeightModule,a.RowStyleModule,a.TooltipModule,a.TextFilterModule,a.NumberFilterModule,a.ClientSideRowModelModule]);var o={resizable:!0,sortable:!0,filter:!0},s=t=>{let i=t.colDef?.field?t.data?.[`${t.colDef.field}Href`]:void 0;return typeof i!=`string`||!e.n(i)?(0,n.jsx)(n.Fragment,{children:t.value}):(0,n.jsx)(r.Link,{href:i,target:`_blank`,rel:`noopener noreferrer`,children:t.value})},c=e=>e.trim()!==``&&Number.isFinite(Number(e)),l=({headers:e,rows:l,theme:u=a.themeBalham})=>{let{columnDefs:d,rowData:f}=(0,t.useMemo)(()=>{let t=e.map((e,t)=>l.some(e=>e[t]?.href)),n=e.map((e,n)=>{if(t[n])return!1;let r=l.map(e=>e[n]).filter(e=>!!e?.text.trim());return r.length>0&&r.every(e=>c(e.text))});return{columnDefs:e.map((e,r)=>({headerName:e,field:`col${r}`,...n[r]?{cellDataType:`number`}:{},...t[r]?{cellRenderer:s}:{}})),rowData:l.map(e=>e.reduce((e,t,r)=>{let i=`col${r}`,a=t.text.trim()===``;return e[i]=n[r]?a?null:Number(t.text):t.text,t.href&&(e[`${i}Href`]=t.href),e},{}))}},[e,l]);return(0,n.jsx)(r.Box,{sx:{width:`100%`,my:1},children:(0,n.jsx)(i.AgGridReact,{theme:u,columnDefs:d,rowData:f,defaultColDef:o,domLayout:`autoHeight`})})};exports.BaileyTable=l;
package/dist/table.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./safeMarkdownUrl-xI42YYzd.js";
1
+ import { n as e } from "./safeMarkdownUrl-Bqv6Q4u1.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { Fragment as n, jsx as r } from "react/jsx-runtime";
4
4
  import { Box as i, Link as a } from "@mui/material";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icanbwell/baileyai-chat-ui",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Shared React chat UI and streaming logic for Bailey, the icanbwell AI assistant",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- var e=/^(https?|mailto):/i,t=e=>e.replace(/[\t\n\r]/g,``).trim(),n=n=>{let r=t(n);return!/^[a-z][a-z0-9+.-]*:/i.test(r)||e.test(r)};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});