@burdenoff/fluidgrids-fe-sdk 2026.1111.7 → 2026.1111.9

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 (42) hide show
  1. package/dist/{ExecutionDetailPage-DoxxG0b1.js → ExecutionDetailPage-bhdyEtzU.js} +9 -9
  2. package/dist/{FailureTriagePanel-BqRG9qxu.js → FailureTriagePanel-D4knfH8i.js} +1 -1
  3. package/dist/{FluidGridsProvider-_Nc4kFsk.js → FluidGridsProvider-CGu1DfIa.js} +38 -9
  4. package/dist/{HistoryPage-joRHOTwx.js → HistoryPage-DzNRgeBL.js} +3 -3
  5. package/dist/{InsightsPage-BRkCoTkd.js → InsightsPage-BWly1n0F.js} +4 -4
  6. package/dist/{ManagedAiPolicyAuthority-Dm1Yi75K.js → ManagedAiPolicyAuthority-DHRJTAea.js} +6 -6
  7. package/dist/{MissingNodesInstallModal-CdvMiEN_.js → MissingNodesInstallModal-DUTpT0Bx.js} +2 -2
  8. package/dist/{NodesPage-bYLDn1Jp.js → NodesPage-Cp11Xnmg.js} +2 -2
  9. package/dist/{PublishCustomNodeAction-DS71F2-x.js → PublishCustomNodeAction-Bdgdkxf_.js} +1 -1
  10. package/dist/{TemplateConfigurationModal-C2CNNLte.js → TemplateConfigurationModal-Bp6yWmDU.js} +2 -2
  11. package/dist/{TemplateDetailPanel-DLe16zdY.js → TemplateDetailPanel-DvoZhgGU.js} +2 -2
  12. package/dist/{TemplatesPage-8J86X9lY.js → TemplatesPage-B29rhriw.js} +5 -5
  13. package/dist/{VersionDiffDialog--pbvNYM3.js → VersionDiffDialog-C6sKSLQJ.js} +1 -1
  14. package/dist/{WorkflowProposalCard-ADSfSaKK.js → WorkflowProposalCard-Bu3Y8Blm.js} +1 -1
  15. package/dist/{WorkflowSearchRedirect-CpmX2vSG.js → WorkflowSearchRedirect-_DGtocE_.js} +10 -10
  16. package/dist/{WorkflowShareDialog-CNg_qWNL.js → WorkflowShareDialog-CPUkd7CL.js} +2 -2
  17. package/dist/{WorkflowsList-DOhUHH4j.js → WorkflowsList-C5NllPOu.js} +5 -5
  18. package/dist/{agent-form-D25lAEWg.js → agent-form-L-gYYgLb.js} +1 -1
  19. package/dist/{agentTools-CBqnXeop.js → agentTools-BkeiRiqS.js} +2 -2
  20. package/dist/{codec-client-Cz_myeH8.js → codec-client-C_eJuWkT.js} +1 -1
  21. package/dist/executions.js +1 -1
  22. package/dist/{flow-builder-BkD07RI7.js → flow-builder-khQcrBqv.js} +75 -42
  23. package/dist/history.js +1 -1
  24. package/dist/{index-BQ5tXKOZ.d.ts → index-Cy9jNjgY.d.ts} +20 -1
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.js +24 -24
  27. package/dist/{node-detail-view-COi4XrCg.js → node-detail-view-JNWAYrZS.js} +6 -6
  28. package/dist/{node-endpoint-configs-DW1ZSZZI.js → node-endpoint-configs-n4xr62e4.js} +182 -1
  29. package/dist/nodes.js +1 -1
  30. package/dist/observability.d.ts +1 -1
  31. package/dist/observability.js +1 -1
  32. package/dist/{quick-config-panel-DQ04YDLl.js → quick-config-panel-Ciz0hFx7.js} +2 -2
  33. package/dist/settings.js +1 -1
  34. package/dist/templates.js +1 -1
  35. package/dist/{useAgentDefinitions-DQqibfr4.js → useAgentDefinitions-D8Q-GkM7.js} +1 -1
  36. package/dist/{useExecutions-RFROujCH.js → useExecutions-nrxmx5sw.js} +2 -2
  37. package/dist/{useObservability-QPQRRmAZ.js → useObservability-D7v6zupc.js} +2 -2
  38. package/dist/{useRunHistory-BDOic15z.js → useRunHistory-D-RieQFM.js} +2 -2
  39. package/dist/{useWorkflows-DNIgOcAG.js → useWorkflows-DTJbPdQM.js} +2 -2
  40. package/dist/workflow-builder.js +2 -2
  41. package/dist/workflows-list.js +1 -1
  42. package/package.json +1 -1
