@oomol-lab/open-flow 0.1.0-beta.74 → 0.1.0-beta.76

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 (139) hide show
  1. package/README.md +3 -1
  2. package/dist/browser/{ContentIcon-CUQHjQIw.js → ContentIcon-Cm1hbVzW.js} +4 -3
  3. package/dist/browser/{FlowCanvas-Dtf8_cQp.js → FlowCanvas-NzKtla_c.js} +62 -62
  4. package/dist/browser/{createResourceDialog-DI9pL-Yr.js → createResourceDialog-BgdedQqu.js} +3 -3
  5. package/dist/browser/{dialog-BYJGvItc.js → dialog-aSElFFw2.js} +322 -26
  6. package/dist/browser/{exportSvg-BOoy7-Db.js → exportSvg-Dcz4HTo_.js} +2 -2
  7. package/dist/browser/{flowChanges-RL-H4CjD.js → flowChanges-NZyS7HSp.js} +490 -438
  8. package/dist/browser/{flowWorkspace-BkDsETj0.js → flowWorkspace-Bl0SDehy.js} +499 -61
  9. package/dist/browser/preview.css +696 -825
  10. package/dist/browser/preview.js +1399 -717
  11. package/dist/browser/theme.css +114 -262
  12. package/dist/browser/{tooltip-wZJRB9oP.js → tooltip-3XMK9jkr.js} +1 -1
  13. package/dist/browser/{typeScriptSession-CSRwWmZm.js → typeScriptSession-C9sBGOKZ.js} +1 -1
  14. package/dist/browser/ui.css +354 -460
  15. package/dist/browser/ui.js +1 -1
  16. package/dist/browser/workbench.css +696 -825
  17. package/dist/browser/workbench.js +13 -7
  18. package/dist/browser/{workbenchSelect-BcWPWGzw.js → workbenchSelect-DBGP7Y4Z.js} +2 -2
  19. package/dist/command/index.js +41 -43
  20. package/dist/common/authoring.d.ts +5 -5
  21. package/dist/common/authoringExamples.d.ts +3 -2
  22. package/dist/common/authoringSchema.d.ts +70 -4
  23. package/dist/common/connector-proxy.d.ts +1 -1
  24. package/dist/common/control-api-conformance.js +250 -138
  25. package/dist/common/control-api.d.ts +3 -2
  26. package/dist/common/control-api.js +246 -134
  27. package/dist/common/control-requests.d.ts +3 -3
  28. package/dist/common/control-requests.js +353 -79
  29. package/dist/common/cron-trigger.d.ts +2 -1
  30. package/dist/common/decision.d.ts +4 -4
  31. package/dist/common/decision.js +5 -2
  32. package/dist/common/engine-contract.d.ts +6 -1
  33. package/dist/common/event-source-definition.d.ts +1 -1
  34. package/dist/common/event-source-view.d.ts +22 -0
  35. package/dist/common/event-source.d.ts +1 -1
  36. package/dist/common/event-source.js +24 -65
  37. package/dist/common/event-sources.d.ts +0 -21
  38. package/dist/common/flow-authoring.js +90 -19
  39. package/dist/common/flow-change-schema.d.ts +9 -1
  40. package/dist/common/flow-change.d.ts +7 -201
  41. package/dist/common/flow-change.js +96 -23
  42. package/dist/common/flow-encoding.js +89 -21
  43. package/dist/common/flow-graph.d.ts +2 -1
  44. package/dist/common/flow-input-value.d.ts +1 -1
  45. package/dist/common/flow-model.d.ts +121 -0
  46. package/dist/common/flow-notifications.d.ts +1 -1
  47. package/dist/common/flow-retry.d.ts +3 -5
  48. package/dist/common/flow-semantics.js +816 -586
  49. package/dist/common/flow-workflowReferences.d.ts +8 -0
  50. package/dist/common/flowInspection.d.ts +1 -1
  51. package/dist/common/http-hosts.d.ts +6 -0
  52. package/dist/common/http-request.d.ts +164 -0
  53. package/dist/common/http-request.js +5272 -0
  54. package/dist/common/integration-trigger.d.ts +2 -1
  55. package/dist/common/mcp.d.ts +3 -3
  56. package/dist/common/mcp.js +248 -136
  57. package/dist/common/openapi.d.ts +4 -4
  58. package/dist/common/openapi.js +4 -1
  59. package/dist/common/poll-trigger.d.ts +2 -1
  60. package/dist/common/run-events.js +11 -9
  61. package/dist/common/runtime-contract.d.ts +23 -1
  62. package/dist/common/runtime-contract.js +607 -72
  63. package/dist/common/runtime-nodejs-compat.d.ts +44 -0
  64. package/dist/common/runtime-nodejs-compat.js +5870 -0
  65. package/dist/common/scheduler-checkpoint.d.ts +1 -1
  66. package/dist/common/scheduler-node-execution.d.ts +1 -1
  67. package/dist/common/scheduler.d.ts +2 -2
  68. package/dist/common/scheduler.js +95 -25
  69. package/dist/common/trigger-catalog.d.ts +1 -7
  70. package/dist/common/trigger-config-options.d.ts +1 -1
  71. package/dist/common/trigger-config.d.ts +1 -1
  72. package/dist/common/trigger-contract.d.ts +2 -1
  73. package/dist/common/trigger-localization.d.ts +8 -2
  74. package/dist/common/trigger-model.d.ts +101 -0
  75. package/dist/common/webhook-response.d.ts +1 -3
  76. package/dist/common/webhook-trigger.d.ts +3 -1
  77. package/dist/common/webhook-trigger.js +12 -11
  78. package/dist/common/workflow.d.ts +3 -12
  79. package/dist/common/workflow.js +25 -23
  80. package/dist/index.d.ts +41 -14
  81. package/package.json +9 -1
  82. package/skills/open-flow/references/flow-authoring.md +1 -0
  83. package/skills/open-flow/references/flow-n8n-conversion.md +19 -15
  84. package/src/base/common/json.ts +1 -1
  85. package/src/connector/common/proxy.ts +1 -1
  86. package/src/control/common/api.ts +7 -5
  87. package/src/control/common/authoring.ts +14 -3
  88. package/src/control/common/authoringExamples.ts +8 -0
  89. package/src/control/common/authoringSchema.ts +38 -25
  90. package/src/control/common/authoringTools.ts +1 -1
  91. package/src/control/common/conformance.ts +1 -1
  92. package/src/control/common/connectorDecoders.ts +1 -1
  93. package/src/control/common/eventSources.ts +2 -29
  94. package/src/control/common/triggerCatalog.ts +1 -8
  95. package/src/decision/common/decision.ts +15 -7
  96. package/src/event-source/common/definition.ts +1 -1
  97. package/src/event-source/common/index.ts +1 -1
  98. package/src/event-source/common/view.ts +20 -0
  99. package/src/execution/common/checkpoint.ts +1 -1
  100. package/src/execution/common/events.ts +3 -0
  101. package/src/execution/common/node-execution.ts +5 -3
  102. package/src/execution/common/scheduler.ts +2 -1
  103. package/src/flow/common/change.ts +59 -192
  104. package/src/flow/common/changeSchema.ts +39 -5
  105. package/src/flow/common/connectionUsage.ts +1 -1
  106. package/src/flow/common/graph.ts +10 -4
  107. package/src/flow/common/inputValue.ts +1 -1
  108. package/src/flow/common/model.ts +130 -0
  109. package/src/flow/common/modules.ts +1 -1
  110. package/src/flow/common/portChanges.ts +1 -1
  111. package/src/flow/common/retry.ts +3 -5
  112. package/src/flow/common/semantics.ts +71 -7
  113. package/src/flow/common/webhookResponse.ts +4 -8
  114. package/src/flow/common/workflowReferences.ts +31 -0
  115. package/src/http/common/authBindings.ts +9 -0
  116. package/src/http/common/headers.ts +5 -0
  117. package/src/http/common/hosts.ts +13 -0
  118. package/src/http/common/httpRequest.ts +266 -0
  119. package/src/openapi/common/openapi.ts +9 -5
  120. package/src/{execution → runtime}/common/engineContract.ts +24 -15
  121. package/src/runtime/common/nodejsCompat.ts +275 -0
  122. package/src/runtime/common/nodejsGuest.generated.json +47 -0
  123. package/src/runtime/common/runtime.ts +1138 -0
  124. package/src/trigger/common/config.ts +1 -1
  125. package/src/trigger/common/configOptions.ts +1 -1
  126. package/src/trigger/common/contract.ts +2 -1
  127. package/src/trigger/common/cron.ts +2 -1
  128. package/src/trigger/common/integration.ts +2 -1
  129. package/src/trigger/common/model.ts +87 -0
  130. package/src/trigger/common/poll.ts +2 -1
  131. package/src/trigger/common/webhook.ts +7 -4
  132. package/src/trigger/providers/fieldDescriptions.ts +1 -1
  133. package/src/trigger/providers/localization.ts +9 -2
  134. package/src/trigger/providers/remote.ts +1 -1
  135. package/src/types/index.ts +44 -15
  136. package/src/workflow/common/workflow.ts +3 -44
  137. package/src/execution/common/runtime.ts +0 -563
  138. package/src/openapi/common/authBindings.ts +0 -12
  139. /package/src/{control → connector}/common/providerIconSprite.ts +0 -0
