@parallelworks/ui 0.20.0 → 0.21.1
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 +5 -0
- package/dist/ai/adapter/openai/createOpenAIStream.js +3 -2
- package/dist/ai/agent/diff.d.ts +0 -1
- package/dist/ai/agent/diff.js +3 -2
- package/dist/ai/agent/toolfmt.js +2 -3
- package/dist/ai/ai.css +5 -0
- package/dist/ai/components/AllocationSelector.js +3 -2
- package/dist/ai/components/AttachmentManager.js +7 -5
- package/dist/ai/components/AttachmentUpload.js +11 -7
- package/dist/ai/components/BlockedGroupBanner.js +2 -2
- package/dist/ai/components/BranchNavigator.js +8 -5
- package/dist/ai/components/ChatEmptyState.js +8 -5
- package/dist/ai/components/ChatInput.d.ts +2 -5
- package/dist/ai/components/ChatInput.js +16 -11
- package/dist/ai/components/ChatMessage.js +25 -17
- package/dist/ai/components/ChatMessageList.js +4 -3
- package/dist/ai/components/ChatSidebar.d.ts +0 -1
- package/dist/ai/components/ChatSidebar.js +22 -16
- package/dist/ai/components/ChatThread.js +9 -11
- package/dist/ai/components/ComposerChrome.js +2 -2
- package/dist/ai/components/ModelSelector.js +20 -14
- package/dist/ai/components/ShareDialog.js +10 -6
- package/dist/ai/components/SlashMenu.d.ts +0 -1
- package/dist/ai/components/agent/ActivityLine.d.ts +0 -1
- package/dist/ai/components/agent/ActivityLine.js +5 -4
- package/dist/ai/components/agent/AgentMessageParts.d.ts +1 -26
- package/dist/ai/components/agent/AgentMessageParts.js +13 -12
- package/dist/ai/core/ChatProvider.d.ts +2 -6
- package/dist/ai/core/ChatProvider.js +42 -67
- package/dist/ai/core/KeyboardShortcutsProvider.js +1 -1
- package/dist/ai/core/chatReducer.d.ts +0 -6
- package/dist/ai/core/chatReducer.js +1 -15
- package/dist/ai/core/useKeyboardShortcuts.d.ts +3 -1
- package/dist/ai/core/useKeyboardShortcuts.js +9 -11
- package/dist/ai/core/useSSEStream.d.ts +0 -1
- package/dist/ai/core/useSSEStream.js +5 -17
- package/dist/ai/strings.d.ts +0 -1
- package/dist/ai/strings.js +0 -1
- package/dist/ai/types.d.ts +1 -1
- package/dist/ai/ui/Avatar.d.ts +1 -2
- package/dist/ai/ui/Avatar.js +7 -18
- package/dist/ai/ui/Dropdown.js +2 -2
- package/dist/ai/ui/Markdown.d.ts +1 -3
- package/dist/ai/ui/Markdown.js +1 -2
- package/dist/ai/ui/Notice.js +5 -3
- package/dist/ai/ui/sidebar.d.ts +0 -1
- package/dist/ai/ui/sidebar.js +5 -3
- package/dist/ai/utils.js +1 -1
- package/dist/components/Avatar.js +4 -2
- package/dist/components/BareModal.js +1 -5
- package/dist/components/Breadcrumbs.js +21 -14
- package/dist/components/Button.js +3 -2
- package/dist/components/Callout.js +4 -3
- package/dist/components/CollapsiblePanel.d.ts +1 -3
- package/dist/components/CollapsiblePanel.js +7 -7
- package/dist/components/CopyToClipboard.js +8 -4
- package/dist/components/CreateModal.js +11 -7
- package/dist/components/Dropdown.d.ts +0 -4
- package/dist/components/Dropdown.js +7 -8
- package/dist/components/Filter.js +2 -2
- package/dist/components/Indicator.js +14 -9
- package/dist/components/Input.js +6 -4
- package/dist/components/Listbox.js +16 -20
- package/dist/components/Loader.js +1 -1
- package/dist/components/MultiSelect.js +5 -8
- package/dist/components/PageHeader.js +10 -7
- package/dist/components/Pagination.js +1 -1
- package/dist/components/Provider.d.ts +0 -8
- package/dist/components/Sort.js +6 -4
- package/dist/components/StatusIcons.d.ts +11 -0
- package/dist/components/StatusIcons.js +20 -0
- package/dist/components/SwitchToggle.js +3 -5
- package/dist/components/Table.d.ts +1 -3
- package/dist/components/Tooltip.js +3 -3
- package/dist/components/dropdownUtils.js +7 -8
- package/dist/components/relativeTime.d.ts +0 -7
- package/dist/components/relativeTime.js +1 -1
- package/dist/duration.js +1 -1
- package/dist/editor/Editor.d.ts +1 -1
- package/dist/editor/Editor.js +1 -1
- package/dist/editor/EditorField.d.ts +0 -1
- package/dist/editor/EditorField.js +8 -8
- package/dist/editor/FormCodePanel.js +20 -23
- package/dist/editor/yamlLanguage.js +2 -2
- package/dist/file-explorer/FileExplorer.js +94 -82
- package/dist/file-explorer/FileExplorerContext.d.ts +1 -2
- package/dist/file-explorer/FileExplorerContext.js +92 -125
- package/dist/file-explorer/FilePreview/Inline.d.ts +1 -2
- package/dist/file-explorer/FilePreview/Inline.js +4 -4
- package/dist/file-explorer/FilePreview/StreamedBadge.js +2 -2
- package/dist/file-explorer/FilePreview/Viewer.js +14 -14
- package/dist/file-explorer/FilePreview/index.d.ts +1 -2
- package/dist/file-explorer/FilePreview/index.js +20 -13
- package/dist/file-explorer/FilePreview/parse.d.ts +2 -1
- package/dist/file-explorer/FilePreview/useObjectBlobUrl.d.ts +5 -4
- package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +23 -36
- package/dist/file-explorer/FilePreview/useObjectText.d.ts +1 -2
- package/dist/file-explorer/FilePreview/useObjectText.js +5 -7
- package/dist/file-explorer/FileRow.js +3 -3
- package/dist/file-explorer/FileRowsWindow.d.ts +5 -12
- package/dist/file-explorer/FileRowsWindow.js +3 -2
- package/dist/file-explorer/FileTable.d.ts +2 -6
- package/dist/file-explorer/LoadMoreRow.d.ts +8 -0
- package/dist/file-explorer/TreeView.d.ts +0 -1
- package/dist/file-explorer/TreeView.js +11 -9
- package/dist/file-explorer/helpers.js +45 -33
- package/dist/file-explorer/lib/fileExplorer.d.ts +0 -2
- package/dist/file-explorer/lib/types.d.ts +0 -1
- package/dist/file-explorer/lib/utils.js +15 -20
- package/dist/file-explorer/toasts.js +54 -45
- package/dist/form/Fields/BooleanField.js +5 -4
- package/dist/form/Fields/CheckboxGroupField.js +5 -4
- package/dist/form/Fields/ColorField.js +5 -4
- package/dist/form/Fields/DropdownField.d.ts +0 -1
- package/dist/form/Fields/DropdownField.js +10 -13
- package/dist/form/Fields/DurationField.js +2 -2
- package/dist/form/Fields/LabelField.js +5 -5
- package/dist/form/Fields/MultiDropdownField.d.ts +1 -1
- package/dist/form/Fields/MultiDropdownField.js +8 -11
- package/dist/form/Fields/NumberField.js +6 -5
- package/dist/form/Fields/ObjectField.d.ts +1 -2
- package/dist/form/Fields/ObjectField.js +22 -21
- package/dist/form/Fields/RadioField.js +4 -3
- package/dist/form/Fields/RangeField.js +7 -6
- package/dist/form/Fields/StringField.js +2 -1
- package/dist/form/Fields/TextAreaField.js +2 -1
- package/dist/form/Form.d.ts +7 -8
- package/dist/form/Form.js +56 -81
- package/dist/form/SpecialTypes/DropdownWrapper.d.ts +0 -2
- package/dist/form/SpecialTypes/DropdownWrapper.js +1 -3
- package/dist/form/SpecialTypes/FormikCustomDropdown.d.ts +1 -3
- package/dist/form/SpecialTypes/FormikCustomDropdown.js +4 -7
- package/dist/form/SpecialTypes/FormikCustomInput.js +16 -13
- package/dist/form/Wizard/WizardContainer.js +8 -25
- package/dist/form/Wizard/WizardNavigation.d.ts +1 -1
- package/dist/form/Wizard/WizardNavigation.js +5 -6
- package/dist/form/Wizard/WizardStepContent.d.ts +1 -1
- package/dist/form/Wizard/WizardStepContent.js +2 -2
- package/dist/form/Wizard/WizardStepIndicator.js +7 -17
- package/dist/form/Wizard/types.d.ts +4 -46
- package/dist/form/Wizard/useWizardState.d.ts +2 -10
- package/dist/form/Wizard/useWizardState.js +42 -92
- package/dist/form/Wizard/utils.js +6 -11
- package/dist/form/lib.js +28 -54
- package/dist/form/types/fieldTypes.d.ts +4 -5
- package/dist/form/utils/dependentOptions.d.ts +6 -0
- package/dist/form/utils/dependentOptions.js +21 -0
- package/dist/form/utils/getParentValue.d.ts +2 -1
- package/dist/form/utils/getParentValue.js +10 -15
- package/dist/form/utils/getValueUsingPath.js +1 -1
- package/dist/graph/AnnotationBanner.d.ts +1 -1
- package/dist/graph/AnnotationBanner.js +10 -6
- package/dist/graph/Collapse.d.ts +3 -3
- package/dist/graph/Collapse.js +3 -8
- package/dist/graph/DependencyGraph.d.ts +5 -4
- package/dist/graph/DependencyGraph.js +178 -226
- package/dist/graph/JobSummary.d.ts +10 -8
- package/dist/graph/JobSummary.js +17 -16
- package/dist/graph/MatrixGroup.d.ts +5 -17
- package/dist/graph/MatrixGroup.js +11 -22
- package/dist/graph/TreeView.d.ts +1 -3
- package/dist/graph/TreeView.js +106 -492
- package/dist/graph/types.d.ts +3 -2
- package/dist/graph/util.d.ts +5 -0
- package/dist/graph/util.js +18 -0
- package/dist/icons/ai/AiOutlineRollback.js +16 -0
- package/dist/icons/bi/BiBell.js +16 -0
- package/dist/icons/bi/BiBellOff.js +16 -0
- package/dist/icons/bi/BiBuildings.js +20 -0
- package/dist/icons/bi/BiError.js +20 -0
- package/dist/icons/bi/BiExpandVertical.js +16 -0
- package/dist/icons/bi/BiPause.js +16 -0
- package/dist/icons/bi/BiPlay.js +16 -0
- package/dist/icons/bi/BiSolidCheckShield.js +16 -0
- package/dist/icons/bi/BiSolidTrashAlt.js +16 -0
- package/dist/icons/bi/BiStop.js +16 -0
- package/dist/icons/bs/BsArrowsCollapse.js +22 -0
- package/dist/icons/bs/BsBank2.js +19 -0
- package/dist/icons/bs/BsBriefcase.js +19 -0
- package/dist/icons/bs/BsBucket.js +19 -0
- package/dist/icons/bs/BsCalendarX.js +23 -0
- package/dist/icons/bs/BsChatLeft.js +19 -0
- package/dist/icons/bs/BsChevronDoubleDown.js +29 -0
- package/dist/icons/bs/BsChevronDoubleUp.js +29 -0
- package/dist/icons/bs/BsClipboardCheck.js +34 -0
- package/dist/icons/bs/BsCurrencyDollar.js +19 -0
- package/dist/icons/bs/BsDash.js +19 -0
- package/dist/icons/bs/BsFileEarmarkZip.js +23 -0
- package/dist/icons/bs/BsFiles.js +19 -0
- package/dist/icons/bs/BsGeoAlt.js +23 -0
- package/dist/icons/bs/BsGrid.js +19 -0
- package/dist/icons/bs/BsLayers.js +19 -0
- package/dist/icons/bs/BsLayoutThreeColumns.js +19 -0
- package/dist/icons/bs/BsListUl.js +22 -0
- package/dist/icons/bs/BsMortarboard.js +23 -0
- package/dist/icons/bs/BsMusicNoteBeamed.js +34 -0
- package/dist/icons/bs/BsOpenai.js +19 -0
- package/dist/icons/bs/BsPersonPlus.js +26 -0
- package/dist/icons/bs/BsSearch.js +19 -0
- package/dist/icons/bs/BsSend.js +19 -0
- package/dist/icons/bs/BsShieldSlash.js +22 -0
- package/dist/icons/bs/BsStar.js +19 -0
- package/dist/icons/bs/BsStarFill.js +19 -0
- package/dist/icons/bs/BsStopCircle.js +23 -0
- package/dist/icons/bs/BsTag.js +23 -0
- package/dist/icons/bs/BsTelephone.js +19 -0
- package/dist/icons/bs/BsTerminal.js +23 -0
- package/dist/icons/bs/BsTerminalFill.js +19 -0
- package/dist/icons/bs/BsThreeDots.js +19 -0
- package/dist/icons/bs/BsThreeDotsVertical.js +19 -0
- package/dist/icons/bs/BsZoomIn.js +37 -0
- package/dist/icons/fa/FaAmazon.js +16 -0
- package/dist/icons/fa/FaAngleDown.js +16 -0
- package/dist/icons/fa/FaAngleLeft.js +16 -0
- package/dist/icons/fa/FaAngleRight.js +16 -0
- package/dist/icons/fa/FaAngleUp.js +16 -0
- package/dist/icons/fa/FaArrowDown.js +16 -0
- package/dist/icons/fa/FaArrowLeft.js +16 -0
- package/dist/icons/fa/FaArrowRight.js +16 -0
- package/dist/icons/fa/FaArrowUp.js +16 -0
- package/dist/icons/fa/FaBalanceScale.js +16 -0
- package/dist/icons/fa/FaCaretDown.js +16 -0
- package/dist/icons/fa/FaCentos.js +16 -0
- package/dist/icons/fa/FaChartLine.js +16 -0
- package/dist/icons/fa/FaChartPie.js +16 -0
- package/dist/icons/fa/FaCheck.js +16 -0
- package/dist/icons/fa/FaChevronDown.js +16 -0
- package/dist/icons/fa/FaChevronUp.js +16 -0
- package/dist/icons/fa/FaChrome.js +16 -0
- package/dist/icons/fa/FaCircleNotch.js +16 -0
- package/dist/icons/fa/FaCloud.js +16 -0
- package/dist/icons/fa/FaCloudDownloadAlt.js +16 -0
- package/dist/icons/fa/FaCog.js +16 -0
- package/dist/icons/fa/FaCogs.js +16 -0
- package/dist/icons/fa/FaComments.js +16 -0
- package/dist/icons/fa/FaCompress.js +16 -0
- package/dist/icons/fa/FaDesktop.js +16 -0
- package/dist/icons/fa/FaDocker.js +16 -0
- package/dist/icons/fa/FaDollarSign.js +16 -0
- package/dist/icons/fa/FaEdge.js +16 -0
- package/dist/icons/fa/FaEdit.js +16 -0
- package/dist/icons/fa/FaExclamationTriangle.js +16 -0
- package/dist/icons/fa/FaExpand.js +16 -0
- package/dist/icons/fa/FaEye.js +16 -0
- package/dist/icons/fa/FaEyeSlash.js +16 -0
- package/dist/icons/fa/FaFile.js +16 -0
- package/dist/icons/fa/FaFilePdf.js +16 -0
- package/dist/icons/fa/FaFilter.js +16 -0
- package/dist/icons/fa/FaFirefoxBrowser.js +16 -0
- package/dist/icons/fa/FaFlask.js +16 -0
- package/dist/icons/fa/FaFolder.js +16 -0
- package/dist/icons/fa/FaGithub.js +16 -0
- package/dist/icons/fa/FaGitlab.js +16 -0
- package/dist/icons/fa/FaGlobe.js +16 -0
- package/dist/icons/fa/FaGlobeAmericas.js +16 -0
- package/dist/icons/fa/FaImage.js +16 -0
- package/dist/icons/fa/FaInfoCircle.js +16 -0
- package/dist/icons/fa/FaKey.js +16 -0
- package/dist/icons/fa/FaLayerGroup.js +16 -0
- package/dist/icons/fa/FaLink.js +16 -0
- package/dist/icons/fa/FaLinkedin.js +16 -0
- package/dist/icons/fa/FaLinux.js +16 -0
- package/dist/icons/fa/FaList.js +16 -0
- package/dist/icons/fa/FaLock.js +16 -0
- package/dist/icons/fa/FaOpenid.js +16 -0
- package/dist/icons/fa/FaOpera.js +16 -0
- package/dist/icons/fa/FaPaperclip.js +16 -0
- package/dist/icons/fa/FaPlus.js +16 -0
- package/dist/icons/fa/FaPowerOff.js +16 -0
- package/dist/icons/fa/FaPrint.js +16 -0
- package/dist/icons/fa/FaQrcode.js +16 -0
- package/dist/icons/fa/FaQuestionCircle.js +16 -0
- package/dist/icons/fa/FaRedhat.js +16 -0
- package/dist/icons/fa/FaRegCircle.js +16 -0
- package/dist/icons/fa/FaRegFileImage.js +16 -0
- package/dist/icons/fa/FaRegFolder.js +16 -0
- package/dist/icons/fa/FaRobot.js +16 -0
- package/dist/icons/fa/FaRocket.js +16 -0
- package/dist/icons/fa/FaRunning.js +16 -0
- package/dist/icons/fa/FaSafari.js +16 -0
- package/dist/icons/fa/FaSave.js +16 -0
- package/dist/icons/fa/FaSearch.js +16 -0
- package/dist/icons/fa/FaShieldAlt.js +16 -0
- package/dist/icons/fa/FaSlack.js +16 -0
- package/dist/icons/fa/FaStar.js +16 -0
- package/dist/icons/fa/FaStop.js +16 -0
- package/dist/icons/fa/FaSuse.js +16 -0
- package/dist/icons/fa/FaTerminal.js +16 -0
- package/dist/icons/fa/FaTimes.js +16 -0
- package/dist/icons/fa/FaUbuntu.js +16 -0
- package/dist/icons/fa/FaUndoAlt.js +16 -0
- package/dist/icons/fa/FaUnlink.js +16 -0
- package/dist/icons/fa/FaUser.js +16 -0
- package/dist/icons/fa/FaUsers.js +16 -0
- package/dist/icons/fa/FaWindows.js +16 -0
- package/dist/icons/fa6/FaApple.js +16 -0
- package/dist/icons/fa6/FaArrowsRotate.js +16 -0
- package/dist/icons/fa6/FaDebian.js +16 -0
- package/dist/icons/fa6/FaFilterCircleXmark.js +16 -0
- package/dist/icons/fa6/FaInbox.js +16 -0
- package/dist/icons/fa6/FaLocationDot.js +16 -0
- package/dist/icons/fa6/FaRegFilePdf.js +16 -0
- package/dist/icons/fa6/FaRegFolderOpen.js +16 -0
- package/dist/icons/fa6/FaUpRightFromSquare.js +16 -0
- package/dist/icons/fa6/FaWandMagicSparkles.js +16 -0
- package/dist/icons/fa6/FaXTwitter.js +16 -0
- package/dist/icons/fi/FiActivity.js +23 -0
- package/dist/icons/fi/FiAlertCircle.js +49 -0
- package/dist/icons/fi/FiChevronDown.js +23 -0
- package/dist/icons/fi/FiClock.js +31 -0
- package/dist/icons/fi/FiCopy.js +34 -0
- package/dist/icons/fi/FiDownload.js +40 -0
- package/dist/icons/fi/FiFile.js +27 -0
- package/dist/icons/fi/FiFileText.js +55 -0
- package/dist/icons/fi/FiHardDrive.js +55 -0
- package/dist/icons/fi/FiRotateCcw.js +27 -0
- package/dist/icons/fi/FiUpload.js +40 -0
- package/dist/icons/fi/FiX.js +37 -0
- package/dist/icons/fi/FiZap.js +23 -0
- package/dist/icons/gi/GiSpy.js +16 -0
- package/dist/icons/go/GoGitCommit.js +16 -0
- package/dist/icons/go/GoGitPullRequest.js +20 -0
- package/dist/icons/go/GoIssueOpened.js +16 -0
- package/dist/icons/go/GoPlus.js +16 -0
- package/dist/icons/go/GoRepoForked.js +28 -0
- package/dist/icons/go/GoSignOut.js +16 -0
- package/dist/icons/go/GoSkip.js +20 -0
- package/dist/icons/go/GoVideo.js +20 -0
- package/dist/icons/gr/GrCloudComputer.js +20 -0
- package/dist/icons/gr/GrInbox.js +20 -0
- package/dist/icons/gr/GrServerCluster.js +20 -0
- package/dist/icons/gr/GrStorage.js +20 -0
- package/dist/icons/gr/GrTasks.js +20 -0
- package/dist/icons/hi/HiCog.js +24 -0
- package/dist/icons/hi/HiDuplicate.js +24 -0
- package/dist/icons/hi/HiOutlineArchive.js +26 -0
- package/dist/icons/hi/HiOutlineClipboardCopy.js +26 -0
- package/dist/icons/hi/HiOutlineHome.js +26 -0
- package/dist/icons/hi/HiQuestionMarkCircle.js +24 -0
- package/dist/icons/hi/HiServer.js +24 -0
- package/dist/icons/hi2/HiMiniCheckCircle.js +24 -0
- package/dist/icons/hi2/HiMiniLanguage.js +28 -0
- package/dist/icons/hi2/HiMiniMinusCircle.js +24 -0
- package/dist/icons/hi2/HiMiniXCircle.js +24 -0
- package/dist/icons/hi2/HiSparkles.js +24 -0
- package/dist/icons/im/ImSpinner5.js +19 -0
- package/dist/icons/io/IoIosNotifications.js +16 -0
- package/dist/icons/io/IoMdBuild.js +16 -0
- package/dist/icons/io/IoMdClose.js +16 -0
- package/dist/icons/io5/IoCloudUploadOutline.js +32 -0
- package/dist/icons/io5/IoDocumentTextOutline.js +31 -0
- package/dist/icons/io5/IoFileTrayFullOutline.js +31 -0
- package/dist/icons/io5/IoHeart.js +16 -0
- package/dist/icons/io5/IoHeartDislike.js +16 -0
- package/dist/icons/io5/IoHeartOutline.js +22 -0
- package/dist/icons/io5/IoInformationCircleOutline.js +50 -0
- package/dist/icons/io5/IoSettingsOutline.js +22 -0
- package/dist/icons/io5/IoWarningOutline.js +40 -0
- package/dist/icons/lu/LuArrowRight.js +27 -0
- package/dist/icons/lu/LuBadgeCheck.js +27 -0
- package/dist/icons/lu/LuBrainCircuit.js +101 -0
- package/dist/icons/lu/LuCalendar.js +46 -0
- package/dist/icons/lu/LuCheck.js +23 -0
- package/dist/icons/lu/LuChevronLeft.js +23 -0
- package/dist/icons/lu/LuChevronRight.js +23 -0
- package/dist/icons/lu/LuExternalLink.js +35 -0
- package/dist/icons/lu/LuEye.js +31 -0
- package/dist/icons/lu/LuEyeOff.js +40 -0
- package/dist/icons/lu/LuFolderTree.js +40 -0
- package/dist/icons/lu/LuIdCard.js +55 -0
- package/dist/icons/lu/LuLogs.js +65 -0
- package/dist/icons/lu/LuMail.js +33 -0
- package/dist/icons/lu/LuMegaphone.js +27 -0
- package/dist/icons/lu/LuMoon.js +23 -0
- package/dist/icons/lu/LuPartyPopper.js +65 -0
- package/dist/icons/lu/LuSettings2.js +48 -0
- package/dist/icons/lu/LuSheet.js +72 -0
- package/dist/icons/lu/LuShield.js +23 -0
- package/dist/icons/lu/LuSun.js +69 -0
- package/dist/icons/lu/LuX.js +27 -0
- package/dist/icons/lu/LuZoomIn.js +59 -0
- package/dist/icons/lu/LuZoomOut.js +49 -0
- package/dist/icons/md/MdClear.js +23 -0
- package/dist/icons/md/MdDragHandle.js +23 -0
- package/dist/icons/md/MdInstallDesktop.js +31 -0
- package/dist/icons/md/MdOutlineAttachMoney.js +23 -0
- package/dist/icons/md/MdOutlineMoneyOff.js +23 -0
- package/dist/icons/md/MdPieChart.js +23 -0
- package/dist/icons/md/MdRefresh.js +23 -0
- package/dist/icons/md/MdReplay.js +23 -0
- package/dist/icons/md/MdSmartphone.js +23 -0
- package/dist/icons/pi/PiArrowBendUpRightBold.js +19 -0
- package/dist/icons/pi/PiPlugsConnectedFill.js +19 -0
- package/dist/icons/pi/PiRectangleDashed.js +19 -0
- package/dist/icons/pi/PiShareBold.js +19 -0
- package/dist/icons/si/SiAnthropic.js +19 -0
- package/dist/icons/si/SiHelm.js +19 -0
- package/dist/icons/si/SiKubernetes.js +19 -0
- package/dist/icons/tb/TbAlertTriangle.js +35 -0
- package/dist/icons/tb/TbAlertTriangleFilled.js +19 -0
- package/dist/icons/tb/TbApi.js +40 -0
- package/dist/icons/tb/TbBrain.js +50 -0
- package/dist/icons/tb/TbBuildingTunnel.js +65 -0
- package/dist/icons/tb/TbEdit.js +35 -0
- package/dist/icons/tb/TbLayoutSidebar.js +27 -0
- package/dist/icons/tb/TbLayoutSidebarLeftCollapse.js +35 -0
- package/dist/icons/tb/TbLayoutSidebarRightCollapse.js +35 -0
- package/dist/icons/tb/TbUser.js +27 -0
- package/dist/icons/tb/TbUserOff.js +35 -0
- package/dist/icons/tb/TbWorldShare.js +55 -0
- package/dist/icons/tb/TbWorldWww.js +65 -0
- package/dist/icons/ti/TiArrowSortedDown.js +20 -0
- package/dist/icons/ti/TiArrowSortedUp.js +20 -0
- package/dist/icons/ti/TiArrowUnsorted.js +20 -0
- package/dist/icons/ti/TiCancel.js +20 -0
- package/dist/icons/vsc/VscChromeMinimize.js +19 -0
- package/dist/icons/vsc/VscJson.js +19 -0
- package/dist/icons/vsc/VscLayoutSidebarLeft.js +19 -0
- package/dist/icons/vsc/VscPass.js +27 -0
- package/dist/icons/vsc/VscSplitHorizontal.js +19 -0
- package/dist/icons/vsc/VscTerminalPowershell.js +19 -0
- package/dist/icons.d.ts +7 -22
- package/dist/icons.js +257 -38
- package/dist/index.d.ts +1 -1
- package/dist/list/ActionToolbar.js +2 -2
- package/dist/list/ListPager.js +4 -3
- package/dist/list/ListTable.js +2 -2
- package/dist/list/ListViewControls.js +29 -42
- package/dist/list/RowContextMenu.js +28 -19
- package/dist/list/listSearch.js +6 -5
- package/dist/logviewer/LogViewer.js +28 -20
- package/dist/logviewer/segments.js +2 -2
- package/dist/styles/theme.css +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +5 -5
- package/package.json +28 -30
- package/dist/ai/ui/buttons.d.ts +0 -1
package/README.md
CHANGED
|
@@ -64,6 +64,11 @@ import { AddIcon, LoaderIcon, TrashIcon } from '@parallelworks/ui/icons'
|
|
|
64
64
|
The barrel re-exports a curated, stable set of icon names over `react-icons`
|
|
65
65
|
so applications never depend on a specific icon pack directly.
|
|
66
66
|
|
|
67
|
+
Each icon ships as its own module under `dist/icons/<set>/`, so an application
|
|
68
|
+
bundles an icon only into the chunks that render it. Every module carries its
|
|
69
|
+
icon's data, copied from its `react-icons` set at build time, and opens with that
|
|
70
|
+
set's name and license.
|
|
71
|
+
|
|
67
72
|
## Workflow engine
|
|
68
73
|
|
|
69
74
|
The workflow surfaces (`/form`'s `DynamicForm`, `/graph`'s `DependencyGraph`,
|
|
@@ -5,8 +5,9 @@ import { processSSEStream } from "./sse.js";
|
|
|
5
5
|
//#region src/ai/adapter/openai/createOpenAIStream.ts
|
|
6
6
|
function createOpenAICompatibleStream(config) {
|
|
7
7
|
return async (req, handlers, signal) => {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const responsesUrl = req.useResponses === true ? config.responsesUrl : void 0;
|
|
9
|
+
const useResponses = !!responsesUrl;
|
|
10
|
+
const url = responsesUrl || config.completionsUrl;
|
|
10
11
|
const body = useResponses ? buildResponsesRequestBody(req.model, req.messages) : {
|
|
11
12
|
model: req.model,
|
|
12
13
|
messages: req.messages,
|
package/dist/ai/agent/diff.d.ts
CHANGED
package/dist/ai/agent/diff.js
CHANGED
|
@@ -2,6 +2,7 @@ import { sanitizeLabel } from "./toolfmt.js";
|
|
|
2
2
|
//#region src/ai/agent/diff.ts
|
|
3
3
|
var MAX_EDIT_DIFF_LINES = 100;
|
|
4
4
|
var MAX_WRITE_DIFF_LINES = 50;
|
|
5
|
+
var DIFF_CONTEXT = 3;
|
|
5
6
|
function isEditDiffTool(name) {
|
|
6
7
|
return name === "EditFile" || name === "WriteFile";
|
|
7
8
|
}
|
|
@@ -133,8 +134,8 @@ function computeEditDiff(oldString, newString, startLine = 0) {
|
|
|
133
134
|
if (!op) continue;
|
|
134
135
|
if (op.tag === "e") {
|
|
135
136
|
const len = op.i2 - op.i1;
|
|
136
|
-
const leading = k > 0 ? Math.min(
|
|
137
|
-
const trailing = k < ops.length - 1 ? Math.min(
|
|
137
|
+
const leading = k > 0 ? Math.min(DIFF_CONTEXT, len) : 0;
|
|
138
|
+
const trailing = k < ops.length - 1 ? Math.min(DIFF_CONTEXT, len) : 0;
|
|
138
139
|
const showAll = len <= leading + trailing;
|
|
139
140
|
const emit = (offset) => {
|
|
140
141
|
const oldNo = op.i1 + offset + 1;
|
package/dist/ai/agent/toolfmt.js
CHANGED
|
@@ -53,7 +53,7 @@ function clip(s, max) {
|
|
|
53
53
|
const r = [...s];
|
|
54
54
|
if (r.length <= max) return s;
|
|
55
55
|
if (max <= 3) return r.slice(0, max).join("");
|
|
56
|
-
return r.slice(0, max - 3).join("")
|
|
56
|
+
return `${r.slice(0, max - 3).join("")}...`;
|
|
57
57
|
}
|
|
58
58
|
function sanitizeLabel(s) {
|
|
59
59
|
let out = "";
|
|
@@ -211,8 +211,7 @@ function grepMatchPath(line, lineNums) {
|
|
|
211
211
|
const i = line.indexOf(":");
|
|
212
212
|
return i >= 0 ? line.slice(0, i) : null;
|
|
213
213
|
}
|
|
214
|
-
|
|
215
|
-
return m ? m[1] ?? null : null;
|
|
214
|
+
return GREP_CONTENT_PATH.exec(line)?.[1] ?? null;
|
|
216
215
|
}
|
|
217
216
|
function grepSearchSummary(argsJSON, body) {
|
|
218
217
|
if (body === "No matches found." || body === "No results after applying offset.") return "No matches";
|
package/dist/ai/ai.css
CHANGED
|
@@ -208,6 +208,7 @@
|
|
|
208
208
|
|
|
209
209
|
/* Light mode: use the primary Shiki theme (--sdm-bg/--sdm-c) */
|
|
210
210
|
.markdown [data-streamdown="code-block-body"] pre {
|
|
211
|
+
/* biome-ignore lint/complexity/noImportantStyles: the highlighter sets the background as an inline style */
|
|
211
212
|
background-color: var(--sdm-bg, inherit) !important;
|
|
212
213
|
color: var(--sdm-fg, inherit);
|
|
213
214
|
}
|
|
@@ -217,6 +218,7 @@
|
|
|
217
218
|
|
|
218
219
|
/* Dark mode: switch to --shiki-dark variants */
|
|
219
220
|
.dark .markdown [data-streamdown="code-block-body"] pre {
|
|
221
|
+
/* biome-ignore lint/complexity/noImportantStyles: the highlighter sets the background as an inline style */
|
|
220
222
|
background-color: var(--shiki-dark-bg, var(--sdm-bg, inherit)) !important;
|
|
221
223
|
color: var(--shiki-dark, var(--sdm-fg, inherit));
|
|
222
224
|
}
|
|
@@ -233,6 +235,7 @@
|
|
|
233
235
|
/* Remove prose backtick pseudo-elements on inline code */
|
|
234
236
|
.markdown code::before,
|
|
235
237
|
.markdown code::after {
|
|
238
|
+
/* biome-ignore lint/complexity/noImportantStyles: the typography styles add these with a more specific selector */
|
|
236
239
|
content: none !important;
|
|
237
240
|
}
|
|
238
241
|
|
|
@@ -250,7 +253,9 @@
|
|
|
250
253
|
@media (hover: none) {
|
|
251
254
|
.chat-actions,
|
|
252
255
|
.chat-meta {
|
|
256
|
+
/* biome-ignore lint/complexity/noImportantStyles: must win over the utility classes that hide these until hover */
|
|
253
257
|
opacity: 1 !important;
|
|
258
|
+
/* biome-ignore lint/complexity/noImportantStyles: must win over the utility classes that hide these until hover */
|
|
254
259
|
pointer-events: auto !important;
|
|
255
260
|
}
|
|
256
261
|
}
|
|
@@ -10,9 +10,10 @@ function AllocationSelector({ variant = "default" } = {}) {
|
|
|
10
10
|
const { adapter, selectedProvider, selectedAllocation, setSelectedAllocation } = useChat();
|
|
11
11
|
const isOrgProvider = isOrgModel(selectedProvider);
|
|
12
12
|
const allocationsAdapter = adapter.allocations;
|
|
13
|
-
const { data: allocations } = useSWR(isOrgProvider && allocationsAdapter ? ["ai-chat-allocations"] : null, () => allocationsAdapter
|
|
13
|
+
const { data: allocations } = useSWR(isOrgProvider && allocationsAdapter ? ["ai-chat-allocations"] : null, () => allocationsAdapter?.list());
|
|
14
14
|
useEffect(() => {
|
|
15
|
-
|
|
15
|
+
const first = allocations?.[0];
|
|
16
|
+
if (isOrgProvider && first && !selectedAllocation) setSelectedAllocation(first.name);
|
|
16
17
|
}, [
|
|
17
18
|
isOrgProvider,
|
|
18
19
|
allocations,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { safeUrl } from "../../safeUrl.js";
|
|
2
|
-
import {
|
|
2
|
+
import { BiSolidTrashAlt } from "../../icons/bi/BiSolidTrashAlt.js";
|
|
3
|
+
import { FiDownload } from "../../icons/fi/FiDownload.js";
|
|
4
|
+
import { FiFile } from "../../icons/fi/FiFile.js";
|
|
3
5
|
import { useChatConfig } from "../core/config.js";
|
|
4
6
|
import { useChat } from "../core/ChatProvider.js";
|
|
5
7
|
import { formatFileSize } from "../utils.js";
|
|
@@ -32,7 +34,7 @@ function AttachmentManager() {
|
|
|
32
34
|
[attachmentId]: state
|
|
33
35
|
});
|
|
34
36
|
}, []);
|
|
35
|
-
const { data: pages, size, setSize, isLoading, isValidating, mutate } = useSWRInfinite(attachmentsAdapter ? attachmentsPageKey : () => null, ([, cursor]) => attachmentsAdapter
|
|
37
|
+
const { data: pages, size, setSize, isLoading, isValidating, mutate } = useSWRInfinite(attachmentsAdapter ? attachmentsPageKey : () => null, ([, cursor]) => attachmentsAdapter?.list({
|
|
36
38
|
limit: 24,
|
|
37
39
|
cursor
|
|
38
40
|
}));
|
|
@@ -89,7 +91,7 @@ function AttachmentManager() {
|
|
|
89
91
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
90
92
|
className: "relative aspect-square bg-(--theme-muted-panel-bg) flex items-center justify-center",
|
|
91
93
|
...openProps,
|
|
92
|
-
children: [/* @__PURE__ */ jsx(
|
|
94
|
+
children: [/* @__PURE__ */ jsx(FiFile, { className: "w-8 h-8 theme-muted-text" }), showThumbnail && /* @__PURE__ */ jsx("img", {
|
|
93
95
|
src: downloadUrl,
|
|
94
96
|
alt: att.filename || "Image",
|
|
95
97
|
className: cx("absolute inset-0 w-full h-full object-cover", thumbnail !== "loaded" && "opacity-0"),
|
|
@@ -115,14 +117,14 @@ function AttachmentManager() {
|
|
|
115
117
|
onClick: () => triggerDownload(downloadUrl, att.filename || "File"),
|
|
116
118
|
className: "p-1.5 rounded-lg hover:theme-hover theme-muted-text transition-colors",
|
|
117
119
|
title: t.download,
|
|
118
|
-
children: /* @__PURE__ */ jsx(
|
|
120
|
+
children: /* @__PURE__ */ jsx(FiDownload, { className: "w-4 h-4" })
|
|
119
121
|
}), /* @__PURE__ */ jsx("button", {
|
|
120
122
|
type: "button",
|
|
121
123
|
onClick: () => handleDelete(att.id),
|
|
122
124
|
disabled: isDeleting,
|
|
123
125
|
className: "p-1.5 rounded-lg hover:bg-red-500/15 theme-muted-text hover:text-red-600 transition-colors",
|
|
124
126
|
title: t.delete,
|
|
125
|
-
children: /* @__PURE__ */ jsx(
|
|
127
|
+
children: /* @__PURE__ */ jsx(BiSolidTrashAlt, { className: "w-4 h-4" })
|
|
126
128
|
})]
|
|
127
129
|
})]
|
|
128
130
|
})]
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BiSolidTrashAlt } from "../../icons/bi/BiSolidTrashAlt.js";
|
|
2
|
+
import { FaFile } from "../../icons/fa/FaFile.js";
|
|
3
|
+
import { FaFilePdf } from "../../icons/fa/FaFilePdf.js";
|
|
4
|
+
import { FaImage } from "../../icons/fa/FaImage.js";
|
|
5
|
+
import { FaPlus } from "../../icons/fa/FaPlus.js";
|
|
2
6
|
import { useChatConfig } from "../core/config.js";
|
|
3
7
|
import { useChat } from "../core/ChatProvider.js";
|
|
4
8
|
import { formatFileSize } from "../utils.js";
|
|
@@ -11,10 +15,10 @@ import { mutate } from "swr";
|
|
|
11
15
|
var DEFAULT_MAX_FILE_SIZE = 26214400;
|
|
12
16
|
var DEFAULT_MAX_FILES = 10;
|
|
13
17
|
function getFileIcon(mimeType) {
|
|
14
|
-
if (!mimeType) return
|
|
15
|
-
if (mimeType.startsWith("image/")) return
|
|
16
|
-
if (mimeType === "application/pdf") return
|
|
17
|
-
return
|
|
18
|
+
if (!mimeType) return FaFile;
|
|
19
|
+
if (mimeType.startsWith("image/")) return FaImage;
|
|
20
|
+
if (mimeType === "application/pdf") return FaFilePdf;
|
|
21
|
+
return FaFile;
|
|
18
22
|
}
|
|
19
23
|
var AttachmentUpload = forwardRef(function AttachmentUpload({ conversationId, attachments, onAttachmentsChange, disabled = false, maxFiles = DEFAULT_MAX_FILES, maxFileSize = DEFAULT_MAX_FILE_SIZE }, ref) {
|
|
20
24
|
const { adapter, notify } = useChat();
|
|
@@ -149,7 +153,7 @@ var AttachmentUpload = forwardRef(function AttachmentUpload({ conversationId, at
|
|
|
149
153
|
className: "p-0.5 rounded hover:bg-red-500/10",
|
|
150
154
|
title: t.remove,
|
|
151
155
|
disabled,
|
|
152
|
-
children: /* @__PURE__ */ jsx(
|
|
156
|
+
children: /* @__PURE__ */ jsx(BiSolidTrashAlt, { className: "w-3 h-3 text-red-500" })
|
|
153
157
|
})
|
|
154
158
|
]
|
|
155
159
|
}, attachment.id || index);
|
|
@@ -163,7 +167,7 @@ var AttachmentUpload = forwardRef(function AttachmentUpload({ conversationId, at
|
|
|
163
167
|
onClick: disabled ? void 0 : handleClick,
|
|
164
168
|
children: [/* @__PURE__ */ jsxs("span", {
|
|
165
169
|
className: "flex items-center justify-center gap-2 text-sm theme-muted-text",
|
|
166
|
-
children: [/* @__PURE__ */ jsx(
|
|
170
|
+
children: [/* @__PURE__ */ jsx(FaPlus, { className: "w-4 h-4" }), /* @__PURE__ */ jsx("span", { children: isDragging ? t.dropFilesHere : t.addFiles })]
|
|
167
171
|
}), /* @__PURE__ */ jsxs("span", {
|
|
168
172
|
className: "block text-xs theme-muted-text mt-1",
|
|
169
173
|
children: [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FaExclamationTriangle } from "../../icons/fa/FaExclamationTriangle.js";
|
|
2
2
|
import { useChatConfig } from "../core/config.js";
|
|
3
3
|
import { useChat } from "../core/ChatProvider.js";
|
|
4
4
|
import { getProviderKeyFromModelId } from "./ModelSelector.js";
|
|
@@ -13,7 +13,7 @@ function BlockedGroupBanner() {
|
|
|
13
13
|
if (!provider?.groupBlocked || !provider.group) return null;
|
|
14
14
|
return /* @__PURE__ */ jsxs("div", {
|
|
15
15
|
className: "mx-4 mt-2 flex items-start gap-3 p-3 rounded-lg bg-amber-500/10 border border-amber-500/20",
|
|
16
|
-
children: [/* @__PURE__ */ jsx(
|
|
16
|
+
children: [/* @__PURE__ */ jsx(FaExclamationTriangle, { className: "w-4 h-4 text-amber-500 shrink-0 mt-0.5" }), /* @__PURE__ */ jsxs("div", {
|
|
17
17
|
className: "flex-1 min-w-0",
|
|
18
18
|
children: [/* @__PURE__ */ jsx("p", {
|
|
19
19
|
className: "text-sm font-medium text-amber-700",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FaAngleLeft } from "../../icons/fa/FaAngleLeft.js";
|
|
2
|
+
import { FaAngleRight } from "../../icons/fa/FaAngleRight.js";
|
|
2
3
|
import { useChatConfig } from "../core/config.js";
|
|
3
4
|
import { useMemo } from "react";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -16,10 +17,12 @@ function BranchNavigator({ messages, currentMessageId, onNavigate }) {
|
|
|
16
17
|
const hasPrev = currentIndex > 0;
|
|
17
18
|
const hasNext = currentIndex < siblings.length - 1;
|
|
18
19
|
const handlePrev = () => {
|
|
19
|
-
|
|
20
|
+
const prev = siblings[currentIndex - 1];
|
|
21
|
+
if (hasPrev && prev) onNavigate(prev.id);
|
|
20
22
|
};
|
|
21
23
|
const handleNext = () => {
|
|
22
|
-
|
|
24
|
+
const next = siblings[currentIndex + 1];
|
|
25
|
+
if (hasNext && next) onNavigate(next.id);
|
|
23
26
|
};
|
|
24
27
|
return /* @__PURE__ */ jsxs("div", {
|
|
25
28
|
className: "inline-flex items-center gap-1 text-xs theme-muted-text",
|
|
@@ -31,7 +34,7 @@ function BranchNavigator({ messages, currentMessageId, onNavigate }) {
|
|
|
31
34
|
className: "p-0.5 rounded theme-hover disabled:opacity-30 disabled:cursor-not-allowed",
|
|
32
35
|
title: t.previous,
|
|
33
36
|
"aria-label": t.previous,
|
|
34
|
-
children: /* @__PURE__ */ jsx(
|
|
37
|
+
children: /* @__PURE__ */ jsx(FaAngleLeft, { className: "w-3 h-3" })
|
|
35
38
|
}),
|
|
36
39
|
/* @__PURE__ */ jsxs("span", {
|
|
37
40
|
className: "min-w-[3ch] text-center",
|
|
@@ -48,7 +51,7 @@ function BranchNavigator({ messages, currentMessageId, onNavigate }) {
|
|
|
48
51
|
className: "p-0.5 rounded theme-hover disabled:opacity-30 disabled:cursor-not-allowed",
|
|
49
52
|
title: t.next,
|
|
50
53
|
"aria-label": t.next,
|
|
51
|
-
children: /* @__PURE__ */ jsx(
|
|
54
|
+
children: /* @__PURE__ */ jsx(FaAngleRight, { className: "w-3 h-3" })
|
|
52
55
|
})
|
|
53
56
|
]
|
|
54
57
|
});
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FaCloud } from "../../icons/fa/FaCloud.js";
|
|
2
|
+
import { FaExclamationTriangle } from "../../icons/fa/FaExclamationTriangle.js";
|
|
3
|
+
import { FaPlus } from "../../icons/fa/FaPlus.js";
|
|
4
|
+
import { FaTimes } from "../../icons/fa/FaTimes.js";
|
|
2
5
|
import { keyedByContent } from "../../components/keys.js";
|
|
3
6
|
import { useChatConfig } from "../core/config.js";
|
|
4
7
|
import { useChat } from "../core/ChatProvider.js";
|
|
@@ -75,7 +78,7 @@ function ChatEmptyState({ targetSession }) {
|
|
|
75
78
|
sessionUnreachable && !sessionBannerDismissed && /* @__PURE__ */ jsxs("div", {
|
|
76
79
|
className: "mx-4 mt-2 flex items-start gap-3 p-3 rounded-lg bg-amber-500/10 border border-amber-500/20",
|
|
77
80
|
children: [
|
|
78
|
-
/* @__PURE__ */ jsx(
|
|
81
|
+
/* @__PURE__ */ jsx(FaExclamationTriangle, { className: "w-4 h-4 text-amber-500 flex-shrink-0 mt-0.5" }),
|
|
79
82
|
/* @__PURE__ */ jsxs("div", {
|
|
80
83
|
className: "flex-1 min-w-0",
|
|
81
84
|
children: [/* @__PURE__ */ jsx("p", {
|
|
@@ -97,7 +100,7 @@ function ChatEmptyState({ targetSession }) {
|
|
|
97
100
|
type: "button",
|
|
98
101
|
onClick: () => setSessionBannerDismissed(true),
|
|
99
102
|
className: "text-amber-400 hover:text-amber-600 transition-colors cursor-pointer",
|
|
100
|
-
children: /* @__PURE__ */ jsx(
|
|
103
|
+
children: /* @__PURE__ */ jsx(FaTimes, { className: "w-3 h-3" })
|
|
101
104
|
})]
|
|
102
105
|
})
|
|
103
106
|
]
|
|
@@ -123,7 +126,7 @@ function ChatEmptyState({ targetSession }) {
|
|
|
123
126
|
}), hasLoadedModels && models.length === 0 ? /* @__PURE__ */ jsxs("div", {
|
|
124
127
|
className: "flex flex-col items-center justify-center gap-4 py-8",
|
|
125
128
|
children: [
|
|
126
|
-
/* @__PURE__ */ jsx(
|
|
129
|
+
/* @__PURE__ */ jsx(FaCloud, { className: "h-16 w-16 theme-muted-text opacity-50" }),
|
|
127
130
|
/* @__PURE__ */ jsx("p", {
|
|
128
131
|
className: "text-lg theme-muted-text",
|
|
129
132
|
children: t.noProvidersTitle
|
|
@@ -138,7 +141,7 @@ function ChatEmptyState({ targetSession }) {
|
|
|
138
141
|
href: extraLinks.addProvider
|
|
139
142
|
},
|
|
140
143
|
className: "inline-flex items-center gap-2 px-4 py-2 rounded-lg transition-colors text-sm font-medium theme-element hover:opacity-90",
|
|
141
|
-
children: [/* @__PURE__ */ jsx(
|
|
144
|
+
children: [/* @__PURE__ */ jsx(FaPlus, { className: "h-3 w-3" }), t.addProvider]
|
|
142
145
|
})
|
|
143
146
|
]
|
|
144
147
|
}) : /* @__PURE__ */ jsx("div", {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import type { AttachmentMeta } from '../types.js';
|
|
2
3
|
import { type SlashMenuConfig } from './SlashMenu.js';
|
|
3
4
|
interface ChatInputProps {
|
|
4
|
-
onSend: (content: string, attachmentIds?: string[], attachmentMeta?:
|
|
5
|
-
filename: string;
|
|
6
|
-
contentType: string;
|
|
7
|
-
size: number;
|
|
8
|
-
}>) => void;
|
|
5
|
+
onSend: (content: string, attachmentIds?: string[], attachmentMeta?: AttachmentMeta) => void;
|
|
9
6
|
disabled?: boolean;
|
|
10
7
|
placeholder?: string | undefined;
|
|
11
8
|
conversationId?: string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FaArrowUp } from "../../icons/fa/FaArrowUp.js";
|
|
2
|
+
import { FaPaperclip } from "../../icons/fa/FaPaperclip.js";
|
|
3
|
+
import { FaStop } from "../../icons/fa/FaStop.js";
|
|
2
4
|
import { useChatConfig } from "../core/config.js";
|
|
3
5
|
import { useChat } from "../core/ChatProvider.js";
|
|
4
6
|
import AttachmentUpload from "./AttachmentUpload.js";
|
|
@@ -54,7 +56,7 @@ function AttachButton({ open, disabled, label, onClick }) {
|
|
|
54
56
|
disabled,
|
|
55
57
|
className: cx("flex-shrink-0 p-3 ml-1 mb-1 rounded-xl transition-colors", open ? "text-blue-600" : "theme-muted-text hover:theme-text", "disabled:opacity-50 disabled:cursor-not-allowed"),
|
|
56
58
|
"aria-label": label,
|
|
57
|
-
children: /* @__PURE__ */ jsx(
|
|
59
|
+
children: /* @__PURE__ */ jsx(FaPaperclip, { className: "h-5 w-5" })
|
|
58
60
|
});
|
|
59
61
|
}
|
|
60
62
|
function SendButton({ onClick, enabled, emphasised, label, testId }) {
|
|
@@ -66,7 +68,7 @@ function SendButton({ onClick, enabled, emphasised, label, testId }) {
|
|
|
66
68
|
className: cx("p-2.5 rounded-xl transition-all duration-200", emphasised ? "theme-element hover:opacity-90" : "theme-muted-panel theme-muted-text", !enabled && "cursor-not-allowed"),
|
|
67
69
|
"aria-label": label,
|
|
68
70
|
title: label,
|
|
69
|
-
children: /* @__PURE__ */ jsx(
|
|
71
|
+
children: /* @__PURE__ */ jsx(FaArrowUp, { className: "h-4 w-4" })
|
|
70
72
|
});
|
|
71
73
|
}
|
|
72
74
|
/** A host-driven turn stands in for the provider's stream and queue. */
|
|
@@ -139,14 +141,17 @@ var ChatInput = forwardRef(function ChatInput({ onSend, disabled = false, placeh
|
|
|
139
141
|
flushQueuedMessages();
|
|
140
142
|
return;
|
|
141
143
|
}
|
|
142
|
-
const
|
|
143
|
-
const attachmentIds = uploaded.map((a) => a.id);
|
|
144
|
+
const attachmentIds = [];
|
|
144
145
|
const meta = {};
|
|
145
|
-
for (const a of
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
for (const a of attachments) {
|
|
147
|
+
if (!a.uploaded || !a.id) continue;
|
|
148
|
+
attachmentIds.push(a.id);
|
|
149
|
+
meta[a.id] = {
|
|
150
|
+
filename: a.filename,
|
|
151
|
+
contentType: a.mimeType,
|
|
152
|
+
size: a.size
|
|
153
|
+
};
|
|
154
|
+
}
|
|
150
155
|
onSend(input.trim(), attachmentIds.length > 0 ? attachmentIds : void 0, attachmentIds.length > 0 ? meta : void 0);
|
|
151
156
|
setInput("");
|
|
152
157
|
clearDraft(conversationId);
|
|
@@ -237,7 +242,7 @@ var ChatInput = forwardRef(function ChatInput({ onSend, disabled = false, placeh
|
|
|
237
242
|
className: cx("p-2.5 rounded-xl", "theme-muted-panel", "hover:theme-hover", "transition-colors"),
|
|
238
243
|
"aria-label": t.stopGenerating,
|
|
239
244
|
title: t.stopGenerating,
|
|
240
|
-
children: /* @__PURE__ */ jsx(
|
|
245
|
+
children: /* @__PURE__ */ jsx(FaStop, { className: "h-4 w-4" })
|
|
241
246
|
}) : /* @__PURE__ */ jsx(SendButton, {
|
|
242
247
|
onClick: handleSubmit,
|
|
243
248
|
enabled: canSend,
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { safeUrl } from "../../safeUrl.js";
|
|
2
|
-
import {
|
|
2
|
+
import { BiError } from "../../icons/bi/BiError.js";
|
|
3
|
+
import { FaCheck } from "../../icons/fa/FaCheck.js";
|
|
4
|
+
import { FaEdit } from "../../icons/fa/FaEdit.js";
|
|
5
|
+
import { FaUndoAlt } from "../../icons/fa/FaUndoAlt.js";
|
|
6
|
+
import { FiCopy } from "../../icons/fi/FiCopy.js";
|
|
7
|
+
import { FiDownload } from "../../icons/fi/FiDownload.js";
|
|
8
|
+
import { FiFile } from "../../icons/fi/FiFile.js";
|
|
9
|
+
import { LuChevronRight } from "../../icons/lu/LuChevronRight.js";
|
|
10
|
+
import { MdRefresh } from "../../icons/md/MdRefresh.js";
|
|
3
11
|
import { durationToAbsHumanDuration } from "../../duration.js";
|
|
4
12
|
import { useChatConfig } from "../core/config.js";
|
|
5
13
|
import { formatFileSize } from "../utils.js";
|
|
@@ -36,7 +44,8 @@ function triggerDownload(url, filename) {
|
|
|
36
44
|
function ChatMessage({ message, allMessages, isStreaming = false, isEditing = false, showAuthor = false, currentUsername, attachmentDownloadUrl, onOpenAttachment, onNavigateBranch, onEdit, onSaveEdit, onCancelEdit, onRegenerate, onRetry, onOpenReasoning, onApprovalAnswer, flush }) {
|
|
37
45
|
const isUser = message.role === "user";
|
|
38
46
|
const isTool = message.role === "tool";
|
|
39
|
-
const
|
|
47
|
+
const otherAuthor = isUser && showAuthor && message.author && currentUsername && message.author.username !== currentUsername ? message.author : void 0;
|
|
48
|
+
const isOtherUser = !!otherAuthor;
|
|
40
49
|
const isRightAligned = isUser && !isOtherUser;
|
|
41
50
|
const hasError = !!message.error;
|
|
42
51
|
const hasReasoning = !!message.reasoning;
|
|
@@ -151,7 +160,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
151
160
|
type: "button",
|
|
152
161
|
onClick: () => onOpenReasoning?.(message.reasoning || "", message.reasoningDuration ?? null),
|
|
153
162
|
className: "flex items-center gap-x-1 text-sm theme-muted-text hover:theme-text transition-colors",
|
|
154
|
-
children: [/* @__PURE__ */ jsx("span", { children: message.reasoningDuration ? `Thought for ${formatDuration(message.reasoningDuration)}` : "Thought process" }), /* @__PURE__ */ jsx(
|
|
163
|
+
children: [/* @__PURE__ */ jsx("span", { children: message.reasoningDuration ? `Thought for ${formatDuration(message.reasoningDuration)}` : "Thought process" }), /* @__PURE__ */ jsx(LuChevronRight, { className: "w-3.5 h-3.5" })]
|
|
155
164
|
})
|
|
156
165
|
}),
|
|
157
166
|
showTurnDurationLabel && /* @__PURE__ */ jsx("div", {
|
|
@@ -169,16 +178,15 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
169
178
|
onApprovalAnswer
|
|
170
179
|
})
|
|
171
180
|
}),
|
|
172
|
-
|
|
181
|
+
otherAuthor && /* @__PURE__ */ jsx("span", {
|
|
173
182
|
className: "text-xs theme-muted-text",
|
|
174
|
-
children:
|
|
183
|
+
children: otherAuthor.name || otherAuthor.username
|
|
175
184
|
}),
|
|
176
|
-
message.content ?
|
|
185
|
+
message.content ? otherAuthor ? /* @__PURE__ */ jsxs("div", {
|
|
177
186
|
className: "flex items-end gap-2",
|
|
178
187
|
children: [/* @__PURE__ */ jsx(Avatar, {
|
|
179
|
-
src:
|
|
180
|
-
name:
|
|
181
|
-
size: "sm",
|
|
188
|
+
src: otherAuthor.avatarUrl ?? void 0,
|
|
189
|
+
name: otherAuthor.name || otherAuthor.username,
|
|
182
190
|
className: "flex-shrink-0 mb-0.5"
|
|
183
191
|
}), /* @__PURE__ */ jsx("div", {
|
|
184
192
|
className: "px-4 py-2.5 chat-ink rounded-2xl rounded-bl-md max-w-[70%] inline-block whitespace-pre-wrap text-base leading-6 bg-[color-mix(in_oklab,var(--theme-panel)_6%,transparent)]",
|
|
@@ -208,7 +216,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
208
216
|
hasError && /* @__PURE__ */ jsxs("div", {
|
|
209
217
|
className: "flex items-center gap-2 mt-2 p-3 rounded-lg bg-red-500/10 border border-red-500/30",
|
|
210
218
|
children: [
|
|
211
|
-
/* @__PURE__ */ jsx(
|
|
219
|
+
/* @__PURE__ */ jsx(BiError, { className: "w-4 h-4 text-red-600 flex-shrink-0" }),
|
|
212
220
|
/* @__PURE__ */ jsx("span", {
|
|
213
221
|
className: "text-sm text-red-700 flex-1",
|
|
214
222
|
children: message.error
|
|
@@ -217,7 +225,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
217
225
|
type: "button",
|
|
218
226
|
onClick: () => onRetry(message.id),
|
|
219
227
|
className: "flex items-center gap-1 px-2 py-1 text-xs font-medium text-red-700 hover:bg-red-500/15 rounded transition-colors",
|
|
220
|
-
children: [/* @__PURE__ */ jsx(
|
|
228
|
+
children: [/* @__PURE__ */ jsx(FaUndoAlt, { className: "w-3 h-3" }), t.retry]
|
|
221
229
|
})
|
|
222
230
|
]
|
|
223
231
|
}),
|
|
@@ -245,7 +253,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
245
253
|
onClick: () => onOpenAttachment ? onOpenAttachment(att) : triggerDownload(downloadUrl, att.filename || "File"),
|
|
246
254
|
className: "inline-flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-lg bg-(--theme-muted-panel-bg) hover:theme-hover transition-colors cursor-pointer",
|
|
247
255
|
children: [
|
|
248
|
-
/* @__PURE__ */ jsx(
|
|
256
|
+
/* @__PURE__ */ jsx(FiFile, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
249
257
|
/* @__PURE__ */ jsx("span", {
|
|
250
258
|
className: "truncate max-w-[150px]",
|
|
251
259
|
children: att.filename || "File"
|
|
@@ -258,7 +266,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
258
266
|
")"
|
|
259
267
|
]
|
|
260
268
|
}) : null,
|
|
261
|
-
/* @__PURE__ */ jsx(
|
|
269
|
+
/* @__PURE__ */ jsx(FiDownload, { className: "w-3 h-3 flex-shrink-0" })
|
|
262
270
|
]
|
|
263
271
|
}, att.id);
|
|
264
272
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -269,7 +277,7 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
269
277
|
style: { cursor: "pointer" }
|
|
270
278
|
} : {},
|
|
271
279
|
children: [
|
|
272
|
-
/* @__PURE__ */ jsx(
|
|
280
|
+
/* @__PURE__ */ jsx(FiFile, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
273
281
|
/* @__PURE__ */ jsx("span", {
|
|
274
282
|
className: "truncate max-w-[150px]",
|
|
275
283
|
children: att.filename || "File"
|
|
@@ -294,21 +302,21 @@ function ChatMessage({ message, allMessages, isStreaming = false, isEditing = fa
|
|
|
294
302
|
onClick: copyToClipboard,
|
|
295
303
|
className: "p-1.5 rounded-lg hover:theme-hover theme-muted-text transition-colors",
|
|
296
304
|
title: t.copy,
|
|
297
|
-
children: copied ? /* @__PURE__ */ jsx(
|
|
305
|
+
children: copied ? /* @__PURE__ */ jsx(FaCheck, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx(FiCopy, { className: "w-4 h-4" })
|
|
298
306
|
}),
|
|
299
307
|
isUser && !isOtherUser && onEdit && /* @__PURE__ */ jsx("button", {
|
|
300
308
|
type: "button",
|
|
301
309
|
onClick: () => onEdit(message.id),
|
|
302
310
|
className: "p-1.5 rounded-lg hover:theme-hover theme-muted-text transition-colors",
|
|
303
311
|
title: t.edit,
|
|
304
|
-
children: /* @__PURE__ */ jsx(
|
|
312
|
+
children: /* @__PURE__ */ jsx(FaEdit, { className: "w-4 h-4" })
|
|
305
313
|
}),
|
|
306
314
|
!isUser && onRegenerate && /* @__PURE__ */ jsx("button", {
|
|
307
315
|
type: "button",
|
|
308
316
|
onClick: () => onRegenerate(message.id),
|
|
309
317
|
className: "p-1.5 rounded-lg hover:theme-hover theme-muted-text transition-colors",
|
|
310
318
|
title: t.regenerate,
|
|
311
|
-
children: /* @__PURE__ */ jsx(
|
|
319
|
+
children: /* @__PURE__ */ jsx(MdRefresh, { className: "w-4 h-4" })
|
|
312
320
|
}),
|
|
313
321
|
!isUser && onNavigateBranch && /* @__PURE__ */ jsx(BranchNavigator, {
|
|
314
322
|
messages: allMessages,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FiX } from "../../icons/fi/FiX.js";
|
|
2
|
+
import { LuChevronRight } from "../../icons/lu/LuChevronRight.js";
|
|
2
3
|
import { durationToAbsHumanDuration } from "../../duration.js";
|
|
3
4
|
import { useChatConfig } from "../core/config.js";
|
|
4
5
|
import { useChat } from "../core/ChatProvider.js";
|
|
@@ -208,7 +209,7 @@ function ChatMessageList({ messages, allMessages, streamingMessage, queuedMessag
|
|
|
208
209
|
children: /* @__PURE__ */ jsx("span", { children: elapsedTime > 0 ? `${tThinking.label} (${elapsedTime}s)` : tThinking.ellipsis })
|
|
209
210
|
}) : /* @__PURE__ */ jsxs("div", {
|
|
210
211
|
className: "flex items-center gap-x-1 text-sm theme-muted-text hover:theme-text transition-colors",
|
|
211
|
-
children: [/* @__PURE__ */ jsx("span", { children: tThinking.thoughtFor(finalThinkingDuration ? durationToAbsHumanDuration(Duration.fromMillis(finalThinkingDuration)) : `${elapsedTime}s`) }), /* @__PURE__ */ jsx(
|
|
212
|
+
children: [/* @__PURE__ */ jsx("span", { children: tThinking.thoughtFor(finalThinkingDuration ? durationToAbsHumanDuration(Duration.fromMillis(finalThinkingDuration)) : `${elapsedTime}s`) }), /* @__PURE__ */ jsx(LuChevronRight, { className: "w-3.5 h-3.5" })]
|
|
212
213
|
})
|
|
213
214
|
}), isThinking && /* @__PURE__ */ jsxs("div", {
|
|
214
215
|
className: "relative ml-6 pl-3 border-l-2 theme-border",
|
|
@@ -271,7 +272,7 @@ function ChatMessageList({ messages, allMessages, streamingMessage, queuedMessag
|
|
|
271
272
|
title: strings.queue.remove,
|
|
272
273
|
onClick: () => onRemoveQueued(msg.id),
|
|
273
274
|
className: "absolute top-1 right-1 rounded p-1 opacity-0 transition-opacity group-hover/queued:opacity-100 focus-visible:opacity-100 hover:bg-(--theme-hover) text-(--theme-muted-text-color)",
|
|
274
|
-
children: /* @__PURE__ */ jsx(
|
|
275
|
+
children: /* @__PURE__ */ jsx(FiX, { className: "h-3.5 w-3.5" })
|
|
275
276
|
})]
|
|
276
277
|
}, msg.id)),
|
|
277
278
|
footer,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export type ConversationGroupKey = 'groupToday' | 'groupYesterday' | 'groupThisWeek' | 'groupThisMonth' | 'groupOlder';
|
|
2
1
|
export default function ChatSidebar({ actions, }: {
|
|
3
2
|
/** False when the host's page header carries new chat, attachments and search. */
|
|
4
3
|
actions?: boolean;
|