@@ -1,19 +1,19 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { A as nodeAccent, B as NODE_TYPE_DRAG_DATA_FORMAT, G as isTriggerOperation, H as useFlowStore, M as isImageIcon, T as resolveInputHandles, U as useIsValidConnection, V as STICKY_NOTE_TYPE, g as toCodeMirrorDiagnostics, j as NodeTypeIcon, r as CODE_WORKFLOW_NODE_TYPE, z as NODE_OPERATION_DRAG_DATA_FORMAT } from "./node-operation-selection--oy-yEq_.js";
4
- import { $ as resolveLoadOptionsSpec, $n as useWorkflowTestsEnabled, $t as useNodeExecution, A as UninstallWorkflowNodeDocument, At as bannerOf, B as coerceNumber, Bn as FLUIDGRIDS_FLAGS, Bt as forgetSessionForReload, C as InstallOrganizationPrivateNodeDocument, Cn as RUNS_QUOTA_NAME, D as OrganizationPrivateNodesDocument, Dt as useSaveStatusStore, Et as saveIndicatorOf, F as useInsertNode, Ft as phaseAfterTakeOver, G as paramsFromOperation, Gt as AUTOSAVE_DEBOUNCE_MS, H as nodeSubtitle, Ht as sessionBeforeReload, I as MissingParametersDialog, It as releasesOnClose, Jn as useFluidGridsFlag, Kn as useDurableFunctionNodesEnabled, Kt as AUTOSAVE_RETRY_DELAYS_MS, L as useRunGuard, Lt as shouldReleaseForIdle, M as getNodeMetadata, Mt as leaseCallQueue, N as buildOperationSeed, Nt as leaseCallSequence, On as useCanvasEdges, Ot as useEditLeaseLocked, Pt as phaseAfterAcquire, Q as optionListValues, Qt as workflowFingerprint, R as workflowParameterIssues, Rt as tickAction, S as GetNodeInstallableVersionsDocument, Sn as BILLING_PLANS_PATH, T as InstallWorkflowNodeDocument, Tn as collectExtensions, Tt as refusalOfQuota, U as nodeTitle, Ut as rememberOwnStatusChange, Vt as rememberSessionForReload, W as optionText, Wt as rememberRevision, X as isStringOptionList, Xn as usePaletteGates, Xt as inAppLeaveTarget, Z as optionListText, Zn as usePhaseCFlags, Zt as saveFailureActionOf, _n as emitWorkflowCreated, _t as watchLeavingLosesChanges, a as NODES_METADATA, an as structuredParameterType, ar as getNodeDetail, b as CreateStoreOrderDocument, bt as useSaveWorkflow, c as ensureNodeConfigsLoaded, cn as isParamVisible, cr as useBuilderReadOnly, ct as useGuardedNavigate, d as onNodeTypesUpdate, dn as emitNodeInstalled, dt as departingSave, er as connectionsForAdapter, et as ConditionTreeBuilder, f as refetchStoreNodes, ft as editStateFor, g as scheduleNodePaletteLoad, gn as emitUpgradeClicked, gt as touchesSavedFields, hn as emitTemplateUsed, ht as savedEverythingBeforeLeaving, i as AVAILABLE_NODES, in as parseParameterValue, ir as replaceAdapterConnections, it as parseMappingValue, jn as loadDefinitionJson, jt as isLocked, k as UninstallOrganizationPrivateNodeDocument, kn as useNodeRegistryRevision, kt as useEditLeaseStore, l as ensureNodeTypesLoaded, ln as useFluidGridsAnalytics, lt as useManualSave, m as registerWorkflowNodeTypes, mt as leavingLosesChanges, nr as matchesAdapterProvider, nt as casesFromRules, o as NODE_CONFIGS, or as buildStickyNode, ot as boundFieldsOf, pt as editingLeaseLocked, q as useNodeConfig, qn as useDurableParityEnabled, qt as canAutosave, rn as formatParameterValue, rr as newConnectionProviderKey, rt as FieldTree, s as NODE_TYPES, sr as BuilderReadOnlyProvider, st as missingRequiredParameters, t as FluidGridsContext, tr as isOptionalAdapter, tt as SwitchRulesEditor, u as isNodeConfigsInitialized, un as openRunQuotaUpgradePrompt, ur as getGlobalStoreClient, ut as autosaveAllowedFor, v as BrowseWorkflowNodesDocument, vt as isFlowComplete, w as InstallPurchasedNodeDocument, x as GetMyNodeInstallationsDocument, y as BrowseWorkflowTemplatesDocument, yt as useFlowValidator, z as asRecord, zt as EDIT_SESSION_ID } from "./FluidGridsProvider-_Nc4kFsk.js";
4
+ import { $ as resolveLoadOptionsSpec, $n as useWorkflowTestsEnabled, $t as useNodeExecution, A as UninstallWorkflowNodeDocument, At as bannerOf, B as coerceNumber, Bn as FLUIDGRIDS_FLAGS, Bt as forgetSessionForReload, C as InstallOrganizationPrivateNodeDocument, Cn as RUNS_QUOTA_NAME, D as OrganizationPrivateNodesDocument, Dt as useSaveStatusStore, Et as saveIndicatorOf, F as useInsertNode, Ft as phaseAfterTakeOver, G as paramsFromOperation, Gt as AUTOSAVE_DEBOUNCE_MS, H as nodeSubtitle, Ht as sessionBeforeReload, I as MissingParametersDialog, It as releasesOnClose, Jn as useFluidGridsFlag, Kn as useDurableFunctionNodesEnabled, Kt as AUTOSAVE_RETRY_DELAYS_MS, L as useRunGuard, Lt as shouldReleaseForIdle, M as getNodeMetadata, Mt as leaseCallQueue, N as buildOperationSeed, Nt as leaseCallSequence, On as useCanvasEdges, Ot as useEditLeaseLocked, Pt as phaseAfterAcquire, Q as optionListValues, Qt as workflowFingerprint, R as workflowParameterIssues, Rt as tickAction, S as GetNodeInstallableVersionsDocument, Sn as BILLING_PLANS_PATH, T as InstallWorkflowNodeDocument, Tn as collectExtensions, Tt as refusalOfQuota, U as nodeTitle, Ut as rememberOwnStatusChange, Vt as rememberSessionForReload, W as optionText, Wt as rememberRevision, X as isStringOptionList, Xn as usePaletteGates, Xt as inAppLeaveTarget, Z as optionListText, Zn as usePhaseCFlags, Zt as saveFailureActionOf, _n as emitWorkflowCreated, _t as watchLeavingLosesChanges, a as NODES_METADATA, an as structuredParameterType, ar as getNodeDetail, b as CreateStoreOrderDocument, bt as useSaveWorkflow, c as ensureNodeConfigsLoaded, cn as isParamVisible, cr as useBuilderReadOnly, ct as useGuardedNavigate, d as onNodeTypesUpdate, dn as emitNodeInstalled, dt as departingSave, er as connectionsForAdapter, et as ConditionTreeBuilder, f as refetchStoreNodes, ft as editStateFor, g as scheduleNodePaletteLoad, gn as emitUpgradeClicked, gt as touchesSavedFields, hn as emitTemplateUsed, ht as savedEverythingBeforeLeaving, i as AVAILABLE_NODES, in as parseParameterValue, ir as replaceAdapterConnections, it as parseMappingValue, jn as loadDefinitionJson, jt as isLocked, k as UninstallOrganizationPrivateNodeDocument, kn as useNodeRegistryRevision, kt as useEditLeaseStore, l as ensureNodeTypesLoaded, ln as useFluidGridsAnalytics, lt as useManualSave, m as registerWorkflowNodeTypes, mt as leavingLosesChanges, nr as matchesAdapterProvider, nt as casesFromRules, o as NODE_CONFIGS, or as buildStickyNode, ot as boundFieldsOf, pt as editingLeaseLocked, q as useNodeConfig, qn as useDurableParityEnabled, qt as canAutosave, rn as formatParameterValue, rr as newConnectionProviderKey, rt as FieldTree, s as NODE_TYPES, sr as BuilderReadOnlyProvider, st as missingRequiredParameters, t as FluidGridsContext, tr as isOptionalAdapter, tt as SwitchRulesEditor, u as isNodeConfigsInitialized, un as openRunQuotaUpgradePrompt, ur as getGlobalStoreClient, ut as autosaveAllowedFor, v as BrowseWorkflowNodesDocument, vt as isFlowComplete, w as InstallPurchasedNodeDocument, x as GetMyNodeInstallationsDocument, y as BrowseWorkflowTemplatesDocument, yt as useFlowValidator, z as asRecord, zt as EDIT_SESSION_ID } from "./FluidGridsProvider-CGu1DfIa.js";
5
5
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
6
- import { An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, Bi as describeOperationError, Bn as TakeOverWorkflowEditLeaseDocument, Cr as WorkflowCallInputsDocument, Ct as LinkWorkflowGitRepositoryDocument, Er as WorkflowDefinitionDocument, Fr as WorkflowGenerationTemplatesDocument, Ht as PreviewScheduleDocument, Ir as WorkflowGitCommitsDocument, J as DeleteWorkflowRolloutDocument, Kt as PushWorkflowToGitDocument, Li as emitFluidGridsEvent, Lr as WorkflowGitDiffDocument, Mr as WorkflowEnvironmentsDocument, Mt as NodeSchemaIntrospectionDocument, Ni as waitForFluidGridsClient, Oi as getFluidGridsClient, Pt as NodeUsageStatusDocument, Qt as RemoveNodeFromWorkflowsDocument, Rn as StopWebhookTestListenerDocument, Rr as WorkflowGitPushesDocument, Ti as WorkspaceRunsQuotaDocument, Ui as throwIfResultError, Ur as WorkflowPromotionRequestsDocument, Yn as UnlinkWorkflowGitRepositoryDocument, Yt as RejectWorkflowPromotionDocument, Z as DeployWorkflowVersionToDevDocument, Zt as ReleaseWorkflowEditLeaseDocument, bi as WorkflowVersionDrainageDocument, i as ActivateWorkflowVersionCheckedDocument, ki as getFluidGridsClientSafe, n as AcquireWorkflowEditLeaseDocument, nn as RequestWorkflowPromotionDocument, on as RestoreWorkflowFromGitDocument, pr as WebhookTestListenerDocument, qi as getFluidGridsConfig, sr as UpdateWorkflowEnvironmentPolicyDocument, u as ApproveWorkflowPromotionDocument, vr as WorkflowAuthoringDocument, wt as ListenForWebhookTestEventDocument, x as CancelWorkflowPromotionDocument, xi as WorkflowVersioningDocument, zr as WorkflowGitRepositoryDocument } from "./node-endpoint-configs-DW1ZSZZI.js";
7
- import { D as describeSchedule, H as pauseSchedule, _ as useResource, c as FieldError, d as NativeSelect, et as triggerSchedule, nt as unpauseSchedule, p as StatusPill, r as describeRule, s as isAgentNodeType, v as backfillSchedule } from "./agent-form-D25lAEWg.js";
6
+ import { Ai as getFluidGridsClientSafe, Br as WorkflowGitRepositoryDocument, Ct as LinkWorkflowGitRepositoryDocument, Dr as WorkflowDefinitionDocument, Ei as WorkspaceRunsQuotaDocument, Ht as PreviewScheduleDocument, Ir as WorkflowGenerationTemplatesDocument, J as DeleteWorkflowRolloutDocument, Ji as getFluidGridsConfig, Kt as PushWorkflowToGitDocument, Lr as WorkflowGitCommitsDocument, Mt as NodeSchemaIntrospectionDocument, Nr as WorkflowEnvironmentsDocument, Pi as waitForFluidGridsClient, Pt as NodeUsageStatusDocument, Qt as RemoveNodeFromWorkflowsDocument, Ri as emitFluidGridsEvent, Rr as WorkflowGitDiffDocument, Si as WorkflowVersioningDocument, Vi as describeOperationError, Vn as TakeOverWorkflowEditLeaseDocument, Wi as throwIfResultError, Wr as WorkflowPromotionRequestsDocument, Xn as UnlinkWorkflowGitRepositoryDocument, Yt as RejectWorkflowPromotionDocument, Z as DeployWorkflowVersionToDevDocument, Zt as ReleaseWorkflowEditLeaseDocument, cr as UpdateWorkflowEnvironmentPolicyDocument, i as ActivateWorkflowVersionCheckedDocument, jn as SetWorkflowRolloutDocument, jr as WorkflowEditLeaseDocument, ki as getFluidGridsClient, mr as WebhookTestListenerDocument, n as AcquireWorkflowEditLeaseDocument, nn as RequestWorkflowPromotionDocument, on as RestoreWorkflowFromGitDocument, u as ApproveWorkflowPromotionDocument, wr as WorkflowCallInputsDocument, wt as ListenForWebhookTestEventDocument, x as CancelWorkflowPromotionDocument, xi as WorkflowVersionDrainageDocument, yr as WorkflowAuthoringDocument, zn as StopWebhookTestListenerDocument, zr as WorkflowGitPushesDocument } from "./node-endpoint-configs-n4xr62e4.js";
7
+ import { D as describeSchedule, H as pauseSchedule, _ as useResource, c as FieldError, d as NativeSelect, et as triggerSchedule, nt as unpauseSchedule, p as StatusPill, r as describeRule, s as isAgentNodeType, v as backfillSchedule } from "./agent-form-L-gYYgLb.js";
8
8
  import { CF as WorkflowExportFormat, Eo as CodeReplaceStatus, PD as ScheduleType, QF as WorkflowTestExpectedStatus, SF as WorkflowEnvironment, VF as WorkflowScheduleOverlapPolicy, hI as FLUIDGRIDS_PERMISSIONS, vI as SdkPermissionButton, xI as useFluidGridsPermission, xu as DrainageStatus, yI as SdkPermissionGate, yP as VersioningBehavior } from "./graphql-types-XcDLtFwU.js";
