@ai-matrx/chat 0.4.22 → 0.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/agent-copy/RichCopySplit.d.ts +11 -1
- package/dist/agent-copy/RichCopySplit.js +9 -3
- package/dist/agents/components/chat/ChatConversationRoom.js +6 -4
- package/dist/agents/components/chat/ChatNewClient.js +7 -4
- package/dist/agents/components/chat/ChatNewHeader.js +3 -2
- package/dist/agents/components/chat/default-chat-mandate.d.ts +7 -0
- package/dist/agents/components/chat/default-chat-mandate.js +9 -0
- package/dist/agents/components/context-items/bodies/UnregisteredBody.d.ts +6 -3
- package/dist/agents/components/context-items/bodies/UnregisteredBody.js +3 -9
- package/dist/agents/components/inputs/resources/attach-resource.js +1 -0
- package/dist/agents/components/inputs/smart-input/SmartAgentInput.js +16 -1
- package/dist/agents/components/inputs/smart-input/composer/ComposerMenu.js +3 -2
- package/dist/agents/components/inputs/smart-input/composer/ComposerPlusMenu.js +41 -35
- package/dist/agents/components/messages-display/assistant/AgentAssistantMessage.js +29 -20
- package/dist/agents/components/messages-display/user/AgentUserMessage.js +3 -1
- package/dist/agents/components/shared/AgentConversationColumn.d.ts +10 -1
- package/dist/agents/components/shared/AgentConversationColumn.js +26 -2
- package/dist/agents/redux/execution-system/messages/messages.slice.js +6 -1
- package/dist/agents/redux/execution-system/thunks/await-launching-conversation.d.ts +16 -0
- package/dist/agents/redux/execution-system/thunks/await-launching-conversation.js +16 -0
- package/dist/agents/redux/execution-system/thunks/execute-instance.thunk.js +34 -1
- package/dist/agents/redux/execution-system/thunks/process-stream.js +11 -0
- package/dist/agents/redux/execution-system/thunks/smart-execute.thunk.js +10 -0
- package/dist/agents/redux/execution-system/utils/required-organization.js +2 -2
- package/dist/agents/ui-first-tools/redux/build-ambient-context.js +8 -7
- package/dist/host/app-data-slots.d.ts +0 -1
- package/dist/host/app-data-slots.js +25 -5
- package/dist/host/bare-host-chrome.js +4 -0
- package/dist/host/contract.d.ts +8 -2
- package/dist/host/contract.js +2 -1
- package/dist/host/conversation-hooks-react.d.ts +2 -0
- package/dist/host/conversation-hooks-react.js +12 -0
- package/dist/host/conversation-hooks.d.ts +79 -0
- package/dist/host/conversation-hooks.js +91 -0
- package/dist/host/defaults/bare-block-dispatch.d.ts +6 -0
- package/dist/host/defaults/bare-block-dispatch.js +60 -0
- package/dist/host/defaults/files-host.d.ts +26 -0
- package/dist/host/defaults/files-host.js +212 -0
- package/dist/host/defaults/memory-navigation.d.ts +12 -0
- package/dist/host/defaults/memory-navigation.js +102 -0
- package/dist/host/defaults/resource-picker-menu.d.ts +14 -0
- package/dist/host/defaults/resource-picker-menu.js +117 -0
- package/dist/host/defaults/setting-control-input.d.ts +11 -0
- package/dist/host/defaults/setting-control-input.js +91 -0
- package/dist/host/index.d.ts +2 -0
- package/dist/host/index.js +5 -0
- package/dist/host/react.d.ts +1 -0
- package/dist/host/react.js +2 -0
- package/dist/host/ui-slots.d.ts +25 -1
- package/dist/host/ui-slots.js +83 -25
- package/dist/host/window-openers.d.ts +2 -0
- package/dist/host/window-openers.js +4 -0
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/tool-call-visualization/registry/registry.js +4 -4
- package/dist/ui/aspect-ratio-options.d.ts +4 -26
- package/dist/ui/aspect-ratio-options.js +7 -75
- package/dist/ui/chat-panel/ChatPanel.d.ts +50 -0
- package/dist/ui/chat-panel/ChatPanel.js +175 -0
- package/dist/ui/chat-panel/drag.d.ts +87 -0
- package/dist/ui/chat-panel/drag.js +194 -0
- package/dist/window-panels/windows/agents/AgentRunWindow.js +17 -0
- package/dist/window-panels/windows/agents/agentRunWindowAddress.d.ts +19 -0
- package/dist/window-panels/windows/agents/agentRunWindowAddress.js +11 -1
- package/package.json +5 -5
package/dist/host/ui-slots.js
CHANGED
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { defaultResourcePickerItems } from "../agents/resources/default-picker-items.js";
|
|
3
3
|
import { isRfc9562Uuid } from "@ai-matrx/kit/uuid";
|
|
4
|
-
import { createElement, Fragment, useRef } from "react";
|
|
4
|
+
import { Component, createElement, Fragment, useRef } from "react";
|
|
5
5
|
import { formatCost, usdToPoints } from "@ai-matrx/kit/format";
|
|
6
|
+
import { announceOnce } from "./errors.js";
|
|
6
7
|
import { reportUnregisteredHostSlot as reportUnregistered } from "./diagnostics.js";
|
|
7
8
|
import { DefaultWebpageSnapshotView } from "./defaults/webpage-snapshot-view.js";
|
|
8
9
|
import { DefaultWorkspaceGate } from "./defaults/workspace-gate.js";
|
|
9
10
|
import { DefaultFullScreenOverlay, DefaultWindowPanel } from "./defaults/window-panel.js";
|
|
11
|
+
import { DefaultSettingControlInput } from "./defaults/setting-control-input.js";
|
|
12
|
+
import { DefaultResourcePickerMenu } from "./defaults/resource-picker-menu.js";
|
|
13
|
+
import { captureReactRenderError } from "./diagnostics.js";
|
|
14
|
+
import {
|
|
15
|
+
ConfirmDialog as PackageConfirmDialog,
|
|
16
|
+
FloatingSheet as PackageFloatingSheet,
|
|
17
|
+
ReadFailure as PackageReadFailure,
|
|
18
|
+
TextInputDialog as PackageTextInputDialog,
|
|
19
|
+
UntrustedCount as PackageUntrustedCount
|
|
20
|
+
} from "@ai-matrx/design-system";
|
|
21
|
+
import {
|
|
22
|
+
AspectRatioSelect as PackageAspectRatioSelect,
|
|
23
|
+
ClampedNumberInput as PackageClampedNumberInput,
|
|
24
|
+
ConfigurationTable as PackageConfigurationTable,
|
|
25
|
+
ConfigurationTableRow as PackageConfigurationTableRow,
|
|
26
|
+
FieldHelp as PackageFieldHelp,
|
|
27
|
+
LightSwitchToggle as PackageLightSwitchToggle,
|
|
28
|
+
OptionCombobox as PackageOptionCombobox,
|
|
29
|
+
NumberStepper as PackageNumberStepper
|
|
30
|
+
} from "@ai-matrx/design-system/controls";
|
|
10
31
|
const slots = {};
|
|
11
32
|
function registerChatUi(next) {
|
|
12
33
|
Object.assign(slots, next);
|
|
@@ -14,26 +35,48 @@ function registerChatUi(next) {
|
|
|
14
35
|
function resetChatUiForTests() {
|
|
15
36
|
for (const key of Object.keys(slots)) delete slots[key];
|
|
16
37
|
}
|
|
38
|
+
function isHostSlotRegistered(name) {
|
|
39
|
+
return slots[name] !== void 0;
|
|
40
|
+
}
|
|
41
|
+
class SlotBoundary extends Component {
|
|
42
|
+
state = { failed: false };
|
|
43
|
+
static getDerivedStateFromError() {
|
|
44
|
+
return { failed: true };
|
|
45
|
+
}
|
|
46
|
+
componentDidCatch(error) {
|
|
47
|
+
if (announceOnce(`chat-host-slot-failed:${this.props.name}`, `The chat slot "${this.props.name}" failed to render, so it is left out.`)) {
|
|
48
|
+
captureReactRenderError(error, { boundary: `ChatUi(${this.props.name})` });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
render() {
|
|
52
|
+
return this.state.failed ? null : this.props.children ?? null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
17
55
|
function slotComponent(name, Fallback) {
|
|
18
56
|
const Wrapper = (props) => {
|
|
19
57
|
const Impl = slots[name];
|
|
20
58
|
if (!Impl) {
|
|
21
59
|
const absent = !Fallback || Fallback.optionalAbsent;
|
|
22
|
-
|
|
23
|
-
|
|
60
|
+
if (!Fallback?.isPackageDefault) {
|
|
61
|
+
reportUnregistered(name, absent ? "it renders nothing here" : "a plain stand-in is drawn");
|
|
62
|
+
}
|
|
63
|
+
return Fallback ? createElement(SlotBoundary, { name }, createElement(Fallback, props)) : null;
|
|
24
64
|
}
|
|
25
|
-
return createElement(Impl, props);
|
|
65
|
+
return createElement(SlotBoundary, { name }, createElement(Impl, props));
|
|
26
66
|
};
|
|
27
67
|
Wrapper.displayName = `ChatUi(${name})`;
|
|
28
68
|
return Wrapper;
|
|
29
69
|
}
|
|
70
|
+
function withPackageDefault(Component2) {
|
|
71
|
+
const PackageDefault = (props) => createElement(Component2, props);
|
|
72
|
+
PackageDefault.displayName = `PackageDefault(${Component2.displayName ?? Component2.name ?? "component"})`;
|
|
73
|
+
PackageDefault.isPackageDefault = true;
|
|
74
|
+
return PackageDefault;
|
|
75
|
+
}
|
|
30
76
|
function unregisteredWidget(name) {
|
|
31
|
-
const UnregisteredWidget = () => createElement(
|
|
32
|
-
"span",
|
|
33
|
-
{ className: "text-[11px] text-muted-foreground", "data-chat-slot-fallback": name },
|
|
34
|
-
`${name} is not set up here`
|
|
35
|
-
);
|
|
77
|
+
const UnregisteredWidget = ({ children }) => createElement(Fragment, null, children ?? null);
|
|
36
78
|
UnregisteredWidget.displayName = `UnregisteredWidget(${name})`;
|
|
79
|
+
UnregisteredWidget.optionalAbsent = true;
|
|
37
80
|
return UnregisteredWidget;
|
|
38
81
|
}
|
|
39
82
|
function optionalWidget(name) {
|
|
@@ -241,7 +284,7 @@ const SystemInstructionModal = slotComponent("SystemInstructionModal", optionalW
|
|
|
241
284
|
const WindowPanel = slotComponent("WindowPanel", DefaultWindowPanel);
|
|
242
285
|
const FullScreenOverlay = slotComponent("FullScreenOverlay", DefaultFullScreenOverlay);
|
|
243
286
|
const ResourcePickerWindow = slotComponent("ResourcePickerWindow", optionalWidget("ResourcePickerWindow"));
|
|
244
|
-
const ResourcePickerMenu = slotComponent("ResourcePickerMenu",
|
|
287
|
+
const ResourcePickerMenu = slotComponent("ResourcePickerMenu", (props) => createElement(DefaultResourcePickerMenu, props));
|
|
245
288
|
const FilesResourcePicker = slotComponent("FilesResourcePicker", optionalWidget("FilesResourcePicker"));
|
|
246
289
|
const NotePickerPopover = slotComponent("NotePickerPopover", optionalWidget("NotePickerPopover"));
|
|
247
290
|
const SmartInputMessageTemplatePicker = slotComponent(
|
|
@@ -288,9 +331,9 @@ const useRecordAndTranscribe = slotFn("useRecordAndTranscribe");
|
|
|
288
331
|
const requestScribeAudioSeek = slotFn("requestScribeAudioSeek", () => void 0);
|
|
289
332
|
const resolvePdfSurfaceIds = slotFn("resolvePdfSurfaceIds");
|
|
290
333
|
const readListRpc = slotFn("readListRpc");
|
|
291
|
-
const ReadFailure = slotComponent("ReadFailure",
|
|
334
|
+
const ReadFailure = slotComponent("ReadFailure", withPackageDefault(PackageReadFailure));
|
|
292
335
|
const ItemRow = slotComponent("ItemRow", unregisteredWidget("ItemRow"));
|
|
293
|
-
const UntrustedCount = slotComponent("UntrustedCount",
|
|
336
|
+
const UntrustedCount = slotComponent("UntrustedCount", withPackageDefault(PackageUntrustedCount));
|
|
294
337
|
function PlainStaleDataNotice(props) {
|
|
295
338
|
const what = props.what ?? "this";
|
|
296
339
|
const sentence = props.hasData ? `Showing what was last read; ${what} could not be refreshed.` : `Could not read ${what}.`;
|
|
@@ -310,7 +353,7 @@ const StaleDataNotice = slotComponent("StaleDataNotice", PlainStaleDataNotice);
|
|
|
310
353
|
const WorkspaceGate = slotComponent("WorkspaceGate", DefaultWorkspaceGate);
|
|
311
354
|
const OrganizationContextNotice = slotComponent("OrganizationContextNotice", unregisteredWidget("OrganizationContextNotice"));
|
|
312
355
|
const JsonInspector = slotComponent("JsonInspector", unregisteredWidget("JsonInspector"));
|
|
313
|
-
const ConfirmDialog = slotComponent("ConfirmDialog",
|
|
356
|
+
const ConfirmDialog = slotComponent("ConfirmDialog", withPackageDefault(PackageConfirmDialog));
|
|
314
357
|
import { ModelListDropdown } from "@ai-matrx/agents/models/react";
|
|
315
358
|
const TextWithDoors = slotComponent("TextWithDoors", unregisteredWidget("TextWithDoors"));
|
|
316
359
|
const EntityDoorControls = slotComponent("EntityDoorControls", unregisteredWidget("EntityDoorControls"));
|
|
@@ -318,12 +361,12 @@ const StructuredValueView = slotComponent("StructuredValueView", unregisteredWid
|
|
|
318
361
|
const KindValueFrontDoor = slotComponent("KindValueFrontDoor", unregisteredWidget("KindValueFrontDoor"));
|
|
319
362
|
const KindDataGate = slotComponent("KindDataGate", unregisteredWidget("KindDataGate"));
|
|
320
363
|
const ServerNotes = slotComponent("ServerNotes", unregisteredWidget("ServerNotes"));
|
|
321
|
-
const OptionCombobox = slotComponent("OptionCombobox",
|
|
322
|
-
const NumberStepper = slotComponent("NumberStepper",
|
|
364
|
+
const OptionCombobox = slotComponent("OptionCombobox", withPackageDefault(PackageOptionCombobox));
|
|
365
|
+
const NumberStepper = slotComponent("NumberStepper", withPackageDefault(PackageNumberStepper));
|
|
323
366
|
const MatrxFloatingFrame = slotComponent("MatrxFloatingFrame", unregisteredWidget("MatrxFloatingFrame"));
|
|
324
367
|
const ItemMenu = slotComponent("ItemMenu", unregisteredWidget("ItemMenu"));
|
|
325
|
-
const ClampedNumberInput = slotComponent("ClampedNumberInput",
|
|
326
|
-
const AspectRatioSelect = slotComponent("AspectRatioSelect",
|
|
368
|
+
const ClampedNumberInput = slotComponent("ClampedNumberInput", withPackageDefault(PackageClampedNumberInput));
|
|
369
|
+
const AspectRatioSelect = slotComponent("AspectRatioSelect", withPackageDefault(PackageAspectRatioSelect));
|
|
327
370
|
const AnswerTextPreview = slotComponent("AnswerTextPreview", unregisteredWidget("AnswerTextPreview"));
|
|
328
371
|
const AccessGate = slotComponent("AccessGate", unregisteredWidget("AccessGate"));
|
|
329
372
|
const ReferenceCopyMenuItem = slotComponent("ReferenceCopyMenuItem", unregisteredWidget("ReferenceCopyMenuItem"));
|
|
@@ -340,16 +383,16 @@ const VoiceTextarea = slotComponent("VoiceTextarea", (props) => {
|
|
|
340
383
|
const { onChange, value, className, placeholder, rows, id, ref, autoFocus, disabled } = props;
|
|
341
384
|
return createElement("textarea", { ref, id, value, onChange, className, placeholder, rows, autoFocus, disabled, "data-chat-slot-fallback": "textarea" });
|
|
342
385
|
});
|
|
343
|
-
const FloatingSheet = slotComponent("FloatingSheet",
|
|
386
|
+
const FloatingSheet = slotComponent("FloatingSheet", withPackageDefault(PackageFloatingSheet));
|
|
344
387
|
const AppLink = slotComponent("AppLink", ({ href, children, className, ...rest }) => createElement("a", { href, className, ...rest }, children));
|
|
345
388
|
const IconButton = slotComponent("IconButton", unregisteredWidget("IconButton"));
|
|
346
|
-
const LightSwitchToggle = slotComponent("LightSwitchToggle",
|
|
389
|
+
const LightSwitchToggle = slotComponent("LightSwitchToggle", withPackageDefault(PackageLightSwitchToggle));
|
|
347
390
|
const CitationChip = slotComponent("CitationChip", unregisteredWidget("CitationChip"));
|
|
348
391
|
const MatrxEnvelopeBlock = slotComponent("MatrxEnvelopeBlock", unregisteredWidget("MatrxEnvelopeBlock"));
|
|
349
392
|
const ErrorBoundaryWithCapture = slotComponent("ErrorBoundaryWithCapture", ({ children }) => children ?? null);
|
|
350
|
-
const ConfigurationTable = slotComponent("ConfigurationTable",
|
|
351
|
-
const ConfigurationTableRow = slotComponent("ConfigurationTableRow",
|
|
352
|
-
const FieldHelp = slotComponent("FieldHelp",
|
|
393
|
+
const ConfigurationTable = slotComponent("ConfigurationTable", withPackageDefault(PackageConfigurationTable));
|
|
394
|
+
const ConfigurationTableRow = slotComponent("ConfigurationTableRow", withPackageDefault(PackageConfigurationTableRow));
|
|
395
|
+
const FieldHelp = slotComponent("FieldHelp", withPackageDefault(PackageFieldHelp));
|
|
353
396
|
const HtmlPreviewFullScreenEditor = slotComponent("HtmlPreviewFullScreenEditor", unregisteredWidget("HtmlPreviewFullScreenEditor"));
|
|
354
397
|
const AgentEditAccessBadge = slotComponent("AgentEditAccessBadge", unregisteredWidget("AgentEditAccessBadge"));
|
|
355
398
|
const DataRefPreviewContent = slotComponent("DataRefPreviewContent", unregisteredWidget("DataRefPreviewContent"));
|
|
@@ -377,7 +420,20 @@ const useSkills = slotFn("useSkills");
|
|
|
377
420
|
const useAutoLabel = slotFn("useAutoLabel", () => void 0);
|
|
378
421
|
const generateLabelFromContent = slotFn("generateLabelFromContent");
|
|
379
422
|
const usePickListForSelection = slotFn("usePickListForSelection");
|
|
380
|
-
const
|
|
423
|
+
const NO_GITHUB = { connection: null, repositories: NONE, account: null, installations: NONE, syncedRepositoryCount: 0, lastSyncedAt: null };
|
|
424
|
+
const noGitHubAction = async () => void 0;
|
|
425
|
+
const useGitHubConnection = slotFn("useGitHubConnection", () => ({
|
|
426
|
+
inventory: NO_GITHUB,
|
|
427
|
+
loading: false,
|
|
428
|
+
busy: false,
|
|
429
|
+
error: null,
|
|
430
|
+
readError: null,
|
|
431
|
+
reload: noGitHubAction,
|
|
432
|
+
connect: noGitHubAction,
|
|
433
|
+
install: noGitHubAction,
|
|
434
|
+
sync: noGitHubAction,
|
|
435
|
+
disconnect: noGitHubAction
|
|
436
|
+
}));
|
|
381
437
|
const useOutputFeedback = slotFn("useOutputFeedback");
|
|
382
438
|
const saveOutputFeedback = slotFn("saveOutputFeedback");
|
|
383
439
|
const precedingQuestion = slotFn("precedingQuestion");
|
|
@@ -451,13 +507,13 @@ const AgentSaveTapButton = slotComponent("AgentSaveTapButton");
|
|
|
451
507
|
const AgentPeekDuplicateButton = slotComponent("AgentPeekDuplicateButton");
|
|
452
508
|
const CreatorRunPanel = slotComponent("CreatorRunPanel");
|
|
453
509
|
const AgentSettingsCore = slotComponent("AgentSettingsCore", unregisteredWidget("AgentSettingsCore"));
|
|
454
|
-
const SettingControlInput = slotComponent("SettingControlInput",
|
|
510
|
+
const SettingControlInput = slotComponent("SettingControlInput", (props) => createElement(DefaultSettingControlInput, props));
|
|
455
511
|
const InputCapabilitiesEditor = slotComponent("InputCapabilitiesEditor", unregisteredWidget("InputCapabilitiesEditor"));
|
|
456
512
|
const CustomDataBindingSummary = slotComponent("CustomDataBindingSummary", unregisteredWidget("CustomDataBindingSummary"));
|
|
457
513
|
const CustomDataBindingPreview = slotComponent("CustomDataBindingPreview", unregisteredWidget("CustomDataBindingPreview"));
|
|
458
514
|
const AiModelRef = slotComponent("AiModelRef", unregisteredWidget("AiModelRef"));
|
|
459
515
|
const AiToolRef = slotComponent("AiToolRef", unregisteredWidget("AiToolRef"));
|
|
460
|
-
const TextInputDialog = slotComponent("TextInputDialog",
|
|
516
|
+
const TextInputDialog = slotComponent("TextInputDialog", withPackageDefault(PackageTextInputDialog));
|
|
461
517
|
const ProInput = slotComponent("ProInput", (props) => createElement("input", { ...props, "data-chat-slot-fallback": "input" }));
|
|
462
518
|
const MatrxDynamicPanelHost = slotComponent("MatrxDynamicPanelHost", unregisteredWidget("MatrxDynamicPanelHost"));
|
|
463
519
|
const useClippedContentGuard = slotFn("useClippedContentGuard");
|
|
@@ -571,6 +627,7 @@ export {
|
|
|
571
627
|
ShareButton,
|
|
572
628
|
ShareModal,
|
|
573
629
|
SimpleTerminal,
|
|
630
|
+
SlotBoundary,
|
|
574
631
|
SmartInputMessageTemplatePicker,
|
|
575
632
|
SpeakerButton,
|
|
576
633
|
StaleDataNotice,
|
|
@@ -629,6 +686,7 @@ export {
|
|
|
629
686
|
humanLines,
|
|
630
687
|
invalidateCanvasItemCache,
|
|
631
688
|
invalidateMandateCatalogueCache,
|
|
689
|
+
isHostSlotRegistered,
|
|
632
690
|
isSkillStreamEvent,
|
|
633
691
|
isUuidValue,
|
|
634
692
|
isWarRoomThreadAgentSurface,
|
|
@@ -326,6 +326,8 @@ export interface ChatWindowOpeners {
|
|
|
326
326
|
export type ChatWindowOpenerName = keyof ChatWindowOpeners;
|
|
327
327
|
/** What a host that registers no openers gets — every one announces itself. */
|
|
328
328
|
export declare const UNHOSTED_WINDOW_OPENERS: ChatWindowOpeners;
|
|
329
|
+
/** True when the host can actually open this window (a bare host has no window host: draw the surface inline instead). */
|
|
330
|
+
export declare function useHasChatWindowOpener(name: ChatWindowOpenerName): boolean;
|
|
329
331
|
export declare function useOpenAgentAdminFindUsagesWindow(): (opts?: OpenAgentAdminFindUsagesWindowOptions) => ChatWindowHandle;
|
|
330
332
|
export declare function useOpenAgentShortcutQuickCreateWindow(): (opts?: OpenAgentShortcutQuickCreateWindowOptions) => ChatWindowHandle;
|
|
331
333
|
export declare function useOpenAgentContentWindow(): (opts?: OpenAgentContentWindowOptions) => ChatWindowHandle;
|
|
@@ -61,6 +61,9 @@ const UNHOSTED_WINDOW_OPENERS = {
|
|
|
61
61
|
openWorkingDocumentPanel: unhosted("openWorkingDocumentPanel"),
|
|
62
62
|
openWorkingDocumentWindow: unhosted("openWorkingDocumentWindow")
|
|
63
63
|
};
|
|
64
|
+
function useHasChatWindowOpener(name) {
|
|
65
|
+
return Boolean(useChatWindows().openers?.[name]);
|
|
66
|
+
}
|
|
64
67
|
function useOpener(name) {
|
|
65
68
|
return useChatWindows().openers?.[name] ?? UNHOSTED_WINDOW_OPENERS[name];
|
|
66
69
|
}
|
|
@@ -236,6 +239,7 @@ function useOpenWorkingDocumentWindow() {
|
|
|
236
239
|
export {
|
|
237
240
|
UNHOSTED_WINDOW_OPENERS,
|
|
238
241
|
useFloatingLiveRun,
|
|
242
|
+
useHasChatWindowOpener,
|
|
239
243
|
useOpenAgentAdminFindUsagesWindow,
|
|
240
244
|
useOpenAgentContentWindow,
|
|
241
245
|
useOpenAgentConvertSystemWindow,
|
package/dist/react.cjs
CHANGED
|
@@ -3975,7 +3975,7 @@ function joinHeaderClass(...parts) {
|
|
|
3975
3975
|
return parts.filter((part) => part !== void 0 && part !== "").join(" ");
|
|
3976
3976
|
}
|
|
3977
3977
|
|
|
3978
|
-
// src/
|
|
3978
|
+
// src/ui/chat-panel/drag.ts
|
|
3979
3979
|
var import_react18 = require("react");
|
|
3980
3980
|
var KEYBOARD_STEP_PX = 24;
|
|
3981
3981
|
function useResizableWidth(options) {
|