@ash-cloud/ash-ui 0.0.2 → 0.0.4

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
@@ -630,6 +630,16 @@ function ClipboardListIcon({ className }) {
630
630
  /* @__PURE__ */ jsx("path", { d: "M8 16h.01" })
631
631
  ] });
632
632
  }
633
+ function SpinnerIcon({ className }) {
634
+ return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) });
635
+ }
636
+ function ErrorIcon({ className }) {
637
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
638
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
639
+ /* @__PURE__ */ jsx("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
640
+ /* @__PURE__ */ jsx("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
641
+ ] });
642
+ }
633
643
  function StatusIndicator({ status, size = "sm", className }) {
634
644
  const sizeClasses = {
635
645
  sm: "w-2 h-2",
@@ -1528,6 +1538,163 @@ function ToolExecutionGroup({
1528
1538
  }
1529
1539
  );
1530
1540
  }
1541
+ function formatDuration(startMs, endMs) {
1542
+ const duration = endMs - startMs;
1543
+ if (duration < 1e3) return `${duration}ms`;
1544
+ return `${(duration / 1e3).toFixed(1)}s`;
1545
+ }
1546
+ function getToolLabel(toolName, summary) {
1547
+ if (summary && summary.length > 0 && summary.length < 50) {
1548
+ return summary;
1549
+ }
1550
+ const cleaned = toolName.replace(/^mcp__[^_]+__/, "").replace(/Tool$/, "").replace(/_/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2");
1551
+ return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);
1552
+ }
1553
+ function toStepStatus(status) {
1554
+ switch (status) {
1555
+ case "pending":
1556
+ return "running";
1557
+ case "success":
1558
+ return "success";
1559
+ case "failed":
1560
+ return "error";
1561
+ default:
1562
+ return "pending";
1563
+ }
1564
+ }
1565
+ function StepIcon({ status }) {
1566
+ const iconClass = "w-3.5 h-3.5";
1567
+ switch (status) {
1568
+ case "running":
1569
+ return /* @__PURE__ */ jsx(SpinnerIcon, { className: cn(iconClass, "animate-spin text-[var(--ash-accent)]") });
1570
+ case "success":
1571
+ return /* @__PURE__ */ jsx(CheckIcon, { className: cn(iconClass, "text-[var(--ash-accent)]") });
1572
+ case "error":
1573
+ return /* @__PURE__ */ jsx(ErrorIcon, { className: cn(iconClass, "text-red-500") });
1574
+ default:
1575
+ return /* @__PURE__ */ jsx(ToolIcon, { className: cn(iconClass, "text-white/40") });
1576
+ }
1577
+ }
1578
+ function StepAccordion({
1579
+ toolCalls,
1580
+ defaultExpanded = false,
1581
+ isExpanded: controlledExpanded,
1582
+ onToggle,
1583
+ className
1584
+ }) {
1585
+ const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
1586
+ const isExpanded = controlledExpanded !== void 0 ? controlledExpanded : internalExpanded;
1587
+ const handleToggle = useCallback(() => {
1588
+ if (onToggle) {
1589
+ onToggle();
1590
+ } else {
1591
+ setInternalExpanded((prev) => !prev);
1592
+ }
1593
+ }, [onToggle]);
1594
+ if (toolCalls.length === 0) {
1595
+ return null;
1596
+ }
1597
+ const completedSteps = toolCalls.filter((tc) => tc.status === "success" || tc.status === "failed").length;
1598
+ const runningStep = toolCalls.find((tc) => tc.status === "pending");
1599
+ const hasError = toolCalls.some((tc) => tc.status === "failed");
1600
+ const allComplete = completedSteps === toolCalls.length;
1601
+ return /* @__PURE__ */ jsxs(
1602
+ "div",
1603
+ {
1604
+ className: cn(
1605
+ "rounded-xl border overflow-hidden",
1606
+ hasError ? "border-red-500/30" : allComplete ? "border-[var(--ash-accent)]/30" : "border-yellow-500/30",
1607
+ className
1608
+ ),
1609
+ children: [
1610
+ /* @__PURE__ */ jsxs(
1611
+ "button",
1612
+ {
1613
+ type: "button",
1614
+ onClick: handleToggle,
1615
+ className: "w-full flex items-center gap-2 px-3 py-2 bg-white/5 hover:bg-white/10 transition-colors text-left cursor-pointer",
1616
+ children: [
1617
+ /* @__PURE__ */ jsx(
1618
+ ChevronDownIcon,
1619
+ {
1620
+ className: cn(
1621
+ "w-4 h-4 text-white/40 transition-transform duration-200 flex-shrink-0",
1622
+ !isExpanded && "-rotate-90"
1623
+ )
1624
+ }
1625
+ ),
1626
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0 flex items-center gap-2", children: runningStep ? /* @__PURE__ */ jsxs(Fragment, { children: [
1627
+ /* @__PURE__ */ jsx(SpinnerIcon, { className: "w-3.5 h-3.5 animate-spin text-[var(--ash-accent)] flex-shrink-0" }),
1628
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-white/80 truncate", children: getToolLabel(runningStep.toolName, runningStep.summary) })
1629
+ ] }) : hasError ? /* @__PURE__ */ jsxs(Fragment, { children: [
1630
+ /* @__PURE__ */ jsx(ErrorIcon, { className: "w-3.5 h-3.5 text-red-500 flex-shrink-0" }),
1631
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-red-400 truncate", children: "Completed with errors" })
1632
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1633
+ /* @__PURE__ */ jsx(CheckIcon, { className: "w-3.5 h-3.5 text-[var(--ash-accent)] flex-shrink-0" }),
1634
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-white/70 truncate", children: [
1635
+ completedSteps,
1636
+ " step",
1637
+ completedSteps !== 1 ? "s" : "",
1638
+ " completed"
1639
+ ] })
1640
+ ] }) }),
1641
+ /* @__PURE__ */ jsxs("span", { className: "text-xs px-1.5 py-0.5 rounded-full bg-white/10 text-white/50 flex-shrink-0", children: [
1642
+ completedSteps,
1643
+ "/",
1644
+ toolCalls.length
1645
+ ] })
1646
+ ]
1647
+ }
1648
+ ),
1649
+ isExpanded && /* @__PURE__ */ jsx("div", { className: "border-t border-white/10 ash-accordion-content", children: /* @__PURE__ */ jsx("div", { className: "divide-y divide-white/5", children: toolCalls.map((toolCall, index) => {
1650
+ const stepStatus = toStepStatus(toolCall.status);
1651
+ const startTime = toolCall.startedAt ? new Date(toolCall.startedAt).getTime() : 0;
1652
+ const endTime = toolCall.completedAt ? new Date(toolCall.completedAt).getTime() : 0;
1653
+ const hasDuration = startTime > 0 && endTime > 0;
1654
+ return /* @__PURE__ */ jsxs(
1655
+ "div",
1656
+ {
1657
+ className: cn(
1658
+ "px-3 py-2 flex items-start gap-2",
1659
+ stepStatus === "running" && "bg-[var(--ash-accent)]/5",
1660
+ stepStatus === "error" && "bg-red-500/5"
1661
+ ),
1662
+ children: [
1663
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 flex-shrink-0 pt-0.5", children: [
1664
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-white/40 w-4 text-right", children: [
1665
+ index + 1,
1666
+ "."
1667
+ ] }),
1668
+ /* @__PURE__ */ jsx(StepIcon, { status: stepStatus })
1669
+ ] }),
1670
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
1671
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1672
+ /* @__PURE__ */ jsx(
1673
+ "span",
1674
+ {
1675
+ className: cn(
1676
+ "text-sm",
1677
+ stepStatus === "running" && "text-[var(--ash-accent)]",
1678
+ stepStatus === "success" && "text-white/70",
1679
+ stepStatus === "error" && "text-red-400",
1680
+ stepStatus === "pending" && "text-white/40"
1681
+ ),
1682
+ children: getToolLabel(toolCall.toolName, toolCall.summary)
1683
+ }
1684
+ ),
1685
+ hasDuration && (stepStatus === "success" || stepStatus === "error") && /* @__PURE__ */ jsx("span", { className: "text-xs text-white/40", children: formatDuration(startTime, endTime) })
1686
+ ] }),
1687
+ toolCall.isError && toolCall.actionType && "result" in toolCall.actionType && /* @__PURE__ */ jsx("p", { className: "text-xs mt-1 text-red-400/80 truncate", children: String(toolCall.actionType.result?.value || "Error") })
1688
+ ] })
1689
+ ]
1690
+ },
1691
+ toolCall.id
1692
+ );
1693
+ }) }) })
1694
+ ]
1695
+ }
1696
+ );
1697
+ }
1531
1698
 
