@pactor-app/ui 1.23.0 → 1.24.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.
@@ -8146,7 +8146,7 @@ function ChatMessage({
8146
8146
 
8147
8147
  // src/components/chat/ChatPage/index.tsx
8148
8148
  import { useRenderer as useRenderer18 } from "@pactor-app/runtime";
8149
- import { isValidElement as isValidElement2, useState as useState44 } from "react";
8149
+ import { isValidElement as isValidElement2, useEffect as useEffect36, useState as useState44 } from "react";
8150
8150
 
8151
8151
  // src/components/chat/Composer/index.tsx
8152
8152
  import {
@@ -8984,6 +8984,10 @@ function ChatPage({
8984
8984
  conversationTitle,
8985
8985
  conversationHeaderAction,
8986
8986
  onConversationHeaderAction,
8987
+ conversationRailItems = [],
8988
+ hideArtifactRailItem = false,
8989
+ activeConversationRailKey,
8990
+ onConversationRailChange,
8987
8991
  messages = [],
8988
8992
  sending,
8989
8993
  composerPlaceholder,
@@ -9024,6 +9028,51 @@ function ChatPage({
9024
9028
  if (!controlled) setInnerOpen(next);
9025
9029
  onArtifactOpenChange?.(next);
9026
9030
  };
9031
+ const railControlled = activeConversationRailKey !== void 0;
9032
+ const [activeRailInner, setActiveRailInner] = useState44(null);
9033
+ const activeRailKey = railControlled ? activeConversationRailKey : activeRailInner;
9034
+ const setActiveRailKey = (next) => {
9035
+ if (!railControlled) setActiveRailInner(next);
9036
+ onConversationRailChange?.(next);
9037
+ };
9038
+ const visibleRailItems = conversationRailItems.filter((item) => item.hidden !== true);
9039
+ const activeRailItem = visibleRailItems.find(
9040
+ (item) => item.key === activeRailKey
9041
+ );
9042
+ const activePanelItem = activeRailItem?.display === "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
9043
+ const activePopoverItem = activeRailItem !== void 0 && activeRailItem.display !== "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
9044
+ const toggleRailItem = (item) => {
9045
+ const next = activeRailKey === item.key ? null : item.key;
9046
+ if (next !== null && item.display === "panel") {
9047
+ setOpen(false);
9048
+ }
9049
+ setActiveRailKey(next);
9050
+ };
9051
+ const toggleArtifact = () => {
9052
+ if (!open && activePanelItem) {
9053
+ setActiveRailKey(null);
9054
+ }
9055
+ setOpen(!open);
9056
+ };
9057
+ useEffect36(() => {
9058
+ if (!activePopoverItem) return;
9059
+ const onKeyDown = (event) => {
9060
+ if (event.key === "Escape") setActiveRailKey(null);
9061
+ };
9062
+ const onPointerDown = (event) => {
9063
+ const target = event.target;
9064
+ if (target.closest("[data-slot=chat-page-rail-popover]") || target.closest("[data-slot=chat-page-conv-rail]")) {
9065
+ return;
9066
+ }
9067
+ setActiveRailKey(null);
9068
+ };
9069
+ document.addEventListener("keydown", onKeyDown);
9070
+ document.addEventListener("mousedown", onPointerDown);
9071
+ return () => {
9072
+ document.removeEventListener("keydown", onKeyDown);
9073
+ document.removeEventListener("mousedown", onPointerDown);
9074
+ };
9075
+ });
9027
9076
  const { renderChildren } = useRenderer18();
9028
9077
  const renderSlot = (slot) => isValidElement2(slot) || typeof slot !== "object" || slot === null ? slot : renderChildren([slot]);
9029
9078
  const convCollControlled = conversationSectionCollapsed !== void 0;
@@ -9055,10 +9104,58 @@ function ChatPage({
9055
9104
  onClick: () => onMenuSelect?.(item.key)
9056
9105
  }
9057
9106
  ) }, item.key);
9107
+ const convRailButton = (item, active, onClick) => {
9108
+ const button = /* @__PURE__ */ jsx127(
9109
+ Button2,
9110
+ {
9111
+ icon: item.icon,
9112
+ variant: "text",
9113
+ className: cn(active ? "bg-accent text-accent-foreground" : void 0, "px-2"),
9114
+ onClick
9115
+ }
9116
+ );
9117
+ return item.label !== void 0 ? /* @__PURE__ */ jsx127(Tooltip2, { content: item.label, side: "left", children: button }, item.key) : /* @__PURE__ */ jsx127("span", { children: button }, item.key);
9118
+ };
9119
+ const convRailVisible = !hideArtifactRailItem || visibleRailItems.length > 0;
9120
+ const convRail = convRailVisible ? /* @__PURE__ */ jsxs90(
9121
+ "div",
9122
+ {
9123
+ "data-slot": "chat-page-conv-rail",
9124
+ className: "relative flex w-(--pactor-chat-rail-width) shrink-0 flex-col items-center gap-1 px-1 py-2",
9125
+ children: [
9126
+ !hideArtifactRailItem ? convRailButton(
9127
+ {
9128
+ key: "artifact",
9129
+ icon: open ? "panel-right-close" : "package",
9130
+ label: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle
9131
+ },
9132
+ open,
9133
+ toggleArtifact
9134
+ ) : null,
9135
+ visibleRailItems.map(
9136
+ (item) => convRailButton(item, activeRailKey === item.key, () => toggleRailItem(item))
9137
+ ),
9138
+ activePopoverItem ? /* @__PURE__ */ jsx127(
9139
+ "div",
9140
+ {
9141
+ "data-slot": "chat-page-rail-popover",
9142
+ className: "absolute right-full top-0 z-10 mr-2 overflow-auto rounded-lg border border-border bg-popover shadow-md",
9143
+ style: {
9144
+ width: "var(--pactor-chat-rail-popover-width)",
9145
+ maxWidth: "calc(100cqw - 2rem)",
9146
+ maxHeight: "calc(100% - 1rem)"
9147
+ },
9148
+ children: renderSlot(activePopoverItem.content)
9149
+ }
9150
+ ) : null
9151
+ ]
9152
+ }
9153
+ ) : null;
9058
9154
  const chatArea = /* @__PURE__ */ jsxs90("div", { "data-slot": "chat-page-conversation", className: "flex h-full min-w-0 flex-1 flex-col", children: [
9059
9155
  /* @__PURE__ */ jsxs90(
9060
9156
  "div",
9061
9157
  {
9158
+ "data-slot": "chat-page-conversation-header",
9062
9159
  className: "flex shrink-0 items-center justify-between border-b border-border px-4 py-2.5",
9063
9160
  children: [
9064
9161
  /* @__PURE__ */ jsx127(Text, { text: conversationTitle, strong: true }),
@@ -9070,66 +9167,62 @@ function ChatPage({
9070
9167
  variant: "text",
9071
9168
  onClick: () => onConversationHeaderAction?.()
9072
9169
  }
9073
- ) }) : /* @__PURE__ */ jsx127(Tooltip2, { content: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle, side: "bottom", children: /* @__PURE__ */ jsx127(
9074
- Button2,
9075
- {
9076
- icon: open ? "panel-right-close" : "panel-right-open",
9077
- variant: "text",
9078
- onClick: () => setOpen(!open)
9079
- }
9080
- ) })
9170
+ ) }) : null
9081
9171
  ]
9082
9172
  }
9083
9173
  ),
9084
- /* @__PURE__ */ jsxs90(
9085
- "div",
9086
- {
9087
- "data-slot": "chat-page-conversation-body",
9088
- className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-1 flex-col",
9089
- children: [
9090
- messages.length === 0 ? /* @__PURE__ */ jsx127(
9091
- Welcome,
9092
- {
9093
- title: welcome?.title,
9094
- description: welcome?.description,
9095
- prompts: welcome?.prompts,
9096
- style: { flex: 1 },
9097
- onSelect: (value) => onSend?.(value)
9098
- }
9099
- ) : /* @__PURE__ */ jsx127(
9100
- MessageList,
9101
- {
9102
- messages,
9103
- className: "scrollbar-subtle",
9104
- style: { flex: 1, minHeight: 0, padding: 16 },
9105
- onAction: onMessageAction,
9106
- onOpenArtifacts: () => setOpen(true)
9107
- }
9108
- ),
9109
- /* @__PURE__ */ jsx127(
9110
- Composer,
9111
- {
9112
- placeholder: composerPlaceholder,
9113
- loading: sending,
9114
- models,
9115
- model,
9116
- contexts,
9117
- contextItems,
9118
- attachments,
9119
- footer: composerFooter,
9120
- style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
9121
- onModelChange,
9122
- onContextItemsChange,
9123
- onAttachFiles,
9124
- onRemoveAttachment,
9125
- onRetryAttachment,
9126
- onSubmit: (text) => onSend?.(text)
9127
- }
9128
- ),
9129
- composerBottom ? /* @__PURE__ */ jsx127("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
9130
- ]
9131
- }
9132
- )
9174
+ /* @__PURE__ */ jsxs90("div", { className: "flex min-h-0 flex-1", children: [
9175
+ /* @__PURE__ */ jsxs90(
9176
+ "div",
9177
+ {
9178
+ "data-slot": "chat-page-conversation-body",
9179
+ className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-col",
9180
+ children: [
9181
+ messages.length === 0 ? /* @__PURE__ */ jsx127(
9182
+ Welcome,
9183
+ {
9184
+ title: welcome?.title,
9185
+ description: welcome?.description,
9186
+ prompts: welcome?.prompts,
9187
+ style: { flex: 1 },
9188
+ onSelect: (value) => onSend?.(value)
9189
+ }
9190
+ ) : /* @__PURE__ */ jsx127(
9191
+ MessageList,
9192
+ {
9193
+ messages,
9194
+ className: "scrollbar-subtle",
9195
+ style: { flex: 1, minHeight: 0, padding: 16 },
9196
+ onAction: onMessageAction,
9197
+ onOpenArtifacts: () => setOpen(true)
9198
+ }
9199
+ ),
9200
+ /* @__PURE__ */ jsx127(
9201
+ Composer,
9202
+ {
9203
+ placeholder: composerPlaceholder,
9204
+ loading: sending,
9205
+ models,
9206
+ model,
9207
+ contexts,
9208
+ contextItems,
9209
+ attachments,
9210
+ footer: composerFooter,
9211
+ style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
9212
+ onModelChange,
9213
+ onContextItemsChange,
9214
+ onAttachFiles,
9215
+ onRemoveAttachment,
9216
+ onRetryAttachment,
9217
+ onSubmit: (text) => onSend?.(text)
9218
+ }
9219
+ ),
9220
+ composerBottom ? /* @__PURE__ */ jsx127("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
9221
+ ]
9222
+ }
9223
+ ),
9224
+ convRail
9225
+ ] })
9133
9226
  ] });
9134
9227
  const activeArtifact = artifacts.find((item) => item.id === activeArtifactId) ?? (activeArtifactId === void 0 || activeArtifactId === "" ? artifacts[artifacts.length - 1] : void 0);
9135
9228
  const artifactPanel = /* @__PURE__ */ jsx127(
@@ -9261,10 +9354,17 @@ function ChatPage({
9261
9354
  ]
9262
9355
  }
9263
9356
  ),
9264
- /* @__PURE__ */ jsx127("div", { className: "@container h-full min-w-0 flex-1", children: open ? /* @__PURE__ */ jsxs90(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
9357
+ /* @__PURE__ */ jsx127("div", { className: "@container h-full min-w-0 flex-1", children: open || activePanelItem ? /* @__PURE__ */ jsxs90(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
9265
9358
  /* @__PURE__ */ jsx127(Panel, { defaultSize: "62%", children: chatArea }),
9266
9359
  /* @__PURE__ */ jsx127(ResizableHandle, { withHandle: true }),
9267
- /* @__PURE__ */ jsx127(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: artifactPanel })
9360
+ /* @__PURE__ */ jsx127(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: activePanelItem ? /* @__PURE__ */ jsx127(
9361
+ "div",
9362
+ {
9363
+ "data-slot": "chat-page-rail-panel",
9364
+ className: "flex h-full min-w-0 flex-col border-l border-border bg-muted",
9365
+ children: renderSlot(activePanelItem.content)
9366
+ }
9367
+ ) : artifactPanel })
9268
9368
  ] }) : chatArea })
9269
9369
  ]
9270
9370
  }