@@ -1,15 +1,15 @@
1
1
  import { i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
2
- import { A as DropdownMenuSub, C as DropdownMenuContent, D as DropdownMenuRadioGroup, E as DropdownMenuLabel, I as useCompositeItem, J as waitBranchDescription, M as DropdownMenuSubTrigger, N as DropdownMenuTrigger, O as DropdownMenuRadioItem, P as isElementDisabled, S as DropdownMenuCheckboxItem, T as DropdownMenuItem, _ as NativeScrollArea, at as Checkbox, b as Z$1, c as useIconifyData, d as PopoverContent, f as PopoverDescription, g as PopoverTrigger, h as PopoverTitle, j as DropdownMenuSubContent, k as DropdownMenuSeparator, m as PopoverPanelContent, o as IconifyProvider, ot as useAriaLabelledBy, p as PopoverHeader, s as useIconifyCollectionLoader, t as ContentIcon, u as Popover, v as ScrollArea, w as DropdownMenuGroup, x as DropdownMenu, y as VirtualScrollArea } from "./ContentIcon-CUQHjQIw.js";
2
+ import { A as DropdownMenuSub, C as DropdownMenuContent, D as DropdownMenuRadioGroup, E as DropdownMenuLabel, I as useCompositeItem, J as waitBranchDescription, M as DropdownMenuSubTrigger, N as DropdownMenuTrigger, O as DropdownMenuRadioItem, P as isElementDisabled, S as DropdownMenuCheckboxItem, T as DropdownMenuItem, _ as NativeScrollArea, at as Checkbox, b as Z$1, c as useIconifyData, d as PopoverContent, f as PopoverDescription, g as PopoverTrigger, h as PopoverTitle, j as DropdownMenuSubContent, k as DropdownMenuSeparator, m as PopoverPanelContent, o as IconifyProvider, ot as useAriaLabelledBy, p as PopoverHeader, s as useIconifyCollectionLoader, t as ContentIcon, u as Popover, v as ScrollArea, w as DropdownMenuGroup, x as DropdownMenu, y as VirtualScrollArea } from "./ContentIcon-Cm1hbVzW.js";
3
3
  import { i as compute, l as val } from "./dist-bO8nvHFH.js";
4
4
  import { c as useLang, l as useTranslate, o as I18nProvider, r as isPlainObject, s as useI18n, u as useVal } from "./dist-BFmpkX4P.js";
5
- import { $ as useAnchoredPopupScrollLock, $n as listNavigation, A as string, An as ownerDocument, Ar as CompositeRootContext, B as ARROW_LEFT, Bn as useValueChanged, Br as isElement, Cn as activeElement, Cr as useRenderElement, Dn as isFirefox, En as isAndroid, Er as NOOP, F as IndexGuessBehavior, Ft as FloatingFocusManager, G as HORIZONTAL_KEYS, Gn as closePress, H as ARROW_UP, Hn as createGenericEventDetails, Ht as FloatingPortal, I as useCompositeListItem, In as TransitionStatusDataAttributes, Ir as useStableCallback, J as VERTICAL_KEYS, K as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, Kn as escapeKey, L as ALL_KEYS, Ln as transitionStatusMapping, Lr as useRefWithInit, Mr as formatErrorMessage, Nn as useTransitionStatus, Nr as mergeProps, Nt as useDismiss, Or as useMergedRefs, Pn as useOpenChangeComplete, Pr as useIsoLayoutEffect, Pt as useClick, Qn as itemPress, R as ARROW_DOWN, Sn as isInteractiveElement, Sr as clsx, Tn as getTarget, Tr as EMPTY_OBJECT, V as ARROW_RIGHT, Vn as createChangeEventDetails, Wn as clearPress, Wt as DROPDOWN_COLLISION_AVOIDANCE, X as isNativeInput, Xn as inputClear, Xt as useStore, Y as VERTICAL_KEYS_WITH_EXTRA_KEYS, Yn as inputChange, Yt as Store, Z as scrollIntoViewIfNeeded, Zn as inputPress, _n as isIndexOutOfListBounds, _r as useControlled, a as createTooltipHandle, an as useTimeout, bn as stopEvent, br as cn, c as TooltipPositioner, cr as useFormContext, ct as inertValue, d as TooltipRoot, dn as findNonDisabledListIndex, dr as useBaseUiId, dt as popupStateMapping, en as require_builtin_esm_external_require_react, er as none, fn as getGridCellIndexOfCorner, ft as pressableTriggerOpenStateMapping, gn as getMinListIndex, gr as visuallyHiddenInput, gt as useTypeahead, hn as getMaxListIndex, hr as visuallyHidden, i as TooltipTrigger, it as useAnchorPositioning, kr as useButton, l as TooltipPortal, lr as useRegisterFieldControl, lt as getPseudoElementBounds, mn as getGridNavigatedIndex, mr as fieldValidityMapping, mt as useOpenInteractionType, n as TooltipContent, nn as useValueAsRef, nt as getDisabledMountTransitionStyles, o as TooltipArrow, ot as useDirection, p as timeZoneOffsetMinutes, pn as getGridCellIndices, pr as DEFAULT_FIELD_STATE_ATTRIBUTES, pt as triggerOpenStateMapping, q as MODIFIER_KEYS, r as TooltipProvider, rn as useOnFirstRender, rt as InternalBackdrop, s as TooltipPopup, sr as useLabelableContext, st as CompositeList, t as Tooltip, tn as createSelector, tt as usePositioner, u as TooltipTrigger$1, un as createGridCellMap, ur as useFieldRootContext, vn as isListIndexDisabled, vr as Button$1, vt as useListNavigation, wn as contains, wr as EMPTY_ARRAY$1, wt as useFloatingRootContext, xr as cva, yr as buttonVariants, yt as useInteractions, z as ARROW_KEYS } from "./tooltip-wZJRB9oP.js";
6
- import { $ as workflowOutputsPort, At as resolveAriaLabelledBy, Bt as Label, Ct as SelectChevron, D as nodeErrorSchema, Dt as SelectSeparator, E as workflowToolNameIssue, Et as SelectItem, F as operandHandle, Ft as compareItemEquality, Ht as useLabelableId, I as operatorsForType, It as defaultItemEquality, J as webhookHeadersPort, K as webhookHeaderNameIssue, Lt as findItemIndex, Mt as isGroupedItems, Nt as stringifyAsLabel, O as nodeSystemOutputPorts, Ot as SelectTrigger, Pt as stringifyAsValue, Q as webhookStatusCodePort, R as unaryOperator, Rt as removeItem, St as Select$1, Tt as SelectGroup, Ut as ChevronDown, Vt as Input, W as decodeRevisionContent, X as webhookResponseInputs, Y as webhookResponseAllowsBody, Z as webhookResponseTimeout, _t as schemaObject, b as nodeNameIssue, c as DialogTrigger, ct as decisionQuestionIssues, d as Field, dt as limitDecisionQuestions, et as waitAutoContinueSchema, f as FieldDescription, ft as webhookMethods, gt as portsAssignable, h as FieldLabel, ht as matchesSchema, i as DialogDescription, it as supportsNodeRetry, j as comparisonIssue, jt as hasNullItemLabel, k as supportsNodeErrorHandling, kt as SelectValue, l as Icon, lt as decisionTask, m as FieldGroup, nt as nodeRetryLimits, o as DialogHeader, ot as decisionLimits, p as FieldError, pt as webhookSupportsBody, q as webhookHeaderValuePort, r as DialogContent, rt as retryConfigurationSchema, s as DialogTitle, t as Dialog, tt as defaultNodeRetry, u as Spinner, ut as defaultDecisionQuestion, vt as variableInputCompatible, wt as SelectContent, xt as dequal, z as valueType, zt as selectedValueIncludes } from "./dialog-BYJGvItc.js";
7
- import { C as isSameViewport, S as isMac, _ as CanvasTooltip, a as collapseAllNested, b as toManifestHandleName, c as defaultTriggerIcon, d as selectableTimeZones, f as timeZoneLabel, g as E$1, h as cronDescription, i as JSONViewer, l as useDebouncedValue, m as timeZoneOffset, n as setAddItemId, o as formatDuration, p as timeZoneLongLabel, r as Textarea, s as CanvasNodeIcon, t as FlowCanvas, u as IconStack, v as CanvasStore, x as toManifestNodeId, y as toViewEdge } from "./FlowCanvas-Dtf8_cQp.js";
8
- import { $ as designerGraph, $t as EventSourceSetup, A as valueForEditor, An as serverAddress, B as dateTimeWall, Bt as InputGroupInput, Cn as inputValue, D as editorComponent, Dn as openApiTask, E as defaultValueEditorSchema, En as openApiFieldIssues, F as calendarDate, Fn as workflowCandidateGroup, Ft as WorkflowExportMenuItem, Gt as EmptyMedia, Ht as EmptyContent, I as dateFromTimeZone, In as workflowCapability, It as IdTooltip, K as mapSource, Kt as EmptyTitle, L as dateInTimeZone, Ln as workflowSelectionTask, Lt as followWorkbenchLink, M as isUnconstrainedSchema, Mn as sameWorkflowInterface, N as typeOfSchema, Nn as workflowAgentTool, O as editorGroups, On as securityOptions, P as calendarChange, Pt as dequal$1, Qt as FeishuEventPicker, R as datePickerChange, Rt as InputGroup, Sn as triggerConfigValues, T as supportsFeishuChatFilter, Tn as object, Un as controlErrorCode, Ut as EmptyDescription, V as isDateFormat, Vt as Empty, W as indexAddNodeOptions, Wn as eventSourceKind, Wt as EmptyHeader, X as resourceData, Xt as SourceSelect, Y as observeResource, Yt as SourceForm, Z as resourceValue, Zt as createI18n, at as canCancelRun, cn as webhookResponseDiagnostics, en as errorNotice, et as semanticNodeIcon, ft as diagnosticMessage, gt as connectionCatalog, in as decodeResultList, j as getDefaultValue, jn as servers, k as schemaForEditor, kn as selectOperation, ln as sourceOutputLabel, mn as isJsonObject, mt as schemaMismatchMessage, n as agentTool, nt as actionSummary, on as executionReachableNodes, ot as hasRunFilter, pn as triggerOutputDefinitions, pt as diagnosticNodeId, qt as Badge, rt as providerIcon, sn as resolutionOutputPorts, st as revisionView, tt as triggerNodeIcon, un as sourcePort, w as feishuResourceKind, wn as listOperations, xn as triggerConfigValue, z as datePickerValue, zt as InputGroupAddon } from "./flowChanges-RL-H4CjD.js";
5
+ import { $ as useAnchoredPopupScrollLock, $n as listNavigation, A as string, An as ownerDocument, Ar as CompositeRootContext, B as ARROW_LEFT, Bn as useValueChanged, Br as isElement, Cn as activeElement, Cr as useRenderElement, Dn as isFirefox, En as isAndroid, Er as NOOP, F as IndexGuessBehavior, Ft as FloatingFocusManager, G as HORIZONTAL_KEYS, Gn as closePress, H as ARROW_UP, Hn as createGenericEventDetails, Ht as FloatingPortal, I as useCompositeListItem, In as TransitionStatusDataAttributes, Ir as useStableCallback, J as VERTICAL_KEYS, K as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, Kn as escapeKey, L as ALL_KEYS, Ln as transitionStatusMapping, Lr as useRefWithInit, Mr as formatErrorMessage, Nn as useTransitionStatus, Nr as mergeProps, Nt as useDismiss, Or as useMergedRefs, Pn as useOpenChangeComplete, Pr as useIsoLayoutEffect, Pt as useClick, Qn as itemPress, R as ARROW_DOWN, Sn as isInteractiveElement, Sr as clsx, Tn as getTarget, Tr as EMPTY_OBJECT, V as ARROW_RIGHT, Vn as createChangeEventDetails, Wn as clearPress, Wt as DROPDOWN_COLLISION_AVOIDANCE, X as isNativeInput, Xn as inputClear, Xt as useStore, Y as VERTICAL_KEYS_WITH_EXTRA_KEYS, Yn as inputChange, Yt as Store, Z as scrollIntoViewIfNeeded, Zn as inputPress, _n as isIndexOutOfListBounds, _r as useControlled, a as createTooltipHandle, an as useTimeout, bn as stopEvent, br as cn, c as TooltipPositioner, cr as useFormContext, ct as inertValue, d as TooltipRoot, dn as findNonDisabledListIndex, dr as useBaseUiId, dt as popupStateMapping, en as require_builtin_esm_external_require_react, er as none, fn as getGridCellIndexOfCorner, ft as pressableTriggerOpenStateMapping, gn as getMinListIndex, gr as visuallyHiddenInput, gt as useTypeahead, hn as getMaxListIndex, hr as visuallyHidden, i as TooltipTrigger, it as useAnchorPositioning, kr as useButton, l as TooltipPortal, lr as useRegisterFieldControl, lt as getPseudoElementBounds, mn as getGridNavigatedIndex, mr as fieldValidityMapping, mt as useOpenInteractionType, n as TooltipContent, nn as useValueAsRef, nt as getDisabledMountTransitionStyles, o as TooltipArrow, ot as useDirection, p as timeZoneOffsetMinutes, pn as getGridCellIndices, pr as DEFAULT_FIELD_STATE_ATTRIBUTES, pt as triggerOpenStateMapping, q as MODIFIER_KEYS, r as TooltipProvider, rn as useOnFirstRender, rt as InternalBackdrop, s as TooltipPopup, sr as useLabelableContext, st as CompositeList, t as Tooltip, tn as createSelector, tt as usePositioner, u as TooltipTrigger$1, un as createGridCellMap, ur as useFieldRootContext, vn as isListIndexDisabled, vr as Button$1, vt as useListNavigation, wn as contains, wr as EMPTY_ARRAY$1, wt as useFloatingRootContext, xr as cva, yr as buttonVariants, yt as useInteractions, z as ARROW_KEYS } from "./tooltip-3XMK9jkr.js";
6
+ import { $ as waitAutoContinueSchema, $t as Input, A as comparisonIssue, At as variableInputCompatible, Bt as SelectTrigger, Ct as limitDecisionQuestions, D as nodeSystemOutputPorts, Dt as matchesSchema, E as nodeErrorSchema, F as operatorsForType, Ft as SelectChevron, Gt as stringifyAsLabel, Ht as resolveAriaLabelledBy, It as SelectContent, J as webhookResponseAllowsBody, Jt as defaultItemEquality, K as webhookHeaderValuePort, Kt as stringifyAsValue, L as unaryOperator, Lt as SelectGroup, Nt as dequal, O as supportsNodeErrorHandling, Ot as portsAssignable, P as operandHandle, Pt as Select$1, Q as workflowOutputsPort, Qt as Label, R as valueType, Rt as SelectItem, St as defaultDecisionQuestion, T as workflowToolNameIssue, Tt as webhookSupportsBody, U as decodeRevisionContent, Ut as hasNullItemLabel, Vt as SelectValue, Wt as isGroupedItems, X as webhookResponseTimeout, Xt as removeItem, Y as webhookResponseInputs, Yt as findItemIndex, Z as webhookStatusCodePort, Zt as selectedValueIncludes, _t as isHttpHost, at as httpHeaderSchema, b as nodeNameIssue, bt as decisionQuestionIssues, c as DialogTrigger, d as Field, en as useLabelableId, et as defaultNodeRetry, f as FieldDescription, h as FieldLabel, i as DialogDescription, kt as schemaObject, l as Icon, lt as httpRequestIssues, m as FieldGroup, nt as retryConfigurationSchema, o as DialogHeader, ot as httpQuerySchema, p as FieldError, pt as httpHeaderNameIssue, q as webhookHeadersPort, qt as compareItemEquality, r as DialogContent, rt as supportsNodeRetry, s as DialogTitle, t as Dialog, tn as ChevronDown, tt as nodeRetryLimits, u as Spinner, ut as httpRequestTask, vt as decisionLimits, wt as webhookMethods, xt as decisionTask, zt as SelectSeparator } from "./dialog-aSElFFw2.js";
7
+ import { C as isSameViewport, S as isMac, _ as CanvasTooltip, a as collapseAllNested, b as toManifestHandleName, c as defaultTriggerIcon, d as selectableTimeZones, f as timeZoneLabel, g as E$1, h as cronDescription, i as JSONViewer, l as useDebouncedValue, m as timeZoneOffset, n as setAddItemId, o as formatDuration, p as timeZoneLongLabel, r as Textarea, s as CanvasNodeIcon, t as FlowCanvas, u as IconStack, v as CanvasStore, x as toManifestNodeId, y as toViewEdge } from "./FlowCanvas-NzKtla_c.js";
8
+ import { $t as FeishuEventPicker, A as schemaForEditor, An as securityOptions, B as datePickerValue, Bt as InputGroupAddon, Cn as triggerConfigValue, D as defaultValueEditorSchema, Dn as object$1, E as supportsFeishuChatFilter, En as listOperations, F as calendarChange, Fn as workflowAgentTool, Ft as dequal$1, G as indexAddNodeOptions, Gn as controlErrorCode, Gt as EmptyHeader, H as isDateFormat, Ht as Empty, I as calendarDate, It as WorkflowExportMenuItem, Jt as Badge, Kn as eventSourceKind, Kt as EmptyMedia, L as dateFromTimeZone, Ln as workflowCandidateGroup, Lt as IdTooltip, M as getDefaultValue, Mn as serverAddress, N as isUnconstrainedSchema, Nn as servers, O as editorComponent, On as openApiFieldIssues, P as typeOfSchema, Pn as sameWorkflowInterface, Q as resourceValue, Qt as createI18n, R as dateInTimeZone, Rn as workflowCapability, Rt as followWorkbenchLink, T as feishuResourceKind, Tn as inputValue, Ut as EmptyContent, V as dateTimeWall, Vt as InputGroupInput, Wt as EmptyDescription, X as observeResource, Xt as SourceForm, Z as resourceData, Zt as SourceSelect, _t as connectionCatalog, an as decodeResultList, cn as inputSourceCandidates, ct as revisionView, dn as sourceOutputLabel, en as EventSourceSetup, et as designerGraph, fn as sourcePort, gn as isJsonObject, hn as triggerOutputDefinitions, ht as schemaMismatchMessage, it as providerIcon, j as valueForEditor, jn as selectOperation, k as editorGroups, kn as openApiTask, ln as resolutionOutputPorts, mt as diagnosticNodeId, n as agentTool, nt as triggerNodeIcon, ot as canCancelRun, pt as diagnosticMessage, q as mapSource, qt as EmptyTitle, rt as actionSummary, sn as executionReachableNodes, st as hasRunFilter, tn as errorNotice, tt as semanticNodeIcon, un as webhookResponseDiagnostics, wn as triggerConfigValues, z as datePickerChange, zn as workflowSelectionTask, zt as InputGroup } from "./flowChanges-NZyS7HSp.js";
9
9
  import { r as resolveUiLanguage } from "./languages-gYzoQqCi.js";
10
10
  import { a as renameObjectField, i as objectValue, n as isJsonValue, o as setObjectField, r as jsonDataTypes, s as valueType$1, t as initialValue } from "./value-BbFQZZ_V.js";
11
11
  import { n as compile, r as validate } from "./flowRunInputEditorStore-ys1-w9GW.js";
12
- import { t as WorkbenchSelect } from "./workbenchSelect-BcWPWGzw.js";
12
+ import { t as WorkbenchSelect } from "./workbenchSelect-DBGP7Y4Z.js";
13
13
  import * as React from "react";
14
14
  import reactExports, { Children, Fragment, Suspense, createContext, forwardRef, isValidElement, lazy, memo, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
15
15
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1302,9 +1302,9 @@ function CommentInspector({ title, content, disabled = false, readOnly, dark, on
1302
1302
  }),
1303
1303
  /* @__PURE__ */ jsx(TabsContent, {
1304
1304
  value: "preview",
1305
- className: "flex min-h-0 flex-1 flex-col rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[var(--open-flow-comment-border)] bg-[var(--open-flow-comment-surface)] p-2",
1305
+ className: "flex min-h-0 flex-1 flex-col rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[var(--_open-flow-comment-border)] bg-[var(--_open-flow-comment-surface)] p-2",
1306
1306
  children: /* @__PURE__ */ jsx("div", {
1307
- className: "min-h-0 flex-1 overflow-auto rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[color-mix(in_srgb,var(--open-flow-comment-border)_45%,transparent)] bg-[var(--open-flow-comment-content)] p-3",
1307
+ className: "min-h-0 flex-1 overflow-auto rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[color-mix(in_srgb,var(--_open-flow-comment-border)_45%,transparent)] bg-[var(--_open-flow-comment-content)] p-3",
1308
1308
  children: /* @__PURE__ */ jsx("div", {
1309
1309
  className: "markdown-body min-w-0",
1310
1310
  onDoubleClick: () => setSource(true),
@@ -2559,6 +2559,7 @@ function fallbackIcon$1(item) {
2559
2559
  case "agent": return "llm";
2560
2560
  case "condition": return "condition";
2561
2561
  case "decision": return "decision";
2562
+ case "http-request":
2562
2563
  case "openapi":
2563
2564
  case "connector":
2564
2565
  case "connector-group": return "connection";
@@ -5607,44 +5608,44 @@ function FlowNodeList({ nodes, onFocusNode, onSelect, groupTriggers = false }) {
5607
5608
  });
5608
5609
  }
5609
5610
  var valueEditor_module_default = {
5610
- root: "valueEditor_root_64cb9",
5611
- errorAnchor: "valueEditor_errorAnchor_64cb9",
5612
- body: "valueEditor_body_64cb9",
5613
- valueTools: "valueEditor_valueTools_64cb9",
5614
- options: "valueEditor_options_64cb9",
5615
- toolbar: "valueEditor_toolbar_64cb9",
5616
- presence: "valueEditor_presence_64cb9",
5617
- actions: "valueEditor_actions_64cb9",
5618
- collection: "valueEditor_collection_64cb9",
5619
- fieldName: "valueEditor_fieldName_64cb9",
5620
- fieldType: "valueEditor_fieldType_64cb9",
5621
- json: "valueEditor_json_64cb9",
5622
- description: "valueEditor_description_64cb9",
5623
- error: "valueEditor_error_64cb9",
5624
- summary: "valueEditor_summary_64cb9",
5625
- summaryError: "valueEditor_summaryError_64cb9",
5626
- srOnly: "valueEditor_srOnly_64cb9",
5627
- option: "valueEditor_option_64cb9",
5628
- header: "valueEditor_header_64cb9",
5629
- leadingControl: "valueEditor_leadingControl_64cb9",
5630
- toggleControl: "valueEditor_toggleControl_64cb9",
5631
- valueAddon: "valueEditor_valueAddon_64cb9",
5632
- summaryText: "valueEditor_summaryText_64cb9",
5633
- clearValue: "valueEditor_clearValue_64cb9",
5634
- resetValue: "valueEditor_resetValue_64cb9",
5635
- unsetValue: "valueEditor_unsetValue_64cb9",
5636
- arrayIndex: "valueEditor_arrayIndex_64cb9",
5637
- nullValue: "valueEditor_nullValue_64cb9",
5638
- nullChip: "valueEditor_nullChip_64cb9",
5639
- collectionActions: "valueEditor_collectionActions_64cb9",
5640
- emptyObjectContent: "valueEditor_emptyObjectContent_64cb9",
5641
- emptyObjectConstraint: "valueEditor_emptyObjectConstraint_64cb9",
5642
- jsonCode: "valueEditor_jsonCode_64cb9",
5643
- emptyString: "valueEditor_emptyString_64cb9",
5644
- booleanControl: "valueEditor_booleanControl_64cb9",
5645
- booleanIndicator: "valueEditor_booleanIndicator_64cb9",
5646
- objectNotice: "valueEditor_objectNotice_64cb9",
5647
- valuePrefix: "valueEditor_valuePrefix_64cb9"
5611
+ root: "valueEditor_root_4a4f1",
5612
+ errorAnchor: "valueEditor_errorAnchor_4a4f1",
5613
+ body: "valueEditor_body_4a4f1",
5614
+ valueTools: "valueEditor_valueTools_4a4f1",
5615
+ options: "valueEditor_options_4a4f1",
5616
+ toolbar: "valueEditor_toolbar_4a4f1",
5617
+ presence: "valueEditor_presence_4a4f1",
5618
+ actions: "valueEditor_actions_4a4f1",
5619
+ collection: "valueEditor_collection_4a4f1",
5620
+ fieldName: "valueEditor_fieldName_4a4f1",
5621
+ fieldType: "valueEditor_fieldType_4a4f1",
5622
+ json: "valueEditor_json_4a4f1",
5623
+ description: "valueEditor_description_4a4f1",
5624
+ error: "valueEditor_error_4a4f1",
5625
+ summary: "valueEditor_summary_4a4f1",
5626
+ summaryError: "valueEditor_summaryError_4a4f1",
5627
+ srOnly: "valueEditor_srOnly_4a4f1",
5628
+ option: "valueEditor_option_4a4f1",
5629
+ header: "valueEditor_header_4a4f1",
5630
+ leadingControl: "valueEditor_leadingControl_4a4f1",
5631
+ toggleControl: "valueEditor_toggleControl_4a4f1",
5632
+ valueAddon: "valueEditor_valueAddon_4a4f1",
5633
+ summaryText: "valueEditor_summaryText_4a4f1",
5634
+ clearValue: "valueEditor_clearValue_4a4f1",
5635
+ resetValue: "valueEditor_resetValue_4a4f1",
5636
+ unsetValue: "valueEditor_unsetValue_4a4f1",
5637
+ arrayIndex: "valueEditor_arrayIndex_4a4f1",
5638
+ nullValue: "valueEditor_nullValue_4a4f1",
5639
+ nullChip: "valueEditor_nullChip_4a4f1",
5640
+ collectionActions: "valueEditor_collectionActions_4a4f1",
5641
+ emptyObjectContent: "valueEditor_emptyObjectContent_4a4f1",
5642
+ emptyObjectConstraint: "valueEditor_emptyObjectConstraint_4a4f1",
5643
+ jsonCode: "valueEditor_jsonCode_4a4f1",
5644
+ emptyString: "valueEditor_emptyString_4a4f1",
5645
+ booleanControl: "valueEditor_booleanControl_4a4f1",
5646
+ booleanIndicator: "valueEditor_booleanIndicator_4a4f1",
5647
+ objectNotice: "valueEditor_objectNotice_4a4f1",
5648
+ valuePrefix: "valueEditor_valuePrefix_4a4f1"
5648
5649
  };
5649
5650
  //#endregion
5650
5651
  //#region src/form/browser/fieldControl.tsx
@@ -5654,6 +5655,7 @@ function ValueEditorFeedback({ children, error }) {
5654
5655
  const errorId = error == null ? void 0 : `${id}-error`;
5655
5656
  return /* @__PURE__ */ jsxs("div", {
5656
5657
  className: valueEditor_module_default.errorAnchor,
5658
+ "data-feedback": error != null || void 0,
5657
5659
  children: [children(errorId), error != null && /* @__PURE__ */ jsx("div", {
5658
5660
  id: errorId,
5659
5661
  className: valueEditor_module_default.error,
@@ -23361,8 +23363,9 @@ function FieldValueEditor(suppliedProps) {
23361
23363
  });
23362
23364
  const firstName = objectFieldNames(schema, value)[0];
23363
23365
  const firstSchema = firstName == null ? void 0 : objectValue(source.properties)?.[firstName] ?? source.additionalProperties ?? {};
23366
+ const firstEditorSchema = !definitionEditable && editorComponent(firstSchema) === "json" ? defaultValueEditorSchema(firstSchema) : firstSchema;
23364
23367
  const firstValue = firstName == null ? void 0 : objectValue(value)?.[firstName];
23365
- const childMarker = type === "array" ? array.length > 0 : firstName != null && (sorting && props.onDefinitionChange != null || fieldValueShape(firstSchema, firstValue, {
23368
+ const childMarker = type === "array" ? array.length > 0 : firstName != null && (sorting && props.onDefinitionChange != null || fieldValueShape(firstEditorSchema, firstValue, {
23366
23369
  objectChild: true,
23367
23370
  depth: depth + 1
23368
23371
  }).expandable);
@@ -23373,6 +23376,7 @@ function FieldValueEditor(suppliedProps) {
23373
23376
  id: `${id}-body`,
23374
23377
  className: valueEditor_module_default.body,
23375
23378
  "data-value-body": true,
23379
+ "data-feedback": anchor === "body" && messages.length > 0 || void 0,
23376
23380
  hidden: compactValue && expandable && !expanded || expandable && !hasExpandedContent,
23377
23381
  children: [
23378
23382
  !showUnset && !compactValue && valueEditable && presence !== "value" && /* @__PURE__ */ jsx("span", {
@@ -23503,6 +23507,7 @@ function FieldValueEditor(suppliedProps) {
23503
23507
  "aria-label": label,
23504
23508
  "aria-describedby": messages.length ? `${id}-error` : void 0,
23505
23509
  ref: setContainer,
23510
+ "data-summary-feedback": anchor === "summary" && messages.length > 0 || void 0,
23506
23511
  "data-inline": props.hideOptions && !hasHeader || void 0,
23507
23512
  "data-compact": props.compact || void 0,
23508
23513
  "data-value-tools": canReset || canClear || canToggleJson || inlineExpansion && hasExpandedContent || void 0,
@@ -24115,7 +24120,7 @@ function EditableAgentSettingsProvider({ children, task, nodeId, store, connecto
24115
24120
  return false;
24116
24121
  }
24117
24122
  const decoded = decodeRevisionContent({
24118
- modelVersion: 11,
24123
+ modelVersion: 12,
24119
24124
  modules: {},
24120
24125
  document: {
24121
24126
  bindings: {},
@@ -24534,7 +24539,7 @@ function CodeEditor({ ariaDescribedBy, ariaLabel, diagnostics, disabled, errorLa
24534
24539
  darkMode.current = darkMode$;
24535
24540
  setFailed(false);
24536
24541
  setLoading(true);
24537
- const extension = import("./typeScriptSession-CSRwWmZm.js").then(({ loadTypeScriptExtension }) => loadTypeScriptExtension(uri, typingRef.current, () => prepareCompletionRef.current?.())).catch(() => void 0);
24542
+ const extension = import("./typeScriptSession-C9sBGOKZ.js").then(({ loadTypeScriptExtension }) => loadTypeScriptExtension(uri, typingRef.current, () => prepareCompletionRef.current?.())).catch(() => void 0);
24538
24543
  claimEditor(uri).then((nextRelease) => {
24539
24544
  release = nextRelease;
24540
24545
  if (disposed) {
@@ -24621,7 +24626,7 @@ function CodeEditor({ ariaDescribedBy, ariaLabel, diagnostics, disabled, errorLa
24621
24626
  editor.current?.updateOptions({ ariaDescribedBy });
24622
24627
  }, [ariaDescribedBy]);
24623
24628
  useEffect(() => {
24624
- import("./typeScriptSession-CSRwWmZm.js").then(({ updateTypeScriptTyping }) => updateTypeScriptTyping(uri, typing)).catch(noop);
24629
+ import("./typeScriptSession-C9sBGOKZ.js").then(({ updateTypeScriptTyping }) => updateTypeScriptTyping(uri, typing)).catch(noop);
24625
24630
  }, [typing, uri]);
24626
24631
  useEffect(() => {
24627
24632
  if (location != null) editor.current?.revealPosition?.(location.line, location.column);
@@ -24645,6 +24650,59 @@ function CodeEditor({ ariaDescribedBy, ariaLabel, diagnostics, disabled, errorLa
24645
24650
  });
24646
24651
  }
24647
24652
  //#endregion
24653
+ //#region src/workbench/browser/runtime/editor/codeHttpHosts.tsx
24654
+ /** Edits the hosts of a Code `http` Capability, one per line; an empty list removes the Capability. */
24655
+ function CodeHttpHosts({ disabled, hosts, onSave }) {
24656
+ const t = useTranslate();
24657
+ const id = useId();
24658
+ const saved = hosts.join("\n");
24659
+ const [draft, setDraft] = useState(saved);
24660
+ const [error, setError] = useState();
24661
+ useEffect(() => {
24662
+ setDraft(saved);
24663
+ setError(void 0);
24664
+ }, [saved]);
24665
+ const commit = async () => {
24666
+ const next = [...new Set(draft.split(/[\s,]+/).flatMap((host) => host == "" ? [] : [host.toLowerCase()]))];
24667
+ const invalid = next.find((host) => !isHttpHost(host));
24668
+ if (invalid != null) return setError(t("inspector.task.httpHostsInvalid", { host: invalid }));
24669
+ if (next.length > 20) return setError(t("inspector.task.httpHostsLimit", { count: 20 }));
24670
+ setError(void 0);
24671
+ if (dequal$1(next, hosts)) setDraft(saved);
24672
+ else await onSave(next);
24673
+ };
24674
+ return /* @__PURE__ */ jsxs(Field, {
24675
+ "data-inspector-section": "code-http",
24676
+ children: [
24677
+ /* @__PURE__ */ jsx(FieldLabel, {
24678
+ className: "text-xs font-normal",
24679
+ htmlFor: `${id}-hosts`,
24680
+ children: t("inspector.task.httpHosts")
24681
+ }),
24682
+ /* @__PURE__ */ jsx(ValueEditorFeedback, {
24683
+ error,
24684
+ children: (errorId) => /* @__PURE__ */ jsx(Textarea, {
24685
+ "aria-describedby": [`${id}-hint`, errorId].filter(Boolean).join(" "),
24686
+ "aria-invalid": error != null || void 0,
24687
+ className: "min-h-14 font-mono text-xs",
24688
+ disabled,
24689
+ id: `${id}-hosts`,
24690
+ onBlur: () => void commit(),
24691
+ onChange: (event) => setDraft(event.target.value),
24692
+ placeholder: "api.example.com",
24693
+ rows: 2,
24694
+ spellCheck: false,
24695
+ value: draft
24696
+ })
24697
+ }),
24698
+ /* @__PURE__ */ jsx(FieldDescription, {
24699
+ id: `${id}-hint`,
24700
+ children: t("inspector.task.httpHostsHint")
24701
+ })
24702
+ ]
24703
+ });
24704
+ }
24705
+ //#endregion
24648
24706
  //#region src/workbench/browser/runtime/editor/generateTyping.ts
24649
24707
  function generateTyping(language, inputsDef, outputsDef) {
24650
24708
  if (language === "typescript") return genTypeScript(inputsDef, outputsDef) + "\n";
@@ -24865,7 +24923,12 @@ function EditableCodeTaskSection({ connectorAccess, connectorCandidates, connect
24865
24923
  setPending(true);
24866
24924
  try {
24867
24925
  const connectorCapabilities = value === permission && task != null && "moduleId" in task ? (task.capabilities ?? []).filter((item) => item.kind == "connector") : value == null ? [] : [value];
24868
- if (!await store.nodes.setCodeActions(selection.id, [...connectorCapabilities, ...workflows])) return false;
24926
+ const http = task != null && "moduleId" in task ? (task.capabilities ?? []).filter((item) => item.kind == "http") : [];
24927
+ if (!await store.nodes.setCodeActions(selection.id, [
24928
+ ...connectorCapabilities,
24929
+ ...workflows,
24930
+ ...http
24931
+ ])) return false;
24869
24932
  setPermission(value);
24870
24933
  return true;
24871
24934
  } catch (cause) {
@@ -24900,6 +24963,19 @@ function EditableCodeTaskSection({ connectorAccess, connectorCandidates, connect
24900
24963
  children: t("inspector.task.missing")
24901
24964
  });
24902
24965
  if (!("moduleId" in task)) return null;
24966
+ const httpHosts = (task.capabilities ?? []).find((item) => item.kind == "http")?.hosts ?? [];
24967
+ const saveHttpHosts = async (hosts) => {
24968
+ try {
24969
+ const others = (task.capabilities ?? []).filter((item) => item.kind != "http");
24970
+ return await store.nodes.setCodeActions(selection.id, hosts.length == 0 ? others : [...others, {
24971
+ kind: "http",
24972
+ hosts
24973
+ }]);
24974
+ } catch (cause) {
24975
+ store.notify(errorNotice(cause, t));
24976
+ return false;
24977
+ }
24978
+ };
24903
24979
  const selectedActions = permission?.mode == "independent" ? permission.actions : [];
24904
24980
  const selectedTools = [...selectedActions, ...(task.capabilities ?? []).filter((item) => item.kind == "workflow")];
24905
24981
  const summary = actionSummary(selectedTools, hintedCatalog, providers.data ?? []);
@@ -24911,7 +24987,7 @@ function EditableCodeTaskSection({ connectorAccess, connectorCandidates, connect
24911
24987
  const catalog = accountCatalogs[action.serviceId];
24912
24988
  return catalog != null && catalog.byId.get(entry.connectionId)?.status !== "active";
24913
24989
  });
24914
- const typingFor = (shared) => codeTyping(task, permission == null ? task.capabilities : [permission, ...(task.capabilities ?? []).filter((item) => item.kind == "workflow")], permission?.mode == "shared" ? shared : {
24990
+ const typingFor = (shared) => codeTyping(task, permission == null ? task.capabilities : [permission, ...(task.capabilities ?? []).filter((item) => item.kind != "connector")], permission?.mode == "shared" ? shared : {
24915
24991
  ...hintedCatalog,
24916
24992
  ...shared
24917
24993
  }, providerIds);
@@ -24989,6 +25065,11 @@ function EditableCodeTaskSection({ connectorAccess, connectorCandidates, connect
24989
25065
  children: loadError ?? completionError
24990
25066
  })]
24991
25067
  }),
25068
+ /* @__PURE__ */ jsx(CodeHttpHosts, {
25069
+ disabled: disabled || pending,
25070
+ hosts: httpHosts,
25071
+ onSave: saveHttpHosts
25072
+ }),
24992
25073
  /* @__PURE__ */ jsx(ValueEditorFeedback, {
24993
25074
  error: moduleDiagnostics.length > 0 ? moduleDiagnostics.map((diagnostic) => /* @__PURE__ */ jsx("div", { children: diagnosticMessage(diagnostic, t) }, `${diagnostic.path}:${diagnostic.line}:${diagnostic.column}:${diagnostic.code}`)) : void 0,
24994
25075
  children: (errorId) => /* @__PURE__ */ jsx(CodeEditor, {
@@ -29561,6 +29642,278 @@ function GeneralSettings({ title, children, disabled = false, readOnly = false,
29561
29642
  }, nodeId);
29562
29643
  }
29563
29644
  //#endregion
29645
+ //#region src/workbench/browser/runtime/editor/httpParameterEditor.tsx
29646
+ var expanded$2 = () => true;
29647
+ var object = (value) => value != null && typeof value === "object" && !Array.isArray(value) ? value : {};
29648
+ function HttpParameterEditor({ group, task, entries, disabled, readOnly, variables, renderSource, onEdit }) {
29649
+ const t = useTranslate();
29650
+ if (task.executor.kind !== "http-request") return null;
29651
+ const parameters = task.executor[group];
29652
+ const root = parameters.mode === "object" ? entries[group] : void 0;
29653
+ const label = t(`httpRequest.${group}`);
29654
+ const schema = group === "query" ? httpQuerySchema : httpHeaderSchema;
29655
+ const handle = (name) => `${group === "query" ? "query" : "header"}.${name}`;
29656
+ const values = parameters.mode === "fields" ? Object.fromEntries(parameters.names.map((name) => {
29657
+ const value = entries[handle(name)]?.value;
29658
+ return [name, value === void 0 ? "" : value];
29659
+ })) : object(root?.value);
29660
+ const input = (port, entry, name) => {
29661
+ const upstream = renderSource(port.handle, port);
29662
+ return {
29663
+ embedded: true,
29664
+ definition: port,
29665
+ variables,
29666
+ disabled,
29667
+ readOnly,
29668
+ variableName: entry?.variableName,
29669
+ connected: entry?.connected ?? false,
29670
+ upstream: upstream == null ? void 0 : {
29671
+ ...upstream,
29672
+ onChange: (source) => onEdit({
29673
+ kind: "source",
29674
+ source: {
29675
+ kind: "node",
29676
+ ...source
29677
+ },
29678
+ field: name,
29679
+ fields: values
29680
+ })
29681
+ },
29682
+ onVariable: (next) => {
29683
+ if (next == null) onEdit({
29684
+ kind: "fields",
29685
+ value: name == null ? {} : {
29686
+ ...values,
29687
+ [name]: ""
29688
+ },
29689
+ field: name
29690
+ });
29691
+ else onEdit({
29692
+ kind: "variable",
29693
+ name: next,
29694
+ field: name,
29695
+ fields: values
29696
+ });
29697
+ }
29698
+ };
29699
+ };
29700
+ return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(FieldTable, {
29701
+ standalone: true,
29702
+ layout: "values",
29703
+ typeColumn: false,
29704
+ columnHeadings: false,
29705
+ actionSlots: 2,
29706
+ children: /* @__PURE__ */ jsx(NodeInputValue, {
29707
+ ...input({
29708
+ handle: group,
29709
+ jsonSchema: schema,
29710
+ nullable: true
29711
+ }, root),
29712
+ label,
29713
+ value: values,
29714
+ onValue: (next) => onEdit({
29715
+ kind: "fields",
29716
+ value: object(next)
29717
+ }),
29718
+ presentation: {
29719
+ valueOnly: true,
29720
+ hideOptions: true,
29721
+ hideValueTools: true,
29722
+ hideChildTypes: true,
29723
+ expansionPolicy: expanded$2,
29724
+ validateObjectFieldName: (name, current) => group === "query" ? !!name.trim() && (name === current || !Object.hasOwn(values, name)) : httpHeaderNameIssue(name, Object.keys(values).filter((key) => key !== current)) == null,
29725
+ renderObjectField: (name, props) => /* @__PURE__ */ jsx(NodeInputValue, {
29726
+ ...input({
29727
+ handle: handle(name),
29728
+ jsonSchema: props.schema,
29729
+ nullable: true
29730
+ }, parameters.mode === "fields" ? entries[handle(name)] : void 0, name),
29731
+ label: props.label,
29732
+ value: parameters.mode === "fields" ? entries[handle(name)]?.value : values[name],
29733
+ presentation: props,
29734
+ onValue: (value) => onEdit({
29735
+ kind: "fields",
29736
+ value: {
29737
+ ...values,
29738
+ [name]: value ?? null
29739
+ },
29740
+ field: name
29741
+ })
29742
+ })
29743
+ }
29744
+ })
29745
+ })] });
29746
+ }
29747
+ //#endregion
29748
+ //#region src/workbench/browser/runtime/editor/httpRequestSection.tsx
29749
+ function HttpRequestSection({ task, disabled, onSave, parameters, input }) {
29750
+ const t = useTranslate();
29751
+ const id = useId();
29752
+ const saveRef = useRef(onSave);
29753
+ saveRef.current = onSave;
29754
+ const taskRef = useRef(task);
29755
+ taskRef.current = task;
29756
+ const [changes] = useState(() => new TaskExecutorChanges(task.executor, (before, next) => {
29757
+ if (before.kind != "http-request" || next.kind != "http-request") return Promise.resolve(false);
29758
+ const current = taskRef.current;
29759
+ if (current.executor.kind !== "http-request") return Promise.resolve(false);
29760
+ const merged = { ...current.executor };
29761
+ for (const key of [
29762
+ "method",
29763
+ "authentication",
29764
+ "bodyFormat",
29765
+ "responseFormat",
29766
+ "statusPolicy"
29767
+ ]) if (!dequal(before[key], next[key])) Object.assign(merged, { [key]: next[key] });
29768
+ return saveRef.current(current, httpRequestTask(merged, current.name, current));
29769
+ }));
29770
+ const [config, setConfig] = useState(changes.value);
29771
+ const [failed, setFailed] = useState(false);
29772
+ useEffect(() => {
29773
+ changes.sync(task.executor);
29774
+ setConfig(changes.value);
29775
+ }, [changes, task.executor]);
29776
+ if (config.kind != "http-request") return null;
29777
+ const issues = httpRequestIssues(config);
29778
+ const error = (field, index) => {
29779
+ const messages = issues.filter((issue) => issue.field === field && issue.index === index).map((issue) => t(`httpRequest.${issue.code}`));
29780
+ return messages.length ? [...new Set(messages)].join(" ") : void 0;
29781
+ };
29782
+ async function save() {
29783
+ try {
29784
+ setFailed(!await changes.save());
29785
+ } catch {
29786
+ setFailed(true);
29787
+ }
29788
+ }
29789
+ function update(patch) {
29790
+ if (disabled || changes.value.kind != "http-request") return;
29791
+ changes.value = {
29792
+ ...changes.value,
29793
+ ...patch
29794
+ };
29795
+ setConfig(changes.value);
29796
+ save();
29797
+ }
29798
+ const select = (key, value, options, change, fieldLabel = t(`httpRequest.${key}`)) => /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, {
29799
+ htmlFor: `${id}-${key}`,
29800
+ children: fieldLabel
29801
+ }), /* @__PURE__ */ jsx(ValueEditorFeedback, {
29802
+ error: key === "authentication" && config.authentication.type === "apiKey" ? void 0 : error(key),
29803
+ children: (errorId) => /* @__PURE__ */ jsx(NativeSelect, {
29804
+ className: "w-full",
29805
+ id: `${id}-${key}`,
29806
+ value,
29807
+ disabled,
29808
+ "aria-invalid": !!errorId,
29809
+ "aria-describedby": errorId,
29810
+ onChange: (event) => change(event.target.value),
29811
+ children: options.map(([optionValue, label]) => /* @__PURE__ */ jsx(NativeSelectOption, {
29812
+ value: optionValue,
29813
+ children: label
29814
+ }, optionValue))
29815
+ })
29816
+ })] }, key);
29817
+ const auth = config.authentication;
29818
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
29819
+ /* @__PURE__ */ jsx(InspectorSection, {
29820
+ title: t("httpRequest.title"),
29821
+ "data-inspector-section": "task",
29822
+ children: /* @__PURE__ */ jsxs("div", {
29823
+ className: "node-settings flex flex-col gap-3",
29824
+ "data-value-editor-scope": true,
29825
+ children: [
29826
+ input("url", "URL"),
29827
+ select("method", config.method, [
29828
+ "GET",
29829
+ "POST",
29830
+ "PUT",
29831
+ "PATCH",
29832
+ "DELETE",
29833
+ "HEAD",
29834
+ "OPTIONS"
29835
+ ].map((value) => [value, value]), (method) => update({ method })),
29836
+ parameters,
29837
+ select("bodyFormat", config.bodyFormat, [
29838
+ ["none", t("httpRequest.none")],
29839
+ ["json", "JSON"],
29840
+ ["text", t("httpRequest.text")],
29841
+ ["form", "URL-encoded"]
29842
+ ], (bodyFormat) => update({ bodyFormat })),
29843
+ config.bodyFormat !== "none" && input("body", t("httpRequest.body"))
29844
+ ]
29845
+ })
29846
+ }),
29847
+ /* @__PURE__ */ jsx(InspectorSection, {
29848
+ title: t("httpRequest.authentication"),
29849
+ children: /* @__PURE__ */ jsxs("div", {
29850
+ className: "node-settings flex flex-col gap-3",
29851
+ "data-value-editor-scope": true,
29852
+ children: [
29853
+ select("authentication", auth.type, [
29854
+ ["none", t("httpRequest.none")],
29855
+ ["bearer", "Bearer"],
29856
+ ["basic", "Basic"],
29857
+ ["apiKey", "API Key"]
29858
+ ], (type) => update({ authentication: type == "apiKey" ? {
29859
+ type,
29860
+ name: "X-API-Key",
29861
+ in: "header"
29862
+ } : { type } }), t("httpRequest.authenticationType")),
29863
+ auth.type == "apiKey" && /* @__PURE__ */ jsxs(Fragment$1, { children: [select("location", auth.in, [["header", "Header"], ["query", "Query"]], (location) => update({ authentication: {
29864
+ ...auth,
29865
+ in: location
29866
+ } })), /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, {
29867
+ htmlFor: `${id}-keyName`,
29868
+ children: t("httpRequest.keyName")
29869
+ }), /* @__PURE__ */ jsx(ValueEditorFeedback, {
29870
+ error: error("authentication"),
29871
+ children: (errorId) => /* @__PURE__ */ jsx(Input, {
29872
+ id: `${id}-keyName`,
29873
+ value: auth.name,
29874
+ "aria-invalid": !!errorId,
29875
+ "aria-describedby": errorId,
29876
+ readOnly: disabled,
29877
+ onChange: (event) => update({ authentication: {
29878
+ ...auth,
29879
+ name: event.target.value
29880
+ } })
29881
+ })
29882
+ })] })] }),
29883
+ auth.type === "basic" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [input("auth.username", t("httpRequest.username")), input("auth.password", t("httpRequest.password"))] }) : auth.type !== "none" ? input("auth.token", auth.type === "apiKey" ? t("httpRequest.keyValue") : "Token") : null
29884
+ ]
29885
+ })
29886
+ }),
29887
+ /* @__PURE__ */ jsx(InspectorSection, {
29888
+ title: t("httpRequest.responseSettings"),
29889
+ children: /* @__PURE__ */ jsxs("div", {
29890
+ className: "node-settings flex flex-col gap-3",
29891
+ "data-value-editor-scope": true,
29892
+ children: [
29893
+ select("responseFormat", config.responseFormat, [
29894
+ ["auto", t("httpRequest.auto")],
29895
+ ["json", "JSON"],
29896
+ ["text", t("httpRequest.text")]
29897
+ ], (responseFormat) => update({ responseFormat })),
29898
+ select("statusPolicy", config.statusPolicy, [["success", t("httpRequest.success")], ["all", t("httpRequest.all")]], (statusPolicy) => update({ statusPolicy })),
29899
+ failed && /* @__PURE__ */ jsx(ValueEditorFeedback, {
29900
+ error: t("httpRequest.saveFailed"),
29901
+ children: (errorId) => /* @__PURE__ */ jsx(Button$1, {
29902
+ variant: "outline",
29903
+ size: "field",
29904
+ "aria-invalid": true,
29905
+ "aria-describedby": errorId,
29906
+ disabled,
29907
+ onClick: () => void save(),
29908
+ children: t("httpRequest.retry")
29909
+ })
29910
+ })
29911
+ ]
29912
+ })
29913
+ })
29914
+ ] });
29915
+ }
29916
+ //#endregion
29564
29917
  //#region src/workbench/browser/runtime/editor/leinaBotSelect.tsx
29565
29918
  function LeinaBotSelect({ source, flowId, value, disabled, onChange }) {
29566
29919
  const t = useTranslate();
@@ -30392,9 +30745,9 @@ function OpenApiSection({ task, disabled, load, onSave, credentials }) {
30392
30745
  })]
30393
30746
  })]
30394
30747
  })
30395
- })] }), selectedServer != null && Object.entries(object(selectedServer.variables ?? {})).map(([name, definition]) => /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: name }), /* @__PURE__ */ jsx(Input, {
30748
+ })] }), selectedServer != null && Object.entries(object$1(selectedServer.variables ?? {})).map(([name, definition]) => /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: name }), /* @__PURE__ */ jsx(Input, {
30396
30749
  "aria-label": name,
30397
- value: serverVariables[name] ?? String(object(definition).default ?? ""),
30750
+ value: serverVariables[name] ?? String(object$1(definition).default ?? ""),
30398
30751
  disabled,
30399
30752
  onChange: (event) => setServerVariables({
30400
30753
  ...serverVariables,
@@ -31595,7 +31948,7 @@ function WebhookHeadersEditor({ options, outputs, disabled, readOnly, sourceDisa
31595
31948
  onDraftIssue: ignoreDraft,
31596
31949
  valueAddon: source(),
31597
31950
  editor: whole == null ? void 0 : selected(whole.output, issue("/responseHeadersSource")),
31598
- validateObjectFieldName: (name, current) => webhookHeaderNameIssue(name, Object.keys(headers).filter((candidate) => candidate !== current)) == null,
31951
+ validateObjectFieldName: (name, current) => httpHeaderNameIssue(name, Object.keys(headers).filter((candidate) => candidate !== current)) == null,
31599
31952
  renderObjectField: (name, props) => {
31600
31953
  const reference = binding(name);
31601
31954
  return /* @__PURE__ */ jsx(FieldValueEditor, {
@@ -32098,7 +32451,7 @@ function WebhookResponseEditor({ entries, disabled, readOnly, variables, renderS
32098
32451
  hideValueTools: true,
32099
32452
  hideChildTypes: true,
32100
32453
  expansionPolicy: expanded,
32101
- validateObjectFieldName: (next, current) => webhookHeaderNameIssue(next, Object.keys(value != null && typeof value === "object" && !Array.isArray(value) ? value : {}).filter((key) => key !== current)) == null
32454
+ validateObjectFieldName: (next, current) => httpHeaderNameIssue(next, Object.keys(value != null && typeof value === "object" && !Array.isArray(value) ? value : {}).filter((key) => key !== current)) == null
32102
32455
  } : { hideOptions: true }
32103
32456
  });
32104
32457
  return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), headers ? /* @__PURE__ */ jsx(FieldTable, {
@@ -32125,7 +32478,7 @@ function inspectorIcon(node) {
32125
32478
  if (node?.kind == "task" && node.definition != null && "executor" in node.definition) {
32126
32479
  if (node.definition.executor.kind == "decision") return "decision";
32127
32480
  if (node.definition.executor.kind == "workflow") return "flow";
32128
- if (node.definition.executor.kind == "openapi") return "task";
32481
+ if (node.definition.executor.kind == "openapi" || node.definition.executor.kind == "http-request") return "task";
32129
32482
  return node.definition.executor.kind == "connector" ? "connection" : "llm";
32130
32483
  }
32131
32484
  return "task";
@@ -32158,6 +32511,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
32158
32511
  case "agent": return t("addNode.agentDescription");
32159
32512
  case "decision": return t("decision.description");
32160
32513
  case "workflow": return t("workflow.description");
32514
+ case "http-request": return t("httpRequest.description");
32161
32515
  case "openapi": return t("openapi.description");
32162
32516
  case "connector": return action?.description;
32163
32517
  case "llm": return t(definition.executor.mode == "json" ? "addNode.llmStructuredDescription" : "addNode.llmChatDescription");
@@ -32165,7 +32519,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
32165
32519
  }
32166
32520
  }
32167
32521
  }
32168
- function inputUpstreamSources({ revision, sourceNodeIcons, selection, store, handleName, t, triggerDisplays }) {
32522
+ function inputUpstreamSources({ revision, sourceNodeIcons, selection, store, handleName, port, t, triggerDisplays }) {
32169
32523
  const graph = revision.graph();
32170
32524
  const mapping = revision.inputMappings(selection.node)[handleName];
32171
32525
  const sources = mapping?.kind == "sources" ? mapping.sources.filter((source) => source.kind == "node") : [];
@@ -32184,7 +32538,10 @@ function inputUpstreamSources({ revision, sourceNodeIcons, selection, store, han
32184
32538
  check: void 0
32185
32539
  };
32186
32540
  }),
32187
- query: revision.inputSource(selection.id, handleName),
32541
+ query: port == null ? revision.inputSource(selection.id, handleName) : {
32542
+ ...revision.inputSource(selection.id, handleName),
32543
+ candidates: () => inputSourceCandidates(graph, selection.id, handleName, port)
32544
+ },
32188
32545
  groups: [],
32189
32546
  describeGroups: (candidates) => Object.entries(candidates).map(([nodeId, outputs]) => {
32190
32547
  const node = graph.nodes[nodeId];
@@ -32227,6 +32584,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
32227
32584
  const task = selection?.kind == "task" ? selection.definition : void 0;
32228
32585
  const isAgent = task != null && "executor" in task && task.executor.kind == "agent";
32229
32586
  const isDecision = task != null && "executor" in task && task.executor.kind == "decision";
32587
+ const isHttpRequest = task != null && "executor" in task && task.executor.kind == "http-request";
32230
32588
  const isOpenApi = task != null && "executor" in task && task.executor.kind == "openapi";
32231
32589
  const unconfiguredWorkflow = task != null && "executor" in task && task.executor.kind == "workflow" && !task.executor.flowId;
32232
32590
  const unconfiguredOpenApi = task != null && "executor" in task && task.executor.kind == "openapi" && !task.executor.path;
@@ -32500,6 +32858,84 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
32500
32858
  actions: workflowActions,
32501
32859
  list: (signal) => store.listWorkflowTargets(signal)
32502
32860
  }, `workflow:${selection?.id}`),
32861
+ isHttpRequest && task != null && "executor" in task && /* @__PURE__ */ jsx(HttpRequestSection, {
32862
+ task,
32863
+ disabled,
32864
+ input: (handle, label) => {
32865
+ if (selection?.kind !== "task") return null;
32866
+ const definition = task.inputs.find((port) => "handle" in port && port.handle === handle);
32867
+ if (definition == null) return null;
32868
+ const mapping = revision.inputMappings(selection.node)[handle];
32869
+ const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
32870
+ const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
32871
+ return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(NodeInputValue, {
32872
+ embedded: true,
32873
+ definition,
32874
+ label,
32875
+ presentation: {
32876
+ compact: true,
32877
+ hideOptions: true
32878
+ },
32879
+ sourceOnly: handle.startsWith("auth."),
32880
+ readOnly,
32881
+ disabled,
32882
+ value: inputValue(mapping, definition.value),
32883
+ connected: mapping?.kind === "sources" && binding?.kind !== "variable",
32884
+ variableName: binding?.kind === "variable" ? binding.target : void 0,
32885
+ upstream: inputUpstreamSources({
32886
+ revision,
32887
+ sourceNodeIcons,
32888
+ selection,
32889
+ store,
32890
+ handleName: handle,
32891
+ t,
32892
+ triggerDisplays
32893
+ }),
32894
+ variables,
32895
+ onValue: (value, deletion) => {
32896
+ store?.nodes.setInputValue(selection.id, handle, value, deletion);
32897
+ },
32898
+ onVariable: (name) => {
32899
+ store?.nodes.setInputVariable(selection.id, handle, name);
32900
+ }
32901
+ })] }, handle);
32902
+ },
32903
+ parameters: selection?.kind === "task" && ["query", "headers"].map((group) => /* @__PURE__ */ jsx(HttpParameterEditor, {
32904
+ group,
32905
+ task,
32906
+ entries: Object.fromEntries(Object.entries(revision.inputMappings(selection.node)).map(([handle, mapping]) => {
32907
+ const source = mapping.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
32908
+ const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
32909
+ return [handle, {
32910
+ value: inputValue(mapping, void 0),
32911
+ connected: mapping.kind === "sources" && binding?.kind !== "variable",
32912
+ variableName: binding?.kind === "variable" ? binding.target : void 0
32913
+ }];
32914
+ })),
32915
+ variables,
32916
+ disabled,
32917
+ readOnly,
32918
+ renderSource: (handleName, port) => inputUpstreamSources({
32919
+ revision,
32920
+ sourceNodeIcons,
32921
+ selection,
32922
+ store,
32923
+ handleName,
32924
+ port,
32925
+ t,
32926
+ triggerDisplays
32927
+ }),
32928
+ onEdit: (edit) => {
32929
+ store?.nodes.saveHttpParameters(selection.id, group, edit);
32930
+ }
32931
+ }, group)),
32932
+ onSave: (before, value) => store?.nodes.saveTaskSettings(selection.id, {
32933
+ kind: "http-request",
32934
+ name: task.name,
32935
+ before,
32936
+ task: value
32937
+ }) ?? Promise.resolve(false)
32938
+ }, `http:${selection?.id}`),
32503
32939
  isOpenApi && task != null && "executor" in task && /* @__PURE__ */ jsx(OpenApiSection, {
32504
32940
  task,
32505
32941
  credentials: (onInvalidChange) => selection?.kind === "task" && task.inputs.filter((port) => "handle" in port && port.handle.startsWith("auth.")).map((definition) => {
@@ -32548,7 +32984,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
32548
32984
  task: value
32549
32985
  }) ?? Promise.resolve(false)
32550
32986
  }, `openapi:${selection?.id}`),
32551
- !unconfiguredOpenApi && !unconfiguredWorkflow && (selection?.kind === "outputs" || selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
32987
+ !isHttpRequest && !unconfiguredOpenApi && !unconfiguredWorkflow && (selection?.kind === "outputs" || selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
32552
32988
  const definitions = selection.kind === "outputs" ? [...selection.node.outputDefs] : selection.kind === "task" ? [...selection.definition?.inputs ?? []] : [...selection.node.inputDefinitions];
32553
32989
  const handles = new Set(definitions.flatMap((definition) => "handle" in definition ? [definition.handle] : []));
32554
32990
  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({
@@ -32567,6 +33003,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
32567
33003
  const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
32568
33004
  return {
32569
33005
  definition,
33006
+ sourceOnly: isHttpRequest && definition.handle.startsWith("auth."),
32570
33007
  editor: !readOnly && connectors != null && connector?.action == "leina.send_notification" && definition.handle == "leinaId" && mapping?.kind != "sources" ? /* @__PURE__ */ jsx(LeinaBotSelect, {
32571
33008
  source: connectors,
32572
33009
  flowId: revision.revision.flowId,
@@ -32714,7 +33151,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
32714
33151
  readOnly,
32715
33152
  groups: true,
32716
33153
  layout: "ports",
32717
- title: t("inspector.ports.outputsTitle"),
33154
+ title: t(isHttpRequest ? "httpRequest.responseOutputs" : "inspector.ports.outputsTitle"),
32718
33155
  output: true,
32719
33156
  values: presentDecisionOutputs(selection.definition, t),
32720
33157
  disabled: disabled || !("moduleId" in selection.node.task || isAgent),
@@ -37221,6 +37658,7 @@ function WorkspaceDiagnosticsIsland({ checking, items, nodes, onOpenChange, onRe
37221
37658
  }), /* @__PURE__ */ jsxs(PopoverContent, {
37222
37659
  align: "end",
37223
37660
  className: "diagnostics-popover nodrag nopan",
37661
+ "data-canvas-control-scope": true,
37224
37662
  container: popupContainer,
37225
37663
  side: "bottom",
37226
37664
  sideOffset: 8,