1532
1699
  // src/types.ts
1533
1700
  function isCommandRunAction(action) {
@@ -1646,7 +1813,13 @@ function MessageList({
1646
1813
  const toolCalls = extractToolCallsFromGroup(groupedEntry.entries);
1647
1814
  return /* @__PURE__ */ jsxs("div", { className: "flex gap-3 ash-animate-fade-in", children: [
1648
1815
  /* @__PURE__ */ jsx("div", { className: "w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(BotIcon, { className: "w-4 h-4 text-[var(--ash-accent)]" }) }),
1649
- /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
1816
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children: config.mode === "accordion" ? /* @__PURE__ */ jsx(
1817
+ StepAccordion,
1818
+ {
1819
+ toolCalls,
1820
+ defaultExpanded: config.defaultExpanded
1821
+ }
1822
+ ) : /* @__PURE__ */ jsx(
1650
1823
  ToolExecutionGroup,
1651
1824
  {
1652
1825
  toolCalls,
@@ -1924,6 +2097,238 @@ function TodoPanel({
1924
2097
  }
1925
2098
  );
1926
2099
  }
2100
+ function EnvVarsPanel({
2101
+ envVars,
2102
+ onChange,
2103
+ defaultCollapsed = true,
2104
+ className,
2105
+ label = "Environment Variables",
2106
+ helperText = "These environment variables will be available in the sandbox for new sessions."
2107
+ }) {
2108
+ const [expanded, setExpanded] = useState(!defaultCollapsed);
2109
+ const [newEnvKey, setNewEnvKey] = useState("");
2110
+ const [newEnvValue, setNewEnvValue] = useState("");
2111
+ const hasEnvVars = Object.keys(envVars).length > 0;
2112
+ const handleAddEnvVar = useCallback(() => {
2113
+ const key = newEnvKey.trim();
2114
+ const val = newEnvValue.trim();
2115
+ if (key) {
2116
+ onChange({ ...envVars, [key]: val });
2117
+ setNewEnvKey("");
2118
+ setNewEnvValue("");
2119
+ }
2120
+ }, [envVars, newEnvKey, newEnvValue, onChange]);
2121
+ const handleRemoveEnvVar = useCallback(
2122
+ (key) => {
2123
+ const newEnvVars = { ...envVars };
2124
+ delete newEnvVars[key];
2125
+ onChange(newEnvVars);
2126
+ },
2127
+ [envVars, onChange]
2128
+ );
2129
+ const handleEnvKeyDown = useCallback(
2130
+ (e) => {
2131
+ if (e.key === "Enter") {
2132
+ e.preventDefault();
2133
+ handleAddEnvVar();
2134
+ }
2135
+ },
2136
+ [handleAddEnvVar]
2137
+ );
2138
+ return /* @__PURE__ */ jsxs("div", { className: cn("ash-env-vars-panel", className), children: [
2139
+ /* @__PURE__ */ jsxs(
2140
+ "button",
2141
+ {
2142
+ type: "button",
2143
+ onClick: () => setExpanded(!expanded),
2144
+ className: "ash-env-vars-header",
2145
+ children: [
2146
+ /* @__PURE__ */ jsx(
2147
+ "svg",
2148
+ {
2149
+ xmlns: "http://www.w3.org/2000/svg",
2150
+ className: cn("ash-env-vars-chevron", expanded && "ash-env-vars-chevron-expanded"),
2151
+ viewBox: "0 0 20 20",
2152
+ fill: "currentColor",
2153
+ children: /* @__PURE__ */ jsx(
2154
+ "path",
2155
+ {
2156
+ fillRule: "evenodd",
2157
+ d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",
2158
+ clipRule: "evenodd"
2159
+ }
2160
+ )
2161
+ }
2162
+ ),
2163
+ /* @__PURE__ */ jsx("span", { className: "ash-env-vars-label", children: label }),
2164
+ hasEnvVars && !expanded && /* @__PURE__ */ jsx("span", { className: "ash-env-vars-badge", children: Object.keys(envVars).length })
2165
+ ]
2166
+ }
2167
+ ),
2168
+ expanded && /* @__PURE__ */ jsxs("div", { className: "ash-env-vars-content", children: [
2169
+ Object.entries(envVars).map(([key, val]) => /* @__PURE__ */ jsxs("div", { className: "ash-env-vars-item", children: [
2170
+ /* @__PURE__ */ jsx("span", { className: "ash-env-vars-key", children: key }),
2171
+ /* @__PURE__ */ jsx("span", { className: "ash-env-vars-equals", children: "=" }),
2172
+ /* @__PURE__ */ jsx("span", { className: "ash-env-vars-value", children: val || "(empty)" }),
2173
+ /* @__PURE__ */ jsx(
2174
+ "button",
2175
+ {
2176
+ type: "button",
2177
+ onClick: () => handleRemoveEnvVar(key),
2178
+ className: "ash-env-vars-remove",
2179
+ title: "Remove variable",
2180
+ children: /* @__PURE__ */ jsx(
2181
+ "svg",
2182
+ {
2183
+ xmlns: "http://www.w3.org/2000/svg",
2184
+ className: "w-4 h-4",
2185
+ viewBox: "0 0 20 20",
2186
+ fill: "currentColor",
2187
+ children: /* @__PURE__ */ jsx(
2188
+ "path",
2189
+ {
2190
+ fillRule: "evenodd",
2191
+ d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",
2192
+ clipRule: "evenodd"
2193
+ }
2194
+ )
2195
+ }
2196
+ )
2197
+ }
2198
+ )
2199
+ ] }, key)),
2200
+ /* @__PURE__ */ jsxs("div", { className: "ash-env-vars-add", children: [
2201
+ /* @__PURE__ */ jsx(
2202
+ "input",
2203
+ {
2204
+ type: "text",
2205
+ value: newEnvKey,
2206
+ onChange: (e) => setNewEnvKey(e.target.value.toUpperCase().replace(/[^A-Z0-9_]/g, "")),
2207
+ onKeyDown: handleEnvKeyDown,
2208
+ placeholder: "KEY",
2209
+ className: "ash-env-vars-input ash-env-vars-input-key"
2210
+ }
2211
+ ),
2212
+ /* @__PURE__ */ jsx("span", { className: "ash-env-vars-equals", children: "=" }),
2213
+ /* @__PURE__ */ jsx(
2214
+ "input",
2215
+ {
2216
+ type: "text",
2217
+ value: newEnvValue,
2218
+ onChange: (e) => setNewEnvValue(e.target.value),
2219
+ onKeyDown: handleEnvKeyDown,
2220
+ placeholder: "value",
2221
+ className: "ash-env-vars-input ash-env-vars-input-value"
2222
+ }
2223
+ ),
2224
+ /* @__PURE__ */ jsx(
2225
+ "button",
2226
+ {
2227
+ type: "button",
2228
+ onClick: handleAddEnvVar,
2229
+ disabled: !newEnvKey.trim(),
2230
+ className: "ash-env-vars-add-button",
2231
+ children: "Add"
2232
+ }
2233
+ )
2234
+ ] }),
2235
+ helperText && /* @__PURE__ */ jsx("p", { className: "ash-env-vars-helper", children: helperText })
2236
+ ] })
2237
+ ] });
2238
+ }
2239
+ function DisplayModeToggle({
2240
+ className,
2241
+ showLabel = true,
2242
+ labels = { inline: "Inline", compact: "Compact", accordion: "Steps" },
2243
+ modes = ["inline", "compact", "accordion"]
2244
+ }) {
2245
+ const { config, setMode } = useDisplayMode();
2246
+ const currentMode = config.mode;
2247
+ const currentIndex = modes.indexOf(currentMode);
2248
+ const effectiveIndex = currentIndex === -1 ? 0 : currentIndex;
2249
+ const nextIndex = (effectiveIndex + 1) % modes.length;
2250
+ const nextMode = modes[nextIndex];
2251
+ const handleClick = () => {
2252
+ setMode(nextMode);
2253
+ };
2254
+ const getIcon = (mode) => {
2255
+ switch (mode) {
2256
+ case "inline":
2257
+ return /* @__PURE__ */ jsx(
2258
+ "svg",
2259
+ {
2260
+ className: "ash-display-mode-icon",
2261
+ viewBox: "0 0 24 24",
2262
+ fill: "none",
2263
+ stroke: "currentColor",
2264
+ strokeWidth: "1.5",
2265
+ children: /* @__PURE__ */ jsx(
2266
+ "path",
2267
+ {
2268
+ strokeLinecap: "round",
2269
+ strokeLinejoin: "round",
2270
+ d: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
2271
+ }
2272
+ )
2273
+ }
2274
+ );
2275
+ case "compact":
2276
+ return /* @__PURE__ */ jsx(
2277
+ "svg",
2278
+ {
2279
+ className: "ash-display-mode-icon",
2280
+ viewBox: "0 0 24 24",
2281
+ fill: "none",
2282
+ stroke: "currentColor",
2283
+ strokeWidth: "1.5",
2284
+ children: /* @__PURE__ */ jsx(
2285
+ "path",
2286
+ {
2287
+ strokeLinecap: "round",
2288
+ strokeLinejoin: "round",
2289
+ d: "M3.75 6.75h16.5M3.75 12h16.5M12 17.25h8.25"
2290
+ }
2291
+ )
2292
+ }
2293
+ );
2294
+ case "accordion":
2295
+ return /* @__PURE__ */ jsx(
2296
+ "svg",
2297
+ {
2298
+ className: "ash-display-mode-icon",
2299
+ viewBox: "0 0 24 24",
2300
+ fill: "none",
2301
+ stroke: "currentColor",
2302
+ strokeWidth: "1.5",
2303
+ children: /* @__PURE__ */ jsx(
2304
+ "path",
2305
+ {
2306
+ strokeLinecap: "round",
2307
+ strokeLinejoin: "round",
2308
+ d: "M8.25 6.75h12M8.25 12h12M8.25 17.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z"
2309
+ }
2310
+ )
2311
+ }
2312
+ );
2313
+ }
2314
+ };
2315
+ const getLabel = (mode) => {
2316
+ return labels[mode] || mode.charAt(0).toUpperCase() + mode.slice(1);
2317
+ };
2318
+ return /* @__PURE__ */ jsxs(
2319
+ "button",
2320
+ {
2321
+ type: "button",
2322
+ onClick: handleClick,
2323
+ className: cn("ash-display-mode-toggle", className),
2324
+ title: `Switch to ${nextMode} mode`,
2325
+ children: [
2326
+ getIcon(currentMode),
2327
+ showLabel && /* @__PURE__ */ jsx("span", { className: "ash-display-mode-label", children: getLabel(currentMode) })
2328
+ ]
2329
+ }
2330
+ );
2331
+ }
1927
2332
  var DEFAULT_WORDS = [
1928
2333
  "Thinking",
1929
2334
  "Reasoning",
@@ -2532,6 +2937,6 @@ function useFileUpload({
2532
2937
  };
2533
2938
  }
2534
2939
 
2535
- export { ActionIcon, AlertCircleIcon, AlertTriangleIcon, AssistantMessage, BotIcon, BrainIcon, BugIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleIcon, ClipboardListIcon, CodeBlock, CodeIcon, CompactToolStatusLine, CopyIcon, DEFAULT_DISPLAY_CONFIG, DisplayModeProvider, EditIcon, ErrorMessage, FileIcon, FilePlusIcon, FolderSearchIcon, GlobeIcon, InfoIcon, JsonDisplay, ListChecksIcon, LoaderIcon, LoadingIndicator, LogsPanel, MessageEntry, MessageList, MessageSquareIcon, MoonIcon, OptionCards, PaperclipIcon, PlugIcon, SearchIcon, SendIcon, SparklesIcon, StatusIndicator, StopCircleIcon, StreamingText, SunIcon, TerminalIcon, ThemeProvider, ThinkingMessage, TodoPanel, ToolCallCard, ToolCallMessage, ToolExecutionGroup, ToolIcon, TypewriterText, UserIcon, UserMessage, XCircleIcon, XIcon, allKeyframesCss, borderRadius, cn, colors, createToolCall, extractTextContent, extractToolCallsFromGroup, formatFileSize, formatTimestamp, formatToolName, generateToolSummary, getActionIcon, getActionLabel, groupEntriesForCompactMode, inlineStyles, isCommandRunAction, isErrorEntry, isFileEditAction, isFileReadAction, isFileWriteAction, isGenericToolAction, isGlobAction, isMcpToolAction, isSearchAction, isTodoWriteAction, isToolCallEntry, isWebFetchAction, isWebSearchAction, keyframes, keyframesCss, mapToolToActionType, normalizeToolResult, parseCommandResult, parseMcpToolName, parseOptionsFromContent, shadows, spacing, tokensToCssVariables, transitions, truncate, typography, updateToolCallWithResult, useDisplayConfig, useDisplayMode, useFileUpload, useMessageQueue, useStopExecution, useTheme, widget, zIndex };
2940
+ export { ActionIcon, AlertCircleIcon, AlertTriangleIcon, AssistantMessage, BotIcon, BrainIcon, BugIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleIcon, ClipboardListIcon, CodeBlock, CodeIcon, CompactToolStatusLine, CopyIcon, DEFAULT_DISPLAY_CONFIG, DisplayModeProvider, DisplayModeToggle, EditIcon, EnvVarsPanel, ErrorIcon, ErrorMessage, FileIcon, FilePlusIcon, FolderSearchIcon, GlobeIcon, InfoIcon, JsonDisplay, ListChecksIcon, LoaderIcon, LoadingIndicator, LogsPanel, MessageEntry, MessageList, MessageSquareIcon, MoonIcon, OptionCards, PaperclipIcon, PlugIcon, SearchIcon, SendIcon, SparklesIcon, SpinnerIcon, StatusIndicator, StepAccordion, StopCircleIcon, StreamingText, SunIcon, TerminalIcon, ThemeProvider, ThinkingMessage, TodoPanel, ToolCallCard, ToolCallMessage, ToolExecutionGroup, ToolIcon, TypewriterText, UserIcon, UserMessage, XCircleIcon, XIcon, allKeyframesCss, borderRadius, cn, colors, createToolCall, extractTextContent, extractToolCallsFromGroup, formatFileSize, formatTimestamp, formatToolName, generateToolSummary, getActionIcon, getActionLabel, groupEntriesForCompactMode, inlineStyles, isCommandRunAction, isErrorEntry, isFileEditAction, isFileReadAction, isFileWriteAction, isGenericToolAction, isGlobAction, isMcpToolAction, isSearchAction, isTodoWriteAction, isToolCallEntry, isWebFetchAction, isWebSearchAction, keyframes, keyframesCss, mapToolToActionType, normalizeToolResult, parseCommandResult, parseMcpToolName, parseOptionsFromContent, shadows, spacing, tokensToCssVariables, transitions, truncate, typography, updateToolCallWithResult, useDisplayConfig, useDisplayMode, useFileUpload, useMessageQueue, useStopExecution, useTheme, widget, zIndex };
2536
2941
  //# sourceMappingURL=index.js.map
2537
2942
  //# sourceMappingURL=index.js.map