@@ -9340,7 +9440,7 @@ function Suggestion({ items = [], justify = "start", onSelect, className, style
9340
9440
  }
9341
9441
 
9342
9442
  // src/components/chart/EChartBase/index.tsx
9343
- import { useEffect as useEffect36, useRef as useRef11, useState as useState45 } from "react";
9443
+ import { useEffect as useEffect37, useRef as useRef11, useState as useState45 } from "react";
9344
9444
 
9345
9445
  // src/components/chart/echarts-modules.ts
9346
9446
  import * as echarts from "echarts/core";
@@ -9406,7 +9506,7 @@ function EChartBase({
9406
9506
  const onSelectRef = useRef11(onSelect);
9407
9507
  onSelectRef.current = onSelect;
9408
9508
  const [failed, setFailed] = useState45(false);
9409
- useEffect36(() => {
9509
+ useEffect37(() => {
9410
9510
  const host = hostRef.current;
9411
9511
  if (!host) return;
9412
9512
  let chart = null;
@@ -9433,7 +9533,7 @@ function EChartBase({
9433
9533
  chartRef.current = null;
9434
9534
  };
9435
9535
  }, []);
9436
- useEffect36(() => {
9536
+ useEffect37(() => {
9437
9537
  try {
9438
9538
  chartRef.current?.setOption(option, { notMerge: true });
9439
9539
  } catch {
@@ -10375,7 +10475,7 @@ function LineChart2({
10375
10475
  }
10376
10476
 
10377
10477
  // src/components/chart/MapChart/index.tsx
10378
- import { useEffect as useEffect37, useState as useState46 } from "react";
10478
+ import { useEffect as useEffect38, useState as useState46 } from "react";
10379
10479
  import { jsx as jsx141 } from "react/jsx-runtime";
10380
10480
  var fetchedMaps = /* @__PURE__ */ new Set();
10381
10481
  function hasRegisteredMap(mapName) {
@@ -10408,7 +10508,7 @@ function MapChart2({
10408
10508
  } catch {
10409
10509
  }
10410
10510
  }
10411
- useEffect37(() => {
10511
+ useEffect38(() => {
10412
10512
  if (geoJson || !geoJsonUrl || hasRegisteredMap(mapName) || fetchedMaps.has(mapName)) {
10413
10513
  setLoadState("idle");
10414
10514
  return;
@@ -13240,6 +13240,10 @@ function ChatPage({
13240
13240
  conversationTitle,
13241
13241
  conversationHeaderAction,
13242
13242
  onConversationHeaderAction,
13243
+ conversationRailItems = [],
13244
+ hideArtifactRailItem = false,
13245
+ activeConversationRailKey,
13246
+ onConversationRailChange,
13243
13247
  messages = [],
13244
13248
  sending,
13245
13249
  composerPlaceholder,
@@ -13280,6 +13284,51 @@ function ChatPage({
13280
13284
  if (!controlled) setInnerOpen(next);
13281
13285
  onArtifactOpenChange?.(next);
13282
13286
  };
13287
+ const railControlled = activeConversationRailKey !== void 0;
13288
+ const [activeRailInner, setActiveRailInner] = (0, import_react67.useState)(null);
13289
+ const activeRailKey = railControlled ? activeConversationRailKey : activeRailInner;
13290
+ const setActiveRailKey = (next) => {
13291
+ if (!railControlled) setActiveRailInner(next);
13292
+ onConversationRailChange?.(next);
13293
+ };
13294
+ const visibleRailItems = conversationRailItems.filter((item) => item.hidden !== true);
13295
+ const activeRailItem = visibleRailItems.find(
13296
+ (item) => item.key === activeRailKey
13297
+ );
13298
+ const activePanelItem = activeRailItem?.display === "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
13299
+ const activePopoverItem = activeRailItem !== void 0 && activeRailItem.display !== "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
13300
+ const toggleRailItem = (item) => {
13301
+ const next = activeRailKey === item.key ? null : item.key;
13302
+ if (next !== null && item.display === "panel") {
13303
+ setOpen(false);
13304
+ }
13305
+ setActiveRailKey(next);
13306
+ };
13307
+ const toggleArtifact = () => {
13308
+ if (!open && activePanelItem) {
13309
+ setActiveRailKey(null);
13310
+ }
13311
+ setOpen(!open);
13312
+ };
13313
+ (0, import_react67.useEffect)(() => {
13314
+ if (!activePopoverItem) return;
13315
+ const onKeyDown = (event) => {
13316
+ if (event.key === "Escape") setActiveRailKey(null);
13317
+ };
13318
+ const onPointerDown = (event) => {
13319
+ const target = event.target;
13320
+ if (target.closest("[data-slot=chat-page-rail-popover]") || target.closest("[data-slot=chat-page-conv-rail]")) {
13321
+ return;
13322
+ }
13323
+ setActiveRailKey(null);
13324
+ };
13325
+ document.addEventListener("keydown", onKeyDown);
13326
+ document.addEventListener("mousedown", onPointerDown);
13327
+ return () => {
13328
+ document.removeEventListener("keydown", onKeyDown);
13329
+ document.removeEventListener("mousedown", onPointerDown);
13330
+ };
13331
+ });
13283
13332
  const { renderChildren } = (0, import_runtime26.useRenderer)();
13284
13333
  const renderSlot = (slot) => (0, import_react67.isValidElement)(slot) || typeof slot !== "object" || slot === null ? slot : renderChildren([slot]);
13285
13334
  const convCollControlled = conversationSectionCollapsed !== void 0;
@@ -13311,10 +13360,58 @@ function ChatPage({
13311
13360
  onClick: () => onMenuSelect?.(item.key)
13312
13361
  }
13313
13362
  ) }, item.key);
13363
+ const convRailButton = (item, active, onClick) => {
13364
+ const button = /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13365
+ Button2,
13366
+ {
13367
+ icon: item.icon,
13368
+ variant: "text",
13369
+ className: cn(active ? "bg-accent text-accent-foreground" : void 0, "px-2"),
13370
+ onClick
13371
+ }
13372
+ );
13373
+ return item.label !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Tooltip2, { content: item.label, side: "left", children: button }, item.key) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("span", { children: button }, item.key);
13374
+ };
13375
+ const convRailVisible = !hideArtifactRailItem || visibleRailItems.length > 0;
13376
+ const convRail = convRailVisible ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13377
+ "div",
13378
+ {
13379
+ "data-slot": "chat-page-conv-rail",
13380
+ className: "relative flex w-(--pactor-chat-rail-width) shrink-0 flex-col items-center gap-1 px-1 py-2",
13381
+ children: [
13382
+ !hideArtifactRailItem ? convRailButton(
13383
+ {
13384
+ key: "artifact",
13385
+ icon: open ? "panel-right-close" : "package",
13386
+ label: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle
13387
+ },
13388
+ open,
13389
+ toggleArtifact
13390
+ ) : null,
13391
+ visibleRailItems.map(
13392
+ (item) => convRailButton(item, activeRailKey === item.key, () => toggleRailItem(item))
13393
+ ),
13394
+ activePopoverItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13395
+ "div",
13396
+ {
13397
+ "data-slot": "chat-page-rail-popover",
13398
+ className: "absolute right-full top-0 z-10 mr-2 overflow-auto rounded-lg border border-border bg-popover shadow-md",
13399
+ style: {
13400
+ width: "var(--pactor-chat-rail-popover-width)",
13401
+ maxWidth: "calc(100cqw - 2rem)",
13402
+ maxHeight: "calc(100% - 1rem)"
13403
+ },
13404
+ children: renderSlot(activePopoverItem.content)
13405
+ }
13406
+ ) : null
13407
+ ]
13408
+ }
13409
+ ) : null;
13314
13410
  const chatArea = /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)("div", { "data-slot": "chat-page-conversation", className: "flex h-full min-w-0 flex-1 flex-col", children: [
13315
13411
  /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13316
13412
  "div",
13317
13413
  {
13414
+ "data-slot": "chat-page-conversation-header",
13318
13415
  className: "flex shrink-0 items-center justify-between border-b border-border px-4 py-2.5",
13319
13416
  children: [
13320
13417
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Text, { text: conversationTitle, strong: true }),
@@ -13326,66 +13423,62 @@ function ChatPage({
13326
13423
  variant: "text",
13327
13424
  onClick: () => onConversationHeaderAction?.()
13328
13425
  }
13329
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Tooltip2, { content: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle, side: "bottom", children: /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13330
- Button2,
13331
- {
13332
- icon: open ? "panel-right-close" : "panel-right-open",
13333
- variant: "text",
13334
- onClick: () => setOpen(!open)
13335
- }
13336
- ) })
13426
+ ) }) : null
13337
13427
  ]
13338
13428
  }
13339
13429
  ),
13340
- /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13341
- "div",
13342
- {
13343
- "data-slot": "chat-page-conversation-body",
13344
- className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-1 flex-col",
13345
- children: [
13346
- messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13347
- Welcome,
13348
- {
13349
- title: welcome?.title,
13350
- description: welcome?.description,
13351
- prompts: welcome?.prompts,
13352
- style: { flex: 1 },
13353
- onSelect: (value) => onSend?.(value)
13354
- }
13355
- ) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13356
- MessageList,
13357
- {
13358
- messages,
13359
- className: "scrollbar-subtle",
13360
- style: { flex: 1, minHeight: 0, padding: 16 },
13361
- onAction: onMessageAction,
13362
- onOpenArtifacts: () => setOpen(true)
13363
- }
13364
- ),
13365
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13366
- Composer,
13367
- {
13368
- placeholder: composerPlaceholder,
13369
- loading: sending,
13370
- models,
13371
- model,
13372
- contexts,
13373
- contextItems,
13374
- attachments,
13375
- footer: composerFooter,
13376
- style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
13377
- onModelChange,
13378
- onContextItemsChange,
13379
- onAttachFiles,
13380
- onRemoveAttachment,
13381
- onRetryAttachment,
13382
- onSubmit: (text) => onSend?.(text)
13383
- }
13384
- ),
13385
- composerBottom ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
13386
- ]
13387
- }
13388
- )
13430
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)("div", { className: "flex min-h-0 flex-1", children: [
13431
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13432
+ "div",
13433
+ {
13434
+ "data-slot": "chat-page-conversation-body",
13435
+ className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-col",
13436
+ children: [
13437
+ messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13438
+ Welcome,
13439
+ {
13440
+ title: welcome?.title,
13441
+ description: welcome?.description,
13442
+ prompts: welcome?.prompts,
13443
+ style: { flex: 1 },
13444
+ onSelect: (value) => onSend?.(value)
13445
+ }
13446
+ ) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13447
+ MessageList,
13448
+ {
13449
+ messages,
13450
+ className: "scrollbar-subtle",
13451
+ style: { flex: 1, minHeight: 0, padding: 16 },
13452
+ onAction: onMessageAction,
13453
+ onOpenArtifacts: () => setOpen(true)
13454
+ }
13455
+ ),
13456
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13457
+ Composer,
13458
+ {
13459
+ placeholder: composerPlaceholder,
13460
+ loading: sending,
13461
+ models,
13462
+ model,
13463
+ contexts,
13464
+ contextItems,
13465
+ attachments,
13466
+ footer: composerFooter,
13467
+ style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
13468
+ onModelChange,
13469
+ onContextItemsChange,
13470
+ onAttachFiles,
13471
+ onRemoveAttachment,
13472
+ onRetryAttachment,
13473
+ onSubmit: (text) => onSend?.(text)
13474
+ }
13475
+ ),
13476
+ composerBottom ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
13477
+ ]
13478
+ }
13479
+ ),
13480
+ convRail
13481
+ ] })
13389
13482
  ] });
13390
13483
  const activeArtifact = artifacts.find((item) => item.id === activeArtifactId) ?? (activeArtifactId === void 0 || activeArtifactId === "" ? artifacts[artifacts.length - 1] : void 0);
13391
13484
  const artifactPanel = /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
@@ -13517,10 +13610,17 @@ function ChatPage({
13517
13610
  ]
13518
13611
  }
13519
13612
  ),
13520
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { className: "@container h-full min-w-0 flex-1", children: open ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
13613
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { className: "@container h-full min-w-0 flex-1", children: open || activePanelItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
13521
13614
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "62%", children: chatArea }),
13522
13615
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(ResizableHandle, { withHandle: true }),
13523
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: artifactPanel })
13616
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: activePanelItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13617
+ "div",
13618
+ {
13619
+ "data-slot": "chat-page-rail-panel",
13620
+ className: "flex h-full min-w-0 flex-col border-l border-border bg-muted",
13621
+ children: renderSlot(activePanelItem.content)
13622
+ }
13623
+ ) : artifactPanel })
13524
13624
  ] }) : chatArea })
13525
13625
  ]
13526
13626
  }
@@ -3381,6 +3381,20 @@ interface ChatPageMenuItem {
3381
3381
  /** 图标名(Icon 白名单) */
3382
3382
  icon?: string;
3383
3383
  }
3384
+ /** 对话图标栏项:点击 toggle 展示当前对话的附加内容(产物 / 执行步骤等) */
3385
+ interface ConversationRailItem {
3386
+ key: string;
3387
+ /** 提示文案(hover tooltip) */
3388
+ label?: string;
3389
+ /** 图标名(Icon 白名单) */
3390
+ icon?: string;
3391
+ /** 呈现形态:popover(图标栏旁悬浮弹框,缺省)/ panel(产物栏式右侧固定宽栏) */
3392
+ display?: 'panel' | 'popover';
3393
+ /** 附加内容(React 元素或 DslNode;缺省时点击仅触发状态事件,不渲染内容层) */
3394
+ content?: DslNode | ReactNode;
3395
+ /** 隐藏该项(如按当前会话有无对应内容动态显隐);隐藏时激活态一并失效 */
3396
+ hidden?: boolean;
3397
+ }
3384
3398
  /** 品牌区(展开菜单区标题 / 版本) */
