@oomol-lab/open-flow 0.1.0-beta.64 → 0.1.0-beta.66
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/dist/browser/{createResourceDialog-BAJXbzNH.js → createResourceDialog-C-Si_cYs.js} +2 -2
- package/dist/browser/flow-authoring-node.d.ts +12 -3
- package/dist/browser/flow-authoring.js +135 -21
- package/dist/browser/flow-change-schema.d.ts +3 -1
- package/dist/browser/flow-change.d.ts +15 -3
- package/dist/browser/flow-change.js +111 -16
- package/dist/browser/{flowChanges-BAMkSaKF.js → flowChanges-T4_R5p1f.js} +3031 -2124
- package/dist/browser/{flowRunInputEditorStore-B2Rw4VsT.js → flowRunInputEditorStore-DJqmR6Qh.js} +3 -2
- package/dist/browser/{flowWorkspace-DxLc1Ybv.js → flowWorkspace-C0J5C0oM.js} +754 -163
- package/dist/browser/{icons-Db2Jb2iX.js → icons-BD3m0RQq.js} +4484 -4370
- package/dist/browser/preview.css +160 -64
- package/dist/browser/preview.js +6487 -5232
- package/dist/browser/ui.css +93 -3
- package/dist/browser/ui.js +8 -5
- package/dist/browser/workbench.css +160 -64
- package/dist/browser/workbench.js +175 -59
- package/dist/browser/{workbenchSelect-C-jf6NIM.js → workbenchSelect-B-PFpF_Q.js} +1 -1
- package/dist/command/index.js +49 -49
- package/dist/common/authoring.d.ts +7 -5
- package/dist/common/authoringExamples.d.ts +3 -3
- package/dist/common/authoringFields.d.ts +20 -0
- package/dist/common/authoringSchema.d.ts +404 -15
- package/dist/common/connectorDecoders.d.ts +2 -1
- package/dist/common/control-api-conformance.js +403 -137
- package/dist/common/control-api.d.ts +70 -7
- package/dist/common/control-api.js +3587 -3428
- package/dist/common/control-requests.d.ts +10 -3
- package/dist/common/control-requests.js +463 -48
- package/dist/common/decision.js +28 -3
- package/dist/common/flow-encoding.d.ts +4 -2
- package/dist/common/flow-encoding.js +144 -10
- package/dist/common/flow-graph.d.ts +1 -1
- package/dist/common/flow-semantics.d.ts +12 -2
- package/dist/common/flow-semantics.js +152 -33
- package/dist/common/integration-trigger.js +28 -3
- package/dist/common/liveDetails.d.ts +26 -11
- package/dist/common/mcp.d.ts +6 -3
- package/dist/common/mcp.js +3541 -3403
- package/dist/common/openapi.js +28 -3
- package/dist/common/poll-trigger.js +28 -3
- package/dist/common/run-events.d.ts +2 -0
- package/dist/common/run-events.js +9 -3
- package/dist/common/scheduler.d.ts +11 -1
- package/dist/common/scheduler.js +216 -48
- package/dist/common/trigger-contract.d.ts +2 -0
- package/dist/common/webhook-trigger.js +28 -3
- package/dist/common/workflow.d.ts +93 -0
- package/dist/common/workflow.js +10491 -0
- package/package.json +5 -1
- package/skills/open-flow/references/flow-authoring.md +26 -16
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as useIconifyCollectionLoader, $t as EmptyHeader, A as datePickerChange, An as SourceForm, Ar as Checkbox, Bn as fr_default$1, Bt as PopoverPanelContent, C as schemaForEditor, Cn as MenuGroup, Cr as inputValue, D as typeOfSchema, Dn as useMenuRootContext, E as isUnconstrainedSchema, En as MenuRootContext, F as indexAddNodeOptions, Fn as zh_TW_default$1, Ft as followWorkbenchLink, Gn as errorNotice, Gt as VirtualScrollArea, H as observeResource, Hn as I18n, Ht as PopoverTrigger, I as feishuResourceKind, In as zh_CN_default$1, It as Popover, J as triggerNodeIcon, Jt as InputGroupAddon, K as designerGraph, Kt as Z$2, L as supportsFeishuChatFilter, Ln as ru_default$1, Lt as PopoverContent, M as isDateFormat, Mn as createI18n$1, Mr as IconThemeContext, Nn as uiLocales, Nt as WorkflowExportMenuItem, O as calendarChange, On as Badge, Pn as waitBranchDescription, Pt as IdTooltip, Q as IconifyProvider, Qn as sourceOutputLabel, Qt as EmptyDescription, Rn as ko_default$1, Rt as PopoverDescription, S as editorGroups, Sn as MenuItem, Sr as workflowSelectionTask, T as getDefaultValue, Tn as useContextMenuRootContext, U as resourceData, Un as FeishuEventPicker, Ut as NativeScrollArea, Vn as en_default$1, Vt as PopoverTitle, W as resourceValue, Wn as EventSourceSetup, Wt as ScrollArea, X as providerIcon, Xt as Empty, Y as actionSummary, Yn as decodeResultList, Yt as InputGroupInput, Z as ContentIcon, Zn as resolutionOutputPorts, Zt as EmptyContent, _n as useCompositeItem, _r as selectOperation, an as DropdownMenuGroup, at as revisionView, b as defaultValueEditorSchema, bn as MenuPortal, cn as DropdownMenuRadioGroup, dn as DropdownMenuSub, dt as diagnosticNodeId, en as EmptyMedia, et as useIconifyData, fn as DropdownMenuSubContent, fr as listOperations, ft as schemaMismatchMessage, gn as findRootOwnerId, gr as securityOptions, hn as isElementDisabled, hr as openApiTask, in as DropdownMenuContent, it as hasRunFilter, j as datePickerValue, jn as SourceSelect, jr as useAriaLabelledBy, k as calendarDate, kr as controlErrorCode, ln as DropdownMenuRadioItem, lr as triggerConfigValue, mn as DropdownMenuTrigger, mr as openApiFieldIssues, mt as connectionCatalog, n as agentTool, nn as DropdownMenu, nr as isJsonObject, on as DropdownMenuItem, pn as DropdownMenuSubTrigger, pr as object, q as semanticNodeIcon, qt as InputGroup, rn as DropdownMenuCheckboxItem, rt as canCancelRun, sn as DropdownMenuLabel, tn as EmptyTitle, tr as triggerOutputDefinitions, tt as wrapLayout, un as DropdownMenuSeparator, ur as triggerConfigValues, ut as diagnosticMessage, vn as MenuRoot, vr as serverAddress, w as valueForEditor, wn as ContextMenuRootContext, x as editorComponent, xn as MenuPopup, xr as workflowCandidateGroup, yn as MenuPositioner, yr as servers, z as mapSource, zn as ja_default$1, zt as PopoverHeader } from "./flowChanges-T4_R5p1f.js";
|
|
3
3
|
import { a as derive, c as strictEqual, i as compute, l as val, n as attachSetter, r as combine, s as readonlyVal } from "./dist-bO8nvHFH.js";
|
|
4
4
|
import { c as useLang, i as isString, l as useTranslate, n as isBoolean, o as I18nProvider, r as isPlainObject, s as useI18n, t as isArray$1, u as useVal } from "./dist-BFmpkX4P.js";
|
|
5
|
-
import { $ as
|
|
5
|
+
import { $ as decodeRevisionContent, $r as escapeKey, $t as useAnchoredPopupScrollLock, A as variableInputCompatible, Ai as EMPTY_ARRAY$1, Ar as activeElement, At as SelectItem, Bi as useIsoLayoutEffect, Bn as useDismiss, Br as createLucideIcon, Bt as ARROW_LEFT, C as FieldDescription, Ci as useControlled, Cr as getGridNavigatedIndex, Di as cva, Dn as useInteractions, Dr as isListIndexDisabled, Dt as SelectChevron, E as FieldLabel, Ei as cn$1, En as useListNavigation, Er as isIndexOutOfListBounds, Et as Select$1, Fi as useButton, Ft as IndexGuessBehavior, Gi as isElement, Gr as transitionStatusMapping, Gt as HORIZONTAL_KEYS, Hi as useStableCallback, Hn as FloatingFocusManager, Hr as useOpenChangeComplete, Ht as ARROW_UP, I as nodeNameIssue, Ii as CompositeRootContext, Ir as ownerDocument, It as useCompositeListItem, J as operatorsForType, Jr as createChangeEventDetails, Jt as VERTICAL_KEYS, Kt as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, Lr as useLabelableId, Lt as ALL_KEYS, Mi as NOOP, Mn as useFloatingRootContext, Mr as getTarget, Mt as SelectTrigger, Nr as isAndroid, Nt as SelectValue, O as matchesSchema, Oi as clsx, Or as stopEvent$1, Ot as SelectContent, Pi as useMergedRefs, Pr as isFirefox, Qr as closePress, Ri as formatErrorMessage, Rr as ChevronDown, Rt as ARROW_DOWN, S as Field, Si as visuallyHiddenInput, Sn as selectedValueIncludes, Sr as getGridCellIndices, St as string, T as FieldGroup, Ti as buttonVariants, Tr as getMinListIndex, Tt as dequal, U as comparisonIssue, Ui as useRefWithInit, Vn as useClick, Vr as useTransitionStatus, Vt as ARROW_RIGHT, Wr as TransitionStatusDataAttributes, X as unaryOperator, Xr as cancelOpen, Xt as isNativeInput, Yn as FloatingPortal, Yr as createGenericEventDetails, Yt as VERTICAL_KEYS_WITH_EXTRA_KEYS, Z as valueType, Zn as DROPDOWN_COLLISION_AVOIDANCE, Zr as clearPress, Zt as scrollIntoViewIfNeeded, _ as TooltipPositioner, _i as useBaseUiId, _n as stringifyAsValue, _t as literal, a as DialogDescription, ai as itemPress, an as useDirection, at as decisionQuestionIssues, b as TooltipRoot, bi as fieldValidityMapping, bn as findItemIndex, br as findNonDisabledListIndex, c as DialogTitle, cn as getPseudoElementBounds, cr as createSelector, ct as limitDecisionQuestions, d as TooltipContent, dn as triggerOpenStateMapping, dr as Label, en as usePositioner, er as addEventListener, et as webhookMethods, f as TooltipProvider, fi as triggerPress, fn as resolveAriaLabelledBy, fr as Input$1, g as TooltipPopup, gi as useFieldRootContext, gn as stringifyAsLabel, h as TooltipArrow, hi as useRegisterFieldControl, hn as isGroupedItems, i as DialogContent, ii as inputPress, ji as EMPTY_OBJECT, jr as contains, jt as SelectSeparator, k as schemaObject, ki as useRenderElement, kr as isInteractiveElement, kt as SelectGroup, l as DialogTrigger, ln as popupStateMapping, lr as useValueAsRef, m as createTooltipHandle, mi as useFormContext, mn as hasNullItemLabel, mr as useTimeout, n as Dialog, ni as inputChange, nn as InternalBackdrop, nr as Store, oi as listNavigation, on as CompositeList, or as require_with_selector, ot as decisionTask, p as TooltipTrigger, pi as useLabelableContext, pn as useOpenInteractionType, pt as discriminatedUnion, q as operandHandle, qr as useValueChanged, qt as MODIFIER_KEYS, ri as inputClear, rn as useAnchorPositioning, rr as useStore$1, rt as decisionLimits, si as none$1, sn as inertValue, sr as require_builtin_esm_external_require_react, st as defaultDecisionQuestion, t as Icon, tn as getDisabledMountTransitionStyles, tt as webhookSupportsBody, u as Tooltip, un as pressableTriggerOpenStateMapping, ur as useOnFirstRender, v as TooltipPortal, vi as useId$1, vn as compareItemEquality, vt as number, w as FieldError, wi as Button$1, wn as useTypeahead, wr as getMaxListIndex, x as Spinner, xi as visuallyHidden, xn as removeItem, xr as getGridCellIndexOfCorner, xt as strictObject, y as TooltipTrigger$1, yi as DEFAULT_FIELD_STATE_ATTRIBUTES, yn as defaultItemEquality, yr as createGridCellMap, zi as mergeProps, zt as ARROW_KEYS } from "./icons-BD3m0RQq.js";
|
|
6
6
|
import { a as renameObjectField, i as objectValue, n as isJsonValue, o as setObjectField, r as jsonDataTypes, s as valueType$1, t as initialValue, u as resolveUiLanguage } from "./value-BADHeZ9I.js";
|
|
7
|
-
import { n as compile, r as validate } from "./flowRunInputEditorStore-
|
|
8
|
-
import { t as WorkbenchSelect } from "./workbenchSelect-
|
|
7
|
+
import { n as compile, r as validate } from "./flowRunInputEditorStore-DJqmR6Qh.js";
|
|
8
|
+
import { t as WorkbenchSelect } from "./workbenchSelect-B-PFpF_Q.js";
|
|
9
9
|
import * as React from "react";
|
|
10
10
|
import reactExports, { Children, Fragment, Suspense, createContext, forwardRef, isValidElement, lazy, memo, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
11
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -2222,6 +2222,7 @@ function menuItems(options, providersOnly = false) {
|
|
|
2222
2222
|
}
|
|
2223
2223
|
function fallbackIcon$1(item) {
|
|
2224
2224
|
switch (item.type) {
|
|
2225
|
+
case "workflow": return "flow";
|
|
2225
2226
|
case "agent": return "llm";
|
|
2226
2227
|
case "condition": return "condition";
|
|
2227
2228
|
case "decision": return "decision";
|
|
@@ -2232,6 +2233,7 @@ function fallbackIcon$1(item) {
|
|
|
2232
2233
|
case "approval": return "task";
|
|
2233
2234
|
case "trigger": return "trigger";
|
|
2234
2235
|
case "value": return "value";
|
|
2236
|
+
case "outputs": return "outputs";
|
|
2235
2237
|
case "wait": return "wait";
|
|
2236
2238
|
case "new-task":
|
|
2237
2239
|
case "comment": return "task";
|
|
@@ -5995,6 +5997,23 @@ function FieldSelect({ id, value, onChange, children, disabled, readOnly, danger
|
|
|
5995
5997
|
});
|
|
5996
5998
|
}
|
|
5997
5999
|
//#endregion
|
|
6000
|
+
//#region src/workbench/browser/runtime/editor/inspectorStatusSection.tsx
|
|
6001
|
+
function InspectorStatusSection({ title, actions, children, tone = "neutral", section, alert = false }) {
|
|
6002
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
6003
|
+
className: "inspector-status",
|
|
6004
|
+
"data-tone": tone,
|
|
6005
|
+
"data-inspector-section": section,
|
|
6006
|
+
role: alert ? "alert" : void 0,
|
|
6007
|
+
children: [/* @__PURE__ */ jsxs("h3", {
|
|
6008
|
+
className: "inspector-section-title",
|
|
6009
|
+
children: [title, actions]
|
|
6010
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
6011
|
+
className: "inspector-status-content",
|
|
6012
|
+
children
|
|
6013
|
+
})]
|
|
6014
|
+
});
|
|
6015
|
+
}
|
|
6016
|
+
//#endregion
|
|
5998
6017
|
//#region src/workbench/browser/runtime/editor/connectionSettings.tsx
|
|
5999
6018
|
var manageAccountOption = "__manage-account__";
|
|
6000
6019
|
function ConnectionAlert({ detail, disabled, message, onRetry }) {
|
|
@@ -6179,7 +6198,7 @@ function ConnectorAccount({ accessError, onConfigureAccess, action, actionError,
|
|
|
6179
6198
|
onRetry: () => void connectors.refresh(true)
|
|
6180
6199
|
});
|
|
6181
6200
|
else if (connectionId == null && available.length == 0) content = /* @__PURE__ */ jsxs(Fragment$1, { children: [authorizationPending && /* @__PURE__ */ jsx("p", { children: t("inspector.account.authorizationPending") }), /* @__PURE__ */ jsxs("div", {
|
|
6182
|
-
className: "
|
|
6201
|
+
className: "inspector-status-prompt",
|
|
6183
6202
|
children: [/* @__PURE__ */ jsx("p", { children: t("inspector.account.connectBeforeRun", { service: action.serviceName }) }), /* @__PURE__ */ jsxs(Button$1, {
|
|
6184
6203
|
disabled: disabled || onConfigureAccess == null,
|
|
6185
6204
|
onClick: onConfigureAccess,
|
|
@@ -6219,31 +6238,27 @@ function ConnectorAccount({ accessError, onConfigureAccess, action, actionError,
|
|
|
6219
6238
|
status != null && /* @__PURE__ */ jsx("p", { children: status })
|
|
6220
6239
|
] });
|
|
6221
6240
|
}
|
|
6222
|
-
return /* @__PURE__ */ jsxs(
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
type: "button",
|
|
6244
|
-
variant: "default",
|
|
6245
|
-
children: t("inspector.account.manageAccount")
|
|
6246
|
-
})]
|
|
6241
|
+
return /* @__PURE__ */ jsxs(InspectorStatusSection, {
|
|
6242
|
+
tone: required ? "warning" : "neutral",
|
|
6243
|
+
section: "account",
|
|
6244
|
+
title: t(!pending && accessIssue != null ? "inspector.account.accessTitle" : required ? "inspector.account.required" : "inspector.account.title"),
|
|
6245
|
+
actions: onManage != null && /* @__PURE__ */ jsx(Button$1, {
|
|
6246
|
+
className: "ml-auto",
|
|
6247
|
+
disabled,
|
|
6248
|
+
onClick: onManage,
|
|
6249
|
+
size: "xs",
|
|
6250
|
+
type: "button",
|
|
6251
|
+
variant: "ghost",
|
|
6252
|
+
children: t("inspector.account.manageAccount")
|
|
6253
|
+
}),
|
|
6254
|
+
children: [content, !pending && onConfigureAccess != null && accessIssue != null && /* @__PURE__ */ jsx(Button$1, {
|
|
6255
|
+
className: "self-start",
|
|
6256
|
+
disabled,
|
|
6257
|
+
onClick: onConfigureAccess,
|
|
6258
|
+
size: "sm",
|
|
6259
|
+
type: "button",
|
|
6260
|
+
variant: "default",
|
|
6261
|
+
children: t("inspector.account.manageAccount")
|
|
6247
6262
|
})]
|
|
6248
6263
|
});
|
|
6249
6264
|
}
|
|
@@ -6253,75 +6268,65 @@ function TriggerConnection({ activeConnections, authorizationPending, connection
|
|
|
6253
6268
|
const providerTrigger = trigger.kind == "poll" || trigger.kind == "integration" ? trigger : void 0;
|
|
6254
6269
|
const fieldIdPrefix = `trigger-${selection.id}`;
|
|
6255
6270
|
const canManage = onConfigureAccess != null && !connectionLoading && connectionError == null && (activeConnections?.length ?? 0) > 0;
|
|
6256
|
-
return providerTrigger == null ? null : /* @__PURE__ */ jsxs(
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6271
|
+
return providerTrigger == null ? null : /* @__PURE__ */ jsxs(InspectorStatusSection, {
|
|
6272
|
+
tone: connection?.status == "active" ? "neutral" : "warning",
|
|
6273
|
+
section: "account",
|
|
6274
|
+
title: t(connection?.status == "active" ? "inspector.account.title" : "inspector.account.required"),
|
|
6275
|
+
actions: canManage && /* @__PURE__ */ jsx(Button$1, {
|
|
6276
|
+
className: "ml-auto",
|
|
6277
|
+
disabled,
|
|
6278
|
+
onClick: () => onConfigureAccess?.(providerTrigger.definition.provider),
|
|
6279
|
+
size: "xs",
|
|
6280
|
+
type: "button",
|
|
6281
|
+
variant: "ghost",
|
|
6282
|
+
children: t("inspector.account.manageAccount")
|
|
6283
|
+
}),
|
|
6284
|
+
children: [authorizationPending && /* @__PURE__ */ jsx("p", { children: t("inspector.account.authorizationPending") }), connectionLoading ? /* @__PURE__ */ jsx("p", { children: t("inspector.account.loading") }) : connectionError != null ? /* @__PURE__ */ jsx(ConnectionAlert, {
|
|
6285
|
+
detail: connectionError,
|
|
6286
|
+
disabled,
|
|
6287
|
+
message: t("inspector.account.refreshFailed"),
|
|
6288
|
+
onRetry: () => void triggers.refresh(true)
|
|
6289
|
+
}) : (activeConnections?.length ?? 0) == 0 ? /* @__PURE__ */ jsxs("div", {
|
|
6290
|
+
className: "inspector-status-prompt",
|
|
6291
|
+
children: [/* @__PURE__ */ jsx("p", { children: t("inspector.account.connectBeforeRun", { service: providerTrigger.definition.provider }) }), /* @__PURE__ */ jsx(Button$1, {
|
|
6292
|
+
disabled: disabled || onConfigureAccess == null,
|
|
6264
6293
|
onClick: () => onConfigureAccess?.(providerTrigger.definition.provider),
|
|
6265
|
-
size: "
|
|
6294
|
+
size: "sm",
|
|
6266
6295
|
type: "button",
|
|
6267
|
-
variant: "ghost",
|
|
6268
6296
|
children: t("inspector.account.manageAccount")
|
|
6269
6297
|
})]
|
|
6270
|
-
}), /* @__PURE__ */ jsxs(
|
|
6271
|
-
className: "connection-
|
|
6272
|
-
children: [
|
|
6273
|
-
|
|
6298
|
+
}) : /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs(Field, {
|
|
6299
|
+
className: "connection-field",
|
|
6300
|
+
children: [/* @__PURE__ */ jsx(FieldLabel, {
|
|
6301
|
+
className: "sr-only",
|
|
6302
|
+
htmlFor: `${fieldIdPrefix}-connection`,
|
|
6303
|
+
children: t("inspector.account.connection")
|
|
6304
|
+
}), /* @__PURE__ */ jsx(AccountSelect, {
|
|
6305
|
+
connections: activeConnections,
|
|
6274
6306
|
disabled,
|
|
6275
|
-
|
|
6276
|
-
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
size: "sm",
|
|
6283
|
-
type: "button",
|
|
6284
|
-
children: t("inspector.account.manageAccount")
|
|
6285
|
-
})]
|
|
6286
|
-
}) : /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs(Field, {
|
|
6287
|
-
className: "connection-field",
|
|
6288
|
-
children: [/* @__PURE__ */ jsx(FieldLabel, {
|
|
6289
|
-
className: "sr-only",
|
|
6290
|
-
htmlFor: `${fieldIdPrefix}-connection`,
|
|
6291
|
-
children: t("inspector.account.connection")
|
|
6292
|
-
}), /* @__PURE__ */ jsx(AccountSelect, {
|
|
6293
|
-
connections: activeConnections,
|
|
6294
|
-
disabled,
|
|
6295
|
-
id: `${fieldIdPrefix}-connection`,
|
|
6296
|
-
selectedConnection: connection,
|
|
6297
|
-
selectedId: connection?.connectionId,
|
|
6298
|
-
onChange: (next) => void triggers.setConnection(selection.id, next),
|
|
6299
|
-
onManage: onConfigureAccess == null ? void 0 : () => onConfigureAccess(providerTrigger.definition.provider)
|
|
6300
|
-
})]
|
|
6301
|
-
}) })]
|
|
6302
|
-
})]
|
|
6307
|
+
id: `${fieldIdPrefix}-connection`,
|
|
6308
|
+
selectedConnection: connection,
|
|
6309
|
+
selectedId: connection?.connectionId,
|
|
6310
|
+
onChange: (next) => void triggers.setConnection(selection.id, next),
|
|
6311
|
+
onManage: onConfigureAccess == null ? void 0 : () => onConfigureAccess(providerTrigger.definition.provider)
|
|
6312
|
+
})]
|
|
6313
|
+
}) })]
|
|
6303
6314
|
});
|
|
6304
6315
|
}
|
|
6305
6316
|
/** A persisted reference has no live account health or authorization state. */
|
|
6306
6317
|
function SavedConnectionReference({ action, connectionId }) {
|
|
6307
6318
|
const t = useTranslate();
|
|
6308
|
-
return /* @__PURE__ */ jsxs(
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
children: [/* @__PURE__ */ jsx("
|
|
6312
|
-
className: "
|
|
6313
|
-
children:
|
|
6314
|
-
}), /* @__PURE__ */ jsxs("
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
}), connectionId != null && /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: t("inspector.account.connection") }), /* @__PURE__ */ jsx(Input$1, {
|
|
6320
|
-
"aria-label": t("inspector.account.connection"),
|
|
6321
|
-
readOnly: true,
|
|
6322
|
-
value: connectionId
|
|
6323
|
-
})] })]
|
|
6324
|
-
})]
|
|
6319
|
+
return /* @__PURE__ */ jsxs(InspectorStatusSection, {
|
|
6320
|
+
title: t("inspector.account.title"),
|
|
6321
|
+
section: "account",
|
|
6322
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
6323
|
+
className: "reference-value",
|
|
6324
|
+
children: action
|
|
6325
|
+
}), connectionId != null && /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: t("inspector.account.connection") }), /* @__PURE__ */ jsx(Input$1, {
|
|
6326
|
+
"aria-label": t("inspector.account.connection"),
|
|
6327
|
+
readOnly: true,
|
|
6328
|
+
value: connectionId
|
|
6329
|
+
})] })]
|
|
6325
6330
|
});
|
|
6326
6331
|
}
|
|
6327
6332
|
//#endregion
|
|
@@ -21154,7 +21159,7 @@ function EditableAgentSettingsProvider({ children, task, nodeId, store, connecto
|
|
|
21154
21159
|
const definition = current?.kind == "task" ? current.definition : void 0;
|
|
21155
21160
|
if (definition == null || !("executor" in definition) || !dequal(definition.executor, before)) return false;
|
|
21156
21161
|
const decoded = decodeRevisionContent({
|
|
21157
|
-
modelVersion:
|
|
21162
|
+
modelVersion: 8,
|
|
21158
21163
|
modules: {},
|
|
21159
21164
|
document: {
|
|
21160
21165
|
bindings: {},
|
|
@@ -26635,6 +26640,14 @@ if (process.env.NODE_ENV !== "production") GroupCollectionContext.displayName =
|
|
|
26635
26640
|
function useGroupCollectionContext() {
|
|
26636
26641
|
return React.useContext(GroupCollectionContext);
|
|
26637
26642
|
}
|
|
26643
|
+
function GroupCollectionProvider(props) {
|
|
26644
|
+
const { children, items } = props;
|
|
26645
|
+
const contextValue = React.useMemo(() => ({ items }), [items]);
|
|
26646
|
+
return /*#__PURE__*/ jsx(GroupCollectionContext.Provider, {
|
|
26647
|
+
value: contextValue,
|
|
26648
|
+
children
|
|
26649
|
+
});
|
|
26650
|
+
}
|
|
26638
26651
|
//#endregion
|
|
26639
26652
|
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/combobox/collection/ComboboxCollection.js
|
|
26640
26653
|
/**
|
|
@@ -26917,6 +26930,77 @@ var ComboboxPopup = /*#__PURE__*/ React.forwardRef(function ComboboxPopup(compon
|
|
|
26917
26930
|
});
|
|
26918
26931
|
if (process.env.NODE_ENV !== "production") ComboboxPopup.displayName = "ComboboxPopup";
|
|
26919
26932
|
//#endregion
|
|
26933
|
+
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/combobox/group/ComboboxGroupContext.js
|
|
26934
|
+
var ComboboxGroupContext = /*#__PURE__*/ React.createContext(void 0);
|
|
26935
|
+
if (process.env.NODE_ENV !== "production") ComboboxGroupContext.displayName = "ComboboxGroupContext";
|
|
26936
|
+
function useComboboxGroupContext() {
|
|
26937
|
+
const context = React.useContext(ComboboxGroupContext);
|
|
26938
|
+
if (context === void 0) throw new Error(process.env.NODE_ENV !== "production" ? "Base UI: ComboboxGroupContext is missing. ComboboxGroup parts must be placed within <Combobox.Group>." : formatErrorMessage(18));
|
|
26939
|
+
return context;
|
|
26940
|
+
}
|
|
26941
|
+
//#endregion
|
|
26942
|
+
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/combobox/group/ComboboxGroup.js
|
|
26943
|
+
/**
|
|
26944
|
+
* Groups related items with the corresponding label.
|
|
26945
|
+
* Renders a `<div>` element.
|
|
26946
|
+
*
|
|
26947
|
+
* Documentation: [Base UI Combobox](https://base-ui.com/react/components/combobox)
|
|
26948
|
+
*/
|
|
26949
|
+
var ComboboxGroup = /*#__PURE__*/ React.forwardRef(function ComboboxGroup(componentProps, forwardedRef) {
|
|
26950
|
+
const { render, className, style, items, ...elementProps } = componentProps;
|
|
26951
|
+
const [labelId, setLabelId] = React.useState();
|
|
26952
|
+
const contextValue = React.useMemo(() => ({
|
|
26953
|
+
labelId,
|
|
26954
|
+
setLabelId,
|
|
26955
|
+
items
|
|
26956
|
+
}), [
|
|
26957
|
+
labelId,
|
|
26958
|
+
setLabelId,
|
|
26959
|
+
items
|
|
26960
|
+
]);
|
|
26961
|
+
const element = useRenderElement("div", componentProps, {
|
|
26962
|
+
ref: forwardedRef,
|
|
26963
|
+
props: [{
|
|
26964
|
+
role: "group",
|
|
26965
|
+
"aria-labelledby": labelId
|
|
26966
|
+
}, elementProps]
|
|
26967
|
+
});
|
|
26968
|
+
const wrappedElement = /*#__PURE__*/ jsx(ComboboxGroupContext.Provider, {
|
|
26969
|
+
value: contextValue,
|
|
26970
|
+
children: element
|
|
26971
|
+
});
|
|
26972
|
+
if (items) return /*#__PURE__*/ jsx(GroupCollectionProvider, {
|
|
26973
|
+
items,
|
|
26974
|
+
children: wrappedElement
|
|
26975
|
+
});
|
|
26976
|
+
return wrappedElement;
|
|
26977
|
+
});
|
|
26978
|
+
if (process.env.NODE_ENV !== "production") ComboboxGroup.displayName = "ComboboxGroup";
|
|
26979
|
+
//#endregion
|
|
26980
|
+
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/combobox/group-label/ComboboxGroupLabel.js
|
|
26981
|
+
/**
|
|
26982
|
+
* An accessible label that is automatically associated with its parent group.
|
|
26983
|
+
* Renders a `<div>` element.
|
|
26984
|
+
*
|
|
26985
|
+
* Documentation: [Base UI Combobox](https://base-ui.com/react/components/combobox)
|
|
26986
|
+
*/
|
|
26987
|
+
var ComboboxGroupLabel = /*#__PURE__*/ React.forwardRef(function ComboboxGroupLabel(componentProps, forwardedRef) {
|
|
26988
|
+
const { render, className, style, id: idProp, ...elementProps } = componentProps;
|
|
26989
|
+
const { setLabelId } = useComboboxGroupContext();
|
|
26990
|
+
const id = useBaseUiId(idProp);
|
|
26991
|
+
useIsoLayoutEffect(() => {
|
|
26992
|
+
setLabelId(id);
|
|
26993
|
+
return () => {
|
|
26994
|
+
setLabelId(void 0);
|
|
26995
|
+
};
|
|
26996
|
+
}, [id, setLabelId]);
|
|
26997
|
+
return useRenderElement("div", componentProps, {
|
|
26998
|
+
ref: forwardedRef,
|
|
26999
|
+
props: [{ id }, elementProps]
|
|
27000
|
+
});
|
|
27001
|
+
});
|
|
27002
|
+
if (process.env.NODE_ENV !== "production") ComboboxGroupLabel.displayName = "ComboboxGroupLabel";
|
|
27003
|
+
//#endregion
|
|
26920
27004
|
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/combobox/item/ComboboxItemContext.js
|
|
26921
27005
|
var ComboboxItemContext = /*#__PURE__*/ React.createContext(void 0);
|
|
26922
27006
|
if (process.env.NODE_ENV !== "production") ComboboxItemContext.displayName = "ComboboxItemContext";
|
|
@@ -28973,6 +29057,121 @@ function GeneralSettings({ title, children, disabled = false, readOnly = false,
|
|
|
28973
29057
|
}, nodeId);
|
|
28974
29058
|
}
|
|
28975
29059
|
//#endregion
|
|
29060
|
+
//#region src/workbench/browser/runtime/editor/leinaBotSelect.tsx
|
|
29061
|
+
function LeinaBotSelect({ source, flowId, value, disabled, onChange }) {
|
|
29062
|
+
const t = useTranslate();
|
|
29063
|
+
const [attempt, setAttempt] = useState(0);
|
|
29064
|
+
const [state, setState] = useState();
|
|
29065
|
+
useEffect(() => {
|
|
29066
|
+
const controller = new AbortController();
|
|
29067
|
+
setState((previous) => ({
|
|
29068
|
+
flowId,
|
|
29069
|
+
source,
|
|
29070
|
+
loading: true,
|
|
29071
|
+
bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0
|
|
29072
|
+
}));
|
|
29073
|
+
source.listLeinaBots(flowId, controller.signal).then((bots) => {
|
|
29074
|
+
if (!controller.signal.aborted) setState({
|
|
29075
|
+
flowId,
|
|
29076
|
+
source,
|
|
29077
|
+
bots,
|
|
29078
|
+
loading: false
|
|
29079
|
+
});
|
|
29080
|
+
}, (error) => {
|
|
29081
|
+
if (!controller.signal.aborted) setState((previous) => ({
|
|
29082
|
+
flowId,
|
|
29083
|
+
source,
|
|
29084
|
+
bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0,
|
|
29085
|
+
loading: false,
|
|
29086
|
+
error: error instanceof Error ? error.message : t("contextPanel.loadFailed")
|
|
29087
|
+
}));
|
|
29088
|
+
});
|
|
29089
|
+
return () => controller.abort();
|
|
29090
|
+
}, [
|
|
29091
|
+
source,
|
|
29092
|
+
flowId,
|
|
29093
|
+
attempt,
|
|
29094
|
+
t
|
|
29095
|
+
]);
|
|
29096
|
+
const current = state?.flowId == flowId && state.source == source ? state : void 0;
|
|
29097
|
+
const bots = current?.bots;
|
|
29098
|
+
const selected = typeof value == "string" && value.trim().length > 0 ? value : void 0;
|
|
29099
|
+
const missing = selected != null && bots != null && !bots.some((bot) => bot.leinaId == selected);
|
|
29100
|
+
const error = selected == null ? t("leina.select") : missing ? t("leina.unavailable", { id: selected }) : void 0;
|
|
29101
|
+
const selectedLabel = bots?.find((bot) => bot.leinaId == selected)?.name ?? (missing ? t("leina.unavailable", { id: selected }) : current?.error != null ? t("leina.loadFailed") : t("leina.loading"));
|
|
29102
|
+
const items = [...(bots ?? []).map((bot) => ({
|
|
29103
|
+
value: bot.leinaId,
|
|
29104
|
+
label: bot.name
|
|
29105
|
+
})), ...selected != null && !bots?.some((bot) => bot.leinaId == selected) ? [{
|
|
29106
|
+
value: selected,
|
|
29107
|
+
label: selectedLabel
|
|
29108
|
+
}] : []];
|
|
29109
|
+
return /* @__PURE__ */ jsx(ValueEditorFeedback, {
|
|
29110
|
+
error,
|
|
29111
|
+
children: (errorId) => /* @__PURE__ */ jsxs(Select$1, {
|
|
29112
|
+
items,
|
|
29113
|
+
value: selected ?? null,
|
|
29114
|
+
disabled,
|
|
29115
|
+
onOpenChange: (open) => {
|
|
29116
|
+
if (open) setAttempt((previous) => previous + 1);
|
|
29117
|
+
},
|
|
29118
|
+
onValueChange: (next) => {
|
|
29119
|
+
if (typeof next == "string" && bots?.some((bot) => bot.leinaId == next)) onChange(next);
|
|
29120
|
+
},
|
|
29121
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
29122
|
+
size: "field",
|
|
29123
|
+
className: "w-full",
|
|
29124
|
+
"data-field-control": true,
|
|
29125
|
+
"aria-label": t("leina.robot"),
|
|
29126
|
+
"aria-invalid": error != null || void 0,
|
|
29127
|
+
"aria-describedby": errorId,
|
|
29128
|
+
children: /* @__PURE__ */ jsx(SelectValue, {
|
|
29129
|
+
placeholder: t("leina.select"),
|
|
29130
|
+
children: selected == null ? void 0 : selectedLabel
|
|
29131
|
+
})
|
|
29132
|
+
}), /* @__PURE__ */ jsxs(SelectContent, {
|
|
29133
|
+
align: "start",
|
|
29134
|
+
alignItemWithTrigger: false,
|
|
29135
|
+
className: selectionMenuContentClass,
|
|
29136
|
+
children: [
|
|
29137
|
+
(current?.loading ?? true) && /* @__PURE__ */ jsx("span", {
|
|
29138
|
+
role: "status",
|
|
29139
|
+
className: "block px-1.5 py-1 text-xs leading-5 text-muted-foreground",
|
|
29140
|
+
children: t("leina.loading")
|
|
29141
|
+
}),
|
|
29142
|
+
bots?.map((bot) => /* @__PURE__ */ jsx(SelectItem, {
|
|
29143
|
+
value: bot.leinaId,
|
|
29144
|
+
className: selectionMenuItemClass,
|
|
29145
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
29146
|
+
className: "truncate",
|
|
29147
|
+
children: bot.name
|
|
29148
|
+
})
|
|
29149
|
+
}, bot.leinaId)),
|
|
29150
|
+
missing && selected != null && /* @__PURE__ */ jsx(SelectItem, {
|
|
29151
|
+
value: selected,
|
|
29152
|
+
disabled: true,
|
|
29153
|
+
className: `mt-1 first-of-type:mt-0 min-h-7 rounded-[var(--ui-control-radius,var(--ui-radius))] py-1 text-xs leading-5 font-normal text-destructive`,
|
|
29154
|
+
children: t("leina.unavailable", { id: selected })
|
|
29155
|
+
}),
|
|
29156
|
+
current?.error != null && /* @__PURE__ */ jsxs("span", {
|
|
29157
|
+
role: "alert",
|
|
29158
|
+
className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal break-words text-destructive",
|
|
29159
|
+
children: [
|
|
29160
|
+
t("leina.loadFailed"),
|
|
29161
|
+
" ",
|
|
29162
|
+
current.error
|
|
29163
|
+
]
|
|
29164
|
+
}),
|
|
29165
|
+
bots?.length == 0 && !current?.loading && /* @__PURE__ */ jsx("span", {
|
|
29166
|
+
className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal text-muted-foreground",
|
|
29167
|
+
children: t("leina.empty")
|
|
29168
|
+
})
|
|
29169
|
+
]
|
|
29170
|
+
})]
|
|
29171
|
+
})
|
|
29172
|
+
});
|
|
29173
|
+
}
|
|
29174
|
+
//#endregion
|
|
28976
29175
|
//#region src/workbench/browser/runtime/editor/linearTriggerConfig.tsx
|
|
28977
29176
|
function useOptions(store, nodeId, field, scope, enabled) {
|
|
28978
29177
|
const [attempt, setAttempt] = useState(0);
|
|
@@ -34387,6 +34586,294 @@ function WebhookEditor({ bodyFields, method, options, disabled, readOnly, output
|
|
|
34387
34586
|
] });
|
|
34388
34587
|
}
|
|
34389
34588
|
//#endregion
|
|
34589
|
+
//#region src/workbench/browser/runtime/linkContext.ts
|
|
34590
|
+
/** The host owns URLs for links within the deployment. */
|
|
34591
|
+
var WorkbenchLinkContext = createContext(void 0);
|
|
34592
|
+
//#endregion
|
|
34593
|
+
//#region src/workbench/browser/runtime/editor/workflowSection.tsx
|
|
34594
|
+
function OpenWorkflowLink({ flowId }) {
|
|
34595
|
+
const t = useTranslate();
|
|
34596
|
+
const hrefFor = useContext(WorkbenchLinkContext);
|
|
34597
|
+
if (!flowId || hrefFor == null) return null;
|
|
34598
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
34599
|
+
render: /* @__PURE__ */ jsx("a", {
|
|
34600
|
+
className: buttonVariants({
|
|
34601
|
+
variant: "ghost",
|
|
34602
|
+
size: "icon-xs",
|
|
34603
|
+
className: "text-muted-foreground"
|
|
34604
|
+
}),
|
|
34605
|
+
href: hrefFor({
|
|
34606
|
+
flowId,
|
|
34607
|
+
view: "design"
|
|
34608
|
+
}),
|
|
34609
|
+
target: "_blank",
|
|
34610
|
+
rel: "noopener noreferrer",
|
|
34611
|
+
"aria-label": t("workflow.open")
|
|
34612
|
+
}),
|
|
34613
|
+
children: /* @__PURE__ */ jsx("i", {
|
|
34614
|
+
"aria-hidden": "true",
|
|
34615
|
+
className: "i-lucide-light:external-link text-sm"
|
|
34616
|
+
})
|
|
34617
|
+
}), /* @__PURE__ */ jsx(TooltipContent, { children: t("workflow.open") })] });
|
|
34618
|
+
}
|
|
34619
|
+
function useWorkflowActions(props) {
|
|
34620
|
+
const t = useTranslate();
|
|
34621
|
+
const [state, setState] = useState();
|
|
34622
|
+
const request = useRef();
|
|
34623
|
+
const nodeId = props?.nodeId;
|
|
34624
|
+
useEffect(() => () => request.current?.abort(), [nodeId]);
|
|
34625
|
+
const current = state?.nodeId == nodeId ? state : void 0;
|
|
34626
|
+
async function update(choice) {
|
|
34627
|
+
if (props == null || props.disabled || props.task.executor.kind != "workflow") return;
|
|
34628
|
+
const candidate = choice ?? {
|
|
34629
|
+
flowId: props.task.executor.flowId,
|
|
34630
|
+
name: props.task.name,
|
|
34631
|
+
problem: null
|
|
34632
|
+
};
|
|
34633
|
+
if (!candidate.flowId) return;
|
|
34634
|
+
request.current?.abort();
|
|
34635
|
+
const controller = new AbortController();
|
|
34636
|
+
request.current = controller;
|
|
34637
|
+
const set = (next) => {
|
|
34638
|
+
if (!controller.signal.aborted) setState({
|
|
34639
|
+
nodeId: props.nodeId,
|
|
34640
|
+
flowId: candidate.flowId,
|
|
34641
|
+
...next
|
|
34642
|
+
});
|
|
34643
|
+
};
|
|
34644
|
+
set({
|
|
34645
|
+
busy: true,
|
|
34646
|
+
pending: choice
|
|
34647
|
+
});
|
|
34648
|
+
let contract;
|
|
34649
|
+
let failure;
|
|
34650
|
+
try {
|
|
34651
|
+
if (choice?.problem == null) try {
|
|
34652
|
+
contract = await props.load(candidate.flowId, controller.signal);
|
|
34653
|
+
} catch (cause) {
|
|
34654
|
+
failure = errorNotice(cause, t).message;
|
|
34655
|
+
}
|
|
34656
|
+
if (controller.signal.aborted) return;
|
|
34657
|
+
const next = workflowSelectionTask(candidate, contract, props.task);
|
|
34658
|
+
if ((choice != null || contract != null) && !dequal(next, props.task)) {
|
|
34659
|
+
if (!await props.onSave(props.task, next)) failure = void 0;
|
|
34660
|
+
} else if (!controller.signal.aborted) await props.onCheck();
|
|
34661
|
+
} catch (cause) {
|
|
34662
|
+
failure = errorNotice(cause, t).message;
|
|
34663
|
+
} finally {
|
|
34664
|
+
set({
|
|
34665
|
+
busy: false,
|
|
34666
|
+
error: failure
|
|
34667
|
+
});
|
|
34668
|
+
}
|
|
34669
|
+
}
|
|
34670
|
+
return {
|
|
34671
|
+
busy: current?.busy ?? false,
|
|
34672
|
+
error: props?.task.executor.kind == "workflow" && current?.flowId == props.task.executor.flowId ? current?.error : void 0,
|
|
34673
|
+
pending: current?.pending,
|
|
34674
|
+
select: (choice) => update(choice),
|
|
34675
|
+
recheck: () => update()
|
|
34676
|
+
};
|
|
34677
|
+
}
|
|
34678
|
+
function WorkflowInterfaceAlert({ actions, disabled, message, stale, flowId }) {
|
|
34679
|
+
const t = useTranslate();
|
|
34680
|
+
return /* @__PURE__ */ jsx(InspectorStatusSection, {
|
|
34681
|
+
title: t(stale ? "workflow.staleTitle" : "workflow.problemTitle"),
|
|
34682
|
+
tone: "danger",
|
|
34683
|
+
section: "workflow-status",
|
|
34684
|
+
alert: true,
|
|
34685
|
+
actions: /* @__PURE__ */ jsx("span", {
|
|
34686
|
+
className: "ml-auto",
|
|
34687
|
+
children: /* @__PURE__ */ jsx(OpenWorkflowLink, { flowId })
|
|
34688
|
+
}),
|
|
34689
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
34690
|
+
className: "inspector-status-prompt",
|
|
34691
|
+
children: [/* @__PURE__ */ jsx("p", { children: actions.error || message }), /* @__PURE__ */ jsx(Button$1, {
|
|
34692
|
+
disabled: disabled || actions.busy,
|
|
34693
|
+
size: "sm",
|
|
34694
|
+
type: "button",
|
|
34695
|
+
onClick: () => void actions.recheck(),
|
|
34696
|
+
children: t(stale ? "workflow.refresh" : "workflow.recheck")
|
|
34697
|
+
})]
|
|
34698
|
+
})
|
|
34699
|
+
});
|
|
34700
|
+
}
|
|
34701
|
+
function WorkflowSection({ task, disabled, actions, list }) {
|
|
34702
|
+
const t = useTranslate();
|
|
34703
|
+
const id = useId();
|
|
34704
|
+
const [container, setContainer] = useState(null);
|
|
34705
|
+
const [loading, setLoading] = useState(false);
|
|
34706
|
+
const [open, setOpen] = useState(false);
|
|
34707
|
+
const [query, setQuery] = useState("");
|
|
34708
|
+
const [error, setError] = useState();
|
|
34709
|
+
const [choices, setChoices] = useState([]);
|
|
34710
|
+
const request = useRef();
|
|
34711
|
+
useEffect(() => () => request.current?.abort(), []);
|
|
34712
|
+
const target = actions.pending?.flowId ?? (task.executor.kind == "workflow" ? task.executor.flowId : "");
|
|
34713
|
+
const selectedName = actions.pending?.name ?? choices.find((item) => item.flowId == target)?.name ?? task.name;
|
|
34714
|
+
const targetError = error || (!target ? t("diagnostics.messages.workflow.target-required") : void 0);
|
|
34715
|
+
const visible = choices.filter((item) => `${item.name} ${item.flowId}`.toLocaleLowerCase().includes(query.trim().toLocaleLowerCase()));
|
|
34716
|
+
async function readChoices() {
|
|
34717
|
+
request.current?.abort();
|
|
34718
|
+
const controller = new AbortController();
|
|
34719
|
+
request.current = controller;
|
|
34720
|
+
setLoading(true);
|
|
34721
|
+
setError(void 0);
|
|
34722
|
+
try {
|
|
34723
|
+
const result = await list(controller.signal);
|
|
34724
|
+
if (!controller.signal.aborted) setChoices(result);
|
|
34725
|
+
} catch (cause) {
|
|
34726
|
+
if (!controller.signal.aborted) setError(errorNotice(cause, t).message);
|
|
34727
|
+
} finally {
|
|
34728
|
+
if (!controller.signal.aborted) setLoading(false);
|
|
34729
|
+
}
|
|
34730
|
+
}
|
|
34731
|
+
return /* @__PURE__ */ jsxs(Field, {
|
|
34732
|
+
className: "inspector-field-section",
|
|
34733
|
+
"data-inspector-section": "task",
|
|
34734
|
+
children: [/* @__PURE__ */ jsxs(FieldLabel, {
|
|
34735
|
+
className: "inspector-section-title justify-between",
|
|
34736
|
+
htmlFor: id,
|
|
34737
|
+
children: [/* @__PURE__ */ jsx("span", { children: t("workflow.target") }), /* @__PURE__ */ jsx(OpenWorkflowLink, { flowId: target })]
|
|
34738
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
34739
|
+
ref: setContainer,
|
|
34740
|
+
className: "node-settings",
|
|
34741
|
+
children: /* @__PURE__ */ jsxs(ComboboxRoot, {
|
|
34742
|
+
disabled: disabled || actions.busy,
|
|
34743
|
+
value: target || null,
|
|
34744
|
+
items: visible.map((item) => item.flowId),
|
|
34745
|
+
filter: null,
|
|
34746
|
+
inputValue: open ? query : target ? selectedName : "",
|
|
34747
|
+
onInputValueChange: setQuery,
|
|
34748
|
+
onValueChange: (value) => {
|
|
34749
|
+
const candidate = choices.find((item) => item.flowId == value);
|
|
34750
|
+
if (candidate != null) actions.select(candidate);
|
|
34751
|
+
},
|
|
34752
|
+
open,
|
|
34753
|
+
onOpenChange: (nextOpen) => {
|
|
34754
|
+
setOpen(nextOpen);
|
|
34755
|
+
setQuery("");
|
|
34756
|
+
if (nextOpen) readChoices();
|
|
34757
|
+
},
|
|
34758
|
+
children: [/* @__PURE__ */ jsx(ValueEditorFeedback, {
|
|
34759
|
+
error: open ? void 0 : targetError,
|
|
34760
|
+
children: (errorId) => /* @__PURE__ */ jsxs(ComboboxInputGroup, {
|
|
34761
|
+
render: /* @__PURE__ */ jsx(InputGroup, {}),
|
|
34762
|
+
children: [
|
|
34763
|
+
target && /* @__PURE__ */ jsx(InputGroupAddon, {
|
|
34764
|
+
align: "inline-start",
|
|
34765
|
+
children: /* @__PURE__ */ jsx("i", {
|
|
34766
|
+
"aria-hidden": "true",
|
|
34767
|
+
className: "i-lucide-light:workflow shrink-0 text-sm"
|
|
34768
|
+
})
|
|
34769
|
+
}),
|
|
34770
|
+
/* @__PURE__ */ jsx(ComboboxInput, {
|
|
34771
|
+
render: /* @__PURE__ */ jsx(InputGroupInput, {}),
|
|
34772
|
+
id,
|
|
34773
|
+
"aria-label": t("workflow.target"),
|
|
34774
|
+
placeholder: t(open ? "workflow.search" : "workflow.select"),
|
|
34775
|
+
"aria-invalid": !!targetError || void 0,
|
|
34776
|
+
"aria-describedby": errorId,
|
|
34777
|
+
"data-field-prompt": !target || void 0
|
|
34778
|
+
}),
|
|
34779
|
+
/* @__PURE__ */ jsx(InputGroupAddon, {
|
|
34780
|
+
align: "inline-end",
|
|
34781
|
+
children: /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
34782
|
+
render: /* @__PURE__ */ jsx(ComboboxTrigger, {
|
|
34783
|
+
render: /* @__PURE__ */ jsx(Button$1, {
|
|
34784
|
+
variant: "ghost",
|
|
34785
|
+
size: "icon-xs"
|
|
34786
|
+
}),
|
|
34787
|
+
"aria-label": t("workflow.select")
|
|
34788
|
+
}),
|
|
34789
|
+
children: /* @__PURE__ */ jsx(SelectChevron, {})
|
|
34790
|
+
}), /* @__PURE__ */ jsx(TooltipContent, {
|
|
34791
|
+
container,
|
|
34792
|
+
children: t("workflow.select")
|
|
34793
|
+
})] })
|
|
34794
|
+
})
|
|
34795
|
+
]
|
|
34796
|
+
})
|
|
34797
|
+
}), /* @__PURE__ */ jsx(ComboboxPortal, {
|
|
34798
|
+
container,
|
|
34799
|
+
className: "contents",
|
|
34800
|
+
children: /* @__PURE__ */ jsx(ComboboxPositioner, {
|
|
34801
|
+
align: "start",
|
|
34802
|
+
sideOffset: 4,
|
|
34803
|
+
className: "isolate z-50",
|
|
34804
|
+
children: /* @__PURE__ */ jsx(ComboboxPopup, {
|
|
34805
|
+
className: `w-(--anchor-width) min-w-56 max-w-[calc(100vw-24px)] bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-none ${selectionMenuContentClass}`,
|
|
34806
|
+
children: /* @__PURE__ */ jsxs(ComboboxList, {
|
|
34807
|
+
"aria-label": t("workflow.target"),
|
|
34808
|
+
className: "max-h-[min(50vh,360px,calc(var(--available-height)-0.5rem))] overflow-y-auto overscroll-contain",
|
|
34809
|
+
children: [
|
|
34810
|
+
[
|
|
34811
|
+
"published",
|
|
34812
|
+
"missingStart",
|
|
34813
|
+
"other"
|
|
34814
|
+
].map((group) => {
|
|
34815
|
+
const items = visible.filter((item) => workflowCandidateGroup(item) == group);
|
|
34816
|
+
if (!items.length && group != "published") return null;
|
|
34817
|
+
return /* @__PURE__ */ jsxs(ComboboxGroup, { children: [
|
|
34818
|
+
/* @__PURE__ */ jsxs(ComboboxGroupLabel, {
|
|
34819
|
+
className: "flex items-center gap-2 px-2 py-1.5 text-xs text-muted-foreground",
|
|
34820
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
34821
|
+
"aria-hidden": "true",
|
|
34822
|
+
className: `status-dot ${group == "published" ? "success" : group == "missingStart" ? "warning" : "neutral"}`
|
|
34823
|
+
}), t(`workflow.groups.${group}`)]
|
|
34824
|
+
}),
|
|
34825
|
+
!items.length && !loading && !error && /* @__PURE__ */ jsx("div", {
|
|
34826
|
+
className: `pr-2 pl-6 text-muted-foreground mt-1 first-of-type:mt-0 min-h-7 rounded-[var(--ui-control-radius,var(--ui-radius))] py-1 text-xs leading-5 font-normal`,
|
|
34827
|
+
children: t(query ? "workflow.noMatches" : "workflow.empty")
|
|
34828
|
+
}),
|
|
34829
|
+
items.map((item) => /* @__PURE__ */ jsxs(ComboboxItem, {
|
|
34830
|
+
value: item.flowId,
|
|
34831
|
+
className: `flex cursor-default items-center gap-2 pr-2 pl-6 data-highlighted:bg-accent ${selectionMenuItemClass}`,
|
|
34832
|
+
children: [
|
|
34833
|
+
/* @__PURE__ */ jsx("i", {
|
|
34834
|
+
"aria-hidden": "true",
|
|
34835
|
+
className: "i-lucide-light:workflow shrink-0 text-sm"
|
|
34836
|
+
}),
|
|
34837
|
+
/* @__PURE__ */ jsx("span", {
|
|
34838
|
+
className: "min-w-0 flex-1 truncate",
|
|
34839
|
+
children: item.name
|
|
34840
|
+
}),
|
|
34841
|
+
/* @__PURE__ */ jsx(ComboboxItemIndicator, { children: /* @__PURE__ */ jsx("i", {
|
|
34842
|
+
"aria-hidden": "true",
|
|
34843
|
+
className: "i-lucide-light:check shrink-0 text-sm"
|
|
34844
|
+
}) })
|
|
34845
|
+
]
|
|
34846
|
+
}, item.flowId))
|
|
34847
|
+
] }, group);
|
|
34848
|
+
}),
|
|
34849
|
+
loading && /* @__PURE__ */ jsx("p", {
|
|
34850
|
+
role: "status",
|
|
34851
|
+
className: "px-2 py-2 text-xs text-muted-foreground",
|
|
34852
|
+
children: t("workflow.loading")
|
|
34853
|
+
}),
|
|
34854
|
+
error && /* @__PURE__ */ jsxs("div", {
|
|
34855
|
+
role: "alert",
|
|
34856
|
+
className: "flex items-center gap-2 px-2 py-2 text-xs",
|
|
34857
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
34858
|
+
className: "min-w-0 flex-1",
|
|
34859
|
+
children: error
|
|
34860
|
+
}), /* @__PURE__ */ jsx(Button$1, {
|
|
34861
|
+
variant: "outline",
|
|
34862
|
+
size: "xs",
|
|
34863
|
+
onClick: () => void readChoices(),
|
|
34864
|
+
children: t("workflow.retry")
|
|
34865
|
+
})]
|
|
34866
|
+
})
|
|
34867
|
+
]
|
|
34868
|
+
})
|
|
34869
|
+
})
|
|
34870
|
+
})
|
|
34871
|
+
})]
|
|
34872
|
+
})
|
|
34873
|
+
})]
|
|
34874
|
+
});
|
|
34875
|
+
}
|
|
34876
|
+
//#endregion
|
|
34390
34877
|
//#region src/workbench/browser/runtime/editor/nodeInspector.tsx
|
|
34391
34878
|
function inspectorIcon(node) {
|
|
34392
34879
|
if (node?.kind == "trigger") return "trigger";
|
|
@@ -34394,8 +34881,10 @@ function inspectorIcon(node) {
|
|
|
34394
34881
|
if (node?.kind == "value") return "value";
|
|
34395
34882
|
if (node?.kind == "approval") return "check";
|
|
34396
34883
|
if (node?.kind == "wait") return "wait";
|
|
34884
|
+
if (node?.kind == "outputs") return "outputs";
|
|
34397
34885
|
if (node?.kind == "task" && node.definition != null && "executor" in node.definition) {
|
|
34398
34886
|
if (node.definition.executor.kind == "decision") return "decision";
|
|
34887
|
+
if (node.definition.executor.kind == "workflow") return "flow";
|
|
34399
34888
|
if (node.definition.executor.kind == "openapi") return "task";
|
|
34400
34889
|
return node.definition.executor.kind == "connector" ? "connection" : "llm";
|
|
34401
34890
|
}
|
|
@@ -34404,6 +34893,7 @@ function inspectorIcon(node) {
|
|
|
34404
34893
|
function nodePurposePlaceholder(selection, t, action, displays) {
|
|
34405
34894
|
switch (selection.kind) {
|
|
34406
34895
|
case "condition": return t("addNode.conditionDescription");
|
|
34896
|
+
case "outputs": return t("addNode.outputsDescription");
|
|
34407
34897
|
case "value": return t("addNode.valueDescription");
|
|
34408
34898
|
case "approval": return t("addNode.approvalDescription");
|
|
34409
34899
|
case "wait": return t("addNode.waitDescription");
|
|
@@ -34411,6 +34901,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
|
|
|
34411
34901
|
const node = selection.node;
|
|
34412
34902
|
switch (node.kind) {
|
|
34413
34903
|
case "manual": return t("addNode.manualDescription");
|
|
34904
|
+
case "start": return t("addNode.startDescription");
|
|
34414
34905
|
case "error": return t("errorWorkflow.description");
|
|
34415
34906
|
case "cron": return t("addNode.cronDescription");
|
|
34416
34907
|
case "webhook": return t("addNode.webhookDescription");
|
|
@@ -34425,6 +34916,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
|
|
|
34425
34916
|
switch (definition.executor.kind) {
|
|
34426
34917
|
case "agent": return t("addNode.agentDescription");
|
|
34427
34918
|
case "decision": return t("decision.description");
|
|
34919
|
+
case "workflow": return t("workflow.description");
|
|
34428
34920
|
case "openapi": return t("openapi.description");
|
|
34429
34921
|
case "connector": return action?.description;
|
|
34430
34922
|
case "llm": return t(definition.executor.mode == "json" ? "addNode.llmStructuredDescription" : "addNode.llmChatDescription");
|
|
@@ -34434,7 +34926,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
|
|
|
34434
34926
|
}
|
|
34435
34927
|
function inputUpstreamSources({ revision, sourceNodeIcons, selection, store, handleName, t, triggerDisplays }) {
|
|
34436
34928
|
const graph = revision.graph();
|
|
34437
|
-
const mapping =
|
|
34929
|
+
const mapping = revision.inputMappings(selection.node)[handleName];
|
|
34438
34930
|
const sources = mapping?.kind == "sources" ? mapping.sources.filter((source) => source.kind == "node") : [];
|
|
34439
34931
|
const providerDisplay = (node) => node?.kind == "integration" || node?.kind == "poll" ? triggerDisplays?.[node.definition.key] : void 0;
|
|
34440
34932
|
return {
|
|
@@ -34483,10 +34975,26 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34483
34975
|
const isAgent = task != null && "executor" in task && task.executor.kind == "agent";
|
|
34484
34976
|
const isDecision = task != null && "executor" in task && task.executor.kind == "decision";
|
|
34485
34977
|
const isOpenApi = task != null && "executor" in task && task.executor.kind == "openapi";
|
|
34978
|
+
const unconfiguredWorkflow = task != null && "executor" in task && task.executor.kind == "workflow" && !task.executor.flowId;
|
|
34486
34979
|
const unconfiguredOpenApi = task != null && "executor" in task && task.executor.kind == "openapi" && !task.executor.path;
|
|
34487
34980
|
const isLlm = task != null && "executor" in task && task.executor.kind == "llm";
|
|
34488
34981
|
const connector = task != null && "executor" in task && task.executor.kind == "connector" ? task.executor : void 0;
|
|
34489
34982
|
const nodeId = selection?.kind == "task" ? selection.id : void 0;
|
|
34983
|
+
const workflowSettings = task != null && "executor" in task && task.executor.kind == "workflow" && selection != null ? {
|
|
34984
|
+
task,
|
|
34985
|
+
nodeId: selection.id,
|
|
34986
|
+
onCheck: () => store?.check() ?? Promise.resolve(),
|
|
34987
|
+
disabled: disabled || readOnly,
|
|
34988
|
+
load: (flowId, signal) => store.loadWorkflowContract(flowId, signal),
|
|
34989
|
+
onSave: (before, value) => store?.saveTaskSettings(selection.id, {
|
|
34990
|
+
kind: "workflow",
|
|
34991
|
+
name: value.name,
|
|
34992
|
+
before,
|
|
34993
|
+
task: value
|
|
34994
|
+
}) ?? Promise.resolve(false)
|
|
34995
|
+
} : void 0;
|
|
34996
|
+
const workflowActions = useWorkflowActions(workflowSettings);
|
|
34997
|
+
const workflowIssue = diagnostics?.find((issue) => issue.code.startsWith("workflow.") && issue.code != "workflow.target-required");
|
|
34490
34998
|
const locatedRequest = useRef();
|
|
34491
34999
|
useEffect(() => {
|
|
34492
35000
|
if (focus == null) return;
|
|
@@ -34551,6 +35059,13 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34551
35059
|
loading: connectorLoading,
|
|
34552
35060
|
nodeId
|
|
34553
35061
|
}),
|
|
35062
|
+
!readOnly && workflowSettings != null && (workflowIssue != null || workflowActions.error != null) && /* @__PURE__ */ jsx(WorkflowInterfaceAlert, {
|
|
35063
|
+
flowId: workflowSettings.task.executor.kind == "workflow" ? workflowSettings.task.executor.flowId : "",
|
|
35064
|
+
actions: workflowActions,
|
|
35065
|
+
disabled,
|
|
35066
|
+
stale: workflowIssue?.code == "workflow.revision-stale" || workflowIssue?.code == "workflow.snapshot-missing",
|
|
35067
|
+
message: workflowIssue == null ? void 0 : diagnosticMessage(workflowIssue, t)
|
|
35068
|
+
}, `workflow-alert:${selection?.id}`),
|
|
34554
35069
|
selection != null && /* @__PURE__ */ jsx(NodeDescription, {
|
|
34555
35070
|
value: selection.node.description,
|
|
34556
35071
|
placeholder: nodePurposePlaceholder(selection, t, connectorAction, triggerDisplays),
|
|
@@ -34619,7 +35134,22 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34619
35134
|
value: selection.trigger.sourceFlowIds ?? [],
|
|
34620
35135
|
disabled
|
|
34621
35136
|
}) }),
|
|
34622
|
-
selection?.kind === "trigger" && selection.trigger.kind
|
|
35137
|
+
selection?.kind === "trigger" && selection.trigger.kind === "start" && /* @__PURE__ */ jsx("section", {
|
|
35138
|
+
className: "inspector-port-section",
|
|
35139
|
+
"data-inspector-section": "outputs",
|
|
35140
|
+
children: /* @__PURE__ */ jsx(PortDefinitionEditor, {
|
|
35141
|
+
layout: "ports",
|
|
35142
|
+
title: t("inspector.ports.startParametersTitle"),
|
|
35143
|
+
output: true,
|
|
35144
|
+
readOnly,
|
|
35145
|
+
disabled,
|
|
35146
|
+
values: selection.trigger.inputDefs,
|
|
35147
|
+
onChange: (parameters, deletion) => {
|
|
35148
|
+
store?.saveStartInputDefs(selection.id, parameters, deletion);
|
|
35149
|
+
}
|
|
35150
|
+
})
|
|
35151
|
+
}),
|
|
35152
|
+
selection?.kind === "trigger" && selection.trigger.kind !== "webhook" && selection.trigger.kind !== "start" && /* @__PURE__ */ jsx(TriggerSummary, {
|
|
34623
35153
|
trigger: selection.trigger,
|
|
34624
35154
|
display: selection.trigger.kind == "integration" || selection.trigger.kind == "poll" ? triggerDisplays?.[selection.trigger.definition.key] : void 0
|
|
34625
35155
|
}),
|
|
@@ -34652,10 +35182,15 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34652
35182
|
task: value
|
|
34653
35183
|
}, deletion) ?? Promise.resolve(false)
|
|
34654
35184
|
}, `decision:${selection.id}`),
|
|
35185
|
+
workflowSettings != null && /* @__PURE__ */ jsx(WorkflowSection, {
|
|
35186
|
+
...workflowSettings,
|
|
35187
|
+
actions: workflowActions,
|
|
35188
|
+
list: (signal) => store.listWorkflowTargets(signal)
|
|
35189
|
+
}, `workflow:${selection?.id}`),
|
|
34655
35190
|
isOpenApi && task != null && "executor" in task && /* @__PURE__ */ jsx(OpenApiSection, {
|
|
34656
35191
|
task,
|
|
34657
35192
|
credentials: (onInvalidChange) => selection?.kind === "task" && task.inputs.filter((port) => "handle" in port && port.handle.startsWith("auth.")).map((definition) => {
|
|
34658
|
-
const mapping = selection.node
|
|
35193
|
+
const mapping = revision.inputMappings(selection.node)[definition.handle];
|
|
34659
35194
|
const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
34660
35195
|
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
34661
35196
|
return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: definition.handle.slice(5).replace(/^manual\./, "").replaceAll(".", " · ") }), /* @__PURE__ */ jsx(NodeInputValue, {
|
|
@@ -34700,10 +35235,10 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34700
35235
|
task: value
|
|
34701
35236
|
}) ?? Promise.resolve(false)
|
|
34702
35237
|
}, `openapi:${selection?.id}`),
|
|
34703
|
-
!unconfiguredOpenApi && (selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
|
|
34704
|
-
const definitions = selection.kind === "task" ? [...selection.definition?.inputs ?? []] : [...selection.node.inputDefinitions];
|
|
35238
|
+
!unconfiguredOpenApi && !unconfiguredWorkflow && (selection?.kind === "outputs" || selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
|
|
35239
|
+
const definitions = selection.kind === "outputs" ? [...selection.node.outputDefs] : selection.kind === "task" ? [...selection.definition?.inputs ?? []] : [...selection.node.inputDefinitions];
|
|
34705
35240
|
const handles = new Set(definitions.flatMap((definition) => "handle" in definition ? [definition.handle] : []));
|
|
34706
|
-
for (const handle of Object.keys(selection.node
|
|
35241
|
+
for (const handle of Object.keys(revision.inputMappings(selection.node))) if (!handles.has(handle) && !(selection.kind === "task" && selection.node.additionalInputs?.some((port) => port.handle === handle))) definitions.push({
|
|
34707
35242
|
handle,
|
|
34708
35243
|
jsonSchema: {},
|
|
34709
35244
|
nullable: true
|
|
@@ -34714,11 +35249,20 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34714
35249
|
...definition,
|
|
34715
35250
|
description: t("decision.targetDescription")
|
|
34716
35251
|
};
|
|
34717
|
-
const mapping = selection.node
|
|
35252
|
+
const mapping = revision.inputMappings(selection.node)[definition.handle];
|
|
34718
35253
|
const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
34719
35254
|
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
34720
35255
|
return {
|
|
34721
35256
|
definition,
|
|
35257
|
+
editor: !readOnly && connectors != null && connector?.action == "leina.send_notification" && definition.handle == "leinaId" && mapping?.kind != "sources" ? /* @__PURE__ */ jsx(LeinaBotSelect, {
|
|
35258
|
+
source: connectors,
|
|
35259
|
+
flowId: revision.revision.flowId,
|
|
35260
|
+
value: inputValue(mapping, definition.value),
|
|
35261
|
+
disabled,
|
|
35262
|
+
onChange: (value) => {
|
|
35263
|
+
store?.setInputValue(selection.id, definition.handle, value);
|
|
35264
|
+
}
|
|
35265
|
+
}, revision.revision.flowId) : void 0,
|
|
34722
35266
|
value: inputValue(mapping, definition.value),
|
|
34723
35267
|
onReset: definition.value !== void 0 && mapping != null ? () => void store?.resetInputs(selection.id, [definition.handle]) : void 0,
|
|
34724
35268
|
connected: mapping?.kind === "sources" && binding?.kind !== "variable",
|
|
@@ -34727,13 +35271,20 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34727
35271
|
});
|
|
34728
35272
|
const fields = /* @__PURE__ */ jsx(NodeInputs, {
|
|
34729
35273
|
readOnly,
|
|
34730
|
-
allowAddGroup: selection.kind
|
|
34731
|
-
title: t("inspector.ports.inputsTitle"),
|
|
35274
|
+
allowAddGroup: selection.kind === "task",
|
|
35275
|
+
title: t(selection.kind === "outputs" ? "inspector.ports.outputsTitle" : "inspector.ports.inputsTitle"),
|
|
35276
|
+
titleIcon: selection.kind === "outputs" ? "output" : "input",
|
|
34732
35277
|
entries,
|
|
35278
|
+
fieldLabels: connector?.action == "leina.send_notification" ? {
|
|
35279
|
+
leinaId: t("leina.robot"),
|
|
35280
|
+
message: t("leina.message")
|
|
35281
|
+
} : void 0,
|
|
34733
35282
|
onReset: () => {
|
|
34734
35283
|
return store?.resetInputs(selection.id, entries.flatMap((entry) => "group" in entry ? [] : [entry.definition.handle]));
|
|
34735
35284
|
},
|
|
34736
|
-
onDefinitions: selection.kind === "
|
|
35285
|
+
onDefinitions: selection.kind === "outputs" ? (outputDefinitions, deletion, values) => {
|
|
35286
|
+
store?.saveOutputsDefs(selection.id, outputDefinitions.filter((port) => "handle" in port), deletion, values);
|
|
35287
|
+
} : selection.kind === "task" && selection.definition != null && ("moduleId" in selection.node.task || isAgent) ? (inputs, deletion, values) => {
|
|
34737
35288
|
store?.saveTaskPorts(selection.id, {
|
|
34738
35289
|
inputs,
|
|
34739
35290
|
outputs: selection.definition.outputs
|
|
@@ -34773,7 +35324,7 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34773
35324
|
title: t("inspector.task.additionalInputs"),
|
|
34774
35325
|
allowAddGroup: false,
|
|
34775
35326
|
entries: (selection.node.additionalInputs ?? []).map((definition) => {
|
|
34776
|
-
const mapping = selection.node
|
|
35327
|
+
const mapping = revision.inputMappings(selection.node)[definition.handle];
|
|
34777
35328
|
const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
34778
35329
|
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
34779
35330
|
return {
|
|
@@ -34844,7 +35395,7 @@ function NodeInspector({ webhookDeployment, variables = {
|
|
|
34844
35395
|
}
|
|
34845
35396
|
})
|
|
34846
35397
|
}),
|
|
34847
|
-
!unconfiguredOpenApi && selection?.kind === "task" && selection.definition != null && /* @__PURE__ */ jsx("section", {
|
|
35398
|
+
!unconfiguredOpenApi && !unconfiguredWorkflow && selection?.kind === "task" && selection.definition != null && /* @__PURE__ */ jsx("section", {
|
|
34848
35399
|
className: "inspector-port-section",
|
|
34849
35400
|
children: /* @__PURE__ */ jsx(PortDefinitionEditor, {
|
|
34850
35401
|
readOnly,
|
|
@@ -37877,6 +38428,7 @@ function createNodeEntry(node, contentKey, canvasStore) {
|
|
|
37877
38428
|
const duplicateNode = (offset) => canvasStore.onDuplicate?.([node.id], offset);
|
|
37878
38429
|
const types = {
|
|
37879
38430
|
approval: NODE_TYPE.TaskNode,
|
|
38431
|
+
outputs: NODE_TYPE.TaskNode,
|
|
37880
38432
|
condition: NODE_TYPE.ConditionNode,
|
|
37881
38433
|
task: NODE_TYPE.TaskNode,
|
|
37882
38434
|
trigger: NODE_TYPE.TriggerNode,
|
|
@@ -37888,7 +38440,7 @@ function createNodeEntry(node, contentKey, canvasStore) {
|
|
|
37888
38440
|
onIgnore: (ignored) => canvasStore.ignoreNodes([node.id], ignored),
|
|
37889
38441
|
content$,
|
|
37890
38442
|
position: node.position,
|
|
37891
|
-
duplicateNode: node.kind === "trigger" && node.presentation?.kind === "manual" ? void 0 : duplicateNode
|
|
38443
|
+
duplicateNode: node.kind === "outputs" || node.kind === "trigger" && (node.presentation?.kind === "manual" || node.presentation?.kind === "start") ? void 0 : duplicateNode
|
|
37892
38444
|
});
|
|
37893
38445
|
return {
|
|
37894
38446
|
contentKey,
|
|
@@ -50611,7 +51163,7 @@ function CanvasNode({ nodeStore, problem, branches, compact = false, compactCont
|
|
|
50611
51163
|
const title = node.title;
|
|
50612
51164
|
const { values, summary, schedules, images, inline, hidden } = nodeCardContent(node);
|
|
50613
51165
|
const kind = node?.kind ?? "task";
|
|
50614
|
-
const triggerSource = node.kind == "trigger" ? node.presentation?.kind == "error" || node.presentation?.kind == "manual" || node.presentation?.kind == "cron" || node.presentation?.kind == "webhook" ? t(`canvasCard.triggerSource.${node.presentation.kind}`) : node.presentation?.source : void 0;
|
|
51166
|
+
const triggerSource = node.kind == "trigger" ? node.presentation?.kind == "error" || node.presentation?.kind == "manual" || node.presentation?.kind == "start" || node.presentation?.kind == "cron" || node.presentation?.kind == "webhook" ? t(`canvasCard.triggerSource.${node.presentation.kind}`) : node.presentation?.source : void 0;
|
|
50615
51167
|
const subtitle = inline ? summary : node.kind == "task" ? node.executorName || t("canvasCard.kind.task") : node.kind == "trigger" && triggerSource ? `${t("canvasCard.kind.trigger")} · ${triggerSource}` : t(`canvasCard.kind.${kind}`);
|
|
50616
51168
|
const runContent = node?.run == null || node.run.status == "idle" ? void 0 : /* @__PURE__ */ jsx(RunChips, { run: node.run });
|
|
50617
51169
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -51718,7 +52270,7 @@ var NodeLayout = /* @__PURE__ */ memo(({ canvasStore, nodeStore, visible }) => {
|
|
|
51718
52270
|
isConnectable: editable,
|
|
51719
52271
|
hintRequested
|
|
51720
52272
|
}),
|
|
51721
|
-
nodeStore.nodeType != NODE_TYPE.CommentNode && branches == null && /* @__PURE__ */ jsx(ExecutionHandle, {
|
|
52273
|
+
nodeStore.nodeType != NODE_TYPE.CommentNode && modelNode?.kind != "outputs" && branches == null && /* @__PURE__ */ jsx(ExecutionHandle, {
|
|
51722
52274
|
id: toRFHandleName("$out"),
|
|
51723
52275
|
type: "output",
|
|
51724
52276
|
isConnectable: editable,
|
|
@@ -53698,7 +54250,7 @@ var WorkbenchCanvas = forwardRef(function WorkbenchCanvas({ nodePicker, annotati
|
|
|
53698
54250
|
screenPosition: screenPosition(canvasPosition)
|
|
53699
54251
|
});
|
|
53700
54252
|
};
|
|
53701
|
-
const
|
|
54253
|
+
const startTrigger = staticOptions.get("trigger:start");
|
|
53702
54254
|
const needsTrigger = !model.nodes.some((node) => node.kind == "trigger");
|
|
53703
54255
|
const addRecommended = async (option) => {
|
|
53704
54256
|
if (addingRecommended.current) return;
|
|
@@ -53782,7 +54334,7 @@ var WorkbenchCanvas = forwardRef(function WorkbenchCanvas({ nodePicker, annotati
|
|
|
53782
54334
|
disabled,
|
|
53783
54335
|
onOpenNodePicker: openAddNode,
|
|
53784
54336
|
runControl,
|
|
53785
|
-
onAddTrigger: needsTrigger && model.nodes.length > 0 &&
|
|
54337
|
+
onAddTrigger: needsTrigger && model.nodes.length > 0 && startTrigger != null ? () => void addRecommended(startTrigger) : void 0
|
|
53786
54338
|
}),
|
|
53787
54339
|
onAddNode: async (itemId, position, connection) => {
|
|
53788
54340
|
const dragged = draggedNode.current.consume(itemId);
|
|
@@ -54728,52 +55280,6 @@ function PublicationsView({ store, onClose, theme = "light" }) {
|
|
|
54728
55280
|
});
|
|
54729
55281
|
}
|
|
54730
55282
|
//#endregion
|
|
54731
|
-
//#region src/workbench/browser/runtime/runs/errorHandling.tsx
|
|
54732
|
-
var RunLinkContext = createContext(void 0);
|
|
54733
|
-
function ErrorHandling({ run }) {
|
|
54734
|
-
const t = useTranslate();
|
|
54735
|
-
const hrefFor = useContext(RunLinkContext);
|
|
54736
|
-
if (run == null || !("waits" in run) || run.errorSource == null && run.errorDispatches == null) return null;
|
|
54737
|
-
const link = (flowId, runId, label) => hrefFor == null ? /* @__PURE__ */ jsxs("span", { children: [
|
|
54738
|
-
label,
|
|
54739
|
-
": ",
|
|
54740
|
-
runId
|
|
54741
|
-
] }) : /* @__PURE__ */ jsx("a", {
|
|
54742
|
-
className: "text-foreground underline underline-offset-2 hover:text-muted-foreground",
|
|
54743
|
-
href: hrefFor({
|
|
54744
|
-
flowId,
|
|
54745
|
-
runId,
|
|
54746
|
-
view: "runs"
|
|
54747
|
-
}),
|
|
54748
|
-
children: label
|
|
54749
|
-
});
|
|
54750
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
54751
|
-
className: "flex flex-col gap-1 px-4 py-2 text-sm",
|
|
54752
|
-
role: "status",
|
|
54753
|
-
children: [run.errorSource != null && link(run.errorSource.flowId, run.errorSource.runId, t("errorWorkflow.source")), run.errorDispatches?.map((dispatch) => /* @__PURE__ */ jsxs("div", { children: [
|
|
54754
|
-
dispatch.status == "pending" && /* @__PURE__ */ jsxs("span", {
|
|
54755
|
-
className: "text-muted-foreground",
|
|
54756
|
-
children: [
|
|
54757
|
-
t("errorWorkflow.pending"),
|
|
54758
|
-
": ",
|
|
54759
|
-
dispatch.flowId
|
|
54760
|
-
]
|
|
54761
|
-
}),
|
|
54762
|
-
dispatch.status == "dispatched" && link(dispatch.flowId, dispatch.runId, `${t("errorWorkflow.dispatched")}: ${dispatch.flowId}`),
|
|
54763
|
-
dispatch.status == "failed" && /* @__PURE__ */ jsxs("span", {
|
|
54764
|
-
className: "text-destructive",
|
|
54765
|
-
children: [
|
|
54766
|
-
t("errorWorkflow.failed"),
|
|
54767
|
-
" (",
|
|
54768
|
-
dispatch.flowId,
|
|
54769
|
-
"): ",
|
|
54770
|
-
dispatch.message
|
|
54771
|
-
]
|
|
54772
|
-
})
|
|
54773
|
-
] }, dispatch.flowId))]
|
|
54774
|
-
});
|
|
54775
|
-
}
|
|
54776
|
-
//#endregion
|
|
54777
55283
|
//#region src/workbench/browser/runtime/runs/runControl.tsx
|
|
54778
55284
|
function RunControl({ disabled, inputContent, inputOpen, inputStatus, onInputOpenChange, onRun, onSelectTrigger, selectedTriggerId, starting, title, triggers }) {
|
|
54779
55285
|
const t = useTranslate();
|
|
@@ -54968,6 +55474,51 @@ function AlertDescription({ className, ...props }) {
|
|
|
54968
55474
|
});
|
|
54969
55475
|
}
|
|
54970
55476
|
//#endregion
|
|
55477
|
+
//#region src/workbench/browser/runtime/runs/errorHandling.tsx
|
|
55478
|
+
function ErrorHandling({ run }) {
|
|
55479
|
+
const t = useTranslate();
|
|
55480
|
+
const hrefFor = useContext(WorkbenchLinkContext);
|
|
55481
|
+
if (run == null || !("waits" in run) || run.errorSource == null && run.errorDispatches == null) return null;
|
|
55482
|
+
const link = (flowId, runId, label) => hrefFor == null ? /* @__PURE__ */ jsxs("span", { children: [
|
|
55483
|
+
label,
|
|
55484
|
+
": ",
|
|
55485
|
+
runId
|
|
55486
|
+
] }) : /* @__PURE__ */ jsx("a", {
|
|
55487
|
+
className: "text-foreground underline underline-offset-2 hover:text-muted-foreground",
|
|
55488
|
+
href: hrefFor({
|
|
55489
|
+
flowId,
|
|
55490
|
+
runId,
|
|
55491
|
+
view: "runs"
|
|
55492
|
+
}),
|
|
55493
|
+
children: label
|
|
55494
|
+
});
|
|
55495
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55496
|
+
className: "flex flex-col gap-1 px-4 py-2 text-sm",
|
|
55497
|
+
role: "status",
|
|
55498
|
+
children: [run.errorSource != null && link(run.errorSource.flowId, run.errorSource.runId, t("errorWorkflow.source")), run.errorDispatches?.map((dispatch) => /* @__PURE__ */ jsxs("div", { children: [
|
|
55499
|
+
dispatch.status == "pending" && /* @__PURE__ */ jsxs("span", {
|
|
55500
|
+
className: "text-muted-foreground",
|
|
55501
|
+
children: [
|
|
55502
|
+
t("errorWorkflow.pending"),
|
|
55503
|
+
": ",
|
|
55504
|
+
dispatch.flowId
|
|
55505
|
+
]
|
|
55506
|
+
}),
|
|
55507
|
+
dispatch.status == "dispatched" && link(dispatch.flowId, dispatch.runId, `${t("errorWorkflow.dispatched")}: ${dispatch.flowId}`),
|
|
55508
|
+
dispatch.status == "failed" && /* @__PURE__ */ jsxs("span", {
|
|
55509
|
+
className: "text-destructive",
|
|
55510
|
+
children: [
|
|
55511
|
+
t("errorWorkflow.failed"),
|
|
55512
|
+
" (",
|
|
55513
|
+
dispatch.flowId,
|
|
55514
|
+
"): ",
|
|
55515
|
+
dispatch.message
|
|
55516
|
+
]
|
|
55517
|
+
})
|
|
55518
|
+
] }, dispatch.flowId))]
|
|
55519
|
+
});
|
|
55520
|
+
}
|
|
55521
|
+
//#endregion
|
|
54971
55522
|
//#region src/workbench/browser/runtime/runs/runGroups.ts
|
|
54972
55523
|
function groupEvents(events) {
|
|
54973
55524
|
const groups = [];
|
|
@@ -55614,6 +56165,48 @@ function RunResults({ client, runId, results }) {
|
|
|
55614
56165
|
});
|
|
55615
56166
|
}
|
|
55616
56167
|
//#endregion
|
|
56168
|
+
//#region src/workbench/browser/runtime/runs/workflowCalls.tsx
|
|
56169
|
+
function WorkflowCalls({ run }) {
|
|
56170
|
+
const t = useTranslate();
|
|
56171
|
+
const hrefFor = useContext(WorkbenchLinkContext);
|
|
56172
|
+
if (!("waits" in run)) return null;
|
|
56173
|
+
const link = (flowId, runId, label) => hrefFor == null ? /* @__PURE__ */ jsxs("span", { children: [
|
|
56174
|
+
label,
|
|
56175
|
+
": ",
|
|
56176
|
+
runId
|
|
56177
|
+
] }) : /* @__PURE__ */ jsx("a", {
|
|
56178
|
+
className: "text-foreground underline underline-offset-2 hover:text-muted-foreground",
|
|
56179
|
+
href: hrefFor({
|
|
56180
|
+
flowId,
|
|
56181
|
+
runId,
|
|
56182
|
+
view: "runs"
|
|
56183
|
+
}),
|
|
56184
|
+
children: label
|
|
56185
|
+
});
|
|
56186
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56187
|
+
className: "flex flex-col gap-2 px-4 py-2 text-sm",
|
|
56188
|
+
children: [run.caller != null && /* @__PURE__ */ jsxs("div", { children: [
|
|
56189
|
+
link(run.caller.flowId, run.caller.runId, t("workflow.parent")),
|
|
56190
|
+
" · ",
|
|
56191
|
+
run.caller.nodeId
|
|
56192
|
+
] }), run.calls?.map((call) => /* @__PURE__ */ jsxs("div", {
|
|
56193
|
+
className: "flex flex-wrap items-center gap-2",
|
|
56194
|
+
children: [
|
|
56195
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
56196
|
+
call.nodeId,
|
|
56197
|
+
" → ",
|
|
56198
|
+
call.flowId
|
|
56199
|
+
] }),
|
|
56200
|
+
/* @__PURE__ */ jsx("span", {
|
|
56201
|
+
className: "text-muted-foreground",
|
|
56202
|
+
children: call.status == null ? t("workflow.unavailable") : runLabel({ status: call.status }, t)
|
|
56203
|
+
}),
|
|
56204
|
+
link(call.flowId, call.runId, t("workflow.viewRun"))
|
|
56205
|
+
]
|
|
56206
|
+
}, call.executionId))]
|
|
56207
|
+
});
|
|
56208
|
+
}
|
|
56209
|
+
//#endregion
|
|
55617
56210
|
//#region src/workbench/browser/runtime/runs/runDrawer.tsx
|
|
55618
56211
|
var RunVirtualItem = forwardRef(function RunVirtualItem({ index, ...props }, ref) {
|
|
55619
56212
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -56409,6 +57002,7 @@ function RunDrawer({ resultClient, cancelDisabled, canceling, events, eventsExpi
|
|
|
56409
57002
|
className: "run-content",
|
|
56410
57003
|
children: [
|
|
56411
57004
|
/* @__PURE__ */ jsx(ErrorHandling, { run }),
|
|
57005
|
+
run != null && /* @__PURE__ */ jsx(WorkflowCalls, { run }),
|
|
56412
57006
|
run != null && /* @__PURE__ */ jsx(ActiveWait, {
|
|
56413
57007
|
onLocate: onLocateWait,
|
|
56414
57008
|
onResolve,
|
|
@@ -56577,7 +57171,7 @@ function Form({ onStarted, request, store, theme }) {
|
|
|
56577
57171
|
}),
|
|
56578
57172
|
request.editor && /* @__PURE__ */ jsxs("section", {
|
|
56579
57173
|
className: "run-input-group",
|
|
56580
|
-
children: [/* @__PURE__ */
|
|
57174
|
+
children: [/* @__PURE__ */ jsxs("header", { children: [/* @__PURE__ */ jsx("strong", { children: t(request.editor.allowOmittedNullable ? "inspector.ports.startParametersTitle" : "inspector.ports.outputsTitle") }), request.editor.allowOmittedNullable && /* @__PURE__ */ jsx("p", { children: t("runInput.startParametersHint") })] }), /* @__PURE__ */ jsx(FlowRunInputEditor, {
|
|
56581
57175
|
store: request.editor,
|
|
56582
57176
|
theme,
|
|
56583
57177
|
showErrors: request.attempted
|
|
@@ -57266,6 +57860,7 @@ function RunsView({ flowName, onClose, onConfigureConnector, onLocateEvent, onLo
|
|
|
57266
57860
|
]
|
|
57267
57861
|
}),
|
|
57268
57862
|
/* @__PURE__ */ jsx(ErrorHandling, { run }),
|
|
57863
|
+
/* @__PURE__ */ jsx(WorkflowCalls, { run }),
|
|
57269
57864
|
/* @__PURE__ */ jsx(ActiveWait, {
|
|
57270
57865
|
onLocate: onLocateWait,
|
|
57271
57866
|
onResolve: (waitId, action, comment) => void store.runs.resolve(waitId, action, comment),
|
|
@@ -57950,10 +58545,10 @@ function FlowEditor({ navigationIsland, onRun, onRunStarted, onCloseRuns, onConf
|
|
|
57950
58545
|
const checkLoading = useVal(store.workspace.$.checkLoading);
|
|
57951
58546
|
const history = useVal(store.workspace.history$);
|
|
57952
58547
|
const designer = useVal(store.$.designer);
|
|
58548
|
+
const draft = useVal(store.workspace.$.draft);
|
|
57953
58549
|
const triggers = designer.nodes.filter((node) => node.kind == "trigger");
|
|
57954
|
-
const selectedTrigger = triggers.find((node) => node.id == startId) ?? triggers[0];
|
|
58550
|
+
const selectedTrigger = triggers.find((node) => node.id == startId) ?? triggers.find((node) => node.presentation?.kind == "start") ?? triggers[0];
|
|
57955
58551
|
const diagnosticFocus = useVal(store.workspace.$.diagnosticFocus);
|
|
57956
|
-
const draft = useVal(store.workspace.$.draft);
|
|
57957
58552
|
const live = useVal(store.workspace.$.live);
|
|
57958
58553
|
const nodeFocus = useVal(store.workspace.$.nodeFocus);
|
|
57959
58554
|
const flowId = useVal(store.workspace.$.flowId);
|
|
@@ -58208,7 +58803,7 @@ function FlowEditor({ navigationIsland, onRun, onRunStarted, onCloseRuns, onConf
|
|
|
58208
58803
|
} : void 0,
|
|
58209
58804
|
nodeId: singleSelected ? selectedDesignerNode?.id : void 0,
|
|
58210
58805
|
nodeHeading: singleSelected && selection != null ? {
|
|
58211
|
-
titleReadOnly: selection.kind === "trigger" && selection.trigger.kind === "manual",
|
|
58806
|
+
titleReadOnly: selection.kind === "trigger" && (selection.trigger.kind === "manual" || selection.trigger.kind === "start"),
|
|
58212
58807
|
title: selection.node.name ?? selectedDesignerNode?.title ?? "",
|
|
58213
58808
|
icon: selectedDesignerNode != null && "icon" in selectedDesignerNode ? selectedDesignerNode.icon : void 0,
|
|
58214
58809
|
disabled: authoringDisabled,
|
|
@@ -58328,11 +58923,7 @@ function FlowWorkspace({ hrefFor, navigation, onConfigureConnector, onManageConn
|
|
|
58328
58923
|
store,
|
|
58329
58924
|
view
|
|
58330
58925
|
]);
|
|
58331
|
-
useEffect(() => store.runRequests.dismissInputs(), [
|
|
58332
|
-
draft?.revisionId,
|
|
58333
|
-
flowId,
|
|
58334
|
-
store
|
|
58335
|
-
]);
|
|
58926
|
+
useEffect(() => store.runRequests.dismissInputs(), [flowId, store]);
|
|
58336
58927
|
useEffect(() => {
|
|
58337
58928
|
if (submitting == null || !draftReady) return;
|
|
58338
58929
|
navigation.open("design");
|
|
@@ -58368,7 +58959,7 @@ function FlowWorkspace({ hrefFor, navigation, onConfigureConnector, onManageConn
|
|
|
58368
58959
|
flowsHref: hrefFor({ view: "design" }),
|
|
58369
58960
|
onOpenFlows: () => void navigation.openFlows()
|
|
58370
58961
|
});
|
|
58371
|
-
return /* @__PURE__ */ jsx(IconifyProvider, { children: /* @__PURE__ */ jsx(
|
|
58962
|
+
return /* @__PURE__ */ jsx(IconifyProvider, { children: /* @__PURE__ */ jsx(WorkbenchLinkContext.Provider, {
|
|
58372
58963
|
value: hrefFor,
|
|
58373
58964
|
children: /* @__PURE__ */ jsxs("main", {
|
|
58374
58965
|
className: "workspace",
|