9
- import { a as useConnections, r as useAgentsUsingConnection, t as useAgentDefinitionList, wt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-DQqibfr4.js";
10
- import { F as normaliseAssertRules, I as operatorSpec, L as readAssertRulesSetting, M as ASSERT_OPERATORS, N as describeAssertRuleProblem, P as emptyAssertRuleRow, R as rowsFromRules, _ as buildNodeDisplayMap, a as TEST_STATUS_TONE_CLASS, b as EntityTagPicker, c as draftToInput, d as isTestRunOpen, f as nextSortOrder, g as testStatusTone, h as testStatusLabel, i as useWorkflowTests, l as emptyTestCaseDraft, m as testRunSummaryText, n as useWorkflowProposal, p as pinnedOutputsFromCanvas, s as draftFromTestCase, t as WorkflowProposalCard, u as enabledCaseIds, z as ruleFromRow } from "./WorkflowProposalCard-ADSfSaKK.js";
9
+ import { a as useConnections, r as useAgentsUsingConnection, t as useAgentDefinitionList, wt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-D8Q-GkM7.js";
10
+ import { F as normaliseAssertRules, I as operatorSpec, L as readAssertRulesSetting, M as ASSERT_OPERATORS, N as describeAssertRuleProblem, P as emptyAssertRuleRow, R as rowsFromRules, _ as buildNodeDisplayMap, a as TEST_STATUS_TONE_CLASS, b as EntityTagPicker, c as draftToInput, d as isTestRunOpen, f as nextSortOrder, g as testStatusTone, h as testStatusLabel, i as useWorkflowTests, l as emptyTestCaseDraft, m as testRunSummaryText, n as useWorkflowProposal, p as pinnedOutputsFromCanvas, s as draftFromTestCase, t as WorkflowProposalCard, u as enabledCaseIds, z as ruleFromRow } from "./WorkflowProposalCard-Bu3Y8Blm.js";
11
11
  import { t as cn$1 } from "./cn-QqidFIgr.js";
12
- import { i as Button$2, t as PublishCustomNodeAction } from "./PublishCustomNodeAction-DS71F2-x.js";
13
- import { O as CreateWorkflowRefusalDialog, b as lineOfNode, h as fileBaseName, i as useWorkflowCodeExport, n as downloadWorkflowCodeExport, t as WorkflowShareDialog, v as isLosslessReport, w as sortFidelityItems, x as orderedExportFiles, y as isLossyFidelityItem } from "./WorkflowShareDialog-CNg_qWNL.js";
12
+ import { i as Button$2, t as PublishCustomNodeAction } from "./PublishCustomNodeAction-Bdgdkxf_.js";
13
+ import { O as CreateWorkflowRefusalDialog, b as lineOfNode, h as fileBaseName, i as useWorkflowCodeExport, n as downloadWorkflowCodeExport, t as WorkflowShareDialog, v as isLosslessReport, w as sortFidelityItems, x as orderedExportFiles, y as isLossyFidelityItem } from "./WorkflowShareDialog-CPUkd7CL.js";
14
14
  import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
15
- import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-DNIgOcAG.js";
16
- import { n as VersionLifecycleBar, r as countLifecycle, t as VersionDiffDialog } from "./VersionDiffDialog--pbvNYM3.js";
15
+ import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-DTJbPdQM.js";
16
+ import { n as VersionLifecycleBar, r as countLifecycle, t as VersionDiffDialog } from "./VersionDiffDialog-C6sKSLQJ.js";
17
17
  import { n as useRequestedProposal } from "./useRequestedProposal-B7uPXfZB.js";
18
18
  import { t as AiCreditBalanceSlot } from "./aiCreditsBridge-BuE92tKo.js";
19
19
  import * as React$1 from "react";
@@ -9224,6 +9224,33 @@ function storeContextHeaders(input) {
9224
9224
  return headers;
9225
9225
  }
9226
9226
 
9227
+ // src/hooks/store/store-pagination.ts
9228
+ /**
9229
+ * Paging rules for the builder's store node lists (BOFF-11753).
9230
+ *
9231
+ * `browseStore` pages by offset. Two "Load more" clicks in quick succession
9232
+ * used to fetch the same page twice and append both copies, and the next
9233
+ * offset was then taken from the row count including the copies, so the
9234
+ * nodes in between were skipped. These helpers keep every page merge
9235
+ * duplicate-free, which also keeps the offset (the number of distinct nodes
9236
+ * already shown) correct.
9237
+ */
9238
+ /** Appends `next` to `prev`, dropping any item whose id is already present. */
9239
+ function appendUniqueById(prev, next) {
9240
+ const seen = new Set(prev.map((item) => item.id));
9241
+ const merged = [...prev];
9242
+ for (const item of next) {
9243
+ if (seen.has(item.id)) continue;
9244
+ seen.add(item.id);
9245
+ merged.push(item);
9246
+ }
9247
+ return merged;
9248
+ }
9249
+ /** The offset of the next page: how many distinct nodes are already listed. */
9250
+ function nextStoreOffset(products) {
9251
+ return new Set(products.map((product) => product.id)).size;
9252
+ }
9253
+
9227
9254
  // src/hooks/store/useStoreNodes.ts
9228
9255
  /**
9229
9256
  * Hook to browse and search workflow nodes from the global store
@@ -9258,24 +9285,18 @@ function useStoreNodes(options = {}) {
9258
9285
  fetchPolicy: "cache-and-network",
9259
9286
  context: Object.keys(contextHeaders).length > 0 ? { headers: contextHeaders } : void 0
9260
9287
  });
9261
- console.log("[useStoreNodes] Hook state:", {
9262
- input,
9263
- data,
9264
- loading,
9265
- error,
9266
- hasData: !!data,
9267
- hasBrowseStore: !!data?.browseStore,
9268
- hasProducts: !!data?.browseStore?.products,
9269
- productsLength: data?.browseStore?.products?.length
9270
- });
9288
+ const loadingMoreRef = useRef(false);
9289
+ const [loadingMore, setLoadingMore] = useState(false);
9271
9290
  const handleFetchMore = () => {
9272
- if (!data?.browseStore?.hasMore) return;
9291
+ if (!data?.browseStore?.hasMore || loadingMoreRef.current) return;
9292
+ loadingMoreRef.current = true;
9293
+ setLoadingMore(true);
9273
9294
  fetchMore({
9274
9295
  variables: { input: {
9275
9296
  ...input,
9276
9297
  pagination: {
9277
9298
  ...input.pagination,
9278
- offset: data.browseStore.products.length
9299
+ offset: nextStoreOffset(data.browseStore.products)
9279
9300
  }
9280
9301
  } },
9281
9302
  context: Object.keys(contextHeaders).length > 0 ? { headers: contextHeaders } : void 0,
@@ -9285,10 +9306,13 @@ function useStoreNodes(options = {}) {
9285
9306
  ...fetchMoreResult,
9286
9307
  browseStore: {
9287
9308
  ...fetchMoreResult.browseStore,
9288
- products: [...prev.browseStore?.products || [], ...fetchMoreResult.browseStore?.products || []]
9309
+ products: appendUniqueById(prev.browseStore?.products || [], fetchMoreResult.browseStore?.products || [])
9289
9310
  }
9290
9311
  };
9291
9312
  }
9313
+ }).finally(() => {
9314
+ loadingMoreRef.current = false;
9315
+ setLoadingMore(false);
9292
9316
  });
9293
9317
  };
9294
9318
  return {
@@ -9296,6 +9320,8 @@ function useStoreNodes(options = {}) {
9296
9320
  totalCount: data?.browseStore?.totalCount || 0,
9297
9321
  hasMore: data?.browseStore?.hasMore || false,
9298
9322
  loading,
9323
+ /** True while a "Load more" page is being fetched. */
9324
+ loadingMore,
9299
9325
  error,
9300
9326
  fetchMore: handleFetchMore,
9301
9327
  refetch
@@ -10274,7 +10300,7 @@ function StoreCategoryList({ searchTerm, onSearchChange, onSelectCategory, onSel
10274
10300
  if (autoFocusSearch) searchRef.current?.focus();
10275
10301
  }, [autoFocusSearch]);
10276
10302
  const paletteGates = usePaletteGates();
10277
- const { products: storeProducts, loading, hasMore, fetchMore } = useStoreNodes({ filter: {
10303
+ const { products: storeProducts, loading, loadingMore, hasMore, fetchMore } = useStoreNodes({ filter: {
10278
10304
  type: "NODE",
10279
10305
  compatibleWith: "fluidgrids",
10280
10306
  search: isSearching ? searchTerm.trim() : void 0
@@ -10369,9 +10395,12 @@ function StoreCategoryList({ searchTerm, onSearchChange, onSelectCategory, onSel
10369
10395
  }, item.productId))]
10370
10396
  }),
10371
10397
  hasMore && /* @__PURE__ */ jsx("button", {
10398
+ type: "button",
10372
10399
  onClick: fetchMore,
10373
- className: "w-full mt-2 py-2 text-xs text-primary hover:text-primary/80 font-medium transition-colors",
10374
- children: tr("fluidgrids.builder.storeCategoryList.loadMoreButton", "Load more")
10400
+ disabled: loadingMore,
10401
+ "aria-busy": loadingMore,
10402
+ className: "w-full mt-2 py-2 text-xs text-primary hover:text-primary/80 font-medium transition-colors disabled:cursor-wait disabled:opacity-60",
10403
+ children: loadingMore ? tr("fluidgrids.builder.storeNodesGrid.loadingMore", "Loading...") : tr("fluidgrids.builder.storeCategoryList.loadMoreButton", "Load more")
10375
10404
  })
10376
10405
  ] })
10377
10406
  }) : showDeprecated ? /* @__PURE__ */ jsxs("div", {
@@ -10487,9 +10516,10 @@ function StoreCategoryList({ searchTerm, onSearchChange, onSelectCategory, onSel
10487
10516
 
10488
10517
  // src/builder/components/flow-builder/components/blocks/sidebar/panels/store-browse/components/store-category-nodes.tsx
10489
10518
  function StoreCategoryNodes({ category, onBack, onSelectNode }) {
10519
+ const tr = useTr();
10490
10520
  const [searchTerm, setSearchTerm] = useState("");
10491
10521
  const paletteGates = usePaletteGates();
10492
- const { products: storeProducts, loading, hasMore, fetchMore } = useStoreNodes({ filter: {
10522
+ const { products: storeProducts, loading, loadingMore, hasMore, fetchMore } = useStoreNodes({ filter: {
10493
10523
  type: "NODE",
10494
10524
  compatibleWith: "fluidgrids",
10495
10525
  category: category.key || void 0,
@@ -10508,7 +10538,7 @@ function StoreCategoryNodes({ category, onBack, onSelectNode }) {
10508
10538
  children: [/* @__PURE__ */ jsx(Icon, {
10509
10539
  icon: "mynaui:chevron-left",
10510
10540
  className: "size-3.5"
10511
- }), "Back"]
10541
+ }), tr("fluidgrids.builder.storeCategoryList.backButton", "Back")]
10512
10542
  }),
10513
10543
  /* @__PURE__ */ jsxs("div", {
10514
10544
  className: "flex items-center gap-2.5 mb-3",
@@ -10597,9 +10627,12 @@ function StoreCategoryNodes({ category, onBack, onSelectNode }) {
10597
10627
  }, node.id);
10598
10628
  }),
10599
10629
  hasMore && /* @__PURE__ */ jsx("button", {
10630
+ type: "button",
10600
10631
  onClick: fetchMore,
10601
- className: "w-full mt-2 py-2 text-xs text-primary hover:text-primary/80 font-medium transition-colors",
10602
- children: "Load more"
10632
+ disabled: loadingMore,
10633
+ "aria-busy": loadingMore,
10634
+ className: "w-full mt-2 py-2 text-xs text-primary hover:text-primary/80 font-medium transition-colors disabled:cursor-wait disabled:opacity-60",
10635
+ children: loadingMore ? tr("fluidgrids.builder.storeNodesGrid.loadingMore", "Loading...") : tr("fluidgrids.builder.storeCategoryList.loadMoreButton", "Load more")
10603
10636
  })
10604
10637
  ]
10605
10638
  })
@@ -11908,7 +11941,7 @@ function TemplatesGrid({ templates, loading, hasMore, onLoadMore, onTemplateClic
11908
11941
  }
11909
11942
 
11910
11943
  // src/builder/components/flow-builder/components/templates/TemplatesModal.tsx
11911
- const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-DLe16zdY.js").then((m) => ({ default: m.TemplateDetailPanel })));
11944
+ const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-DvoZhgGU.js").then((m) => ({ default: m.TemplateDetailPanel })));
11912
11945
  /**
11913
11946
  * Modal for browsing and selecting workflow templates
11914
11947
  * Features:
@@ -12218,7 +12251,7 @@ function buildNodeCheck(requiredNodeTypes, installedAppIds) {
12218
12251
  }
12219
12252
 
12220
12253
  // src/builder/components/flow-builder/components/blocks/sidebar/fragments/desktop-sidebar-fragment.tsx
12221
- const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-C2CNNLte.js").then((m) => ({ default: m.TemplateConfigurationModal })));
12254
+ const LazyTemplateConfigurationModal = lazy(() => import("./TemplateConfigurationModal-Bp6yWmDU.js").then((m) => ({ default: m.TemplateConfigurationModal })));
12222
12255
  function DesktopSidebarFragment({ activePanel, setActivePanel }) {
12223
12256
  const tr = useTr();
12224
12257
  const { bus, workspaceId } = useFluidGridsAnalytics();
@@ -12265,9 +12298,9 @@ function DesktopSidebarFragment({ activePanel, setActivePanel }) {
12265
12298
  setImporting(true);
12266
12299
  const nodesToInstall = (nodeCheck?.missing ?? []).filter((n) => !!n.storeProductId);
12267
12300
  if (nodesToInstall.length > 0) {
12268
- const { getGlobalStoreClient: getStore } = await import("./FluidGridsProvider-_Nc4kFsk.js").then((n) => n.dr);
12269
- const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-_Nc4kFsk.js").then((n) => n._);
12270
- const { getFluidGridsConfig } = await import("./node-endpoint-configs-DW1ZSZZI.js").then((n) => n.Ki);
12301
+ const { getGlobalStoreClient: getStore } = await import("./FluidGridsProvider-CGu1DfIa.js").then((n) => n.dr);
12302
+ const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-CGu1DfIa.js").then((n) => n._);
12303
+ const { getFluidGridsConfig } = await import("./node-endpoint-configs-n4xr62e4.js").then((n) => n.qi);
12271
12304
  const storeClient = getStore();
12272
12305
  const cfg = getFluidGridsConfig();
12273
12306
  for (let i = 0; i < nodesToInstall.length; i++) {
@@ -12309,8 +12342,8 @@ function DesktopSidebarFragment({ activePanel, setActivePanel }) {
12309
12342
  const { applyTemplateInputs } = await import("./template-input-applicator-C0p6hE4K.js").then((n) => n.r);
12310
12343
  definitionJson = applyTemplateInputs(definitionJson, overrides.templateInputs);
12311
12344
  }
12312
- const { getFluidGridsClient } = await import("./node-endpoint-configs-DW1ZSZZI.js").then((n) => n.Ei);
12313
- const { getFluidGridsConfig } = await import("./node-endpoint-configs-DW1ZSZZI.js").then((n) => n.Ki);
12345
+ const { getFluidGridsClient } = await import("./node-endpoint-configs-n4xr62e4.js").then((n) => n.Di);
12346
+ const { getFluidGridsConfig } = await import("./node-endpoint-configs-n4xr62e4.js").then((n) => n.qi);
12314
12347
  const { gql } = await import("@apollo/client/core");
12315
12348
  const IMPORT_MUTATION = gql`
12316
12349
  mutation ImportWorkflowTemplate(
@@ -12362,8 +12395,8 @@ function DesktopSidebarFragment({ activePanel, setActivePanel }) {
12362
12395
  category: content.defaultCategory || template.category
12363
12396
  });
12364
12397
  try {
12365
- const { getGlobalStoreClient: getStoreClient } = await import("./FluidGridsProvider-_Nc4kFsk.js").then((n) => n.dr);
12366
- const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-_Nc4kFsk.js").then((n) => n._);
12398
+ const { getGlobalStoreClient: getStoreClient } = await import("./FluidGridsProvider-CGu1DfIa.js").then((n) => n.dr);
12399
+ const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-CGu1DfIa.js").then((n) => n._);
12367
12400
  const storeClient = getStoreClient();
12368
12401
  if (storeClient) throwIfResultError(await storeClient.mutate({
12369
12402
  mutation: InstallWorkflowNodeDocument,
@@ -12417,7 +12450,7 @@ function DesktopSidebarFragment({ activePanel, setActivePanel }) {
12417
12450
  const handleUseTemplate = useCallback(async (template) => {
12418
12451
  try {
12419
12452
  toast.loading(tr("fluidgrids.builder.desktopSidebar.loadingTemplateToast", "Loading template..."), { id: "template-load" });
12420
- const { getGlobalStoreClient } = await import("./FluidGridsProvider-_Nc4kFsk.js").then((n) => n.dr);
12453
+ const { getGlobalStoreClient } = await import("./FluidGridsProvider-CGu1DfIa.js").then((n) => n.dr);
12421
12454
  const { gql } = await import("@apollo/client/core");
12422
12455
  const GET_TEMPLATE_DETAIL = gql`
12423
12456
  query GetWorkflowTemplateDetail($id: ID!) {
@@ -26600,8 +26633,8 @@ function EditLeaseBanner() {
26600
26633
  }
26601
26634
 
26602
26635
  // src/builder/components/flow-builder/flow-builder.tsx
26603
- const LazyNodeDetailView = lazy(() => import("./node-detail-view-COi4XrCg.js").then((m) => ({ default: m.NodeDetailView })));
26604
- const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-DQ04YDLl.js").then((m) => ({ default: m.QuickConfigPanel })));
26636
+ const LazyNodeDetailView = lazy(() => import("./node-detail-view-JNWAYrZS.js").then((m) => ({ default: m.NodeDetailView })));
26637
+ const LazyQuickConfigPanel = lazy(() => import("./quick-config-panel-Ciz0hFx7.js").then((m) => ({ default: m.QuickConfigPanel })));
26605
26638
  const edgeTypes = { deletable: CustomDeletableEdge };
26606
26639
  const edgeOptions = {
26607
26640
  type: "deletable",
@@ -26661,7 +26694,7 @@ const FlowBuilder = ({ readOnly = false }) => {
26661
26694
  const [agentTools, setAgentTools] = useState([]);
26662
26695
  useEffect(() => {
26663
26696
  let cancelled = false;
26664
- import("./agentTools-CBqnXeop.js").then(({ createBuilderAgentTools }) => {
26697
+ import("./agentTools-BkeiRiqS.js").then(({ createBuilderAgentTools }) => {
26665
26698
  if (cancelled) return;
26666
26699
  setAgentTools(createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current }));
26667
26700
  }).catch((error) => {
package/dist/history.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as HistoryPage } from "./HistoryPage-joRHOTwx.js";
2
+ import { t as HistoryPage } from "./HistoryPage-DzNRgeBL.js";
3
3
 
4
4
  export { HistoryPage };