3385
3399
  interface ChatPageBrand {
3386
3400
  title: string;
@@ -3436,9 +3450,8 @@ interface ChatPageProps {
3436
3450
  /** 对话区头部标题(通常为当前会话标题) */
3437
3451
  conversationTitle?: string;
3438
3452
  /**
3439
- * 对话区头部右侧自定义操作(图标 + 提示);提供时替换缺省的产物区
3440
- * 开关钮,点击经 onConversationHeaderAction 传出(产物区开关可经
3441
- * 受控 artifactOpen + onArtifactOpenChange 自行接线)
3453
+ * 对话区头部右侧自定义操作(图标 + 提示);提供才渲染(未配置时
3454
+ * header 不渲染任何按钮),点击经 onConversationHeaderAction 传出
3442
3455
  */
3443
3456
  conversationHeaderAction?: {
3444
3457
  icon?: string;
@@ -3447,6 +3460,17 @@ interface ChatPageProps {
3447
3460
  };
3448
3461
  /** 对话区头部右侧自定义操作点击事件 */
3449
3462
  onConversationHeaderAction?: () => void;
3463
+ /**
3464
+ * 对话图标栏附加项(header 下方、对话区右缘纵向排列,产物内置项
3465
+ * 之后按序展示);点击 toggle 展示对应附加内容
3466
+ */
3467
+ conversationRailItems?: ConversationRailItem[];
3468
+ /** 隐藏图标栏内置产物入口(缺省 false:产物开关为图标栏首项) */
3469
+ hideArtifactRailItem?: boolean;
3470
+ /** 图标栏激活项 key(提供即受控,配合 onConversationRailChange 闭环;null 为全部收起) */
3471
+ activeConversationRailKey?: string | null;
3472
+ /** 图标栏激活项变化事件,传出 key 或 null */
3473
+ onConversationRailChange?: (key: string | null) => void;
3450
3474
  messages?: MessageListItem[];
3451
3475
  /** 发送中(禁用 Composer 发送钮,由调用方完成后复位) */
3452
3476
  sending?: boolean;
@@ -3526,13 +3550,16 @@ interface ChatPageProps {
3526
3550
  * 行内提及(contexts:输入触发符在光标处弹菜单,选中替换为行内提及块,
3527
3551
  * 退格整体删除;受控 contextItems)、附件
3528
3552
  * 入口(onAttachFiles + 受控 attachments)与 composerFooter /
3529
- * composerBottom 槽位)、最右产物区(ArtifactPanel:内建产物预览、
3553
+ * composerBottom 槽位)、对话图标栏(header 下方、对话区右缘纵向
3554
+ * 图标列:内置产物入口 + conversationRailItems 附加项,点击 toggle
3555
+ * 展示附加内容——popover 悬浮弹框或 panel 右侧分栏,与产物区互斥)、
3556
+ * 最右产物区(ArtifactPanel:内建产物预览、
3530
3557
  * 目录树与下载,可显隐;展示时经 Resizable 拖拽调节与对话区的宽度)。
3531
3558
  * 数据与行为全部经 props / events 进出,
3532
- * 本组件不持有业务状态(产物区开关与分区折叠缺省非受控,均可经
3533
- * 受控 prop + change 事件闭环)。
3559
+ * 本组件不持有业务状态(产物区开关、图标栏激活项与分区折叠缺省非受控,
3560
+ * 均可经受控 prop + change 事件闭环)。
3534
3561
  */
3535
- declare function ChatPage({ brand, menuItems, activeMenuKey, railItems, railFooterItems, menuAction, onMenuSelect, onMenuAction, conversationSectionTitle, conversationSectionCollapsed, defaultConversationSectionCollapsed, onConversationSectionToggle, conversations, activeConversationId, onSelectConversation, onDeleteConversation, moreLabel, onMore, footerSectionTitle, footerItems, footerSectionCollapsed, defaultFooterSectionCollapsed, onFooterSectionToggle, conversationTitle, conversationHeaderAction, onConversationHeaderAction, messages, sending, composerPlaceholder, welcome, onSend, onMessageAction, models, model, onModelChange, contexts, contextItems, onContextItemsChange, attachments, onAttachFiles, onRemoveAttachment, onRetryAttachment, composerFooter, composerBottom, artifactTitle, artifacts, activeArtifactId, onSelectArtifact, artifactEmptyText, safeRegistry, user, artifactViewers, onDownloadArtifact, artifactOpen, defaultArtifactOpen, onArtifactOpenChange, className, style, }: ChatPageProps): React.JSX.Element;
3562
+ declare function ChatPage({ brand, menuItems, activeMenuKey, railItems, railFooterItems, menuAction, onMenuSelect, onMenuAction, conversationSectionTitle, conversationSectionCollapsed, defaultConversationSectionCollapsed, onConversationSectionToggle, conversations, activeConversationId, onSelectConversation, onDeleteConversation, moreLabel, onMore, footerSectionTitle, footerItems, footerSectionCollapsed, defaultFooterSectionCollapsed, onFooterSectionToggle, conversationTitle, conversationHeaderAction, onConversationHeaderAction, conversationRailItems, hideArtifactRailItem, activeConversationRailKey, onConversationRailChange, messages, sending, composerPlaceholder, welcome, onSend, onMessageAction, models, model, onModelChange, contexts, contextItems, onContextItemsChange, attachments, onAttachFiles, onRemoveAttachment, onRetryAttachment, composerFooter, composerBottom, artifactTitle, artifacts, activeArtifactId, onSelectArtifact, artifactEmptyText, safeRegistry, user, artifactViewers, onDownloadArtifact, artifactOpen, defaultArtifactOpen, onArtifactOpenChange, className, style, }: ChatPageProps): React.JSX.Element;
3536
3563
 
3537
3564
  /** 引用来源项 */
3538
3565
  interface CitationItem {
@@ -4444,4 +4471,4 @@ interface FormContextValue {
4444
4471
  /** 在字段组件内探测 Form 上下文;不在 Form 内时返回 null */
4445
4472
  declare function useFormContext(): FormContextValue | null;
4446
4473
 
4447
- export { Accordion, type AccordionItemData, type AccordionProps, Affix, type AffixProps, AgentStatus, type AgentStatusProps, type AgentStatusType, Alert, AlertDialog, type AlertDialogProps, type AlertProps, type AlertVariant, Anchor, type AnchorItemData, type AnchorProps, AreaChart, type AreaChartProps, ArtifactPanel, type ArtifactPanelProps, type ArtifactTreeNode, type ArtifactViewer, type ArtifactViewers, AspectRatio, type AspectRatioProps, Attachment, type AttachmentItemData, type AttachmentProps, Audio, type AudioProps, Avatar, type AvatarProps, BackTop, type BackTopProps, Badge, type BadgeProps, type BadgeVariant, BarChart, type BarChartProps, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Bubble, BubbleChart, type BubbleChartProps, type BubbleProps, type BubbleVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Card, type CardProps, Carousel, type CarouselImage, type CarouselItemData, type CarouselProps, Cascader, type CascaderOption, type CascaderProps, type ChartSelectPayload, ChatInput, type ChatInputProps, ChatMessage, type ChatMessageActionItem, type ChatMessageAgent, type ChatMessagePart, type ChatMessageProps, type ChatMessageStatus, ChatPage, type ChatPageArtifact, type ChatPageBrand, type ChatPageMenuItem, type ChatPageProps, Checkbox, type CheckboxProps, Citation, type CitationItem, type CitationProps, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, ColorPicker, type ColorPickerProps, ColumnChart, type ColumnChartProps, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandGroupData, type CommandItemData, type CommandProps, ComposedChart, type ComposedChartProps, type ComposedSeriesItem, Composer, type ComposerContextItem, type ComposerContextSource, type ComposerModelOption, type ComposerProps, Container, type ContainerProps, type ContainerSize, Content, type ContentProps, ContextMenu, type ContextMenuItemData, type ContextMenuProps, type ConversationItemData, ConversationList, type ConversationListProps, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSort, type DataTableSortOrder, DatePicker, type DatePickerPreset, type DatePickerPresetKey, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRangeValue, Descriptions, type DescriptionsItemData, type DescriptionsProps, Dialog, type DialogProps, DiffViewer, type DiffViewerProps, type DocumentPageData, DocumentPreview, type DocumentPreviewProps, DonutChart, type DonutChartProps, Drawer, type DrawerPlacement, type DrawerProps, DropdownMenu, type DropdownMenuItemData, type DropdownMenuProps, EChartBase, type EChartBaseProps, Empty, type EmptyProps, Field, type FieldProps, type FieldRule, FilePreview, type FilePreviewKind, type FilePreviewProps, Flex, type FlexProps, Footer, type FooterProps, Form, type FormContextValue, type FormProps, FunnelChart, type FunnelChartProps, Gallery, type GalleryItemData, type GalleryProps, GaugeChart, type GaugeChartProps, Grid, type GridProps, Header, type HeaderBrandPosition, type HeaderDropdown, type HeaderDropdownItem, type HeaderLocale, type HeaderMenuItem, type HeaderProps, type HeaderTheme, type HeaderUser, type HeaderUserItem, Heatmap, type HeatmapProps, HoverCard, type HoverCardProps, ICONS, Icon, type IconProps, type IconSize, Image, ImageLightbox, type ImageLightboxProps, type ImageProps, ImageViewer, type ImageViewerProps, Input, InputGroup, type InputGroupProps, InputOTP, type InputOTPProps, type InputProps, Item, type ItemProps, JSONViewer, type JSONViewerProps, Kbd, type KbdProps, Label, type LabelProps, Layout, type LayoutProps, LineChart, type LineChartProps, Link, type LinkProps, List, type ListItemData, type ListProps, LoadingOverlay, type LoadingOverlayProps, MapChart, type MapChartProps, type MentionOption, Mentions, type MentionsProps, Menu, type MenuItem, type MenuProps, Menubar, type MenubarLeafItem, type MenubarMenuData, type MenubarProps, Message, MessageList, type MessageListItem, type MessageListProps, type MessageProps, MetricCard, type MetricCardProps, NavigationMenu, type NavigationMenuChildItem, type NavigationMenuItemData, type NavigationMenuProps, Notification, type NotificationProps, NumberInput, type NumberInputProps, Page, type PageProps, Pagination, type PaginationProps, PieChart, type PieChartProps, Popconfirm, type PopconfirmProps, Popover, type PopoverProps, Progress, type ProgressProps, Prompt, type PromptProps, QRCode, type QRCodeProps, RadarChart, type RadarChartProps, RadioGroup, type RadioGroupOption, type RadioGroupProps, RailTooltip, Rate, type RateProps, Resizable, type ResizablePanelData, type ResizableProps, Result, type ResultProps, type ResultStatus, RichText, type RichTextProps, SankeyChart, type SankeyChartProps, ScatterChart, type ScatterChartProps, ScrollArea, type ScrollAreaProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sender, type SenderProps, Separator, type SeparatorProps, Sheet, type SheetProps, type SheetSide, Sidebar, type SidebarBrand, type SidebarNavItem, type SidebarProps, Sider, type SiderProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Sonner, type SonnerProps, Space, type SpaceProps, Spinner, type SpinnerProps, type SpinnerSize, Statistic, type StatisticProps, Status, type StatusProps, type StatusType, type StepItemData, type StepStatus, Steps, type StepsProps, StreamingText, type StreamingTextProps, Suggestion, type SuggestionItem, type SuggestionProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TablePagination, type TablePaginationInfo, type TableProps, Tabs, type TabsProps, Tag, type TagColor, type TagProps, Text, type TextProps, type TextType, Textarea, type TextareaProps, Thinking, type ThinkingProps, type ThinkingStatus, TimePicker, type TimePickerProps, Timeline, type TimelineItemData, type TimelineProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, ToolCall, type ToolCallProps, type ToolCallStatus, Tooltip, type TooltipProps, Tour, type TourProps, type TourStep, Transfer, type TransferOption, type TransferProps, Tree, TreeChart, type TreeChartProps, type TreeNodeData, type TreeProps, TreeSelect, type TreeSelectOption, type TreeSelectProps, Typography, type TypographyProps, type TypographyVariant, Upload, type UploadFileMeta, type UploadProps, Video, type VideoProps, Watermark, type WatermarkProps, Welcome, type WelcomePromptItem, type WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer };
4474
+ export { Accordion, type AccordionItemData, type AccordionProps, Affix, type AffixProps, AgentStatus, type AgentStatusProps, type AgentStatusType, Alert, AlertDialog, type AlertDialogProps, type AlertProps, type AlertVariant, Anchor, type AnchorItemData, type AnchorProps, AreaChart, type AreaChartProps, ArtifactPanel, type ArtifactPanelProps, type ArtifactTreeNode, type ArtifactViewer, type ArtifactViewers, AspectRatio, type AspectRatioProps, Attachment, type AttachmentItemData, type AttachmentProps, Audio, type AudioProps, Avatar, type AvatarProps, BackTop, type BackTopProps, Badge, type BadgeProps, type BadgeVariant, BarChart, type BarChartProps, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Bubble, BubbleChart, type BubbleChartProps, type BubbleProps, type BubbleVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Card, type CardProps, Carousel, type CarouselImage, type CarouselItemData, type CarouselProps, Cascader, type CascaderOption, type CascaderProps, type ChartSelectPayload, ChatInput, type ChatInputProps, ChatMessage, type ChatMessageActionItem, type ChatMessageAgent, type ChatMessagePart, type ChatMessageProps, type ChatMessageStatus, ChatPage, type ChatPageArtifact, type ChatPageBrand, type ChatPageMenuItem, type ChatPageProps, Checkbox, type CheckboxProps, Citation, type CitationItem, type CitationProps, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, ColorPicker, type ColorPickerProps, ColumnChart, type ColumnChartProps, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandGroupData, type CommandItemData, type CommandProps, ComposedChart, type ComposedChartProps, type ComposedSeriesItem, Composer, type ComposerContextItem, type ComposerContextSource, type ComposerModelOption, type ComposerProps, Container, type ContainerProps, type ContainerSize, Content, type ContentProps, ContextMenu, type ContextMenuItemData, type ContextMenuProps, type ConversationItemData, ConversationList, type ConversationListProps, type ConversationRailItem, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSort, type DataTableSortOrder, DatePicker, type DatePickerPreset, type DatePickerPresetKey, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRangeValue, Descriptions, type DescriptionsItemData, type DescriptionsProps, Dialog, type DialogProps, DiffViewer, type DiffViewerProps, type DocumentPageData, DocumentPreview, type DocumentPreviewProps, DonutChart, type DonutChartProps, Drawer, type DrawerPlacement, type DrawerProps, DropdownMenu, type DropdownMenuItemData, type DropdownMenuProps, EChartBase, type EChartBaseProps, Empty, type EmptyProps, Field, type FieldProps, type FieldRule, FilePreview, type FilePreviewKind, type FilePreviewProps, Flex, type FlexProps, Footer, type FooterProps, Form, type FormContextValue, type FormProps, FunnelChart, type FunnelChartProps, Gallery, type GalleryItemData, type GalleryProps, GaugeChart, type GaugeChartProps, Grid, type GridProps, Header, type HeaderBrandPosition, type HeaderDropdown, type HeaderDropdownItem, type HeaderLocale, type HeaderMenuItem, type HeaderProps, type HeaderTheme, type HeaderUser, type HeaderUserItem, Heatmap, type HeatmapProps, HoverCard, type HoverCardProps, ICONS, Icon, type IconProps, type IconSize, Image, ImageLightbox, type ImageLightboxProps, type ImageProps, ImageViewer, type ImageViewerProps, Input, InputGroup, type InputGroupProps, InputOTP, type InputOTPProps, type InputProps, Item, type ItemProps, JSONViewer, type JSONViewerProps, Kbd, type KbdProps, Label, type LabelProps, Layout, type LayoutProps, LineChart, type LineChartProps, Link, type LinkProps, List, type ListItemData, type ListProps, LoadingOverlay, type LoadingOverlayProps, MapChart, type MapChartProps, type MentionOption, Mentions, type MentionsProps, Menu, type MenuItem, type MenuProps, Menubar, type MenubarLeafItem, type MenubarMenuData, type MenubarProps, Message, MessageList, type MessageListItem, type MessageListProps, type MessageProps, MetricCard, type MetricCardProps, NavigationMenu, type NavigationMenuChildItem, type NavigationMenuItemData, type NavigationMenuProps, Notification, type NotificationProps, NumberInput, type NumberInputProps, Page, type PageProps, Pagination, type PaginationProps, PieChart, type PieChartProps, Popconfirm, type PopconfirmProps, Popover, type PopoverProps, Progress, type ProgressProps, Prompt, type PromptProps, QRCode, type QRCodeProps, RadarChart, type RadarChartProps, RadioGroup, type RadioGroupOption, type RadioGroupProps, RailTooltip, Rate, type RateProps, Resizable, type ResizablePanelData, type ResizableProps, Result, type ResultProps, type ResultStatus, RichText, type RichTextProps, SankeyChart, type SankeyChartProps, ScatterChart, type ScatterChartProps, ScrollArea, type ScrollAreaProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sender, type SenderProps, Separator, type SeparatorProps, Sheet, type SheetProps, type SheetSide, Sidebar, type SidebarBrand, type SidebarNavItem, type SidebarProps, Sider, type SiderProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Sonner, type SonnerProps, Space, type SpaceProps, Spinner, type SpinnerProps, type SpinnerSize, Statistic, type StatisticProps, Status, type StatusProps, type StatusType, type StepItemData, type StepStatus, Steps, type StepsProps, StreamingText, type StreamingTextProps, Suggestion, type SuggestionItem, type SuggestionProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TablePagination, type TablePaginationInfo, type TableProps, Tabs, type TabsProps, Tag, type TagColor, type TagProps, Text, type TextProps, type TextType, Textarea, type TextareaProps, Thinking, type ThinkingProps, type ThinkingStatus, TimePicker, type TimePickerProps, Timeline, type TimelineItemData, type TimelineProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, ToolCall, type ToolCallProps, type ToolCallStatus, Tooltip, type TooltipProps, Tour, type TourProps, type TourStep, Transfer, type TransferOption, type TransferProps, Tree, TreeChart, type TreeChartProps, type TreeNodeData, type TreeProps, TreeSelect, type TreeSelectOption, type TreeSelectProps, Typography, type TypographyProps, type TypographyVariant, Upload, type UploadFileMeta, type UploadProps, Video, type VideoProps, Watermark, type WatermarkProps, Welcome, type WelcomePromptItem, type WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer };
@@ -3381,6 +3381,20 @@ interface ChatPageMenuItem {
3381
3381
  /** 图标名(Icon 白名单) */
3382
3382
  icon?: string;
3383
3383
  }
3384
+ /** 对话图标栏项:点击 toggle 展示当前对话的附加内容(产物 / 执行步骤等) */
3385
+ interface ConversationRailItem {
3386
+ key: string;
3387
+ /** 提示文案(hover tooltip) */
3388
+ label?: string;
3389
+ /** 图标名(Icon 白名单) */
3390
+ icon?: string;
3391
+ /** 呈现形态:popover(图标栏旁悬浮弹框,缺省)/ panel(产物栏式右侧固定宽栏) */
3392
+ display?: 'panel' | 'popover';
3393
+ /** 附加内容(React 元素或 DslNode;缺省时点击仅触发状态事件,不渲染内容层) */
3394
+ content?: DslNode | ReactNode;
3395
+ /** 隐藏该项(如按当前会话有无对应内容动态显隐);隐藏时激活态一并失效 */
3396
+ hidden?: boolean;
3397
+ }
3384
3398
  /** 品牌区(展开菜单区标题 / 版本) */
3385
3399
  interface ChatPageBrand {
3386
3400
  title: string;
@@ -3436,9 +3450,8 @@ interface ChatPageProps {
3436
3450
  /** 对话区头部标题(通常为当前会话标题) */
3437
3451
  conversationTitle?: string;
3438
3452
  /**
3439
- * 对话区头部右侧自定义操作(图标 + 提示);提供时替换缺省的产物区
3440
- * 开关钮,点击经 onConversationHeaderAction 传出(产物区开关可经
3441
- * 受控 artifactOpen + onArtifactOpenChange 自行接线)
3453
+ * 对话区头部右侧自定义操作(图标 + 提示);提供才渲染(未配置时
3454
+ * header 不渲染任何按钮),点击经 onConversationHeaderAction 传出
3442
3455
  */
3443
3456
  conversationHeaderAction?: {
3444
3457
  icon?: string;
@@ -3447,6 +3460,17 @@ interface ChatPageProps {
3447
3460
  };
3448
3461
  /** 对话区头部右侧自定义操作点击事件 */
3449
3462
  onConversationHeaderAction?: () => void;
3463
+ /**
3464
+ * 对话图标栏附加项(header 下方、对话区右缘纵向排列,产物内置项
3465
+ * 之后按序展示);点击 toggle 展示对应附加内容
3466
+ */
3467
+ conversationRailItems?: ConversationRailItem[];
3468
+ /** 隐藏图标栏内置产物入口(缺省 false:产物开关为图标栏首项) */
3469
+ hideArtifactRailItem?: boolean;
3470
+ /** 图标栏激活项 key(提供即受控,配合 onConversationRailChange 闭环;null 为全部收起) */
3471
+ activeConversationRailKey?: string | null;
3472
+ /** 图标栏激活项变化事件,传出 key 或 null */
3473
+ onConversationRailChange?: (key: string | null) => void;
3450
3474
  messages?: MessageListItem[];
3451
3475
  /** 发送中(禁用 Composer 发送钮,由调用方完成后复位) */
3452
3476
  sending?: boolean;
@@ -3526,13 +3550,16 @@ interface ChatPageProps {
3526
3550
  * 行内提及(contexts:输入触发符在光标处弹菜单,选中替换为行内提及块,
3527
3551
  * 退格整体删除;受控 contextItems)、附件
3528
3552
  * 入口(onAttachFiles + 受控 attachments)与 composerFooter /
3529
- * composerBottom 槽位)、最右产物区(ArtifactPanel:内建产物预览、
3553
+ * composerBottom 槽位)、对话图标栏(header 下方、对话区右缘纵向
3554
+ * 图标列:内置产物入口 + conversationRailItems 附加项,点击 toggle
3555
+ * 展示附加内容——popover 悬浮弹框或 panel 右侧分栏,与产物区互斥)、
3556
+ * 最右产物区(ArtifactPanel:内建产物预览、
3530
3557
  * 目录树与下载,可显隐;展示时经 Resizable 拖拽调节与对话区的宽度)。
3531
3558
  * 数据与行为全部经 props / events 进出,
3532
- * 本组件不持有业务状态(产物区开关与分区折叠缺省非受控,均可经
3533
- * 受控 prop + change 事件闭环)。
3559
+ * 本组件不持有业务状态(产物区开关、图标栏激活项与分区折叠缺省非受控,
3560
+ * 均可经受控 prop + change 事件闭环)。
3534
3561
  */
3535
- declare function ChatPage({ brand, menuItems, activeMenuKey, railItems, railFooterItems, menuAction, onMenuSelect, onMenuAction, conversationSectionTitle, conversationSectionCollapsed, defaultConversationSectionCollapsed, onConversationSectionToggle, conversations, activeConversationId, onSelectConversation, onDeleteConversation, moreLabel, onMore, footerSectionTitle, footerItems, footerSectionCollapsed, defaultFooterSectionCollapsed, onFooterSectionToggle, conversationTitle, conversationHeaderAction, onConversationHeaderAction, messages, sending, composerPlaceholder, welcome, onSend, onMessageAction, models, model, onModelChange, contexts, contextItems, onContextItemsChange, attachments, onAttachFiles, onRemoveAttachment, onRetryAttachment, composerFooter, composerBottom, artifactTitle, artifacts, activeArtifactId, onSelectArtifact, artifactEmptyText, safeRegistry, user, artifactViewers, onDownloadArtifact, artifactOpen, defaultArtifactOpen, onArtifactOpenChange, className, style, }: ChatPageProps): React.JSX.Element;
3562
+ declare function ChatPage({ brand, menuItems, activeMenuKey, railItems, railFooterItems, menuAction, onMenuSelect, onMenuAction, conversationSectionTitle, conversationSectionCollapsed, defaultConversationSectionCollapsed, onConversationSectionToggle, conversations, activeConversationId, onSelectConversation, onDeleteConversation, moreLabel, onMore, footerSectionTitle, footerItems, footerSectionCollapsed, defaultFooterSectionCollapsed, onFooterSectionToggle, conversationTitle, conversationHeaderAction, onConversationHeaderAction, conversationRailItems, hideArtifactRailItem, activeConversationRailKey, onConversationRailChange, messages, sending, composerPlaceholder, welcome, onSend, onMessageAction, models, model, onModelChange, contexts, contextItems, onContextItemsChange, attachments, onAttachFiles, onRemoveAttachment, onRetryAttachment, composerFooter, composerBottom, artifactTitle, artifacts, activeArtifactId, onSelectArtifact, artifactEmptyText, safeRegistry, user, artifactViewers, onDownloadArtifact, artifactOpen, defaultArtifactOpen, onArtifactOpenChange, className, style, }: ChatPageProps): React.JSX.Element;
3536
3563
 
3537
3564
  /** 引用来源项 */
3538
3565
  interface CitationItem {
@@ -4444,4 +4471,4 @@ interface FormContextValue {
4444
4471
  /** 在字段组件内探测 Form 上下文;不在 Form 内时返回 null */
4445
4472
  declare function useFormContext(): FormContextValue | null;
4446
4473
 
4447
- export { Accordion, type AccordionItemData, type AccordionProps, Affix, type AffixProps, AgentStatus, type AgentStatusProps, type AgentStatusType, Alert, AlertDialog, type AlertDialogProps, type AlertProps, type AlertVariant, Anchor, type AnchorItemData, type AnchorProps, AreaChart, type AreaChartProps, ArtifactPanel, type ArtifactPanelProps, type ArtifactTreeNode, type ArtifactViewer, type ArtifactViewers, AspectRatio, type AspectRatioProps, Attachment, type AttachmentItemData, type AttachmentProps, Audio, type AudioProps, Avatar, type AvatarProps, BackTop, type BackTopProps, Badge, type BadgeProps, type BadgeVariant, BarChart, type BarChartProps, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Bubble, BubbleChart, type BubbleChartProps, type BubbleProps, type BubbleVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Card, type CardProps, Carousel, type CarouselImage, type CarouselItemData, type CarouselProps, Cascader, type CascaderOption, type CascaderProps, type ChartSelectPayload, ChatInput, type ChatInputProps, ChatMessage, type ChatMessageActionItem, type ChatMessageAgent, type ChatMessagePart, type ChatMessageProps, type ChatMessageStatus, ChatPage, type ChatPageArtifact, type ChatPageBrand, type ChatPageMenuItem, type ChatPageProps, Checkbox, type CheckboxProps, Citation, type CitationItem, type CitationProps, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, ColorPicker, type ColorPickerProps, ColumnChart, type ColumnChartProps, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandGroupData, type CommandItemData, type CommandProps, ComposedChart, type ComposedChartProps, type ComposedSeriesItem, Composer, type ComposerContextItem, type ComposerContextSource, type ComposerModelOption, type ComposerProps, Container, type ContainerProps, type ContainerSize, Content, type ContentProps, ContextMenu, type ContextMenuItemData, type ContextMenuProps, type ConversationItemData, ConversationList, type ConversationListProps, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSort, type DataTableSortOrder, DatePicker, type DatePickerPreset, type DatePickerPresetKey, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRangeValue, Descriptions, type DescriptionsItemData, type DescriptionsProps, Dialog, type DialogProps, DiffViewer, type DiffViewerProps, type DocumentPageData, DocumentPreview, type DocumentPreviewProps, DonutChart, type DonutChartProps, Drawer, type DrawerPlacement, type DrawerProps, DropdownMenu, type DropdownMenuItemData, type DropdownMenuProps, EChartBase, type EChartBaseProps, Empty, type EmptyProps, Field, type FieldProps, type FieldRule, FilePreview, type FilePreviewKind, type FilePreviewProps, Flex, type FlexProps, Footer, type FooterProps, Form, type FormContextValue, type FormProps, FunnelChart, type FunnelChartProps, Gallery, type GalleryItemData, type GalleryProps, GaugeChart, type GaugeChartProps, Grid, type GridProps, Header, type HeaderBrandPosition, type HeaderDropdown, type HeaderDropdownItem, type HeaderLocale, type HeaderMenuItem, type HeaderProps, type HeaderTheme, type HeaderUser, type HeaderUserItem, Heatmap, type HeatmapProps, HoverCard, type HoverCardProps, ICONS, Icon, type IconProps, type IconSize, Image, ImageLightbox, type ImageLightboxProps, type ImageProps, ImageViewer, type ImageViewerProps, Input, InputGroup, type InputGroupProps, InputOTP, type InputOTPProps, type InputProps, Item, type ItemProps, JSONViewer, type JSONViewerProps, Kbd, type KbdProps, Label, type LabelProps, Layout, type LayoutProps, LineChart, type LineChartProps, Link, type LinkProps, List, type ListItemData, type ListProps, LoadingOverlay, type LoadingOverlayProps, MapChart, type MapChartProps, type MentionOption, Mentions, type MentionsProps, Menu, type MenuItem, type MenuProps, Menubar, type MenubarLeafItem, type MenubarMenuData, type MenubarProps, Message, MessageList, type MessageListItem, type MessageListProps, type MessageProps, MetricCard, type MetricCardProps, NavigationMenu, type NavigationMenuChildItem, type NavigationMenuItemData, type NavigationMenuProps, Notification, type NotificationProps, NumberInput, type NumberInputProps, Page, type PageProps, Pagination, type PaginationProps, PieChart, type PieChartProps, Popconfirm, type PopconfirmProps, Popover, type PopoverProps, Progress, type ProgressProps, Prompt, type PromptProps, QRCode, type QRCodeProps, RadarChart, type RadarChartProps, RadioGroup, type RadioGroupOption, type RadioGroupProps, RailTooltip, Rate, type RateProps, Resizable, type ResizablePanelData, type ResizableProps, Result, type ResultProps, type ResultStatus, RichText, type RichTextProps, SankeyChart, type SankeyChartProps, ScatterChart, type ScatterChartProps, ScrollArea, type ScrollAreaProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sender, type SenderProps, Separator, type SeparatorProps, Sheet, type SheetProps, type SheetSide, Sidebar, type SidebarBrand, type SidebarNavItem, type SidebarProps, Sider, type SiderProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Sonner, type SonnerProps, Space, type SpaceProps, Spinner, type SpinnerProps, type SpinnerSize, Statistic, type StatisticProps, Status, type StatusProps, type StatusType, type StepItemData, type StepStatus, Steps, type StepsProps, StreamingText, type StreamingTextProps, Suggestion, type SuggestionItem, type SuggestionProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TablePagination, type TablePaginationInfo, type TableProps, Tabs, type TabsProps, Tag, type TagColor, type TagProps, Text, type TextProps, type TextType, Textarea, type TextareaProps, Thinking, type ThinkingProps, type ThinkingStatus, TimePicker, type TimePickerProps, Timeline, type TimelineItemData, type TimelineProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, ToolCall, type ToolCallProps, type ToolCallStatus, Tooltip, type TooltipProps, Tour, type TourProps, type TourStep, Transfer, type TransferOption, type TransferProps, Tree, TreeChart, type TreeChartProps, type TreeNodeData, type TreeProps, TreeSelect, type TreeSelectOption, type TreeSelectProps, Typography, type TypographyProps, type TypographyVariant, Upload, type UploadFileMeta, type UploadProps, Video, type VideoProps, Watermark, type WatermarkProps, Welcome, type WelcomePromptItem, type WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer };
4474
+ export { Accordion, type AccordionItemData, type AccordionProps, Affix, type AffixProps, AgentStatus, type AgentStatusProps, type AgentStatusType, Alert, AlertDialog, type AlertDialogProps, type AlertProps, type AlertVariant, Anchor, type AnchorItemData, type AnchorProps, AreaChart, type AreaChartProps, ArtifactPanel, type ArtifactPanelProps, type ArtifactTreeNode, type ArtifactViewer, type ArtifactViewers, AspectRatio, type AspectRatioProps, Attachment, type AttachmentItemData, type AttachmentProps, Audio, type AudioProps, Avatar, type AvatarProps, BackTop, type BackTopProps, Badge, type BadgeProps, type BadgeVariant, BarChart, type BarChartProps, Breadcrumb, type BreadcrumbItemData, type BreadcrumbProps, Bubble, BubbleChart, type BubbleChartProps, type BubbleProps, type BubbleVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Card, type CardProps, Carousel, type CarouselImage, type CarouselItemData, type CarouselProps, Cascader, type CascaderOption, type CascaderProps, type ChartSelectPayload, ChatInput, type ChatInputProps, ChatMessage, type ChatMessageActionItem, type ChatMessageAgent, type ChatMessagePart, type ChatMessageProps, type ChatMessageStatus, ChatPage, type ChatPageArtifact, type ChatPageBrand, type ChatPageMenuItem, type ChatPageProps, Checkbox, type CheckboxProps, Citation, type CitationItem, type CitationProps, CodeBlock, type CodeBlockProps, Collapsible, type CollapsibleProps, ColorPicker, type ColorPickerProps, ColumnChart, type ColumnChartProps, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandGroupData, type CommandItemData, type CommandProps, ComposedChart, type ComposedChartProps, type ComposedSeriesItem, Composer, type ComposerContextItem, type ComposerContextSource, type ComposerModelOption, type ComposerProps, Container, type ContainerProps, type ContainerSize, Content, type ContentProps, ContextMenu, type ContextMenuItemData, type ContextMenuProps, type ConversationItemData, ConversationList, type ConversationListProps, type ConversationRailItem, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSort, type DataTableSortOrder, DatePicker, type DatePickerPreset, type DatePickerPresetKey, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRangeValue, Descriptions, type DescriptionsItemData, type DescriptionsProps, Dialog, type DialogProps, DiffViewer, type DiffViewerProps, type DocumentPageData, DocumentPreview, type DocumentPreviewProps, DonutChart, type DonutChartProps, Drawer, type DrawerPlacement, type DrawerProps, DropdownMenu, type DropdownMenuItemData, type DropdownMenuProps, EChartBase, type EChartBaseProps, Empty, type EmptyProps, Field, type FieldProps, type FieldRule, FilePreview, type FilePreviewKind, type FilePreviewProps, Flex, type FlexProps, Footer, type FooterProps, Form, type FormContextValue, type FormProps, FunnelChart, type FunnelChartProps, Gallery, type GalleryItemData, type GalleryProps, GaugeChart, type GaugeChartProps, Grid, type GridProps, Header, type HeaderBrandPosition, type HeaderDropdown, type HeaderDropdownItem, type HeaderLocale, type HeaderMenuItem, type HeaderProps, type HeaderTheme, type HeaderUser, type HeaderUserItem, Heatmap, type HeatmapProps, HoverCard, type HoverCardProps, ICONS, Icon, type IconProps, type IconSize, Image, ImageLightbox, type ImageLightboxProps, type ImageProps, ImageViewer, type ImageViewerProps, Input, InputGroup, type InputGroupProps, InputOTP, type InputOTPProps, type InputProps, Item, type ItemProps, JSONViewer, type JSONViewerProps, Kbd, type KbdProps, Label, type LabelProps, Layout, type LayoutProps, LineChart, type LineChartProps, Link, type LinkProps, List, type ListItemData, type ListProps, LoadingOverlay, type LoadingOverlayProps, MapChart, type MapChartProps, type MentionOption, Mentions, type MentionsProps, Menu, type MenuItem, type MenuProps, Menubar, type MenubarLeafItem, type MenubarMenuData, type MenubarProps, Message, MessageList, type MessageListItem, type MessageListProps, type MessageProps, MetricCard, type MetricCardProps, NavigationMenu, type NavigationMenuChildItem, type NavigationMenuItemData, type NavigationMenuProps, Notification, type NotificationProps, NumberInput, type NumberInputProps, Page, type PageProps, Pagination, type PaginationProps, PieChart, type PieChartProps, Popconfirm, type PopconfirmProps, Popover, type PopoverProps, Progress, type ProgressProps, Prompt, type PromptProps, QRCode, type QRCodeProps, RadarChart, type RadarChartProps, RadioGroup, type RadioGroupOption, type RadioGroupProps, RailTooltip, Rate, type RateProps, Resizable, type ResizablePanelData, type ResizableProps, Result, type ResultProps, type ResultStatus, RichText, type RichTextProps, SankeyChart, type SankeyChartProps, ScatterChart, type ScatterChartProps, ScrollArea, type ScrollAreaProps, Segmented, type SegmentedOption, type SegmentedProps, Select, type SelectOption, type SelectProps, Sender, type SenderProps, Separator, type SeparatorProps, Sheet, type SheetProps, type SheetSide, Sidebar, type SidebarBrand, type SidebarNavItem, type SidebarProps, Sider, type SiderProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Sonner, type SonnerProps, Space, type SpaceProps, Spinner, type SpinnerProps, type SpinnerSize, Statistic, type StatisticProps, Status, type StatusProps, type StatusType, type StepItemData, type StepStatus, Steps, type StepsProps, StreamingText, type StreamingTextProps, Suggestion, type SuggestionItem, type SuggestionProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TablePagination, type TablePaginationInfo, type TableProps, Tabs, type TabsProps, Tag, type TagColor, type TagProps, Text, type TextProps, type TextType, Textarea, type TextareaProps, Thinking, type ThinkingProps, type ThinkingStatus, TimePicker, type TimePickerProps, Timeline, type TimelineItemData, type TimelineProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, ToolCall, type ToolCallProps, type ToolCallStatus, Tooltip, type TooltipProps, Tour, type TourProps, type TourStep, Transfer, type TransferOption, type TransferProps, Tree, TreeChart, type TreeChartProps, type TreeNodeData, type TreeProps, TreeSelect, type TreeSelectOption, type TreeSelectProps, Typography, type TypographyProps, type TypographyVariant, Upload, type UploadFileMeta, type UploadProps, Video, type VideoProps, Watermark, type WatermarkProps, Welcome, type WelcomePromptItem, type WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer };
@@ -151,7 +151,7 @@ import {
151
151
  inferKind,
152
152
  registerBuiltinComponents,
153
153
  useFormContext
154
- } from "../chunk-VTCNWVKQ.js";
154
+ } from "../chunk-WYRFTFYQ.js";
155
155
  import {
156
156
  ICONS,
157
157
  Icon,
package/dist/index.cjs CHANGED
@@ -13279,6 +13279,10 @@ function ChatPage({
13279
13279
  conversationTitle,
13280
13280
  conversationHeaderAction,
13281
13281
  onConversationHeaderAction,
13282
+ conversationRailItems = [],
13283
+ hideArtifactRailItem = false,
13284
+ activeConversationRailKey,
13285
+ onConversationRailChange,
13282
13286
  messages = [],
13283
13287
  sending,
13284
13288
  composerPlaceholder,
@@ -13319,6 +13323,51 @@ function ChatPage({
13319
13323
  if (!controlled) setInnerOpen(next);
13320
13324
  onArtifactOpenChange?.(next);
13321
13325
  };
13326
+ const railControlled = activeConversationRailKey !== void 0;
13327
+ const [activeRailInner, setActiveRailInner] = (0, import_react67.useState)(null);
13328
+ const activeRailKey = railControlled ? activeConversationRailKey : activeRailInner;
13329
+ const setActiveRailKey = (next) => {
13330
+ if (!railControlled) setActiveRailInner(next);
13331
+ onConversationRailChange?.(next);
13332
+ };
13333
+ const visibleRailItems = conversationRailItems.filter((item) => item.hidden !== true);
13334
+ const activeRailItem = visibleRailItems.find(
13335
+ (item) => item.key === activeRailKey
13336
+ );
13337
+ const activePanelItem = activeRailItem?.display === "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
13338
+ const activePopoverItem = activeRailItem !== void 0 && activeRailItem.display !== "panel" && activeRailItem.content !== void 0 ? activeRailItem : void 0;
13339
+ const toggleRailItem = (item) => {
13340
+ const next = activeRailKey === item.key ? null : item.key;
13341
+ if (next !== null && item.display === "panel") {
13342
+ setOpen(false);
13343
+ }
13344
+ setActiveRailKey(next);
13345
+ };
13346
+ const toggleArtifact = () => {
13347
+ if (!open && activePanelItem) {
13348
+ setActiveRailKey(null);
13349
+ }
13350
+ setOpen(!open);
13351
+ };
13352
+ (0, import_react67.useEffect)(() => {
13353
+ if (!activePopoverItem) return;
13354
+ const onKeyDown = (event) => {
13355
+ if (event.key === "Escape") setActiveRailKey(null);
13356
+ };
13357
+ const onPointerDown = (event) => {
13358
+ const target = event.target;
13359
+ if (target.closest("[data-slot=chat-page-rail-popover]") || target.closest("[data-slot=chat-page-conv-rail]")) {
13360
+ return;
13361
+ }
13362
+ setActiveRailKey(null);
13363
+ };
13364
+ document.addEventListener("keydown", onKeyDown);
13365
+ document.addEventListener("mousedown", onPointerDown);
13366
+ return () => {
13367
+ document.removeEventListener("keydown", onKeyDown);
13368
+ document.removeEventListener("mousedown", onPointerDown);
13369
+ };
13370
+ });
13322
13371
  const { renderChildren } = (0, import_runtime26.useRenderer)();
13323
13372
  const renderSlot = (slot) => (0, import_react67.isValidElement)(slot) || typeof slot !== "object" || slot === null ? slot : renderChildren([slot]);
13324
13373
  const convCollControlled = conversationSectionCollapsed !== void 0;
@@ -13350,10 +13399,58 @@ function ChatPage({
13350
13399
  onClick: () => onMenuSelect?.(item.key)
13351
13400
  }
13352
13401
  ) }, item.key);
13402
+ const convRailButton = (item, active, onClick) => {
13403
+ const button = /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13404
+ Button2,
13405
+ {
13406
+ icon: item.icon,
13407
+ variant: "text",
13408
+ className: cn(active ? "bg-accent text-accent-foreground" : void 0, "px-2"),
13409
+ onClick
13410
+ }
13411
+ );
13412
+ return item.label !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Tooltip2, { content: item.label, side: "left", children: button }, item.key) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("span", { children: button }, item.key);
13413
+ };
13414
+ const convRailVisible = !hideArtifactRailItem || visibleRailItems.length > 0;
13415
+ const convRail = convRailVisible ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13416
+ "div",
13417
+ {
13418
+ "data-slot": "chat-page-conv-rail",
13419
+ className: "relative flex w-(--pactor-chat-rail-width) shrink-0 flex-col items-center gap-1 px-1 py-2",
13420
+ children: [
13421
+ !hideArtifactRailItem ? convRailButton(
13422
+ {
13423
+ key: "artifact",
13424
+ icon: open ? "panel-right-close" : "package",
13425
+ label: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle
13426
+ },
13427
+ open,
13428
+ toggleArtifact
13429
+ ) : null,
13430
+ visibleRailItems.map(
13431
+ (item) => convRailButton(item, activeRailKey === item.key, () => toggleRailItem(item))
13432
+ ),
13433
+ activePopoverItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13434
+ "div",
13435
+ {
13436
+ "data-slot": "chat-page-rail-popover",
13437
+ className: "absolute right-full top-0 z-10 mr-2 overflow-auto rounded-lg border border-border bg-popover shadow-md",
13438
+ style: {
13439
+ width: "var(--pactor-chat-rail-popover-width)",
13440
+ maxWidth: "calc(100cqw - 2rem)",
13441
+ maxHeight: "calc(100% - 1rem)"
13442
+ },
13443
+ children: renderSlot(activePopoverItem.content)
13444
+ }
13445
+ ) : null
13446
+ ]
13447
+ }
13448
+ ) : null;
13353
13449
  const chatArea = /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)("div", { "data-slot": "chat-page-conversation", className: "flex h-full min-w-0 flex-1 flex-col", children: [
13354
13450
  /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13355
13451
  "div",
13356
13452
  {
13453
+ "data-slot": "chat-page-conversation-header",
13357
13454
  className: "flex shrink-0 items-center justify-between border-b border-border px-4 py-2.5",
13358
13455
  children: [
13359
13456
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Text, { text: conversationTitle, strong: true }),
@@ -13365,66 +13462,62 @@ function ChatPage({
13365
13462
  variant: "text",
13366
13463
  onClick: () => onConversationHeaderAction?.()
13367
13464
  }
13368
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Tooltip2, { content: open ? "\u6536\u8D77\u4EA7\u7269\u533A" : artifactTitle, side: "bottom", children: /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13369
- Button2,
13370
- {
13371
- icon: open ? "panel-right-close" : "panel-right-open",
13372
- variant: "text",
13373
- onClick: () => setOpen(!open)
13374
- }
13375
- ) })
13465
+ ) }) : null
13376
13466
  ]
13377
13467
  }
13378
13468
  ),
13379
- /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13380
- "div",
13381
- {
13382
- "data-slot": "chat-page-conversation-body",
13383
- className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-1 flex-col",
13384
- children: [
13385
- messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13386
- Welcome,
13387
- {
13388
- title: welcome?.title,
13389
- description: welcome?.description,
13390
- prompts: welcome?.prompts,
13391
- style: { flex: 1 },
13392
- onSelect: (value) => onSend?.(value)
13393
- }
13394
- ) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13395
- MessageList,
13396
- {
13397
- messages,
13398
- className: "scrollbar-subtle",
13399
- style: { flex: 1, minHeight: 0, padding: 16 },
13400
- onAction: onMessageAction,
13401
- onOpenArtifacts: () => setOpen(true)
13402
- }
13403
- ),
13404
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13405
- Composer,
13406
- {
13407
- placeholder: composerPlaceholder,
13408
- loading: sending,
13409
- models,
13410
- model,
13411
- contexts,
13412
- contextItems,
13413
- attachments,
13414
- footer: composerFooter,
13415
- style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
13416
- onModelChange,
13417
- onContextItemsChange,
13418
- onAttachFiles,
13419
- onRemoveAttachment,
13420
- onRetryAttachment,
13421
- onSubmit: (text) => onSend?.(text)
13422
- }
13423
- ),
13424
- composerBottom ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
13425
- ]
13426
- }
13427
- )
13469
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)("div", { className: "flex min-h-0 flex-1", children: [
13470
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(
13471
+ "div",
13472
+ {
13473
+ "data-slot": "chat-page-conversation-body",
13474
+ className: "mx-auto flex min-h-0 w-[61.8cqw] max-w-full flex-col",
13475
+ children: [
13476
+ messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13477
+ Welcome,
13478
+ {
13479
+ title: welcome?.title,
13480
+ description: welcome?.description,
13481
+ prompts: welcome?.prompts,
13482
+ style: { flex: 1 },
13483
+ onSelect: (value) => onSend?.(value)
13484
+ }
13485
+ ) : /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13486
+ MessageList,
13487
+ {
13488
+ messages,
13489
+ className: "scrollbar-subtle",
13490
+ style: { flex: 1, minHeight: 0, padding: 16 },
13491
+ onAction: onMessageAction,
13492
+ onOpenArtifacts: () => setOpen(true)
13493
+ }
13494
+ ),
13495
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13496
+ Composer,
13497
+ {
13498
+ placeholder: composerPlaceholder,
13499
+ loading: sending,
13500
+ models,
13501
+ model,
13502
+ contexts,
13503
+ contextItems,
13504
+ attachments,
13505
+ footer: composerFooter,
13506
+ style: { padding: 16, paddingBottom: composerBottom ? 8 : 16, flexShrink: 0 },
13507
+ onModelChange,
13508
+ onContextItemsChange,
13509
+ onAttachFiles,
13510
+ onRemoveAttachment,
13511
+ onRetryAttachment,
13512
+ onSubmit: (text) => onSend?.(text)
13513
+ }
13514
+ ),
13515
+ composerBottom ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { "data-slot": "chat-page-composer-bottom", className: "shrink-0 px-4 pb-2 text-center", children: renderSlot(composerBottom) }) : null
13516
+ ]
13517
+ }
13518
+ ),
13519
+ convRail
13520
+ ] })
13428
13521
  ] });
