@neeter/react
Advanced tools
@@ -8,2 +8,5 @@ import { jsx as _jsx } from "react/jsx-runtime"; | ||
| strong: ({ children }) => _jsx("strong", { className: "font-semibold", children: children }), | ||
| table: ({ children }) => (_jsx("table", { className: "mb-2 w-full border-collapse text-sm last:mb-0", children: children })), | ||
| th: ({ children }) => (_jsx("th", { className: "border border-border px-2 py-1 text-left font-semibold bg-muted/50", children: children })), | ||
| td: ({ children }) => _jsx("td", { className: "border border-border px-2 py-1", children: children }), | ||
| }; |
| import { jsx as _jsx } from "react/jsx-runtime"; | ||
| import Markdown from "react-markdown"; | ||
| import remarkGfm from "remark-gfm"; | ||
| import { cn } from "./cn.js"; | ||
@@ -7,3 +8,3 @@ import { markdownComponents } from "./markdown-overrides.js"; | ||
| const isUser = role === "user"; | ||
| return (_jsx("div", { className: cn("flex", isUser ? "justify-end" : "justify-start", className), children: _jsx("div", { className: cn("max-w-[85%] rounded-lg px-3 py-2 text-sm overflow-hidden break-words", isUser ? "bg-primary text-primary-foreground" : "bg-muted text-foreground"), children: isUser ? (_jsx("span", { className: "whitespace-pre-wrap", children: content })) : (_jsx("div", { className: "[&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { components: markdownComponents, children: content }) })) }) })); | ||
| return (_jsx("div", { className: cn("flex", isUser ? "justify-end" : "justify-start", className), children: _jsx("div", { className: cn("max-w-[85%] rounded-lg px-3 py-2 text-sm overflow-hidden break-words", isUser ? "bg-primary text-primary-foreground" : "bg-muted text-foreground"), children: isUser ? (_jsx("span", { className: "whitespace-pre-wrap", children: content })) : (_jsx("div", { className: "[&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { remarkPlugins: [remarkGfm], components: markdownComponents, children: content }) })) }) })); | ||
| } |
| import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; | ||
| import { useCallback, useState } from "react"; | ||
| import Markdown from "react-markdown"; | ||
| import remarkGfm from "remark-gfm"; | ||
| import { cn } from "./cn.js"; | ||
@@ -37,3 +38,3 @@ import { ChevronIcon } from "./icons.js"; | ||
| function ThinkingContent({ children }) { | ||
| return (_jsx("div", { className: "text-xs text-muted-foreground/70 italic [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { components: markdownComponents, children: children }) })); | ||
| return (_jsx("div", { className: "text-xs text-muted-foreground/70 italic [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { remarkPlugins: [remarkGfm], components: markdownComponents, children: children }) })); | ||
| } |
| import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; | ||
| import Markdown from "react-markdown"; | ||
| import remarkGfm from "remark-gfm"; | ||
| import { markdownComponents } from "../markdown-overrides.js"; | ||
@@ -37,3 +38,3 @@ import { registerWidget } from "../registry.js"; | ||
| const url = typeof input.url === "string" ? input.url : null; | ||
| return (_jsxs("div", { className: "py-1 space-y-1.5 text-xs", children: [url && (_jsxs("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1.5 rounded-full bg-accent px-2.5 py-1 text-[11px] leading-none whitespace-nowrap max-w-[280px] text-muted-foreground no-underline hover:bg-accent/80 hover:text-primary transition-colors", children: [_jsx("img", { src: faviconUrl(url), alt: "", width: 14, height: 14, className: "rounded-full shrink-0" }), _jsx("span", { className: "truncate", children: domain(url) })] })), _jsx("div", { className: "text-foreground leading-relaxed [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { components: markdownComponents, children: result }) })] })); | ||
| return (_jsxs("div", { className: "py-1 space-y-1.5 text-xs", children: [url && (_jsxs("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1.5 rounded-full bg-accent px-2.5 py-1 text-[11px] leading-none whitespace-nowrap max-w-[280px] text-muted-foreground no-underline hover:bg-accent/80 hover:text-primary transition-colors", children: [_jsx("img", { src: faviconUrl(url), alt: "", width: 14, height: 14, className: "rounded-full shrink-0" }), _jsx("span", { className: "truncate", children: domain(url) })] })), _jsx("div", { className: "text-foreground leading-relaxed [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: _jsx(Markdown, { remarkPlugins: [remarkGfm], components: markdownComponents, children: result }) })] })); | ||
| } | ||
@@ -40,0 +41,0 @@ registerWidget({ |
+4
-2
| { | ||
| "name": "@neeter/react", | ||
| "version": "0.10.3", | ||
| "version": "0.10.4", | ||
| "description": "React components and hooks for building chat UIs on top of the Claude Agent SDK", | ||
@@ -29,3 +29,3 @@ "license": "MIT", | ||
| "tailwind-merge": "^3.4.0", | ||
| "@neeter/types": "0.10.3" | ||
| "@neeter/types": "0.10.4" | ||
| }, | ||
@@ -36,2 +36,3 @@ "peerDependencies": { | ||
| "react-markdown": ">=10.0.0", | ||
| "remark-gfm": "^4.0.1", | ||
| "zustand": ">=5.0.0" | ||
@@ -47,2 +48,3 @@ }, | ||
| "react-dom": "^19.2.4", | ||
| "remark-gfm": "^4.0.1", | ||
| "zustand": "^5.0.11" | ||
@@ -49,0 +51,0 @@ }, |
101883
0.62%1947
0.36%8
14.29%9
12.5%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
Updated