@oomol-lab/open-flow 0.1.0-beta.50 → 0.1.0-beta.51

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.
Files changed (33) hide show
  1. package/dist/browser/{createResourceDialog-CSltk-qY.js → createResourceDialog-BDtXpRSt.js} +1 -1
  2. package/dist/browser/flow-authoring-node.d.ts +3 -1
  3. package/dist/browser/flow-authoring.js +39 -3
  4. package/dist/browser/flow-change-schema.d.ts +1 -1
  5. package/dist/browser/flow-change.d.ts +9 -1
  6. package/dist/browser/flow-change.js +38 -3
  7. package/dist/browser/{flowChanges-DbYrpHnS.js → flowChanges-BWSXSnMX.js} +431 -27
  8. package/dist/browser/{flowWorkspace-CjwpbVBR.js → flowWorkspace-DBaq2Eks.js} +459 -190
  9. package/dist/browser/preview.css +20 -0
  10. package/dist/browser/preview.js +556 -21
  11. package/dist/browser/ui.css +20 -0
  12. package/dist/browser/ui.js +4 -3
  13. package/dist/browser/workbench-contract.d.ts +1 -0
  14. package/dist/browser/workbench.css +20 -0
  15. package/dist/browser/workbench.js +133 -22
  16. package/dist/browser/{workbenchSelect-oVujN2z6.js → workbenchSelect-C9kwcUmN.js} +47 -6
  17. package/dist/common/authoringExamples.d.ts +3 -2
  18. package/dist/common/control-api-conformance.js +82 -10
  19. package/dist/common/control-api.d.ts +34 -5
  20. package/dist/common/control-api.js +147 -10
  21. package/dist/common/control-requests.js +23 -1
  22. package/dist/common/flow-encoding.js +30 -5
  23. package/dist/common/flow-semantics.js +87 -2
  24. package/dist/common/integration-trigger.js +16 -1
  25. package/dist/common/mcp.js +82 -10
  26. package/dist/common/poll-trigger.js +16 -1
  27. package/dist/common/provider-triggers.js +16 -1
  28. package/dist/common/run-events.js +25 -1
  29. package/dist/common/scheduler.d.ts +3 -0
  30. package/dist/common/scheduler.js +91 -5
  31. package/dist/common/trigger-contract.d.ts +2 -0
  32. package/dist/common/webhook-trigger.js +16 -1
  33. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import { i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
2
- import { $ as useIconifyCollectionLoader, $t as EmptyTitle, A as calendarDate, B as mapSource, Bn as IconThemeContext, Bt as NativeScrollArea, C as schemaForEditor, Cn as sourceOutputLabel, D as isUnconstrainedSchema, Dn as triggerConfigValues, E as getDefaultValue, En as triggerConfigValue, Ft as PopoverContent, G as resourceValue, Gt as InputGroup$1, Ht as VirtualScrollArea, I as indexAddNodeOptions, It as PopoverDescription, J as triggerNodeIcon, Jt as Empty, K as designerGraph, Kt as InputGroupAddon, L as feishuResourceKind, Lt as PopoverPanelContent, M as datePickerValue, Mt as followWorkbenchLink, N as isDateFormat, Nt as Switch, O as typeOfSchema, On as variableInputCompatible, Pt as Popover, Q as IconifyProvider, Qt as EmptyMedia, R as supportsFeishuChatFilter, Rn as controlErrorCode, Rt as PopoverTitle, S as editorGroups, Sn as resolutionOutputPorts, T as valueForEditor, Tn as isJsonObject, U as observeResource, Ut as Z$2, Vt as ScrollArea, W as resourceData, Wt as useTriggerFocusGuards, X as providerIcon, Xt as EmptyDescription, Y as actionSummary, Yt as EmptyContent, Z as ContentIcon, Zt as EmptyHeader, an as waitBranchDescription, bn as decodeResultList, cn as ru_default$1, ct as diagnosticMessage, dn as fr_default$1, et as useIconifyData, fn as en_default$1, ft as connectionCatalog, gn as errorNotice, hn as EventSourceSetup, in as uiLocales, it as revisionView, j as datePickerChange, jn as inputValue, jt as IdTooltip, k as calendarChange, ln as ko_default$1, lt as diagnosticNodeId, mn as FeishuEventPicker, n as agentTool, nn as SourceSelect, nt as canCancelRun, on as zh_TW_default$1, pn as I18n, q as semanticNodeIcon, qt as InputGroupInput, rn as createI18n$1, rt as hasRunFilter, sn as zh_CN_default$1, tn as SourceForm, un as ja_default$1, ut as schemaMismatchMessage, w as valueForDataType, wn as triggerOutputDefinitions, x as editorComponent, zn as Checkbox, zt as PopoverTrigger } from "./flowChanges-DbYrpHnS.js";
2
+ import { $ as useIconifyCollectionLoader, $t as EmptyTitle, A as calendarDate, B as mapSource, Bn as Checkbox, Bt as NativeScrollArea, C as schemaForEditor, Cn as sourceOutputLabel, D as isUnconstrainedSchema, Dn as triggerConfigValue, E as getDefaultValue, En as isJsonObject, Ft as PopoverContent, G as resourceValue, Gt as InputGroup$1, Ht as VirtualScrollArea, I as indexAddNodeOptions, It as PopoverDescription, J as triggerNodeIcon, Jt as Empty, K as designerGraph, Kt as InputGroupAddon, L as feishuResourceKind, Lt as PopoverPanelContent, M as datePickerValue, Mn as inputValue, Mt as followWorkbenchLink, N as isDateFormat, Nt as Switch, O as typeOfSchema, On as triggerConfigValues, Pt as Popover, Q as IconifyProvider, Qt as EmptyMedia, R as supportsFeishuChatFilter, Rt as PopoverTitle, S as editorGroups, Sn as resolutionOutputPorts, T as valueForEditor, Tn as triggerOutputDefinitions, U as observeResource, Ut as Z$2, Vn as IconThemeContext, Vt as ScrollArea, W as resourceData, Wt as useTriggerFocusGuards, X as providerIcon, Xt as EmptyDescription, Y as actionSummary, Yt as EmptyContent, Z as ContentIcon, Zt as EmptyHeader, an as waitBranchDescription, bn as decodeResultList, cn as ru_default$1, ct as diagnosticMessage, dn as fr_default$1, et as useIconifyData, fn as en_default$1, ft as connectionCatalog, gn as errorNotice, hn as EventSourceSetup, in as uiLocales, it as revisionView, j as datePickerChange, jt as IdTooltip, k as calendarChange, kn as variableInputCompatible, ln as ko_default$1, lt as diagnosticNodeId, mn as FeishuEventPicker, n as agentTool, nn as SourceSelect, nt as canCancelRun, on as zh_TW_default$1, pn as I18n, q as semanticNodeIcon, qt as InputGroupInput, rn as createI18n$1, rt as hasRunFilter, sn as zh_CN_default$1, tn as SourceForm, un as ja_default$1, ut as schemaMismatchMessage, w as valueForDataType, x as editorComponent, zn as controlErrorCode, zt as PopoverTrigger } from "./flowChanges-BWSXSnMX.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 { a as useVal, i as useTranslate, n as useI18n, r as useLang, t as I18nProvider } from "./main-BPABKzwN.js";
5
- import { $n as ownerDocument, $r as useStableCallback, $t as useHoverFloatingInteraction, An as useOnFirstRender, Ar as useId$1, At as isNativeInput, B as operatorsForType, Bn as findNonDisabledListIndex, Br as useRenderElement, Bt as CompositeList, C as FieldDescription, Cn as addEventListener, Ct as COMPOSITE_KEYS, Dn as require_with_selector, Dt as MODIFIER_KEYS, E as FieldLabel, En as fastComponentRef, Et as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, F as comparisonIssue, Fr as Button$1, Ft as getDisabledMountTransitionStyles, G as webhookMethods, Gn as getMinListIndex, Gr as useMergedRefs, Gt as triggerOpenStateMapping, H as unaryOperator, Hn as getGridCellIndices, Hr as EMPTY_OBJECT, Ht as getPseudoElementBounds, Ir as buttonVariants, It as InternalBackdrop, Jn as stopEvent$1, Jr as useCompositeRootContext, Jt as useTypeahead, K as webhookSupportsBody, Kn as isIndexOutOfListBounds, Kr as useButton, Kt as useOpenInteractionType, Lr as cn$1, Lt as useAnchorPositioning, Mn as Input$1, Mt as useToolbarRootContext, Nt as useAnchoredPopupScrollLock, On as require_builtin_esm_external_require_react, Ot as VERTICAL_KEYS, Pn as useTimeout, Pr as useControlled, Pt as usePositioner, Qn as isMac$1, Qr as SafeReact, Qt as useHoverReferenceInteraction, R as nodeInputMappings, Rr as cva, Rt as adaptiveOrigin, S as Field, Sn as FocusGuard, St as ARROW_UP, T as FieldGroup, Tn as fastComponent, Tt as HORIZONTAL_KEYS, U as valueType, Un as getGridNavigatedIndex, Ut as popupStateMapping, Vn as getGridCellIndexOfCorner, Vr as EMPTY_ARRAY$1, Vt as inertValue, W as decodeRevisionContent, Wn as getMaxListIndex, Wr as warn, Wt as pressableTriggerOpenStateMapping, Xn as contains, Xr as mergeProps, Xt as useListNavigation, Yn as activeElement, Yr as formatErrorMessage, Yt as useRole, Zn as getTarget, Zr as useIsoLayoutEffect, Zt as useInteractions, _ as TooltipPositioner, _n as FloatingTreeStore, _r as itemPress, _t as ALL_KEYS, a as DialogContent, an as useImplicitActiveTrigger, ar as useOpenChangeComplete, at as string, b as TooltipRoot, bn as DROPDOWN_COLLISION_AVOIDANCE, bt as ARROW_LEFT, cn as useTriggerRegistration, cr as transitionStatusMapping, ct as SelectChevron, d as Tooltip, dn as FloatingFocusManager, dr as createChangeEventDetails, dt as SelectItem, ei as useRefWithInit, en as useFocus$1, f as TooltipContent, fn as FloatingNode, fr as cancelOpen, ft as SelectSeparator, g as TooltipPopup, gn as useFloatingTree, gr as imperativeAction, gt as useCompositeListItem, h as TooltipArrow, hn as useFloatingParentNodeId, ht as Separator, in as PopupTriggerMap, ir as useTransitionStatus, j as nodeNameIssue, jn as Label, jt as scrollIntoViewIfNeeded, kn as createSelector, kr as useBaseUiId, kt as VERTICAL_KEYS_WITH_EXTRA_KEYS, l as DialogTitle, ln as useDismiss, lt as SelectContent, m as TooltipTrigger, mn as useFloatingNodeId, mt as SelectValue, n as Icon, ni as isHTMLElement, nn as createInitialPopupStoreState, nr as Check, o as DialogDescription, on as useOpenStateTransitions, or as useAnimationsFinished, p as TooltipProvider, pn as FloatingTree, pt as SelectTrigger, q as dequal, qn as isListIndexDisabled, qr as CompositeRootContext, qt as safePolygon, r as Dialog, ri as isLastTraversableNode, rn as popupStoreSelectors, rr as createLucideIcon, sn as useTriggerDataForwarding, sr as TransitionStatusDataAttributes, st as Select$1, t as WorkbenchSelect, ti as getParentNode, tn as useSyncedFloatingRootContext, tr as ChevronDown, u as DialogTrigger, un as useClick, ut as SelectGroup, v as TooltipPortal, vn as FloatingPortal, vt as ARROW_DOWN, w as FieldError, wn as ReactStore, wr as triggerPress, x as Spinner, xn as POPUP_COLLISION_AVOIDANCE, xr as siblingOpen, xt as ARROW_RIGHT, y as TooltipTrigger$1, yr as none$1, yt as ARROW_KEYS, z as operandHandle, zn as createGridCellMap, zr as clsx, zt as useDirection } from "./workbenchSelect-oVujN2z6.js";
5
+ import { $n as ownerDocument, $r as useStableCallback, $t as useHoverFloatingInteraction, An as useOnFirstRender, Ar as useId$1, At as isNativeInput, B as operatorsForType, Bn as findNonDisabledListIndex, Br as useRenderElement, Bt as CompositeList, C as FieldDescription, Cn as addEventListener, Ct as COMPOSITE_KEYS, Dn as require_with_selector, Dt as MODIFIER_KEYS, E as FieldLabel, En as fastComponentRef, Et as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, F as comparisonIssue, Fr as Button$1, Ft as getDisabledMountTransitionStyles, G as webhookMethods, Gn as getMinListIndex, Gr as useMergedRefs, Gt as triggerOpenStateMapping, H as unaryOperator, Hn as getGridCellIndices, Hr as EMPTY_OBJECT, Ht as getPseudoElementBounds, Ir as buttonVariants, It as InternalBackdrop, Jn as stopEvent$1, Jr as useCompositeRootContext, Jt as useTypeahead, K as webhookSupportsBody, Kn as isIndexOutOfListBounds, Kr as useButton, Kt as useOpenInteractionType, Lr as cn$1, Lt as useAnchorPositioning, Mn as Input$1, Mt as useToolbarRootContext, Nt as useAnchoredPopupScrollLock, On as require_builtin_esm_external_require_react, Ot as VERTICAL_KEYS, Pn as useTimeout, Pr as useControlled, Pt as usePositioner, Qn as isMac$1, Qr as SafeReact, Qt as useHoverReferenceInteraction, R as nodeInputMappings, Rr as cva, Rt as adaptiveOrigin, S as Field, Sn as FocusGuard, St as ARROW_UP, T as FieldGroup, Tn as fastComponent, Tt as HORIZONTAL_KEYS, U as valueType, Un as getGridNavigatedIndex, Ut as popupStateMapping, Vn as getGridCellIndexOfCorner, Vr as EMPTY_ARRAY$1, Vt as inertValue, W as decodeRevisionContent, Wn as getMaxListIndex, Wr as warn, Wt as pressableTriggerOpenStateMapping, Xn as contains, Xr as mergeProps, Xt as useListNavigation, Yn as activeElement, Yr as formatErrorMessage, Yt as useRole, Zn as getTarget, Zr as useIsoLayoutEffect, Zt as useInteractions, _ as TooltipPositioner, _n as FloatingTreeStore, _r as itemPress, _t as ALL_KEYS, a as DialogContent, an as useImplicitActiveTrigger, ar as useOpenChangeComplete, at as string, b as TooltipRoot, bn as DROPDOWN_COLLISION_AVOIDANCE, bt as ARROW_LEFT, cn as useTriggerRegistration, cr as transitionStatusMapping, ct as SelectChevron, d as Tooltip, dn as FloatingFocusManager, dr as createChangeEventDetails, dt as SelectItem, ei as useRefWithInit, en as useFocus$1, f as TooltipContent, fn as FloatingNode, fr as cancelOpen, ft as SelectSeparator, g as TooltipPopup, gn as useFloatingTree, gr as imperativeAction, gt as useCompositeListItem, h as TooltipArrow, hn as useFloatingParentNodeId, ht as Separator, in as PopupTriggerMap, ir as useTransitionStatus, j as nodeNameIssue, jn as Label, jt as scrollIntoViewIfNeeded, kn as createSelector, kr as useBaseUiId, kt as VERTICAL_KEYS_WITH_EXTRA_KEYS, l as DialogTitle, ln as useDismiss, lt as SelectContent, m as TooltipTrigger, mn as useFloatingNodeId, mt as SelectValue, n as Icon, ni as isHTMLElement, nn as createInitialPopupStoreState, nr as Check, o as DialogDescription, on as useOpenStateTransitions, or as useAnimationsFinished, p as TooltipProvider, pn as FloatingTree, pt as SelectTrigger, q as dequal, qn as isListIndexDisabled, qr as CompositeRootContext, qt as safePolygon, r as Dialog, ri as isLastTraversableNode, rn as popupStoreSelectors, rr as createLucideIcon, sn as useTriggerDataForwarding, sr as TransitionStatusDataAttributes, st as Select$1, t as WorkbenchSelect, ti as getParentNode, tn as useSyncedFloatingRootContext, tr as ChevronDown, u as DialogTrigger, un as useClick, ut as SelectGroup, v as TooltipPortal, vn as FloatingPortal, vt as ARROW_DOWN, w as FieldError, wn as ReactStore, wr as triggerPress, x as Spinner, xn as POPUP_COLLISION_AVOIDANCE, xr as siblingOpen, xt as ARROW_RIGHT, y as TooltipTrigger$1, yr as none$1, yt as ARROW_KEYS, z as operandHandle, zn as createGridCellMap, zr as clsx, zt as useDirection } from "./workbenchSelect-C9kwcUmN.js";
6
6
  import { i as isString, n as isBoolean, r as isPlainObject, t as isArray$1 } from "./dist-BDBTOgS5.js";
7
7
  import { a as renameObjectField, i as objectValue, l as resolveUiLanguage, n as isJsonValue, o as setObjectField, r as jsonDataTypes, s as valueType$1, t as initialValue } from "./value-DL_poNiC.js";
8
8
  import { n as compile, r as validate } from "./flowRunInputEditorStore-Dsxyfwae.js";
@@ -22821,7 +22821,7 @@ function EditableAgentSettingsProvider({ children, task, nodeId, store, connecto
22821
22821
  const definition = current?.kind == "task" ? current.definition : void 0;
22822
22822
  if (definition == null || !("executor" in definition) || !dequal(definition.executor, before)) return false;
22823
22823
  const decoded = decodeRevisionContent({
22824
- modelVersion: 4,
22824
+ modelVersion: 5,
22825
22825
  modules: {},
22826
22826
  document: {
22827
22827
  bindings: {},
@@ -23058,6 +23058,7 @@ function withDescriptions$1(ports, descriptionFor) {
23058
23058
  function presentBuiltInTriggerOutputs(trigger, t) {
23059
23059
  const ports = triggerOutputDefinitions(trigger);
23060
23060
  switch (trigger.kind) {
23061
+ case "error": return withDescriptions$1(ports, (handle) => t(`errorWorkflow.${handle}`));
23061
23062
  case "cron": return withDescriptions$1(ports, (handle) => handle === "scheduledAt" ? t("inspector.ports.builtIn.cron.scheduledAt") : void 0);
23062
23063
  case "webhook": return withDescriptions$1(ports, (handle) => {
23063
23064
  switch (handle) {
@@ -23079,6 +23080,7 @@ function presentedBuiltInOutputs(node, t) {
23079
23080
  switch (node.kind) {
23080
23081
  case "approval":
23081
23082
  case "wait": return presentResolutionOutputs(node, t);
23083
+ case "error":
23082
23084
  case "cron":
23083
23085
  case "webhook": return presentBuiltInTriggerOutputs(node, t);
23084
23086
  default: return;
@@ -25951,6 +25953,200 @@ function ConditionBranchesEditor({ value: configuration, disabled, readOnly, onC
25951
25953
  });
25952
25954
  }
25953
25955
  //#endregion
25956
+ //#region src/workbench/browser/runtime/editor/errorTriggerSources.tsx
25957
+ function ErrorTriggerSources({ flows, flowId, value, disabled = false, complete = true, footer, onChange }) {
25958
+ const t = useTranslate();
25959
+ const id = useId();
25960
+ const [query, setQuery] = useState("");
25961
+ const [open, setOpen] = useState(false);
25962
+ const [container, setContainer] = useState(null);
25963
+ const search = useRef(null);
25964
+ const eligible = flows.filter((flow) => flow.flowId != flowId && flow.status == "active" && flow.live != null);
25965
+ const candidates = [.../* @__PURE__ */ new Set([...eligible.map((flow) => flow.flowId), ...value])].map((sourceId) => {
25966
+ const flow = flows.find((item) => item.flowId == sourceId);
25967
+ const issue = sourceId == flowId ? "self" : flow?.status == "retiring" ? "retiring" : flow == null ? complete ? "deleted" : void 0 : flow.live == null ? "unpublished" : void 0;
25968
+ return {
25969
+ id: sourceId,
25970
+ name: flow?.name ?? (issue == "deleted" ? t("errorWorkflow.deletedName") : sourceId),
25971
+ issue
25972
+ };
25973
+ });
25974
+ const visible = candidates.filter((flow) => `${flow.name} ${flow.id}`.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
25975
+ const selected = candidates.filter((flow) => value.includes(flow.id));
25976
+ const summary = selected.map((flow) => flow.name).join(", ");
25977
+ const unavailable = selected.filter((flow) => flow.issue);
25978
+ return /* @__PURE__ */ jsxs(Field, {
25979
+ className: "inspector-field-section",
25980
+ children: [/* @__PURE__ */ jsx(FieldLabel, {
25981
+ className: "inspector-section-title",
25982
+ htmlFor: id,
25983
+ children: t("errorWorkflow.sources")
25984
+ }), /* @__PURE__ */ jsxs("div", {
25985
+ className: "flex flex-col gap-3",
25986
+ children: [
25987
+ /* @__PURE__ */ jsx("div", {
25988
+ ref: setContainer,
25989
+ className: "min-w-0",
25990
+ children: /* @__PURE__ */ jsxs(Popover, {
25991
+ open,
25992
+ onOpenChange: (next) => {
25993
+ setOpen(next);
25994
+ if (!next) setQuery("");
25995
+ },
25996
+ children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
25997
+ render: /* @__PURE__ */ jsx(Button$1, {
25998
+ id,
25999
+ type: "button",
26000
+ variant: "field",
26001
+ size: "field",
26002
+ disabled,
26003
+ "aria-label": `${t("errorWorkflow.sources")}: ${summary || t("errorWorkflow.choose")}`,
26004
+ "aria-describedby": `${id}-hint${unavailable.length > 0 ? ` ${id}-error` : ""}`,
26005
+ "aria-invalid": unavailable.length > 0 || void 0,
26006
+ className: "w-full min-w-0 justify-between"
26007
+ }),
26008
+ children: [/* @__PURE__ */ jsx("span", {
26009
+ className: `min-w-0 flex-1 truncate text-left ${value.length == 0 ? "text-muted-foreground" : ""}`,
26010
+ title: summary || void 0,
26011
+ children: summary || t("errorWorkflow.choose")
26012
+ }), /* @__PURE__ */ jsx(SelectChevron, {})]
26013
+ }), /* @__PURE__ */ jsxs(PopoverContent, {
26014
+ container,
26015
+ align: "start",
26016
+ initialFocus: search,
26017
+ "aria-label": t("errorWorkflow.sources"),
26018
+ className: `w-(--anchor-width) min-w-56 max-w-[calc(100vw-24px)] gap-1 ${selectionMenuContentClass}`,
26019
+ children: [
26020
+ /* @__PURE__ */ jsx("div", {
26021
+ className: "p-1",
26022
+ children: /* @__PURE__ */ jsx(Input$1, {
26023
+ ref: search,
26024
+ "aria-label": t("errorWorkflow.search"),
26025
+ placeholder: t("errorWorkflow.search"),
26026
+ value: query,
26027
+ onChange: (event) => setQuery(event.target.value)
26028
+ })
26029
+ }),
26030
+ /* @__PURE__ */ jsxs("div", {
26031
+ role: "group",
26032
+ "aria-label": t("errorWorkflow.sources"),
26033
+ className: "max-h-[min(40vh,280px)] overflow-y-auto overscroll-contain",
26034
+ children: [visible.map((flow) => /* @__PURE__ */ jsxs(Label, {
26035
+ className: `flex cursor-default items-center gap-2 px-2 hover:bg-accent focus-within:bg-accent ${selectionMenuItemClass}`,
26036
+ children: [/* @__PURE__ */ jsx(Checkbox, {
26037
+ checked: value.includes(flow.id),
26038
+ disabled,
26039
+ onCheckedChange: (checked) => onChange(checked ? [...value, flow.id] : value.filter((item) => item != flow.id))
26040
+ }), /* @__PURE__ */ jsxs("span", {
26041
+ className: "min-w-0 flex-1 break-words",
26042
+ children: [
26043
+ flow.name,
26044
+ flow.issue == "deleted" && /* @__PURE__ */ jsx("span", {
26045
+ className: "block break-all text-muted-foreground",
26046
+ children: flow.id
26047
+ }),
26048
+ flow.issue && /* @__PURE__ */ jsx("span", {
26049
+ className: "block text-destructive",
26050
+ children: t(`errorWorkflow.${flow.issue}`)
26051
+ })
26052
+ ]
26053
+ })]
26054
+ }, flow.id)), visible.length == 0 && /* @__PURE__ */ jsx("p", {
26055
+ className: "px-2 py-3 text-xs text-muted-foreground",
26056
+ children: t(query ? "errorWorkflow.noMatches" : "errorWorkflow.empty")
26057
+ })]
26058
+ }),
26059
+ footer,
26060
+ /* @__PURE__ */ jsx("div", {
26061
+ role: "separator",
26062
+ className: "mx-2 my-1 h-px bg-border/50"
26063
+ }),
26064
+ /* @__PURE__ */ jsxs("div", {
26065
+ className: "flex items-center justify-between gap-2 px-1 pb-1",
26066
+ children: [/* @__PURE__ */ jsx(Button$1, {
26067
+ variant: "ghost",
26068
+ size: "sm",
26069
+ disabled: disabled || value.length == 0,
26070
+ onClick: () => onChange([]),
26071
+ children: t("errorWorkflow.clear")
26072
+ }), /* @__PURE__ */ jsx(Button$1, {
26073
+ variant: "ghost",
26074
+ size: "sm",
26075
+ onClick: () => {
26076
+ setOpen(false);
26077
+ setQuery("");
26078
+ },
26079
+ children: t("errorWorkflow.done")
26080
+ })]
26081
+ })
26082
+ ]
26083
+ })]
26084
+ })
26085
+ }),
26086
+ /* @__PURE__ */ jsx(FieldDescription, {
26087
+ id: `${id}-hint`,
26088
+ children: t("errorWorkflow.setupHint")
26089
+ }),
26090
+ unavailable.length > 0 && /* @__PURE__ */ jsxs("div", {
26091
+ className: "flex flex-col items-start gap-2",
26092
+ children: [/* @__PURE__ */ jsxs(FieldError, {
26093
+ id: `${id}-error`,
26094
+ children: [/* @__PURE__ */ jsx("ul", { children: unavailable.map((flow) => /* @__PURE__ */ jsxs("li", { children: [
26095
+ flow.name,
26096
+ " · ",
26097
+ t(`errorWorkflow.${flow.issue}`)
26098
+ ] }, flow.id)) }), /* @__PURE__ */ jsx("p", { children: t("errorWorkflow.removeHint") })]
26099
+ }), !disabled && /* @__PURE__ */ jsx(Button$1, {
26100
+ variant: "outline",
26101
+ size: "sm",
26102
+ onClick: () => onChange(value.filter((sourceId) => !unavailable.some((flow) => flow.id == sourceId))),
26103
+ children: t("errorWorkflow.removeUnavailable")
26104
+ })]
26105
+ })
26106
+ ]
26107
+ })]
26108
+ });
26109
+ }
26110
+ function ErrorTriggerSourcesEditor({ store, nodeId, value, disabled }) {
26111
+ const t = useTranslate();
26112
+ const draft = useVal(store.$.draft);
26113
+ const flows = useVal(store.$.flows);
26114
+ const loading = useVal(store.$.flowLoading);
26115
+ const failed = useVal(store.$.flowLoadFailed);
26116
+ const more = useVal(store.$.flowNextCursor);
26117
+ const loadingMore = useVal(store.$.flowLoadingMore);
26118
+ const moreFailed = useVal(store.$.flowLoadMoreFailed);
26119
+ useEffect(() => {
26120
+ store.reloadFlows();
26121
+ }, [store]);
26122
+ return /* @__PURE__ */ jsx("div", {
26123
+ className: "flex flex-col gap-3",
26124
+ "aria-busy": loading || loadingMore,
26125
+ children: /* @__PURE__ */ jsx(ErrorTriggerSources, {
26126
+ flows,
26127
+ flowId: draft?.flowId ?? "",
26128
+ value,
26129
+ disabled: disabled || loading,
26130
+ complete: !loading && !failed && more == null,
26131
+ footer: /* @__PURE__ */ jsxs(Fragment$1, { children: [failed && /* @__PURE__ */ jsx(Button$1, {
26132
+ variant: "outline",
26133
+ size: "sm",
26134
+ onClick: () => void store.reloadFlows(),
26135
+ children: t("errorWorkflow.retry")
26136
+ }), more != null && /* @__PURE__ */ jsx(Button$1, {
26137
+ variant: "outline",
26138
+ size: "sm",
26139
+ disabled: loadingMore,
26140
+ onClick: () => void store.loadMoreFlows(),
26141
+ children: t(moreFailed ? "errorWorkflow.retry" : "errorWorkflow.more")
26142
+ })] }),
26143
+ onChange: (next) => {
26144
+ store.saveErrorSources(nodeId, next);
26145
+ }
26146
+ })
26147
+ });
26148
+ }
26149
+ //#endregion
25954
26150
  //#region src/workbench/browser/runtime/createEventSourceDialog.tsx
25955
26151
  function CreateEventSourceDialog({ client, teamId, existingNames, disabled, defaultOpen = false, className, trigger, onSelect, onCreated }) {
25956
26152
  const t = useTranslate();
@@ -32628,6 +32824,19 @@ function NodeInspector({ variables = {
32628
32824
  store?.saveTriggerConfig(selection.id, name, value);
32629
32825
  }
32630
32826
  }, `config:${selection.id}`)),
32827
+ selection?.kind === "trigger" && selection.trigger.kind === "error" && /* @__PURE__ */ jsx(Fragment$1, { children: store == null ? /* @__PURE__ */ jsx(ErrorTriggerSources, {
32828
+ flows: [],
32829
+ flowId: revision.revision.flowId,
32830
+ value: selection.trigger.sourceFlowIds ?? [],
32831
+ disabled: true,
32832
+ complete: false,
32833
+ onChange: () => {}
32834
+ }) : /* @__PURE__ */ jsx(ErrorTriggerSourcesEditor, {
32835
+ store,
32836
+ nodeId: selection.id,
32837
+ value: selection.trigger.sourceFlowIds ?? [],
32838
+ disabled
32839
+ }) }),
32631
32840
  selection?.kind === "trigger" && selection.trigger.kind !== "webhook" && /* @__PURE__ */ jsx(TriggerSummary, {
32632
32841
  trigger: selection.trigger,
32633
32842
  display: selection.trigger.kind == "integration" || selection.trigger.kind == "poll" ? triggerDisplays?.[selection.trigger.definition.key] : void 0
@@ -48469,7 +48678,7 @@ function CanvasNode({ nodeStore, problem, branches, compact = false, compactCont
48469
48678
  const title = node.title;
48470
48679
  const { values, summary, schedules, images, inline, hidden } = nodeCardContent(node);
48471
48680
  const kind = node?.kind ?? "task";
48472
- const triggerSource = node.kind == "trigger" ? node.presentation?.kind == "manual" || node.presentation?.kind == "cron" || node.presentation?.kind == "webhook" ? t(`canvasCard.triggerSource.${node.presentation.kind}`) : node.presentation?.source : void 0;
48681
+ 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;
48473
48682
  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}`);
48474
48683
  const runContent = node?.run == null || node.run.status == "idle" ? void 0 : /* @__PURE__ */ jsx(RunChips, { run: node.run });
48475
48684
  return /* @__PURE__ */ jsx("div", {
@@ -52640,6 +52849,52 @@ function PublicationsView({ store, onClose, theme = "light" }) {
52640
52849
  });
52641
52850
  }
52642
52851
  //#endregion
52852
+ //#region src/workbench/browser/runtime/runs/errorHandling.tsx
52853
+ var RunLinkContext = createContext(void 0);
52854
+ function ErrorHandling({ run }) {
52855
+ const t = useTranslate();
52856
+ const hrefFor = useContext(RunLinkContext);
52857
+ if (run == null || !("waits" in run) || run.errorSource == null && run.errorDispatches == null) return null;
52858
+ const link = (flowId, runId, label) => hrefFor == null ? /* @__PURE__ */ jsxs("span", { children: [
52859
+ label,
52860
+ ": ",
52861
+ runId
52862
+ ] }) : /* @__PURE__ */ jsx("a", {
52863
+ className: "text-foreground underline underline-offset-2 hover:text-muted-foreground",
52864
+ href: hrefFor({
52865
+ flowId,
52866
+ runId,
52867
+ view: "runs"
52868
+ }),
52869
+ children: label
52870
+ });
52871
+ return /* @__PURE__ */ jsxs("div", {
52872
+ className: "flex flex-col gap-1 px-4 py-2 text-sm",
52873
+ role: "status",
52874
+ children: [run.errorSource != null && link(run.errorSource.flowId, run.errorSource.runId, t("errorWorkflow.source")), run.errorDispatches?.map((dispatch) => /* @__PURE__ */ jsxs("div", { children: [
52875
+ dispatch.status == "pending" && /* @__PURE__ */ jsxs("span", {
52876
+ className: "text-muted-foreground",
52877
+ children: [
52878
+ t("errorWorkflow.pending"),
52879
+ ": ",
52880
+ dispatch.flowId
52881
+ ]
52882
+ }),
52883
+ dispatch.status == "dispatched" && link(dispatch.flowId, dispatch.runId, `${t("errorWorkflow.dispatched")}: ${dispatch.flowId}`),
52884
+ dispatch.status == "failed" && /* @__PURE__ */ jsxs("span", {
52885
+ className: "text-destructive",
52886
+ children: [
52887
+ t("errorWorkflow.failed"),
52888
+ " (",
52889
+ dispatch.flowId,
52890
+ "): ",
52891
+ dispatch.message
52892
+ ]
52893
+ })
52894
+ ] }, dispatch.flowId))]
52895
+ });
52896
+ }
52897
+ //#endregion
52643
52898
  //#region src/workbench/browser/runtime/runs/runControl.tsx
52644
52899
  function RunControl({ disabled, inputContent, inputOpen, inputStatus, onInputOpenChange, onRun, onSelectTrigger, selectedTriggerId, starting, title, triggers }) {
52645
52900
  const t = useTranslate();
@@ -54273,26 +54528,30 @@ function RunDrawer({ resultClient, cancelDisabled, canceling, events, eventsExpi
54273
54528
  }),
54274
54529
  /* @__PURE__ */ jsxs("div", {
54275
54530
  className: "run-content",
54276
- children: [run != null && /* @__PURE__ */ jsx(ActiveWait, {
54277
- onLocate: onLocateWait,
54278
- onResolve,
54279
- resolvingActions,
54280
- run
54281
- }), /* @__PURE__ */ jsx(RunLog, {
54282
- presentation,
54283
- resultClient,
54284
- events,
54285
- eventsExpiresAt,
54286
- eventNodes,
54287
- historyComplete,
54288
- observationFailed,
54289
- onConfigureConnector,
54290
- onLocateEvent,
54291
- onRetryObservation,
54292
- result,
54293
- run,
54294
- submitting
54295
- })]
54531
+ children: [
54532
+ /* @__PURE__ */ jsx(ErrorHandling, { run }),
54533
+ run != null && /* @__PURE__ */ jsx(ActiveWait, {
54534
+ onLocate: onLocateWait,
54535
+ onResolve,
54536
+ resolvingActions,
54537
+ run
54538
+ }),
54539
+ /* @__PURE__ */ jsx(RunLog, {
54540
+ presentation,
54541
+ resultClient,
54542
+ events,
54543
+ eventsExpiresAt,
54544
+ eventNodes,
54545
+ historyComplete,
54546
+ observationFailed,
54547
+ onConfigureConnector,
54548
+ onLocateEvent,
54549
+ onRetryObservation,
54550
+ result,
54551
+ run,
54552
+ submitting
54553
+ })
54554
+ ]
54296
54555
  })
54297
54556
  ]
54298
54557
  });
@@ -55029,116 +55288,120 @@ function RunsView({ flowName, onClose, onConfigureConnector, onLocateEvent, onLo
55029
55288
  variant: "outline",
55030
55289
  children: t("run.filterClear")
55031
55290
  })]
55032
- }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("header", {
55033
- className: "run-detail-header",
55034
- children: [
55035
- /* @__PURE__ */ jsxs("div", {
55036
- className: "run-detail-summary",
55037
- children: [narrow && /* @__PURE__ */ jsxs("div", {
55038
- className: "flex min-w-0 items-center gap-2",
55039
- children: [/* @__PURE__ */ jsx(RunTooltipButton, {
55040
- "aria-label": t("run.history"),
55041
- onClick: closeNarrowDetail,
55042
- size: "icon-sm",
55043
- variant: "ghost",
55044
- children: /* @__PURE__ */ jsx("i", {
55045
- "aria-hidden": "true",
55046
- className: "i-lucide-light:list size-4"
55047
- })
55048
- }), /* @__PURE__ */ jsx("span", {
55049
- className: "truncate text-xs text-muted-foreground",
55050
- title: flowName,
55051
- children: flowName
55291
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", { children: [
55292
+ /* @__PURE__ */ jsxs("header", {
55293
+ className: "run-detail-header",
55294
+ children: [
55295
+ /* @__PURE__ */ jsxs("div", {
55296
+ className: "run-detail-summary",
55297
+ children: [narrow && /* @__PURE__ */ jsxs("div", {
55298
+ className: "flex min-w-0 items-center gap-2",
55299
+ children: [/* @__PURE__ */ jsx(RunTooltipButton, {
55300
+ "aria-label": t("run.history"),
55301
+ onClick: closeNarrowDetail,
55302
+ size: "icon-sm",
55303
+ variant: "ghost",
55304
+ children: /* @__PURE__ */ jsx("i", {
55305
+ "aria-hidden": "true",
55306
+ className: "i-lucide-light:list size-4"
55307
+ })
55308
+ }), /* @__PURE__ */ jsx("span", {
55309
+ className: "truncate text-xs text-muted-foreground",
55310
+ title: flowName,
55311
+ children: flowName
55312
+ })]
55313
+ }), /* @__PURE__ */ jsxs("div", {
55314
+ className: "flex min-h-7 flex-wrap items-center gap-2",
55315
+ children: [
55316
+ /* @__PURE__ */ jsx("span", { className: `status-dot ${statusClass(run)}` }),
55317
+ /* @__PURE__ */ jsx("strong", { children: runLabel(run, t) }),
55318
+ /* @__PURE__ */ jsx(Badge, {
55319
+ variant: "secondary",
55320
+ children: sourceLabel(run, t)
55321
+ })
55322
+ ]
55052
55323
  })]
55053
- }), /* @__PURE__ */ jsxs("div", {
55054
- className: "flex min-h-7 flex-wrap items-center gap-2",
55324
+ }),
55325
+ /* @__PURE__ */ jsxs("div", {
55326
+ className: "run-detail-actions pr-9",
55327
+ children: [/* @__PURE__ */ jsx(RunLogButton, {
55328
+ events,
55329
+ eventsExpiresAt,
55330
+ historyComplete,
55331
+ run
55332
+ }), canCancelRun(run) && /* @__PURE__ */ jsx(Button$1, {
55333
+ disabled: cancelingRunId != null,
55334
+ onClick: () => void store.runs.cancel(),
55335
+ size: "sm",
55336
+ variant: "destructive",
55337
+ children: t(cancelingRunId == run.runId ? "run.canceling" : "run.cancel")
55338
+ })]
55339
+ }),
55340
+ /* @__PURE__ */ jsxs("div", {
55341
+ className: "run-detail-meta",
55055
55342
  children: [
55056
- /* @__PURE__ */ jsx("span", { className: `status-dot ${statusClass(run)}` }),
55057
- /* @__PURE__ */ jsx("strong", { children: runLabel(run, t) }),
55058
- /* @__PURE__ */ jsx(Badge, {
55059
- variant: "secondary",
55060
- children: sourceLabel(run, t)
55061
- })
55062
- ]
55063
- })]
55064
- }),
55065
- /* @__PURE__ */ jsxs("div", {
55066
- className: "run-detail-actions pr-9",
55067
- children: [/* @__PURE__ */ jsx(RunLogButton, {
55068
- events,
55069
- eventsExpiresAt,
55070
- historyComplete,
55071
- run
55072
- }), canCancelRun(run) && /* @__PURE__ */ jsx(Button$1, {
55073
- disabled: cancelingRunId != null,
55074
- onClick: () => void store.runs.cancel(),
55075
- size: "sm",
55076
- variant: "destructive",
55077
- children: t(cancelingRunId == run.runId ? "run.canceling" : "run.cancel")
55078
- })]
55079
- }),
55080
- /* @__PURE__ */ jsxs("div", {
55081
- className: "run-detail-meta",
55082
- children: [
55083
- /* @__PURE__ */ jsx("time", {
55084
- dateTime: run.createdAt,
55085
- children: new Date(run.createdAt).toLocaleString(language, {
55086
- year: "numeric",
55087
- month: "short",
55088
- day: "numeric",
55089
- hour: "2-digit",
55090
- minute: "2-digit"
55091
- })
55092
- }),
55093
- /* @__PURE__ */ jsxs("span", { children: [
55094
- t("run.duration"),
55095
- ": ",
55096
- duration(run)
55097
- ] }),
55098
- /* @__PURE__ */ jsx(IdTooltip, {
55099
- value: run.runId,
55100
- label: t("run.runId", { id: shortRunId(run.runId) }),
55101
- trigger: /* @__PURE__ */ jsx("span", {
55102
- className: "cursor-help text-xs",
55103
- tabIndex: 0
55343
+ /* @__PURE__ */ jsx("time", {
55344
+ dateTime: run.createdAt,
55345
+ children: new Date(run.createdAt).toLocaleString(language, {
55346
+ year: "numeric",
55347
+ month: "short",
55348
+ day: "numeric",
55349
+ hour: "2-digit",
55350
+ minute: "2-digit"
55351
+ })
55104
55352
  }),
55105
- container: root.current,
55106
- children: triggerRun != null && /* @__PURE__ */ jsxs(Fragment$1, { children: [
55107
- /* @__PURE__ */ jsxs("span", {
55108
- className: "break-all",
55109
- children: [
55110
- t("run.triggerNode"),
55111
- ": ",
55112
- triggerName ?? triggerRun.triggerNodeId
55113
- ]
55114
- }),
55115
- /* @__PURE__ */ jsxs("span", {
55116
- className: "break-all",
55117
- children: [
55118
- t("run.triggerOccurrence"),
55119
- ": ",
55120
- triggerRun.occurrenceId
55121
- ]
55353
+ /* @__PURE__ */ jsxs("span", { children: [
55354
+ t("run.duration"),
55355
+ ": ",
55356
+ duration(run)
55357
+ ] }),
55358
+ /* @__PURE__ */ jsx(IdTooltip, {
55359
+ value: run.runId,
55360
+ label: t("run.runId", { id: shortRunId(run.runId) }),
55361
+ trigger: /* @__PURE__ */ jsx("span", {
55362
+ className: "cursor-help text-xs",
55363
+ tabIndex: 0
55122
55364
  }),
55123
- /* @__PURE__ */ jsxs("span", {
55124
- className: "break-all",
55125
- children: [
55126
- t("run.triggerPublication"),
55127
- ": ",
55128
- triggerRun.publicationId
55129
- ]
55130
- })
55131
- ] })
55132
- }, run.runId)
55133
- ]
55134
- })
55135
- ]
55136
- }), /* @__PURE__ */ jsx(ActiveWait, {
55137
- onLocate: onLocateWait,
55138
- onResolve: (waitId, action, comment) => void store.runs.resolve(waitId, action, comment),
55139
- resolvingActions,
55140
- run
55141
- })] }), /* @__PURE__ */ jsxs("div", {
55365
+ container: root.current,
55366
+ children: triggerRun != null && /* @__PURE__ */ jsxs(Fragment$1, { children: [
55367
+ /* @__PURE__ */ jsxs("span", {
55368
+ className: "break-all",
55369
+ children: [
55370
+ t("run.triggerNode"),
55371
+ ": ",
55372
+ triggerName ?? triggerRun.triggerNodeId
55373
+ ]
55374
+ }),
55375
+ /* @__PURE__ */ jsxs("span", {
55376
+ className: "break-all",
55377
+ children: [
55378
+ t("run.triggerOccurrence"),
55379
+ ": ",
55380
+ triggerRun.occurrenceId
55381
+ ]
55382
+ }),
55383
+ /* @__PURE__ */ jsxs("span", {
55384
+ className: "break-all",
55385
+ children: [
55386
+ t("run.triggerPublication"),
55387
+ ": ",
55388
+ triggerRun.publicationId
55389
+ ]
55390
+ })
55391
+ ] })
55392
+ }, run.runId)
55393
+ ]
55394
+ })
55395
+ ]
55396
+ }),
55397
+ /* @__PURE__ */ jsx(ErrorHandling, { run }),
55398
+ /* @__PURE__ */ jsx(ActiveWait, {
55399
+ onLocate: onLocateWait,
55400
+ onResolve: (waitId, action, comment) => void store.runs.resolve(waitId, action, comment),
55401
+ resolvingActions,
55402
+ run
55403
+ })
55404
+ ] }), /* @__PURE__ */ jsxs("div", {
55142
55405
  className: "run-history-content",
55143
55406
  children: [/* @__PURE__ */ jsxs("div", {
55144
55407
  className: "run-toolbar",
@@ -56155,7 +56418,10 @@ function FlowWorkspace({ hrefFor, navigation, onConfigureConnector, onManageConn
56155
56418
  const draftReady = draft != null;
56156
56419
  const canvasReady = draftReady && !workspaceLoading;
56157
56420
  useEffect(() => {
56158
- if (view == "runs" && flowId != null) store.runs.load(flowId, { source: navigation.runSource });
56421
+ if (view == "runs" && flowId != null) store.runs.load(flowId, {
56422
+ source: navigation.runSource,
56423
+ runId: navigation.runId
56424
+ });
56159
56425
  }, [
56160
56426
  flowId,
56161
56427
  navigation,
@@ -56209,66 +56475,69 @@ function FlowWorkspace({ hrefFor, navigation, onConfigureConnector, onManageConn
56209
56475
  flowsHref: hrefFor({ view: "design" }),
56210
56476
  onOpenFlows: () => void navigation.openFlows()
56211
56477
  });
56212
- return /* @__PURE__ */ jsx(IconifyProvider, { children: /* @__PURE__ */ jsxs("main", {
56213
- className: "workspace",
56214
- children: [view == "design" && !canvasReady && /* @__PURE__ */ jsx("div", {
56215
- className: "workspace-navigation-placement",
56216
- children: navigationIsland
56217
- }), view == "design" && !canvasReady ? /* @__PURE__ */ jsx("div", {
56218
- "aria-label": t("workspace.design"),
56219
- className: "editor-grid context-panel-closed",
56220
- id: "workspace-panel-design",
56221
- role: "region",
56222
- tabIndex: 0,
56223
- children: /* @__PURE__ */ jsx("section", {
56224
- "aria-busy": !workspaceLoadFailed,
56225
- className: "canvas-panel workbench-canvas",
56226
- children: workspaceLoadFailed ? /* @__PURE__ */ jsx(WorkspaceRecovery, {
56227
- kind: workspaceLoadProblem?.kind ?? "failed",
56228
- message: workspaceLoadProblem?.message,
56229
- repairing: workspaceRepairing,
56230
- onRepair: () => void store.workspace.repairWorkspace(),
56231
- onRetry: () => flowId != null && void store.selectFlow(flowId)
56232
- }) : /* @__PURE__ */ jsx(Empty, {
56233
- className: "h-full",
56234
- children: /* @__PURE__ */ jsx(EmptyHeader, { children: /* @__PURE__ */ jsx(EmptyTitle, { children: t("workspace.status.loading") }) })
56478
+ return /* @__PURE__ */ jsx(IconifyProvider, { children: /* @__PURE__ */ jsx(RunLinkContext.Provider, {
56479
+ value: hrefFor,
56480
+ children: /* @__PURE__ */ jsxs("main", {
56481
+ className: "workspace",
56482
+ children: [view == "design" && !canvasReady && /* @__PURE__ */ jsx("div", {
56483
+ className: "workspace-navigation-placement",
56484
+ children: navigationIsland
56485
+ }), view == "design" && !canvasReady ? /* @__PURE__ */ jsx("div", {
56486
+ "aria-label": t("workspace.design"),
56487
+ className: "editor-grid context-panel-closed",
56488
+ id: "workspace-panel-design",
56489
+ role: "region",
56490
+ tabIndex: 0,
56491
+ children: /* @__PURE__ */ jsx("section", {
56492
+ "aria-busy": !workspaceLoadFailed,
56493
+ className: "canvas-panel workbench-canvas",
56494
+ children: workspaceLoadFailed ? /* @__PURE__ */ jsx(WorkspaceRecovery, {
56495
+ kind: workspaceLoadProblem?.kind ?? "failed",
56496
+ message: workspaceLoadProblem?.message,
56497
+ repairing: workspaceRepairing,
56498
+ onRepair: () => void store.workspace.repairWorkspace(),
56499
+ onRetry: () => flowId != null && void store.selectFlow(flowId)
56500
+ }) : /* @__PURE__ */ jsx(Empty, {
56501
+ className: "h-full",
56502
+ children: /* @__PURE__ */ jsx(EmptyHeader, { children: /* @__PURE__ */ jsx(EmptyTitle, { children: t("workspace.status.loading") }) })
56503
+ })
56235
56504
  })
56236
- })
56237
- }) : view == "design" ? /* @__PURE__ */ jsx(FlowEditor, {
56238
- navigationIsland,
56239
- onRun: (triggerId) => void run(triggerId),
56240
- onRunStarted: revealRun,
56241
- onCloseRuns: () => changeRunDrawerOpen(false),
56242
- onConfigureConnector,
56243
- onOpenPublications: () => {
56244
- store.runRequests.dismissInputs();
56245
- navigation.open("publications");
56246
- },
56247
- onOpenRuns: () => {
56248
- store.runRequests.dismissInputs();
56249
- navigation.open("runs");
56250
- },
56251
- onManageConnectorAccess,
56252
- connectionHref,
56253
- onToggleRuns: () => changeRunDrawerOpen(!runDrawerOpen),
56254
- runDrawerOpen,
56255
- store,
56256
- theme
56257
- }) : view == "runs" ? /* @__PURE__ */ jsx(RunsView, {
56258
- onSourceChange: (source) => navigation.open("runs", source),
56259
- flowName: flow?.name ?? flow?.flowId ?? "",
56260
- onClose: () => navigation.open("design"),
56261
- onConfigureConnector,
56262
- onLocateEvent: locateRunEvent,
56263
- onLocateWait: (nodeId) => {
56264
- if (store.locateRunWait(nodeId)) navigation.open("design");
56265
- },
56266
- store
56267
- }) : /* @__PURE__ */ jsx(PublicationsView, {
56268
- theme,
56269
- onClose: () => navigation.open("design"),
56270
- store
56271
- }, flowId)]
56505
+ }) : view == "design" ? /* @__PURE__ */ jsx(FlowEditor, {
56506
+ navigationIsland,
56507
+ onRun: (triggerId) => void run(triggerId),
56508
+ onRunStarted: revealRun,
56509
+ onCloseRuns: () => changeRunDrawerOpen(false),
56510
+ onConfigureConnector,
56511
+ onOpenPublications: () => {
56512
+ store.runRequests.dismissInputs();
56513
+ navigation.open("publications");
56514
+ },
56515
+ onOpenRuns: () => {
56516
+ store.runRequests.dismissInputs();
56517
+ navigation.open("runs");
56518
+ },
56519
+ onManageConnectorAccess,
56520
+ connectionHref,
56521
+ onToggleRuns: () => changeRunDrawerOpen(!runDrawerOpen),
56522
+ runDrawerOpen,
56523
+ store,
56524
+ theme
56525
+ }) : view == "runs" ? /* @__PURE__ */ jsx(RunsView, {
56526
+ onSourceChange: (source) => navigation.open("runs", source),
56527
+ flowName: flow?.name ?? flow?.flowId ?? "",
56528
+ onClose: () => navigation.open("design"),
56529
+ onConfigureConnector,
56530
+ onLocateEvent: locateRunEvent,
56531
+ onLocateWait: (nodeId) => {
56532
+ if (store.locateRunWait(nodeId)) navigation.open("design");
56533
+ },
56534
+ store
56535
+ }) : /* @__PURE__ */ jsx(PublicationsView, {
56536
+ theme,
56537
+ onClose: () => navigation.open("design"),
56538
+ store
56539
+ }, flowId)]
56540
+ })
56272
56541
  }) });
56273
56542
  }
56274
56543
  //#endregion