13429
13522
  const activeArtifact = artifacts.find((item) => item.id === activeArtifactId) ?? (activeArtifactId === void 0 || activeArtifactId === "" ? artifacts[artifacts.length - 1] : void 0);
13430
13523
  const artifactPanel = /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
@@ -13556,10 +13649,17 @@ function ChatPage({
13556
13649
  ]
13557
13650
  }
13558
13651
  ),
13559
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { className: "@container h-full min-w-0 flex-1", children: open ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
13652
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)("div", { className: "@container h-full min-w-0 flex-1", children: open || activePanelItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsxs)(PanelGroup, { orientation: "horizontal", style: { width: "100%", height: "100%" }, children: [
13560
13653
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "62%", children: chatArea }),
13561
13654
  /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(ResizableHandle, { withHandle: true }),
13562
- /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: artifactPanel })
13655
+ /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(Panel, { defaultSize: "38%", minSize: "380px", maxSize: "760px", children: activePanelItem ? /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(
13656
+ "div",
13657
+ {
13658
+ "data-slot": "chat-page-rail-panel",
13659
+ className: "flex h-full min-w-0 flex-col border-l border-border bg-muted",
13660
+ children: renderSlot(activePanelItem.content)
13661
+ }
13662
+ ) : artifactPanel })
13563
13663
  ] }) : chatArea })
