@burdenoff/fluidgrids-fe-sdk 2026.922.11 → 2026.922.12
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/index.js +18 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1010,17 +1010,24 @@ function ExternalProvidersTab() {
|
|
|
1010
1010
|
const { saveConfig, loading: saving } = useSaveSecretsProviderConfig();
|
|
1011
1011
|
const { testConnection, loading: testing } = useTestSecretsProviderConnection();
|
|
1012
1012
|
const awsConfig = configs.find((c) => c.provider === "AWS_SECRETS_MANAGER");
|
|
1013
|
-
const [prefix, setPrefix] = useState(
|
|
1014
|
-
|
|
1015
|
-
);
|
|
1016
|
-
const [
|
|
1017
|
-
const [
|
|
1018
|
-
|
|
1019
|
-
awsConfig
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1013
|
+
const [prefix, setPrefix] = useState("");
|
|
1014
|
+
const [region, setRegion] = useState("ap-south-1");
|
|
1015
|
+
const [enabled, setEnabled] = useState(false);
|
|
1016
|
+
const [lastTest, setLastTest] = useState(null);
|
|
1017
|
+
const [hydratedConfigId, setHydratedConfigId] = useState(null);
|
|
1018
|
+
useEffect(() => {
|
|
1019
|
+
if (!awsConfig || awsConfig.id === hydratedConfigId) return;
|
|
1020
|
+
setPrefix(awsConfig.awsSecretsManagerPrefix ?? "");
|
|
1021
|
+
setRegion(awsConfig.awsRegion ?? "ap-south-1");
|
|
1022
|
+
setEnabled(awsConfig.isEnabled);
|
|
1023
|
+
setLastTest(
|
|
1024
|
+
awsConfig.lastTestStatus ? {
|
|
1025
|
+
success: awsConfig.lastTestStatus === "SUCCESS",
|
|
1026
|
+
message: awsConfig.lastTestMessage ?? ""
|
|
1027
|
+
} : null
|
|
1028
|
+
);
|
|
1029
|
+
setHydratedConfigId(awsConfig.id);
|
|
1030
|
+
}, [awsConfig, hydratedConfigId]);
|
|
1024
1031
|
const handleSave = useCallback(async () => {
|
|
1025
1032
|
try {
|
|
1026
1033
|
await saveConfig({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FluidGridsRoot.tsx","../src/pages/WorkflowEmbed.tsx","../src/modules/variables/hooks/useVariables.ts","../src/modules/variables/pages/VariablesPage.tsx","../src/graphql/client-helpers.ts","../src/types/execution.ts","../src/ui/textarea.tsx","../src/ui/tabs.tsx","../src/ui/scroll-area.tsx","../src/ui/separator.tsx","../src/ui/select.tsx","../src/ui/dropdown-menu.tsx","../src/ui/checkbox.tsx","../src/ui/switch.tsx","../src/ui/popover.tsx"],"names":["WorkflowsList","WorkflowBuilder","ExecutionsListPage","ExecutionDetailPage","jsx","jsxs","useState","useEffect","useCallback","Badge","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Input","DialogFooter","Button","Icon","Card","CardHeader","config","React","Tabs","TabsList","TabsTrigger","TabsContent","React2","Select","SelectValue","SelectTrigger","React3","SelectContent","SelectItem","Check","React5","Switch","React6","React7"],"mappings":"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","file":"index.js","sourcesContent":["import { lazy, Suspense } from \"react\";\nimport { Routes, Route, Navigate } from \"react-router\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport type { WorkflowData } from \"../types\";\n\n// Lazy-loaded pages for code splitting\nconst WorkflowsList = lazy(() =>\n import(\"../pages/WorkflowsList\").then((m) => ({ default: m.WorkflowsList })),\n);\nconst WorkflowBuilder = lazy(() =>\n import(\"../pages/WorkflowBuilder\").then((m) => ({\n default: m.WorkflowBuilder,\n })),\n);\nconst ExecutionsListPage = lazy(() =>\n import(\"../modules/executions/pages/ExecutionsListPage\").then((m) => ({\n default: m.ExecutionsListPage,\n })),\n);\nconst ExecutionDetailPage = lazy(() =>\n import(\"../modules/executions/pages/ExecutionDetailPage\").then((m) => ({\n default: m.ExecutionDetailPage,\n })),\n);\n// Disabled - credentials moved to wspace-integrations-svc\n// const CredentialsPageWrapper = lazy(() =>\n// import(\"../modules/credentials/pages/CredentialsPageWrapper\").then((m) => ({\n// default: m.CredentialsPageWrapper,\n// })),\n// );\n// const OAuthCallbackPage = lazy(() =>\n// import(\"../modules/credentials/pages/OAuthCallbackPage\").then((m) => ({\n// default: m.OAuthCallbackPage,\n// })),\n// );\n\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center h-64\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\" />\n </div>\n);\n\nexport interface FluidGridsRootProps {\n /** Base path for routing (e.g., \"/workflows\") */\n basePath?: string;\n /** Workspace API Gateway URL */\n apiGatewayUrl: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current tenant ID */\n tenantId?: string;\n /** Current user info */\n currentUser?: {\n id: string;\n email: string;\n name?: string;\n avatar?: string;\n };\n /** Navigation function for route changes */\n navigate?: (path: string) => void;\n /** Global readonly mode */\n readonly?: boolean;\n /** Callback when workflow is saved */\n onWorkflowSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onWorkflowExecute?: (runId: string, workflowId: string) => void;\n /** Custom className for root container */\n className?: string;\n}\n\n/**\n * FluidGridsRoot - Full workflow module with routing\n *\n * Use this component when you want the complete workflow management experience\n * including list, builder, runs, credentials, and execution pages.\n */\nexport function FluidGridsRoot({\n basePath: _basePath = \"\",\n apiGatewayUrl,\n authToken,\n workspaceId,\n tenantId,\n currentUser: _currentUser,\n navigate: _navigate,\n readonly: _readonly = false,\n onWorkflowSave: _onWorkflowSave,\n onWorkflowExecute: _onWorkflowExecute,\n // Fill the host's content area so full-height pages (the builder canvas) can\n // resolve their `h-full` chain. Pages that scroll (list/runs) overflow this\n // and scroll within the shell's content region as before.\n className = \"h-full\",\n}: FluidGridsRootProps) {\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n >\n <div className={className}>\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<Navigate to=\"list\" replace />} />\n <Route path=\"list\" element={<WorkflowsList />} />\n <Route path=\"new\" element={<WorkflowBuilder />} />\n <Route path=\"workflow/:id\" element={<WorkflowBuilder />} />\n <Route path=\"workflow/:id/:version\" element={<WorkflowBuilder />} />\n <Route path=\"runs\" element={<ExecutionsListPage />} />\n <Route path=\"runs/:runId\" element={<ExecutionDetailPage />} />\n {/* <Route path=\"credentials\" element={<CredentialsPageWrapper />} /> */}\n {/* <Route path=\"oauth/callback\" element={<OAuthCallbackPage />} /> */}\n <Route path=\"*\" element={<Navigate to=\"list\" replace />} />\n </Routes>\n </Suspense>\n </div>\n </FluidGridsProvider>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { ErrorBoundary } from \"@burdenoff/fe-libs/shared/components\";\nimport { ThemeProvider } from \"../builder/components/theme-provider\";\nimport { FlowBuilderPage } from \"../builder/app/workflow/_components/flow-builder\";\nimport type { IFlowState } from \"../builder/stores/flow-store\";\nimport { extractTemplateGraph } from \"../utils/template-graph\";\nimport \"@xyflow/react/dist/style.css\";\n\ntype PreviewWorkflow = IFlowState[\"workflow\"];\n\nexport interface WorkflowEmbedPageProps {\n /**\n * Full GraphQL endpoint of the global public gateway\n * (e.g. \"https://graphql.burdenoff.com/global/graphql\"). Required for the\n * `?productId=` fetch mode; postMessage mode works without it.\n */\n globalGraphqlUrl?: string;\n}\n\n/**\n * WorkflowEmbedPage — public, read-only, chrome-less workflow viewer meant to\n * be served from an iframe-able route (`/embed/workflow`) so any website can\n * embed a FluidGrids workflow (n8n-demo style).\n *\n * Two ways to supply the workflow:\n * 1. `?productId=<store product id>` — the page fetches the WORKFLOW store\n * product's `content.definitionJson` from the global public gateway\n * (the `product` query is `@rbac(public: true)`, no auth needed).\n * 2. postMessage from the host page:\n * { type: \"fluidgrids:embed:openWorkflow\",\n * workflow: { name?, nodes, edges } }\n * The page announces readiness with { type: \"fluidgrids:embed:ready\" }\n * and reports { type: \"fluidgrids:embed:loaded\" | \"fluidgrids:embed:error\" }.\n *\n * Extra query params:\n * - `theme=light|dark` — force a theme without touching the visitor's stored\n * preference (attributes are forced, never persisted).\n * - `badge=false` — hide the \"Powered by FluidGrids\" badge.\n * - `cta=false` — hide the \"Use this template\" button (productId mode only).\n *\n * Security note: postMessage input is accepted from any origin by design —\n * the page is unauthenticated, renders display-only JSON through React (no\n * HTML injection path), and holds no tokens or privileged state, so a hostile\n * message can at worst draw a graph in its own iframe.\n */\nexport function WorkflowEmbedPage({\n globalGraphqlUrl,\n}: WorkflowEmbedPageProps) {\n const params = useMemo(() => new URLSearchParams(window.location.search), []);\n const productId = params.get(\"productId\");\n const forcedTheme = normalizeTheme(params.get(\"theme\"));\n const showBadge = params.get(\"badge\") !== \"false\";\n const showCta = params.get(\"cta\") !== \"false\";\n\n const [workflow, setWorkflow] = useState<PreviewWorkflow | null>(null);\n // Remount key: FlowBuilderPage hydrates its store once per mount, so a new\n // postMessage workflow must remount the canvas rather than re-prop it.\n const [revision, setRevision] = useState(0);\n const [loading, setLoading] = useState(Boolean(productId));\n const [error, setError] = useState<string | null>(null);\n\n // Force the requested theme without persisting anything. The surrounding\n // ThemeProvider re-applies stored/default attributes after us (parent\n // effects run last), so keep re-forcing via a MutationObserver.\n useEffect(() => {\n if (!forcedTheme) return;\n const root = document.documentElement;\n const apply = () => {\n root.setAttribute(\"data-theme\", forcedTheme);\n root.classList.toggle(\"dark\", forcedTheme === \"dark\");\n };\n apply();\n const observer = new MutationObserver(() => {\n const themeDrifted = root.getAttribute(\"data-theme\") !== forcedTheme;\n const classDrifted =\n root.classList.contains(\"dark\") !== (forcedTheme === \"dark\");\n if (themeDrifted || classDrifted) apply();\n });\n observer.observe(root, {\n attributes: true,\n attributeFilter: [\"data-theme\", \"class\"],\n });\n return () => observer.disconnect();\n }, [forcedTheme]);\n\n // postMessage protocol with the host page.\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n const data = event.data as\n | {\n type?: string;\n workflow?: {\n name?: string;\n nodes?: unknown[];\n edges?: unknown[];\n };\n }\n | undefined;\n if (data?.type !== \"fluidgrids:embed:openWorkflow\") return;\n const nodes = Array.isArray(data.workflow?.nodes)\n ? data.workflow.nodes\n : [];\n if (!nodes.length) {\n postToParent({\n type: \"fluidgrids:embed:error\",\n message: \"openWorkflow message carried no nodes\",\n });\n return;\n }\n setWorkflow(\n buildPreviewWorkflow({\n id: \"embedded\",\n name: data.workflow?.name ?? \"Workflow\",\n nodes: nodes as PreviewWorkflow[\"nodes\"],\n edges: (Array.isArray(data.workflow?.edges)\n ? data.workflow.edges\n : []) as PreviewWorkflow[\"edges\"],\n }),\n );\n setRevision((r) => r + 1);\n setError(null);\n setLoading(false);\n postToParent({\n type: \"fluidgrids:embed:loaded\",\n nodeCount: nodes.length,\n });\n };\n window.addEventListener(\"message\", handler);\n postToParent({ type: \"fluidgrids:embed:ready\" });\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n // productId fetch mode — plain fetch, no Apollo client and no auth: the\n // `product` query is public and we only select display fields.\n useEffect(() => {\n if (!productId) return;\n let mounted = true;\n const load = async () => {\n try {\n if (!globalGraphqlUrl) {\n throw new Error(\"Embed viewer is missing its gateway endpoint.\");\n }\n const res = await fetch(globalGraphqlUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n query: `query WorkflowEmbedProduct($id: ID!) {\n product(id: $id) { id name description type content }\n }`,\n variables: { id: productId },\n }),\n });\n const json = (await res.json()) as {\n data?: {\n product?: {\n id: string;\n name?: string;\n description?: string;\n type?: string;\n content?: unknown;\n } | null;\n };\n errors?: { message?: string }[];\n };\n if (json.errors?.length) {\n throw new Error(json.errors[0]?.message ?? \"Failed to load workflow\");\n }\n const product = json.data?.product;\n if (!product) throw new Error(\"Workflow not found.\");\n if (product.type && product.type !== \"WORKFLOW\") {\n throw new Error(\"This store product is not a workflow.\");\n }\n const graph = extractTemplateGraph(product.content);\n if (!graph) throw new Error(\"This workflow has nothing to preview.\");\n if (!mounted) return;\n setWorkflow(\n buildPreviewWorkflow({\n id: product.id,\n name: product.name ?? \"Workflow\",\n nodes: graph.nodes,\n edges: graph.edges,\n }),\n );\n setRevision((r) => r + 1);\n setLoading(false);\n postToParent({\n type: \"fluidgrids:embed:loaded\",\n nodeCount: graph.nodes.length,\n });\n } catch (e) {\n if (!mounted) return;\n const message =\n e instanceof Error ? e.message : \"Failed to load workflow.\";\n setError(message);\n setLoading(false);\n postToParent({ type: \"fluidgrids:embed:error\", message });\n }\n };\n load();\n return () => {\n mounted = false;\n };\n }, [productId, globalGraphqlUrl]);\n\n const openInAppUrl = productId\n ? `${window.location.origin}/workflows/templates/${encodeURIComponent(productId)}/preview`\n : null;\n\n return (\n <ThemeProvider>\n <div className=\"relative h-screen w-screen overflow-hidden bg-background\">\n <ErrorBoundary\n fallback={() => (\n <CenteredNote\n icon=\"mdi:alert-circle-outline\"\n text=\"Something went wrong rendering this workflow.\"\n />\n )}\n >\n {loading ? (\n <CenteredNote\n icon=\"svg-spinners:ring-resize\"\n text=\"Loading workflow…\"\n />\n ) : error ? (\n <CenteredNote icon=\"mdi:alert-circle-outline\" text={error} />\n ) : workflow ? (\n <FlowBuilderPage key={revision} workflow={workflow} readOnly />\n ) : (\n <CenteredNote\n icon=\"mdi:sitemap-outline\"\n text=\"Waiting for a workflow…\"\n />\n )}\n </ErrorBoundary>\n\n {showCta && openInAppUrl && workflow ? (\n <a\n href={openInAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute right-3 top-3 z-10 flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground shadow-sm transition-opacity hover:opacity-90\"\n >\n <Icon icon=\"mdi:plus\" className=\"size-3.5\" />\n Use this template\n </a>\n ) : null}\n\n {showBadge ? (\n <a\n href=\"https://www.fluidgrids.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute bottom-3 right-3 z-10 flex items-center gap-1.5 rounded-full border border-card-foreground/10 bg-card/90 px-2.5 py-1 text-[11px] font-medium text-card-foreground shadow-sm backdrop-blur transition-opacity hover:opacity-90\"\n >\n <Icon icon=\"mdi:lightning-bolt\" className=\"size-3.5 text-primary\" />\n Powered by FluidGrids\n </a>\n ) : null}\n </div>\n </ThemeProvider>\n );\n}\n\nfunction CenteredNote({ icon, text }: { icon: string; text: string }) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-2 p-8 text-center\">\n <Icon icon={icon} className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{text}</p>\n </div>\n );\n}\n\nfunction buildPreviewWorkflow(input: {\n id: string;\n name: string;\n nodes: PreviewWorkflow[\"nodes\"];\n edges: PreviewWorkflow[\"edges\"];\n}): PreviewWorkflow {\n return {\n id: input.id,\n workflowKey: input.id,\n version: \"embed\",\n name: input.name,\n nodes: input.nodes,\n edges: input.edges,\n sidebar: {\n active: \"none\",\n panels: { nodeProperties: { selectedNode: null } },\n },\n } as PreviewWorkflow;\n}\n\nfunction normalizeTheme(value: string | null): \"light\" | \"dark\" | null {\n return value === \"light\" || value === \"dark\" ? value : null;\n}\n\nfunction postToParent(payload: Record<string, unknown>): void {\n if (window.parent === window) return;\n // \"*\" is intentional: the embed is designed for arbitrary host sites and the\n // payload carries no secrets (status signals + node counts only).\n window.parent.postMessage(payload, \"*\");\n}\n","/**\n * Custom hooks for workflow Variables + external secrets provider config\n * (BOFF-7517). Queries/mutates wspace-workflow-svc via the federated\n * GraphQL gateway — mirrors the connections module's hook pattern\n * (`modules/connections/hooks/useConnections.ts`).\n */\nimport { useState, useEffect, useCallback } from \"react\";\nimport { gql } from \"@apollo/client\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\n\nimport { throwIfResultError } from \"../../../graphql/errors\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type VariableScope = \"WORKSPACE\" | \"PROJECT\";\nexport type SecretProviderType =\n | \"NONE\"\n | \"AWS_SECRETS_MANAGER\"\n | \"VAULT\"\n | \"AZURE_KEY_VAULT\"\n | \"GCP_SECRET_MANAGER\";\n\nexport interface WorkflowVariable {\n id: string;\n scope: VariableScope;\n workspaceId: string;\n projectId?: string | null;\n key: string;\n description?: string | null;\n isSecret: boolean;\n externalProvider: SecretProviderType;\n externalRef?: string | null;\n /** Always null when isSecret or externally-backed — see backend resolver. */\n value?: string | null;\n createdAt: string;\n updatedAt: string;\n createdBy: string;\n updatedBy?: string | null;\n}\n\nexport interface SecretsProviderConfig {\n id: string;\n workspaceId: string;\n provider: SecretProviderType;\n awsSecretsManagerPrefix?: string | null;\n awsRegion?: string | null;\n vaultAddress?: string | null;\n vaultMountPath?: string | null;\n azureKeyVaultUri?: string | null;\n gcpProjectId?: string | null;\n isEnabled: boolean;\n lastTestedAt?: string | null;\n lastTestStatus?: string | null;\n lastTestMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateWorkflowVariableInput {\n scope?: VariableScope;\n projectId?: string;\n key: string;\n description?: string;\n isSecret?: boolean;\n value?: string;\n externalProvider?: SecretProviderType;\n externalRef?: string;\n}\n\nexport interface UpdateWorkflowVariableInput {\n description?: string;\n isSecret?: boolean;\n value?: string;\n externalProvider?: SecretProviderType;\n externalRef?: string;\n}\n\nexport interface SaveSecretsProviderConfigInput {\n provider: SecretProviderType;\n awsSecretsManagerPrefix?: string;\n awsRegion?: string;\n vaultAddress?: string;\n vaultMountPath?: string;\n azureKeyVaultUri?: string;\n gcpProjectId?: string;\n isEnabled?: boolean;\n}\n\n// ============================================================================\n// GraphQL\n// ============================================================================\n\nconst VARIABLE_FIELDS = gql`\n fragment WorkflowVariableFields on WorkflowVariable {\n id\n scope\n workspaceId\n projectId\n key\n description\n isSecret\n externalProvider\n externalRef\n value\n createdAt\n updatedAt\n createdBy\n updatedBy\n }\n`;\n\nconst GET_WORKFLOW_VARIABLES = gql`\n ${VARIABLE_FIELDS}\n query GetWorkflowVariables($scope: VariableScope, $projectId: ID) {\n workflowVariables(scope: $scope, projectId: $projectId) {\n variables {\n ...WorkflowVariableFields\n }\n total\n }\n }\n`;\n\nconst CREATE_WORKFLOW_VARIABLE = gql`\n ${VARIABLE_FIELDS}\n mutation CreateWorkflowVariable($input: CreateWorkflowVariableInput!) {\n createWorkflowVariable(input: $input) {\n success\n message\n variable {\n ...WorkflowVariableFields\n }\n }\n }\n`;\n\nconst UPDATE_WORKFLOW_VARIABLE = gql`\n ${VARIABLE_FIELDS}\n mutation UpdateWorkflowVariable(\n $id: ID!\n $input: UpdateWorkflowVariableInput!\n ) {\n updateWorkflowVariable(id: $id, input: $input) {\n success\n message\n variable {\n ...WorkflowVariableFields\n }\n }\n }\n`;\n\nconst DELETE_WORKFLOW_VARIABLE = gql`\n mutation DeleteWorkflowVariable($id: ID!) {\n deleteWorkflowVariable(id: $id) {\n success\n message\n }\n }\n`;\n\nconst REVEAL_WORKFLOW_VARIABLE_VALUE = gql`\n mutation RevealWorkflowVariableValue($id: ID!) {\n revealWorkflowVariableValue(id: $id) {\n success\n message\n value\n }\n }\n`;\n\nconst GET_SECRETS_PROVIDER_CONFIGS = gql`\n query GetSecretsProviderConfigs {\n secretsProviderConfigs {\n id\n workspaceId\n provider\n awsSecretsManagerPrefix\n awsRegion\n vaultAddress\n vaultMountPath\n azureKeyVaultUri\n gcpProjectId\n isEnabled\n lastTestedAt\n lastTestStatus\n lastTestMessage\n createdAt\n updatedAt\n }\n }\n`;\n\nconst SAVE_SECRETS_PROVIDER_CONFIG = gql`\n mutation SaveSecretsProviderConfig($input: SaveSecretsProviderConfigInput!) {\n saveSecretsProviderConfig(input: $input) {\n success\n message\n config {\n id\n provider\n awsSecretsManagerPrefix\n awsRegion\n isEnabled\n lastTestedAt\n lastTestStatus\n lastTestMessage\n }\n }\n }\n`;\n\nconst TEST_SECRETS_PROVIDER_CONNECTION = gql`\n mutation TestSecretsProviderConnection($provider: SecretProviderType!) {\n testSecretsProviderConnection(provider: $provider) {\n success\n message\n }\n }\n`;\n\n// ============================================================================\n// Variables hooks\n// ============================================================================\n\nexport function useVariables(filter?: {\n scope?: VariableScope;\n projectId?: string;\n}) {\n const [variables, setVariables] = useState<WorkflowVariable[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const scope = filter?.scope;\n const projectId = filter?.projectId;\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n workflowVariables: { variables: WorkflowVariable[]; total: number };\n }>({\n query: GET_WORKFLOW_VARIABLES,\n variables: { scope, projectId },\n fetchPolicy: \"network-only\",\n });\n setVariables(result.data?.workflowVariables?.variables ?? []);\n setTotal(result.data?.workflowVariables?.total ?? 0);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [scope, projectId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return { variables, total, loading, error, refetch: fetchData };\n}\n\nexport function useCreateVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createVariable = useCallback(\n async (input: CreateWorkflowVariableInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n createWorkflowVariable: {\n success: boolean;\n message: string;\n variable: WorkflowVariable | null;\n };\n }>({ mutation: CREATE_WORKFLOW_VARIABLE, variables: { input } }),\n );\n const response = result.data?.createWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to create variable\");\n return response.variable;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { createVariable, loading, error };\n}\n\nexport function useUpdateVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updateVariable = useCallback(\n async (id: string, input: UpdateWorkflowVariableInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n updateWorkflowVariable: {\n success: boolean;\n message: string;\n variable: WorkflowVariable | null;\n };\n }>({ mutation: UPDATE_WORKFLOW_VARIABLE, variables: { id, input } }),\n );\n const response = result.data?.updateWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to update variable\");\n return response.variable;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateVariable, loading, error };\n}\n\nexport function useDeleteVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const deleteVariable = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n deleteWorkflowVariable: { success: boolean; message: string };\n }>({\n mutation: DELETE_WORKFLOW_VARIABLE,\n variables: { id },\n }),\n );\n const response = result.data?.deleteWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to delete variable\");\n return true;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deleteVariable, loading, error };\n}\n\nexport function useRevealVariableValue() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const revealValue = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n revealWorkflowVariableValue: {\n success: boolean;\n message: string;\n value: string | null;\n };\n }>({ mutation: REVEAL_WORKFLOW_VARIABLE_VALUE, variables: { id } }),\n );\n const response = result.data?.revealWorkflowVariableValue;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to reveal value\");\n return response.value ?? \"\";\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { revealValue, loading, error };\n}\n\n// ============================================================================\n// Secrets provider config hooks\n// ============================================================================\n\nexport function useSecretsProviderConfigs() {\n const [configs, setConfigs] = useState<SecretsProviderConfig[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n secretsProviderConfigs: SecretsProviderConfig[];\n }>({\n query: GET_SECRETS_PROVIDER_CONFIGS,\n fetchPolicy: \"network-only\",\n });\n setConfigs(result.data?.secretsProviderConfigs ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return { configs, loading, error, refetch: fetchData };\n}\n\nexport function useSaveSecretsProviderConfig() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const saveConfig = useCallback(\n async (input: SaveSecretsProviderConfigInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n saveSecretsProviderConfig: {\n success: boolean;\n message: string;\n config: SecretsProviderConfig | null;\n };\n }>({ mutation: SAVE_SECRETS_PROVIDER_CONFIG, variables: { input } }),\n );\n const response = result.data?.saveSecretsProviderConfig;\n if (!response?.success)\n throw new Error(\n response?.message ?? \"Failed to save provider configuration\",\n );\n return response.config;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { saveConfig, loading, error };\n}\n\nexport function useTestSecretsProviderConnection() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const testConnection = useCallback(async (provider: SecretProviderType) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n testSecretsProviderConnection: { success: boolean; message: string };\n }>({\n mutation: TEST_SECRETS_PROVIDER_CONNECTION,\n variables: { provider },\n }),\n );\n return (\n result.data?.testSecretsProviderConnection ?? {\n success: false,\n message: \"Unknown error\",\n }\n );\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { testConnection, loading, error };\n}\n","/**\n * Variables Page (BOFF-7517)\n *\n * Workspace/project-scoped `$vars` key-value store management: list/create/\n * edit/delete variables, mask secret values (dots + explicit \"Reveal\"\n * action), and configure/test the external secrets provider (AWS Secrets\n * Manager first).\n */\nimport { useCallback, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Badge,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n useVariables,\n useCreateVariable,\n useUpdateVariable,\n useDeleteVariable,\n useRevealVariableValue,\n useSecretsProviderConfigs,\n useSaveSecretsProviderConfig,\n useTestSecretsProviderConnection,\n type WorkflowVariable,\n type SecretProviderType,\n} from \"../hooks/useVariables\";\n\n// ============================================================================\n// Variable value display — masked, plain, or externally-resolved\n// ============================================================================\n\nfunction VariableValueCell({ variable }: { variable: WorkflowVariable }) {\n const tr = useTr();\n const { revealValue, loading } = useRevealVariableValue();\n const [revealed, setRevealed] = useState<string | null>(null);\n\n const isMasked = variable.isSecret || variable.externalProvider !== \"NONE\";\n\n const handleReveal = useCallback(async () => {\n try {\n const value = await revealValue(variable.id);\n setRevealed(value);\n // Auto re-mask after 15s so a revealed secret doesn't stay on screen indefinitely.\n setTimeout(() => setRevealed(null), 15000);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.revealFailed\", \"Failed to reveal value\"),\n );\n }\n }, [revealValue, variable.id, tr]);\n\n if (variable.externalProvider !== \"NONE\" && revealed === null) {\n return (\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"font-mono text-xs\">\n {variable.externalProvider}\n </Badge>\n {variable.externalRef && (\n <span\n className=\"text-xs text-text-secondary truncate max-w-[160px]\"\n title={variable.externalRef}\n >\n {variable.externalRef}\n </span>\n )}\n <button\n onClick={handleReveal}\n disabled={loading}\n className=\"text-xs text-text-secondary hover:text-text-primary underline\"\n >\n {tr(\"fluidgrids.variables.reveal\", \"Reveal\")}\n </button>\n </div>\n );\n }\n\n if (!isMasked) {\n return (\n <code className=\"text-sm text-text-primary\">{variable.value ?? \"\"}</code>\n );\n }\n\n if (revealed !== null) {\n return (\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm text-text-primary break-all\">{revealed}</code>\n <button\n onClick={() => setRevealed(null)}\n className=\"text-xs text-text-secondary hover:text-text-primary underline shrink-0\"\n >\n {tr(\"fluidgrids.variables.hide\", \"Hide\")}\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"tracking-widest text-text-secondary select-none\">\n ••••••••\n </span>\n <button\n onClick={handleReveal}\n disabled={loading}\n className=\"text-xs text-text-secondary hover:text-text-primary underline\"\n >\n {loading\n ? tr(\"fluidgrids.variables.revealing\", \"Revealing…\")\n : tr(\"fluidgrids.variables.reveal\", \"Reveal\")}\n </button>\n </div>\n );\n}\n\n// ============================================================================\n// Create / Edit dialog\n// ============================================================================\n\ninterface VariableFormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n variable: WorkflowVariable | null;\n onSaved: () => void;\n}\n\nfunction VariableFormDialog({\n open,\n onOpenChange,\n variable,\n onSaved,\n}: VariableFormDialogProps) {\n const tr = useTr();\n const { createVariable, loading: creating } = useCreateVariable();\n const { updateVariable, loading: updating } = useUpdateVariable();\n const isEdit = !!variable;\n\n const [key, setKey] = useState(variable?.key ?? \"\");\n const [description, setDescription] = useState(variable?.description ?? \"\");\n const [isSecret, setIsSecret] = useState(variable?.isSecret ?? false);\n const [value, setValue] = useState(\"\");\n const [scope, setScope] = useState<\"WORKSPACE\" | \"PROJECT\">(\n variable?.scope ?? \"WORKSPACE\",\n );\n\n const resetForm = useCallback(() => {\n setKey(variable?.key ?? \"\");\n setDescription(variable?.description ?? \"\");\n setIsSecret(variable?.isSecret ?? false);\n setValue(\"\");\n setScope(variable?.scope ?? \"WORKSPACE\");\n }, [variable]);\n\n const handleSubmit = useCallback(async () => {\n try {\n if (isEdit && variable) {\n await updateVariable(variable.id, {\n description: description || undefined,\n isSecret,\n ...(value ? { value } : {}),\n });\n toast.success(tr(\"fluidgrids.variables.updated\", \"Variable updated\"));\n } else {\n if (!key.trim()) {\n toast.error(\n tr(\"fluidgrids.variables.keyRequired\", \"Key is required\"),\n );\n return;\n }\n await createVariable({\n key: key.trim(),\n description: description || undefined,\n isSecret,\n value,\n scope,\n });\n toast.success(tr(\"fluidgrids.variables.created\", \"Variable created\"));\n }\n onSaved();\n onOpenChange(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.saveFailed\", \"Failed to save variable\"),\n );\n }\n }, [\n isEdit,\n variable,\n key,\n description,\n isSecret,\n value,\n scope,\n createVariable,\n updateVariable,\n onSaved,\n onOpenChange,\n tr,\n ]);\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (next) resetForm();\n onOpenChange(next);\n }}\n >\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle>\n {isEdit\n ? tr(\"fluidgrids.variables.editTitle\", \"Edit variable\")\n : tr(\"fluidgrids.variables.createTitle\", \"New variable\")}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-key\">\n {tr(\"fluidgrids.variables.keyLabel\", \"Key\")}\n </Label>\n <Input\n id=\"variable-key\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n disabled={isEdit}\n placeholder=\"API_URL\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.keyHint\",\n \"Use it in expressions as {{ $vars.KEY }} or ${vars.KEY}\",\n )}\n </p>\n </div>\n\n {!isEdit && (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-scope\">\n {tr(\"fluidgrids.variables.scopeLabel\", \"Scope\")}\n </Label>\n <Select\n value={scope}\n onValueChange={(v) => setScope(v as \"WORKSPACE\" | \"PROJECT\")}\n >\n <SelectTrigger id=\"variable-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"WORKSPACE\">\n {tr(\"fluidgrids.variables.scopeWorkspace\", \"Workspace\")}\n </SelectItem>\n <SelectItem value=\"PROJECT\">\n {tr(\"fluidgrids.variables.scopeProject\", \"Project\")}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-description\">\n {tr(\"fluidgrids.variables.descriptionLabel\", \"Description\")}\n </Label>\n <Input\n id=\"variable-description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder={tr(\n \"fluidgrids.variables.descriptionPlaceholder\",\n \"Optional\",\n )}\n />\n </div>\n\n <div className=\"flex items-center justify-between py-1\">\n <div>\n <Label htmlFor=\"variable-secret\">\n {tr(\"fluidgrids.variables.secretLabel\", \"Secret value\")}\n </Label>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.secretHint\",\n \"Masked in the UI and never printed to run logs\",\n )}\n </p>\n </div>\n <Switch\n id=\"variable-secret\"\n checked={isSecret}\n onCheckedChange={setIsSecret}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-value\">\n {tr(\"fluidgrids.variables.valueLabel\", \"Value\")}\n </Label>\n <Input\n id=\"variable-value\"\n type={isSecret ? \"password\" : \"text\"}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={\n isEdit\n ? tr(\n \"fluidgrids.variables.valueLeaveBlank\",\n \"Leave blank to keep the current value\",\n )\n : \"\"\n }\n />\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.variables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={creating || updating}>\n {creating || updating\n ? tr(\"fluidgrids.variables.saving\", \"Saving…\")\n : tr(\"fluidgrids.variables.save\", \"Save\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// Variables tab\n// ============================================================================\n\nfunction VariablesTab() {\n const tr = useTr();\n const { variables, loading, refetch } = useVariables();\n const { deleteVariable } = useDeleteVariable();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [editing, setEditing] = useState<WorkflowVariable | null>(null);\n\n const handleCreate = useCallback(() => {\n setEditing(null);\n setDialogOpen(true);\n }, []);\n\n const handleEdit = useCallback((variable: WorkflowVariable) => {\n setEditing(variable);\n setDialogOpen(true);\n }, []);\n\n const handleDelete = useCallback(\n async (variable: WorkflowVariable) => {\n if (\n !window.confirm(\n tr(\n \"fluidgrids.variables.confirmDelete\",\n `Delete variable \"${variable.key}\"?`,\n ),\n )\n )\n return;\n try {\n await deleteVariable(variable.id);\n toast.success(tr(\"fluidgrids.variables.deleted\", \"Variable deleted\"));\n refetch();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\n \"fluidgrids.variables.deleteFailed\",\n \"Failed to delete variable\",\n ),\n );\n }\n },\n [deleteVariable, refetch, tr],\n );\n\n return (\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.variables.tabDescription\",\n \"Reference these in any node parameter as {{ $vars.KEY }} (new expressions) or ${vars.KEY} (legacy).\",\n )}\n </p>\n <Button onClick={handleCreate} size=\"sm\">\n <Icon icon=\"mdi:plus\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.variables.newVariable\", \"New Variable\")}\n </Button>\n </div>\n\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{tr(\"fluidgrids.variables.colKey\", \"Key\")}</TableHead>\n <TableHead>\n {tr(\"fluidgrids.variables.colScope\", \"Scope\")}\n </TableHead>\n <TableHead>\n {tr(\"fluidgrids.variables.colValue\", \"Value\")}\n </TableHead>\n <TableHead className=\"text-right\">\n {tr(\"fluidgrids.variables.colActions\", \"Actions\")}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-center text-text-secondary py-8\"\n >\n {tr(\"fluidgrids.variables.loading\", \"Loading…\")}\n </TableCell>\n </TableRow>\n )}\n {!loading && variables.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-center text-text-secondary py-8\"\n >\n {tr(\"fluidgrids.variables.empty\", \"No variables yet\")}\n </TableCell>\n </TableRow>\n )}\n {variables.map((variable) => (\n <TableRow key={variable.id}>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-medium text-text-primary\">\n {variable.key}\n </code>\n {variable.isSecret && (\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {tr(\"fluidgrids.variables.secretBadge\", \"SECRET\")}\n </Badge>\n )}\n </div>\n {variable.description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {variable.description}\n </p>\n )}\n </TableCell>\n <TableCell className=\"text-text-secondary text-sm\">\n {variable.scope}\n </TableCell>\n <TableCell>\n <VariableValueCell variable={variable} />\n </TableCell>\n <TableCell className=\"text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <button\n onClick={() => handleEdit(variable)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary\"\n title={tr(\"fluidgrids.variables.edit\", \"Edit\")}\n >\n <Icon icon=\"mdi:pencil-outline\" width={16} />\n </button>\n <button\n onClick={() => handleDelete(variable)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-red-400\"\n title={tr(\"fluidgrids.variables.delete\", \"Delete\")}\n >\n <Icon icon=\"mdi:trash-can-outline\" width={16} />\n </button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Card>\n\n <VariableFormDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n variable={editing}\n onSaved={refetch}\n />\n </div>\n );\n}\n\n// ============================================================================\n// External Providers tab\n// ============================================================================\n\nfunction ExternalProvidersTab() {\n const tr = useTr();\n const { configs, loading, refetch } = useSecretsProviderConfigs();\n const { saveConfig, loading: saving } = useSaveSecretsProviderConfig();\n const { testConnection, loading: testing } =\n useTestSecretsProviderConnection();\n\n const awsConfig = configs.find((c) => c.provider === \"AWS_SECRETS_MANAGER\");\n const [prefix, setPrefix] = useState(\n awsConfig?.awsSecretsManagerPrefix ?? \"\",\n );\n const [region, setRegion] = useState(awsConfig?.awsRegion ?? \"ap-south-1\");\n const [enabled, setEnabled] = useState(awsConfig?.isEnabled ?? false);\n const [lastTest, setLastTest] = useState<{\n success: boolean;\n message: string;\n } | null>(\n awsConfig?.lastTestStatus\n ? {\n success: awsConfig.lastTestStatus === \"SUCCESS\",\n message: awsConfig.lastTestMessage ?? \"\",\n }\n : null,\n );\n\n const handleSave = useCallback(async () => {\n try {\n await saveConfig({\n provider: \"AWS_SECRETS_MANAGER\" as SecretProviderType,\n awsSecretsManagerPrefix: prefix || undefined,\n awsRegion: region || undefined,\n isEnabled: enabled,\n });\n toast.success(\n tr(\n \"fluidgrids.variables.providerSaved\",\n \"Provider configuration saved\",\n ),\n );\n refetch();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.providerSaveFailed\", \"Failed to save\"),\n );\n }\n }, [saveConfig, prefix, region, enabled, refetch, tr]);\n\n const handleTest = useCallback(async () => {\n try {\n const result = await testConnection(\n \"AWS_SECRETS_MANAGER\" as SecretProviderType,\n );\n setLastTest(result);\n if (result.success) {\n toast.success(result.message);\n } else {\n toast.error(result.message);\n }\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.testFailed\", \"Connection test failed\"),\n );\n }\n }, [testConnection, tr]);\n\n if (loading) {\n return (\n <p className=\"text-text-secondary text-sm\">\n {tr(\"fluidgrids.variables.loading\", \"Loading…\")}\n </p>\n );\n }\n\n return (\n <div className=\"space-y-4 max-w-xl\">\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3 space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:aws\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.variables.awsProviderTitle\",\n \"AWS Secrets Manager\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.awsProviderDescription\",\n \"A variable can reference a secret stored in AWS Secrets Manager instead of storing its own value. Only secrets under the prefix below are reachable.\",\n )}\n </p>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"aws-prefix\">\n {tr(\n \"fluidgrids.variables.awsPrefixLabel\",\n \"Secrets Manager prefix\",\n )}\n </Label>\n <Input\n id=\"aws-prefix\"\n value={prefix}\n onChange={(e) => setPrefix(e.target.value)}\n placeholder=\"boff/prod/wspace/workflow/vars/\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"aws-region\">\n {tr(\"fluidgrids.variables.awsRegionLabel\", \"Region\")}\n </Label>\n <Input\n id=\"aws-region\"\n value={region}\n onChange={(e) => setRegion(e.target.value)}\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"aws-enabled\">\n {tr(\"fluidgrids.variables.awsEnabledLabel\", \"Enabled\")}\n </Label>\n <Switch\n id=\"aws-enabled\"\n checked={enabled}\n onCheckedChange={setEnabled}\n />\n </div>\n\n {lastTest && (\n <div\n className={`text-xs rounded-md px-3 py-2 border ${\n lastTest.success\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-400\"\n : \"border-red-500/30 bg-red-500/10 text-red-400\"\n }`}\n >\n {lastTest.message}\n </div>\n )}\n\n <div className=\"flex items-center gap-2 pt-1\">\n <Button onClick={handleSave} disabled={saving} size=\"sm\">\n {saving\n ? tr(\"fluidgrids.variables.saving\", \"Saving…\")\n : tr(\"fluidgrids.variables.save\", \"Save\")}\n </Button>\n <Button\n onClick={handleTest}\n disabled={testing}\n variant=\"outline\"\n size=\"sm\"\n >\n {testing\n ? tr(\"fluidgrids.variables.testing\", \"Testing…\")\n : tr(\"fluidgrids.variables.testConnection\", \"Test connection\")}\n </Button>\n </div>\n </CardHeader>\n </Card>\n\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.otherProvidersNote\",\n \"HashiCorp Vault, Azure Key Vault, and GCP Secret Manager are not available yet.\",\n )}\n </p>\n </div>\n );\n}\n\n// ============================================================================\n// Main page\n// ============================================================================\n\nexport function VariablesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [activeTab, setActiveTab] = useState(\"variables\");\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.variables.pageTitle\", \"Variables\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.variables.pageSubtitle\",\n \"Reusable values workflows can reference as $vars\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.variables.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"variables\" className=\"gap-1.5\">\n <Icon icon=\"mdi:variable\" width={16} />\n {tr(\"fluidgrids.variables.variablesTab\", \"Variables\")}\n </TabsTrigger>\n <TabsTrigger value=\"providers\" className=\"gap-1.5\">\n <Icon icon=\"mdi:key-chain-variant\" width={16} />\n {tr(\"fluidgrids.variables.providersTab\", \"External Providers\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"variables\">\n <VariablesTab />\n </TabsContent>\n <TabsContent value=\"providers\">\n <ExternalProvidersTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { createFluidGridsClient } from \"./client\";\nimport { createGlobalStoreClient } from \"./global-client\";\n\nexport interface ClientCreationConfig {\n /** Workspace gateway GraphQL endpoint */\n workspaceApiUrl: string;\n /** Global gateway GraphQL endpoint */\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\nexport interface FluidGridsClients {\n /** Apollo client for workspace operations */\n workspaceClient: ApolloClient;\n /** Apollo client for global operations (store, etc.) */\n globalClient: ApolloClient;\n}\n\n/**\n * Helper function to create both workspace and global Apollo clients\n * Use this for easy setup in microfe integrations\n *\n * @example\n * ```typescript\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'workspace-123',\n * tenantId: 'tenant-456',\n * });\n *\n * <FluidGridsProvider\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * >\n * <WorkflowBuilder />\n * </FluidGridsProvider>\n * ```\n */\nexport function createFluidGridsClients(\n config: ClientCreationConfig,\n): FluidGridsClients {\n const workspaceClient = createFluidGridsClient({\n apiGatewayUrl: config.workspaceApiUrl,\n authToken: config.authToken,\n workspaceId: config.workspaceId,\n tenantId: config.tenantId,\n });\n\n const globalClient = createGlobalStoreClient({\n globalApiUrl: config.globalApiUrl,\n authToken: config.authToken,\n workspaceId: config.workspaceId,\n tenantId: config.tenantId,\n organizationId: config.organizationId,\n });\n\n return {\n workspaceClient,\n globalClient,\n };\n}\n","export type RunStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" | \"timeout\";\n\nexport type NodeStatus =\n \"idle\" | \"pending\" | \"running\" | \"success\" | \"error\" | \"skipped\";\n\nexport type ErrorType =\n \"validation\" | \"execution\" | \"timeout\" | \"cancelled\" | \"unknown\";\n\nexport interface WorkflowRun {\n id: string;\n workflowKey: string;\n workflowVersion: string;\n workflowName?: string;\n status: RunStatus;\n startedAt: string;\n completedAt?: string;\n duration?: number;\n triggeredBy?: string;\n triggerType?: string;\n error?: WorkflowError;\n nodeStates?: NodeState[];\n inputData?: Record<string, unknown>;\n outputData?: Record<string, unknown>;\n // Sub-workflow support\n parentRunId?: string;\n isSubWorkflowRun?: boolean;\n subworkflowDepth?: number;\n rootRunId?: string;\n childRuns?: WorkflowRun[];\n}\n\nexport interface NodeState {\n id: string;\n nodeId: string;\n nodeType: string;\n nodeName?: string;\n status: NodeStatus;\n startedAt?: string;\n completedAt?: string;\n duration?: number;\n inputData?: Record<string, unknown>;\n outputData?: Record<string, unknown>;\n error?: string;\n itemCount?: number;\n // Sub-workflow support\n childRunId?: string;\n}\n\nexport interface WorkflowError {\n type: ErrorType;\n message: string;\n nodeId?: string;\n stack?: string;\n}\n\nexport interface ExecutionLog {\n id: string;\n runId: string;\n nodeId: string;\n nodeType: string;\n nodeName: string;\n status: \"pending\" | \"running\" | \"completed\" | \"failed\";\n inputArgs: Record<string, unknown> | null;\n output: Record<string, unknown> | null;\n error: string | null;\n duration: number | null;\n startTime: string;\n endTime: string | null;\n /**\n * True when this node's output came from pinned data instead of a real\n * call (BOFF-7511). Always false/undefined outside a TEST run.\n */\n usedPinnedData?: boolean;\n /**\n * Set when this node's state was reused from an earlier run by\n * `runFromNode` instead of being executed in this run (BOFF-7511).\n */\n reusedFromRunId?: string | null;\n}\n\nexport interface ExecutionsFilter {\n status?: RunStatus[];\n workflowKey?: string;\n dateRange?: {\n start: string;\n end: string;\n };\n triggeredBy?: string;\n}\n\nexport interface ExecutionsPagination {\n page: number;\n pageSize: number;\n total: number;\n}\n\n// Status display configurations\nexport const RUN_STATUS_CONFIG: Record<\n RunStatus,\n { label: string; color: string; bgColor: string }\n> = {\n pending: {\n label: \"Pending\",\n color: \"text-yellow-600\",\n bgColor: \"bg-yellow-100\",\n },\n running: { label: \"Running\", color: \"text-blue-600\", bgColor: \"bg-blue-100\" },\n completed: {\n label: \"Completed\",\n color: \"text-green-600\",\n bgColor: \"bg-green-100\",\n },\n failed: { label: \"Failed\", color: \"text-red-600\", bgColor: \"bg-red-100\" },\n cancelled: {\n label: \"Cancelled\",\n color: \"text-gray-600\",\n bgColor: \"bg-gray-100\",\n },\n timeout: {\n label: \"Timeout\",\n color: \"text-orange-600\",\n bgColor: \"bg-orange-100\",\n },\n};\n\nexport const NODE_STATUS_CONFIG: Record<\n NodeStatus,\n { label: string; color: string; bgColor: string }\n> = {\n idle: { label: \"Idle\", color: \"text-gray-500\", bgColor: \"bg-gray-100\" },\n pending: {\n label: \"Pending\",\n color: \"text-yellow-600\",\n bgColor: \"bg-yellow-100\",\n },\n running: { label: \"Running\", color: \"text-blue-600\", bgColor: \"bg-blue-100\" },\n success: {\n label: \"Success\",\n color: \"text-green-600\",\n bgColor: \"bg-green-100\",\n },\n error: { label: \"Error\", color: \"text-red-600\", bgColor: \"bg-red-100\" },\n skipped: { label: \"Skipped\", color: \"text-gray-400\", bgColor: \"bg-gray-50\" },\n};\n","import * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../utils/cn\";\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background focus-visible:border-ring focus-visible:ring-ring/50 text-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"../utils/cn\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px]\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../utils/cn\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref,\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../utils/cn\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../utils/cn\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/FluidGridsRoot.tsx","../src/pages/WorkflowEmbed.tsx","../src/modules/variables/hooks/useVariables.ts","../src/modules/variables/pages/VariablesPage.tsx","../src/graphql/client-helpers.ts","../src/types/execution.ts","../src/ui/textarea.tsx","../src/ui/tabs.tsx","../src/ui/scroll-area.tsx","../src/ui/separator.tsx","../src/ui/select.tsx","../src/ui/dropdown-menu.tsx","../src/ui/checkbox.tsx","../src/ui/switch.tsx","../src/ui/popover.tsx"],"names":["WorkflowsList","WorkflowBuilder","ExecutionsListPage","ExecutionDetailPage","jsx","jsxs","useState","useEffect","useCallback","Badge","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Input","DialogFooter","Button","Icon","Card","CardHeader","config","React","Tabs","TabsList","TabsTrigger","TabsContent","React2","Select","SelectValue","SelectTrigger","React3","SelectContent","SelectItem","Check","React5","Switch","React6","React7"],"mappings":"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","file":"index.js","sourcesContent":["import { lazy, Suspense } from \"react\";\nimport { Routes, Route, Navigate } from \"react-router\";\nimport { FluidGridsProvider } from \"./FluidGridsProvider\";\nimport type { WorkflowData } from \"../types\";\n\n// Lazy-loaded pages for code splitting\nconst WorkflowsList = lazy(() =>\n import(\"../pages/WorkflowsList\").then((m) => ({ default: m.WorkflowsList })),\n);\nconst WorkflowBuilder = lazy(() =>\n import(\"../pages/WorkflowBuilder\").then((m) => ({\n default: m.WorkflowBuilder,\n })),\n);\nconst ExecutionsListPage = lazy(() =>\n import(\"../modules/executions/pages/ExecutionsListPage\").then((m) => ({\n default: m.ExecutionsListPage,\n })),\n);\nconst ExecutionDetailPage = lazy(() =>\n import(\"../modules/executions/pages/ExecutionDetailPage\").then((m) => ({\n default: m.ExecutionDetailPage,\n })),\n);\n// Disabled - credentials moved to wspace-integrations-svc\n// const CredentialsPageWrapper = lazy(() =>\n// import(\"../modules/credentials/pages/CredentialsPageWrapper\").then((m) => ({\n// default: m.CredentialsPageWrapper,\n// })),\n// );\n// const OAuthCallbackPage = lazy(() =>\n// import(\"../modules/credentials/pages/OAuthCallbackPage\").then((m) => ({\n// default: m.OAuthCallbackPage,\n// })),\n// );\n\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center h-64\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\" />\n </div>\n);\n\nexport interface FluidGridsRootProps {\n /** Base path for routing (e.g., \"/workflows\") */\n basePath?: string;\n /** Workspace API Gateway URL */\n apiGatewayUrl: string;\n /** Authentication token */\n authToken?: string;\n /** Current workspace ID */\n workspaceId: string;\n /** Current tenant ID */\n tenantId?: string;\n /** Current user info */\n currentUser?: {\n id: string;\n email: string;\n name?: string;\n avatar?: string;\n };\n /** Navigation function for route changes */\n navigate?: (path: string) => void;\n /** Global readonly mode */\n readonly?: boolean;\n /** Callback when workflow is saved */\n onWorkflowSave?: (workflow: WorkflowData) => void;\n /** Callback when workflow execution starts */\n onWorkflowExecute?: (runId: string, workflowId: string) => void;\n /** Custom className for root container */\n className?: string;\n}\n\n/**\n * FluidGridsRoot - Full workflow module with routing\n *\n * Use this component when you want the complete workflow management experience\n * including list, builder, runs, credentials, and execution pages.\n */\nexport function FluidGridsRoot({\n basePath: _basePath = \"\",\n apiGatewayUrl,\n authToken,\n workspaceId,\n tenantId,\n currentUser: _currentUser,\n navigate: _navigate,\n readonly: _readonly = false,\n onWorkflowSave: _onWorkflowSave,\n onWorkflowExecute: _onWorkflowExecute,\n // Fill the host's content area so full-height pages (the builder canvas) can\n // resolve their `h-full` chain. Pages that scroll (list/runs) overflow this\n // and scroll within the shell's content region as before.\n className = \"h-full\",\n}: FluidGridsRootProps) {\n return (\n <FluidGridsProvider\n apiGatewayUrl={apiGatewayUrl}\n authToken={authToken}\n workspaceId={workspaceId}\n tenantId={tenantId}\n >\n <div className={className}>\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<Navigate to=\"list\" replace />} />\n <Route path=\"list\" element={<WorkflowsList />} />\n <Route path=\"new\" element={<WorkflowBuilder />} />\n <Route path=\"workflow/:id\" element={<WorkflowBuilder />} />\n <Route path=\"workflow/:id/:version\" element={<WorkflowBuilder />} />\n <Route path=\"runs\" element={<ExecutionsListPage />} />\n <Route path=\"runs/:runId\" element={<ExecutionDetailPage />} />\n {/* <Route path=\"credentials\" element={<CredentialsPageWrapper />} /> */}\n {/* <Route path=\"oauth/callback\" element={<OAuthCallbackPage />} /> */}\n <Route path=\"*\" element={<Navigate to=\"list\" replace />} />\n </Routes>\n </Suspense>\n </div>\n </FluidGridsProvider>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { ErrorBoundary } from \"@burdenoff/fe-libs/shared/components\";\nimport { ThemeProvider } from \"../builder/components/theme-provider\";\nimport { FlowBuilderPage } from \"../builder/app/workflow/_components/flow-builder\";\nimport type { IFlowState } from \"../builder/stores/flow-store\";\nimport { extractTemplateGraph } from \"../utils/template-graph\";\nimport \"@xyflow/react/dist/style.css\";\n\ntype PreviewWorkflow = IFlowState[\"workflow\"];\n\nexport interface WorkflowEmbedPageProps {\n /**\n * Full GraphQL endpoint of the global public gateway\n * (e.g. \"https://graphql.burdenoff.com/global/graphql\"). Required for the\n * `?productId=` fetch mode; postMessage mode works without it.\n */\n globalGraphqlUrl?: string;\n}\n\n/**\n * WorkflowEmbedPage — public, read-only, chrome-less workflow viewer meant to\n * be served from an iframe-able route (`/embed/workflow`) so any website can\n * embed a FluidGrids workflow (n8n-demo style).\n *\n * Two ways to supply the workflow:\n * 1. `?productId=<store product id>` — the page fetches the WORKFLOW store\n * product's `content.definitionJson` from the global public gateway\n * (the `product` query is `@rbac(public: true)`, no auth needed).\n * 2. postMessage from the host page:\n * { type: \"fluidgrids:embed:openWorkflow\",\n * workflow: { name?, nodes, edges } }\n * The page announces readiness with { type: \"fluidgrids:embed:ready\" }\n * and reports { type: \"fluidgrids:embed:loaded\" | \"fluidgrids:embed:error\" }.\n *\n * Extra query params:\n * - `theme=light|dark` — force a theme without touching the visitor's stored\n * preference (attributes are forced, never persisted).\n * - `badge=false` — hide the \"Powered by FluidGrids\" badge.\n * - `cta=false` — hide the \"Use this template\" button (productId mode only).\n *\n * Security note: postMessage input is accepted from any origin by design —\n * the page is unauthenticated, renders display-only JSON through React (no\n * HTML injection path), and holds no tokens or privileged state, so a hostile\n * message can at worst draw a graph in its own iframe.\n */\nexport function WorkflowEmbedPage({\n globalGraphqlUrl,\n}: WorkflowEmbedPageProps) {\n const params = useMemo(() => new URLSearchParams(window.location.search), []);\n const productId = params.get(\"productId\");\n const forcedTheme = normalizeTheme(params.get(\"theme\"));\n const showBadge = params.get(\"badge\") !== \"false\";\n const showCta = params.get(\"cta\") !== \"false\";\n\n const [workflow, setWorkflow] = useState<PreviewWorkflow | null>(null);\n // Remount key: FlowBuilderPage hydrates its store once per mount, so a new\n // postMessage workflow must remount the canvas rather than re-prop it.\n const [revision, setRevision] = useState(0);\n const [loading, setLoading] = useState(Boolean(productId));\n const [error, setError] = useState<string | null>(null);\n\n // Force the requested theme without persisting anything. The surrounding\n // ThemeProvider re-applies stored/default attributes after us (parent\n // effects run last), so keep re-forcing via a MutationObserver.\n useEffect(() => {\n if (!forcedTheme) return;\n const root = document.documentElement;\n const apply = () => {\n root.setAttribute(\"data-theme\", forcedTheme);\n root.classList.toggle(\"dark\", forcedTheme === \"dark\");\n };\n apply();\n const observer = new MutationObserver(() => {\n const themeDrifted = root.getAttribute(\"data-theme\") !== forcedTheme;\n const classDrifted =\n root.classList.contains(\"dark\") !== (forcedTheme === \"dark\");\n if (themeDrifted || classDrifted) apply();\n });\n observer.observe(root, {\n attributes: true,\n attributeFilter: [\"data-theme\", \"class\"],\n });\n return () => observer.disconnect();\n }, [forcedTheme]);\n\n // postMessage protocol with the host page.\n useEffect(() => {\n const handler = (event: MessageEvent) => {\n const data = event.data as\n | {\n type?: string;\n workflow?: {\n name?: string;\n nodes?: unknown[];\n edges?: unknown[];\n };\n }\n | undefined;\n if (data?.type !== \"fluidgrids:embed:openWorkflow\") return;\n const nodes = Array.isArray(data.workflow?.nodes)\n ? data.workflow.nodes\n : [];\n if (!nodes.length) {\n postToParent({\n type: \"fluidgrids:embed:error\",\n message: \"openWorkflow message carried no nodes\",\n });\n return;\n }\n setWorkflow(\n buildPreviewWorkflow({\n id: \"embedded\",\n name: data.workflow?.name ?? \"Workflow\",\n nodes: nodes as PreviewWorkflow[\"nodes\"],\n edges: (Array.isArray(data.workflow?.edges)\n ? data.workflow.edges\n : []) as PreviewWorkflow[\"edges\"],\n }),\n );\n setRevision((r) => r + 1);\n setError(null);\n setLoading(false);\n postToParent({\n type: \"fluidgrids:embed:loaded\",\n nodeCount: nodes.length,\n });\n };\n window.addEventListener(\"message\", handler);\n postToParent({ type: \"fluidgrids:embed:ready\" });\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n // productId fetch mode — plain fetch, no Apollo client and no auth: the\n // `product` query is public and we only select display fields.\n useEffect(() => {\n if (!productId) return;\n let mounted = true;\n const load = async () => {\n try {\n if (!globalGraphqlUrl) {\n throw new Error(\"Embed viewer is missing its gateway endpoint.\");\n }\n const res = await fetch(globalGraphqlUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n query: `query WorkflowEmbedProduct($id: ID!) {\n product(id: $id) { id name description type content }\n }`,\n variables: { id: productId },\n }),\n });\n const json = (await res.json()) as {\n data?: {\n product?: {\n id: string;\n name?: string;\n description?: string;\n type?: string;\n content?: unknown;\n } | null;\n };\n errors?: { message?: string }[];\n };\n if (json.errors?.length) {\n throw new Error(json.errors[0]?.message ?? \"Failed to load workflow\");\n }\n const product = json.data?.product;\n if (!product) throw new Error(\"Workflow not found.\");\n if (product.type && product.type !== \"WORKFLOW\") {\n throw new Error(\"This store product is not a workflow.\");\n }\n const graph = extractTemplateGraph(product.content);\n if (!graph) throw new Error(\"This workflow has nothing to preview.\");\n if (!mounted) return;\n setWorkflow(\n buildPreviewWorkflow({\n id: product.id,\n name: product.name ?? \"Workflow\",\n nodes: graph.nodes,\n edges: graph.edges,\n }),\n );\n setRevision((r) => r + 1);\n setLoading(false);\n postToParent({\n type: \"fluidgrids:embed:loaded\",\n nodeCount: graph.nodes.length,\n });\n } catch (e) {\n if (!mounted) return;\n const message =\n e instanceof Error ? e.message : \"Failed to load workflow.\";\n setError(message);\n setLoading(false);\n postToParent({ type: \"fluidgrids:embed:error\", message });\n }\n };\n load();\n return () => {\n mounted = false;\n };\n }, [productId, globalGraphqlUrl]);\n\n const openInAppUrl = productId\n ? `${window.location.origin}/workflows/templates/${encodeURIComponent(productId)}/preview`\n : null;\n\n return (\n <ThemeProvider>\n <div className=\"relative h-screen w-screen overflow-hidden bg-background\">\n <ErrorBoundary\n fallback={() => (\n <CenteredNote\n icon=\"mdi:alert-circle-outline\"\n text=\"Something went wrong rendering this workflow.\"\n />\n )}\n >\n {loading ? (\n <CenteredNote\n icon=\"svg-spinners:ring-resize\"\n text=\"Loading workflow…\"\n />\n ) : error ? (\n <CenteredNote icon=\"mdi:alert-circle-outline\" text={error} />\n ) : workflow ? (\n <FlowBuilderPage key={revision} workflow={workflow} readOnly />\n ) : (\n <CenteredNote\n icon=\"mdi:sitemap-outline\"\n text=\"Waiting for a workflow…\"\n />\n )}\n </ErrorBoundary>\n\n {showCta && openInAppUrl && workflow ? (\n <a\n href={openInAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute right-3 top-3 z-10 flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground shadow-sm transition-opacity hover:opacity-90\"\n >\n <Icon icon=\"mdi:plus\" className=\"size-3.5\" />\n Use this template\n </a>\n ) : null}\n\n {showBadge ? (\n <a\n href=\"https://www.fluidgrids.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute bottom-3 right-3 z-10 flex items-center gap-1.5 rounded-full border border-card-foreground/10 bg-card/90 px-2.5 py-1 text-[11px] font-medium text-card-foreground shadow-sm backdrop-blur transition-opacity hover:opacity-90\"\n >\n <Icon icon=\"mdi:lightning-bolt\" className=\"size-3.5 text-primary\" />\n Powered by FluidGrids\n </a>\n ) : null}\n </div>\n </ThemeProvider>\n );\n}\n\nfunction CenteredNote({ icon, text }: { icon: string; text: string }) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-2 p-8 text-center\">\n <Icon icon={icon} className=\"size-6 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">{text}</p>\n </div>\n );\n}\n\nfunction buildPreviewWorkflow(input: {\n id: string;\n name: string;\n nodes: PreviewWorkflow[\"nodes\"];\n edges: PreviewWorkflow[\"edges\"];\n}): PreviewWorkflow {\n return {\n id: input.id,\n workflowKey: input.id,\n version: \"embed\",\n name: input.name,\n nodes: input.nodes,\n edges: input.edges,\n sidebar: {\n active: \"none\",\n panels: { nodeProperties: { selectedNode: null } },\n },\n } as PreviewWorkflow;\n}\n\nfunction normalizeTheme(value: string | null): \"light\" | \"dark\" | null {\n return value === \"light\" || value === \"dark\" ? value : null;\n}\n\nfunction postToParent(payload: Record<string, unknown>): void {\n if (window.parent === window) return;\n // \"*\" is intentional: the embed is designed for arbitrary host sites and the\n // payload carries no secrets (status signals + node counts only).\n window.parent.postMessage(payload, \"*\");\n}\n","/**\n * Custom hooks for workflow Variables + external secrets provider config\n * (BOFF-7517). Queries/mutates wspace-workflow-svc via the federated\n * GraphQL gateway — mirrors the connections module's hook pattern\n * (`modules/connections/hooks/useConnections.ts`).\n */\nimport { useState, useEffect, useCallback } from \"react\";\nimport { gql } from \"@apollo/client\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\n\nimport { throwIfResultError } from \"../../../graphql/errors\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type VariableScope = \"WORKSPACE\" | \"PROJECT\";\nexport type SecretProviderType =\n | \"NONE\"\n | \"AWS_SECRETS_MANAGER\"\n | \"VAULT\"\n | \"AZURE_KEY_VAULT\"\n | \"GCP_SECRET_MANAGER\";\n\nexport interface WorkflowVariable {\n id: string;\n scope: VariableScope;\n workspaceId: string;\n projectId?: string | null;\n key: string;\n description?: string | null;\n isSecret: boolean;\n externalProvider: SecretProviderType;\n externalRef?: string | null;\n /** Always null when isSecret or externally-backed — see backend resolver. */\n value?: string | null;\n createdAt: string;\n updatedAt: string;\n createdBy: string;\n updatedBy?: string | null;\n}\n\nexport interface SecretsProviderConfig {\n id: string;\n workspaceId: string;\n provider: SecretProviderType;\n awsSecretsManagerPrefix?: string | null;\n awsRegion?: string | null;\n vaultAddress?: string | null;\n vaultMountPath?: string | null;\n azureKeyVaultUri?: string | null;\n gcpProjectId?: string | null;\n isEnabled: boolean;\n lastTestedAt?: string | null;\n lastTestStatus?: string | null;\n lastTestMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateWorkflowVariableInput {\n scope?: VariableScope;\n projectId?: string;\n key: string;\n description?: string;\n isSecret?: boolean;\n value?: string;\n externalProvider?: SecretProviderType;\n externalRef?: string;\n}\n\nexport interface UpdateWorkflowVariableInput {\n description?: string;\n isSecret?: boolean;\n value?: string;\n externalProvider?: SecretProviderType;\n externalRef?: string;\n}\n\nexport interface SaveSecretsProviderConfigInput {\n provider: SecretProviderType;\n awsSecretsManagerPrefix?: string;\n awsRegion?: string;\n vaultAddress?: string;\n vaultMountPath?: string;\n azureKeyVaultUri?: string;\n gcpProjectId?: string;\n isEnabled?: boolean;\n}\n\n// ============================================================================\n// GraphQL\n// ============================================================================\n\nconst VARIABLE_FIELDS = gql`\n fragment WorkflowVariableFields on WorkflowVariable {\n id\n scope\n workspaceId\n projectId\n key\n description\n isSecret\n externalProvider\n externalRef\n value\n createdAt\n updatedAt\n createdBy\n updatedBy\n }\n`;\n\nconst GET_WORKFLOW_VARIABLES = gql`\n ${VARIABLE_FIELDS}\n query GetWorkflowVariables($scope: VariableScope, $projectId: ID) {\n workflowVariables(scope: $scope, projectId: $projectId) {\n variables {\n ...WorkflowVariableFields\n }\n total\n }\n }\n`;\n\nconst CREATE_WORKFLOW_VARIABLE = gql`\n ${VARIABLE_FIELDS}\n mutation CreateWorkflowVariable($input: CreateWorkflowVariableInput!) {\n createWorkflowVariable(input: $input) {\n success\n message\n variable {\n ...WorkflowVariableFields\n }\n }\n }\n`;\n\nconst UPDATE_WORKFLOW_VARIABLE = gql`\n ${VARIABLE_FIELDS}\n mutation UpdateWorkflowVariable(\n $id: ID!\n $input: UpdateWorkflowVariableInput!\n ) {\n updateWorkflowVariable(id: $id, input: $input) {\n success\n message\n variable {\n ...WorkflowVariableFields\n }\n }\n }\n`;\n\nconst DELETE_WORKFLOW_VARIABLE = gql`\n mutation DeleteWorkflowVariable($id: ID!) {\n deleteWorkflowVariable(id: $id) {\n success\n message\n }\n }\n`;\n\nconst REVEAL_WORKFLOW_VARIABLE_VALUE = gql`\n mutation RevealWorkflowVariableValue($id: ID!) {\n revealWorkflowVariableValue(id: $id) {\n success\n message\n value\n }\n }\n`;\n\nconst GET_SECRETS_PROVIDER_CONFIGS = gql`\n query GetSecretsProviderConfigs {\n secretsProviderConfigs {\n id\n workspaceId\n provider\n awsSecretsManagerPrefix\n awsRegion\n vaultAddress\n vaultMountPath\n azureKeyVaultUri\n gcpProjectId\n isEnabled\n lastTestedAt\n lastTestStatus\n lastTestMessage\n createdAt\n updatedAt\n }\n }\n`;\n\nconst SAVE_SECRETS_PROVIDER_CONFIG = gql`\n mutation SaveSecretsProviderConfig($input: SaveSecretsProviderConfigInput!) {\n saveSecretsProviderConfig(input: $input) {\n success\n message\n config {\n id\n provider\n awsSecretsManagerPrefix\n awsRegion\n isEnabled\n lastTestedAt\n lastTestStatus\n lastTestMessage\n }\n }\n }\n`;\n\nconst TEST_SECRETS_PROVIDER_CONNECTION = gql`\n mutation TestSecretsProviderConnection($provider: SecretProviderType!) {\n testSecretsProviderConnection(provider: $provider) {\n success\n message\n }\n }\n`;\n\n// ============================================================================\n// Variables hooks\n// ============================================================================\n\nexport function useVariables(filter?: {\n scope?: VariableScope;\n projectId?: string;\n}) {\n const [variables, setVariables] = useState<WorkflowVariable[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const scope = filter?.scope;\n const projectId = filter?.projectId;\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n workflowVariables: { variables: WorkflowVariable[]; total: number };\n }>({\n query: GET_WORKFLOW_VARIABLES,\n variables: { scope, projectId },\n fetchPolicy: \"network-only\",\n });\n setVariables(result.data?.workflowVariables?.variables ?? []);\n setTotal(result.data?.workflowVariables?.total ?? 0);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [scope, projectId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return { variables, total, loading, error, refetch: fetchData };\n}\n\nexport function useCreateVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createVariable = useCallback(\n async (input: CreateWorkflowVariableInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n createWorkflowVariable: {\n success: boolean;\n message: string;\n variable: WorkflowVariable | null;\n };\n }>({ mutation: CREATE_WORKFLOW_VARIABLE, variables: { input } }),\n );\n const response = result.data?.createWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to create variable\");\n return response.variable;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { createVariable, loading, error };\n}\n\nexport function useUpdateVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updateVariable = useCallback(\n async (id: string, input: UpdateWorkflowVariableInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n updateWorkflowVariable: {\n success: boolean;\n message: string;\n variable: WorkflowVariable | null;\n };\n }>({ mutation: UPDATE_WORKFLOW_VARIABLE, variables: { id, input } }),\n );\n const response = result.data?.updateWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to update variable\");\n return response.variable;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateVariable, loading, error };\n}\n\nexport function useDeleteVariable() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const deleteVariable = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n deleteWorkflowVariable: { success: boolean; message: string };\n }>({\n mutation: DELETE_WORKFLOW_VARIABLE,\n variables: { id },\n }),\n );\n const response = result.data?.deleteWorkflowVariable;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to delete variable\");\n return true;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deleteVariable, loading, error };\n}\n\nexport function useRevealVariableValue() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const revealValue = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n revealWorkflowVariableValue: {\n success: boolean;\n message: string;\n value: string | null;\n };\n }>({ mutation: REVEAL_WORKFLOW_VARIABLE_VALUE, variables: { id } }),\n );\n const response = result.data?.revealWorkflowVariableValue;\n if (!response?.success)\n throw new Error(response?.message ?? \"Failed to reveal value\");\n return response.value ?? \"\";\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { revealValue, loading, error };\n}\n\n// ============================================================================\n// Secrets provider config hooks\n// ============================================================================\n\nexport function useSecretsProviderConfigs() {\n const [configs, setConfigs] = useState<SecretsProviderConfig[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n secretsProviderConfigs: SecretsProviderConfig[];\n }>({\n query: GET_SECRETS_PROVIDER_CONFIGS,\n fetchPolicy: \"network-only\",\n });\n setConfigs(result.data?.secretsProviderConfigs ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return { configs, loading, error, refetch: fetchData };\n}\n\nexport function useSaveSecretsProviderConfig() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const saveConfig = useCallback(\n async (input: SaveSecretsProviderConfigInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n saveSecretsProviderConfig: {\n success: boolean;\n message: string;\n config: SecretsProviderConfig | null;\n };\n }>({ mutation: SAVE_SECRETS_PROVIDER_CONFIG, variables: { input } }),\n );\n const response = result.data?.saveSecretsProviderConfig;\n if (!response?.success)\n throw new Error(\n response?.message ?? \"Failed to save provider configuration\",\n );\n return response.config;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { saveConfig, loading, error };\n}\n\nexport function useTestSecretsProviderConnection() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const testConnection = useCallback(async (provider: SecretProviderType) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n testSecretsProviderConnection: { success: boolean; message: string };\n }>({\n mutation: TEST_SECRETS_PROVIDER_CONNECTION,\n variables: { provider },\n }),\n );\n return (\n result.data?.testSecretsProviderConnection ?? {\n success: false,\n message: \"Unknown error\",\n }\n );\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { testConnection, loading, error };\n}\n","/**\n * Variables Page (BOFF-7517)\n *\n * Workspace/project-scoped `$vars` key-value store management: list/create/\n * edit/delete variables, mask secret values (dots + explicit \"Reveal\"\n * action), and configure/test the external secrets provider (AWS Secrets\n * Manager first).\n */\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Badge,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n useVariables,\n useCreateVariable,\n useUpdateVariable,\n useDeleteVariable,\n useRevealVariableValue,\n useSecretsProviderConfigs,\n useSaveSecretsProviderConfig,\n useTestSecretsProviderConnection,\n type WorkflowVariable,\n type SecretProviderType,\n} from \"../hooks/useVariables\";\n\n// ============================================================================\n// Variable value display — masked, plain, or externally-resolved\n// ============================================================================\n\nfunction VariableValueCell({ variable }: { variable: WorkflowVariable }) {\n const tr = useTr();\n const { revealValue, loading } = useRevealVariableValue();\n const [revealed, setRevealed] = useState<string | null>(null);\n\n const isMasked = variable.isSecret || variable.externalProvider !== \"NONE\";\n\n const handleReveal = useCallback(async () => {\n try {\n const value = await revealValue(variable.id);\n setRevealed(value);\n // Auto re-mask after 15s so a revealed secret doesn't stay on screen indefinitely.\n setTimeout(() => setRevealed(null), 15000);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.revealFailed\", \"Failed to reveal value\"),\n );\n }\n }, [revealValue, variable.id, tr]);\n\n if (variable.externalProvider !== \"NONE\" && revealed === null) {\n return (\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"font-mono text-xs\">\n {variable.externalProvider}\n </Badge>\n {variable.externalRef && (\n <span\n className=\"text-xs text-text-secondary truncate max-w-[160px]\"\n title={variable.externalRef}\n >\n {variable.externalRef}\n </span>\n )}\n <button\n onClick={handleReveal}\n disabled={loading}\n className=\"text-xs text-text-secondary hover:text-text-primary underline\"\n >\n {tr(\"fluidgrids.variables.reveal\", \"Reveal\")}\n </button>\n </div>\n );\n }\n\n if (!isMasked) {\n return (\n <code className=\"text-sm text-text-primary\">{variable.value ?? \"\"}</code>\n );\n }\n\n if (revealed !== null) {\n return (\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm text-text-primary break-all\">{revealed}</code>\n <button\n onClick={() => setRevealed(null)}\n className=\"text-xs text-text-secondary hover:text-text-primary underline shrink-0\"\n >\n {tr(\"fluidgrids.variables.hide\", \"Hide\")}\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"tracking-widest text-text-secondary select-none\">\n ••••••••\n </span>\n <button\n onClick={handleReveal}\n disabled={loading}\n className=\"text-xs text-text-secondary hover:text-text-primary underline\"\n >\n {loading\n ? tr(\"fluidgrids.variables.revealing\", \"Revealing…\")\n : tr(\"fluidgrids.variables.reveal\", \"Reveal\")}\n </button>\n </div>\n );\n}\n\n// ============================================================================\n// Create / Edit dialog\n// ============================================================================\n\ninterface VariableFormDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n variable: WorkflowVariable | null;\n onSaved: () => void;\n}\n\nfunction VariableFormDialog({\n open,\n onOpenChange,\n variable,\n onSaved,\n}: VariableFormDialogProps) {\n const tr = useTr();\n const { createVariable, loading: creating } = useCreateVariable();\n const { updateVariable, loading: updating } = useUpdateVariable();\n const isEdit = !!variable;\n\n const [key, setKey] = useState(variable?.key ?? \"\");\n const [description, setDescription] = useState(variable?.description ?? \"\");\n const [isSecret, setIsSecret] = useState(variable?.isSecret ?? false);\n const [value, setValue] = useState(\"\");\n const [scope, setScope] = useState<\"WORKSPACE\" | \"PROJECT\">(\n variable?.scope ?? \"WORKSPACE\",\n );\n\n const resetForm = useCallback(() => {\n setKey(variable?.key ?? \"\");\n setDescription(variable?.description ?? \"\");\n setIsSecret(variable?.isSecret ?? false);\n setValue(\"\");\n setScope(variable?.scope ?? \"WORKSPACE\");\n }, [variable]);\n\n const handleSubmit = useCallback(async () => {\n try {\n if (isEdit && variable) {\n await updateVariable(variable.id, {\n description: description || undefined,\n isSecret,\n ...(value ? { value } : {}),\n });\n toast.success(tr(\"fluidgrids.variables.updated\", \"Variable updated\"));\n } else {\n if (!key.trim()) {\n toast.error(\n tr(\"fluidgrids.variables.keyRequired\", \"Key is required\"),\n );\n return;\n }\n await createVariable({\n key: key.trim(),\n description: description || undefined,\n isSecret,\n value,\n scope,\n });\n toast.success(tr(\"fluidgrids.variables.created\", \"Variable created\"));\n }\n onSaved();\n onOpenChange(false);\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.saveFailed\", \"Failed to save variable\"),\n );\n }\n }, [\n isEdit,\n variable,\n key,\n description,\n isSecret,\n value,\n scope,\n createVariable,\n updateVariable,\n onSaved,\n onOpenChange,\n tr,\n ]);\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (next) resetForm();\n onOpenChange(next);\n }}\n >\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle>\n {isEdit\n ? tr(\"fluidgrids.variables.editTitle\", \"Edit variable\")\n : tr(\"fluidgrids.variables.createTitle\", \"New variable\")}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-key\">\n {tr(\"fluidgrids.variables.keyLabel\", \"Key\")}\n </Label>\n <Input\n id=\"variable-key\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n disabled={isEdit}\n placeholder=\"API_URL\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.keyHint\",\n \"Use it in expressions as {{ $vars.KEY }} or ${vars.KEY}\",\n )}\n </p>\n </div>\n\n {!isEdit && (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-scope\">\n {tr(\"fluidgrids.variables.scopeLabel\", \"Scope\")}\n </Label>\n <Select\n value={scope}\n onValueChange={(v) => setScope(v as \"WORKSPACE\" | \"PROJECT\")}\n >\n <SelectTrigger id=\"variable-scope\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"WORKSPACE\">\n {tr(\"fluidgrids.variables.scopeWorkspace\", \"Workspace\")}\n </SelectItem>\n <SelectItem value=\"PROJECT\">\n {tr(\"fluidgrids.variables.scopeProject\", \"Project\")}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-description\">\n {tr(\"fluidgrids.variables.descriptionLabel\", \"Description\")}\n </Label>\n <Input\n id=\"variable-description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder={tr(\n \"fluidgrids.variables.descriptionPlaceholder\",\n \"Optional\",\n )}\n />\n </div>\n\n <div className=\"flex items-center justify-between py-1\">\n <div>\n <Label htmlFor=\"variable-secret\">\n {tr(\"fluidgrids.variables.secretLabel\", \"Secret value\")}\n </Label>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.secretHint\",\n \"Masked in the UI and never printed to run logs\",\n )}\n </p>\n </div>\n <Switch\n id=\"variable-secret\"\n checked={isSecret}\n onCheckedChange={setIsSecret}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"variable-value\">\n {tr(\"fluidgrids.variables.valueLabel\", \"Value\")}\n </Label>\n <Input\n id=\"variable-value\"\n type={isSecret ? \"password\" : \"text\"}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={\n isEdit\n ? tr(\n \"fluidgrids.variables.valueLeaveBlank\",\n \"Leave blank to keep the current value\",\n )\n : \"\"\n }\n />\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.variables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={creating || updating}>\n {creating || updating\n ? tr(\"fluidgrids.variables.saving\", \"Saving…\")\n : tr(\"fluidgrids.variables.save\", \"Save\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// Variables tab\n// ============================================================================\n\nfunction VariablesTab() {\n const tr = useTr();\n const { variables, loading, refetch } = useVariables();\n const { deleteVariable } = useDeleteVariable();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [editing, setEditing] = useState<WorkflowVariable | null>(null);\n\n const handleCreate = useCallback(() => {\n setEditing(null);\n setDialogOpen(true);\n }, []);\n\n const handleEdit = useCallback((variable: WorkflowVariable) => {\n setEditing(variable);\n setDialogOpen(true);\n }, []);\n\n const handleDelete = useCallback(\n async (variable: WorkflowVariable) => {\n if (\n !window.confirm(\n tr(\n \"fluidgrids.variables.confirmDelete\",\n `Delete variable \"${variable.key}\"?`,\n ),\n )\n )\n return;\n try {\n await deleteVariable(variable.id);\n toast.success(tr(\"fluidgrids.variables.deleted\", \"Variable deleted\"));\n refetch();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\n \"fluidgrids.variables.deleteFailed\",\n \"Failed to delete variable\",\n ),\n );\n }\n },\n [deleteVariable, refetch, tr],\n );\n\n return (\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.variables.tabDescription\",\n \"Reference these in any node parameter as {{ $vars.KEY }} (new expressions) or ${vars.KEY} (legacy).\",\n )}\n </p>\n <Button onClick={handleCreate} size=\"sm\">\n <Icon icon=\"mdi:plus\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.variables.newVariable\", \"New Variable\")}\n </Button>\n </div>\n\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{tr(\"fluidgrids.variables.colKey\", \"Key\")}</TableHead>\n <TableHead>\n {tr(\"fluidgrids.variables.colScope\", \"Scope\")}\n </TableHead>\n <TableHead>\n {tr(\"fluidgrids.variables.colValue\", \"Value\")}\n </TableHead>\n <TableHead className=\"text-right\">\n {tr(\"fluidgrids.variables.colActions\", \"Actions\")}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-center text-text-secondary py-8\"\n >\n {tr(\"fluidgrids.variables.loading\", \"Loading…\")}\n </TableCell>\n </TableRow>\n )}\n {!loading && variables.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-center text-text-secondary py-8\"\n >\n {tr(\"fluidgrids.variables.empty\", \"No variables yet\")}\n </TableCell>\n </TableRow>\n )}\n {variables.map((variable) => (\n <TableRow key={variable.id}>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-medium text-text-primary\">\n {variable.key}\n </code>\n {variable.isSecret && (\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {tr(\"fluidgrids.variables.secretBadge\", \"SECRET\")}\n </Badge>\n )}\n </div>\n {variable.description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {variable.description}\n </p>\n )}\n </TableCell>\n <TableCell className=\"text-text-secondary text-sm\">\n {variable.scope}\n </TableCell>\n <TableCell>\n <VariableValueCell variable={variable} />\n </TableCell>\n <TableCell className=\"text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <button\n onClick={() => handleEdit(variable)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary\"\n title={tr(\"fluidgrids.variables.edit\", \"Edit\")}\n >\n <Icon icon=\"mdi:pencil-outline\" width={16} />\n </button>\n <button\n onClick={() => handleDelete(variable)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-red-400\"\n title={tr(\"fluidgrids.variables.delete\", \"Delete\")}\n >\n <Icon icon=\"mdi:trash-can-outline\" width={16} />\n </button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Card>\n\n <VariableFormDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n variable={editing}\n onSaved={refetch}\n />\n </div>\n );\n}\n\n// ============================================================================\n// External Providers tab\n// ============================================================================\n\nfunction ExternalProvidersTab() {\n const tr = useTr();\n const { configs, loading, refetch } = useSecretsProviderConfigs();\n const { saveConfig, loading: saving } = useSaveSecretsProviderConfig();\n const { testConnection, loading: testing } =\n useTestSecretsProviderConnection();\n\n const awsConfig = configs.find((c) => c.provider === \"AWS_SECRETS_MANAGER\");\n const [prefix, setPrefix] = useState(\"\");\n const [region, setRegion] = useState(\"ap-south-1\");\n const [enabled, setEnabled] = useState(false);\n const [lastTest, setLastTest] = useState<{\n success: boolean;\n message: string;\n } | null>(null);\n // `useSecretsProviderConfigs` resolves asynchronously — the form fields\n // must hydrate from the fetched config once it arrives, not just on the\n // (empty) first render. Hydrates once per fetched config identity so it\n // doesn't clobber an in-progress edit on an unrelated re-render.\n const [hydratedConfigId, setHydratedConfigId] = useState<string | null>(null);\n useEffect(() => {\n if (!awsConfig || awsConfig.id === hydratedConfigId) return;\n setPrefix(awsConfig.awsSecretsManagerPrefix ?? \"\");\n setRegion(awsConfig.awsRegion ?? \"ap-south-1\");\n setEnabled(awsConfig.isEnabled);\n setLastTest(\n awsConfig.lastTestStatus\n ? {\n success: awsConfig.lastTestStatus === \"SUCCESS\",\n message: awsConfig.lastTestMessage ?? \"\",\n }\n : null,\n );\n setHydratedConfigId(awsConfig.id);\n }, [awsConfig, hydratedConfigId]);\n\n const handleSave = useCallback(async () => {\n try {\n await saveConfig({\n provider: \"AWS_SECRETS_MANAGER\" as SecretProviderType,\n awsSecretsManagerPrefix: prefix || undefined,\n awsRegion: region || undefined,\n isEnabled: enabled,\n });\n toast.success(\n tr(\n \"fluidgrids.variables.providerSaved\",\n \"Provider configuration saved\",\n ),\n );\n refetch();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.providerSaveFailed\", \"Failed to save\"),\n );\n }\n }, [saveConfig, prefix, region, enabled, refetch, tr]);\n\n const handleTest = useCallback(async () => {\n try {\n const result = await testConnection(\n \"AWS_SECRETS_MANAGER\" as SecretProviderType,\n );\n setLastTest(result);\n if (result.success) {\n toast.success(result.message);\n } else {\n toast.error(result.message);\n }\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\"fluidgrids.variables.testFailed\", \"Connection test failed\"),\n );\n }\n }, [testConnection, tr]);\n\n if (loading) {\n return (\n <p className=\"text-text-secondary text-sm\">\n {tr(\"fluidgrids.variables.loading\", \"Loading…\")}\n </p>\n );\n }\n\n return (\n <div className=\"space-y-4 max-w-xl\">\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3 space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:aws\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.variables.awsProviderTitle\",\n \"AWS Secrets Manager\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.awsProviderDescription\",\n \"A variable can reference a secret stored in AWS Secrets Manager instead of storing its own value. Only secrets under the prefix below are reachable.\",\n )}\n </p>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"aws-prefix\">\n {tr(\n \"fluidgrids.variables.awsPrefixLabel\",\n \"Secrets Manager prefix\",\n )}\n </Label>\n <Input\n id=\"aws-prefix\"\n value={prefix}\n onChange={(e) => setPrefix(e.target.value)}\n placeholder=\"boff/prod/wspace/workflow/vars/\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"aws-region\">\n {tr(\"fluidgrids.variables.awsRegionLabel\", \"Region\")}\n </Label>\n <Input\n id=\"aws-region\"\n value={region}\n onChange={(e) => setRegion(e.target.value)}\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"aws-enabled\">\n {tr(\"fluidgrids.variables.awsEnabledLabel\", \"Enabled\")}\n </Label>\n <Switch\n id=\"aws-enabled\"\n checked={enabled}\n onCheckedChange={setEnabled}\n />\n </div>\n\n {lastTest && (\n <div\n className={`text-xs rounded-md px-3 py-2 border ${\n lastTest.success\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-400\"\n : \"border-red-500/30 bg-red-500/10 text-red-400\"\n }`}\n >\n {lastTest.message}\n </div>\n )}\n\n <div className=\"flex items-center gap-2 pt-1\">\n <Button onClick={handleSave} disabled={saving} size=\"sm\">\n {saving\n ? tr(\"fluidgrids.variables.saving\", \"Saving…\")\n : tr(\"fluidgrids.variables.save\", \"Save\")}\n </Button>\n <Button\n onClick={handleTest}\n disabled={testing}\n variant=\"outline\"\n size=\"sm\"\n >\n {testing\n ? tr(\"fluidgrids.variables.testing\", \"Testing…\")\n : tr(\"fluidgrids.variables.testConnection\", \"Test connection\")}\n </Button>\n </div>\n </CardHeader>\n </Card>\n\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.variables.otherProvidersNote\",\n \"HashiCorp Vault, Azure Key Vault, and GCP Secret Manager are not available yet.\",\n )}\n </p>\n </div>\n );\n}\n\n// ============================================================================\n// Main page\n// ============================================================================\n\nexport function VariablesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [activeTab, setActiveTab] = useState(\"variables\");\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.variables.pageTitle\", \"Variables\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.variables.pageSubtitle\",\n \"Reusable values workflows can reference as $vars\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.variables.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"variables\" className=\"gap-1.5\">\n <Icon icon=\"mdi:variable\" width={16} />\n {tr(\"fluidgrids.variables.variablesTab\", \"Variables\")}\n </TabsTrigger>\n <TabsTrigger value=\"providers\" className=\"gap-1.5\">\n <Icon icon=\"mdi:key-chain-variant\" width={16} />\n {tr(\"fluidgrids.variables.providersTab\", \"External Providers\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"variables\">\n <VariablesTab />\n </TabsContent>\n <TabsContent value=\"providers\">\n <ExternalProvidersTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import { type ApolloClient } from \"@apollo/client/core\";\nimport { createFluidGridsClient } from \"./client\";\nimport { createGlobalStoreClient } from \"./global-client\";\n\nexport interface ClientCreationConfig {\n /** Workspace gateway GraphQL endpoint */\n workspaceApiUrl: string;\n /** Global gateway GraphQL endpoint */\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\nexport interface FluidGridsClients {\n /** Apollo client for workspace operations */\n workspaceClient: ApolloClient;\n /** Apollo client for global operations (store, etc.) */\n globalClient: ApolloClient;\n}\n\n/**\n * Helper function to create both workspace and global Apollo clients\n * Use this for easy setup in microfe integrations\n *\n * @example\n * ```typescript\n * const { workspaceClient, globalClient } = createFluidGridsClients({\n * workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',\n * globalApiUrl: 'http://localhost:4000/global/graphql',\n * authToken: token,\n * workspaceId: 'workspace-123',\n * tenantId: 'tenant-456',\n * });\n *\n * <FluidGridsProvider\n * workspaceClient={workspaceClient}\n * globalClient={globalClient}\n * >\n * <WorkflowBuilder />\n * </FluidGridsProvider>\n * ```\n */\nexport function createFluidGridsClients(\n config: ClientCreationConfig,\n): FluidGridsClients {\n const workspaceClient = createFluidGridsClient({\n apiGatewayUrl: config.workspaceApiUrl,\n authToken: config.authToken,\n workspaceId: config.workspaceId,\n tenantId: config.tenantId,\n });\n\n const globalClient = createGlobalStoreClient({\n globalApiUrl: config.globalApiUrl,\n authToken: config.authToken,\n workspaceId: config.workspaceId,\n tenantId: config.tenantId,\n organizationId: config.organizationId,\n });\n\n return {\n workspaceClient,\n globalClient,\n };\n}\n","export type RunStatus =\n \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" | \"timeout\";\n\nexport type NodeStatus =\n \"idle\" | \"pending\" | \"running\" | \"success\" | \"error\" | \"skipped\";\n\nexport type ErrorType =\n \"validation\" | \"execution\" | \"timeout\" | \"cancelled\" | \"unknown\";\n\nexport interface WorkflowRun {\n id: string;\n workflowKey: string;\n workflowVersion: string;\n workflowName?: string;\n status: RunStatus;\n startedAt: string;\n completedAt?: string;\n duration?: number;\n triggeredBy?: string;\n triggerType?: string;\n error?: WorkflowError;\n nodeStates?: NodeState[];\n inputData?: Record<string, unknown>;\n outputData?: Record<string, unknown>;\n // Sub-workflow support\n parentRunId?: string;\n isSubWorkflowRun?: boolean;\n subworkflowDepth?: number;\n rootRunId?: string;\n childRuns?: WorkflowRun[];\n}\n\nexport interface NodeState {\n id: string;\n nodeId: string;\n nodeType: string;\n nodeName?: string;\n status: NodeStatus;\n startedAt?: string;\n completedAt?: string;\n duration?: number;\n inputData?: Record<string, unknown>;\n outputData?: Record<string, unknown>;\n error?: string;\n itemCount?: number;\n // Sub-workflow support\n childRunId?: string;\n}\n\nexport interface WorkflowError {\n type: ErrorType;\n message: string;\n nodeId?: string;\n stack?: string;\n}\n\nexport interface ExecutionLog {\n id: string;\n runId: string;\n nodeId: string;\n nodeType: string;\n nodeName: string;\n status: \"pending\" | \"running\" | \"completed\" | \"failed\";\n inputArgs: Record<string, unknown> | null;\n output: Record<string, unknown> | null;\n error: string | null;\n duration: number | null;\n startTime: string;\n endTime: string | null;\n /**\n * True when this node's output came from pinned data instead of a real\n * call (BOFF-7511). Always false/undefined outside a TEST run.\n */\n usedPinnedData?: boolean;\n /**\n * Set when this node's state was reused from an earlier run by\n * `runFromNode` instead of being executed in this run (BOFF-7511).\n */\n reusedFromRunId?: string | null;\n}\n\nexport interface ExecutionsFilter {\n status?: RunStatus[];\n workflowKey?: string;\n dateRange?: {\n start: string;\n end: string;\n };\n triggeredBy?: string;\n}\n\nexport interface ExecutionsPagination {\n page: number;\n pageSize: number;\n total: number;\n}\n\n// Status display configurations\nexport const RUN_STATUS_CONFIG: Record<\n RunStatus,\n { label: string; color: string; bgColor: string }\n> = {\n pending: {\n label: \"Pending\",\n color: \"text-yellow-600\",\n bgColor: \"bg-yellow-100\",\n },\n running: { label: \"Running\", color: \"text-blue-600\", bgColor: \"bg-blue-100\" },\n completed: {\n label: \"Completed\",\n color: \"text-green-600\",\n bgColor: \"bg-green-100\",\n },\n failed: { label: \"Failed\", color: \"text-red-600\", bgColor: \"bg-red-100\" },\n cancelled: {\n label: \"Cancelled\",\n color: \"text-gray-600\",\n bgColor: \"bg-gray-100\",\n },\n timeout: {\n label: \"Timeout\",\n color: \"text-orange-600\",\n bgColor: \"bg-orange-100\",\n },\n};\n\nexport const NODE_STATUS_CONFIG: Record<\n NodeStatus,\n { label: string; color: string; bgColor: string }\n> = {\n idle: { label: \"Idle\", color: \"text-gray-500\", bgColor: \"bg-gray-100\" },\n pending: {\n label: \"Pending\",\n color: \"text-yellow-600\",\n bgColor: \"bg-yellow-100\",\n },\n running: { label: \"Running\", color: \"text-blue-600\", bgColor: \"bg-blue-100\" },\n success: {\n label: \"Success\",\n color: \"text-green-600\",\n bgColor: \"bg-green-100\",\n },\n error: { label: \"Error\", color: \"text-red-600\", bgColor: \"bg-red-100\" },\n skipped: { label: \"Skipped\", color: \"text-gray-400\", bgColor: \"bg-gray-50\" },\n};\n","import * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../utils/cn\";\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background focus-visible:border-ring focus-visible:ring-ring/50 text-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"../utils/cn\";\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px]\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../utils/cn\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref,\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../utils/cn\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\",\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../utils/cn\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n"]}
|