@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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { useRunFile, useSlots, useStrings, useWorkflowEngine } from "../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaArrowLeft } from "../icons/fa/FaArrowLeft.js";
|
|
3
|
+
import { FaArrowRight } from "../icons/fa/FaArrowRight.js";
|
|
4
|
+
import { IoDocumentTextOutline } from "../icons/io5/IoDocumentTextOutline.js";
|
|
3
5
|
import { TooltipInfo } from "../components/Tooltip.js";
|
|
4
6
|
import { BareModal, modalPanelClasses } from "../components/BareModal.js";
|
|
5
7
|
import { Indicator } from "../components/Indicator.js";
|
|
@@ -9,6 +11,7 @@ import { toAbsHumanDuration } from "../duration.js";
|
|
|
9
11
|
import { AnnotationBanner } from "./AnnotationBanner.js";
|
|
10
12
|
import { Collapse } from "./Collapse.js";
|
|
11
13
|
import { Reveal } from "./Reveal.js";
|
|
14
|
+
import { jobLabel, toggled } from "./util.js";
|
|
12
15
|
import { Joblist } from "./JobSummary.js";
|
|
13
16
|
import { MatrixGroupNode, MatrixGroupSummaryItem } from "./MatrixGroup.js";
|
|
14
17
|
import TreeView from "./TreeView.js";
|
|
@@ -54,7 +57,7 @@ var addCleanupSteps = ({ jobs }) => {
|
|
|
54
57
|
linkedStep: `${sourceSteps.length - index - 1}`
|
|
55
58
|
};
|
|
56
59
|
delete newStep.cleanup;
|
|
57
|
-
const clonedStep = cloned.steps[index];
|
|
60
|
+
const clonedStep = cloned.steps[sourceSteps.length - index - 1];
|
|
58
61
|
if (clonedStep) delete clonedStep.cleanup;
|
|
59
62
|
cloned.steps.push(newStep);
|
|
60
63
|
});
|
|
@@ -72,7 +75,7 @@ var addCleanupSteps = ({ jobs }) => {
|
|
|
72
75
|
linkedStep: `${sourceCleanup.length - index - 1 + cloned.steps.length}`
|
|
73
76
|
};
|
|
74
77
|
delete newStep.cleanup;
|
|
75
|
-
const clonedStep = clonedCleanup[index];
|
|
78
|
+
const clonedStep = clonedCleanup[sourceCleanup.length - index - 1];
|
|
76
79
|
if (clonedStep) delete clonedStep.cleanup;
|
|
77
80
|
clonedCleanup.push(newStep);
|
|
78
81
|
});
|
|
@@ -124,10 +127,14 @@ function parsePrefixToPath(prefix) {
|
|
|
124
127
|
}
|
|
125
128
|
return path;
|
|
126
129
|
}
|
|
127
|
-
function
|
|
130
|
+
function displayJobsOf(engine, jobs, matrixGroups) {
|
|
128
131
|
const visibleJobs = structuredClone(jobs);
|
|
129
|
-
for (const jobName of Object.keys(jobs
|
|
132
|
+
for (const jobName of Object.keys(jobs)) if (jobs[jobName]?.if === false) delete visibleJobs[jobName];
|
|
130
133
|
engine.collapseMatrixGroups(matrixGroups, visibleJobs);
|
|
134
|
+
return visibleJobs;
|
|
135
|
+
}
|
|
136
|
+
function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
137
|
+
const visibleJobs = displayJobsOf(engine, jobs, matrixGroups);
|
|
131
138
|
const allDeps = {};
|
|
132
139
|
for (const jobName of Object.keys(visibleJobs)) allDeps[jobName] = engine.jobDependencies(jobName, visibleJobs, allDeps);
|
|
133
140
|
const filteredDeps = {};
|
|
@@ -142,37 +149,29 @@ function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
|
142
149
|
}).sort();
|
|
143
150
|
}
|
|
144
151
|
const depended_on = {};
|
|
145
|
-
Object.keys(visibleJobs)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
Object.keys(visibleJobs).forEach((jobName) => {
|
|
152
|
-
if (depended_on[jobName]) depended_on[jobName].sort();
|
|
153
|
-
});
|
|
154
|
-
const unfinished = structuredClone(visibleJobs);
|
|
152
|
+
for (const jobName of Object.keys(visibleJobs)) for (const dep of filteredDeps[jobName] ?? []) {
|
|
153
|
+
depended_on[dep] ??= [];
|
|
154
|
+
depended_on[dep].push(jobName);
|
|
155
|
+
}
|
|
156
|
+
for (const dependents of Object.values(depended_on)) dependents.sort();
|
|
157
|
+
const unfinished = new Set(Object.keys(visibleJobs));
|
|
155
158
|
const rootLevel = [];
|
|
156
159
|
const deps = [rootLevel];
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
});
|
|
160
|
+
for (const jobName of unfinished) if (filteredDeps[jobName]?.length === 0) {
|
|
161
|
+
rootLevel.push(jobName);
|
|
162
|
+
unfinished.delete(jobName);
|
|
163
|
+
}
|
|
163
164
|
let prevLen;
|
|
164
165
|
do {
|
|
165
166
|
const toAppend = [];
|
|
166
|
-
const
|
|
167
|
-
prevLen =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
});
|
|
167
|
+
const pending = new Set(unfinished);
|
|
168
|
+
prevLen = pending.size;
|
|
169
|
+
for (const jobName of pending) if ((filteredDeps[jobName] ?? []).every((dep) => !pending.has(dep))) {
|
|
170
|
+
toAppend.push(jobName);
|
|
171
|
+
unfinished.delete(jobName);
|
|
172
|
+
}
|
|
174
173
|
if (toAppend.length > 0) deps.push(toAppend);
|
|
175
|
-
} while (prevLen !==
|
|
174
|
+
} while (prevLen !== unfinished.size);
|
|
176
175
|
const finalDeps = [];
|
|
177
176
|
deps.forEach((col) => {
|
|
178
177
|
const toAppend = [];
|
|
@@ -201,16 +200,7 @@ function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
|
201
200
|
}
|
|
202
201
|
finalDeps.push(toAppend);
|
|
203
202
|
});
|
|
204
|
-
|
|
205
|
-
const first = finalDeps[0];
|
|
206
|
-
if (!first) break;
|
|
207
|
-
if (first.length === 0) {
|
|
208
|
-
finalDeps.splice(0, 1);
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
if (first[0]?.length !== 0) break;
|
|
212
|
-
while (first.length > 0 && first[0]?.length === 0) first.splice(0, 1);
|
|
213
|
-
}
|
|
203
|
+
if (finalDeps[0]?.length === 0) finalDeps.shift();
|
|
214
204
|
const ancestorDists = {};
|
|
215
205
|
const descendantDists = {};
|
|
216
206
|
const jobNames = Object.keys(visibleJobs);
|
|
@@ -222,8 +212,8 @@ function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
|
222
212
|
for (const start of jobNames) {
|
|
223
213
|
const aDist = /* @__PURE__ */ new Map();
|
|
224
214
|
const q1 = [[start, 0]];
|
|
225
|
-
|
|
226
|
-
const [job, d] =
|
|
215
|
+
for (let next = q1.shift(); next; next = q1.shift()) {
|
|
216
|
+
const [job, d] = next;
|
|
227
217
|
for (const dep of filteredDeps[job] ?? []) if (!aDist.has(dep)) {
|
|
228
218
|
aDist.set(dep, d + 1);
|
|
229
219
|
q1.push([dep, d + 1]);
|
|
@@ -232,8 +222,8 @@ function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
|
232
222
|
ancestorDists[start] = aDist;
|
|
233
223
|
const dDist = /* @__PURE__ */ new Map();
|
|
234
224
|
const q2 = [[start, 0]];
|
|
235
|
-
|
|
236
|
-
const [job, d] =
|
|
225
|
+
for (let next = q2.shift(); next; next = q2.shift()) {
|
|
226
|
+
const [job, d] = next;
|
|
237
227
|
for (const child of reverseDeps[job] ?? []) if (!dDist.has(child)) {
|
|
238
228
|
dDist.set(child, d + 1);
|
|
239
229
|
q2.push([child, d + 1]);
|
|
@@ -249,6 +239,32 @@ function computeGraphLayout(engine, jobs, matrixGroups) {
|
|
|
249
239
|
descendantDists
|
|
250
240
|
};
|
|
251
241
|
}
|
|
242
|
+
function jobHandlers({ engine, jobs, displayJobs, pathPrefix, stepsOpen, toggleSteps, expandedSubworkflows, toggleSubworkflow, openInNewGraph, setSublogOpen, renderWell }) {
|
|
243
|
+
const isStepsOpen = (j) => stepsOpen.has(pathPrefix + j);
|
|
244
|
+
const subworkflowKey = (j, s) => `${pathPrefix}${j}:${s}`;
|
|
245
|
+
const openLog = (j, s) => setSublogOpen(engine.stepLogPath(pathPrefix, j, s));
|
|
246
|
+
return {
|
|
247
|
+
isStepsOpen,
|
|
248
|
+
onJobClick: (j) => {
|
|
249
|
+
const status = jobs[j]?.status ?? displayJobs[j]?.status;
|
|
250
|
+
if (!isStepsOpen(j) && (status === "skipped" || status === "skipped-failed")) return;
|
|
251
|
+
toggleSteps(pathPrefix + j);
|
|
252
|
+
},
|
|
253
|
+
onStepClick: (j, s) => {
|
|
254
|
+
const step = jobs[j]?.steps?.[s];
|
|
255
|
+
if (step?.status === "skipped" || step?.status === "skipped-failed") return;
|
|
256
|
+
if (step?.subworkflow) toggleSubworkflow(subworkflowKey(j, s));
|
|
257
|
+
else openLog(j, s);
|
|
258
|
+
},
|
|
259
|
+
onStepLogClick: openLog,
|
|
260
|
+
onSubworkflowIcon: (j, s) => openInNewGraph(pathPrefix, j, s),
|
|
261
|
+
renderSubworkflow: (j, s) => {
|
|
262
|
+
const subJobs = jobs[j]?.steps?.[s]?.subworkflow?.jobs;
|
|
263
|
+
if (!subJobs) return null;
|
|
264
|
+
return renderWell(subJobs, `${pathPrefix}subworkflows/${j}/step_${s}/`, expandedSubworkflows.has(subworkflowKey(j, s)));
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
252
268
|
function SubworkflowWell({ expanded, onSettled, className, children }) {
|
|
253
269
|
return /* @__PURE__ */ jsx(Reveal, {
|
|
254
270
|
open: expanded,
|
|
@@ -262,6 +278,8 @@ function SubworkflowWell({ expanded, onSettled, className, children }) {
|
|
|
262
278
|
});
|
|
263
279
|
}
|
|
264
280
|
var SUBGRAPH_Z_STEP = 100;
|
|
281
|
+
var CONNECTOR_COLOR = "var(--theme-border)";
|
|
282
|
+
var HIGHLIGHT_COLOR = "#3B82F6";
|
|
265
283
|
var FIT_ANIMATION_MS = 300;
|
|
266
284
|
function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflows, toggleSubworkflow, openInNewGraph, setSublogOpen, invalidateConnectors, requestFit, stepsOpen, toggleSteps, matrixOpen, toggleMatrix, onReady }) {
|
|
267
285
|
const engine = useWorkflowEngine();
|
|
@@ -353,36 +371,27 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
353
371
|
invalidateConnectors
|
|
354
372
|
]);
|
|
355
373
|
const buildBoxLayer = useCallback(() => {
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
};
|
|
373
|
-
const onStepLogClick = (j, s) => setSublogOpen(engine.stepLogPath(pathPrefix, j, s));
|
|
374
|
-
const onSubworkflowIcon = (j, s) => openNew(j, s);
|
|
375
|
-
const isSubworkflowExpanded = (j, s) => expandedSubworkflows.has(`${pathPrefix}${j}:${s}`);
|
|
376
|
-
const renderSubworkflow = (j, s) => {
|
|
377
|
-
const subJobs = jobs[j]?.steps?.[s]?.subworkflow?.jobs;
|
|
378
|
-
if (!subJobs) return null;
|
|
379
|
-
return /* @__PURE__ */ jsx(SubworkflowWell, {
|
|
380
|
-
expanded: isSubworkflowExpanded(j, s),
|
|
374
|
+
const handlers = jobHandlers({
|
|
375
|
+
engine,
|
|
376
|
+
jobs,
|
|
377
|
+
displayJobs,
|
|
378
|
+
pathPrefix,
|
|
379
|
+
stepsOpen,
|
|
380
|
+
toggleSteps,
|
|
381
|
+
expandedSubworkflows,
|
|
382
|
+
toggleSubworkflow: (key) => {
|
|
383
|
+
toggleSubworkflow(key);
|
|
384
|
+
requestAnimationFrame(invalidateConnectors);
|
|
385
|
+
},
|
|
386
|
+
openInNewGraph,
|
|
387
|
+
setSublogOpen,
|
|
388
|
+
renderWell: (subJobs, subPrefix, expanded) => /* @__PURE__ */ jsx(SubworkflowWell, {
|
|
389
|
+
expanded,
|
|
381
390
|
onSettled: requestFit,
|
|
382
391
|
className: "my-2 rounded-lg border-4 border-(--theme-border)",
|
|
383
392
|
children: /* @__PURE__ */ jsx(NestedSubgraph, {
|
|
384
393
|
jobs: subJobs,
|
|
385
|
-
pathPrefix:
|
|
394
|
+
pathPrefix: subPrefix,
|
|
386
395
|
depth: depth + 1,
|
|
387
396
|
preview,
|
|
388
397
|
animT,
|
|
@@ -397,13 +406,15 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
397
406
|
matrixOpen,
|
|
398
407
|
toggleMatrix
|
|
399
408
|
})
|
|
400
|
-
})
|
|
401
|
-
};
|
|
409
|
+
})
|
|
410
|
+
});
|
|
402
411
|
return /* @__PURE__ */ jsx("div", {
|
|
403
412
|
className: "flex relative",
|
|
404
413
|
children: dependencyCols.map((col) => {
|
|
405
414
|
return /* @__PURE__ */ jsx("div", { children: col.map((jobNames) => {
|
|
406
|
-
const
|
|
415
|
+
const first = jobNames[0];
|
|
416
|
+
if (first === void 0) return null;
|
|
417
|
+
const matrixGroup = displayJobs[first]?._matrixGroup;
|
|
407
418
|
if (matrixGroup) return /* @__PURE__ */ jsx(MatrixGroupNode, {
|
|
408
419
|
matrixGroup,
|
|
409
420
|
jobNames,
|
|
@@ -412,50 +423,38 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
412
423
|
onToggle: () => toggleMatrix(pathPrefix + matrixGroup.originaljob),
|
|
413
424
|
jobs,
|
|
414
425
|
activeDists,
|
|
415
|
-
onMouseEnter: () => setHoveredJob(
|
|
426
|
+
onMouseEnter: () => setHoveredJob(first),
|
|
416
427
|
onMouseLeave: () => setHoveredJob(null),
|
|
417
428
|
hoveredRelated,
|
|
418
429
|
animT,
|
|
419
430
|
zBase,
|
|
420
|
-
|
|
421
|
-
onJobClick,
|
|
422
|
-
onStepClick,
|
|
423
|
-
onStepLogClick,
|
|
424
|
-
onSubworkflowIcon,
|
|
425
|
-
isSubworkflowExpanded,
|
|
426
|
-
renderSubworkflow,
|
|
431
|
+
handlers,
|
|
427
432
|
preview
|
|
428
|
-
},
|
|
433
|
+
}, `node_${first}`);
|
|
429
434
|
return /* @__PURE__ */ jsxs("div", {
|
|
430
|
-
id:
|
|
435
|
+
id: `node_${pathPrefix}${first}`,
|
|
431
436
|
role: "none",
|
|
432
437
|
className: "relative m-24",
|
|
433
|
-
style: { zIndex: (activeDists?.has(
|
|
434
|
-
onMouseEnter: () => setHoveredJob(
|
|
438
|
+
style: { zIndex: (activeDists?.has(first) ? 25 : 1) + zBase },
|
|
439
|
+
onMouseEnter: () => setHoveredJob(first),
|
|
435
440
|
onMouseLeave: () => setHoveredJob(null),
|
|
436
|
-
onFocus: () => setHoveredJob(
|
|
441
|
+
onFocus: () => setHoveredJob(first),
|
|
437
442
|
onBlur: () => setHoveredJob(null),
|
|
438
443
|
children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 rounded-2xl bg-(--theme-panel-bg)" }), /* @__PURE__ */ jsx("div", {
|
|
439
444
|
className: "relative border-solid shadow py-4 px-8 rounded-xl border-4 whitespace-nowrap bg-(--theme-panel-bg) text-2xl",
|
|
440
445
|
style: {
|
|
441
|
-
opacity: hoveredRelated && !hoveredRelated.has(
|
|
446
|
+
opacity: hoveredRelated && !hoveredRelated.has(first) ? .5 : 1,
|
|
442
447
|
transition: `opacity ${animT}s`
|
|
443
448
|
},
|
|
444
449
|
children: /* @__PURE__ */ jsx(Joblist, {
|
|
445
450
|
jobs: displayJobs,
|
|
446
451
|
jobNames,
|
|
447
|
-
|
|
448
|
-
isStepsOpen,
|
|
449
|
-
onStepClick,
|
|
450
|
-
onStepLogClick,
|
|
451
|
-
onSubworkflowIcon,
|
|
452
|
-
isSubworkflowExpanded,
|
|
453
|
-
renderSubworkflow,
|
|
452
|
+
...handlers,
|
|
454
453
|
growWidth: true,
|
|
455
454
|
preview
|
|
456
455
|
})
|
|
457
456
|
})]
|
|
458
|
-
},
|
|
457
|
+
}, `node_${first}`);
|
|
459
458
|
}) }, col[0]?.[0]);
|
|
460
459
|
})
|
|
461
460
|
});
|
|
@@ -484,13 +483,13 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
484
483
|
]);
|
|
485
484
|
const memoizedBoxLayer = useMemo(() => buildBoxLayer(), [buildBoxLayer]);
|
|
486
485
|
const hasLiveNestedGraph = Array.from(expandedSubworkflows).some((k) => k.startsWith(pathPrefix));
|
|
487
|
-
if (!
|
|
486
|
+
if (!dependencyCols[0]?.length) return null;
|
|
488
487
|
return /* @__PURE__ */ jsxs("div", {
|
|
489
488
|
ref: wrapperRef,
|
|
490
489
|
className: "relative",
|
|
491
490
|
children: [(() => {
|
|
492
491
|
const wrapper = wrapperRef.current;
|
|
493
|
-
const gid = (name) => document.getElementById(
|
|
492
|
+
const gid = (name) => document.getElementById(`node_${pathPrefix}${name}`);
|
|
494
493
|
const ox = (el) => offsetWithin(el, wrapper).x;
|
|
495
494
|
const nodeConnectorY = (el) => offsetWithin(el, wrapper).y + 37;
|
|
496
495
|
let colGap = 32;
|
|
@@ -500,27 +499,29 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
500
499
|
if (col0 && col1) colGap = ox(col1) - (ox(col0) + col0.offsetWidth);
|
|
501
500
|
}
|
|
502
501
|
let minAdy = Number.POSITIVE_INFINITY;
|
|
503
|
-
for (const col of dependencyCols) for (const jobNames of col)
|
|
504
|
-
const
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
502
|
+
for (const col of dependencyCols) for (const jobNames of col) {
|
|
503
|
+
const first = jobNames[0];
|
|
504
|
+
if (first === void 0) continue;
|
|
505
|
+
for (const dep of directDeps[first] ?? []) {
|
|
506
|
+
const s = gid(dep);
|
|
507
|
+
const e = gid(first);
|
|
508
|
+
if (!s || !e) continue;
|
|
509
|
+
const dy = Math.abs(nodeConnectorY(e) - nodeConnectorY(s));
|
|
510
|
+
if (dy > 0 && dy < minAdy) minAdy = dy;
|
|
511
|
+
}
|
|
509
512
|
}
|
|
510
513
|
const MAX_ARC_R = 16;
|
|
511
514
|
const arcR = Math.min(minAdy === Number.POSITIVE_INFINITY ? MAX_ARC_R : minAdy / 4, colGap / 2, MAX_ARC_R);
|
|
512
|
-
return dependencyCols.map((col) => /* @__PURE__ */ jsx(React.Fragment, { children: col.map((
|
|
513
|
-
const isHighlighted = hoveredRelated?.has(
|
|
514
|
-
const baseColor = "var(--theme-border)";
|
|
515
|
+
return dependencyCols.map((col) => /* @__PURE__ */ jsx(React.Fragment, { children: col.map(([first]) => first === void 0 ? null : /* @__PURE__ */ jsx(React.Fragment, { children: (directDeps[first] ?? []).map((dep) => {
|
|
516
|
+
const isHighlighted = hoveredRelated?.has(first) && hoveredRelated?.has(dep);
|
|
515
517
|
const depDist = activeDists?.get(dep) ?? 0;
|
|
516
|
-
const targetDist = activeDists?.get(
|
|
517
|
-
const hopDelay = animT;
|
|
518
|
+
const targetDist = activeDists?.get(first) ?? 0;
|
|
518
519
|
const closerDist = Math.min(depDist, targetDist);
|
|
519
|
-
const connectorDelay = closerDist *
|
|
520
|
-
const retractDelay = (maxHoveredDistRef.current - closerDist) *
|
|
520
|
+
const connectorDelay = closerDist * animT;
|
|
521
|
+
const retractDelay = (maxHoveredDistRef.current - closerDist) * animT;
|
|
521
522
|
const drawRightToLeft = targetDist < depDist;
|
|
522
523
|
const start = gid(dep);
|
|
523
|
-
const end = gid(
|
|
524
|
+
const end = gid(first);
|
|
524
525
|
if (!start || !end) return null;
|
|
525
526
|
const x1 = ox(start) + start.offsetWidth - 2;
|
|
526
527
|
const y1 = nodeConnectorY(start);
|
|
@@ -567,7 +568,7 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
567
568
|
"aria-hidden": "true",
|
|
568
569
|
overflow: "visible",
|
|
569
570
|
className: "absolute pointer-events-none",
|
|
570
|
-
style: { zIndex: (isHighlighted || activeDists?.has(dep) && activeDists?.has(
|
|
571
|
+
style: { zIndex: (isHighlighted || activeDists?.has(dep) && activeDists?.has(first) ? 30 : 10) + zBase },
|
|
571
572
|
children: [
|
|
572
573
|
/* @__PURE__ */ jsx("rect", {
|
|
573
574
|
x: x1 - 16,
|
|
@@ -587,20 +588,20 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
587
588
|
cx: x1,
|
|
588
589
|
cy: y1,
|
|
589
590
|
r: "8",
|
|
590
|
-
fill: isHighlighted ?
|
|
591
|
+
fill: isHighlighted ? HIGHLIGHT_COLOR : CONNECTOR_COLOR,
|
|
591
592
|
style: {
|
|
592
593
|
opacity: hoveredRelated && !isHighlighted ? .3 : 1,
|
|
593
|
-
transition: isHighlighted ? `fill ${animT}s ${depDist *
|
|
594
|
+
transition: isHighlighted ? `fill ${animT}s ${depDist * animT}s, opacity 0s` : `fill ${animT}s ${(maxHoveredDistRef.current - depDist) * animT}s, opacity 0s`
|
|
594
595
|
}
|
|
595
596
|
}),
|
|
596
597
|
/* @__PURE__ */ jsx("circle", {
|
|
597
598
|
cx: x2,
|
|
598
599
|
cy: y2,
|
|
599
600
|
r: "8",
|
|
600
|
-
fill: isHighlighted ?
|
|
601
|
+
fill: isHighlighted ? HIGHLIGHT_COLOR : CONNECTOR_COLOR,
|
|
601
602
|
style: {
|
|
602
603
|
opacity: hoveredRelated && !isHighlighted ? .3 : 1,
|
|
603
|
-
transition: isHighlighted ? `fill ${animT}s ${targetDist *
|
|
604
|
+
transition: isHighlighted ? `fill ${animT}s ${targetDist * animT}s, opacity 0s` : `fill ${animT}s ${(maxHoveredDistRef.current - targetDist) * animT}s, opacity 0s`
|
|
604
605
|
}
|
|
605
606
|
})
|
|
606
607
|
]
|
|
@@ -617,7 +618,7 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
617
618
|
fill: "transparent"
|
|
618
619
|
}), /* @__PURE__ */ jsx("path", {
|
|
619
620
|
d: pathD,
|
|
620
|
-
stroke:
|
|
621
|
+
stroke: CONNECTOR_COLOR,
|
|
621
622
|
strokeWidth: "6",
|
|
622
623
|
fill: "transparent",
|
|
623
624
|
style: {
|
|
@@ -635,7 +636,7 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
635
636
|
d: drawRightToLeft ? pathDReversed : pathD,
|
|
636
637
|
fill: "transparent",
|
|
637
638
|
style: {
|
|
638
|
-
stroke:
|
|
639
|
+
stroke: HIGHLIGHT_COLOR,
|
|
639
640
|
strokeWidth: 6,
|
|
640
641
|
strokeDasharray: `${pathLen} ${pathLen}`,
|
|
641
642
|
strokeDashoffset: isHighlighted ? 0 : pathLen,
|
|
@@ -643,16 +644,16 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
643
644
|
transition: isHighlighted ? `stroke-dashoffset ${animT}s ease ${connectorDelay}s, opacity 0s ease ${connectorDelay}s` : "stroke-dashoffset 0s, opacity 0s"
|
|
644
645
|
}
|
|
645
646
|
}), (() => {
|
|
646
|
-
const connKey = `${dep}→${
|
|
647
|
+
const connKey = `${dep}→${first}`;
|
|
647
648
|
if (isHighlighted) retractPathLensRef.current.set(connKey, pathLen);
|
|
648
|
-
const isRetracting = !isHighlighted && !!activeDists?.has(dep) && !!activeDists?.has(
|
|
649
|
+
const isRetracting = !isHighlighted && !!activeDists?.has(dep) && !!activeDists?.has(first);
|
|
649
650
|
if (!isHighlighted && !isRetracting) return null;
|
|
650
651
|
const frozenLen = retractPathLensRef.current.get(connKey) ?? pathLen;
|
|
651
652
|
return /* @__PURE__ */ jsx("path", {
|
|
652
653
|
d: drawRightToLeft ? pathDReversed : pathD,
|
|
653
654
|
fill: "transparent",
|
|
654
655
|
style: {
|
|
655
|
-
stroke:
|
|
656
|
+
stroke: HIGHLIGHT_COLOR,
|
|
656
657
|
strokeWidth: 6,
|
|
657
658
|
strokeDasharray: `${frozenLen} ${frozenLen}`,
|
|
658
659
|
strokeDashoffset: isHighlighted ? 0 : frozenLen,
|
|
@@ -663,53 +664,32 @@ function Subgraph({ jobs, pathPrefix, depth, preview, animT, expandedSubworkflow
|
|
|
663
664
|
})()]
|
|
664
665
|
})
|
|
665
666
|
] }, dep);
|
|
666
|
-
}) },
|
|
667
|
+
}) }, first)) }, col[0]?.[0]));
|
|
667
668
|
})(), hasLiveNestedGraph ? buildBoxLayer() : memoizedBoxLayer]
|
|
668
669
|
});
|
|
669
670
|
}
|
|
670
671
|
var NestedSubgraph = Subgraph;
|
|
671
|
-
function SidebarWell({ expanded, children }) {
|
|
672
|
-
return /* @__PURE__ */ jsx(Collapse, {
|
|
673
|
-
expanded,
|
|
674
|
-
releaseOverflow: false,
|
|
675
|
-
children
|
|
676
|
-
});
|
|
677
|
-
}
|
|
678
672
|
function SidebarJobs({ jobs, pathPrefix, preview, stepsOpen, toggleSteps, expandedSubworkflows, toggleSubworkflow, matrixOpen, toggleMatrix, openInNewGraph, setSublogOpen }) {
|
|
679
673
|
const engine = useWorkflowEngine();
|
|
680
|
-
const
|
|
681
|
-
const
|
|
674
|
+
const displayJobs = useMemo(() => displayJobsOf(engine, jobs, engine.matrixGroups(jobs)), [engine, jobs]);
|
|
675
|
+
const handlers = jobHandlers({
|
|
682
676
|
engine,
|
|
683
677
|
jobs,
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
const onStepClick = (j, s) => {
|
|
695
|
-
const stepStatus = jobs[j]?.steps?.[+s]?.status;
|
|
696
|
-
if (stepStatus === "skipped" || stepStatus === "skipped-failed") return;
|
|
697
|
-
if (jobs[j]?.steps[+s]?.subworkflow) expandInline(j, +s);
|
|
698
|
-
else setSublogOpen(engine.stepLogPath(pathPrefix, j, s));
|
|
699
|
-
};
|
|
700
|
-
const onStepLogClick = (j, s) => setSublogOpen(engine.stepLogPath(pathPrefix, j, s));
|
|
701
|
-
const onSubworkflowIcon = (j, s) => openNew(j, s);
|
|
702
|
-
const isSubworkflowExpanded = (j, s) => expandedSubworkflows.has(`${pathPrefix}${j}:${s}`);
|
|
703
|
-
const renderSubworkflow = (j, s) => {
|
|
704
|
-
const subJobs = jobs[j]?.steps?.[s]?.subworkflow?.jobs;
|
|
705
|
-
if (!subJobs) return null;
|
|
706
|
-
return /* @__PURE__ */ jsx(SidebarWell, {
|
|
707
|
-
expanded: isSubworkflowExpanded(j, s),
|
|
678
|
+
displayJobs,
|
|
679
|
+
pathPrefix,
|
|
680
|
+
stepsOpen,
|
|
681
|
+
toggleSteps,
|
|
682
|
+
expandedSubworkflows,
|
|
683
|
+
toggleSubworkflow,
|
|
684
|
+
openInNewGraph,
|
|
685
|
+
setSublogOpen,
|
|
686
|
+
renderWell: (subJobs, subPrefix, expanded) => /* @__PURE__ */ jsx(Collapse, {
|
|
687
|
+
expanded,
|
|
708
688
|
children: /* @__PURE__ */ jsx("div", {
|
|
709
689
|
className: "ml-6 mt-0.5 border-l border-(--theme-border) pl-4",
|
|
710
690
|
children: /* @__PURE__ */ jsx(SidebarJobs, {
|
|
711
691
|
jobs: subJobs,
|
|
712
|
-
pathPrefix:
|
|
692
|
+
pathPrefix: subPrefix,
|
|
713
693
|
preview,
|
|
714
694
|
stepsOpen,
|
|
715
695
|
toggleSteps,
|
|
@@ -721,8 +701,8 @@ function SidebarJobs({ jobs, pathPrefix, preview, stepsOpen, toggleSteps, expand
|
|
|
721
701
|
setSublogOpen
|
|
722
702
|
})
|
|
723
703
|
})
|
|
724
|
-
})
|
|
725
|
-
};
|
|
704
|
+
})
|
|
705
|
+
});
|
|
726
706
|
const seenMatrixGroups = /* @__PURE__ */ new Set();
|
|
727
707
|
const orderedKeys = Object.keys(jobs).flatMap((jobName) => {
|
|
728
708
|
const originaljob = jobs[jobName]?._matrix?.originaljob;
|
|
@@ -739,27 +719,15 @@ function SidebarJobs({ jobs, pathPrefix, preview, stepsOpen, toggleSteps, expand
|
|
|
739
719
|
isExpanded: matrixOpen.has(pathPrefix + mg.originaljob),
|
|
740
720
|
onToggle: () => toggleMatrix(pathPrefix + mg.originaljob),
|
|
741
721
|
jobs,
|
|
742
|
-
|
|
743
|
-
onJobClick,
|
|
744
|
-
onStepClick,
|
|
745
|
-
onStepLogClick,
|
|
746
|
-
onSubworkflowIcon,
|
|
747
|
-
isSubworkflowExpanded,
|
|
748
|
-
renderSubworkflow,
|
|
722
|
+
handlers,
|
|
749
723
|
preview
|
|
750
|
-
},
|
|
724
|
+
}, `matrix-${pathPrefix}${mg.originaljob}`);
|
|
751
725
|
return /* @__PURE__ */ jsx(Joblist, {
|
|
752
726
|
jobs,
|
|
753
727
|
jobNames: [jobName],
|
|
754
|
-
|
|
755
|
-
isStepsOpen,
|
|
756
|
-
onStepClick,
|
|
757
|
-
onStepLogClick,
|
|
758
|
-
onSubworkflowIcon,
|
|
759
|
-
isSubworkflowExpanded,
|
|
760
|
-
renderSubworkflow,
|
|
728
|
+
...handlers,
|
|
761
729
|
preview
|
|
762
|
-
},
|
|
730
|
+
}, `job-${pathPrefix}${jobName}`);
|
|
763
731
|
}) });
|
|
764
732
|
}
|
|
765
733
|
var RUN_STATUSES = [
|
|
@@ -786,7 +754,7 @@ function walkJobPath(root, path) {
|
|
|
786
754
|
}
|
|
787
755
|
return isJobRecord(cursor) ? cursor : {};
|
|
788
756
|
}
|
|
789
|
-
function DependencyGraph({ run, preview = false,
|
|
757
|
+
function DependencyGraph({ run, preview = false, removeBorder, viewMode = "dag", setViewMode }) {
|
|
790
758
|
const engine = useWorkflowEngine();
|
|
791
759
|
const animT = .125;
|
|
792
760
|
const minScale = .2;
|
|
@@ -883,7 +851,8 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
883
851
|
const timer = setInterval(() => setNow(DateTime.now()), 1e3);
|
|
884
852
|
return () => clearInterval(timer);
|
|
885
853
|
}, [isRunFinished]);
|
|
886
|
-
const
|
|
854
|
+
const currentPath = executedJobsPath[executedJobsPathIdx] ?? [];
|
|
855
|
+
const jobs = walkJobPath(rootJobs, currentPath);
|
|
887
856
|
const resetGraph = useCallback(() => {
|
|
888
857
|
setSublogOpen("");
|
|
889
858
|
setStepsOpen(/* @__PURE__ */ new Set());
|
|
@@ -903,29 +872,14 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
903
872
|
setExecutedJobsPathIdx(0);
|
|
904
873
|
}, [executedJobsPathIdx, resetGraph]);
|
|
905
874
|
const toggleSubworkflow = useCallback((key) => {
|
|
906
|
-
setExpandedSubworkflows((prev) =>
|
|
907
|
-
const next = new Set(prev);
|
|
908
|
-
if (next.has(key)) next.delete(key);
|
|
909
|
-
else next.add(key);
|
|
910
|
-
return next;
|
|
911
|
-
});
|
|
875
|
+
setExpandedSubworkflows((prev) => toggled(prev, key));
|
|
912
876
|
}, []);
|
|
913
877
|
const toggleSteps = useCallback((key) => {
|
|
914
|
-
setStepsOpen((prev) =>
|
|
915
|
-
const next = new Set(prev);
|
|
916
|
-
if (next.has(key)) next.delete(key);
|
|
917
|
-
else next.add(key);
|
|
918
|
-
return next;
|
|
919
|
-
});
|
|
878
|
+
setStepsOpen((prev) => toggled(prev, key));
|
|
920
879
|
requestAnimationFrame(invalidateConnectors);
|
|
921
880
|
}, [invalidateConnectors]);
|
|
922
881
|
const toggleMatrix = useCallback((key) => {
|
|
923
|
-
setMatrixOpen((prev) =>
|
|
924
|
-
const next = new Set(prev);
|
|
925
|
-
if (next.has(key)) next.delete(key);
|
|
926
|
-
else next.add(key);
|
|
927
|
-
return next;
|
|
928
|
-
});
|
|
882
|
+
setMatrixOpen((prev) => toggled(prev, key));
|
|
929
883
|
requestAnimationFrame(invalidateConnectors);
|
|
930
884
|
}, [invalidateConnectors]);
|
|
931
885
|
const { data: sublogs, isLoading: sublogsLoading, error: sublogsError } = useRunFile(runSlug, sublogOpen || null, preview ? void 0 : { refreshInterval: 2e3 });
|
|
@@ -937,11 +891,14 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
937
891
|
sublogsError,
|
|
938
892
|
sublogsLoading
|
|
939
893
|
]);
|
|
940
|
-
const
|
|
941
|
-
|
|
942
|
-
const sublogIsStep =
|
|
943
|
-
const
|
|
944
|
-
const
|
|
894
|
+
const [sublogJob = "", sublogStepDir] = sublogOpen.split("/").slice(-3, -1);
|
|
895
|
+
const sublogStep = sublogStepDir === void 0 ? void 0 : sublogStepDir.split("_")[1] ?? "";
|
|
896
|
+
const sublogIsStep = sublogStep !== void 0;
|
|
897
|
+
const sublogStepData = sublogIsStep ? jobs[sublogJob]?.steps[Number(sublogStep)] : void 0;
|
|
898
|
+
const logName = sublogIsStep ? `Job: ${jobLabel(sublogJob)} \nStep: ${sublogStepData?.name || `Step ${sublogStep}`}` : "";
|
|
899
|
+
const sublogIsSubworkflow = !!sublogStepData?.subworkflow;
|
|
900
|
+
const sublogFileStart = sublogOpen.lastIndexOf("/") + 1;
|
|
901
|
+
const sublogShowsLog = sublogOpen.slice(sublogFileStart) === "logs.out";
|
|
945
902
|
const matrixGroups = useMemo(() => engine.matrixGroups(jobs), [engine, jobs]);
|
|
946
903
|
const { dependencyCols } = useMemo(() => computeGraphLayout(engine, jobs, matrixGroups), [
|
|
947
904
|
engine,
|
|
@@ -1001,20 +958,18 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1001
958
|
windowSize,
|
|
1002
959
|
executedJobsPathIdx
|
|
1003
960
|
]);
|
|
1004
|
-
const currentPath = executedJobsPath[executedJobsPathIdx] ?? [];
|
|
1005
961
|
const nestingDepth = currentPath.length / 5;
|
|
1006
|
-
|
|
1007
|
-
for (let i = 0; i < nestingDepth; i++)
|
|
962
|
+
const levelPrefixes = [];
|
|
963
|
+
for (let i = 0; i < nestingDepth; i++) levelPrefixes.push(`subworkflows/${currentPath[5 * i]}/step_${currentPath[5 * i + 2]}/`);
|
|
964
|
+
const pathAppend = levelPrefixes.join("");
|
|
1008
965
|
let generalLogPath = "logs.out";
|
|
1009
966
|
if (nestingDepth > 0) {
|
|
1010
|
-
let parentPrefix = "";
|
|
1011
|
-
for (let i = 0; i < nestingDepth - 1; i++) parentPrefix += `subworkflows/${currentPath[5 * i]}/step_${currentPath[5 * i + 2]?.toString()}/`;
|
|
1012
967
|
const lastJob = String(currentPath[5 * (nestingDepth - 1)] ?? "");
|
|
1013
968
|
const lastStep = currentPath[5 * (nestingDepth - 1) + 2] ?? "";
|
|
1014
|
-
generalLogPath = engine.stepLogPath(
|
|
969
|
+
generalLogPath = engine.stepLogPath(levelPrefixes.slice(0, -1).join(""), lastJob, lastStep);
|
|
1015
970
|
}
|
|
1016
971
|
const missingLogText = sublogIsSubworkflow ? "Subworkflows generally have no logs/scripts at this level.\nClick on the \"Open in new graph\" icon on the subworkflow step to open the subworkflow graph." : sublogsError ? dagStrings.logLoadFailed : (sublogOpen === generalLogPath ? dagStrings.statusReason(run.statusReason) : void 0) ?? dagStrings.noLogFound;
|
|
1017
|
-
const currentSublog = sublogOpen === "" ? "" : preview ? engine.toYaml(
|
|
972
|
+
const currentSublog = sublogOpen === "" ? "" : preview ? engine.toYaml(sublogStepData) : sublogsError || !sublogs ? missingLogText : sublogs;
|
|
1018
973
|
const expansionKeys = useMemo(() => engine.expansionKeys(jobs, pathAppend), [
|
|
1019
974
|
engine,
|
|
1020
975
|
jobs,
|
|
@@ -1040,7 +995,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1040
995
|
const nextStep = useCallback((backward) => {
|
|
1041
996
|
const sublogSplit = sublogOpen.split("/");
|
|
1042
997
|
let job = sublogSplit[sublogSplit.length - 3] ?? "";
|
|
1043
|
-
let step = parseInt(sublogSplit[sublogSplit.length - 2].slice(5), 10);
|
|
998
|
+
let step = parseInt((sublogSplit[sublogSplit.length - 2] ?? "").slice(5), 10);
|
|
1044
999
|
const jobArr = Object.keys(jobs);
|
|
1045
1000
|
let idx = jobArr.indexOf(job);
|
|
1046
1001
|
if (backward) {
|
|
@@ -1056,7 +1011,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1056
1011
|
job = jobArr[idx + 1] ?? "";
|
|
1057
1012
|
step = 0;
|
|
1058
1013
|
}
|
|
1059
|
-
setSublogOpen(sublogSplit.slice(0, -3).join("/")
|
|
1014
|
+
setSublogOpen(`${sublogSplit.slice(0, -3).join("/")}/${job}/step_${step}/${sublogSplit.slice(-1)[0]}`);
|
|
1060
1015
|
}, [jobs, sublogOpen]);
|
|
1061
1016
|
const handleKeyDown = useCallback((e) => {
|
|
1062
1017
|
if (e.key === "ArrowRight") nextStep(false);
|
|
@@ -1091,7 +1046,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1091
1046
|
toggleMatrix,
|
|
1092
1047
|
openInNewGraph
|
|
1093
1048
|
]);
|
|
1094
|
-
if (!
|
|
1049
|
+
if (!dependencyCols[0]?.length) return;
|
|
1095
1050
|
const startDt = run.createdAt ? DateTime.fromISO(run.createdAt) : now;
|
|
1096
1051
|
const endDt = run.completedAt ? DateTime.fromISO(run.completedAt) : now;
|
|
1097
1052
|
const runtime = toAbsHumanDuration(startDt, endDt);
|
|
@@ -1100,29 +1055,29 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1100
1055
|
type: "button",
|
|
1101
1056
|
className: "btn btn-neutral",
|
|
1102
1057
|
onClick: () => nextStep(true),
|
|
1103
|
-
children: [/* @__PURE__ */ jsx(
|
|
1058
|
+
children: [/* @__PURE__ */ jsx(FaArrowLeft, {}), /* @__PURE__ */ jsx("span", { children: "Prev" })]
|
|
1104
1059
|
}),
|
|
1105
1060
|
/* @__PURE__ */ jsxs("button", {
|
|
1106
1061
|
type: "button",
|
|
1107
1062
|
className: "btn btn-neutral",
|
|
1108
1063
|
onClick: () => nextStep(false),
|
|
1109
|
-
children: [/* @__PURE__ */ jsx(
|
|
1064
|
+
children: [/* @__PURE__ */ jsx(FaArrowRight, {}), /* @__PURE__ */ jsx("span", { children: "Next" })]
|
|
1110
1065
|
}),
|
|
1111
1066
|
/* @__PURE__ */ jsx("span", {
|
|
1112
1067
|
className: "pt-0.5 whitespace-pre-wrap text-xs",
|
|
1113
1068
|
children: logName
|
|
1114
1069
|
})
|
|
1115
1070
|
] }) : void 0;
|
|
1116
|
-
const additionalBottomRightBarComponents = (!preview || sublogIsSubworkflow) &&
|
|
1071
|
+
const additionalBottomRightBarComponents = (!preview || sublogIsSubworkflow) && sublogIsStep ? /* @__PURE__ */ jsx("button", {
|
|
1117
1072
|
type: "button",
|
|
1118
1073
|
className: "btn btn-neutral",
|
|
1119
1074
|
onClick: () => {
|
|
1120
1075
|
if (sublogIsSubworkflow) {
|
|
1121
|
-
openInNewGraph(pathAppend,
|
|
1076
|
+
openInNewGraph(pathAppend, sublogJob, parseInt(sublogStep ?? "", 10));
|
|
1122
1077
|
setSublogOpen("");
|
|
1123
|
-
} else setSublogOpen(sublogOpen.
|
|
1078
|
+
} else setSublogOpen(sublogOpen.slice(0, sublogFileStart) + (sublogShowsLog ? "script-unstable-redacted.sh" : "logs.out"));
|
|
1124
1079
|
},
|
|
1125
|
-
children: /* @__PURE__ */ jsx("span", { children: sublogIsSubworkflow ? "Open Subworkflow" :
|
|
1080
|
+
children: /* @__PURE__ */ jsx("span", { children: sublogIsSubworkflow ? "Open Subworkflow" : sublogShowsLog ? "Show Script" : "Show Logs" })
|
|
1126
1081
|
}) : void 0;
|
|
1127
1082
|
return /* @__PURE__ */ jsxs("div", {
|
|
1128
1083
|
className: "flex flex-col lg:flex-row w-full",
|
|
@@ -1146,7 +1101,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1146
1101
|
"aria-label": "General log",
|
|
1147
1102
|
onClick: () => setSublogOpen(generalLogPath),
|
|
1148
1103
|
className: "link",
|
|
1149
|
-
children: /* @__PURE__ */ jsx(
|
|
1104
|
+
children: /* @__PURE__ */ jsx(IoDocumentTextOutline, { className: "w-4 h-4" })
|
|
1150
1105
|
})]
|
|
1151
1106
|
}),
|
|
1152
1107
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -1212,7 +1167,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1212
1167
|
children: dagStrings.submitted
|
|
1213
1168
|
}), /* @__PURE__ */ jsx("div", {
|
|
1214
1169
|
className: "text-sm font-semibold flex items-center gap-x-1",
|
|
1215
|
-
children: startDt
|
|
1170
|
+
children: startDt.toLocaleString(DateTime.DATETIME_SHORT)
|
|
1216
1171
|
})]
|
|
1217
1172
|
}),
|
|
1218
1173
|
/* @__PURE__ */ jsx("div", { className: "flex-1" }),
|
|
@@ -1223,7 +1178,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1223
1178
|
setStepsOpen(/* @__PURE__ */ new Set());
|
|
1224
1179
|
requestAnimationFrame(fitGraph);
|
|
1225
1180
|
}
|
|
1226
|
-
setViewMode
|
|
1181
|
+
setViewMode(mode);
|
|
1227
1182
|
}
|
|
1228
1183
|
})
|
|
1229
1184
|
]
|
|
@@ -1233,15 +1188,13 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1233
1188
|
className: "panel w-full border",
|
|
1234
1189
|
children: /* @__PURE__ */ jsx(TreeView, {
|
|
1235
1190
|
jobs,
|
|
1236
|
-
workflowName,
|
|
1237
|
-
runNumber,
|
|
1238
1191
|
slug: runSlug,
|
|
1239
1192
|
expandedJobs,
|
|
1240
1193
|
setExpandedJobs
|
|
1241
1194
|
})
|
|
1242
1195
|
}) : /* @__PURE__ */ jsx("div", {
|
|
1243
1196
|
ref: setContainerElement,
|
|
1244
|
-
className: "panel w-full "
|
|
1197
|
+
className: cx("panel w-full overflow-hidden relative", removeBorder ? "border-none" : "border"),
|
|
1245
1198
|
style: {
|
|
1246
1199
|
height: containerHeight !== null ? `${containerHeight}px` : previewHeight !== null ? `${Math.min(previewHeight, windowSize.h * .62)}px` : "62vh",
|
|
1247
1200
|
minHeight: previewHeight !== null ? 0 : 160
|
|
@@ -1275,7 +1228,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1275
1228
|
className: "btn btn-info w-21 cursor-pointer h-6",
|
|
1276
1229
|
"aria-label": "Reset view",
|
|
1277
1230
|
onClick: () => {
|
|
1278
|
-
if (
|
|
1231
|
+
if (currentPath.length > 0) {
|
|
1279
1232
|
resetGraph();
|
|
1280
1233
|
setExecutedJobsPath([[], ...executedJobsPath.slice(executedJobsPathIdx, 10)]);
|
|
1281
1234
|
setExecutedJobsPathIdx(0);
|
|
@@ -1350,7 +1303,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1350
1303
|
value: currentSublog,
|
|
1351
1304
|
height: window.innerHeight / 1.4,
|
|
1352
1305
|
width: window.innerWidth / 1.4,
|
|
1353
|
-
contentKey:
|
|
1306
|
+
contentKey: `editor_${sublogOpen}`
|
|
1354
1307
|
}) ?? /* @__PURE__ */ jsx("pre", {
|
|
1355
1308
|
className: "h-full overflow-auto text-xs p-4",
|
|
1356
1309
|
style: {
|
|
@@ -1368,7 +1321,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
|
|
|
1368
1321
|
})
|
|
1369
1322
|
}), additionalBottomRightBarComponents]
|
|
1370
1323
|
})] }) : /* @__PURE__ */ jsx(LogViewer, {
|
|
1371
|
-
log: currentSublog
|
|
1324
|
+
log: currentSublog.slice(-1e5),
|
|
1372
1325
|
height: windowSize.h / 1.2,
|
|
1373
1326
|
width: windowSize.w / 1.2,
|
|
1374
1327
|
hideExpand: true,
|
|
@@ -1390,9 +1343,8 @@ function DependencyGraphPreview(inputs) {
|
|
|
1390
1343
|
workflowName: ""
|
|
1391
1344
|
},
|
|
1392
1345
|
preview: true,
|
|
1393
|
-
initialScale: inputs.initialScale || 1,
|
|
1394
1346
|
removeBorder: inputs.removeBorder
|
|
1395
1347
|
});
|
|
1396
1348
|
}
|
|
1397
1349
|
//#endregion
|
|
1398
|
-
export { DependencyGraphPreview, DependencyGraph as default };
|
|
1350
|
+
export { DependencyGraphPreview, addCleanupSteps, DependencyGraph as default };
|