13564
13664
  ]
13565
13665
  }
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { Accordion, AccordionItemData, AccordionProps, Affix, AffixProps, AgentStatus, AgentStatusProps, AgentStatusType, Alert, AlertDialog, AlertDialogProps, AlertProps, AlertVariant, Anchor, AnchorItemData, AnchorProps, AreaChart, AreaChartProps, ArtifactPanel, ArtifactPanelProps, ArtifactTreeNode, ArtifactViewer, ArtifactViewers, AspectRatio, AspectRatioProps, Attachment, AttachmentItemData, AttachmentProps, Audio, AudioProps, Avatar, AvatarProps, BackTop, BackTopProps, Badge, BadgeProps, BadgeVariant, BarChart, BarChartProps, Breadcrumb, BreadcrumbItemData, BreadcrumbProps, Bubble, BubbleChart, BubbleChartProps, BubbleProps, BubbleVariant, Button, ButtonGroup, ButtonGroupProps, ButtonProps, ButtonSize, ButtonVariant, Calendar, CalendarProps, Card, CardProps, Carousel, CarouselImage, CarouselItemData, CarouselProps, Cascader, CascaderOption, CascaderProps, ChartSelectPayload, ChatInput, ChatInputProps, ChatMessage, ChatMessageActionItem, ChatMessageAgent, ChatMessagePart, ChatMessageProps, ChatMessageStatus, ChatPage, ChatPageArtifact, ChatPageBrand, ChatPageMenuItem, ChatPageProps, Checkbox, CheckboxProps, Citation, CitationItem, CitationProps, CodeBlock, CodeBlockProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerProps, ColumnChart, ColumnChartProps, Combobox, ComboboxOption, ComboboxProps, Command, CommandGroupData, CommandItemData, CommandProps, ComposedChart, ComposedChartProps, ComposedSeriesItem, Composer, ComposerContextItem, ComposerContextSource, ComposerModelOption, ComposerProps, Container, ContainerProps, ContainerSize, Content, ContentProps, ContextMenu, ContextMenuItemData, ContextMenuProps, ConversationItemData, ConversationList, ConversationListProps, DataTable, DataTableColumn, DataTablePagination, DataTableProps, DataTableSort, DataTableSortOrder, DatePicker, DatePickerPreset, DatePickerPresetKey, DatePickerProps, DatePickerRangeProps, DatePickerSingleProps, DateRangeValue, Descriptions, DescriptionsItemData, DescriptionsProps, Dialog, DialogProps, DiffViewer, DiffViewerProps, DocumentPageData, DocumentPreview, DocumentPreviewProps, DonutChart, DonutChartProps, Drawer, DrawerPlacement, DrawerProps, DropdownMenu, DropdownMenuItemData, DropdownMenuProps, EChartBase, EChartBaseProps, Empty, EmptyProps, Field, FieldProps, FieldRule, FilePreview, FilePreviewKind, FilePreviewProps, Flex, FlexProps, Footer, FooterProps, Form, FormContextValue, FormProps, FunnelChart, FunnelChartProps, Gallery, GalleryItemData, GalleryProps, GaugeChart, GaugeChartProps, Grid, GridProps, Header, HeaderBrandPosition, HeaderDropdown, HeaderDropdownItem, HeaderLocale, HeaderMenuItem, HeaderProps, HeaderTheme, HeaderUser, HeaderUserItem, Heatmap, HeatmapProps, HoverCard, HoverCardProps, ICONS, Icon, IconProps, IconSize, Image, ImageLightbox, ImageLightboxProps, ImageProps, ImageViewer, ImageViewerProps, Input, InputGroup, InputGroupProps, InputOTP, InputOTPProps, InputProps, Item, ItemProps, JSONViewer, JSONViewerProps, Kbd, KbdProps, Label, LabelProps, Layout, LayoutProps, LineChart, LineChartProps, Link, LinkProps, List, ListItemData, ListProps, LoadingOverlay, LoadingOverlayProps, MapChart, MapChartProps, MentionOption, Mentions, MentionsProps, Menu, MenuItem, MenuProps, Menubar, MenubarLeafItem, MenubarMenuData, MenubarProps, Message, MessageList, MessageListItem, MessageListProps, MessageProps, MetricCard, MetricCardProps, NavigationMenu, NavigationMenuChildItem, NavigationMenuItemData, NavigationMenuProps, Notification, NotificationProps, NumberInput, NumberInputProps, Page, PageProps, Pagination, PaginationProps, PieChart, PieChartProps, Popconfirm, PopconfirmProps, Popover, PopoverProps, Progress, ProgressProps, Prompt, PromptProps, QRCode, QRCodeProps, RadarChart, RadarChartProps, RadioGroup, RadioGroupOption, RadioGroupProps, RailTooltip, Rate, RateProps, Resizable, ResizablePanelData, ResizableProps, Result, ResultProps, ResultStatus, RichText, RichTextProps, SankeyChart, SankeyChartProps, ScatterChart, ScatterChartProps, ScrollArea, ScrollAreaProps, Segmented, SegmentedOption, SegmentedProps, Select, SelectOption, SelectProps, Sender, SenderProps, Separator, SeparatorProps, Sheet, SheetProps, SheetSide, Sidebar, SidebarBrand, SidebarNavItem, SidebarProps, Sider, SiderProps, Skeleton, SkeletonProps, SkeletonShape, Slider, SliderProps, Sonner, SonnerProps, Space, SpaceProps, Spinner, SpinnerProps, SpinnerSize, Statistic, StatisticProps, Status, StatusProps, StatusType, StepItemData, StepStatus, Steps, StepsProps, StreamingText, StreamingTextProps, Suggestion, SuggestionItem, SuggestionProps, Switch, SwitchProps, TabItem, Table, TableColumn, TablePagination, TablePaginationInfo, TableProps, Tabs, TabsProps, Tag, TagColor, TagProps, Text, TextProps, TextType, Textarea, TextareaProps, Thinking, ThinkingProps, ThinkingStatus, TimePicker, TimePickerProps, Timeline, TimelineItemData, TimelineProps, Toggle, ToggleGroup, ToggleGroupOption, ToggleGroupProps, ToggleProps, ToolCall, ToolCallProps, ToolCallStatus, Tooltip, TooltipProps, Tour, TourProps, TourStep, Transfer, TransferOption, TransferProps, Tree, TreeChart, TreeChartProps, TreeNodeData, TreeProps, TreeSelect, TreeSelectOption, TreeSelectProps, Typography, TypographyProps, TypographyVariant, Upload, UploadFileMeta, UploadProps, Video, VideoProps, Watermark, WatermarkProps, Welcome, WelcomePromptItem, WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer } from './components/index.cjs';
1
+ export { Accordion, AccordionItemData, AccordionProps, Affix, AffixProps, AgentStatus, AgentStatusProps, AgentStatusType, Alert, AlertDialog, AlertDialogProps, AlertProps, AlertVariant, Anchor, AnchorItemData, AnchorProps, AreaChart, AreaChartProps, ArtifactPanel, ArtifactPanelProps, ArtifactTreeNode, ArtifactViewer, ArtifactViewers, AspectRatio, AspectRatioProps, Attachment, AttachmentItemData, AttachmentProps, Audio, AudioProps, Avatar, AvatarProps, BackTop, BackTopProps, Badge, BadgeProps, BadgeVariant, BarChart, BarChartProps, Breadcrumb, BreadcrumbItemData, BreadcrumbProps, Bubble, BubbleChart, BubbleChartProps, BubbleProps, BubbleVariant, Button, ButtonGroup, ButtonGroupProps, ButtonProps, ButtonSize, ButtonVariant, Calendar, CalendarProps, Card, CardProps, Carousel, CarouselImage, CarouselItemData, CarouselProps, Cascader, CascaderOption, CascaderProps, ChartSelectPayload, ChatInput, ChatInputProps, ChatMessage, ChatMessageActionItem, ChatMessageAgent, ChatMessagePart, ChatMessageProps, ChatMessageStatus, ChatPage, ChatPageArtifact, ChatPageBrand, ChatPageMenuItem, ChatPageProps, Checkbox, CheckboxProps, Citation, CitationItem, CitationProps, CodeBlock, CodeBlockProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerProps, ColumnChart, ColumnChartProps, Combobox, ComboboxOption, ComboboxProps, Command, CommandGroupData, CommandItemData, CommandProps, ComposedChart, ComposedChartProps, ComposedSeriesItem, Composer, ComposerContextItem, ComposerContextSource, ComposerModelOption, ComposerProps, Container, ContainerProps, ContainerSize, Content, ContentProps, ContextMenu, ContextMenuItemData, ContextMenuProps, ConversationItemData, ConversationList, ConversationListProps, ConversationRailItem, DataTable, DataTableColumn, DataTablePagination, DataTableProps, DataTableSort, DataTableSortOrder, DatePicker, DatePickerPreset, DatePickerPresetKey, DatePickerProps, DatePickerRangeProps, DatePickerSingleProps, DateRangeValue, Descriptions, DescriptionsItemData, DescriptionsProps, Dialog, DialogProps, DiffViewer, DiffViewerProps, DocumentPageData, DocumentPreview, DocumentPreviewProps, DonutChart, DonutChartProps, Drawer, DrawerPlacement, DrawerProps, DropdownMenu, DropdownMenuItemData, DropdownMenuProps, EChartBase, EChartBaseProps, Empty, EmptyProps, Field, FieldProps, FieldRule, FilePreview, FilePreviewKind, FilePreviewProps, Flex, FlexProps, Footer, FooterProps, Form, FormContextValue, FormProps, FunnelChart, FunnelChartProps, Gallery, GalleryItemData, GalleryProps, GaugeChart, GaugeChartProps, Grid, GridProps, Header, HeaderBrandPosition, HeaderDropdown, HeaderDropdownItem, HeaderLocale, HeaderMenuItem, HeaderProps, HeaderTheme, HeaderUser, HeaderUserItem, Heatmap, HeatmapProps, HoverCard, HoverCardProps, ICONS, Icon, IconProps, IconSize, Image, ImageLightbox, ImageLightboxProps, ImageProps, ImageViewer, ImageViewerProps, Input, InputGroup, InputGroupProps, InputOTP, InputOTPProps, InputProps, Item, ItemProps, JSONViewer, JSONViewerProps, Kbd, KbdProps, Label, LabelProps, Layout, LayoutProps, LineChart, LineChartProps, Link, LinkProps, List, ListItemData, ListProps, LoadingOverlay, LoadingOverlayProps, MapChart, MapChartProps, MentionOption, Mentions, MentionsProps, Menu, MenuItem, MenuProps, Menubar, MenubarLeafItem, MenubarMenuData, MenubarProps, Message, MessageList, MessageListItem, MessageListProps, MessageProps, MetricCard, MetricCardProps, NavigationMenu, NavigationMenuChildItem, NavigationMenuItemData, NavigationMenuProps, Notification, NotificationProps, NumberInput, NumberInputProps, Page, PageProps, Pagination, PaginationProps, PieChart, PieChartProps, Popconfirm, PopconfirmProps, Popover, PopoverProps, Progress, ProgressProps, Prompt, PromptProps, QRCode, QRCodeProps, RadarChart, RadarChartProps, RadioGroup, RadioGroupOption, RadioGroupProps, RailTooltip, Rate, RateProps, Resizable, ResizablePanelData, ResizableProps, Result, ResultProps, ResultStatus, RichText, RichTextProps, SankeyChart, SankeyChartProps, ScatterChart, ScatterChartProps, ScrollArea, ScrollAreaProps, Segmented, SegmentedOption, SegmentedProps, Select, SelectOption, SelectProps, Sender, SenderProps, Separator, SeparatorProps, Sheet, SheetProps, SheetSide, Sidebar, SidebarBrand, SidebarNavItem, SidebarProps, Sider, SiderProps, Skeleton, SkeletonProps, SkeletonShape, Slider, SliderProps, Sonner, SonnerProps, Space, SpaceProps, Spinner, SpinnerProps, SpinnerSize, Statistic, StatisticProps, Status, StatusProps, StatusType, StepItemData, StepStatus, Steps, StepsProps, StreamingText, StreamingTextProps, Suggestion, SuggestionItem, SuggestionProps, Switch, SwitchProps, TabItem, Table, TableColumn, TablePagination, TablePaginationInfo, TableProps, Tabs, TabsProps, Tag, TagColor, TagProps, Text, TextProps, TextType, Textarea, TextareaProps, Thinking, ThinkingProps, ThinkingStatus, TimePicker, TimePickerProps, Timeline, TimelineItemData, TimelineProps, Toggle, ToggleGroup, ToggleGroupOption, ToggleGroupProps, ToggleProps, ToolCall, ToolCallProps, ToolCallStatus, Tooltip, TooltipProps, Tour, TourProps, TourStep, Transfer, TransferOption, TransferProps, Tree, TreeChart, TreeChartProps, TreeNodeData, TreeProps, TreeSelect, TreeSelectOption, TreeSelectProps, Typography, TypographyProps, TypographyVariant, Upload, UploadFileMeta, UploadProps, Video, VideoProps, Watermark, WatermarkProps, Welcome, WelcomePromptItem, WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer } from './components/index.cjs';
2
2
  export { MarkdownDslComponent as Markdown, MarkdownDslComponentProps as MarkdownProps } from '@pactor-app/markdown';
