@burdenoff/fluidgrids-fe-sdk 2026.1008.2 → 2026.1008.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExecutionDetailPage-JB5UYJMF.js +12 -0
- package/dist/{ExecutionDetailPage-HPAU7U3E.js.map → ExecutionDetailPage-JB5UYJMF.js.map} +1 -1
- package/dist/ExecutionsListPage-RDGTW6UF.js +11 -0
- package/dist/{ExecutionsListPage-TLXVEIRK.js.map → ExecutionsListPage-RDGTW6UF.js.map} +1 -1
- package/dist/{WorkflowBuilder-YJLWNBT3.js → WorkflowBuilder-YVIRBXAH.js} +6 -6
- package/dist/{WorkflowBuilder-YJLWNBT3.js.map → WorkflowBuilder-YVIRBXAH.js.map} +1 -1
- package/dist/{WorkflowsList-YSZWXFMZ.js → WorkflowsList-CQRXZV6I.js} +5 -5
- package/dist/{WorkflowsList-YSZWXFMZ.js.map → WorkflowsList-CQRXZV6I.js.map} +1 -1
- package/dist/{chunk-W7APOU2R.js → chunk-5DQU54IB.js} +63 -8
- package/dist/chunk-5DQU54IB.js.map +1 -0
- package/dist/{chunk-W73HBP7B.js → chunk-5UB3HSNE.js} +5 -5
- package/dist/{chunk-W73HBP7B.js.map → chunk-5UB3HSNE.js.map} +1 -1
- package/dist/{chunk-LVKUOMLJ.js → chunk-CZ7APZ5B.js} +5 -5
- package/dist/{chunk-LVKUOMLJ.js.map → chunk-CZ7APZ5B.js.map} +1 -1
- package/dist/{chunk-F2BBRTLB.js → chunk-DFGJKGWH.js} +6 -4
- package/dist/chunk-DFGJKGWH.js.map +1 -0
- package/dist/{chunk-WKALLY4E.js → chunk-EL672H2D.js} +4 -4
- package/dist/{chunk-WKALLY4E.js.map → chunk-EL672H2D.js.map} +1 -1
- package/dist/{chunk-WYQ4OBES.js → chunk-F5UXTEW5.js} +3 -3
- package/dist/{chunk-WYQ4OBES.js.map → chunk-F5UXTEW5.js.map} +1 -1
- package/dist/{chunk-NG32SZ75.js → chunk-FA7S7YMY.js} +3 -3
- package/dist/{chunk-NG32SZ75.js.map → chunk-FA7S7YMY.js.map} +1 -1
- package/dist/{chunk-IOV4YPQU.js → chunk-M2YFTRLL.js} +4 -4
- package/dist/{chunk-IOV4YPQU.js.map → chunk-M2YFTRLL.js.map} +1 -1
- package/dist/{chunk-I2766GDR.js → chunk-VGJKZYW2.js} +10 -4
- package/dist/chunk-VGJKZYW2.js.map +1 -0
- package/dist/{chunk-2C6CUHM3.js → chunk-XBIHI224.js} +3 -3
- package/dist/{chunk-2C6CUHM3.js.map → chunk-XBIHI224.js.map} +1 -1
- package/dist/{chunk-KIJDG6MG.js → chunk-Z5HU6MUG.js} +4 -4
- package/dist/{chunk-KIJDG6MG.js.map → chunk-Z5HU6MUG.js.map} +1 -1
- package/dist/config-SCVEDF5V.js +3 -0
- package/dist/{config-YHUOLDAL.js.map → config-SCVEDF5V.js.map} +1 -1
- package/dist/executions.js +5 -5
- package/dist/history.js +3 -3
- package/dist/index.d.ts +16 -5
- package/dist/index.js +23 -18
- package/dist/index.js.map +1 -1
- package/dist/templates.js +4 -4
- package/dist/{workflow-builder-CpdCzzst.d.ts → workflow-builder-DvbjeuIN.d.ts} +5 -1
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +5 -5
- package/dist/workflows-list.js +3 -3
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-HPAU7U3E.js +0 -12
- package/dist/ExecutionsListPage-TLXVEIRK.js +0 -11
- package/dist/chunk-F2BBRTLB.js.map +0 -1
- package/dist/chunk-I2766GDR.js.map +0 -1
- package/dist/chunk-W7APOU2R.js.map +0 -1
- package/dist/config-YHUOLDAL.js +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isCreateIntent, decideMissingWorkflow } from './chunk-KGD6CRSA.js';
|
|
2
|
-
import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-
|
|
3
|
-
import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-
|
|
2
|
+
import { useInstalledNodes, buildNodeCheck, refetchStoreNodes, FlowBuilderPage, buildRequiredNodeTypes, mergeStickyNotes } from './chunk-5DQU54IB.js';
|
|
3
|
+
import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-XBIHI224.js';
|
|
4
4
|
import { useFlowStore } from './chunk-3B5YEXSW.js';
|
|
5
5
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
6
6
|
import { useNavigate, useParams, useLocation } from 'react-router';
|
|
@@ -74,7 +74,7 @@ function WorkflowItem({
|
|
|
74
74
|
try {
|
|
75
75
|
const { getGlobalStoreClient } = await import('./global-client-OW43ZRDR.js');
|
|
76
76
|
const { InstallWorkflowNodeDocument } = await import('./global-operations-IMNN4YME.js');
|
|
77
|
-
const { getFluidGridsConfig } = await import('./config-
|
|
77
|
+
const { getFluidGridsConfig } = await import('./config-SCVEDF5V.js');
|
|
78
78
|
const storeClient = getGlobalStoreClient();
|
|
79
79
|
const cfg = getFluidGridsConfig();
|
|
80
80
|
for (let i = 0; i < nodesToInstall.length; i++) {
|
|
@@ -499,5 +499,5 @@ function WorkflowBuilder() {
|
|
|
499
499
|
}
|
|
500
500
|
|
|
501
501
|
export { WorkflowBuilder };
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
503
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-5UB3HSNE.js.map
|
|
503
|
+
//# sourceMappingURL=chunk-5UB3HSNE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/builder/app/workflow/work/page.tsx","../src/pages/WorkflowBuilder.tsx"],"names":["useNavigate","jsx","jsxs"],"mappings":"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","file":"chunk-W73HBP7B.js","sourcesContent":["import { useLocation, useNavigate, useParams } from \"react-router\";\nimport { toast } from \"sonner\";\nimport { Icon } from \"@iconify/react\";\nimport { FlowBuilderPage } from \"../_components/flow-builder\";\nimport {\n useEffect,\n useState,\n useRef,\n useMemo,\n useCallback,\n lazy,\n Suspense,\n} from \"react\";\nimport { useFlowStore, type IFlowState } from \"../../../stores/flow-store\";\nimport {\n useLazyWorkflowDefinition,\n useCreateWorkflow,\n} from \"../../../../hooks/useWorkflows\";\nimport { useInstalledNodes } from \"../../../../hooks/store/useInstalledNodes\";\nimport { mergeStickyNotes } from \"../../../lib/sticky-notes\";\nimport type {\n TemplateNodeCheckResult,\n WorkflowTemplateContent,\n} from \"../../../../types/workflow-template-content\";\nimport {\n buildRequiredNodeTypes,\n buildNodeCheck,\n} from \"../../../../utils/workflow-node-check\";\nimport { refetchStoreNodes } from \"../../../components/flow-builder/components/blocks\";\nimport { useTr } from \"../../../../hooks/useTr\";\nimport {\n decideMissingWorkflow,\n isCreateIntent,\n} from \"../../../../utils/workflow-open\";\n\n// Lazy-load the modal to avoid bundle-size impact on routes that never hit it.\nconst LazyMissingNodesInstallModal = lazy(() =>\n import(\"../../../components/flow-builder/components/templates/MissingNodesInstallModal\").then(\n (m) => ({ default: m.MissingNodesInstallModal }),\n ),\n);\n\ninterface WorkflowDefinitionData {\n nodes: IFlowState[\"workflow\"][\"nodes\"];\n edges: IFlowState[\"workflow\"][\"edges\"];\n sidebar: IFlowState[\"workflow\"][\"sidebar\"];\n /** Canvas annotations persisted separately from executable nodes. */\n stickyNotes?: IFlowState[\"workflow\"][\"nodes\"];\n}\n\nexport default function WorkflowItem({\n readonly = false,\n}: {\n readonly?: boolean;\n}) {\n if (readonly) {\n const queryParams = new URLSearchParams(window.location.search);\n queryParams.set(\"readonly\", \"true\");\n const newUrl = `${window.location.pathname}?${queryParams.toString()}`;\n window.history.replaceState(null, \"\", newUrl);\n }\n const { id, version } = useParams();\n const navigate = useNavigate();\n const tr = useTr();\n const location = useLocation();\n // Only an explicit \"Create Workflow\" navigation may mint a definition on\n // open (BOFF-8060 F2). Read through a ref so the load effect does not re-run\n // when router state changes.\n const createIntentRef = useRef(isCreateIntent(location.state));\n useEffect(() => {\n createIntentRef.current = isCreateIntent(location.state);\n }, [location.state]);\n // The key (and version) has no definition and nothing was created for it.\n const [notFound, setNotFound] = useState(false);\n // Bumped by \"Try again\" to re-run the load after a failed lookup.\n const [retryNonce, setRetryNonce] = useState(0);\n const loadRunId = new URLSearchParams(window.location.search).get(\"loadRun\");\n const [workflow, setWorkflow] = useState<IFlowState[\"workflow\"] | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [loadError, setLoadError] = useState<string | null>(null);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { getWorkflow } = useLazyWorkflowDefinition();\n const { createWorkflow } = useCreateWorkflow();\n const creatingRef = useRef(false);\n const fromSharedLoadedRef = useRef(false);\n const fetchedWorkflowRef = useRef<IFlowState[\"workflow\"] | null>(null);\n\n // ── Missing-nodes modal state ────────────────────────────────────────────\n const { installedAppIds } = useInstalledNodes();\n const [pendingWorkflow, setPendingWorkflow] = useState<\n IFlowState[\"workflow\"] | null\n >(null);\n const [nodeCheck, setNodeCheck] = useState<TemplateNodeCheckResult | null>(\n null,\n );\n const [configModalOpen, setConfigModalOpen] = useState(false);\n const [installing, setInstalling] = useState(false);\n const [installProgress, setInstallProgress] = useState<{\n current: number;\n total: number;\n nodeName: string;\n } | null>(null);\n const [installErrors, setInstallErrors] = useState<string[]>([]);\n\n // Classify requiredNodeTypes into installed / missing / missingPaid.\n const doNodeCheck = useCallback(\n (requiredNodeTypes: Parameters<typeof buildNodeCheck>[0]) =>\n buildNodeCheck(requiredNodeTypes, installedAppIds),\n [installedAppIds],\n );\n\n // Keep a ref so the loadWorkflow effect can call doNodeCheck without\n // taking it as a reactive dependency (which would re-trigger the effect\n // on every render and cause infinite CreateWorkflowDefinition mutations).\n const doNodeCheckRef = useRef(doNodeCheck);\n useEffect(() => {\n doNodeCheckRef.current = doNodeCheck;\n });\n\n // Install missing free nodes then open the pending workflow in the builder.\n const handleInstallConfirm = useCallback(async () => {\n if (!pendingWorkflow) return;\n // `missing` now holds only nodes the store can actually install;\n // store-unavailable ones are reported separately (BOFF-7267).\n const nodesToInstall = (nodeCheck?.missing ?? []).filter(\n (n) => !!n.storeProductId,\n );\n const failed: string[] = [];\n\n if (nodesToInstall.length > 0) {\n setInstalling(true);\n setInstallErrors([]);\n try {\n const { getGlobalStoreClient } =\n await import(\"../../../../graphql/global-client\");\n const { InstallWorkflowNodeDocument } =\n await import(\"../../../../generated/global-operations\");\n const { getFluidGridsConfig } = await import(\"../../../../config\");\n\n const storeClient = getGlobalStoreClient();\n const cfg = getFluidGridsConfig();\n\n for (let i = 0; i < nodesToInstall.length; i++) {\n const node = nodesToInstall[i];\n setInstallProgress({\n current: i + 1,\n total: nodesToInstall.length,\n nodeName: node.displayName || node.nodeType,\n });\n try {\n if (storeClient) {\n await storeClient.mutate({\n mutation: InstallWorkflowNodeDocument,\n variables: {\n input: {\n productId: node.storeProductId!,\n workspaceId: cfg.workspaceId,\n organizationId: cfg.tenantId,\n version: node.nodeVersion,\n manifest: null,\n },\n },\n });\n }\n } catch {\n // Keep installing the rest, but remember what failed so the user\n // is told instead of the dialog silently closing (BOFF-7267).\n failed.push(node.displayName || node.nodeType);\n }\n }\n\n // Refresh the in-memory node registry so the builder renders the\n // newly-installed nodes with their real manifests and operations.\n await refetchStoreNodes();\n } finally {\n setInstalling(false);\n setInstallProgress(null);\n }\n }\n\n if (failed.length > 0) {\n // Hold the dialog open so the failure is visible and retryable; the user\n // can still choose \"Open Without Installing\".\n setInstallErrors(failed);\n return;\n }\n\n setInstallErrors([]);\n setConfigModalOpen(false);\n setWorkflow(pendingWorkflow);\n setPendingWorkflow(null);\n setNodeCheck(null);\n }, [pendingWorkflow, nodeCheck]);\n\n const handleSkipInstall = useCallback(() => {\n if (!pendingWorkflow) return;\n setConfigModalOpen(false);\n setWorkflow(pendingWorkflow);\n setPendingWorkflow(null);\n setNodeCheck(null);\n }, [pendingWorkflow]);\n\n const newWorkflow = useMemo(\n () => ({\n id: id ?? \"\",\n workflowKey: id ?? \"\",\n version: version ?? \"\",\n name: \"Untitled Workflow\",\n edges: [] as IFlowState[\"workflow\"][\"edges\"],\n nodes: [] as IFlowState[\"workflow\"][\"nodes\"],\n sidebar: {\n active: \"store-browse\" as const,\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n }),\n [id, version],\n );\n\n useEffect(() => {\n let mounted = true;\n const loadWorkflow = async () => {\n try {\n // Always reset the store first\n resetWorkflow();\n if (mounted) setNotFound(false);\n if (mounted) setLoadError(null);\n\n // For versioned workflows, set loading so FlowBuilderPage unmounts\n // before Zustand is cleared. This prevents the flash of an empty\n // canvas when the component is reused across route navigations.\n if (version && mounted) {\n setIsLoading(true);\n }\n\n if (!version) {\n // Check for a manifest copied from a public shared workflow\n const fromSharedId =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search).get(\"fromShared\")\n : null;\n const pendingManifestJson =\n fromSharedId && typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"pendingSharedWorkflow\")\n : null;\n\n if (fromSharedId && pendingManifestJson) {\n try {\n // Do NOT remove from localStorage here — React StrictMode double-fires\n // effects (mount → cleanup → mount). If we remove on the first run,\n // the second run finds null and falls through to an empty workflow.\n // We remove it inside `if (mounted)` so only the \"winning\" run\n // (the one whose mounted flag is still true) clears the entry.\n const manifest = JSON.parse(pendingManifestJson) as {\n nodes?: IFlowState[\"workflow\"][\"nodes\"];\n edges?: IFlowState[\"workflow\"][\"edges\"];\n name?: string;\n };\n\n const sharedWorkflow: IFlowState[\"workflow\"] = {\n ...newWorkflow,\n name: manifest.name ?? \"Copied Workflow\",\n nodes: manifest.nodes ?? [],\n edges: manifest.edges ?? [],\n };\n\n // Detect node types not installed in this workspace and resolve\n // each to its storeProductId so the modal can offer one-click installation.\n let requiredNodeTypes: WorkflowTemplateContent[\"requiredNodeTypes\"] =\n [];\n try {\n requiredNodeTypes = await buildRequiredNodeTypes(\n sharedWorkflow.nodes,\n );\n } catch {\n // Node check failed — skip dependency check and open anyway\n }\n\n if (mounted) {\n // Safe to clear now — this is the winning effect run.\n localStorage.removeItem(\"pendingSharedWorkflow\");\n\n if (requiredNodeTypes.length > 0) {\n // Use the ref so this effect doesn't re-run every time\n // installedAppIds changes (which would cause infinite mutations).\n const check = doNodeCheckRef.current(requiredNodeTypes);\n const needsConfig =\n check.missing.length > 0 || check.missingPaid.length > 0;\n\n if (needsConfig) {\n // Surface the install modal before creating the workflow\n // so the user can install missing nodes first.\n setPendingWorkflow(sharedWorkflow);\n setNodeCheck(check);\n setConfigModalOpen(true);\n setIsLoading(false);\n fromSharedLoadedRef.current = true;\n return;\n }\n }\n\n setWorkflow(sharedWorkflow);\n setIsLoading(false);\n fromSharedLoadedRef.current = true;\n }\n return;\n } catch (e) {\n console.error(\"[WorkflowItem] parse error:\", e);\n // Corrupted localStorage entry — only clear if we're the winning run.\n if (mounted) localStorage.removeItem(\"pendingSharedWorkflow\");\n }\n }\n\n // If a previous effect run already loaded the shared workflow, don't overwrite it\n if (fromSharedId && fromSharedLoadedRef.current) {\n if (mounted) setIsLoading(false);\n return;\n }\n\n if (mounted) {\n setWorkflow(newWorkflow);\n setIsLoading(false);\n }\n return;\n }\n\n // Use GraphQL to fetch workflow by workflowKey + version\n const result = await getWorkflow(id, undefined, version);\n const definitionJson = result?.definitionJson as {\n data?: WorkflowDefinitionData;\n nodes?: unknown[];\n edges?: unknown[];\n } | null;\n\n // Support both { data: { nodes, edges } } and flat { nodes, edges } structures\n const defData =\n definitionJson?.data ??\n (definitionJson?.nodes\n ? (definitionJson as unknown as WorkflowDefinitionData)\n : undefined);\n\n if (defData) {\n // Build the workflow state — store in ref regardless of mounted status so\n // a subsequent effect run can use it if its own getWorkflow call fails.\n const workflowState: IFlowState[\"workflow\"] = {\n ...defData,\n // Sticky notes are stored under a separate definition key — merge\n // them back onto the canvas alongside the executable nodes.\n nodes: mergeStickyNotes(defData) as IFlowState[\"workflow\"][\"nodes\"],\n id: result?.workflowKey ?? \"\",\n workflowKey: result?.workflowKey ?? \"\",\n version: result?.version ?? \"\",\n name: result?.name ?? \"\",\n alias: result?.alias ?? \"\",\n dbId: result?.id ?? \"\",\n status: result?.status ?? \"DRAFT\",\n };\n fetchedWorkflowRef.current = workflowState;\n\n // AI-assistant (and shared) workflows may reference nodes that are not\n // installed in this workspace. Offer one-click install before opening.\n let requiredNodeTypes: WorkflowTemplateContent[\"requiredNodeTypes\"] =\n [];\n try {\n requiredNodeTypes = await buildRequiredNodeTypes(\n workflowState.nodes,\n );\n } catch {\n // Node check failed — skip dependency check and open anyway\n }\n\n if (mounted && requiredNodeTypes.length > 0) {\n const check = doNodeCheckRef.current(requiredNodeTypes);\n if (check.missing.length > 0 || check.missingPaid.length > 0) {\n setPendingWorkflow(workflowState);\n setNodeCheck(check);\n setConfigModalOpen(true);\n setIsLoading(false);\n return;\n }\n }\n\n if (mounted) {\n setWorkflow(workflowState);\n }\n return;\n }\n\n if (mounted) {\n // If a previous effect run already fetched the workflow (but was cancelled),\n // use its result rather than trying to create a new workflow.\n if (fetchedWorkflowRef.current) {\n setWorkflow(fetchedWorkflowRef.current);\n return;\n }\n\n if (loadRunId) {\n setLoadError(\n \"The workflow version for this TEST run is no longer available.\",\n );\n return;\n }\n\n // Version-not-found guard: a mistyped/removed version in the URL must\n // NOT silently create a real row — redirect to the newest version.\n const anyVersion = await getWorkflow(id, undefined, undefined);\n const missing = decideMissingWorkflow({\n createIntent: createIntentRef.current,\n otherVersionExists: !!anyVersion?.workflowKey,\n });\n if (missing === \"open-newest\" && anyVersion) {\n toast.info(`Version ${version} not found`, {\n description: `Opening ${anyVersion.version} instead.`,\n dismissible: true,\n });\n navigate(`../workflow/${id}/${anyVersion.version}`, {\n replace: true,\n });\n return;\n }\n\n // Opening a key that has no definition is READ-ONLY: show a\n // not-found state. Only an explicit \"Create Workflow\" navigation\n // (router state) may create one (BOFF-8060 F2).\n if (missing === \"not-found\") {\n if (mounted) setNotFound(true);\n return;\n }\n\n // Explicit create intent: the person asked for a new workflow.\n if (!creatingRef.current) {\n creatingRef.current = true;\n const initialDefinitionJson = {\n key: id,\n name: newWorkflow.name,\n description: newWorkflow.name,\n workflow_type: \"query-conditional\",\n data: {\n ...newWorkflow,\n },\n meta: {\n creator: \"api_create\",\n version: version,\n },\n tags: [],\n };\n\n try {\n const created = await createWorkflow({\n workflowKey: id!,\n version: version!,\n name: newWorkflow.name,\n description: newWorkflow.name,\n definitionJson: initialDefinitionJson,\n });\n\n if (created && mounted) {\n setWorkflow({\n ...newWorkflow,\n id: created.workflowKey,\n workflowKey: created.workflowKey,\n version: created.version,\n dbId: created.id,\n status: created.status ?? \"DRAFT\",\n });\n } else if (mounted) {\n setWorkflow(newWorkflow);\n }\n } catch (createError) {\n console.error(\n \"[WorkflowItem] Error creating workflow:\",\n createError,\n );\n if (mounted) {\n setWorkflow(fetchedWorkflowRef.current ?? newWorkflow);\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[WorkflowItem] Error loading workflow:\", error);\n if (mounted) {\n if (loadRunId) {\n setLoadError(\n \"The workflow version for this TEST run could not be loaded.\",\n );\n } else {\n setWorkflow(fetchedWorkflowRef.current ?? newWorkflow);\n }\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n creatingRef.current = false;\n }\n }\n };\n\n loadWorkflow();\n return () => {\n mounted = false;\n };\n }, [\n id,\n version,\n createWorkflow,\n getWorkflow,\n newWorkflow,\n resetWorkflow,\n navigate,\n loadRunId,\n retryNonce,\n // doNodeCheckRef is intentionally omitted — it's a ref (stable by definition)\n // and including doNodeCheck here caused infinite re-runs because installedAppIds\n // produces a new Set reference on every render.\n ]);\n\n if (loadError)\n return (\n <div className=\"flex h-full min-h-[60vh] w-full items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bg-subtle)] p-6 text-center\">\n <Icon\n icon=\"mdi:alert-circle-outline\"\n className=\"mx-auto mb-3 size-8 text-[var(--color-status-error-text)]\"\n />\n <h2 className=\"text-lg font-semibold text-[var(--color-status-error-text)]\">\n Unable to load run\n </h2>\n <p className=\"mt-2 text-sm text-[var(--color-status-error-text)]\">\n {loadError}\n </p>\n <button\n type=\"button\"\n className=\"mt-4 rounded-md border border-border px-3 py-2 text-sm text-foreground hover:bg-muted\"\n onClick={() => navigate(\"../runs\")}\n >\n Back to executions\n </button>\n </div>\n </div>\n );\n\n if (isLoading)\n return (\n // Same loading treatment as the Available Nodes panel, centered on the\n // full canvas area while the workflow definition is fetched.\n <div className=\"flex h-full min-h-[60vh] w-full items-center justify-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <Icon\n icon=\"mynaui:spinner\"\n className=\"size-6 animate-spin text-primary\"\n />\n <span className=\"text-sm text-foreground/60\">\n Loading workflow...\n </span>\n </div>\n </div>\n );\n\n if (notFound)\n return (\n <div\n role=\"alert\"\n className=\"flex h-full min-h-[60vh] w-full flex-col items-center justify-center gap-3 p-6 text-center\"\n >\n <p className=\"text-base font-medium text-foreground\">\n {tr(\n \"fluidgrids.builder.workflowNotFound.title\",\n \"Workflow not found\",\n )}\n </p>\n <p className=\"max-w-md text-sm text-foreground/60\">\n {tr(\n \"fluidgrids.builder.workflowNotFound.description\",\n \"No workflow with this key exists in this workspace, or it could not be loaded. Nothing was created.\",\n )}\n </p>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n className=\"rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground\"\n onClick={() => setRetryNonce((n) => n + 1)}\n >\n {tr(\"fluidgrids.builder.workflowNotFound.retry\", \"Try again\")}\n </button>\n <button\n type=\"button\"\n className=\"rounded-md border px-4 py-2 text-sm font-medium text-foreground\"\n onClick={() => navigate(\"../list\")}\n >\n {tr(\n \"fluidgrids.builder.workflowNotFound.back\",\n \"Back to Workflows\",\n )}\n </button>\n </div>\n </div>\n );\n\n return (\n <>\n {/* Missing-nodes modal shown before a workflow with uninstalled nodes is\n opened in the builder. Covers shared workflows and AI-assistant-created\n workflows that reference nodes not yet installed in the workspace. */}\n {configModalOpen && pendingWorkflow && (\n <Suspense fallback={null}>\n <LazyMissingNodesInstallModal\n open={configModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n // Dismissed without confirming — open anyway (user can install later)\n handleSkipInstall();\n }\n }}\n workflowName={pendingWorkflow.name}\n nodeCheckResult={nodeCheck}\n onConfirm={handleInstallConfirm}\n onSkip={handleSkipInstall}\n installing={installing}\n installProgress={installProgress}\n installErrors={installErrors}\n />\n </Suspense>\n )}\n\n {workflow && !isLoading && <FlowBuilderPage workflow={workflow} />}\n </>\n );\n}\n","import WorkflowItem from \"../builder/app/workflow/work/page\";\nimport { ErrorBoundary } from \"@burdenoff/fe-libs/shared/components\";\nimport { useNavigate } from \"react-router\";\nimport \"@xyflow/react/dist/style.css\";\n\n/**\n * WorkflowBuilder page with ErrorBoundary for graceful crash recovery.\n * If the builder throws (React Flow error, node rendering crash, etc.),\n * the user sees a recovery UI instead of a blank screen.\n */\nexport function WorkflowBuilder() {\n const navigate = useNavigate();\n\n return (\n <ErrorBoundary\n fallback={(error) => (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4 p-8\">\n <div className=\"rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bg-subtle)] p-6 max-w-lg w-full text-center\">\n <h2 className=\"text-lg font-semibold text-[var(--color-status-error-text)] mb-2\">\n Workflow Builder Error\n </h2>\n <p className=\"text-sm text-[var(--color-text-secondary)] mb-4\">\n Something went wrong while loading the workflow builder. This may\n be caused by invalid workflow data or a rendering issue.\n </p>\n {error && (\n <details className=\"text-left mb-4\">\n <summary className=\"text-xs text-[var(--color-text-tertiary)] cursor-pointer hover:text-[var(--color-text-secondary)]\">\n Error details\n </summary>\n <pre className=\"mt-2 p-2 bg-[var(--color-bg-canvas)] rounded text-xs overflow-auto max-h-32 text-[var(--color-text-tertiary)]\">\n {error.message}\n </pre>\n </details>\n )}\n <div className=\"flex gap-3 justify-center\">\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"px-4 py-2 text-sm font-medium rounded-md bg-[var(--color-bg-accent)] text-[var(--color-text-on-accent)] hover:opacity-90 transition-opacity\"\n >\n Reload Page\n </button>\n <button\n type=\"button\"\n onClick={() => navigate(\"../list\")}\n className=\"px-4 py-2 text-sm font-medium rounded-md border border-default text-[var(--color-text-secondary)] hover:bg-[var(--color-bg-elevated)] transition-colors\"\n >\n Back to Workflows\n </button>\n </div>\n </div>\n </div>\n )}\n >\n <WorkflowItem />\n </ErrorBoundary>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder/app/workflow/work/page.tsx","../src/pages/WorkflowBuilder.tsx"],"names":["useNavigate","jsx","jsxs"],"mappings":"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","file":"chunk-5UB3HSNE.js","sourcesContent":["import { useLocation, useNavigate, useParams } from \"react-router\";\nimport { toast } from \"sonner\";\nimport { Icon } from \"@iconify/react\";\nimport { FlowBuilderPage } from \"../_components/flow-builder\";\nimport {\n useEffect,\n useState,\n useRef,\n useMemo,\n useCallback,\n lazy,\n Suspense,\n} from \"react\";\nimport { useFlowStore, type IFlowState } from \"../../../stores/flow-store\";\nimport {\n useLazyWorkflowDefinition,\n useCreateWorkflow,\n} from \"../../../../hooks/useWorkflows\";\nimport { useInstalledNodes } from \"../../../../hooks/store/useInstalledNodes\";\nimport { mergeStickyNotes } from \"../../../lib/sticky-notes\";\nimport type {\n TemplateNodeCheckResult,\n WorkflowTemplateContent,\n} from \"../../../../types/workflow-template-content\";\nimport {\n buildRequiredNodeTypes,\n buildNodeCheck,\n} from \"../../../../utils/workflow-node-check\";\nimport { refetchStoreNodes } from \"../../../components/flow-builder/components/blocks\";\nimport { useTr } from \"../../../../hooks/useTr\";\nimport {\n decideMissingWorkflow,\n isCreateIntent,\n} from \"../../../../utils/workflow-open\";\n\n// Lazy-load the modal to avoid bundle-size impact on routes that never hit it.\nconst LazyMissingNodesInstallModal = lazy(() =>\n import(\"../../../components/flow-builder/components/templates/MissingNodesInstallModal\").then(\n (m) => ({ default: m.MissingNodesInstallModal }),\n ),\n);\n\ninterface WorkflowDefinitionData {\n nodes: IFlowState[\"workflow\"][\"nodes\"];\n edges: IFlowState[\"workflow\"][\"edges\"];\n sidebar: IFlowState[\"workflow\"][\"sidebar\"];\n /** Canvas annotations persisted separately from executable nodes. */\n stickyNotes?: IFlowState[\"workflow\"][\"nodes\"];\n}\n\nexport default function WorkflowItem({\n readonly = false,\n}: {\n readonly?: boolean;\n}) {\n if (readonly) {\n const queryParams = new URLSearchParams(window.location.search);\n queryParams.set(\"readonly\", \"true\");\n const newUrl = `${window.location.pathname}?${queryParams.toString()}`;\n window.history.replaceState(null, \"\", newUrl);\n }\n const { id, version } = useParams();\n const navigate = useNavigate();\n const tr = useTr();\n const location = useLocation();\n // Only an explicit \"Create Workflow\" navigation may mint a definition on\n // open (BOFF-8060 F2). Read through a ref so the load effect does not re-run\n // when router state changes.\n const createIntentRef = useRef(isCreateIntent(location.state));\n useEffect(() => {\n createIntentRef.current = isCreateIntent(location.state);\n }, [location.state]);\n // The key (and version) has no definition and nothing was created for it.\n const [notFound, setNotFound] = useState(false);\n // Bumped by \"Try again\" to re-run the load after a failed lookup.\n const [retryNonce, setRetryNonce] = useState(0);\n const loadRunId = new URLSearchParams(window.location.search).get(\"loadRun\");\n const [workflow, setWorkflow] = useState<IFlowState[\"workflow\"] | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [loadError, setLoadError] = useState<string | null>(null);\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { getWorkflow } = useLazyWorkflowDefinition();\n const { createWorkflow } = useCreateWorkflow();\n const creatingRef = useRef(false);\n const fromSharedLoadedRef = useRef(false);\n const fetchedWorkflowRef = useRef<IFlowState[\"workflow\"] | null>(null);\n\n // ── Missing-nodes modal state ────────────────────────────────────────────\n const { installedAppIds } = useInstalledNodes();\n const [pendingWorkflow, setPendingWorkflow] = useState<\n IFlowState[\"workflow\"] | null\n >(null);\n const [nodeCheck, setNodeCheck] = useState<TemplateNodeCheckResult | null>(\n null,\n );\n const [configModalOpen, setConfigModalOpen] = useState(false);\n const [installing, setInstalling] = useState(false);\n const [installProgress, setInstallProgress] = useState<{\n current: number;\n total: number;\n nodeName: string;\n } | null>(null);\n const [installErrors, setInstallErrors] = useState<string[]>([]);\n\n // Classify requiredNodeTypes into installed / missing / missingPaid.\n const doNodeCheck = useCallback(\n (requiredNodeTypes: Parameters<typeof buildNodeCheck>[0]) =>\n buildNodeCheck(requiredNodeTypes, installedAppIds),\n [installedAppIds],\n );\n\n // Keep a ref so the loadWorkflow effect can call doNodeCheck without\n // taking it as a reactive dependency (which would re-trigger the effect\n // on every render and cause infinite CreateWorkflowDefinition mutations).\n const doNodeCheckRef = useRef(doNodeCheck);\n useEffect(() => {\n doNodeCheckRef.current = doNodeCheck;\n });\n\n // Install missing free nodes then open the pending workflow in the builder.\n const handleInstallConfirm = useCallback(async () => {\n if (!pendingWorkflow) return;\n // `missing` now holds only nodes the store can actually install;\n // store-unavailable ones are reported separately (BOFF-7267).\n const nodesToInstall = (nodeCheck?.missing ?? []).filter(\n (n) => !!n.storeProductId,\n );\n const failed: string[] = [];\n\n if (nodesToInstall.length > 0) {\n setInstalling(true);\n setInstallErrors([]);\n try {\n const { getGlobalStoreClient } =\n await import(\"../../../../graphql/global-client\");\n const { InstallWorkflowNodeDocument } =\n await import(\"../../../../generated/global-operations\");\n const { getFluidGridsConfig } = await import(\"../../../../config\");\n\n const storeClient = getGlobalStoreClient();\n const cfg = getFluidGridsConfig();\n\n for (let i = 0; i < nodesToInstall.length; i++) {\n const node = nodesToInstall[i];\n setInstallProgress({\n current: i + 1,\n total: nodesToInstall.length,\n nodeName: node.displayName || node.nodeType,\n });\n try {\n if (storeClient) {\n await storeClient.mutate({\n mutation: InstallWorkflowNodeDocument,\n variables: {\n input: {\n productId: node.storeProductId!,\n workspaceId: cfg.workspaceId,\n organizationId: cfg.tenantId,\n version: node.nodeVersion,\n manifest: null,\n },\n },\n });\n }\n } catch {\n // Keep installing the rest, but remember what failed so the user\n // is told instead of the dialog silently closing (BOFF-7267).\n failed.push(node.displayName || node.nodeType);\n }\n }\n\n // Refresh the in-memory node registry so the builder renders the\n // newly-installed nodes with their real manifests and operations.\n await refetchStoreNodes();\n } finally {\n setInstalling(false);\n setInstallProgress(null);\n }\n }\n\n if (failed.length > 0) {\n // Hold the dialog open so the failure is visible and retryable; the user\n // can still choose \"Open Without Installing\".\n setInstallErrors(failed);\n return;\n }\n\n setInstallErrors([]);\n setConfigModalOpen(false);\n setWorkflow(pendingWorkflow);\n setPendingWorkflow(null);\n setNodeCheck(null);\n }, [pendingWorkflow, nodeCheck]);\n\n const handleSkipInstall = useCallback(() => {\n if (!pendingWorkflow) return;\n setConfigModalOpen(false);\n setWorkflow(pendingWorkflow);\n setPendingWorkflow(null);\n setNodeCheck(null);\n }, [pendingWorkflow]);\n\n const newWorkflow = useMemo(\n () => ({\n id: id ?? \"\",\n workflowKey: id ?? \"\",\n version: version ?? \"\",\n name: \"Untitled Workflow\",\n edges: [] as IFlowState[\"workflow\"][\"edges\"],\n nodes: [] as IFlowState[\"workflow\"][\"nodes\"],\n sidebar: {\n active: \"store-browse\" as const,\n panels: {\n nodeProperties: {\n selectedNode: null,\n },\n },\n },\n }),\n [id, version],\n );\n\n useEffect(() => {\n let mounted = true;\n const loadWorkflow = async () => {\n try {\n // Always reset the store first\n resetWorkflow();\n if (mounted) setNotFound(false);\n if (mounted) setLoadError(null);\n\n // For versioned workflows, set loading so FlowBuilderPage unmounts\n // before Zustand is cleared. This prevents the flash of an empty\n // canvas when the component is reused across route navigations.\n if (version && mounted) {\n setIsLoading(true);\n }\n\n if (!version) {\n // Check for a manifest copied from a public shared workflow\n const fromSharedId =\n typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search).get(\"fromShared\")\n : null;\n const pendingManifestJson =\n fromSharedId && typeof localStorage !== \"undefined\"\n ? localStorage.getItem(\"pendingSharedWorkflow\")\n : null;\n\n if (fromSharedId && pendingManifestJson) {\n try {\n // Do NOT remove from localStorage here — React StrictMode double-fires\n // effects (mount → cleanup → mount). If we remove on the first run,\n // the second run finds null and falls through to an empty workflow.\n // We remove it inside `if (mounted)` so only the \"winning\" run\n // (the one whose mounted flag is still true) clears the entry.\n const manifest = JSON.parse(pendingManifestJson) as {\n nodes?: IFlowState[\"workflow\"][\"nodes\"];\n edges?: IFlowState[\"workflow\"][\"edges\"];\n name?: string;\n };\n\n const sharedWorkflow: IFlowState[\"workflow\"] = {\n ...newWorkflow,\n name: manifest.name ?? \"Copied Workflow\",\n nodes: manifest.nodes ?? [],\n edges: manifest.edges ?? [],\n };\n\n // Detect node types not installed in this workspace and resolve\n // each to its storeProductId so the modal can offer one-click installation.\n let requiredNodeTypes: WorkflowTemplateContent[\"requiredNodeTypes\"] =\n [];\n try {\n requiredNodeTypes = await buildRequiredNodeTypes(\n sharedWorkflow.nodes,\n );\n } catch {\n // Node check failed — skip dependency check and open anyway\n }\n\n if (mounted) {\n // Safe to clear now — this is the winning effect run.\n localStorage.removeItem(\"pendingSharedWorkflow\");\n\n if (requiredNodeTypes.length > 0) {\n // Use the ref so this effect doesn't re-run every time\n // installedAppIds changes (which would cause infinite mutations).\n const check = doNodeCheckRef.current(requiredNodeTypes);\n const needsConfig =\n check.missing.length > 0 || check.missingPaid.length > 0;\n\n if (needsConfig) {\n // Surface the install modal before creating the workflow\n // so the user can install missing nodes first.\n setPendingWorkflow(sharedWorkflow);\n setNodeCheck(check);\n setConfigModalOpen(true);\n setIsLoading(false);\n fromSharedLoadedRef.current = true;\n return;\n }\n }\n\n setWorkflow(sharedWorkflow);\n setIsLoading(false);\n fromSharedLoadedRef.current = true;\n }\n return;\n } catch (e) {\n console.error(\"[WorkflowItem] parse error:\", e);\n // Corrupted localStorage entry — only clear if we're the winning run.\n if (mounted) localStorage.removeItem(\"pendingSharedWorkflow\");\n }\n }\n\n // If a previous effect run already loaded the shared workflow, don't overwrite it\n if (fromSharedId && fromSharedLoadedRef.current) {\n if (mounted) setIsLoading(false);\n return;\n }\n\n if (mounted) {\n setWorkflow(newWorkflow);\n setIsLoading(false);\n }\n return;\n }\n\n // Use GraphQL to fetch workflow by workflowKey + version\n const result = await getWorkflow(id, undefined, version);\n const definitionJson = result?.definitionJson as {\n data?: WorkflowDefinitionData;\n nodes?: unknown[];\n edges?: unknown[];\n } | null;\n\n // Support both { data: { nodes, edges } } and flat { nodes, edges } structures\n const defData =\n definitionJson?.data ??\n (definitionJson?.nodes\n ? (definitionJson as unknown as WorkflowDefinitionData)\n : undefined);\n\n if (defData) {\n // Build the workflow state — store in ref regardless of mounted status so\n // a subsequent effect run can use it if its own getWorkflow call fails.\n const workflowState: IFlowState[\"workflow\"] = {\n ...defData,\n // Sticky notes are stored under a separate definition key — merge\n // them back onto the canvas alongside the executable nodes.\n nodes: mergeStickyNotes(defData) as IFlowState[\"workflow\"][\"nodes\"],\n id: result?.workflowKey ?? \"\",\n workflowKey: result?.workflowKey ?? \"\",\n version: result?.version ?? \"\",\n name: result?.name ?? \"\",\n alias: result?.alias ?? \"\",\n dbId: result?.id ?? \"\",\n status: result?.status ?? \"DRAFT\",\n };\n fetchedWorkflowRef.current = workflowState;\n\n // AI-assistant (and shared) workflows may reference nodes that are not\n // installed in this workspace. Offer one-click install before opening.\n let requiredNodeTypes: WorkflowTemplateContent[\"requiredNodeTypes\"] =\n [];\n try {\n requiredNodeTypes = await buildRequiredNodeTypes(\n workflowState.nodes,\n );\n } catch {\n // Node check failed — skip dependency check and open anyway\n }\n\n if (mounted && requiredNodeTypes.length > 0) {\n const check = doNodeCheckRef.current(requiredNodeTypes);\n if (check.missing.length > 0 || check.missingPaid.length > 0) {\n setPendingWorkflow(workflowState);\n setNodeCheck(check);\n setConfigModalOpen(true);\n setIsLoading(false);\n return;\n }\n }\n\n if (mounted) {\n setWorkflow(workflowState);\n }\n return;\n }\n\n if (mounted) {\n // If a previous effect run already fetched the workflow (but was cancelled),\n // use its result rather than trying to create a new workflow.\n if (fetchedWorkflowRef.current) {\n setWorkflow(fetchedWorkflowRef.current);\n return;\n }\n\n if (loadRunId) {\n setLoadError(\n \"The workflow version for this TEST run is no longer available.\",\n );\n return;\n }\n\n // Version-not-found guard: a mistyped/removed version in the URL must\n // NOT silently create a real row — redirect to the newest version.\n const anyVersion = await getWorkflow(id, undefined, undefined);\n const missing = decideMissingWorkflow({\n createIntent: createIntentRef.current,\n otherVersionExists: !!anyVersion?.workflowKey,\n });\n if (missing === \"open-newest\" && anyVersion) {\n toast.info(`Version ${version} not found`, {\n description: `Opening ${anyVersion.version} instead.`,\n dismissible: true,\n });\n navigate(`../workflow/${id}/${anyVersion.version}`, {\n replace: true,\n });\n return;\n }\n\n // Opening a key that has no definition is READ-ONLY: show a\n // not-found state. Only an explicit \"Create Workflow\" navigation\n // (router state) may create one (BOFF-8060 F2).\n if (missing === \"not-found\") {\n if (mounted) setNotFound(true);\n return;\n }\n\n // Explicit create intent: the person asked for a new workflow.\n if (!creatingRef.current) {\n creatingRef.current = true;\n const initialDefinitionJson = {\n key: id,\n name: newWorkflow.name,\n description: newWorkflow.name,\n workflow_type: \"query-conditional\",\n data: {\n ...newWorkflow,\n },\n meta: {\n creator: \"api_create\",\n version: version,\n },\n tags: [],\n };\n\n try {\n const created = await createWorkflow({\n workflowKey: id!,\n version: version!,\n name: newWorkflow.name,\n description: newWorkflow.name,\n definitionJson: initialDefinitionJson,\n });\n\n if (created && mounted) {\n setWorkflow({\n ...newWorkflow,\n id: created.workflowKey,\n workflowKey: created.workflowKey,\n version: created.version,\n dbId: created.id,\n status: created.status ?? \"DRAFT\",\n });\n } else if (mounted) {\n setWorkflow(newWorkflow);\n }\n } catch (createError) {\n console.error(\n \"[WorkflowItem] Error creating workflow:\",\n createError,\n );\n if (mounted) {\n setWorkflow(fetchedWorkflowRef.current ?? newWorkflow);\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[WorkflowItem] Error loading workflow:\", error);\n if (mounted) {\n if (loadRunId) {\n setLoadError(\n \"The workflow version for this TEST run could not be loaded.\",\n );\n } else {\n setWorkflow(fetchedWorkflowRef.current ?? newWorkflow);\n }\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n creatingRef.current = false;\n }\n }\n };\n\n loadWorkflow();\n return () => {\n mounted = false;\n };\n }, [\n id,\n version,\n createWorkflow,\n getWorkflow,\n newWorkflow,\n resetWorkflow,\n navigate,\n loadRunId,\n retryNonce,\n // doNodeCheckRef is intentionally omitted — it's a ref (stable by definition)\n // and including doNodeCheck here caused infinite re-runs because installedAppIds\n // produces a new Set reference on every render.\n ]);\n\n if (loadError)\n return (\n <div className=\"flex h-full min-h-[60vh] w-full items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bg-subtle)] p-6 text-center\">\n <Icon\n icon=\"mdi:alert-circle-outline\"\n className=\"mx-auto mb-3 size-8 text-[var(--color-status-error-text)]\"\n />\n <h2 className=\"text-lg font-semibold text-[var(--color-status-error-text)]\">\n Unable to load run\n </h2>\n <p className=\"mt-2 text-sm text-[var(--color-status-error-text)]\">\n {loadError}\n </p>\n <button\n type=\"button\"\n className=\"mt-4 rounded-md border border-border px-3 py-2 text-sm text-foreground hover:bg-muted\"\n onClick={() => navigate(\"../runs\")}\n >\n Back to executions\n </button>\n </div>\n </div>\n );\n\n if (isLoading)\n return (\n // Same loading treatment as the Available Nodes panel, centered on the\n // full canvas area while the workflow definition is fetched.\n <div className=\"flex h-full min-h-[60vh] w-full items-center justify-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <Icon\n icon=\"mynaui:spinner\"\n className=\"size-6 animate-spin text-primary\"\n />\n <span className=\"text-sm text-foreground/60\">\n Loading workflow...\n </span>\n </div>\n </div>\n );\n\n if (notFound)\n return (\n <div\n role=\"alert\"\n className=\"flex h-full min-h-[60vh] w-full flex-col items-center justify-center gap-3 p-6 text-center\"\n >\n <p className=\"text-base font-medium text-foreground\">\n {tr(\n \"fluidgrids.builder.workflowNotFound.title\",\n \"Workflow not found\",\n )}\n </p>\n <p className=\"max-w-md text-sm text-foreground/60\">\n {tr(\n \"fluidgrids.builder.workflowNotFound.description\",\n \"No workflow with this key exists in this workspace, or it could not be loaded. Nothing was created.\",\n )}\n </p>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n className=\"rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground\"\n onClick={() => setRetryNonce((n) => n + 1)}\n >\n {tr(\"fluidgrids.builder.workflowNotFound.retry\", \"Try again\")}\n </button>\n <button\n type=\"button\"\n className=\"rounded-md border px-4 py-2 text-sm font-medium text-foreground\"\n onClick={() => navigate(\"../list\")}\n >\n {tr(\n \"fluidgrids.builder.workflowNotFound.back\",\n \"Back to Workflows\",\n )}\n </button>\n </div>\n </div>\n );\n\n return (\n <>\n {/* Missing-nodes modal shown before a workflow with uninstalled nodes is\n opened in the builder. Covers shared workflows and AI-assistant-created\n workflows that reference nodes not yet installed in the workspace. */}\n {configModalOpen && pendingWorkflow && (\n <Suspense fallback={null}>\n <LazyMissingNodesInstallModal\n open={configModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n // Dismissed without confirming — open anyway (user can install later)\n handleSkipInstall();\n }\n }}\n workflowName={pendingWorkflow.name}\n nodeCheckResult={nodeCheck}\n onConfirm={handleInstallConfirm}\n onSkip={handleSkipInstall}\n installing={installing}\n installProgress={installProgress}\n installErrors={installErrors}\n />\n </Suspense>\n )}\n\n {workflow && !isLoading && <FlowBuilderPage workflow={workflow} />}\n </>\n );\n}\n","import WorkflowItem from \"../builder/app/workflow/work/page\";\nimport { ErrorBoundary } from \"@burdenoff/fe-libs/shared/components\";\nimport { useNavigate } from \"react-router\";\nimport \"@xyflow/react/dist/style.css\";\n\n/**\n * WorkflowBuilder page with ErrorBoundary for graceful crash recovery.\n * If the builder throws (React Flow error, node rendering crash, etc.),\n * the user sees a recovery UI instead of a blank screen.\n */\nexport function WorkflowBuilder() {\n const navigate = useNavigate();\n\n return (\n <ErrorBoundary\n fallback={(error) => (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4 p-8\">\n <div className=\"rounded-lg border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bg-subtle)] p-6 max-w-lg w-full text-center\">\n <h2 className=\"text-lg font-semibold text-[var(--color-status-error-text)] mb-2\">\n Workflow Builder Error\n </h2>\n <p className=\"text-sm text-[var(--color-text-secondary)] mb-4\">\n Something went wrong while loading the workflow builder. This may\n be caused by invalid workflow data or a rendering issue.\n </p>\n {error && (\n <details className=\"text-left mb-4\">\n <summary className=\"text-xs text-[var(--color-text-tertiary)] cursor-pointer hover:text-[var(--color-text-secondary)]\">\n Error details\n </summary>\n <pre className=\"mt-2 p-2 bg-[var(--color-bg-canvas)] rounded text-xs overflow-auto max-h-32 text-[var(--color-text-tertiary)]\">\n {error.message}\n </pre>\n </details>\n )}\n <div className=\"flex gap-3 justify-center\">\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"px-4 py-2 text-sm font-medium rounded-md bg-[var(--color-bg-accent)] text-[var(--color-text-on-accent)] hover:opacity-90 transition-opacity\"\n >\n Reload Page\n </button>\n <button\n type=\"button\"\n onClick={() => navigate(\"../list\")}\n className=\"px-4 py-2 text-sm font-medium rounded-md border border-default text-[var(--color-text-secondary)] hover:bg-[var(--color-bg-elevated)] transition-colors\"\n >\n Back to Workflows\n </button>\n </div>\n </div>\n </div>\n )}\n >\n <WorkflowItem />\n </ErrorBoundary>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination } from './chunk-
|
|
2
|
-
import { useWorkflowDefinitions } from './chunk-
|
|
3
|
-
import { useExecutionsStore } from './chunk-
|
|
1
|
+
import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination } from './chunk-FA7S7YMY.js';
|
|
2
|
+
import { useWorkflowDefinitions } from './chunk-XBIHI224.js';
|
|
3
|
+
import { useExecutionsStore } from './chunk-DFGJKGWH.js';
|
|
4
4
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
5
5
|
import { useRef, useCallback, useMemo } from 'react';
|
|
6
6
|
import { useNavigate, useSearchParams } from 'react-router';
|
|
@@ -383,5 +383,5 @@ function ExecutionsListPage() {
|
|
|
383
383
|
}
|
|
384
384
|
|
|
385
385
|
export { ExecutionsListPage };
|
|
386
|
-
//# sourceMappingURL=chunk-
|
|
387
|
-
//# sourceMappingURL=chunk-
|
|
386
|
+
//# sourceMappingURL=chunk-CZ7APZ5B.js.map
|
|
387
|
+
//# sourceMappingURL=chunk-CZ7APZ5B.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/executions/pages/ExecutionsListPage.tsx"],"names":[],"mappings":"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","file":"chunk-LVKUOMLJ.js","sourcesContent":["import { useCallback, useMemo, useRef } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n ExecutionFilters,\n ExecutionStats,\n ExecutionTable,\n ExecutionCards,\n ExecutionTimeline,\n Pagination,\n} from \"../components\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport {\n useExecutionsWithStore,\n useExecutionStats,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useWorkflowDefinitions } from \"../../../hooks/useWorkflows\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { useTr } from \"../../../hooks/useTr\";\n\nexport function ExecutionsListPage() {\n const tr = useTr();\n const navigate = useNavigate();\n\n // Store state\n const {\n viewMode,\n setViewMode,\n setSelectedExecution,\n selection,\n clearSelection,\n setStatusFilter,\n setWorkflowFilter,\n autoRefresh,\n autoRefreshInterval,\n } = useExecutionsStore();\n\n // Seed the workflow filter from the URL (?workflowKey=...) synchronously —\n // BEFORE useExecutionsWithStore() below reads it — so the first runs query\n // already carries the filter and no stale unfiltered request is fired. Lets\n // \"View Runs\" in the builder open this list scoped to one workflow; arriving\n // without the param (e.g. the sidebar \"Runs\" link) clears any stale filter.\n // Sync only when the URL param actually changes (tracked via a ref) so manual\n // dropdown changes — which update the store but not the URL — aren't reverted.\n const [searchParams] = useSearchParams();\n const workflowKeyParam = searchParams.get(\"workflowKey\") ?? \"\";\n const lastWorkflowKeyParam = useRef<string | null>(null);\n if (lastWorkflowKeyParam.current !== workflowKeyParam) {\n lastWorkflowKeyParam.current = workflowKeyParam;\n if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {\n setWorkflowFilter(workflowKeyParam);\n }\n }\n\n // Data fetching\n const { executions, total, loading, error, refetch } =\n useExecutionsWithStore();\n const {\n stats,\n loading: statsLoading,\n refetch: refetchStats,\n } = useExecutionStats();\n const { workflows } = useWorkflowDefinitions({ limit: 100 });\n const {\n cancelExecution,\n pauseExecution,\n resumeExecution,\n retryExecution,\n retryExecutions,\n } = useExecutionActions();\n\n // Auto-refresh\n useAutoRefresh(\n useCallback(() => {\n refetch();\n refetchStats();\n }, [refetch, refetchStats]),\n autoRefresh,\n autoRefreshInterval,\n );\n\n // Transform stats for component\n const executionStats = useMemo(() => {\n if (!stats) return null;\n return {\n total: stats.runsCountTotal,\n running: stats.runsRunningCount,\n completed: stats.runsCompletedCount,\n failed: stats.runsFailedCount,\n cancelled: stats.runsCancelledCount ?? 0,\n pending: stats.runsPendingCount,\n waiting: stats.runsWaitingCount ?? 0,\n successRate: stats.workflowSuccessRate,\n avgDuration: stats.avgWorkflowExecutionTimeSeconds,\n };\n }, [stats]);\n\n // Transform workflows for filter\n const workflowOptions = useMemo(\n () =>\n workflows.map((w) => ({\n workflowKey: w.workflowKey,\n name: w.name,\n })),\n [workflows],\n );\n\n // workflowKey → name fallback for run rows whose workflow relation is\n // missing (e.g. before the backend include rolled out).\n const workflowNames = useMemo(() => {\n const map: Record<string, string> = {};\n for (const w of workflows) map[w.workflowKey] = w.name;\n return map;\n }, [workflows]);\n\n // Handlers\n const handleRowClick = (execution: WorkflowRun) => {\n setSelectedExecution(execution);\n navigate(`../runs/${execution.id}`);\n };\n\n // Retry starts a NEW run of the same pinned version, from the same trigger\n // node and with the same trigger payload (BOFF-7269). It used to navigate to\n // the run's detail page, which only offers per-node retry, so nothing ran.\n const handleRetry = async (execution: WorkflowRun) => {\n const result = await retryExecution(execution);\n if (!result.ok) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionsList.retryFailed\",\n \"Could not start a new run\",\n ),\n { description: result.message },\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionsList.retryStarted\",\n \"New run started\",\n ),\n );\n navigate(`../runs/${result.run.runId}`);\n };\n\n const handleAction = async (\n action: ExecutionAction,\n execution: WorkflowRun,\n ) => {\n switch (action) {\n case \"cancel\":\n await cancelExecution(execution.id);\n break;\n case \"pause\":\n await pauseExecution(execution.id);\n break;\n case \"resume\":\n await resumeExecution(execution.id);\n break;\n case \"retry\":\n await handleRetry(execution);\n break;\n case \"view\":\n navigate(`../runs/${execution.id}`);\n break;\n }\n refetch();\n };\n\n const handleFilterByStatus = (status: RunStatus | \"all\") => {\n setStatusFilter(status);\n };\n\n const handleBulkRetry = async () => {\n if (selection.runIds.length === 0) return;\n const retried = await retryExecutions(selection.runIds.slice(0, 10));\n if (retried.length === 0) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionsList.bulkRetryFailed\",\n \"Could not retry the selected runs\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionsList.bulkRetryStarted\",\n `${retried.length} new run${retried.length === 1 ? \"\" : \"s\"} started`,\n ),\n );\n clearSelection();\n refetch();\n };\n\n const handleBulkAction = async (action: \"cancel\" | \"pause\" | \"resume\") => {\n if (selection.runIds.length === 0) return;\n\n const promises = selection.runIds.map((id) => {\n switch (action) {\n case \"cancel\":\n return cancelExecution(id);\n case \"pause\":\n return pauseExecution(id);\n case \"resume\":\n return resumeExecution(id);\n }\n });\n\n const results = await Promise.allSettled(promises);\n const failures = results.filter((r) => r.status === \"rejected\");\n if (failures.length > 0) {\n console.error(\n `Bulk action partially failed: ${failures.length}/${results.length} failed`,\n );\n }\n clearSelection();\n refetch();\n };\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div\n className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\"\n data-tour=\"fluidgrids-runs-header\"\n >\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.executions.executionsList.title\", \"Executions\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.executions.executionsList.subtitle\",\n \"Monitor and manage your workflow runs\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1\">\n <button\n onClick={() => setViewMode(\"table\")}\n className={`p-2 rounded ${\n viewMode === \"table\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.tableViewTooltip\",\n \"Table View\",\n )}\n >\n <Icon icon=\"mdi:table\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"cards\")}\n className={`p-2 rounded ${\n viewMode === \"cards\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.cardViewTooltip\",\n \"Card View\",\n )}\n >\n <Icon icon=\"mdi:view-grid\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"timeline\")}\n className={`p-2 rounded ${\n viewMode === \"timeline\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.timelineViewTooltip\",\n \"Timeline View\",\n )}\n >\n <Icon icon=\"mdi:timeline\" width={18} />\n </button>\n </div>\n\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.executions.executionsList.backToWorkflows\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-stats\">\n <ExecutionStats\n stats={executionStats}\n loading={statsLoading}\n onFilterByStatus={handleFilterByStatus}\n />\n </div>\n\n {/* Filters */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-filters\">\n <ExecutionFilters workflows={workflowOptions} onRefresh={refetch} />\n </div>\n\n {/* Bulk Actions */}\n {selection.runIds.length > 0 && (\n <div className=\"mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3\">\n <span className=\"text-sm text-text-primary\">\n {selection.runIds.length}{\" \"}\n {selection.runIds.length > 1\n ? tr(\n \"fluidgrids.executions.executionsList.selectionCountPlural\",\n \"executions selected\",\n )\n : tr(\n \"fluidgrids.executions.executionsList.selectionCountSingular\",\n \"execution selected\",\n )}\n </span>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void handleBulkRetry()}\n >\n <Icon icon=\"mdi:refresh\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkRetryButton\",\n \"Retry selected\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"cancel\")}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkCancelButton\",\n \"Cancel\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"pause\")}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkPauseButton\",\n \"Pause\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"resume\")}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkResumeButton\",\n \"Resume\",\n )}\n </Button>\n </div>\n <button\n onClick={clearSelection}\n className=\"ml-auto text-sm text-text-secondary hover:text-text-primary\"\n >\n {tr(\n \"fluidgrids.executions.executionsList.clearSelection\",\n \"Clear selection\",\n )}\n </button>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\n \"fluidgrids.executions.executionsList.loadErrorTitle\",\n \"Error loading executions\",\n )}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {error.message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refetch}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n {tr(\"fluidgrids.executions.executionsList.retryButton\", \"Retry\")}\n </Button>\n </div>\n )}\n\n {/* Executions View — switches between table, cards, and timeline */}\n {viewMode === \"table\" && (\n <ExecutionTable\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onRowClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"cards\" && (\n <ExecutionCards\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onCardClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"timeline\" && (\n <ExecutionTimeline\n executions={executions}\n loading={loading}\n onItemClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n\n {/* Pagination */}\n <Pagination totalItems={total} />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/modules/executions/pages/ExecutionsListPage.tsx"],"names":[],"mappings":"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","file":"chunk-CZ7APZ5B.js","sourcesContent":["import { useCallback, useMemo, useRef } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n ExecutionFilters,\n ExecutionStats,\n ExecutionTable,\n ExecutionCards,\n ExecutionTimeline,\n Pagination,\n} from \"../components\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport {\n useExecutionsWithStore,\n useExecutionStats,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useWorkflowDefinitions } from \"../../../hooks/useWorkflows\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { useTr } from \"../../../hooks/useTr\";\n\nexport function ExecutionsListPage() {\n const tr = useTr();\n const navigate = useNavigate();\n\n // Store state\n const {\n viewMode,\n setViewMode,\n setSelectedExecution,\n selection,\n clearSelection,\n setStatusFilter,\n setWorkflowFilter,\n autoRefresh,\n autoRefreshInterval,\n } = useExecutionsStore();\n\n // Seed the workflow filter from the URL (?workflowKey=...) synchronously —\n // BEFORE useExecutionsWithStore() below reads it — so the first runs query\n // already carries the filter and no stale unfiltered request is fired. Lets\n // \"View Runs\" in the builder open this list scoped to one workflow; arriving\n // without the param (e.g. the sidebar \"Runs\" link) clears any stale filter.\n // Sync only when the URL param actually changes (tracked via a ref) so manual\n // dropdown changes — which update the store but not the URL — aren't reverted.\n const [searchParams] = useSearchParams();\n const workflowKeyParam = searchParams.get(\"workflowKey\") ?? \"\";\n const lastWorkflowKeyParam = useRef<string | null>(null);\n if (lastWorkflowKeyParam.current !== workflowKeyParam) {\n lastWorkflowKeyParam.current = workflowKeyParam;\n if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {\n setWorkflowFilter(workflowKeyParam);\n }\n }\n\n // Data fetching\n const { executions, total, loading, error, refetch } =\n useExecutionsWithStore();\n const {\n stats,\n loading: statsLoading,\n refetch: refetchStats,\n } = useExecutionStats();\n const { workflows } = useWorkflowDefinitions({ limit: 100 });\n const {\n cancelExecution,\n pauseExecution,\n resumeExecution,\n retryExecution,\n retryExecutions,\n } = useExecutionActions();\n\n // Auto-refresh\n useAutoRefresh(\n useCallback(() => {\n refetch();\n refetchStats();\n }, [refetch, refetchStats]),\n autoRefresh,\n autoRefreshInterval,\n );\n\n // Transform stats for component\n const executionStats = useMemo(() => {\n if (!stats) return null;\n return {\n total: stats.runsCountTotal,\n running: stats.runsRunningCount,\n completed: stats.runsCompletedCount,\n failed: stats.runsFailedCount,\n cancelled: stats.runsCancelledCount ?? 0,\n pending: stats.runsPendingCount,\n waiting: stats.runsWaitingCount ?? 0,\n successRate: stats.workflowSuccessRate,\n avgDuration: stats.avgWorkflowExecutionTimeSeconds,\n };\n }, [stats]);\n\n // Transform workflows for filter\n const workflowOptions = useMemo(\n () =>\n workflows.map((w) => ({\n workflowKey: w.workflowKey,\n name: w.name,\n })),\n [workflows],\n );\n\n // workflowKey → name fallback for run rows whose workflow relation is\n // missing (e.g. before the backend include rolled out).\n const workflowNames = useMemo(() => {\n const map: Record<string, string> = {};\n for (const w of workflows) map[w.workflowKey] = w.name;\n return map;\n }, [workflows]);\n\n // Handlers\n const handleRowClick = (execution: WorkflowRun) => {\n setSelectedExecution(execution);\n navigate(`../runs/${execution.id}`);\n };\n\n // Retry starts a NEW run of the same pinned version, from the same trigger\n // node and with the same trigger payload (BOFF-7269). It used to navigate to\n // the run's detail page, which only offers per-node retry, so nothing ran.\n const handleRetry = async (execution: WorkflowRun) => {\n const result = await retryExecution(execution);\n if (!result.ok) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionsList.retryFailed\",\n \"Could not start a new run\",\n ),\n { description: result.message },\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionsList.retryStarted\",\n \"New run started\",\n ),\n );\n navigate(`../runs/${result.run.runId}`);\n };\n\n const handleAction = async (\n action: ExecutionAction,\n execution: WorkflowRun,\n ) => {\n switch (action) {\n case \"cancel\":\n await cancelExecution(execution.id);\n break;\n case \"pause\":\n await pauseExecution(execution.id);\n break;\n case \"resume\":\n await resumeExecution(execution.id);\n break;\n case \"retry\":\n await handleRetry(execution);\n break;\n case \"view\":\n navigate(`../runs/${execution.id}`);\n break;\n }\n refetch();\n };\n\n const handleFilterByStatus = (status: RunStatus | \"all\") => {\n setStatusFilter(status);\n };\n\n const handleBulkRetry = async () => {\n if (selection.runIds.length === 0) return;\n const retried = await retryExecutions(selection.runIds.slice(0, 10));\n if (retried.length === 0) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionsList.bulkRetryFailed\",\n \"Could not retry the selected runs\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionsList.bulkRetryStarted\",\n `${retried.length} new run${retried.length === 1 ? \"\" : \"s\"} started`,\n ),\n );\n clearSelection();\n refetch();\n };\n\n const handleBulkAction = async (action: \"cancel\" | \"pause\" | \"resume\") => {\n if (selection.runIds.length === 0) return;\n\n const promises = selection.runIds.map((id) => {\n switch (action) {\n case \"cancel\":\n return cancelExecution(id);\n case \"pause\":\n return pauseExecution(id);\n case \"resume\":\n return resumeExecution(id);\n }\n });\n\n const results = await Promise.allSettled(promises);\n const failures = results.filter((r) => r.status === \"rejected\");\n if (failures.length > 0) {\n console.error(\n `Bulk action partially failed: ${failures.length}/${results.length} failed`,\n );\n }\n clearSelection();\n refetch();\n };\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div\n className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\"\n data-tour=\"fluidgrids-runs-header\"\n >\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.executions.executionsList.title\", \"Executions\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.executions.executionsList.subtitle\",\n \"Monitor and manage your workflow runs\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1\">\n <button\n onClick={() => setViewMode(\"table\")}\n className={`p-2 rounded ${\n viewMode === \"table\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.tableViewTooltip\",\n \"Table View\",\n )}\n >\n <Icon icon=\"mdi:table\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"cards\")}\n className={`p-2 rounded ${\n viewMode === \"cards\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.cardViewTooltip\",\n \"Card View\",\n )}\n >\n <Icon icon=\"mdi:view-grid\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"timeline\")}\n className={`p-2 rounded ${\n viewMode === \"timeline\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.timelineViewTooltip\",\n \"Timeline View\",\n )}\n >\n <Icon icon=\"mdi:timeline\" width={18} />\n </button>\n </div>\n\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.executions.executionsList.backToWorkflows\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-stats\">\n <ExecutionStats\n stats={executionStats}\n loading={statsLoading}\n onFilterByStatus={handleFilterByStatus}\n />\n </div>\n\n {/* Filters */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-filters\">\n <ExecutionFilters workflows={workflowOptions} onRefresh={refetch} />\n </div>\n\n {/* Bulk Actions */}\n {selection.runIds.length > 0 && (\n <div className=\"mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3\">\n <span className=\"text-sm text-text-primary\">\n {selection.runIds.length}{\" \"}\n {selection.runIds.length > 1\n ? tr(\n \"fluidgrids.executions.executionsList.selectionCountPlural\",\n \"executions selected\",\n )\n : tr(\n \"fluidgrids.executions.executionsList.selectionCountSingular\",\n \"execution selected\",\n )}\n </span>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void handleBulkRetry()}\n >\n <Icon icon=\"mdi:refresh\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkRetryButton\",\n \"Retry selected\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"cancel\")}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkCancelButton\",\n \"Cancel\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"pause\")}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkPauseButton\",\n \"Pause\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"resume\")}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkResumeButton\",\n \"Resume\",\n )}\n </Button>\n </div>\n <button\n onClick={clearSelection}\n className=\"ml-auto text-sm text-text-secondary hover:text-text-primary\"\n >\n {tr(\n \"fluidgrids.executions.executionsList.clearSelection\",\n \"Clear selection\",\n )}\n </button>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\n \"fluidgrids.executions.executionsList.loadErrorTitle\",\n \"Error loading executions\",\n )}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {error.message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refetch}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n {tr(\"fluidgrids.executions.executionsList.retryButton\", \"Retry\")}\n </Button>\n </div>\n )}\n\n {/* Executions View — switches between table, cards, and timeline */}\n {viewMode === \"table\" && (\n <ExecutionTable\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onRowClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"cards\" && (\n <ExecutionCards\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onCardClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"timeline\" && (\n <ExecutionTimeline\n executions={executions}\n loading={loading}\n onItemClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n\n {/* Pagination */}\n <Pagination totalItems={total} />\n </div>\n );\n}\n"]}
|
|
@@ -166,7 +166,6 @@ function setFluidGridsConfig(newConfig) {
|
|
|
166
166
|
runtimeConfig = { ...runtimeConfig, ...newConfig };
|
|
167
167
|
}
|
|
168
168
|
function resetFluidGridsConfig() {
|
|
169
|
-
useExecutionsStore.setState(useExecutionsStore.getInitialState(), true);
|
|
170
169
|
runtimeConfig = {
|
|
171
170
|
apiGatewayUrl: "",
|
|
172
171
|
workspaceId: ""
|
|
@@ -198,7 +197,10 @@ function getGraphQLEndpoint(baseUrl) {
|
|
|
198
197
|
}
|
|
199
198
|
return `${normalizedBase}/workspaces/graphql`;
|
|
200
199
|
}
|
|
200
|
+
function resetFluidGridsExecutionState() {
|
|
201
|
+
useExecutionsStore.setState(useExecutionsStore.getInitialState(), true);
|
|
202
|
+
}
|
|
201
203
|
|
|
202
|
-
export { config, getFluidGridsConfig, getGraphQLEndpoint, resetFluidGridsConfig, setFluidGridsConfig, useExecutionsStore, validateTrustedOrigin };
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
204
|
-
//# sourceMappingURL=chunk-
|
|
204
|
+
export { config, getFluidGridsConfig, getGraphQLEndpoint, resetFluidGridsConfig, resetFluidGridsExecutionState, setFluidGridsConfig, useExecutionsStore, validateTrustedOrigin };
|
|
205
|
+
//# sourceMappingURL=chunk-DFGJKGWH.js.map
|
|
206
|
+
//# sourceMappingURL=chunk-DFGJKGWH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/executions/store/executionsStore.ts","../src/config/index.ts"],"names":[],"mappings":"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","file":"chunk-DFGJKGWH.js","sourcesContent":["import { create } from \"zustand\";\nimport type {\n RunStatus,\n ExecutionsFilter,\n ExecutionsViewMode,\n ExecutionSelection,\n ExecutionsPagination,\n DateRange,\n WorkflowRun,\n} from \"../types\";\n\ninterface ExecutionsState {\n // View state\n viewMode: ExecutionsViewMode;\n selectedExecution: WorkflowRun | null;\n expandedRows: Set<string>;\n\n // Selection\n selection: ExecutionSelection;\n\n // Filters\n filter: ExecutionsFilter;\n\n // Pagination\n pagination: ExecutionsPagination;\n\n // UI state\n isFilterPanelOpen: boolean;\n isDetailsPanelOpen: boolean;\n autoRefresh: boolean;\n autoRefreshInterval: number;\n\n // Real-time\n liveRunIds: Set<string>;\n\n // Actions - View\n setViewMode: (mode: ExecutionsViewMode) => void;\n setSelectedExecution: (execution: WorkflowRun | null) => void;\n toggleRowExpanded: (runId: string) => void;\n\n // Actions - Selection\n setSelection: (selection: ExecutionSelection) => void;\n toggleSelectRun: (runId: string) => void;\n selectAll: (runIds: string[]) => void;\n clearSelection: () => void;\n\n // Actions - Filter\n updateFilter: (filter: Partial<ExecutionsFilter>) => void;\n setStatusFilter: (status: RunStatus | \"all\") => void;\n setWorkflowFilter: (workflowKey: string) => void;\n setDateRange: (dateRange: DateRange) => void;\n setSearchQuery: (search: string) => void;\n setTriggerTypeFilter: (triggerType: ExecutionsFilter[\"triggerType\"]) => void;\n setDurationFilter: (\n durationMinSeconds: number | null,\n durationMaxSeconds: number | null,\n ) => void;\n setErrorTypeFilter: (errorType: ExecutionsFilter[\"errorType\"]) => void;\n setNodeFilter: (nodeId: string) => void;\n resetFilters: () => void;\n\n // Actions - Pagination\n setPage: (page: number) => void;\n setPageSize: (pageSize: number) => void;\n setTotal: (total: number) => void;\n\n // Actions - UI\n toggleFilterPanel: () => void;\n toggleDetailsPanel: () => void;\n setAutoRefresh: (enabled: boolean) => void;\n setAutoRefreshInterval: (interval: number) => void;\n\n // Actions - Real-time\n addLiveRun: (runId: string) => void;\n removeLiveRun: (runId: string) => void;\n clearLiveRuns: () => void;\n}\n\nconst defaultFilter: ExecutionsFilter = {\n status: \"all\",\n workflowKey: \"\",\n dateRange: {\n start: null,\n end: null,\n preset: \"all\",\n },\n search: \"\",\n triggerType: \"all\",\n durationMinSeconds: null,\n durationMaxSeconds: null,\n errorType: \"all\",\n nodeId: \"\",\n};\n\nconst defaultPagination: ExecutionsPagination = {\n page: 1,\n pageSize: 25,\n total: 0,\n};\n\nexport const useExecutionsStore = create<ExecutionsState>((set) => ({\n // Initial state\n viewMode: \"table\",\n selectedExecution: null,\n expandedRows: new Set(),\n\n selection: {\n runIds: [],\n allSelected: false,\n },\n\n filter: defaultFilter,\n pagination: defaultPagination,\n\n isFilterPanelOpen: false,\n isDetailsPanelOpen: false,\n autoRefresh: true,\n autoRefreshInterval: 5000,\n\n liveRunIds: new Set(),\n\n // Actions - View\n setViewMode: (mode) => set({ viewMode: mode }),\n\n setSelectedExecution: (execution) =>\n set({\n selectedExecution: execution,\n isDetailsPanelOpen: execution !== null,\n }),\n\n toggleRowExpanded: (runId) =>\n set((state) => {\n const newExpanded = new Set(state.expandedRows);\n if (newExpanded.has(runId)) {\n newExpanded.delete(runId);\n } else {\n newExpanded.add(runId);\n }\n return { expandedRows: newExpanded };\n }),\n\n // Actions - Selection\n setSelection: (selection) => set({ selection }),\n\n toggleSelectRun: (runId) =>\n set((state) => {\n const isSelected = state.selection.runIds.includes(runId);\n const newRunIds = isSelected\n ? state.selection.runIds.filter((id) => id !== runId)\n : [...state.selection.runIds, runId];\n return {\n selection: {\n runIds: newRunIds,\n allSelected: false,\n },\n };\n }),\n\n selectAll: (runIds) =>\n set((state) => ({\n selection: {\n runIds: state.selection.allSelected ? [] : runIds,\n allSelected: !state.selection.allSelected,\n },\n })),\n\n clearSelection: () =>\n set({\n selection: {\n runIds: [],\n allSelected: false,\n },\n }),\n\n // Actions - Filter\n updateFilter: (filterUpdate) =>\n set((state) => ({\n filter: { ...state.filter, ...filterUpdate },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setStatusFilter: (status) =>\n set((state) => ({\n filter: { ...state.filter, status },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setWorkflowFilter: (workflowKey) =>\n set((state) => ({\n filter: { ...state.filter, workflowKey },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setDateRange: (dateRange) =>\n set((state) => ({\n filter: { ...state.filter, dateRange },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setSearchQuery: (search) =>\n set((state) => ({\n filter: { ...state.filter, search },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setTriggerTypeFilter: (triggerType) =>\n set((state) => ({\n filter: { ...state.filter, triggerType },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setDurationFilter: (durationMinSeconds, durationMaxSeconds) =>\n set((state) => ({\n filter: { ...state.filter, durationMinSeconds, durationMaxSeconds },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setErrorTypeFilter: (errorType) =>\n set((state) => ({\n filter: { ...state.filter, errorType },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setNodeFilter: (nodeId) =>\n set((state) => ({\n filter: { ...state.filter, nodeId },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n resetFilters: () =>\n set({\n filter: defaultFilter,\n pagination: { ...defaultPagination },\n }),\n\n // Actions - Pagination\n setPage: (page) =>\n set((state) => ({\n pagination: { ...state.pagination, page },\n })),\n\n setPageSize: (pageSize) =>\n set((state) => ({\n pagination: { ...state.pagination, pageSize, page: 1 },\n })),\n\n setTotal: (total) =>\n set((state) => ({\n pagination: { ...state.pagination, total },\n })),\n\n // Actions - UI\n toggleFilterPanel: () =>\n set((state) => ({\n isFilterPanelOpen: !state.isFilterPanelOpen,\n })),\n\n toggleDetailsPanel: () =>\n set((state) => ({\n isDetailsPanelOpen: !state.isDetailsPanelOpen,\n })),\n\n setAutoRefresh: (enabled) => set({ autoRefresh: enabled }),\n\n setAutoRefreshInterval: (interval) => set({ autoRefreshInterval: interval }),\n\n // Actions - Real-time\n addLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.add(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n removeLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.delete(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n clearLiveRuns: () => set({ liveRunIds: new Set() }),\n}));\n","import { useExecutionsStore } from \"../modules/executions/store/executionsStore\";\n/**\n * Configuration module for FluidGrids SDK\n */\n\n/** Result passed to the onWorkflowSaved callback after a successful save */\nexport interface WorkflowSavedResult {\n /** Database row ID of the saved workflow definition */\n dbId: string;\n /** Human-readable workflow key (e.g., \"github_user_profile\") */\n workflowKey: string;\n /** Semantic version string (e.g., \"v1\", \"v2\") */\n version: string;\n /** Display name of the workflow */\n name: string;\n /** Optional description */\n description?: string;\n /** What kind of save operation occurred */\n operation: \"created\" | \"updated\" | \"versioned\";\n}\n\nexport interface FluidGridsConfig {\n /** GraphQL endpoint URL (workspace gateway) */\n apiGatewayUrl: string;\n /** GraphQL endpoint URL (global gateway) */\n globalApiUrl?: string;\n /** Auth token for API calls */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current tenant ID */\n tenantId?: string;\n /** Organization ID */\n organizationId?: string;\n /**\n * @deprecated Never read. Share/Embed links used to be built from this\n * value, which no host ever set, so they shipped as `undefined/...`\n * (BOFF-7753). Kept only so existing host configs still type-check.\n */\n fluidgridFrontendUrl?: string;\n /** Product ID for workflow isolation (e.g., 'bigconsole', 'botlit', 'fluidgrids') */\n productId?: string;\n /** Product name for display purposes */\n productName?: string;\n /** Optional allowlist for host origins embedding the SDK */\n trustedOrigins?: string[];\n /**\n * Callback invoked after a workflow is successfully saved to wspace-workflow-svc.\n * Host apps (BigConsole, Botlit) can use this to sync metadata to their own backends.\n * Errors thrown by this callback are caught and logged — they never block the save.\n */\n onWorkflowSaved?: (result: WorkflowSavedResult) => void | Promise<void>;\n}\n\n// Default configuration\nlet runtimeConfig: FluidGridsConfig = {\n apiGatewayUrl: \"\",\n workspaceId: \"\",\n};\n\n/**\n * Get current configuration via proxy for live access\n */\nexport const config = new Proxy({} as FluidGridsConfig, {\n get(_, prop: keyof FluidGridsConfig) {\n return runtimeConfig[prop];\n },\n});\n\n/**\n * Get the full configuration object\n */\nexport function getFluidGridsConfig(): FluidGridsConfig {\n return { ...runtimeConfig };\n}\n\n/**\n * Set runtime configuration\n */\nexport function setFluidGridsConfig(\n newConfig: Partial<FluidGridsConfig>,\n): void {\n runtimeConfig = { ...runtimeConfig, ...newConfig };\n}\n\n/**\n * Reset configuration to defaults\n */\nexport function resetFluidGridsConfig(): void {\n runtimeConfig = {\n apiGatewayUrl: \"\",\n workspaceId: \"\",\n };\n}\n\nfunction normalizeOrigin(origin: string): string {\n return origin.replace(/\\/$/, \"\");\n}\n\nexport function validateTrustedOrigin(trustedOrigins?: string[]): void {\n if (typeof window === \"undefined\" || !trustedOrigins?.length) {\n return;\n }\n\n const currentOrigin = normalizeOrigin(window.location.origin);\n const allowedOrigins = trustedOrigins.map(normalizeOrigin);\n\n if (!allowedOrigins.includes(currentOrigin)) {\n throw new Error(\n `FluidGrids SDK blocked untrusted origin: ${currentOrigin}`,\n );\n }\n}\n\n/**\n * Get the GraphQL endpoint URL\n */\nexport function getGraphQLEndpoint(baseUrl?: string): string {\n const url = baseUrl || runtimeConfig.apiGatewayUrl;\n if (!url) {\n throw new Error(\"FluidGrids SDK requires apiGatewayUrl to be configured\");\n }\n const normalizedBase = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n if (normalizedBase.endsWith(\"/graphql\")) {\n return normalizedBase;\n }\n return `${normalizedBase}/workspaces/graphql`;\n}\n\n/** Clear user execution state only when a host session ends or changes identity. */\nexport function resetFluidGridsExecutionState(): void {\n useExecutionsStore.setState(useExecutionsStore.getInitialState(), true);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TemplateCard } from './chunk-
|
|
1
|
+
import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TemplateCard } from './chunk-5DQU54IB.js';
|
|
2
2
|
import { QuotaExhaustedDialog } from './chunk-AANIWER2.js';
|
|
3
|
-
import { useWorkflowDefinitions, useDuplicateWorkflow } from './chunk-
|
|
3
|
+
import { useWorkflowDefinitions, useDuplicateWorkflow } from './chunk-XBIHI224.js';
|
|
4
4
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
5
5
|
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
6
6
|
import { useParams, useNavigate } from 'react-router';
|
|
@@ -9874,5 +9874,5 @@ function TemplatesPage() {
|
|
|
9874
9874
|
}
|
|
9875
9875
|
|
|
9876
9876
|
export { A2AMessagePriority, A2AMessageStatus, A2ATrustLevel, ActionExecutionStatus, ActionSourceType, ActionStatus, ActionStyle, ActionTriggerType, ActionType, ActivityCategory, ActivityType, ActorType, AdaAdapterKind, AdaAdapterStatus, AdaAuthMethod, AdaConnectionStatus, AdaDataSubjectRequestStatus, AdaDataSubjectRequestType, AdaDataSubjectRetentionRule, AdaDriftStatus, AdaEdgeKind, AdaLegalCheckpointType, AdaPolicyEnforcement, AdaPolicyKind, AdaResourceState, AdaSeverity, AdaSyncKind, AdaSyncStatus, AdaViolationStatus, AgentCapabilityScope, AgentVisibility, AiContextStatus, AiContextType, AiPredictionStatus, AiPromptCategory, AiPromptStatus, AlertSeverity, AnalyticsEntityType, AnalyticsEventSeverity, AnalyticsGranularity, AnalyticsInsightSeverity, AnomalyDetectionMethod, AnomalyDirection, AppCategory, AppInstallationState, AppPermission, AppStatus, AppType, AppVisibility, ApprovalStatus, ArtAnchorType, ArtApprovalDecision, ArtAssetKind, ArtFeedbackStatus, ArtLicenseModel, ArtLicenseStatus, ArtMedium, ArtProductionRole, ArtProductionStatus, ArtReleaseStatus, ArtReviewStatus, ArtVisibility, ArtWorkStatus, ArtifactType, AssetAssignmentStatus, AssetBudgetStatus, AssetCondition, AssetDeadlineAlertKind, AssetDeadlineAlertStatus, AssetDepreciationMethod, AssetMeterUnit, AssetStatus, AssetTransactionStatus, AssetTransactionType, AssignmentSource, AssistantHistoryDeleteOutcome, AssistantHistoryEntryKind, AssistantHistoryRole, AssistantHistorySaveOutcome, AssistantMessageRole, AssistantRelayGateway, AthAgentRunStatus, AthAgentRunTrigger, AthAiAssessment, AthAvailabilityResponse, AthFixtureStatus, AthFixtureType, AthMemberRole, AthMemberStatus, AthMetricType, AthProgramLevel, AthProgramStatus, AthSessionStatus, AthSessionType, AthSport, AthTeamStatus, AthWorkoutStatus, AttendeeRole, AuthMethodFlow, AuthType, AuthorType, BackoffStrategy, BatchDownloadStatus, BigConsoleConflictResolution, BillingPlan, BillingType, BoardColumnType, BoardType, BookingFormFieldType, BookingPageType, BookingStatus, BotAppStatus, BotAppType, BotAppVisibility, BotlitAgentCapability, BotlitAgentStatus, BotlitAgentType, BotlitHealthStatus, BotlitLlmProviderType, BraAccountStatus, BraAccountType, BraAdvisorRole, BraAdvisorStatus, BraAggregationLinkStatus, BraAggregationProvider, BraAssetClass, BraGoalProjection, BraGoalStatus, BraGoalType, BraHouseholdStatus, BraInsightSeverity, BraInsightStatus, BraInsightType, BraPortfolioStatus, BraRebalanceStatus, BraRecurringCategory, BraRecurringFrequency, BraReportFrequency, BraReportRunStatus, BraRiskProfile, BraRiskSignalKind, BraScheduledReportStatus, BraTradeInstructionAction, BraTradeInstructionSource, BraTradeInstructionStatus, BraTransactionType, BudgetStatus, BuiAdminCopilotRole, BuiAiSuggestionOutcome, BuiAssessmentStatus, BuiAssessmentType, BuiCertificateStatus, BuiCertificationBody, BuiCohortStatus, BuiCourseLevel, BuiCourseStatus, BuiEnrollmentStatus, BuiLessonType, BuiLtiGradeSyncStatus, BuiLtiMessageType, BuiLtiRosterMemberStatus, BuiPacingHint, BuiProctoringDecision, BuiProctoringStatus, BuiProgressStatus, BuiQuestionType, BuiSkillCategory, BuiSkillStandardSource, BuiSubmissionStatus, BuiTutorAdaptiveLevel, BuiTutorMessageRole, BulkConversationAction, CalendarEventStatus, CalendarExecutionStatus, CalendarExportFormat, CalendarPromptStatus, CalendarResourceType, CalendarType, CallParticipantChangeType, CallState, CallType, CatalogVisibility, ChangeRisk, ChangeStatus, ChannelMessageStatus, ChannelPlatform, ChannelType, ChatRole, CheckInStatus, ChunkingMethod, CircuitState, CohortType, ColAssistantSuggestionKind, ColAssistantSuggestionStatus, ColCertainty, ColEventType, ColGender, ColGuardianRequestDecision, ColGuardianRequestStatus, ColGuardianRequestTargetKind, ColGuardianRequestType, ColKeepsakeBookStatus, ColLifeStatus, ColMemberRole, ColMembershipStatus, ColMemoryKind, ColPromptCategory, ColPromptRelationshipType, ColRelationshipType, ColStoryFormat, ColTreeStatus, ColVisibility, CollaboratorRole, CollectionActivityType, CollectionItemSortField, CollectionSortField, CollectionType, CollectionVisibility, ComBillingInterval, ComChannelType, ComChannelVisibility, ComCircleStatus, ComCircleVisibility, ComDevicePlatform, ComDigitalProductType, ComEventMode, ComEventStatus, ComExportFormat, ComFollowTargetType, ComLiveStreamStatus, ComMemberRole, ComMembershipStatus, ComModerationCategory, ComModerationReviewDecision, ComModerationTargetType, ComModerationVerdictType, ComMonetizationStatus, ComPaidEventStatus, ComPollStatus, ComPostStatus, ComPresence, ComReactionTargetType, ComReactionType, ComReportStatus, ComReportTargetType, ComRsvpStatus, ComTipIntentStatus, ComVoiceSessionStatus, ComVoiceSignalType, CommentExportFormat, CommentScheduleType, CommentStatus, CommentVisibility, ComparisonOperator, ComponentLifecycle, ComponentType, ConfigScope, ConflictResolution, ConnectionCredentialSource, ConnectionQuality, ConnectionStatus, ConsultationConsultantType, ConsultationStatus, ContentSearchEngine, ContentSearchStatus, ContentType, ConversationPermission, ConversationSortField, ConversationState, ConversationType, ConversationVisibility, ConversationsExportFormat, CooBrandStatus, CooCollaborationStatus, CooCollaboratorRole, CooCollectionStatus, CooLegalCheckpointType, CooLookOccasion, CooSeason, CooStyleCategory, CooStyleItemStatus, CooVisibility, CooWardrobeSource, CosAccessLevel, CosAnalysisStatus, CosDatasetStatus, CosDoiState, CosExternalRegistryMode, CosFieldType, CosGrantStatus, CosNotebookStatus, CosPipelineStatus, CosPipelineTrigger, CosReleaseStatus, CosRunStatus, CosSourceStatus, CosSourceType, CosStepKind, CosZenodoMirrorStatus, CrewPayrollCountry, CrewPayrollRunStatus, CrewfoundryExportFormat, CustomFieldType, DashboardCategory, DashboardEmbedAccessMode, DashboardEmbedPolicyStatus, DashboardEmbedTheme, DashboardLayout, DashboardSortField, DashboardStatus, DashboardStyleType, DashboardVisibility, DataClassification, DataSinkRefreshType, DataSinkSetupState, DataSinkSourceType, DataSinkStatus, DataSinkUpdateEventType, DataSourceTestStatus, DataSourceType, DataTableColumnType, DataTableFilterOp, DayOfWeek, DeliveryChannelType, DeliveryJobStatus, DeliveryPriority, DemandForecastScope, DependencyStatus, DependencyType, DeploymentEnvironment, DeploymentStatus, DiscoveryJobStatus, DlqStatus, DocStatus, DocumentStatus, DriverStatus, EcoCarbonEntryStatus, EcoConservationStatus, EcoDataSourceType, EcoEmissionScope, EcoHabitatProjectStatus, EcoIngestionJobStatus, EcoIngestionRecordType, EcoMeasurementSource, EcoObservationMethod, EcoReductionTargetStatus, EcoReportFramework, EcoReportStatus, EcoRestorationActivityType, EcoSensorKind, EcoSensorStatus, EcoSiteStatus, EcoSiteType, EcoTaxonGroup, EcoThresholdDirection, EcoThresholdSeverity, EmbedContentReviewState, EncryptionAlgorithm, EnergyLevel, EntityStatus, ErrorType, EventStatus, EventType, EventValidationStatus, EventVisibility, EventfullyManagedIntegrationConnectorStatus, EventfullyManagedIntegrationProvider, EventfullyManagedIntegrationSyncRunStatus, EventfullyManagedVirtualParticipantRole, EventfullyManagedVirtualSessionMode, EventfullyManagedVirtualSessionStatus, EventfullyManagedVirtualSignalType, ExecutionStatus, ExecutionType, ExecutorType, ExpenseOrderByField, ExpenseStatus, ExportArchiveFormat, ExportFormat, ExportJobStatus, ExportScope, ExportSortField, ExternalCalendarSyncDirection, ExternalCalendarSyncStatus, ExternalProviderType, FeatureRequestStatus, FieldMaskStrategy, FileEventType, FileMetadataSortField, FileShareAccessLevel, FileShareType, FileSortField, FileStatus, FileVisibility, FilterDataType, FilterOperator, FilterType, FluidGridsEventType, FluidGridsWorkflowStatus, FolderSortField, FolderStatus, FuelType, FunnelStepOrder, GeneratedLayoutType, GenerationStatus, GeofenceEventType, GeofenceTrigger, GgnomadAccessibilityFeature, GgnomadApprovalStatus, GgnomadBookingStatus, GgnomadBookingType, GgnomadCartStatus, GgnomadChannelSyncDirection, GgnomadChannelSyncStatus, GgnomadClaimStatus, GgnomadExportFormat, GgnomadGroupTripSplitMethod, GgnomadGroupTripVoteChoice, GgnomadListingStatus, GgnomadListingType, GgnomadLoyaltyTransactionType, GgnomadPrivateRequestAction, GgnomadPrivateRequestStatus, GgnomadPushPlatform, GgnomadSustainabilityPractice, GgnomadTicketStatus, GgnomadTripPlanItemType, GovAgentRunStatus, GovAgentRunTrigger, GovApplicationStatus, GovAssetCategory, GovAssetOperator, GovAssetStatus, GovBenchmarkScope, GovBudgetCategory, GovBudgetLineKind, GovBudgetStatus, GovCaseEscalationKind, GovCaseEscalationStatus, GovCaseNoteType, GovCasePriority, GovCommitmentStatus, GovConsultationStatus, GovConsultationType, GovDataLicense, GovDatasetFormat, GovDatasetStatus, GovDocumentStatus, GovElectionStatus, GovElectionType, GovEventCategory, GovEventImpact, GovFeeType, GovFundingSource, GovGrievanceStatus, GovIndicatorDirection, GovIndicatorDomain, GovIndicatorPeriodicity, GovIndicatorValueType, GovInsightKind, GovInsightSeverity, GovIntelEntityType, GovJurisdictionStatus, GovMilestoneStatus, GovOfficeType, GovPaymentStatus, GovPermitStatus, GovProjectStatus, GovProposalStatus, GovSentiment, GovServiceCategory, GovServiceStatus, GovTrendDirection, GovVerificationStatus, GraphMetadataOperator, GraphSearchMode, GraphSearchSortBy, GroupCompositionMode, GroupExportFormat, GroupScope, GroupSortField, GroupStatus, GroupType, GroupVisibility, GroupsExportFormat, GrowLocationType, HeadshotmarketingAdCampaignStatus, HeadshotmarketingAdConnectionMode, HeadshotmarketingAdConnectionStatus, HeadshotmarketingAdCreativeStatus, HeadshotmarketingAdCreativeType, HeadshotmarketingAdPlatform, HeadshotmarketingAdSyncStatus, HeadshotmarketingAgentActionStatus, HeadshotmarketingAgentMessageRole, HeadshotmarketingAiToolCategory, HeadshotmarketingAiToolExecutionStatus, HeadshotmarketingAssetType, HeadshotmarketingAttributionConversionType, HeadshotmarketingAttributionModel, HeadshotmarketingAutomationRunStatus, HeadshotmarketingAutomationStepLogStatus, HeadshotmarketingAutomationSubjectType, HeadshotmarketingAutomationTriggerType, HeadshotmarketingAutomationWorkflowStatus, HeadshotmarketingCampaignStatus, HeadshotmarketingCampaignType, HeadshotmarketingContactStatus, HeadshotmarketingContentItemStatus, HeadshotmarketingContentItemType, HeadshotmarketingCulturalCategory, HeadshotmarketingCulturalRegion, HeadshotmarketingDealStatus, HeadshotmarketingEventRegistrationStatus, HeadshotmarketingEventStatus, HeadshotmarketingEventType, HeadshotmarketingExportFormat, HeadshotmarketingInfluencerCampaignStatus, HeadshotmarketingInfluencerRelationshipStatus, HeadshotmarketingInfluencerTier, HeadshotmarketingIntegrationCategory, HeadshotmarketingIntegrationConnectionType, HeadshotmarketingIntegrationListingStatus, HeadshotmarketingLandingPageSectionType, HeadshotmarketingLandingPageStatus, HeadshotmarketingLeadSource, HeadshotmarketingLeadStatus, HeadshotmarketingSeoAuditSeverity, HeadshotmarketingSeoAuditStatus, HeadshotmarketingSeoKeywordStatus, HeadshotmarketingSocialAccountDeliveryMode, HeadshotmarketingSocialAccountStatus, HeadshotmarketingSocialMentionSentiment, HeadshotmarketingSocialMentionStatus, HeadshotmarketingSocialMentionType, HeadshotmarketingSocialPlatform, HeadshotmarketingSocialPostStatus, HeadshotmarketingTouchpointType, HeadshotmarketingTranslationStatus, HeadshotmarketingWorkspaceIntegrationStatus, HealthyBowlAdvisoryTaskStatus, HealthyBowlConsultantAssignmentScope, HealthyBowlFarmRecommendationPriority, HealthyBowlFarmRecommendationStatus, HealthyBowlFinancierGrantScope, HealthyBowlGeneratableReportType, HealthyBowlGrowthGranularity, HealthyBowlPaddockState, HealthyBowlTaggableType, HokApplicationStatus, HokAuditionStatus, HokChannelStatus, HokClipStatus, HokCreditRole, HokEntitlementSource, HokEntitlementStatus, HokLegalCheckpointType, HokListKind, HokListVisibility, HokLocalizationKind, HokLocalizationStatus, HokModerationSeverity, HokModerationStatus, HokMonetizationMode, HokPlaybackEventType, HokProductionStatus, HokReviewStatus, HokRightsWindowStatus, HokRoyaltyComputationMethod, HokRoyaltyLedgerStatus, HokRoyaltyPayeeType, HokTitleStatus, HokTitleType, HokVerificationStatus, HokVerificationSubjectType, HokWatchPartyStatus, HousingVistaAnalyticsPeriod, HousingVistaMaintenancePriority, HousingVistaMaintenanceStatus, HousingVistaNlSearchMethod, HousingVistaOfferResponseAction, HousingVistaOfferStatus, HousingVistaPropertyStatus, HousingVistaPropertyType, HousingVistaRentalApplicationStatus, HousingVistaReraVerificationStatus, HousingVistaViewingStatus, HousingVistaViewingType, HttpMethod, IncidentStatus, IndexStatus, InstallMode, InstructionFilename, InstructionScope, IntAlertSeverity, IntAlertStatus, IntCaseStatus, IntClassification, IntConfidence, IntEntityType, IntFeedStatus, IntIndicatorType, IntMissionStatus, IntPriority, IntRelationshipType, IntReportStatus, IntReportType, IntRequirementStatus, IntSourceDiscipline, IntSourceStatus, IntTaskStatus, IntegrationEventStatus, IntegrationStatus, InventoryTransactionType, InvitationStatus, InviteStatus, InvoiceStatus, IssueTokenErrorCode, JobStatus, JoinGroupStatus, KadaikodiAddressType, KadaikodiClockAction, KadaikodiInvestmentStatus, KadaikodiLoyaltyTxnType, KadaikodiMembershipInterval, KadaikodiOfferingKind, KadaikodiOrderStatus, KadaikodiPaymentMethodType, KadaikodiPaymentStatus, KadaikodiProviderStatus, KadaikodiRiskLevel, KadaikodiServiceCategory, KadaikodiSubscriptionStatus, KadaikodiWorkerTaskStatus, KadaikodiWorkerTaskType, KeyResultMetricType, KeyResultStatus, KeyStatus, KeyType, KnowledgeArticleStatus, LabAgentRunStatus, LabAgentRunTrigger, LabBookingStatus, LabDatasetKind, LabDatasetStatus, LabExperimentStatus, LabInstrumentStatus, LabInventoryCategory, LabInventoryStatus, LabNotebookEntryStatus, LabPipelineRunStatus, LabProjectStatus, LabProjectVisibility, LabProtocolStatus, LabProvenanceEntityType, LabRunRecommendation, LabRunStatus, LabStepKind, LegalHoldStatus, LicenseMetricType, LicensePositionType, LocationType, LockType, LogAction, LogLevel, LogStreamEventType, LogStreamProvider, ManAssetStatus, ManCapaVerificationResult, ManChecklistItemResult, ManControlChartType, ManDowntimeReason, ManErpEntityType, ManErpProvider, ManErpSyncDirection, ManErpSyncStatus, ManInspectionResult, ManInspectionStage, ManItemType, ManLegalCheckpointType, ManMaintenanceStatus, ManMaintenanceType, ManMaintenanceWorkOrderEventType, ManMaterialLinkRole, ManMaterialLotEventType, ManMaterialLotReleaseDecision, ManMaterialLotStatus, ManMaterialSerialEventType, ManNonConformanceDisposition, ManNonConformanceEventType, ManNonConformanceLinkType, ManNonConformanceStatus, ManOperationStatus, ManPmState, ManProductionOrderStatus, ManProductionPriority, ManRoutingEventType, ManSeverity, ManTagSource, ManTrackingMode, ManWorkCenterType, McpConnectionStatus, McpResourceType, McpToolRiskLevel, McpToolStatus, MeetingActionItemStatus, MeetingOrderByField, MeetingParticipantRole, MeetingParticipantStatus, MeetingProvider, MeetingType, MemberPresenceStatus, MembershipRole, MembershipSource, MembershipStatus, MembershipType, MentionType, MeshSessionKind, MessageContentType, MessageReportResolutionAction, MessageReportStatus, MessageStatus, MessageType, MetadataValueType, MetricAggregationField, MetricType, MilestoneStatus, MisfirePolicy, Mood, MtwCarrierProvider, MtwCarrierServiceMode, MtwExportFormat, MtwFleetAlertSeverity, MtwFleetAlertSubjectType, MtwFleetAlertType, MtwIntegrationProvider, MybAiOperationStatus, MybAiOperationType, MybAiProvider, MybBodyMetricType, MybCoachingStatus, MybDeviceConnectionStatus, MybDeviceProvider, MybExportFormat, MybFitnessLevel, MybGoalStatus, MybGoalType, MybGuidanceAction, MybGuidanceSignal, MybLegalCheckpointType, MybLogSource, MybMealType, MybMuscleGroup, MybProgramPhase, MybProgramStatus, MybRecoveryMetric, MybSessionStatus, MybWearableMetricType, MybWorkoutType, NatsFilterType, NavigationMode, NodeConfigStatus, NodeStatus, NoteVisibility, NotificationLevel, ObjectiveStatus, OceanContainerType, OrderDirection, OverrideType, PackageKind, PageLayout, ParserStatus, ParserType, ParticipantChangeType, ParticipantRole, PhysicalAuditItemOutcome, PhysicalAuditStatus, PipelineExecutionStatus, PipelineStatus, PlanmagnetAgentRunStatus, PlanmagnetAgentRunTrigger, PlanmagnetAutomationExecutionStatus, PlanmagnetAutomationStatus, PlanmagnetAutomationTriggerType, PlanmagnetDueGroup, PlanmagnetFeatureOrder, PlanmagnetImportFormat, PlanmagnetImportOutcome, PlanmagnetMilestoneOrder, PlanmagnetProductLifecycleStage, PlanmagnetProjectStatus, PlanmagnetReleaseScope, PlanmagnetSprintScope, PlanmagnetStatusCategory, PlanmagnetSyncDirection, PlanmagnetSyncProvider, PlanmagnetSyncStatus, PlanmagnetThroughputBucket, PluginStatus, PolicyType, PomodoroGoalPeriod, PomodoroGoalType, PomodoroSessionOrderByField, PomodoroSessionType, PortfolioStatus, PresenceStatus, Priority, ProblemStatus, ProductType, ProjectMethodology, ProjectOrderField, ProjectStatus, PromptGenerationStatus, PromptPriority, PromptStatus, ProviderCategory, PswClientPortalUserStatus, PswClientStatus, PswClientType, PswComplianceStatus, PswComplianceType, PswConflictCheckStatus, PswDataSubjectRequestStatus, PswDataSubjectRequestType, PswDeliverableStatus, PswDocumentClassification, PswDocumentStatus, PswEngagementStatus, PswErasureRequestStatus, PswExportFormat, PswFeeArrangement, PswInvoiceStatus, PswLegalCheckpointType, PswMatterPriority, PswMatterStatus, PswMilestoneStatus, PswSignatureAuditEventType, PswSignatureRequestStatus, PswSignatureSignerStatus, PswSignatureType, PswTeamRole, PswTimeEntryStatus, PswTrustAccountStatus, PswTrustTransactionType, PswTrustTransferStatus, PublishType, QualityGateStatus, RbacChangeType, ReactionChangeType, RecordingMode, ReleaseStatus, ReminderChannel, ReminderType, ReportFormat, ReportScheduleStatus, ResourceBookingStatus, RetrievalMode, RiskSeverity, RiskStatus, RoadmapItemStatus, RoadmapPlanningFocus, RoadmapType, RoleLevel, RouteStatus, RoutingStrategy, RsvpStatus, RuleActionType, RuleConditionOperator, RuleMaterializationStrategy, RuleRunMode, RunLogLevel, RunLogStream, RunMode, RunStatus, RunTriggerType, SandboxAssistantMode, SandboxAssistantWriteApproval, SandboxChangeType, SandboxExportFormat, SandboxExportJobStatus, SandboxKind, SandboxMode, SandboxSource, SandboxStatus, SandboxTemplate, SchedulePriority, ScheduleType, ScorecardMetricDirection, ScorecardMetricStatus, ScorecardMetricType, ScorecardOwnerType, ScorecardTier, SecretProviderType, SecretShareKind, SecretShareScope, SecretShareStatus, SecretStatus, SecretType, SecurityComplianceStatus, SecurityEvidenceType, SecurityExportFormat, SecurityFindingCategory, SecurityFindingStatus, SecurityGovernancePolicyStatus, SecurityMemberEventAction, SecurityPolicyLevel, SecurityScanConclusion, SecurityScanStatus, SecuritySecretEventAction, SecuritySeverity, SecurityStage, SecuritySubscriptionEvent, SecurityVaultEventAction, SegmentVisibility, SemAggregation, SemConnectionHealth, SemConnectorKind, SemDataSourceStatus, SemDataType, SemEntityKind, SemModelStatus, SemPolicyEffect, SemPolicyScope, SemQueryRunStatus, SemQueryStatus, SemRelationshipKind, SessionExportFormat, SessionRecordingStatus, SessionRecordingStreamType, SessionSharePermission, SettingsCategory, ShareGrantStatus, ShareGrantVisibility, SharePermission, ShareRecipientType, ShareRole, ShareSortField, ShareStatus, ShareTokenType, ShipmentLegStatus, ShipmentStatus, SiemExportFormat, SignatureType, SmartCollectionConditionField, SmartCollectionConditionOperator, SmartCollectionOperator, SortDirection, SortOrder, SprintStatus, StageErrorHandling, StageExecutionStatus, StaticDataScope, StorageMode, StrategicAlignment, StressLevel, SubAgentKind, SubAgentStatus, SubAssetType, SubBenchmarkSourceKind, SubBillingInterval, SubChannelStatus, SubChannelType, SubDiscoverySource, SubEntitlementType, SubInvoiceStatus, SubMessageCategory, SubModerationAction, SubPaymentInstrumentStatus, SubPaymentInstrumentType, SubPolicyAction, SubProviderCategory, SubProviderStatus, SubRelationshipKind, SubRelationshipStatus, SubReportStatus, SubSubmissionStatus, SubWorkflowStatus, SubmissionStatus, SuggestedDataSourceType, SyncDirection, SyncFromGlobalOperation, SyncProvider, SystemEventType, TagCardinality, TagDataType, TagFilterOperator, TagRelationType, TagScope, TagsExportFormat, TargetType, TaskOrderField, TaskPriority, TaskStatus, TcpAccessLevel, TcpAgentRunStatus, TcpAgentRunTrigger, TcpAiGroundingKind, TcpAiReviewStatus, TcpAiUncertainty, TcpAiUseCase, TcpArchiveItemKind, TcpModerationStatus, TcpSourceType, TcpStoryFormat, TcpStoryStatus, TcpTopicCategory, TcpVerificationStatus, TecCertificateStatus, TecCourseLevel, TecCourseStatus, TecEnrollmentStatus, TecHackathonStatus, TecInterviewFrequency, TecLegalAcceptanceType, TecLessonKind, TecMentorStatus, TecPayoutStatus, TecPortfolioItemKind, TecProblemDifficulty, TecProblemStatus, TecSessionStatus, TecStudyPlanStatus, TecStudyPlanStepKind, TecStudyPlanStepStatus, TecSubmissionVerdict, TecTeamSubmissionStatus, TecTestCaseStatus, TecTestCaseVisibility, TemplateAuthorType, TemplateCategory, TemplateComplexity, TemplatePreview, TemplateStatus, TemplateVisibility, TemplatesPage, TheAssetKind, TheAssetStatus, TheCommodityType, TheComplianceCategory, TheComplianceStatus, TheContractSide, TheContractStatus, TheCorrectiveActionStatus, TheEmissionScope, TheEsgDisclosureStatus, TheEsgFramework, TheInventoryStatus, TheLegalCheckpointType, ThePricingBasis, TheReserveCategory, TheSafetyIncidentCategory, TheSafetyIncidentSeverity, TheSafetyIncidentStatus, TheShipmentStatus, TheTransportMode, TheUnit, ThemeProvider, TimeBucket, TimeCampusDataErasureStatus, TimeCampusExportFormat, TimeCampusFocusInterruptionSource, TimeCampusFocusProtectionLevel, TimeCampusFocusSessionStatus, TimeCampusInvoiceStatus, TimeCampusLifeDomain, TimeCampusOwnershipContext, TimeCampusProjectStatus, TimeCampusSortDirection, TimeCampusTimelineCategory, TimeCampusTimelineSource, TimeEntryOrderField, TimeEntryStatus, TimeGrain, TimeRange, TlsMode, ToolApprovalDecisionValue, ToolApprovalStatus, ToolApprovalTimeoutAction, ToolRiskLevel, TrackingEventType, TransportMode, TraversalDirection, TunnelDomainType, TunnelDomainVerificationStatus, TunnelEnvironment, TunnelProtocol, TunnelProviderKey, TunnelSessionStatus, TunnelShardStatus, TunnelStatus, UpdateScope, UploadStatus, UploadType, UsageStatus, ValidationMethod, VariableScope, VaultIncidentSeverity, VaultIncidentStatus, VaultMemberRole, VaultRotationStatus, VaultScope, VaultSecurityEventSeverity, VaultSecurityEventType, VaultStatus, VaultSyncStatus, VehicleStatus, VehicleType, VersionStatus, VibeAuditAction, VibeAuditExportFormat, VibeAuditResourceType, VibeAuditStatus, VibeCalendarExecutionStatus, VibeCalendarTaskStatus, VibeDeckButtonActionType, VibeDeckSharePermission, VibeDeckShareStatus, VibeDeckShareVisibility, VibeEntityType, VibeLlmContextTokenStatus, VibeStatus, VibeType, VibeVisibility, VibecontrolsActionType, VibecontrolsAgentVisibility, VibecontrolsDocsBuildImagePullPolicy, VibecontrolsDocsBuildImageScanStatus, VibecontrolsDocsBuildImageStatus, VibecontrolsDocsBuildRuntime, VibecontrolsDocsPageStatus, VibecontrolsDocsProvider, VibecontrolsDocsRevisionStatus, VibecontrolsDocsSiteOwnerType, VibecontrolsDocsSiteVisibility, VibecontrolsGitHubRepoScope, VibecontrolsGitHubRepoVisibility, VibecontrolsSessionStatus, VibecontrolsSessionType, VibecontrolsTemplateCategory, VibecontrolsTemplateStatus, Visibility, VisibilityType, VocabularyKind, VocabularyScope, WarehouseType, WebhookAuthType, WidgetConfidence, WidgetRenderer, WidgetType, WorkItemLinkRelation, WorkItemPriority, WorkItemStatus, WorkItemType, WorkOrderStatus, WorkOrderType, WorkPatternInsightType, WorkflowDiffKind, WorkflowStatus, WorkspaceInviteStatus, WorkspaceLegalCheckpointType, WorkspaceQuotaMode, WorkspaceResourceStatus, WorkspaceResourceType, WorkspaceStatus, WorkspaceType, WorkspacesExportFormat, extractTemplateGraph };
|
|
9877
|
-
//# sourceMappingURL=chunk-
|
|
9878
|
-
//# sourceMappingURL=chunk-
|
|
9877
|
+
//# sourceMappingURL=chunk-EL672H2D.js.map
|
|
9878
|
+
//# sourceMappingURL=chunk-EL672H2D.js.map
|