@parallelworks/ui 0.77.0 → 0.79.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.
- package/README.md +42 -6
- package/dist/access/AccessDrawer.d.ts +49 -7
- package/dist/access/AccessDrawer.js +243 -38
- package/dist/access/AccessList.d.ts +19 -1
- package/dist/access/AccessList.js +220 -9
- package/dist/access/GrantView.d.ts +3 -1
- package/dist/access/GrantView.js +17 -4
- package/dist/access/PrincipalPicker.js +5 -5
- package/dist/access/focus.js +1 -1
- package/dist/access/index.d.ts +2 -2
- package/dist/access/index.js +2 -2
- package/dist/access/strings.d.ts +25 -1
- package/dist/access/strings.js +27 -3
- package/dist/access/types.d.ts +26 -0
- package/dist/ai/components/AllocationSelector.js +1 -1
- package/dist/ai/components/AttachmentManager.js +5 -5
- package/dist/ai/components/AttachmentUpload.js +2 -2
- package/dist/ai/components/BranchNavigator.js +1 -1
- package/dist/ai/components/ChatActivity.js +1 -1
- package/dist/ai/components/ChatEmptyState.js +3 -3
- package/dist/ai/components/ChatInput.js +3 -5
- package/dist/ai/components/ChatLayout.js +1 -1
- package/dist/ai/components/ChatMessage.js +1 -1
- package/dist/ai/components/ChatMessageList.js +23 -8
- package/dist/ai/components/ChatSidebar.js +3 -3
- package/dist/ai/components/ChatThread.js +4 -4
- package/dist/ai/components/ComposerAddMenu.js +9 -20
- package/dist/ai/components/ModelSelector.js +3 -3
- package/dist/ai/components/PastedText.js +5 -5
- package/dist/ai/components/SessionView.js +1 -1
- package/dist/ai/components/ShareDialog.js +3 -3
- package/dist/ai/components/SlashMenu.d.ts +31 -4
- package/dist/ai/components/SlashMenu.js +36 -63
- package/dist/ai/components/agent/ActivityLine.js +1 -1
- package/dist/ai/components/agent/AgentMessageParts.js +13 -13
- package/dist/ai/components/conversationActions.js +3 -3
- package/dist/ai/core/ChatProvider.js +1 -1
- package/dist/ai/core/config.js +1 -1
- package/dist/ai/ui/ConversationSidebar.js +3 -3
- package/dist/ai/ui/sidebar.js +3 -3
- package/dist/assets/yaml.worker-DOBV2lND.js +884 -0
- package/dist/components/ActionMenu.d.ts +38 -9
- package/dist/components/ActionMenu.js +48 -22
- package/dist/components/Avatar.d.ts +66 -6
- package/dist/components/Avatar.js +130 -18
- package/dist/components/Breadcrumbs.d.ts +4 -0
- package/dist/components/Breadcrumbs.js +26 -10
- package/dist/components/Button.d.ts +3 -2
- package/dist/components/Button.js +11 -1
- package/dist/components/Callout.d.ts +3 -2
- package/dist/components/Callout.js +3 -2
- package/dist/components/Card.d.ts +33 -9
- package/dist/components/Card.js +24 -8
- package/dist/components/Checkbox.d.ts +3 -1
- package/dist/components/Checkbox.js +4 -2
- package/dist/components/ColorInput.js +1 -1
- package/dist/components/Combobox.d.ts +23 -0
- package/dist/components/Combobox.js +252 -86
- package/dist/components/ConfirmModal.d.ts +28 -2
- package/dist/components/ConfirmModal.js +100 -15
- package/dist/components/ContextMenu.d.ts +29 -2
- package/dist/components/ContextMenu.js +60 -8
- package/dist/components/CopyButton.d.ts +21 -8
- package/dist/components/CopyButton.js +29 -9
- package/dist/components/CreateModal.d.ts +20 -4
- package/dist/components/CreateModal.js +28 -17
- package/dist/components/DatePicker.d.ts +31 -1
- package/dist/components/DatePicker.js +178 -47
- package/dist/components/DescriptionList.d.ts +13 -3
- package/dist/components/DescriptionList.js +43 -11
- package/dist/components/Disclosure.d.ts +10 -2
- package/dist/components/Disclosure.js +18 -7
- package/dist/components/Drawer.js +5 -5
- package/dist/components/EmptyState.d.ts +12 -4
- package/dist/components/EmptyState.js +18 -10
- package/dist/components/ErrorPage.d.ts +40 -0
- package/dist/components/ErrorPage.js +101 -0
- package/dist/components/ExternalLink.d.ts +4 -1
- package/dist/components/ExternalLink.js +4 -5
- package/dist/components/Field.d.ts +21 -6
- package/dist/components/Field.js +32 -16
- package/dist/components/FileButton.d.ts +19 -0
- package/dist/components/FileButton.js +32 -0
- package/dist/components/HoverCard.d.ts +26 -6
- package/dist/components/HoverCard.js +11 -5
- package/dist/components/IconButton.js +4 -2
- package/dist/components/InfoTip.js +3 -3
- package/dist/components/Input.d.ts +33 -3
- package/dist/components/Input.js +149 -14
- package/dist/components/Kbd.d.ts +40 -0
- package/dist/components/Kbd.js +168 -0
- package/dist/components/Listbox.d.ts +103 -0
- package/dist/components/Listbox.js +190 -0
- package/dist/components/Loader.d.ts +8 -2
- package/dist/components/Loader.js +16 -1
- package/dist/components/Markdown.js +1 -1
- package/dist/components/MarkdownImpl.js +1 -1
- package/dist/components/Menu.d.ts +20 -2
- package/dist/components/Menu.js +48 -19
- package/dist/components/MenuEntries.d.ts +41 -4
- package/dist/components/MenuEntries.js +266 -39
- package/dist/components/Meter.d.ts +50 -11
- package/dist/components/Meter.js +71 -21
- package/dist/components/Modal.d.ts +9 -3
- package/dist/components/Modal.js +68 -29
- package/dist/components/OneTimeCodeInput.js +1 -1
- package/dist/components/PageHeader.js +111 -7
- package/dist/components/PageHeaderAction.d.ts +8 -3
- package/dist/components/PageHeaderAction.js +122 -34
- package/dist/components/Pagination.d.ts +13 -1
- package/dist/components/Pagination.js +90 -19
- package/dist/components/Popover.d.ts +16 -2
- package/dist/components/Popover.js +20 -21
- package/dist/components/Provider.d.ts +172 -5
- package/dist/components/Provider.js +157 -14
- package/dist/components/RefreshButton.d.ts +13 -6
- package/dist/components/RefreshButton.js +17 -9
- package/dist/components/RunStatusIcon.d.ts +16 -7
- package/dist/components/RunStatusIcon.js +21 -8
- package/dist/components/Section.d.ts +11 -4
- package/dist/components/Section.js +33 -22
- package/dist/components/SegmentedControl.d.ts +16 -3
- package/dist/components/SegmentedControl.js +7 -3
- package/dist/components/Select.d.ts +19 -3
- package/dist/components/Select.js +114 -68
- package/dist/components/SelectionCopy.d.ts +10 -0
- package/dist/components/SelectionCopy.js +105 -0
- package/dist/components/SettingModeOption.js +1 -1
- package/dist/components/SettingsCard.js +1 -1
- package/dist/components/Skeleton.js +1 -1
- package/dist/components/StatusBadge.d.ts +55 -10
- package/dist/components/StatusBadge.js +91 -15
- package/dist/components/StickyBar.js +1 -1
- package/dist/components/Table.d.ts +22 -4
- package/dist/components/Table.js +46 -24
- package/dist/components/Tabs.d.ts +9 -4
- package/dist/components/Tabs.js +9 -4
- package/dist/components/Tag.d.ts +49 -0
- package/dist/components/Tag.js +199 -0
- package/dist/components/ThemeEditor.js +1 -1
- package/dist/components/Toast.js +1 -1
- package/dist/components/ToggleGroup.d.ts +4 -1
- package/dist/components/ToggleGroup.js +30 -13
- package/dist/components/Tooltip.d.ts +9 -3
- package/dist/components/Tooltip.js +55 -39
- package/dist/components/buttonClasses.d.ts +5 -2
- package/dist/components/buttonClasses.js +11 -10
- package/dist/components/chart.d.ts +69 -0
- package/dist/components/chart.js +145 -0
- package/dist/components/comboboxItems.d.ts +7 -1
- package/dist/components/comboboxItems.js +6 -2
- package/dist/components/dismiss.d.ts +5 -1
- package/dist/components/dismiss.js +6 -2
- package/dist/components/floating.d.ts +4 -4
- package/dist/components/floating.js +5 -5
- package/dist/components/headerActionsFit.d.ts +37 -0
- package/dist/components/headerActionsFit.js +81 -0
- package/dist/components/pageHeaderStore.d.ts +3 -0
- package/dist/components/pageHeaderStore.js +3 -0
- package/dist/components/pathBreaks.js +2 -2
- package/dist/components/popupContainer.d.ts +17 -0
- package/dist/components/popupContainer.js +69 -0
- package/dist/components/relativeTime.d.ts +21 -10
- package/dist/components/relativeTime.js +50 -22
- package/dist/components/segmented.d.ts +18 -4
- package/dist/components/segmented.js +48 -6
- package/dist/components/typedDate.d.ts +5 -0
- package/dist/components/typedDate.js +50 -0
- package/dist/components/useClosingValue.d.ts +4 -0
- package/dist/components/useClosingValue.js +12 -0
- package/dist/components/useCopy.d.ts +6 -0
- package/dist/components/useCopy.js +3 -3
- package/dist/components/useNarrow.d.ts +2 -0
- package/dist/components/useNarrow.js +16 -0
- package/dist/editor/Editor.js +1 -1
- package/dist/editor/FormCodePanel.js +1 -1
- package/dist/editor/Monaco.js +1 -1
- package/dist/editor/workers.js +1 -1
- package/dist/file-explorer/FileExplorer.js +16 -15
- package/dist/file-explorer/FileExplorerContext.js +2 -2
- package/dist/file-explorer/FilePreview/Viewer.js +3 -3
- package/dist/file-explorer/FilePreview/index.js +2 -2
- package/dist/file-explorer/FileRowsWindow.js +3 -3
- package/dist/file-explorer/FileTable.js +1 -1
- package/dist/file-explorer/LoadMoreRow.js +1 -1
- package/dist/file-explorer/TreeView.js +5 -5
- package/dist/file-explorer/helpers.js +2 -2
- package/dist/file-explorer/toasts.js +2 -2
- package/dist/form/Fields/CheckboxGroupField.js +1 -1
- package/dist/form/Fields/DropdownField.js +1 -1
- package/dist/form/Fields/DurationField.js +2 -2
- package/dist/form/Fields/MultiDropdownField.js +1 -1
- package/dist/form/Fields/NumberField.js +1 -1
- package/dist/form/Fields/ObjectField.js +1 -1
- package/dist/form/Fields/RangeField.js +1 -1
- package/dist/form/Fields/StringField.js +1 -1
- package/dist/form/Form.js +3 -3
- package/dist/form/FormLayout.js +1 -1
- package/dist/form/Wizard/WizardContainer.js +1 -1
- package/dist/form/Wizard/WizardNavigation.js +1 -1
- package/dist/form/Wizard/WizardStepContent.js +1 -1
- package/dist/form/fieldRegistry.js +1 -1
- package/dist/form/formEditing.js +1 -1
- package/dist/format.d.ts +17 -7
- package/dist/format.js +39 -16
- package/dist/graph/AnnotationBanner.js +2 -2
- package/dist/graph/Connectors.js +5 -5
- package/dist/graph/DependencyGraph.js +10 -9
- package/dist/graph/GraphEditor.js +4 -4
- package/dist/graph/GraphEditorDialogs.js +13 -12
- package/dist/graph/GraphNode.js +1 -1
- package/dist/graph/InputDialog.js +5 -5
- package/dist/graph/InputsEditor.js +10 -9
- package/dist/graph/MatrixGroup.js +2 -2
- package/dist/graph/ProblemPageLink.d.ts +9 -0
- package/dist/graph/ProblemPageLink.js +21 -0
- package/dist/graph/ProblemsButton.js +26 -16
- package/dist/graph/Reveal.js +1 -1
- package/dist/graph/RunWarningsList.js +21 -12
- package/dist/graph/ShortcutsButton.js +25 -8
- package/dist/graph/StepSummaries.js +1 -1
- package/dist/graph/TreeView.js +2 -2
- package/dist/graph/WorkflowSettingsDialog.js +3 -3
- package/dist/graph/editorApi.d.ts +10 -0
- package/dist/graph/editorFields.js +3 -3
- package/dist/graph/editorPrimitives.js +1 -1
- package/dist/graph/editorRows.js +8 -6
- package/dist/graph/editorStrings.d.ts +1 -0
- package/dist/graph/editorStrings.js +1 -0
- package/dist/graph/fieldProblems.js +2 -2
- package/dist/graph/inputRefs.js +7 -6
- package/dist/graph/runWarnings.d.ts +12 -1
- package/dist/graph/stepWith.js +2 -2
- package/dist/index.d.ts +30 -21
- package/dist/index.js +20 -12
- package/dist/list/ActionToolbar.d.ts +4 -0
- package/dist/list/ActionToolbar.js +35 -12
- package/dist/list/ListFilterBar.d.ts +42 -0
- package/dist/list/ListFilterBar.js +789 -0
- package/dist/list/ListPage.d.ts +42 -4
- package/dist/list/ListPage.js +56 -22
- package/dist/list/ListTable.d.ts +27 -3
- package/dist/list/ListTable.js +48 -23
- package/dist/list/ListToolbar.d.ts +31 -0
- package/dist/list/ListToolbar.js +43 -0
- package/dist/list/ListViewControls.d.ts +8 -4
- package/dist/list/ListViewControls.js +22 -14
- package/dist/list/UserHoverCard.d.ts +8 -2
- package/dist/list/UserHoverCard.js +26 -13
- package/dist/list/filterModel.d.ts +122 -0
- package/dist/list/filterModel.js +308 -0
- package/dist/list/index.d.ts +6 -2
- package/dist/list/index.js +6 -2
- package/dist/list/listSearch.d.ts +1 -1
- package/dist/list/listSearch.js +8 -4
- package/dist/list/listView.d.ts +24 -2
- package/dist/list/listView.js +47 -45
- package/dist/list/rowMenu.d.ts +10 -5
- package/dist/list/rowMenu.js +17 -7
- package/dist/list/useListFilters.d.ts +68 -0
- package/dist/list/useListFilters.js +252 -0
- package/dist/logviewer/LogViewer.js +4 -4
- package/dist/styles/theme.css +94 -0
- package/dist/styles.css +1 -1
- package/package.json +11 -11
- package/dist/assets/yaml.worker-k9AdOqzf.js +0 -1441
- package/dist/components/fullscreen.d.ts +0 -4
- package/dist/components/fullscreen.js +0 -18
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { cx } from "../../cx.js";
|
|
2
|
+
import { EmptyState } from "../../components/EmptyState.js";
|
|
2
3
|
import { DownloadIcon, FileIcon, TrashIcon } from "../../icons.js";
|
|
3
4
|
import { safeUrl } from "../../safeUrl.js";
|
|
4
5
|
import { Loader } from "../../components/Loader.js";
|
|
5
6
|
import { toast } from "../../components/Toast.js";
|
|
6
7
|
import { Tooltip } from "../../components/Tooltip.js";
|
|
7
8
|
import { useStrings } from "../../components/Provider.js";
|
|
8
|
-
import { EmptyState } from "../../components/EmptyState.js";
|
|
9
9
|
import { formatBytes } from "../../format.js";
|
|
10
10
|
import { RelativeTime } from "../../components/relativeTime.js";
|
|
11
11
|
import { useChatConfig } from "../core/config.js";
|
|
12
12
|
import { useChat } from "../core/ChatProvider.js";
|
|
13
13
|
import { attachmentsPageKey } from "./attachmentKeys.js";
|
|
14
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
15
14
|
import { useCallback, useMemo, useState } from "react";
|
|
15
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
import useSWRInfinite from "swr/infinite";
|
|
17
17
|
//#region src/ai/components/AttachmentManager.tsx
|
|
18
18
|
function AttachmentManager() {
|
|
@@ -64,7 +64,7 @@ function AttachmentManager() {
|
|
|
64
64
|
}) : attachments.length === 0 ? /* @__PURE__ */ jsx(EmptyState, {
|
|
65
65
|
variant: "bare",
|
|
66
66
|
title: t.empty
|
|
67
|
-
}) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
67
|
+
}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
|
|
68
68
|
className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",
|
|
69
69
|
children: attachments.map((att) => {
|
|
70
70
|
const downloadUrl = safeUrl(attachmentsAdapter.downloadUrl(att.id));
|
|
@@ -72,7 +72,7 @@ function AttachmentManager() {
|
|
|
72
72
|
const isDeleting = deleting === att.id;
|
|
73
73
|
const thumbnail = thumbnails[att.id];
|
|
74
74
|
const showThumbnail = att.contentType?.startsWith("image/") && thumbnail !== "broken";
|
|
75
|
-
const preview = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FileIcon, {
|
|
75
|
+
const preview = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(FileIcon, {
|
|
76
76
|
"aria-hidden": "true",
|
|
77
77
|
className: "w-8 h-8 theme-muted-text"
|
|
78
78
|
}), showThumbnail && /* @__PURE__ */ jsx("img", {
|
|
@@ -104,7 +104,7 @@ function AttachmentManager() {
|
|
|
104
104
|
children: name
|
|
105
105
|
}), /* @__PURE__ */ jsxs("p", {
|
|
106
106
|
className: "truncate theme-muted-text",
|
|
107
|
-
children: [att.size ? formatBytes(att.size) : "", att.uploadedAt && /* @__PURE__ */ jsxs(Fragment, { children: [att.size ? " · " : "", /* @__PURE__ */ jsx(RelativeTime, { value: att.uploadedAt })] })]
|
|
107
|
+
children: [att.size ? formatBytes(att.size) : "", att.uploadedAt && /* @__PURE__ */ jsxs(Fragment$1, { children: [att.size ? " · " : "", /* @__PURE__ */ jsx(RelativeTime, { value: att.uploadedAt })] })]
|
|
108
108
|
})]
|
|
109
109
|
}), /* @__PURE__ */ jsxs("div", {
|
|
110
110
|
className: "flex items-center gap-0.5 flex-shrink-0",
|
|
@@ -6,8 +6,8 @@ import { formatBytes } from "../../format.js";
|
|
|
6
6
|
import { useChatConfig } from "../core/config.js";
|
|
7
7
|
import { useChat } from "../core/ChatProvider.js";
|
|
8
8
|
import { ATTACHMENTS_INFINITE_KEY } from "./attachmentKeys.js";
|
|
9
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
9
|
import { useCallback, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
import { mutate } from "swr";
|
|
12
12
|
//#region src/ai/components/AttachmentUpload.tsx
|
|
13
13
|
var DEFAULT_MAX_FILE_SIZE = 26214400;
|
|
@@ -118,7 +118,7 @@ function AttachmentUpload({ conversationId, attachments, onAttachmentsChange, di
|
|
|
118
118
|
const handleClick = () => {
|
|
119
119
|
fileInputRef.current?.click();
|
|
120
120
|
};
|
|
121
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("input", {
|
|
121
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("input", {
|
|
122
122
|
ref: fileInputRef,
|
|
123
123
|
type: "file",
|
|
124
124
|
multiple: true,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChevronLeftIcon, ChevronRightIcon } from "../../icons.js";
|
|
2
2
|
import { IconButton } from "../../components/IconButton.js";
|
|
3
3
|
import { useChatConfig } from "../core/config.js";
|
|
4
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
4
|
import { useMemo } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/ai/components/BranchNavigator.tsx
|
|
7
7
|
function findSiblings(messages, messageId) {
|
|
8
8
|
const message = messages.find((m) => m.id === messageId);
|
|
@@ -2,8 +2,8 @@ import { toolHeaderFor } from "../agent/toolfmt.js";
|
|
|
2
2
|
import { useChatConfig } from "../core/config.js";
|
|
3
3
|
import { useChat, useChatStream } from "../core/ChatProvider.js";
|
|
4
4
|
import ActivityLine from "./agent/ActivityLine.js";
|
|
5
|
-
import { jsx } from "react/jsx-runtime";
|
|
6
5
|
import { useEffect, useState } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
7
|
import { DateTime } from "luxon";
|
|
8
8
|
//#region src/ai/components/ChatActivity.tsx
|
|
9
9
|
/** An agent session's working line for the provider's reply, naming its current step. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AddIcon, CloudIcon } from "../../icons.js";
|
|
2
|
-
import { keyedByContent } from "../../components/keys.js";
|
|
3
2
|
import { useStrings } from "../../components/Provider.js";
|
|
3
|
+
import { keyedByContent } from "../../components/keys.js";
|
|
4
4
|
import { Button } from "../../components/Button.js";
|
|
5
5
|
import { Callout } from "../../components/Callout.js";
|
|
6
6
|
import { useChatConfig } from "../core/config.js";
|
|
@@ -13,8 +13,8 @@ import DragOverlay from "./DragOverlay.js";
|
|
|
13
13
|
import ChatInput from "./ChatInput.js";
|
|
14
14
|
import ChatStage, { StageList } from "./ChatStage.js";
|
|
15
15
|
import ProviderIssueBanner from "./ProviderIssueBanner.js";
|
|
16
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
17
16
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
18
18
|
//#region src/ai/components/ChatEmptyState.tsx
|
|
19
19
|
function pickRandom(arr, count) {
|
|
20
20
|
return [...arr].sort(() => Math.random() - .5).slice(0, count);
|
|
@@ -132,7 +132,7 @@ function ChatEmptyState({ targetSession }) {
|
|
|
132
132
|
disabled: isLoading || isLoadingModels || models.length === 0,
|
|
133
133
|
placeholder: isLoadingModels ? tInput.placeholderLoading : hasLoadedModels && models.length === 0 ? tInput.placeholderNoProviders : tInput.placeholder,
|
|
134
134
|
settingsLeft: /* @__PURE__ */ jsx(ConnectToolsLink, {}),
|
|
135
|
-
settingsRight: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ComposerUsage, { children: slots.composerUsage }), /* @__PURE__ */ jsx(ComposerControls, { targetSession })] })
|
|
135
|
+
settingsRight: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ComposerUsage, { children: slots.composerUsage }), /* @__PURE__ */ jsx(ComposerControls, { targetSession })] })
|
|
136
136
|
}),
|
|
137
137
|
prompts.length > 0 && !(hasLoadedModels && models.length === 0) && /* @__PURE__ */ jsx(StageList, { children: keyedByContent(prompts, (p) => p).map(({ key, item: prompt }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("button", {
|
|
138
138
|
type: "button",
|
|
@@ -11,8 +11,8 @@ import DragOverlay from "./DragOverlay.js";
|
|
|
11
11
|
import { PasteFileCard } from "./PastedText.js";
|
|
12
12
|
import { SlashMenu, useSlashMenu } from "./SlashMenu.js";
|
|
13
13
|
import { usePasteCards } from "./usePasteCards.js";
|
|
14
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
15
14
|
import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
|
|
15
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
//#region src/ai/components/ChatInput.tsx
|
|
17
17
|
/** An optional box that is still empty should not wear the filled look of
|
|
18
18
|
* one waiting to send something. */
|
|
@@ -230,9 +230,7 @@ function ChatInput({ onSend, disabled = false, placeholder, conversationId, onEd
|
|
|
230
230
|
className: "relative",
|
|
231
231
|
children: [slash && slashMenu.open && /* @__PURE__ */ jsx(SlashMenu, {
|
|
232
232
|
label: slash.label,
|
|
233
|
-
|
|
234
|
-
matches: slashMenu.matches,
|
|
235
|
-
active: slashMenu.active,
|
|
233
|
+
menu: slashMenu,
|
|
236
234
|
onChoose: (name) => {
|
|
237
235
|
slashMenu.choose(name);
|
|
238
236
|
textareaRef.current?.focus();
|
|
@@ -290,7 +288,7 @@ function ChatInput({ onSend, disabled = false, placeholder, conversationId, onEd
|
|
|
290
288
|
]
|
|
291
289
|
})]
|
|
292
290
|
}),
|
|
293
|
-
(settingsLeft || uploadedCount > 0) && /* @__PURE__ */ jsx(ComposerSettings, { left: /* @__PURE__ */ jsxs(Fragment, { children: [settingsLeft, uploadedCount > 0 && /* @__PURE__ */ jsx("span", {
|
|
291
|
+
(settingsLeft || uploadedCount > 0) && /* @__PURE__ */ jsx(ComposerSettings, { left: /* @__PURE__ */ jsxs(Fragment$1, { children: [settingsLeft, uploadedCount > 0 && /* @__PURE__ */ jsx("span", {
|
|
294
292
|
className: "text-[11px] theme-muted-text",
|
|
295
293
|
children: t.filesAttached(uploadedCount)
|
|
296
294
|
})] }) }),
|
|
@@ -5,8 +5,8 @@ import { useChat } from "../core/ChatProvider.js";
|
|
|
5
5
|
import { KeyboardShortcutsProvider } from "../core/KeyboardShortcutsProvider.js";
|
|
6
6
|
import { SidebarToggle } from "../ui/sidebar.js";
|
|
7
7
|
import ChatSidebar from "./ChatSidebar.js";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
import { useLayoutEffect, useRef, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
//#region src/ai/components/ChatLayout.tsx
|
|
11
11
|
/** The list at its default width beside the narrowest thread that still
|
|
12
12
|
* reads comfortably; narrower than that, 'auto' moves the list to a drawer. */
|
|
@@ -17,8 +17,8 @@ import BranchNavigator from "./BranchNavigator.js";
|
|
|
17
17
|
import { UserMessageText } from "./PastedText.js";
|
|
18
18
|
import { replyText } from "../core/useKeyboardShortcuts.js";
|
|
19
19
|
import MessageAttachments from "./MessageAttachments.js";
|
|
20
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
21
20
|
import { memo, useEffect, useRef, useState } from "react";
|
|
21
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
22
22
|
import { DateTime } from "luxon";
|
|
23
23
|
//#region src/ai/components/ChatMessage.tsx
|
|
24
24
|
/** A message action: the chat's square, tinted from the ink on hover. */
|
|
@@ -9,8 +9,8 @@ import Markdown from "../ui/Markdown.js";
|
|
|
9
9
|
import { Reasoning, ReasoningBody } from "./Reasoning.js";
|
|
10
10
|
import AgentMessageParts from "./agent/AgentMessageParts.js";
|
|
11
11
|
import ChatMessage_default from "./ChatMessage.js";
|
|
12
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
12
|
import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
13
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
14
14
|
//#region src/ai/components/ChatMessageList.tsx
|
|
15
15
|
function ChatMessageList({ messages, allMessages, streamingMessage: streamingMessageProp, queuedMessages, onRemoveQueued, canRemoveQueued, queueDelivery = "afterReply", editingMessageId, showAuthor, currentUsername, onNavigateBranch, onEditMessage, onSaveEdit, onCancelEdit, onRegenerateMessage, onRetryMessage, onOpenReasoning, onApprovalAnswer, inputElement, isStreaming: isStreamingProp, flush, label, footer, workingIndicator = true }) {
|
|
16
16
|
const { adapter, isStreaming: providerStreaming } = useChat();
|
|
@@ -45,8 +45,8 @@ function ChatMessageList({ messages, allMessages, streamingMessage: streamingMes
|
|
|
45
45
|
const open = adapter.attachments?.onOpen;
|
|
46
46
|
return open ? open.bind(adapter.attachments) : void 0;
|
|
47
47
|
}, [adapter]);
|
|
48
|
-
const bottomRef = useRef(null);
|
|
49
48
|
const containerRef = useRef(null);
|
|
49
|
+
const contentRef = useRef(null);
|
|
50
50
|
const reasoningScrollRef = useRef(null);
|
|
51
51
|
const messageCount = messages.length;
|
|
52
52
|
const streamingText = streamingMessage?.content;
|
|
@@ -145,8 +145,25 @@ function ChatMessageList({ messages, allMessages, streamingMessage: streamingMes
|
|
|
145
145
|
]);
|
|
146
146
|
useEffect(() => {
|
|
147
147
|
if (!containerRef.current || !isNearBottomRef.current || isStreaming || !hadMessagesRef.current) return;
|
|
148
|
-
|
|
148
|
+
const el = containerRef.current;
|
|
149
|
+
el.scrollTo({
|
|
150
|
+
top: el.scrollHeight,
|
|
151
|
+
behavior: prefersReducedMotion() ? "auto" : "smooth"
|
|
152
|
+
});
|
|
149
153
|
}, [messageCount, isStreaming]);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
const content = contentRef.current;
|
|
156
|
+
if (!content || typeof ResizeObserver === "undefined") return;
|
|
157
|
+
const observer = new ResizeObserver(() => {
|
|
158
|
+
const el = containerRef.current;
|
|
159
|
+
if (el && isNearBottomRef.current && !hasQueuedMessages) {
|
|
160
|
+
el.scrollTop = el.scrollHeight;
|
|
161
|
+
lastScrollTopRef.current = el.scrollTop;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
observer.observe(content);
|
|
165
|
+
return () => observer.disconnect();
|
|
166
|
+
}, [hasContent, hasQueuedMessages]);
|
|
150
167
|
if (messages.length === 0 && !streamingMessage && !hasQueuedMessages) return /* @__PURE__ */ jsxs("div", {
|
|
151
168
|
className: "chat-thread flex-1 overflow-y-auto flex flex-col bg-(--theme-panel-bg)",
|
|
152
169
|
children: [
|
|
@@ -170,6 +187,7 @@ function ChatMessageList({ messages, allMessages, streamingMessage: streamingMes
|
|
|
170
187
|
className: "chat-thread flex-1 overflow-y-auto theme-scrollbar flex flex-col bg-(--theme-panel-bg)",
|
|
171
188
|
children: [
|
|
172
189
|
/* @__PURE__ */ jsxs("div", {
|
|
190
|
+
ref: contentRef,
|
|
173
191
|
className: "w-full max-w-[var(--chat-column,50rem)] mx-auto pt-4 pb-6 flex-1 px-4",
|
|
174
192
|
children: [
|
|
175
193
|
/* @__PURE__ */ jsx(MessageRows, {
|
|
@@ -268,7 +286,7 @@ function ChatMessageList({ messages, allMessages, streamingMessage: streamingMes
|
|
|
268
286
|
children: [
|
|
269
287
|
removable ? /* @__PURE__ */ jsx(ClockIcon, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "h-3 w-3" }),
|
|
270
288
|
/* @__PURE__ */ jsx("span", { children: status }),
|
|
271
|
-
onRemoveQueued && removable && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
289
|
+
onRemoveQueued && removable && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
272
290
|
"aria-hidden": "true",
|
|
273
291
|
children: "·"
|
|
274
292
|
}), /* @__PURE__ */ jsx("button", {
|
|
@@ -283,10 +301,7 @@ function ChatMessageList({ messages, allMessages, streamingMessage: streamingMes
|
|
|
283
301
|
}, msg.id);
|
|
284
302
|
}),
|
|
285
303
|
footer,
|
|
286
|
-
/* @__PURE__ */ jsx("div", {
|
|
287
|
-
ref: bottomRef,
|
|
288
|
-
className: "h-8"
|
|
289
|
-
})
|
|
304
|
+
/* @__PURE__ */ jsx("div", { className: "h-8" })
|
|
290
305
|
]
|
|
291
306
|
}),
|
|
292
307
|
!pinned && /* @__PURE__ */ jsx("div", {
|
|
@@ -10,8 +10,8 @@ import { FOCUS_SIDEBAR_SEARCH_EVENT } from "../core/events.js";
|
|
|
10
10
|
import { SidebarEmpty, SidebarRow, SidebarRowBody } from "../ui/sidebar.js";
|
|
11
11
|
import { ConversationSidebar } from "../ui/ConversationSidebar.js";
|
|
12
12
|
import { groupConversationsByDate, useConversationActions } from "./conversationActions.js";
|
|
13
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
14
13
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
14
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
15
15
|
//#region src/ai/components/ChatSidebar.tsx
|
|
16
16
|
function ConversationRow({ conv, isCurrent, menuItems, openMenu, onOpen }) {
|
|
17
17
|
const { LinkComponent, strings } = useChatConfig();
|
|
@@ -122,7 +122,7 @@ function ChatSidebar({ actions = true, top }) {
|
|
|
122
122
|
current: filteredConversations.find((conv) => conv.id === activeConversationId),
|
|
123
123
|
onSelect: (conv) => navigation.toConversation(conv.id)
|
|
124
124
|
},
|
|
125
|
-
top: (top || actions) && /* @__PURE__ */ jsxs(Fragment, { children: [top?.({ collapsed: sidebarCollapsed }), actions && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
125
|
+
top: (top || actions) && /* @__PURE__ */ jsxs(Fragment$1, { children: [top?.({ collapsed: sidebarCollapsed }), actions && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
|
|
126
126
|
className: "flex flex-col gap-0.5 px-2 pt-2 pb-1",
|
|
127
127
|
children: [/* @__PURE__ */ jsxs(LinkComponent, {
|
|
128
128
|
target: { kind: "newChat" },
|
|
@@ -155,7 +155,7 @@ function ChatSidebar({ actions = true, top }) {
|
|
|
155
155
|
})] })] }),
|
|
156
156
|
footer: /* @__PURE__ */ jsx(ManageProvidersLink, {})
|
|
157
157
|
});
|
|
158
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [(drawer || sidebar !== "hidden") && list, overlays] });
|
|
158
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [(drawer || sidebar !== "hidden") && list, overlays] });
|
|
159
159
|
}
|
|
160
160
|
//#endregion
|
|
161
161
|
export { ChatSidebar as default };
|
|
@@ -5,8 +5,8 @@ import { ComposerControls, ComposerUsage, ConnectToolsLink } from "./ComposerChr
|
|
|
5
5
|
import ProviderIssueBanner from "./ProviderIssueBanner.js";
|
|
6
6
|
import { ShareButton, ToolResultsSharedNote } from "./ShareDialog.js";
|
|
7
7
|
import SessionView from "./SessionView.js";
|
|
8
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
9
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
//#region src/ai/components/ChatThread.tsx
|
|
11
11
|
function ChatThread({ conversationId }) {
|
|
12
12
|
const { adapter, currentUser, currentConversation, loadConversation, loadProviders, sendMessage, retryMessage, answerToolApproval, tools, isLoadingConversation, navigateToBranch, queuedMessages, removeQueuedMessage } = useChat();
|
|
@@ -57,12 +57,12 @@ function ChatThread({ conversationId }) {
|
|
|
57
57
|
currentUsername: currentUser.username,
|
|
58
58
|
loading: isLoadingConversation && !currentConversation,
|
|
59
59
|
dropFiles: !!adapter.attachments,
|
|
60
|
-
banners: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BlockedGroupBanner, {}), /* @__PURE__ */ jsx(ProviderIssueBanner, {})] }),
|
|
60
|
+
banners: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(BlockedGroupBanner, {}), /* @__PURE__ */ jsx(ProviderIssueBanner, {})] }),
|
|
61
61
|
composer: {
|
|
62
62
|
disabled: isLoadingConversation || !canWrite,
|
|
63
63
|
...canWrite ? {} : { placeholder: strings.thread.viewOnly },
|
|
64
|
-
settingsLeft: /* @__PURE__ */ jsxs(Fragment, { children: [currentConversation && currentConversation.isOwner !== false ? /* @__PURE__ */ jsx(ShareButton, { conversationId }) : tools.length > 0 && /* @__PURE__ */ jsx(ToolResultsSharedNote, {}), /* @__PURE__ */ jsx(ConnectToolsLink, {})] }),
|
|
65
|
-
settingsRight: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ComposerUsage, { children: slots.composerUsage }), /* @__PURE__ */ jsx(ComposerControls, {})] })
|
|
64
|
+
settingsLeft: /* @__PURE__ */ jsxs(Fragment$1, { children: [currentConversation && currentConversation.isOwner !== false ? /* @__PURE__ */ jsx(ShareButton, { conversationId }) : tools.length > 0 && /* @__PURE__ */ jsx(ToolResultsSharedNote, {}), /* @__PURE__ */ jsx(ConnectToolsLink, {})] }),
|
|
65
|
+
settingsRight: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ComposerUsage, { children: slots.composerUsage }), /* @__PURE__ */ jsx(ComposerControls, {})] })
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
}
|
|
@@ -3,6 +3,7 @@ import { AddIcon, AttachmentIcon, ConnectIcon, ToolsIcon } from "../../icons.js"
|
|
|
3
3
|
import { panelItemClassName } from "../../components/floating.js";
|
|
4
4
|
import { MenuItem, MenuLinkItem, MenuPopup, MenuSeparator, MenuSubmenuTrigger } from "../../components/Menu.js";
|
|
5
5
|
import { useQueryMatch } from "../../components/search.js";
|
|
6
|
+
import { useNarrow } from "../../components/useNarrow.js";
|
|
6
7
|
import { Button } from "../../components/Button.js";
|
|
7
8
|
import { Modal } from "../../components/Modal.js";
|
|
8
9
|
import { Switch } from "../../components/Switch.js";
|
|
@@ -10,20 +11,8 @@ import { SearchInput } from "../../components/SearchInput.js";
|
|
|
10
11
|
import { useChatConfig } from "../core/config.js";
|
|
11
12
|
import { useChat } from "../core/ChatProvider.js";
|
|
12
13
|
import { Menu } from "@base-ui/react/menu";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
var NARROW = "(max-width: 639px)";
|
|
16
|
-
function subscribeNarrow(onChange) {
|
|
17
|
-
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => {};
|
|
18
|
-
const media = window.matchMedia(NARROW);
|
|
19
|
-
media.addEventListener("change", onChange);
|
|
20
|
-
return () => media.removeEventListener("change", onChange);
|
|
21
|
-
}
|
|
22
|
-
var isNarrow = () => typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia(NARROW).matches;
|
|
23
|
-
/** A phone has no room beside the menu for a submenu, and no hover to open one. */
|
|
24
|
-
function useNarrow() {
|
|
25
|
-
return useSyncExternalStore(subscribeNarrow, isNarrow, () => false);
|
|
26
|
-
}
|
|
14
|
+
import { useId, useState } from "react";
|
|
15
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
27
16
|
function PlusButton({ open, label, hint, className, ...props }) {
|
|
28
17
|
const name = hint ? `${label} · ${hint}` : label;
|
|
29
18
|
return /* @__PURE__ */ jsxs("button", {
|
|
@@ -162,7 +151,7 @@ function ToolsModal({ open, onClose, listed }) {
|
|
|
162
151
|
size: "md",
|
|
163
152
|
title: t.tools,
|
|
164
153
|
description: t.toolsDescription,
|
|
165
|
-
footer: /* @__PURE__ */ jsxs(Fragment, { children: [footerStart, /* @__PURE__ */ jsx(Button, {
|
|
154
|
+
footer: /* @__PURE__ */ jsxs(Fragment$1, { children: [footerStart, /* @__PURE__ */ jsx(Button, {
|
|
166
155
|
variant: "primary",
|
|
167
156
|
onClick: close,
|
|
168
157
|
children: t.done
|
|
@@ -222,7 +211,7 @@ function ComposerAddMenu({ attachmentsOpen, onToggleAttachments, disabled, withT
|
|
|
222
211
|
const many = listed.length > 6;
|
|
223
212
|
const connect = extraLinks.connectTools;
|
|
224
213
|
const label = onToggleAttachments ? t.label : t.tools;
|
|
225
|
-
if (many && !onToggleAttachments) return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PlusButton, {
|
|
214
|
+
if (many && !onToggleAttachments) return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PlusButton, {
|
|
226
215
|
open: false,
|
|
227
216
|
"aria-haspopup": "dialog",
|
|
228
217
|
disabled,
|
|
@@ -254,9 +243,9 @@ function ComposerAddMenu({ attachmentsOpen, onToggleAttachments, disabled, withT
|
|
|
254
243
|
] }), /* @__PURE__ */ jsxs(MenuPopup, {
|
|
255
244
|
side: "inline-end",
|
|
256
245
|
className: "w-72",
|
|
257
|
-
children: [/* @__PURE__ */ jsx(ToolsList, { listed }), connect && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuSeparator, {}), /* @__PURE__ */ jsx(ConnectToolsRow, { href: connect })] })]
|
|
246
|
+
children: [/* @__PURE__ */ jsx(ToolsList, { listed }), connect && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(MenuSeparator, {}), /* @__PURE__ */ jsx(ConnectToolsRow, { href: connect })] })]
|
|
258
247
|
})] }) : null;
|
|
259
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Menu.Root, { children: [/* @__PURE__ */ jsx(Menu.Trigger, {
|
|
248
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Menu.Root, { children: [/* @__PURE__ */ jsx(Menu.Trigger, {
|
|
260
249
|
disabled,
|
|
261
250
|
render: /* @__PURE__ */ jsx(PlusButton, {
|
|
262
251
|
open: attachmentsOpen,
|
|
@@ -270,10 +259,10 @@ function ComposerAddMenu({ attachmentsOpen, onToggleAttachments, disabled, withT
|
|
|
270
259
|
children: [onToggleAttachments && /* @__PURE__ */ jsxs(MenuItem, {
|
|
271
260
|
onClick: onToggleAttachments,
|
|
272
261
|
children: [/* @__PURE__ */ jsx(AttachmentIcon, { className: "h-4 w-4 shrink-0 theme-muted-text" }), t.addFiles]
|
|
273
|
-
}), toolsEntry ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
262
|
+
}), toolsEntry ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
274
263
|
onToggleAttachments && /* @__PURE__ */ jsx(MenuSeparator, {}),
|
|
275
264
|
/* @__PURE__ */ jsx(ToolsList, { listed }),
|
|
276
|
-
connect && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuSeparator, {}), /* @__PURE__ */ jsx(ConnectToolsRow, { href: connect })] })
|
|
265
|
+
connect && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(MenuSeparator, {}), /* @__PURE__ */ jsx(ConnectToolsRow, { href: connect })] })
|
|
277
266
|
] })]
|
|
278
267
|
})] }), many && /* @__PURE__ */ jsx(ToolsModal, {
|
|
279
268
|
open: modalOpen,
|
|
@@ -6,8 +6,8 @@ import { useChatConfig } from "../core/config.js";
|
|
|
6
6
|
import { issueDetail, issueLabel, providerIssueFor } from "../core/providerIssues.js";
|
|
7
7
|
import { useChat } from "../core/ChatProvider.js";
|
|
8
8
|
import { chipClassName } from "../ui/chip.js";
|
|
9
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
9
|
import { useMemo } from "react";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
//#region src/ai/components/ModelSelector.tsx
|
|
12
12
|
var ORG_OWNER = "org";
|
|
13
13
|
/** Who registered a provider: the provider list's owner when the adapter
|
|
@@ -20,7 +20,7 @@ function providerOwner(info, model) {
|
|
|
20
20
|
function CspIcon({ cspKind, className }) {
|
|
21
21
|
const { slots } = useChatConfig();
|
|
22
22
|
const custom = slots.providerIcon?.(cspKind, className);
|
|
23
|
-
if (custom) return /* @__PURE__ */ jsx(Fragment, { children: custom });
|
|
23
|
+
if (custom) return /* @__PURE__ */ jsx(Fragment$1, { children: custom });
|
|
24
24
|
return /* @__PURE__ */ jsx(CloudIcon, { className: cx("theme-muted-text", className) });
|
|
25
25
|
}
|
|
26
26
|
function getProviderKeyFromModelId(modelId) {
|
|
@@ -135,7 +135,7 @@ function ModelSelector({ targetSession, model }) {
|
|
|
135
135
|
trigger: /* @__PURE__ */ jsxs("button", {
|
|
136
136
|
type: "button",
|
|
137
137
|
className: chipClassName,
|
|
138
|
-
children: [selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
138
|
+
children: [selected ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
139
139
|
/* @__PURE__ */ jsx("span", {
|
|
140
140
|
className: "truncate font-medium theme-text",
|
|
141
141
|
children: getModelLabel(selected)
|
|
@@ -6,8 +6,8 @@ import { useChatConfig } from "../core/config.js";
|
|
|
6
6
|
import Markdown from "../ui/Markdown.js";
|
|
7
7
|
import { fencePaste } from "../core/pasteLanguage.js";
|
|
8
8
|
import { splitPastes } from "../core/pastes.js";
|
|
9
|
-
import { Fragment
|
|
10
|
-
import { Fragment as Fragment$1 } from "react";
|
|
9
|
+
import { Fragment } from "react";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
//#region src/ai/components/PastedText.tsx
|
|
12
12
|
/** A paste sent, or about to be sent, as its saved file. */
|
|
13
13
|
function PasteFileCard({ id, lines, bytes, saving = false, error, onRemove }) {
|
|
@@ -49,16 +49,16 @@ function PasteFileCard({ id, lines, bytes, saving = false, error, onRemove }) {
|
|
|
49
49
|
* it reads as, one sent as its file as a card. The blank lines the composer puts around a
|
|
50
50
|
* paste would stack on the block's own spacing, so they are dropped. */
|
|
51
51
|
function UserMessageText({ content, pastes }) {
|
|
52
|
-
if (!pastes?.length) return /* @__PURE__ */ jsx(Fragment, { children: content });
|
|
52
|
+
if (!pastes?.length) return /* @__PURE__ */ jsx(Fragment$1, { children: content });
|
|
53
53
|
const segments = splitPastes(content, pastes);
|
|
54
54
|
const shows = (seg) => typeof seg !== "string" || seg.trim() !== "";
|
|
55
55
|
const blockSpacing = (i) => cx(segments.slice(0, i).some(shows) ? "mt-2.5" : "mt-0", segments.slice(i + 1).some(shows) ? "mb-2.5" : "mb-0");
|
|
56
|
-
return /* @__PURE__ */ jsx(Fragment, { children: segments.map((segment, i) => {
|
|
56
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: segments.map((segment, i) => {
|
|
57
57
|
if (typeof segment === "string") {
|
|
58
58
|
let text = segment;
|
|
59
59
|
if (i > 0) text = text.replace(/^\n+/, "");
|
|
60
60
|
if (i < segments.length - 1) text = text.replace(/\n+$/, "");
|
|
61
|
-
return text ? /* @__PURE__ */ jsx(Fragment
|
|
61
|
+
return text ? /* @__PURE__ */ jsx(Fragment, { children: text }, i) : null;
|
|
62
62
|
}
|
|
63
63
|
if (segment.inline && segment.text !== void 0) return /* @__PURE__ */ jsx("span", {
|
|
64
64
|
className: cx("chat-paste-code block", blockSpacing(i)),
|
|
@@ -5,8 +5,8 @@ import ChatInput from "./ChatInput.js";
|
|
|
5
5
|
import { escapeClosesLayer } from "../core/useKeyboardShortcuts.js";
|
|
6
6
|
import ChatMessageList from "./ChatMessageList.js";
|
|
7
7
|
import ChatActivity from "./ChatActivity.js";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
//#region src/ai/components/SessionView.tsx
|
|
11
11
|
/** One conversation or agent session: its transcript, with the composer at
|
|
12
12
|
* the foot of the scrolling column. The host binds its own data and actions;
|
|
@@ -9,8 +9,8 @@ import { ConfirmModal } from "../../components/ConfirmModal.js";
|
|
|
9
9
|
import { Select } from "../../components/Select.js";
|
|
10
10
|
import { useChatConfig } from "../core/config.js";
|
|
11
11
|
import { useChat } from "../core/ChatProvider.js";
|
|
12
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
12
|
import { useCallback, useEffect, useState, useTransition } from "react";
|
|
13
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
14
14
|
//#region src/ai/components/ShareDialog.tsx
|
|
15
15
|
function isTeamPermission(p) {
|
|
16
16
|
return !!p.team && !p.entireOrganization;
|
|
@@ -150,7 +150,7 @@ function ShareDialog({ conversationId, isOpen, onClose }) {
|
|
|
150
150
|
size: 24,
|
|
151
151
|
label: common.loading
|
|
152
152
|
})
|
|
153
|
-
}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
153
|
+
}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
154
154
|
/* @__PURE__ */ jsxs("div", {
|
|
155
155
|
className: "border theme-border rounded-lg p-3",
|
|
156
156
|
children: [/* @__PURE__ */ jsx("h3", {
|
|
@@ -253,7 +253,7 @@ function ShareButton({ conversationId, disabled = false }) {
|
|
|
253
253
|
const [isOpen, setIsOpen] = useState(false);
|
|
254
254
|
const shared = useShared(conversationId, tools.length > 0 && !isOpen);
|
|
255
255
|
if (!adapter.sharing) return null;
|
|
256
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
256
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
257
257
|
/* @__PURE__ */ jsxs("button", {
|
|
258
258
|
type: "button",
|
|
259
259
|
onClick: () => setIsOpen(true),
|
|
@@ -27,11 +27,38 @@ export declare function useSlashMenu(input: string, config: SlashMenuConfig | un
|
|
|
27
27
|
'aria-controls': string | undefined;
|
|
28
28
|
'aria-activedescendant': string | undefined;
|
|
29
29
|
};
|
|
30
|
+
list: {
|
|
31
|
+
active: number;
|
|
32
|
+
setActive: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
33
|
+
handleKey: (event: globalThis.KeyboardEvent | KeyboardEvent<Element>) => boolean;
|
|
34
|
+
listId: string;
|
|
35
|
+
hostProps: {
|
|
36
|
+
'aria-autocomplete': 'list';
|
|
37
|
+
'aria-controls': string | undefined;
|
|
38
|
+
'aria-activedescendant': string | undefined;
|
|
39
|
+
};
|
|
40
|
+
listProps: {
|
|
41
|
+
id: string;
|
|
42
|
+
role: 'listbox';
|
|
43
|
+
};
|
|
44
|
+
optionProps: (index: number) => {
|
|
45
|
+
id: string;
|
|
46
|
+
role: 'option';
|
|
47
|
+
tabIndex: number;
|
|
48
|
+
'aria-selected': boolean;
|
|
49
|
+
'aria-disabled': true | undefined;
|
|
50
|
+
'data-highlighted': true | undefined;
|
|
51
|
+
'data-disabled': true | undefined;
|
|
52
|
+
onMouseDown: (event: {
|
|
53
|
+
preventDefault: () => void;
|
|
54
|
+
}) => void;
|
|
55
|
+
onMouseMove: () => void;
|
|
56
|
+
onClick: () => void;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
30
59
|
};
|
|
31
|
-
export declare function SlashMenu({ label,
|
|
60
|
+
export declare function SlashMenu({ label, menu, onChoose, }: {
|
|
32
61
|
label: string;
|
|
33
|
-
|
|
34
|
-
matches: SlashCommandOption[];
|
|
35
|
-
active: number;
|
|
62
|
+
menu: ReturnType<typeof useSlashMenu>;
|
|
36
63
|
onChoose: (name: string) => void;
|
|
37
64
|
}): import("react").JSX.Element;
|