3
3
  export { AdminBrand, AdminLayout, AdminLayoutBreakpoint, AdminLayoutConfig, AdminLayoutMode, AdminLayoutProps, BlankLayout, BlankLayoutProps, ChatLayout, ChatLayoutBrand, ChatLayoutMenuItem, ChatLayoutProps, LandingLayout, LandingLayoutProps, LayoutComponent, LayoutRegistry, LoginBrand, LoginLayout, LoginLayoutProps, collectDefaultOpenKeys, createLayoutRegistry, findMenuChain, registerBuiltinLayouts, resolveLayout } from './layout/index.cjs';
4
4
  export { InteractionProvider, InteractionProviderProps, OVERLAY_CANCEL_PAYLOAD, OverlayConfig, OverlayEntry, OverlayHost, OverlayHostProps, OverlayListener, OverlayManager, ResolvePageFn, UiBridge, UiMessage, UiModal, createUiBridge, registerInteractionActions } from './interaction/index.cjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Accordion, AccordionItemData, AccordionProps, Affix, AffixProps, AgentStatus, AgentStatusProps, AgentStatusType, Alert, AlertDialog, AlertDialogProps, AlertProps, AlertVariant, Anchor, AnchorItemData, AnchorProps, AreaChart, AreaChartProps, ArtifactPanel, ArtifactPanelProps, ArtifactTreeNode, ArtifactViewer, ArtifactViewers, AspectRatio, AspectRatioProps, Attachment, AttachmentItemData, AttachmentProps, Audio, AudioProps, Avatar, AvatarProps, BackTop, BackTopProps, Badge, BadgeProps, BadgeVariant, BarChart, BarChartProps, Breadcrumb, BreadcrumbItemData, BreadcrumbProps, Bubble, BubbleChart, BubbleChartProps, BubbleProps, BubbleVariant, Button, ButtonGroup, ButtonGroupProps, ButtonProps, ButtonSize, ButtonVariant, Calendar, CalendarProps, Card, CardProps, Carousel, CarouselImage, CarouselItemData, CarouselProps, Cascader, CascaderOption, CascaderProps, ChartSelectPayload, ChatInput, ChatInputProps, ChatMessage, ChatMessageActionItem, ChatMessageAgent, ChatMessagePart, ChatMessageProps, ChatMessageStatus, ChatPage, ChatPageArtifact, ChatPageBrand, ChatPageMenuItem, ChatPageProps, Checkbox, CheckboxProps, Citation, CitationItem, CitationProps, CodeBlock, CodeBlockProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerProps, ColumnChart, ColumnChartProps, Combobox, ComboboxOption, ComboboxProps, Command, CommandGroupData, CommandItemData, CommandProps, ComposedChart, ComposedChartProps, ComposedSeriesItem, Composer, ComposerContextItem, ComposerContextSource, ComposerModelOption, ComposerProps, Container, ContainerProps, ContainerSize, Content, ContentProps, ContextMenu, ContextMenuItemData, ContextMenuProps, ConversationItemData, ConversationList, ConversationListProps, DataTable, DataTableColumn, DataTablePagination, DataTableProps, DataTableSort, DataTableSortOrder, DatePicker, DatePickerPreset, DatePickerPresetKey, DatePickerProps, DatePickerRangeProps, DatePickerSingleProps, DateRangeValue, Descriptions, DescriptionsItemData, DescriptionsProps, Dialog, DialogProps, DiffViewer, DiffViewerProps, DocumentPageData, DocumentPreview, DocumentPreviewProps, DonutChart, DonutChartProps, Drawer, DrawerPlacement, DrawerProps, DropdownMenu, DropdownMenuItemData, DropdownMenuProps, EChartBase, EChartBaseProps, Empty, EmptyProps, Field, FieldProps, FieldRule, FilePreview, FilePreviewKind, FilePreviewProps, Flex, FlexProps, Footer, FooterProps, Form, FormContextValue, FormProps, FunnelChart, FunnelChartProps, Gallery, GalleryItemData, GalleryProps, GaugeChart, GaugeChartProps, Grid, GridProps, Header, HeaderBrandPosition, HeaderDropdown, HeaderDropdownItem, HeaderLocale, HeaderMenuItem, HeaderProps, HeaderTheme, HeaderUser, HeaderUserItem, Heatmap, HeatmapProps, HoverCard, HoverCardProps, ICONS, Icon, IconProps, IconSize, Image, ImageLightbox, ImageLightboxProps, ImageProps, ImageViewer, ImageViewerProps, Input, InputGroup, InputGroupProps, InputOTP, InputOTPProps, InputProps, Item, ItemProps, JSONViewer, JSONViewerProps, Kbd, KbdProps, Label, LabelProps, Layout, LayoutProps, LineChart, LineChartProps, Link, LinkProps, List, ListItemData, ListProps, LoadingOverlay, LoadingOverlayProps, MapChart, MapChartProps, MentionOption, Mentions, MentionsProps, Menu, MenuItem, MenuProps, Menubar, MenubarLeafItem, MenubarMenuData, MenubarProps, Message, MessageList, MessageListItem, MessageListProps, MessageProps, MetricCard, MetricCardProps, NavigationMenu, NavigationMenuChildItem, NavigationMenuItemData, NavigationMenuProps, Notification, NotificationProps, NumberInput, NumberInputProps, Page, PageProps, Pagination, PaginationProps, PieChart, PieChartProps, Popconfirm, PopconfirmProps, Popover, PopoverProps, Progress, ProgressProps, Prompt, PromptProps, QRCode, QRCodeProps, RadarChart, RadarChartProps, RadioGroup, RadioGroupOption, RadioGroupProps, RailTooltip, Rate, RateProps, Resizable, ResizablePanelData, ResizableProps, Result, ResultProps, ResultStatus, RichText, RichTextProps, SankeyChart, SankeyChartProps, ScatterChart, ScatterChartProps, ScrollArea, ScrollAreaProps, Segmented, SegmentedOption, SegmentedProps, Select, SelectOption, SelectProps, Sender, SenderProps, Separator, SeparatorProps, Sheet, SheetProps, SheetSide, Sidebar, SidebarBrand, SidebarNavItem, SidebarProps, Sider, SiderProps, Skeleton, SkeletonProps, SkeletonShape, Slider, SliderProps, Sonner, SonnerProps, Space, SpaceProps, Spinner, SpinnerProps, SpinnerSize, Statistic, StatisticProps, Status, StatusProps, StatusType, StepItemData, StepStatus, Steps, StepsProps, StreamingText, StreamingTextProps, Suggestion, SuggestionItem, SuggestionProps, Switch, SwitchProps, TabItem, Table, TableColumn, TablePagination, TablePaginationInfo, TableProps, Tabs, TabsProps, Tag, TagColor, TagProps, Text, TextProps, TextType, Textarea, TextareaProps, Thinking, ThinkingProps, ThinkingStatus, TimePicker, TimePickerProps, Timeline, TimelineItemData, TimelineProps, Toggle, ToggleGroup, ToggleGroupOption, ToggleGroupProps, ToggleProps, ToolCall, ToolCallProps, ToolCallStatus, Tooltip, TooltipProps, Tour, TourProps, TourStep, Transfer, TransferOption, TransferProps, Tree, TreeChart, TreeChartProps, TreeNodeData, TreeProps, TreeSelect, TreeSelectOption, TreeSelectProps, Typography, TypographyProps, TypographyVariant, Upload, UploadFileMeta, UploadProps, Video, VideoProps, Watermark, WatermarkProps, Welcome, WelcomePromptItem, WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer } from './components/index.js';
1
+ export { Accordion, AccordionItemData, AccordionProps, Affix, AffixProps, AgentStatus, AgentStatusProps, AgentStatusType, Alert, AlertDialog, AlertDialogProps, AlertProps, AlertVariant, Anchor, AnchorItemData, AnchorProps, AreaChart, AreaChartProps, ArtifactPanel, ArtifactPanelProps, ArtifactTreeNode, ArtifactViewer, ArtifactViewers, AspectRatio, AspectRatioProps, Attachment, AttachmentItemData, AttachmentProps, Audio, AudioProps, Avatar, AvatarProps, BackTop, BackTopProps, Badge, BadgeProps, BadgeVariant, BarChart, BarChartProps, Breadcrumb, BreadcrumbItemData, BreadcrumbProps, Bubble, BubbleChart, BubbleChartProps, BubbleProps, BubbleVariant, Button, ButtonGroup, ButtonGroupProps, ButtonProps, ButtonSize, ButtonVariant, Calendar, CalendarProps, Card, CardProps, Carousel, CarouselImage, CarouselItemData, CarouselProps, Cascader, CascaderOption, CascaderProps, ChartSelectPayload, ChatInput, ChatInputProps, ChatMessage, ChatMessageActionItem, ChatMessageAgent, ChatMessagePart, ChatMessageProps, ChatMessageStatus, ChatPage, ChatPageArtifact, ChatPageBrand, ChatPageMenuItem, ChatPageProps, Checkbox, CheckboxProps, Citation, CitationItem, CitationProps, CodeBlock, CodeBlockProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerProps, ColumnChart, ColumnChartProps, Combobox, ComboboxOption, ComboboxProps, Command, CommandGroupData, CommandItemData, CommandProps, ComposedChart, ComposedChartProps, ComposedSeriesItem, Composer, ComposerContextItem, ComposerContextSource, ComposerModelOption, ComposerProps, Container, ContainerProps, ContainerSize, Content, ContentProps, ContextMenu, ContextMenuItemData, ContextMenuProps, ConversationItemData, ConversationList, ConversationListProps, ConversationRailItem, DataTable, DataTableColumn, DataTablePagination, DataTableProps, DataTableSort, DataTableSortOrder, DatePicker, DatePickerPreset, DatePickerPresetKey, DatePickerProps, DatePickerRangeProps, DatePickerSingleProps, DateRangeValue, Descriptions, DescriptionsItemData, DescriptionsProps, Dialog, DialogProps, DiffViewer, DiffViewerProps, DocumentPageData, DocumentPreview, DocumentPreviewProps, DonutChart, DonutChartProps, Drawer, DrawerPlacement, DrawerProps, DropdownMenu, DropdownMenuItemData, DropdownMenuProps, EChartBase, EChartBaseProps, Empty, EmptyProps, Field, FieldProps, FieldRule, FilePreview, FilePreviewKind, FilePreviewProps, Flex, FlexProps, Footer, FooterProps, Form, FormContextValue, FormProps, FunnelChart, FunnelChartProps, Gallery, GalleryItemData, GalleryProps, GaugeChart, GaugeChartProps, Grid, GridProps, Header, HeaderBrandPosition, HeaderDropdown, HeaderDropdownItem, HeaderLocale, HeaderMenuItem, HeaderProps, HeaderTheme, HeaderUser, HeaderUserItem, Heatmap, HeatmapProps, HoverCard, HoverCardProps, ICONS, Icon, IconProps, IconSize, Image, ImageLightbox, ImageLightboxProps, ImageProps, ImageViewer, ImageViewerProps, Input, InputGroup, InputGroupProps, InputOTP, InputOTPProps, InputProps, Item, ItemProps, JSONViewer, JSONViewerProps, Kbd, KbdProps, Label, LabelProps, Layout, LayoutProps, LineChart, LineChartProps, Link, LinkProps, List, ListItemData, ListProps, LoadingOverlay, LoadingOverlayProps, MapChart, MapChartProps, MentionOption, Mentions, MentionsProps, Menu, MenuItem, MenuProps, Menubar, MenubarLeafItem, MenubarMenuData, MenubarProps, Message, MessageList, MessageListItem, MessageListProps, MessageProps, MetricCard, MetricCardProps, NavigationMenu, NavigationMenuChildItem, NavigationMenuItemData, NavigationMenuProps, Notification, NotificationProps, NumberInput, NumberInputProps, Page, PageProps, Pagination, PaginationProps, PieChart, PieChartProps, Popconfirm, PopconfirmProps, Popover, PopoverProps, Progress, ProgressProps, Prompt, PromptProps, QRCode, QRCodeProps, RadarChart, RadarChartProps, RadioGroup, RadioGroupOption, RadioGroupProps, RailTooltip, Rate, RateProps, Resizable, ResizablePanelData, ResizableProps, Result, ResultProps, ResultStatus, RichText, RichTextProps, SankeyChart, SankeyChartProps, ScatterChart, ScatterChartProps, ScrollArea, ScrollAreaProps, Segmented, SegmentedOption, SegmentedProps, Select, SelectOption, SelectProps, Sender, SenderProps, Separator, SeparatorProps, Sheet, SheetProps, SheetSide, Sidebar, SidebarBrand, SidebarNavItem, SidebarProps, Sider, SiderProps, Skeleton, SkeletonProps, SkeletonShape, Slider, SliderProps, Sonner, SonnerProps, Space, SpaceProps, Spinner, SpinnerProps, SpinnerSize, Statistic, StatisticProps, Status, StatusProps, StatusType, StepItemData, StepStatus, Steps, StepsProps, StreamingText, StreamingTextProps, Suggestion, SuggestionItem, SuggestionProps, Switch, SwitchProps, TabItem, Table, TableColumn, TablePagination, TablePaginationInfo, TableProps, Tabs, TabsProps, Tag, TagColor, TagProps, Text, TextProps, TextType, Textarea, TextareaProps, Thinking, ThinkingProps, ThinkingStatus, TimePicker, TimePickerProps, Timeline, TimelineItemData, TimelineProps, Toggle, ToggleGroup, ToggleGroupOption, ToggleGroupProps, ToggleProps, ToolCall, ToolCallProps, ToolCallStatus, Tooltip, TooltipProps, Tour, TourProps, TourStep, Transfer, TransferOption, TransferProps, Tree, TreeChart, TreeChartProps, TreeNodeData, TreeProps, TreeSelect, TreeSelectOption, TreeSelectProps, Typography, TypographyProps, TypographyVariant, Upload, UploadFileMeta, UploadProps, Video, VideoProps, Watermark, WatermarkProps, Welcome, WelcomePromptItem, WelcomeProps, buildArtifactTree, builtinComponents, createComponentRegistry, diffLines, inferKind, normalizeIconName, registerBuiltinComponents, useFormContext, useSidebarDrawer } from './components/index.js';
2
2
  export { MarkdownDslComponent as Markdown, MarkdownDslComponentProps as MarkdownProps } from '@pactor-app/markdown';
3
3
  export { AdminBrand, AdminLayout, AdminLayoutBreakpoint, AdminLayoutConfig, AdminLayoutMode, AdminLayoutProps, BlankLayout, BlankLayoutProps, ChatLayout, ChatLayoutBrand, ChatLayoutMenuItem, ChatLayoutProps, LandingLayout, LandingLayoutProps, LayoutComponent, LayoutRegistry, LoginBrand, LoginLayout, LoginLayoutProps, collectDefaultOpenKeys, createLayoutRegistry, findMenuChain, registerBuiltinLayouts, resolveLayout } from './layout/index.js';
4
4
  export { InteractionProvider, InteractionProviderProps, OVERLAY_CANCEL_PAYLOAD, OverlayConfig, OverlayEntry, OverlayHost, OverlayHostProps, OverlayListener, OverlayManager, ResolvePageFn, UiBridge, UiMessage, UiModal, createUiBridge, registerInteractionActions } from './interaction/index.js';
package/dist/index.js CHANGED
@@ -151,7 +151,7 @@ import {
151
151
  inferKind,
152
152
  registerBuiltinComponents,
153
153
  useFormContext
154
- } from "./chunk-VTCNWVKQ.js";
154
+ } from "./chunk-WYRFTFYQ.js";
155
155
  import {
156
156
  InteractionProvider,
157
157
  OVERLAY_CANCEL_PAYLOAD,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pactor-app/ui",
3
- "version": "1.23.0",
3
+ "version": "1.24.0",
4
4
  "description": "Pactor UI kit (shadcn): the single built-in UI kit — vendored shadcn/ui components (Base UI primitives + cva + tailwind-merge + lucide-react), props contracts, interaction core (OverlayManager / UiBridge) and layouts, with build-time Tailwind v4 prebuilt styles.css (zero consumer-side Tailwind config)",
5
5
  "keywords": [
6
6
  "pactor",
@@ -107,11 +107,11 @@
107
107
  "react-resizable-panels": "^4.12.3",
108
108
  "tailwind-merge": "^3.6.0",
109
109
  "vaul": "^1.1.2",
110
- "@pactor-app/core": "1.23.0",
111
- "@pactor-app/markdown": "1.23.0",
112
- "@pactor-app/permission": "1.23.0",
113
- "@pactor-app/runtime": "1.23.0",
114
- "@pactor-app/router": "1.23.0"
110
+ "@pactor-app/core": "1.24.0",
111
+ "@pactor-app/markdown": "1.24.0",
112
+ "@pactor-app/router": "1.24.0",
113
+ "@pactor-app/permission": "1.24.0",
114
+ "@pactor-app/runtime": "1.24.0"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "react": ">=18",
package/styles.css CHANGED
@@ -315,6 +315,9 @@
315
315
  .right-10 {
316
316
  right: calc(var(--spacing) * 10);
317
317
  }
318
+ .right-full {
319
+ right: 100%;
320
+ }
318
321
  .-bottom-12 {
319
322
  bottom: calc(var(--spacing) * -12);
320
323
  }
@@ -477,6 +480,9 @@
477
480
  .-mr-0\.5 {
478
481
  margin-right: calc(var(--spacing) * -0.5);
479
482
  }
483
+ .mr-2 {
484
+ margin-right: calc(var(--spacing) * 2);
485
+ }
480
486
  .mb-1 {
481
487
  margin-bottom: var(--spacing);
482
488
  }
@@ -807,6 +813,9 @@
807
813
  .w-\(--anchor-width\) {
808
814
  width: var(--anchor-width);
809
815
  }
816
+ .w-\(--pactor-chat-rail-width\) {
817
+ width: var(--pactor-chat-rail-width);
818
+ }
810
819
  .w-\(--sidebar-width\) {
811
820
  width: var(--sidebar-width);
812
821
  }
@@ -1899,6 +1908,9 @@
1899
1908
  .text-\(--menu-active-foreground\) {
1900
1909
  color: var(--menu-active-foreground);
1901
1910
  }
1911
+ .text-accent-foreground {
1912
+ color: var(--accent-foreground);
1913
+ }
1902
1914
  .text-card-foreground {
1903
1915
  color: var(--card-foreground);
1904
1916
  }
@@ -3984,6 +3996,8 @@
3984
3996
  --flex-gap-md: calc(var(--flex-gap) * 1.33);
3985
3997
  --flex-gap-lg: calc(var(--flex-gap) * 2);
3986
3998
  --grid-gap: 16px;
3999
+ --pactor-chat-rail-width: 40px;
4000
+ --pactor-chat-rail-popover-width: 320px;
3987
4001
  }
3988
4002
  [data-pactor-theme='dark'] {
3989
4003
  color-scheme: dark;