@burdenoff/fluidgrids-fe-sdk 2026.1007.1 → 2026.1007.2
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 +97 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FluidGridsRoot.tsx","../src/pages/embed-params.ts","../src/pages/WorkflowEmbed.tsx","../src/modules/variables/hooks/useVariables.ts","../src/modules/variables/pages/VariablesPage.tsx","../src/modules/tool-approval/hooks/useToolApprovals.ts","../src/modules/tool-approval/pages/ApprovalInboxPage.tsx","../src/modules/data-tables/hooks/useDataTables.ts","../src/modules/data-tables/utils/csv.ts","../src/modules/data-tables/pages/DataTablesPage.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","gql","toast","CardContent","useNavigate","Textarea","error","CardTitle","CardDescription","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","useMemo","config","React","Tabs","TabsList","TabsTrigger","TabsContent","React2","Select","SelectValue","SelectTrigger","SelectContent","SelectItem","Check","React4","Switch","React5","React6"],"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","/**\n * Query parameters the public `/embed/workflow` viewer honours.\n *\n * There is deliberately no branding parameter: the viewer always shows the\n * \"Powered by FluidGrids\" mark (Burdenoff does no white-labelling). The old\n * `badge=false` parameter is not read, so embeds that still send it keep\n * working and simply show the mark.\n */\nexport interface EmbedParams {\n /** WORKFLOW store product to fetch, or null for postMessage mode. */\n productId: string | null;\n /** Forced theme, or null to keep the visitor's own preference. */\n theme: \"light\" | \"dark\" | null;\n /** Whether to show the \"Use this template\" button (productId mode only). */\n showCta: boolean;\n}\n\nexport function parseEmbedParams(search: string): EmbedParams {\n const params = new URLSearchParams(search);\n return {\n productId: params.get(\"productId\") || null,\n theme: normalizeTheme(params.get(\"theme\")),\n showCta: params.get(\"cta\") !== \"false\",\n };\n}\n\nfunction normalizeTheme(value: string | null): \"light\" | \"dark\" | null {\n return value === \"light\" || value === \"dark\" ? value : null;\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 { FluidGridsMark } from \"../components/shared/FluidGridsMark\";\nimport { parseEmbedParams } from \"./embed-params\";\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 (parsed by `parseEmbedParams`):\n * - `theme=light|dark` — force a theme without touching the visitor's stored\n * preference (attributes are forced, never persisted).\n * - `cta=false` — hide the \"Use this template\" button (productId mode only).\n *\n * Branding: every state of the viewer shows exactly one \"Powered by\n * FluidGrids\" mark — the canvas draws its own once a workflow is loaded, and\n * the loading, error and waiting notes draw one otherwise. Burdenoff does no\n * white-labelling, so no parameter, prop or message hides it; the retired\n * `badge=false` parameter is ignored.\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 {\n productId,\n theme: forcedTheme,\n showCta,\n } = useMemo(() => parseEmbedParams(window.location.search), []);\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 {/* The loaded canvas carries its own FluidGridsMark; every other state\n is a CenteredNote, which draws one — so each state shows exactly\n one mark, and none of them can be switched off. */}\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 {/* Top-left: the FluidGrids mark holds the canvas's top-right corner. */}\n {showCta && openInAppUrl && workflow ? (\n <a\n href={openInAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute left-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 </div>\n </ThemeProvider>\n );\n}\n\n/** A full-page status note for the states that have no canvas (and so no\n * canvas mark): it draws the FluidGrids mark itself. */\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 <FluidGridsMark />\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 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","/**\n * Custom hooks for the AI Agent tool-approval inbox (BOFF-7521).\n * Queries/mutates wspace-workflow-svc via the federated GraphQL gateway —\n * mirrors the variables module's hook pattern\n * (`modules/variables/hooks/useVariables.ts`).\n */\nimport { useCallback, useEffect, useState } 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 ToolApprovalStatus =\n \"PENDING\" | \"APPROVED\" | \"REJECTED\" | \"PARTIAL\" | \"TIMED_OUT\";\n\nexport type ToolApprovalTimeoutAction = \"AUTO_REJECT\" | \"AUTO_APPROVE\";\n\nexport type ToolApprovalDecisionValue = \"APPROVED\" | \"REJECTED\";\n\nexport interface PendingToolCall {\n callId: string;\n name: string;\n /** JSON-encoded arguments the agent proposed for this call. */\n argsJson: string;\n}\n\nexport interface ToolApprovalDecisionRecord {\n callId: string;\n decision: ToolApprovalDecisionValue;\n reason?: string | null;\n}\n\nexport interface ToolApprovalRequest {\n id: string;\n runId: string;\n nodeId: string;\n workflowId: string;\n workflowKey: string;\n status: ToolApprovalStatus;\n toolCalls: PendingToolCall[];\n decisions?: ToolApprovalDecisionRecord[] | null;\n timeoutAt?: string | null;\n timeoutAction: ToolApprovalTimeoutAction;\n requestedAt: string;\n decidedAt?: string | null;\n decidedBy?: string | null;\n}\n\nexport interface ToolApprovalDecisionInput {\n callId: string;\n decision: ToolApprovalDecisionValue;\n reason?: string;\n}\n\n// ============================================================================\n// GraphQL\n// ============================================================================\n\nconst TOOL_APPROVAL_FIELDS = gql`\n fragment ToolApprovalRequestFields on ToolApprovalRequest {\n id\n runId\n nodeId\n workflowId\n workflowKey\n status\n toolCalls {\n callId\n name\n argsJson\n }\n decisions {\n callId\n decision\n reason\n }\n timeoutAt\n timeoutAction\n requestedAt\n decidedAt\n decidedBy\n }\n`;\n\nconst GET_PENDING_TOOL_APPROVALS = gql`\n ${TOOL_APPROVAL_FIELDS}\n query GetPendingToolApprovals($limit: Int, $offset: Int) {\n pendingToolApprovals(limit: $limit, offset: $offset) {\n totalCount\n items {\n ...ToolApprovalRequestFields\n }\n }\n }\n`;\n\nconst DECIDE_TOOL_APPROVAL = gql`\n ${TOOL_APPROVAL_FIELDS}\n mutation DecideToolApproval(\n $id: ID!\n $decisions: [ToolApprovalDecisionInput!]!\n ) {\n decideToolApproval(id: $id, decisions: $decisions) {\n success\n error\n resumedFromNodeId\n request {\n ...ToolApprovalRequestFields\n }\n }\n }\n`;\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Polls the pending tool-approval inbox. Short polling interval (not a\n * subscription) — approvals are rare/low-volume and the caller wants a\n * near-real-time inbox without standing up a dedicated subscription channel\n * for a v1 feature.\n */\nexport function usePendingToolApprovals(options?: {\n limit?: number;\n offset?: number;\n pollIntervalMs?: number;\n}) {\n const limit = options?.limit ?? 50;\n const offset = options?.offset ?? 0;\n const pollIntervalMs = options?.pollIntervalMs ?? 15000;\n\n const [items, setItems] = useState<ToolApprovalRequest[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n pendingToolApprovals: {\n totalCount: number;\n items: ToolApprovalRequest[];\n };\n }>({\n query: GET_PENDING_TOOL_APPROVALS,\n variables: { limit, offset },\n fetchPolicy: \"network-only\",\n });\n setItems(result.data?.pendingToolApprovals?.items ?? []);\n setTotalCount(result.data?.pendingToolApprovals?.totalCount ?? 0);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [limit, offset]);\n\n useEffect(() => {\n fetchData();\n if (pollIntervalMs <= 0) return;\n const interval = setInterval(fetchData, pollIntervalMs);\n return () => clearInterval(interval);\n }, [fetchData, pollIntervalMs]);\n\n return { items, totalCount, loading, error, refetch: fetchData };\n}\n\nexport function useDecideToolApproval() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const decide = useCallback(\n async (id: string, decisions: ToolApprovalDecisionInput[]) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n decideToolApproval: {\n success: boolean;\n error: string | null;\n resumedFromNodeId: string | null;\n request: ToolApprovalRequest | null;\n };\n }>({\n mutation: DECIDE_TOOL_APPROVAL,\n variables: { id, decisions },\n }),\n );\n const response = result.data?.decideToolApproval;\n if (!response?.success) {\n throw new Error(response?.error ?? \"Failed to record the decision\");\n }\n return response;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n /** Convenience: approve or reject every proposed call in one batch. */\n const decideAll = useCallback(\n async (\n request: Pick<ToolApprovalRequest, \"id\" | \"toolCalls\">,\n decision: ToolApprovalDecisionValue,\n reason?: string,\n ) => {\n return decide(\n request.id,\n request.toolCalls.map((call) => ({\n callId: call.callId,\n decision,\n reason,\n })),\n );\n },\n [decide],\n );\n\n return { decide, decideAll, loading, error };\n}\n","/**\n * Tool Approval Inbox (BOFF-7521)\n *\n * Human-in-the-loop gate for AI Agent tool calls: lists every run currently\n * paused waiting for a decision, shows the proposed tool call(s) and their\n * arguments, and lets the reviewer approve or reject the whole batch (or, in\n * a future iteration, individual calls). Approving/rejecting resumes the\n * underlying run via `decideToolApproval`, which reuses the exact same\n * WAITING/`resumeWorkflowRun` mechanism the Wait node uses.\n */\nimport { useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Card,\n CardContent,\n CardHeader,\n Badge,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Textarea,\n Label,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr, type Translator } from \"../../../hooks/useTr\";\nimport {\n usePendingToolApprovals,\n useDecideToolApproval,\n type ToolApprovalRequest,\n type ToolApprovalDecisionValue,\n} from \"../hooks/useToolApprovals\";\n\nfunction formatArgs(argsJson: string): string {\n try {\n return JSON.stringify(JSON.parse(argsJson), null, 2);\n } catch {\n return argsJson;\n }\n}\n\nfunction timeAgo(iso: string, tr: Translator): string {\n const then = new Date(iso).getTime();\n const diffMs = Date.now() - then;\n const minutes = Math.floor(diffMs / 60000);\n if (minutes < 1) return tr(\"fluidgrids.toolApproval.justNow\", \"just now\");\n if (minutes < 60)\n return tr(\"fluidgrids.toolApproval.minutesAgo\", \"{{minutes}}m ago\", {\n minutes,\n });\n const hours = Math.floor(minutes / 60);\n if (hours < 24)\n return tr(\"fluidgrids.toolApproval.hoursAgo\", \"{{hours}}h ago\", { hours });\n const days = Math.floor(hours / 24);\n return tr(\"fluidgrids.toolApproval.daysAgo\", \"{{days}}d ago\", { days });\n}\n\n// ============================================================================\n// Reject reason dialog\n// ============================================================================\n\ninterface RejectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (reason: string) => void;\n submitting: boolean;\n}\n\nfunction RejectDialog({\n open,\n onOpenChange,\n onConfirm,\n submitting,\n}: RejectDialogProps) {\n const tr = useTr();\n const [reason, setReason] = useState(\"\");\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {tr(\n \"fluidgrids.toolApproval.rejectDialogTitle\",\n \"Reject tool call\",\n )}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"reject-reason\">\n {tr(\n \"fluidgrids.toolApproval.rejectReasonLabel\",\n \"Reason (optional)\",\n )}\n </Label>\n <Textarea\n id=\"reject-reason\"\n value={reason}\n onChange={(e) => setReason(e.target.value)}\n placeholder={tr(\n \"fluidgrids.toolApproval.rejectReasonPlaceholder\",\n \"Why is this call being rejected? The agent sees this.\",\n )}\n />\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {tr(\"fluidgrids.toolApproval.cancel\", \"Cancel\")}\n </Button>\n <Button\n variant=\"destructive\"\n onClick={() => onConfirm(reason)}\n disabled={submitting}\n >\n {submitting\n ? tr(\"fluidgrids.toolApproval.rejecting\", \"Rejecting…\")\n : tr(\"fluidgrids.toolApproval.rejectConfirm\", \"Reject\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// One pending request card\n// ============================================================================\n\ninterface RequestCardProps {\n request: ToolApprovalRequest;\n onDecided: () => void;\n}\n\nfunction RequestCard({ request, onDecided }: RequestCardProps) {\n const tr = useTr();\n const { decideAll, loading } = useDecideToolApproval();\n const [showReject, setShowReject] = useState(false);\n\n const handleDecide = async (\n decision: ToolApprovalDecisionValue,\n reason?: string,\n ) => {\n try {\n await decideAll(request, decision, reason);\n toast.success(\n decision === \"APPROVED\"\n ? tr(\n \"fluidgrids.toolApproval.approvedToast\",\n \"Tool call approved — run resumed\",\n )\n : tr(\n \"fluidgrids.toolApproval.rejectedToast\",\n \"Tool call rejected — run resumed\",\n ),\n );\n setShowReject(false);\n onDecided();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\n \"fluidgrids.toolApproval.decisionFailed\",\n \"Failed to record the decision\",\n ),\n );\n }\n };\n\n return (\n <Card\n className=\"border border-border-secondary bg-background-secondary\"\n data-testid=\"tool-approval-card\"\n data-request-id={request.id}\n >\n <CardHeader className=\"pb-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:robot-outline\"\n width={18}\n className=\"text-text-secondary\"\n />\n <span className=\"text-sm font-semibold text-text-primary\">\n {tr(\"fluidgrids.toolApproval.nodeLabel\", \"Node\")}:{\" \"}\n {request.nodeId}\n </span>\n </div>\n <Badge variant=\"outline\" className=\"font-mono text-[10px]\">\n {request.workflowKey}\n </Badge>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.toolApproval.requestedAt\", \"Requested {{when}}\", {\n when: timeAgo(request.requestedAt, tr),\n })}\n {request.timeoutAt &&\n ` · ${tr(\n \"fluidgrids.toolApproval.autoResolvesAt\",\n \"auto-resolves at {{time}}\",\n {\n time: new Date(request.timeoutAt).toLocaleString(),\n },\n )}`}\n </p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {request.toolCalls.map((call) => (\n <div\n key={call.callId}\n className=\"rounded-md border border-border-secondary bg-background-primary p-3\"\n >\n <div className=\"mb-1 flex items-center gap-2\">\n <Icon\n icon=\"mdi:function-variant\"\n width={14}\n className=\"text-text-secondary\"\n />\n <span className=\"text-sm font-medium text-text-primary\">\n {call.name}\n </span>\n </div>\n <pre className=\"overflow-x-auto whitespace-pre-wrap break-all text-xs text-text-secondary\">\n {formatArgs(call.argsJson)}\n </pre>\n </div>\n ))}\n\n <div className=\"flex items-center gap-2 pt-1\">\n <Button\n size=\"sm\"\n disabled={loading}\n onClick={() => handleDecide(\"APPROVED\")}\n data-testid=\"tool-approval-approve\"\n >\n <Icon icon=\"mdi:check\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.toolApproval.approve\", \"Approve\")}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={loading}\n onClick={() => setShowReject(true)}\n data-testid=\"tool-approval-reject\"\n >\n <Icon icon=\"mdi:close\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.toolApproval.reject\", \"Reject\")}\n </Button>\n </div>\n </CardContent>\n\n <RejectDialog\n open={showReject}\n onOpenChange={setShowReject}\n submitting={loading}\n onConfirm={(reason) => handleDecide(\"REJECTED\", reason || undefined)}\n />\n </Card>\n );\n}\n\n// ============================================================================\n// Main page\n// ============================================================================\n\nexport function ApprovalInboxPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const { items, totalCount, loading, error, refetch } =\n usePendingToolApprovals();\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.toolApproval.pageTitle\", \"Tool Approvals\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.toolApproval.pageSubtitle\",\n \"AI Agent tool calls waiting for a human decision before they run\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../runs\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.toolApproval.backToRuns\", \"Back to Runs\")}\n </Button>\n </div>\n\n {loading && items.length === 0 && (\n <p className=\"text-text-secondary text-sm\">\n {tr(\"fluidgrids.toolApproval.loading\", \"Loading…\")}\n </p>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {tr(\n \"fluidgrids.toolApproval.loadFailed\",\n \"Failed to load pending approvals: {{message}}\",\n {\n message: error.message,\n },\n )}\n </p>\n )}\n\n {!loading && !error && items.length === 0 && (\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardContent className=\"flex flex-col items-center gap-2 py-10 text-center\">\n <Icon\n icon=\"mdi:shield-check-outline\"\n width={32}\n className=\"text-text-secondary\"\n />\n <p className=\"text-sm font-medium text-text-primary\">\n {tr(\n \"fluidgrids.toolApproval.emptyTitle\",\n \"Nothing waiting for approval\",\n )}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.toolApproval.emptySubtitle\",\n \"Runs will appear here when an AI Agent with tool approval enabled proposes a tool call.\",\n )}\n </p>\n </CardContent>\n </Card>\n )}\n\n {items.length > 0 && (\n <div\n className=\"mb-3 text-xs text-text-secondary\"\n data-testid=\"tool-approval-count\"\n >\n {tr(\n \"fluidgrids.toolApproval.count\",\n \"{{count}} pending ({{total}} total)\",\n {\n count: items.length,\n total: totalCount,\n },\n )}\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {items.map((request) => (\n <RequestCard key={request.id} request={request} onDecided={refetch} />\n ))}\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { gql } from \"@apollo/client\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n describeOperationError,\n throwIfResultError,\n} from \"../../../graphql/errors\";\n\nexport type DataTableColumnType =\n \"STRING\" | \"NUMBER\" | \"BOOLEAN\" | \"DATE\" | \"JSON\";\n\nexport interface DataTableColumn {\n key: string;\n label: string;\n type: DataTableColumnType;\n required: boolean;\n defaultValue?: unknown;\n}\n\nexport interface DataTable {\n id: string;\n workspaceId: string;\n name: string;\n description?: string | null;\n columns: DataTableColumn[];\n rowCount: number;\n sizeBytes: number;\n createdAt: string;\n updatedAt: string;\n createdBy: string;\n updatedBy?: string | null;\n}\n\nexport interface DataTableRow {\n id: string;\n tableId: string;\n data: Record<string, unknown>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface DataTableColumnInput {\n key: string;\n label: string;\n type: DataTableColumnType;\n required?: boolean;\n defaultValue?: unknown;\n}\n\nexport interface CreateDataTableInput {\n name: string;\n description?: string;\n columns: DataTableColumnInput[];\n}\n\nexport interface UpdateDataTableInput {\n name?: string;\n description?: string;\n columns?: DataTableColumnInput[];\n}\n\nconst DATA_TABLE_FIELDS = gql`\n fragment DataTableFields on DataTable {\n id\n workspaceId\n name\n description\n columns {\n key\n label\n type\n required\n defaultValue\n }\n rowCount\n sizeBytes\n createdAt\n updatedAt\n createdBy\n updatedBy\n }\n`;\n\nconst DATA_TABLE_ROW_FIELDS = gql`\n fragment DataTableRowFields on DataTableRow {\n id\n tableId\n data\n createdAt\n updatedAt\n }\n`;\n\nconst GET_DATA_TABLES = gql`\n ${DATA_TABLE_FIELDS}\n query GetDataTables($search: String, $limit: Int, $offset: Int) {\n dataTables(search: $search, limit: $limit, offset: $offset) {\n tables {\n ...DataTableFields\n }\n total\n }\n }\n`;\n\nconst GET_DATA_TABLE_ROWS = gql`\n ${DATA_TABLE_ROW_FIELDS}\n query GetDataTableRows($input: DataTableRowsQueryInput!) {\n dataTableRows(input: $input) {\n rows {\n ...DataTableRowFields\n }\n total\n }\n }\n`;\n\nconst CREATE_DATA_TABLE = gql`\n ${DATA_TABLE_FIELDS}\n mutation CreateDataTable($input: CreateDataTableInput!) {\n createDataTable(input: $input) {\n success\n message\n table {\n ...DataTableFields\n }\n }\n }\n`;\n\nconst UPDATE_DATA_TABLE = gql`\n ${DATA_TABLE_FIELDS}\n mutation UpdateDataTable($id: ID!, $input: UpdateDataTableInput!) {\n updateDataTable(id: $id, input: $input) {\n success\n message\n table {\n ...DataTableFields\n }\n }\n }\n`;\n\nconst DELETE_DATA_TABLE = gql`\n mutation DeleteDataTable($id: ID!) {\n deleteDataTable(id: $id) {\n success\n message\n }\n }\n`;\n\nconst INSERT_DATA_TABLE_ROW = gql`\n ${DATA_TABLE_ROW_FIELDS}\n mutation InsertDataTableRow($tableId: ID!, $data: JSON!) {\n insertDataTableRow(tableId: $tableId, data: $data) {\n success\n message\n row {\n ...DataTableRowFields\n }\n }\n }\n`;\n\nconst UPDATE_DATA_TABLE_ROW = gql`\n ${DATA_TABLE_ROW_FIELDS}\n mutation UpdateDataTableRow($id: ID!, $data: JSON!) {\n updateDataTableRow(id: $id, data: $data) {\n success\n message\n row {\n ...DataTableRowFields\n }\n }\n }\n`;\n\nconst DELETE_DATA_TABLE_ROWS = gql`\n mutation DeleteDataTableRows($tableId: ID!, $ids: [ID!]!) {\n deleteDataTableRows(tableId: $tableId, ids: $ids) {\n success\n message\n affected\n }\n }\n`;\n\ninterface DataTablesQuery {\n dataTables: {\n tables: DataTable[];\n total: number;\n };\n}\n\ninterface DataTableRowsQuery {\n dataTableRows: {\n rows: Array<{\n id: string;\n tableId: string;\n data: unknown;\n createdAt: string;\n updatedAt: string;\n }>;\n total: number;\n };\n}\n\ninterface DataTableMutationResponse {\n success: boolean;\n message: string;\n table?: DataTable | null;\n}\n\ninterface DataTableRowMutationResponse {\n success: boolean;\n message: string;\n row?: {\n id: string;\n tableId: string;\n data: unknown;\n createdAt: string;\n updatedAt: string;\n } | null;\n}\n\nfunction toRow(\n row: DataTableRowsQuery[\"dataTableRows\"][\"rows\"][number],\n): DataTableRow {\n return {\n id: row.id,\n tableId: row.tableId,\n data: toRecord(row.data),\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> {\n // JSON scalars are objects at runtime for valid Data Table rows; keep an\n // invalid server response from crashing the table page if it ever occurs.\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction operationError(error: unknown, fallback: string): Error {\n return new Error(describeOperationError(error, fallback));\n}\n\nexport function useDataTables(search?: string) {\n const [tables, setTables] = useState<DataTable[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchTables = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataTablesQuery>({\n query: GET_DATA_TABLES,\n variables: {\n search: search?.trim() || undefined,\n limit: 200,\n offset: 0,\n },\n fetchPolicy: \"network-only\",\n }),\n );\n setTables(result.data?.dataTables.tables ?? []);\n setTotal(result.data?.dataTables.total ?? 0);\n } catch (err) {\n setError(operationError(err, \"Failed to load data tables\"));\n } finally {\n setLoading(false);\n }\n }, [search]);\n\n useEffect(() => {\n void fetchTables();\n }, [fetchTables]);\n\n return { tables, total, loading, error, refetch: fetchTables };\n}\n\nexport function useDataTableRows(tableId: string | null) {\n const [rows, setRows] = useState<DataTableRow[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRows = useCallback(async () => {\n if (!tableId) {\n setRows([]);\n setTotal(0);\n setLoading(false);\n setError(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataTableRowsQuery>({\n query: GET_DATA_TABLE_ROWS,\n variables: { input: { tableId, limit: 5000, offset: 0 } },\n fetchPolicy: \"network-only\",\n }),\n );\n const response = result.data?.dataTableRows;\n setRows(response?.rows.map(toRow) ?? []);\n setTotal(response?.total ?? 0);\n } catch (err) {\n setError(operationError(err, \"Failed to load data table rows\"));\n } finally {\n setLoading(false);\n }\n }, [tableId]);\n\n useEffect(() => {\n void fetchRows();\n }, [fetchRows]);\n\n return { rows, total, loading, error, refetch: fetchRows };\n}\n\nexport function useCreateDataTable() {\n const [loading, setLoading] = useState(false);\n\n const createDataTable = useCallback(async (input: CreateDataTableInput) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n createDataTable: DataTableMutationResponse;\n }>({ mutation: CREATE_DATA_TABLE, variables: { input } }),\n );\n const response = result.data?.createDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to create data table\");\n }\n return response.table ?? null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { createDataTable, loading };\n}\n\nexport function useUpdateDataTable() {\n const [loading, setLoading] = useState(false);\n\n const updateDataTable = useCallback(\n async (id: string, input: UpdateDataTableInput) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n updateDataTable: DataTableMutationResponse;\n }>({ mutation: UPDATE_DATA_TABLE, variables: { id, input } }),\n );\n const response = result.data?.updateDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to update data table\");\n }\n return response.table ?? null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateDataTable, loading };\n}\n\nexport function useDeleteDataTable() {\n const [loading, setLoading] = useState(false);\n\n const deleteDataTable = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n deleteDataTable: { success: boolean; message: string };\n }>({ mutation: DELETE_DATA_TABLE, variables: { id } }),\n );\n const response = result.data?.deleteDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to delete data table\");\n }\n return true;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deleteDataTable, loading };\n}\n\nexport function useInsertDataTableRow() {\n const [loading, setLoading] = useState(false);\n\n const insertDataTableRow = useCallback(\n async (tableId: string, data: Record<string, unknown>) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n insertDataTableRow: DataTableRowMutationResponse;\n }>({\n mutation: INSERT_DATA_TABLE_ROW,\n variables: { tableId, data },\n }),\n );\n const response = result.data?.insertDataTableRow;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to insert row\");\n }\n return response.row ? toRow(response.row) : null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { insertDataTableRow, loading };\n}\n\nexport function useUpdateDataTableRow() {\n const [loading, setLoading] = useState(false);\n\n const updateDataTableRow = useCallback(\n async (id: string, data: Record<string, unknown>) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n updateDataTableRow: DataTableRowMutationResponse;\n }>({ mutation: UPDATE_DATA_TABLE_ROW, variables: { id, data } }),\n );\n const response = result.data?.updateDataTableRow;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to update row\");\n }\n return response.row ? toRow(response.row) : null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateDataTableRow, loading };\n}\n\nexport function useDeleteDataTableRows() {\n const [loading, setLoading] = useState(false);\n\n const deleteDataTableRows = useCallback(\n async (tableId: string, ids: string[]) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n deleteDataTableRows: {\n success: boolean;\n message: string;\n affected: number;\n };\n }>({\n mutation: DELETE_DATA_TABLE_ROWS,\n variables: { tableId, ids },\n }),\n );\n const response = result.data?.deleteDataTableRows;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to delete rows\");\n }\n return response.affected;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { deleteDataTableRows, loading };\n}\n","import type {\n DataTableColumn,\n DataTableColumnType,\n} from \"../hooks/useDataTables\";\n\n/** Parse RFC 4180-style CSV while preserving quoted commas and line breaks. */\nexport function parseCsv(text: string): string[][] {\n const rows: string[][] = [];\n let row: string[] = [];\n let cell = \"\";\n let quoted = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const character = text[index];\n const next = text[index + 1];\n\n if (quoted) {\n if (character === '\"' && next === '\"') {\n cell += '\"';\n index += 1;\n } else if (character === '\"') {\n quoted = false;\n } else {\n cell += character;\n }\n continue;\n }\n\n if (character === '\"' && cell.length === 0) {\n quoted = true;\n } else if (character === \",\") {\n row.push(cell);\n cell = \"\";\n } else if (character === \"\\n\" || character === \"\\r\") {\n if (character === \"\\r\" && next === \"\\n\") index += 1;\n row.push(cell);\n cell = \"\";\n if (row.some((value) => value.length > 0)) rows.push(row);\n row = [];\n } else {\n cell += character;\n }\n }\n\n if (quoted) {\n throw new Error(\"CSV contains an unterminated quoted value\");\n }\n\n if (cell.length > 0 || row.length > 0) {\n row.push(cell);\n if (row.some((value) => value.length > 0)) rows.push(row);\n }\n\n return rows;\n}\n\nfunction parseValue(value: string, type: DataTableColumnType): unknown {\n if (value === \"\") {\n return type === \"STRING\" ? \"\" : null;\n }\n\n switch (type) {\n case \"NUMBER\": {\n const parsed = Number(value);\n if (!Number.isFinite(parsed))\n throw new Error(`Expected a number, got \"${value}\"`);\n return parsed;\n }\n case \"BOOLEAN\": {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw new Error(`Expected true or false, got \"${value}\"`);\n }\n case \"JSON\":\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(`Expected valid JSON, got \"${value}\"`);\n }\n case \"DATE\":\n case \"STRING\":\n return value;\n }\n}\n\n/** Convert a CSV whose first row contains column keys into validated row data. */\nexport function csvToRows(\n text: string,\n columns: DataTableColumn[],\n): Record<string, unknown>[] {\n const parsed = parseCsv(text);\n if (parsed.length < 2) return [];\n\n const headers = parsed[0].map((header) => header.trim());\n const columnByKey = new Map(columns.map((column) => [column.key, column]));\n const seen = new Set<string>();\n\n for (const header of headers) {\n if (!header || seen.has(header)) {\n throw new Error(\"CSV must have unique, non-empty column headers\");\n }\n if (!columnByKey.has(header)) {\n throw new Error(`CSV contains an unknown column \"${header}\"`);\n }\n seen.add(header);\n }\n\n return parsed.slice(1).map((values, rowIndex) => {\n const row: Record<string, unknown> = {};\n headers.forEach((header, columnIndex) => {\n const column = columnByKey.get(header);\n if (!column) return;\n const rawValue = values[columnIndex] ?? \"\";\n try {\n row[header] = parseValue(rawValue, column.type);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid value\";\n throw new Error(`Row ${rowIndex + 2}, ${column.label}: ${message}`);\n }\n });\n return row;\n });\n}\n\nfunction csvCell(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n const text =\n typeof value === \"object\" ? JSON.stringify(value) : String(value);\n return /[\",\\r\\n]/.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n}\n\n/** Serialize table rows with a stable header matching the table schema. */\nexport function rowsToCsv(\n columns: DataTableColumn[],\n rows: Array<{ data: Record<string, unknown> }>,\n): string {\n const header = columns.map((column) => csvCell(column.key)).join(\",\");\n const values = rows.map((row) =>\n columns.map((column) => csvCell(row.data[column.key])).join(\",\"),\n );\n return [header, ...values].join(\"\\r\\n\");\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FormEvent,\n} from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n ArrowDownToLine,\n ArrowLeft,\n ArrowUpFromLine,\n Database,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Table2,\n Trash2,\n} from \"lucide-react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Textarea,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { describeOperationError } from \"../../../graphql/errors\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n useCreateDataTable,\n useDataTableRows,\n useDataTables,\n useDeleteDataTable,\n useDeleteDataTableRows,\n useInsertDataTableRow,\n useUpdateDataTable,\n useUpdateDataTableRow,\n type DataTable,\n type DataTableColumnInput,\n type DataTableColumnType,\n type DataTableRow,\n} from \"../hooks/useDataTables\";\nimport { csvToRows, rowsToCsv } from \"../utils/csv\";\n\nconst COLUMN_TYPES: DataTableColumnType[] = [\n \"STRING\",\n \"NUMBER\",\n \"BOOLEAN\",\n \"DATE\",\n \"JSON\",\n];\n\nfunction emptyColumn(index: number): DataTableColumnInput {\n return {\n key: `column_${index}`,\n label: `Column ${index}`,\n type: \"STRING\",\n required: false,\n };\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null || value === undefined) return \"—\";\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nfunction columnTypeLabel(type: DataTableColumnType): string {\n return type === \"JSON\" ? \"JSON\" : type[0] + type.slice(1).toLowerCase();\n}\n\nfunction asFormValue(value: unknown, type: DataTableColumnType): string {\n if (value === null || value === undefined) return \"\";\n if (type === \"JSON\") return JSON.stringify(value, null, 2);\n return String(value);\n}\n\nfunction parseFormValue(value: string, type: DataTableColumnType): unknown {\n if (type === \"STRING\" || type === \"DATE\") return value;\n if (value.trim() === \"\") return null;\n if (type === \"NUMBER\") {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new Error(`\"${value}\" is not a number`);\n return number;\n }\n if (type === \"BOOLEAN\") {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new Error(\"Boolean values must be true or false\");\n }\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(\"JSON values must contain valid JSON\");\n }\n}\n\ninterface TableFormDialogProps {\n open: boolean;\n table: DataTable | null;\n onOpenChange: (open: boolean) => void;\n onSaved: (table: DataTable | null) => void;\n}\n\nfunction TableFormDialog({\n open,\n table,\n onOpenChange,\n onSaved,\n}: TableFormDialogProps) {\n const tr = useTr();\n const { createDataTable, loading: creating } = useCreateDataTable();\n const { updateDataTable, loading: updating } = useUpdateDataTable();\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [columns, setColumns] = useState<DataTableColumnInput[]>([]);\n const editing = table !== null;\n const saving = creating || updating;\n\n useEffect(() => {\n if (!open) return;\n setName(table?.name ?? \"\");\n setDescription(table?.description ?? \"\");\n setColumns(\n table?.columns.map((column) => ({\n key: column.key,\n label: column.label,\n type: column.type,\n required: column.required,\n ...(column.defaultValue !== undefined\n ? { defaultValue: column.defaultValue }\n : {}),\n })) ?? [emptyColumn(1)],\n );\n }, [open, table]);\n\n const updateColumn = useCallback(\n (index: number, patch: Partial<DataTableColumnInput>) => {\n setColumns((current) =>\n current.map((column, columnIndex) =>\n columnIndex === index ? { ...column, ...patch } : column,\n ),\n );\n },\n [],\n );\n\n const handleSubmit = useCallback(async () => {\n const trimmedName = name.trim();\n if (!trimmedName) {\n toast.error(\n tr(\"fluidgrids.dataTables.nameRequired\", \"Table name is required\"),\n );\n return;\n }\n if (\n columns.length === 0 ||\n columns.some((column) => !column.key.trim() || !column.label.trim())\n ) {\n toast.error(\n tr(\n \"fluidgrids.dataTables.columnsRequired\",\n \"Add at least one column with a key and label\",\n ),\n );\n return;\n }\n\n const normalizedColumns = columns.map((column) => ({\n ...column,\n key: column.key.trim(),\n label: column.label.trim(),\n }));\n const keys = new Set(normalizedColumns.map((column) => column.key));\n if (keys.size !== normalizedColumns.length) {\n toast.error(\n tr(\"fluidgrids.dataTables.uniqueKeys\", \"Column keys must be unique\"),\n );\n return;\n }\n\n try {\n const saved = editing\n ? await updateDataTable(table.id, {\n name: trimmedName,\n description: description.trim() || undefined,\n columns: normalizedColumns,\n })\n : await createDataTable({\n name: trimmedName,\n description: description.trim() || undefined,\n columns: normalizedColumns,\n });\n toast.success(\n editing\n ? tr(\"fluidgrids.dataTables.updated\", \"Data table updated\")\n : tr(\"fluidgrids.dataTables.created\", \"Data table created\"),\n );\n onSaved(saved);\n onOpenChange(false);\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.saveFailed\", \"Failed to save data table\"),\n ),\n );\n }\n }, [\n columns,\n createDataTable,\n description,\n editing,\n name,\n onOpenChange,\n onSaved,\n table,\n tr,\n updateDataTable,\n ]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] max-w-3xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editing\n ? tr(\"fluidgrids.dataTables.editTable\", \"Edit data table\")\n : tr(\"fluidgrids.dataTables.newTable\", \"New data table\")}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-5 py-2\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"data-table-name\">\n {tr(\"fluidgrids.dataTables.name\", \"Name\")}\n </Label>\n <Input\n id=\"data-table-name\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"contacts\"\n autoFocus\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"data-table-description\">\n {tr(\"fluidgrids.dataTables.description\", \"Description\")}\n </Label>\n <Input\n id=\"data-table-description\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder={tr(\n \"fluidgrids.dataTables.descriptionPlaceholder\",\n \"Optional\",\n )}\n />\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\"fluidgrids.dataTables.columns\", \"Columns\")}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.columnsHint\",\n \"Column keys are used by workflow nodes and must be unique.\",\n )}\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n setColumns((current) => [\n ...current,\n emptyColumn(current.length + 1),\n ])\n }\n >\n <Plus className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.addColumn\", \"Add column\")}\n </Button>\n </div>\n\n <div className=\"space-y-2\">\n {columns.map((column, index) => (\n <div\n className=\"grid gap-2 rounded-md border border-border-secondary p-3 sm:grid-cols-[1fr_1fr_8rem_auto] sm:items-end\"\n key={`${column.key}-${index}`}\n >\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-key-${index}`}>\n {tr(\"fluidgrids.dataTables.key\", \"Key\")}\n </Label>\n <Input\n id={`data-table-column-key-${index}`}\n value={column.key}\n onChange={(event) =>\n updateColumn(index, { key: event.target.value })\n }\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-label-${index}`}>\n {tr(\"fluidgrids.dataTables.label\", \"Label\")}\n </Label>\n <Input\n id={`data-table-column-label-${index}`}\n value={column.label}\n onChange={(event) =>\n updateColumn(index, { label: event.target.value })\n }\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-type-${index}`}>\n {tr(\"fluidgrids.dataTables.type\", \"Type\")}\n </Label>\n <select\n id={`data-table-column-type-${index}`}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-text-primary\"\n value={column.type}\n onChange={(event) =>\n updateColumn(index, {\n type: event.target.value as DataTableColumnType,\n })\n }\n >\n {COLUMN_TYPES.map((type) => (\n <option key={type} value={type}>\n {columnTypeLabel(type)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex items-center gap-2 pb-2 sm:flex-col sm:items-center sm:gap-1\">\n <label className=\"flex items-center gap-2 text-xs text-text-secondary\">\n <input\n type=\"checkbox\"\n checked={column.required ?? false}\n onChange={(event) =>\n updateColumn(index, {\n required: event.target.checked,\n })\n }\n />\n {tr(\"fluidgrids.dataTables.required\", \"Required\")}\n </label>\n <button\n type=\"button\"\n className=\"rounded p-1 text-text-secondary hover:bg-background-tertiary hover:text-text-primary disabled:opacity-40\"\n onClick={() =>\n setColumns((current) =>\n current.filter(\n (_, columnIndex) => columnIndex !== index,\n ),\n )\n }\n disabled={columns.length === 1}\n title={tr(\n \"fluidgrids.dataTables.removeColumn\",\n \"Remove column\",\n )}\n aria-label={tr(\n \"fluidgrids.dataTables.removeColumn\",\n \"Remove column\",\n )}\n >\n <Trash2 className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.dataTables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={saving}>\n {saving\n ? tr(\"fluidgrids.dataTables.saving\", \"Saving…\")\n : tr(\"fluidgrids.dataTables.save\", \"Save table\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\ninterface RowFormDialogProps {\n open: boolean;\n table: DataTable | null;\n row: DataTableRow | null;\n onOpenChange: (open: boolean) => void;\n onSaved: () => void;\n}\n\nfunction RowFormDialog({\n open,\n table,\n row,\n onOpenChange,\n onSaved,\n}: RowFormDialogProps) {\n const tr = useTr();\n const { insertDataTableRow, loading: inserting } = useInsertDataTableRow();\n const { updateDataTableRow, loading: updating } = useUpdateDataTableRow();\n const [values, setValues] = useState<Record<string, string>>({});\n const editing = row !== null;\n const saving = inserting || updating;\n\n useEffect(() => {\n if (!open || !table) return;\n const next: Record<string, string> = {};\n for (const column of table.columns) {\n next[column.key] = asFormValue(row?.data[column.key], column.type);\n }\n setValues(next);\n }, [open, row, table]);\n\n const handleSubmit = useCallback(async () => {\n if (!table) return;\n try {\n const data: Record<string, unknown> = {};\n for (const column of table.columns) {\n const value = values[column.key] ?? \"\";\n if (column.required && value.trim() === \"\") {\n throw new Error(`${column.label} is required`);\n }\n data[column.key] = parseFormValue(value, column.type);\n }\n if (editing && row) {\n await updateDataTableRow(row.id, data);\n } else {\n await insertDataTableRow(table.id, data);\n }\n toast.success(\n editing\n ? tr(\"fluidgrids.dataTables.rowUpdated\", \"Row updated\")\n : tr(\"fluidgrids.dataTables.rowCreated\", \"Row added\"),\n );\n onSaved();\n onOpenChange(false);\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.rowSaveFailed\", \"Failed to save row\"),\n ),\n );\n }\n }, [\n editing,\n insertDataTableRow,\n onOpenChange,\n onSaved,\n row,\n table,\n tr,\n updateDataTableRow,\n values,\n ]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] max-w-2xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editing\n ? tr(\"fluidgrids.dataTables.editRow\", \"Edit row\")\n : tr(\"fluidgrids.dataTables.addRow\", \"Add row\")}\n </DialogTitle>\n </DialogHeader>\n {table && (\n <div className=\"space-y-4 py-2\">\n {table.columns.map((column) => (\n <div className=\"space-y-1.5\" key={column.key}>\n <Label htmlFor={`data-table-row-${column.key}`}>\n {column.label}\n <span className=\"ml-1 text-xs text-text-secondary\">\n ({column.key} · {columnTypeLabel(column.type)})\n </span>\n {column.required && (\n <span className=\"ml-1 text-text-secondary\">*</span>\n )}\n </Label>\n {column.type === \"JSON\" ? (\n <Textarea\n id={`data-table-row-${column.key}`}\n value={values[column.key] ?? \"\"}\n onChange={(event) =>\n setValues((current) => ({\n ...current,\n [column.key]: event.target.value,\n }))\n }\n rows={4}\n placeholder=\"{ }\"\n />\n ) : (\n <Input\n id={`data-table-row-${column.key}`}\n type={\n column.type === \"NUMBER\"\n ? \"number\"\n : column.type === \"DATE\"\n ? \"datetime-local\"\n : \"text\"\n }\n value={values[column.key] ?? \"\"}\n onChange={(event) =>\n setValues((current) => ({\n ...current,\n [column.key]: event.target.value,\n }))\n }\n />\n )}\n </div>\n ))}\n </div>\n )}\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.dataTables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={saving || !table}>\n {saving\n ? tr(\"fluidgrids.dataTables.saving\", \"Saving…\")\n : tr(\"fluidgrids.dataTables.saveRow\", \"Save row\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\ninterface TableRowsPanelProps {\n table: DataTable;\n onTableChanged: () => void;\n}\n\nfunction TableRowsPanel({ table, onTableChanged }: TableRowsPanelProps) {\n const tr = useTr();\n const { rows, total, loading, error, refetch } = useDataTableRows(table.id);\n const { deleteDataTableRows, loading: deleting } = useDeleteDataTableRows();\n const { insertDataTableRow } = useInsertDataTableRow();\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [rowDialogOpen, setRowDialogOpen] = useState(false);\n const [editingRow, setEditingRow] = useState<DataTableRow | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setSelectedIds((current) => {\n const visible = new Set(rows.map((row) => row.id));\n return new Set([...current].filter((id) => visible.has(id)));\n });\n }, [rows]);\n\n const allVisibleSelected =\n rows.length > 0 && selectedIds.size === rows.length;\n\n const toggleAll = useCallback(() => {\n setSelectedIds(\n allVisibleSelected ? new Set() : new Set(rows.map((row) => row.id)),\n );\n }, [allVisibleSelected, rows]);\n\n const handleDeleteRows = useCallback(async () => {\n if (selectedIds.size === 0) return;\n if (\n !window.confirm(\n tr(\n \"fluidgrids.dataTables.confirmDeleteRows\",\n `Delete ${selectedIds.size} selected row(s)?`,\n ),\n )\n ) {\n return;\n }\n try {\n const affected = await deleteDataTableRows(table.id, [...selectedIds]);\n toast.success(\n tr(\"fluidgrids.dataTables.rowsDeleted\", `${affected} row(s) deleted`),\n );\n setSelectedIds(new Set());\n await refetch();\n onTableChanged();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.deleteRowsFailed\", \"Failed to delete rows\"),\n ),\n );\n }\n }, [deleteDataTableRows, onTableChanged, refetch, selectedIds, table.id, tr]);\n\n const handleExport = useCallback(() => {\n const csv = rowsToCsv(table.columns, rows);\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = `${table.name}.csv`;\n anchor.click();\n URL.revokeObjectURL(url);\n toast.success(\n tr(\"fluidgrids.dataTables.exported\", \"Visible rows exported to CSV\"),\n );\n }, [rows, table.columns, table.name, tr]);\n\n const handleImport = useCallback(\n async (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file) return;\n try {\n const importedRows = csvToRows(await file.text(), table.columns);\n let inserted = 0;\n for (const data of importedRows) {\n await insertDataTableRow(table.id, data);\n inserted += 1;\n }\n toast.success(\n tr(\"fluidgrids.dataTables.imported\", `${inserted} row(s) imported`),\n );\n await refetch();\n onTableChanged();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.importFailed\", \"Failed to import CSV\"),\n ),\n );\n }\n },\n [insertDataTableRow, onTableChanged, refetch, table.columns, table.id, tr],\n );\n\n const openNewRow = useCallback(() => {\n setEditingRow(null);\n setRowDialogOpen(true);\n }, []);\n\n const openEditRow = useCallback((row: DataTableRow) => {\n setEditingRow(row);\n setRowDialogOpen(true);\n }, []);\n\n return (\n <Card className=\"min-w-0 border-border-secondary\">\n <CardHeader className=\"gap-3 border-b border-border-secondary p-4 sm:p-5\">\n <div className=\"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"min-w-0\">\n <CardTitle className=\"flex items-center gap-2 text-lg\">\n <Table2\n className=\"size-5 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <span className=\"truncate\">{table.name}</span>\n </CardTitle>\n <CardDescription className=\"mt-1\">\n {table.description ||\n tr(\"fluidgrids.dataTables.noDescription\", \"No description\")}\n </CardDescription>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={openNewRow}>\n <Plus className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.addRow\", \"Add row\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n >\n <ArrowUpFromLine className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.import\", \"Import CSV\")}\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv,text/csv\"\n className=\"hidden\"\n onChange={handleImport}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleExport}\n disabled={rows.length === 0}\n >\n <ArrowDownToLine className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.export\", \"Export CSV\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-text-secondary\">\n <Badge variant=\"outline\">\n {total} {tr(\"fluidgrids.dataTables.rows\", \"rows\")}\n </Badge>\n <Badge variant=\"outline\">\n {table.columns.length}{\" \"}\n {tr(\"fluidgrids.dataTables.columns\", \"columns\")}\n </Badge>\n <Badge variant=\"outline\">{formatBytes(table.sizeBytes)}</Badge>\n {selectedIds.size > 0 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDeleteRows}\n disabled={deleting}\n >\n <Trash2 className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {deleting\n ? tr(\"fluidgrids.dataTables.deleting\", \"Deleting…\")\n : tr(\n \"fluidgrids.dataTables.deleteSelected\",\n `Delete ${selectedIds.size} selected`,\n )}\n </Button>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"p-0\">\n {error && (\n <div className=\"m-4 rounded-md border border-border-secondary bg-background-secondary p-3 text-sm text-text-secondary\">\n {error.message}\n </div>\n )}\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n checked={allVisibleSelected}\n onChange={toggleAll}\n aria-label={tr(\n \"fluidgrids.dataTables.selectAll\",\n \"Select all rows\",\n )}\n />\n </TableHead>\n <TableHead>\n {tr(\"fluidgrids.dataTables.rowId\", \"Row\")}\n </TableHead>\n {table.columns.map((column) => (\n <TableHead key={column.key}>{column.label}</TableHead>\n ))}\n <TableHead className=\"text-right\">\n {tr(\"fluidgrids.dataTables.actions\", \"Actions\")}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && (\n <TableRow>\n <TableCell\n colSpan={table.columns.length + 3}\n className=\"py-10 text-center text-text-secondary\"\n >\n {tr(\"fluidgrids.dataTables.loadingRows\", \"Loading rows…\")}\n </TableCell>\n </TableRow>\n )}\n {!loading && rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={table.columns.length + 3}\n className=\"py-10 text-center text-text-secondary\"\n >\n {tr(\n \"fluidgrids.dataTables.emptyRows\",\n \"No rows yet. Add a row or import a CSV to get started.\",\n )}\n </TableCell>\n </TableRow>\n )}\n {!loading &&\n rows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <input\n type=\"checkbox\"\n checked={selectedIds.has(row.id)}\n onChange={() =>\n setSelectedIds((current) => {\n const next = new Set(current);\n if (next.has(row.id)) next.delete(row.id);\n else next.add(row.id);\n return next;\n })\n }\n aria-label={tr(\n \"fluidgrids.dataTables.selectRow\",\n \"Select row\",\n )}\n />\n </TableCell>\n <TableCell>\n <code className=\"text-xs text-text-secondary\">\n {row.id.slice(0, 8)}\n </code>\n </TableCell>\n {table.columns.map((column) => (\n <TableCell\n className=\"max-w-[16rem] truncate text-sm\"\n key={column.key}\n title={formatValue(row.data[column.key])}\n >\n {formatValue(row.data[column.key])}\n </TableCell>\n ))}\n <TableCell className=\"text-right\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => openEditRow(row)}\n title={tr(\"fluidgrids.dataTables.editRow\", \"Edit row\")}\n aria-label={tr(\n \"fluidgrids.dataTables.editRow\",\n \"Edit row\",\n )}\n >\n <Pencil className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n {total > rows.length && !loading && (\n <p className=\"border-t border-border-secondary px-4 py-3 text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.rowLimitNote\",\n \"Showing the first 5,000 rows. Use workflow filters for larger tables.\",\n )}\n </p>\n )}\n </CardContent>\n <RowFormDialog\n open={rowDialogOpen}\n table={table}\n row={editingRow}\n onOpenChange={setRowDialogOpen}\n onSaved={async () => {\n await refetch();\n onTableChanged();\n }}\n />\n </Card>\n );\n}\n\nexport function DataTablesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [searchInput, setSearchInput] = useState(\"\");\n const [search, setSearch] = useState(\"\");\n const { tables, total, loading, error, refetch } = useDataTables(search);\n const { deleteDataTable, loading: deleting } = useDeleteDataTable();\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tableDialogOpen, setTableDialogOpen] = useState(false);\n const [editingTable, setEditingTable] = useState<DataTable | null>(null);\n\n const selectedTable = useMemo(\n () => tables.find((table) => table.id === selectedId) ?? null,\n [selectedId, tables],\n );\n\n useEffect(() => {\n if (tables.length === 0) {\n setSelectedId(null);\n return;\n }\n if (!selectedId || !tables.some((table) => table.id === selectedId)) {\n setSelectedId(tables[0].id);\n }\n }, [selectedId, tables]);\n\n const refresh = useCallback(async () => {\n await refetch();\n }, [refetch]);\n\n const handleDeleteTable = useCallback(async () => {\n if (!selectedTable) return;\n if (\n !window.confirm(\n tr(\n \"fluidgrids.dataTables.confirmDeleteTable\",\n `Delete table \"${selectedTable.name}\" and all of its rows?`,\n ),\n )\n ) {\n return;\n }\n try {\n await deleteDataTable(selectedTable.id);\n toast.success(tr(\"fluidgrids.dataTables.deleted\", \"Data table deleted\"));\n setSelectedId(null);\n await refetch();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\n \"fluidgrids.dataTables.deleteFailed\",\n \"Failed to delete data table\",\n ),\n ),\n );\n }\n }, [deleteDataTable, refetch, selectedTable, tr]);\n\n const handleTableSaved = useCallback(\n (table: DataTable | null) => {\n if (table) setSelectedId(table.id);\n void refetch();\n },\n [refetch],\n );\n\n const submitSearch = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setSearch(searchInput);\n },\n [searchInput],\n );\n\n return (\n <div className=\"min-h-screen bg-background-primary p-4 sm:p-6\">\n <div className=\"mx-auto flex max-w-[1500px] flex-col gap-5\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <div className=\"mb-2 flex items-center gap-2 text-sm text-text-secondary\">\n <Database className=\"size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.workflowData\", \"Workflow data\")}\n </div>\n <h1 className=\"text-2xl font-bold text-text-primary sm:text-3xl\">\n {tr(\"fluidgrids.dataTables.pageTitle\", \"Data Tables\")}\n </h1>\n <p className=\"mt-1 max-w-2xl text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.pageSubtitle\",\n \"Store structured workspace data that your workflows can read and write across runs.\",\n )}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <ArrowLeft className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n <Button\n onClick={() => {\n setEditingTable(null);\n setTableDialogOpen(true);\n }}\n >\n <Plus className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.newTable\", \"New data table\")}\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-5 lg:grid-cols-[minmax(16rem,22rem)_minmax(0,1fr)]\">\n <Card className=\"h-fit border-border-secondary\">\n <CardHeader className=\"gap-3 border-b border-border-secondary p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base\">\n {tr(\"fluidgrids.dataTables.tables\", \"Tables\")}\n </CardTitle>\n <Badge variant=\"outline\">{total}</Badge>\n </div>\n <form className=\"flex gap-2\" onSubmit={submitSearch}>\n <div className=\"relative min-w-0 flex-1\">\n <Search\n className=\"pointer-events-none absolute left-2.5 top-2.5 size-4 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <Input\n className=\"pl-8\"\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n placeholder={tr(\n \"fluidgrids.dataTables.search\",\n \"Search tables\",\n )}\n aria-label={tr(\n \"fluidgrids.dataTables.search\",\n \"Search tables\",\n )}\n />\n </div>\n <Button type=\"submit\" variant=\"outline\" size=\"sm\">\n {tr(\"fluidgrids.dataTables.searchAction\", \"Search\")}\n </Button>\n </form>\n </CardHeader>\n <CardContent className=\"p-2\">\n {loading && (\n <p className=\"p-4 text-sm text-text-secondary\">\n {tr(\"fluidgrids.dataTables.loading\", \"Loading tables…\")}\n </p>\n )}\n {!loading && tables.length === 0 && (\n <div className=\"p-4 text-sm text-text-secondary\">\n <p>\n {tr(\"fluidgrids.dataTables.empty\", \"No data tables yet\")}\n </p>\n <p className=\"mt-1 text-xs\">\n {tr(\n \"fluidgrids.dataTables.emptyHint\",\n \"Create a table to give your workflows a shared data store.\",\n )}\n </p>\n </div>\n )}\n {!loading &&\n tables.map((table) => (\n <button\n type=\"button\"\n key={table.id}\n onClick={() => setSelectedId(table.id)}\n className={`mb-1 flex w-full items-start justify-between gap-3 rounded-md px-3 py-3 text-left transition-colors ${\n selectedId === table.id\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:bg-background-secondary hover:text-text-primary\"\n }`}\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium\">\n {table.name}\n </span>\n <span className=\"mt-1 block text-xs text-text-secondary\">\n {table.rowCount}{\" \"}\n {tr(\"fluidgrids.dataTables.rows\", \"rows\")} ·{\" \"}\n {table.columns.length}{\" \"}\n {tr(\"fluidgrids.dataTables.columns\", \"columns\")}\n </span>\n </span>\n <Table2\n className=\"mt-0.5 size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n </button>\n ))}\n </CardContent>\n </Card>\n\n {error && !selectedTable && (\n <Card className=\"border-border-secondary\">\n <CardContent className=\"p-6 text-sm text-text-secondary\">\n <p>{error.message}</p>\n <Button\n className=\"mt-4\"\n variant=\"outline\"\n onClick={() => void refresh()}\n >\n <RefreshCw className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.retry\", \"Try again\")}\n </Button>\n </CardContent>\n </Card>\n )}\n\n {!error && !selectedTable && !loading && (\n <Card className=\"border-border-secondary\">\n <CardContent className=\"flex min-h-[22rem] flex-col items-center justify-center p-6 text-center\">\n <Database\n className=\"mb-3 size-10 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.dataTables.selectTitle\",\n \"Select a data table\",\n )}\n </h2>\n <p className=\"mt-1 max-w-sm text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.selectDescription\",\n \"Choose a table to view and edit its rows, or create your first table.\",\n )}\n </p>\n </CardContent>\n </Card>\n )}\n\n {selectedTable && (\n <div className=\"min-w-0 space-y-3\">\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setEditingTable(selectedTable);\n setTableDialogOpen(true);\n }}\n >\n <Pencil className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.editTable\", \"Edit table\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDeleteTable}\n disabled={deleting}\n >\n <Trash2 className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {deleting\n ? tr(\"fluidgrids.dataTables.deleting\", \"Deleting…\")\n : tr(\"fluidgrids.dataTables.deleteTable\", \"Delete table\")}\n </Button>\n </div>\n <TableRowsPanel table={selectedTable} onTableChanged={refresh} />\n </div>\n )}\n </div>\n </div>\n\n <TableFormDialog\n open={tableDialogOpen}\n table={editingTable}\n onOpenChange={setTableDialogOpen}\n onSaved={handleTableSaved}\n />\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\n/**\n * The backend's immutable plan for one `executeStep` TEST run. Keeping it with\n * the execution slice lets the node detail view explain which data was reused\n * rather than inferring it after polling starts.\n */\nexport interface StepExecutionPlan {\n runId: string;\n targetNodeId: string;\n sourceRunId: string | null;\n reusedNodeIds: string[];\n pinnedNodeIds: string[];\n executeNodeIds: string[];\n initialNodeIds: string[];\n blockers: string[];\n}\n\n/**\n * Workflow identity captured with the run currently loaded in the builder.\n * Continuation must never reuse logs from a different workflow version.\n */\nexport interface ExecutionRunMetadata {\n runId: string;\n workflowKey: string;\n version: string;\n /** Source runs used for continuation must be TEST runs. */\n sourceMode?: \"TEST\" | \"PRODUCTION\";\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\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 data-[placeholder]:text-text-placeholder focus:border-border-focus focus:outline-none focus:shadow-[var(--shadow-focus)] focus:ring-1 focus:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-status-error-border [&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 text-text-muted\" aria-hidden=\"true\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated text-text-primary shadow-elevation-3 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 );\n}\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n className={cn(\n \"py-1.5 pl-8 pr-2 text-xs font-medium uppercase tracking-wide text-text-muted\",\n className,\n )}\n {...props}\n />\n );\n}\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary data-[state=checked]:bg-[var(--color-accent-soft)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n className={cn(\"-mx-1 my-1 h-px bg-border-subtle\", className)}\n {...props}\n />\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 data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n \"flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] data-[state=open]:bg-[var(--color-accent-soft)]\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-text-muted\" />\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 data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated p-1 text-text-primary shadow-elevation-3 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 data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated p-1 text-text-primary shadow-elevation-3 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 data-slot=\"dropdown-menu-item\"\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary 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-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary 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 size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-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-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"size-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-xs font-medium uppercase tracking-wide text-text-muted\",\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-border-subtle\", 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(\n \"ml-auto text-xs tracking-widest text-text-muted\",\n className,\n )}\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 data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-card border border-border-subtle bg-bg-elevated p-4 text-text-primary shadow-elevation-3 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/embed-params.ts","../src/pages/WorkflowEmbed.tsx","../src/modules/variables/hooks/useVariables.ts","../src/modules/variables/pages/VariablesPage.tsx","../src/modules/tool-approval/hooks/useToolApprovals.ts","../src/modules/tool-approval/pages/ApprovalInboxPage.tsx","../src/modules/data-tables/hooks/useDataTables.ts","../src/modules/data-tables/utils/csv.ts","../src/modules/data-tables/pages/DataTablesPage.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","gql","toast","CardContent","useNavigate","Textarea","error","CardTitle","CardDescription","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","useMemo","config","React","Tabs","TabsList","TabsTrigger","TabsContent","React2","Select","SelectValue","SelectTrigger","SelectContent","SelectItem","Check","React4","Switch","React5","React6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAMA,cAAAA,GAAgB,IAAA;AAAA,EAAK,MACzB,OAAO,6BAAwB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AAC7E,CAAA;AACA,IAAMC,gBAAAA,GAAkB,IAAA;AAAA,EAAK,MAC3B,OAAO,+BAA0B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IAC9C,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AACA,IAAMC,mBAAAA,GAAqB,IAAA;AAAA,EAAK,MAC9B,OAAO,kCAAgD,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IACpE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AACA,IAAMC,oBAAAA,GAAsB,IAAA;AAAA,EAAK,MAC/B,OAAO,mCAAiD,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO;AAAA,IACrE,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAaA,IAAM,UAAA,GAAa,sBACjB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,CAAA,EAC/E,CAAA;AAuCK,SAAS,cAAA,CAAe;AAAA,EAC7B,UAAU,SAAA,GAAY,EAAA;AAAA,EACtB,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,UAAU,SAAA,GAAY,KAAA;AAAA,EACtB,cAAA,EAAgB,eAAA;AAAA,EAChB,iBAAA,EAAmB,kBAAA;AAAA;AAAA;AAAA;AAAA,EAInB,SAAA,GAAY;AACd,CAAA,EAAwB;AACtB,EAAA,uBACE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,aAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,0BAAU,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EAC9B,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAK,IAAA,EAAC,OAAA,kBAAS,GAAA,CAAC,YAAS,EAAA,EAAG,MAAA,EAAO,OAAA,EAAO,IAAA,EAAC,CAAA,EAAI,CAAA;AAAA,wBACtD,GAAA,CAAC,SAAM,IAAA,EAAK,MAAA,EAAO,yBAAS,GAAA,CAACH,cAAAA,EAAA,EAAc,CAAA,EAAI,CAAA;AAAA,wBAC/C,GAAA,CAAC,SAAM,IAAA,EAAK,KAAA,EAAM,yBAAS,GAAA,CAACC,gBAAAA,EAAA,EAAgB,CAAA,EAAI,CAAA;AAAA,wBAChD,GAAA,CAAC,SAAM,IAAA,EAAK,cAAA,EAAe,yBAAS,GAAA,CAACA,gBAAAA,EAAA,EAAgB,CAAA,EAAI,CAAA;AAAA,wBACzD,GAAA,CAAC,SAAM,IAAA,EAAK,uBAAA,EAAwB,yBAAS,GAAA,CAACA,gBAAAA,EAAA,EAAgB,CAAA,EAAI,CAAA;AAAA,wBAClE,GAAA,CAAC,SAAM,IAAA,EAAK,MAAA,EAAO,yBAAS,GAAA,CAACC,mBAAAA,EAAA,EAAmB,CAAA,EAAI,CAAA;AAAA,wBACpD,GAAA,CAAC,SAAM,IAAA,EAAK,aAAA,EAAc,yBAAS,GAAA,CAACC,oBAAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,wBAG5D,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,MAAA,EAAO,OAAA,EAAO,IAAA,EAAC,CAAA,EAAI;AAAA,OAAA,EAC3D,GACF,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;ACtGO,SAAS,iBAAiB,MAAA,EAA6B;AAC5D,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAM,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,IAAK,IAAA;AAAA,IACtC,KAAA,EAAO,cAAA,CAAe,MAAA,CAAO,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,IACzC,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,KAAM;AAAA,GACjC;AACF;AAEA,SAAS,eAAe,KAAA,EAA+C;AACrE,EAAA,OAAO,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,MAAA,GAAS,KAAA,GAAQ,IAAA;AACzD;ACyBO,SAAS,iBAAA,CAAkB;AAAA,EAChC;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,KAAA,EAAO,WAAA;AAAA,IACP;AAAA,GACF,GAAI,QAAQ,MAAM,gBAAA,CAAiB,OAAO,QAAA,CAAS,MAAM,CAAA,EAAG,EAAE,CAAA;AAE9D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAiC,IAAI,CAAA;AAGrE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,CAAC,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAI,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAC,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AAKtD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,IAAA,CAAK,YAAA,CAAa,cAAc,WAAW,CAAA;AAC3C,MAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,WAAA,KAAgB,MAAM,CAAA;AAAA,IACtD,CAAA;AACA,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM;AAC1C,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,YAAY,CAAA,KAAM,WAAA;AACzD,MAAA,MAAM,eACJ,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,MAAM,OAAO,WAAA,KAAgB,MAAA,CAAA;AACvD,MAAA,IAAI,YAAA,IAAgB,cAAc,KAAA,EAAM;AAAA,IAC1C,CAAC,CAAA;AACD,IAAA,QAAA,CAAS,QAAQ,IAAA,EAAM;AAAA,MACrB,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,YAAA,EAAc,OAAO;AAAA,KACxC,CAAA;AACD,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAwB;AACvC,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAUnB,MAAA,IAAI,IAAA,EAAM,SAAS,+BAAA,EAAiC;AACpD,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA,GAC5C,IAAA,CAAK,QAAA,CAAS,KAAA,GACd,EAAC;AACL,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,QAAA,YAAA,CAAa;AAAA,UACX,IAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,WAAA;AAAA,QACE,oBAAA,CAAqB;AAAA,UACnB,EAAA,EAAI,UAAA;AAAA,UACJ,IAAA,EAAM,IAAA,CAAK,QAAA,EAAU,IAAA,IAAQ,UAAA;AAAA,UAC7B,KAAA;AAAA,UACA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA,GACtC,IAAA,CAAK,QAAA,CAAS,KAAA,GACd;AAAC,SACN;AAAA,OACH;AACA,MAAA,WAAA,CAAY,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACxB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,YAAA,CAAa;AAAA,QACX,IAAA,EAAM,yBAAA;AAAA,QACN,WAAW,KAAA,CAAM;AAAA,OAClB,CAAA;AAAA,IACH,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC1C,IAAA,YAAA,CAAa,EAAE,IAAA,EAAM,wBAAA,EAA0B,CAAA;AAC/C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,MAAM,OAAO,YAAY;AACvB,MAAA,IAAI;AACF,QAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,UAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,QACjE;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,gBAAA,EAAkB;AAAA,UACxC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,KAAA,EAAO,CAAA;AAAA;AAAA,aAAA,CAAA;AAAA,YAGP,SAAA,EAAW,EAAE,EAAA,EAAI,SAAA;AAAU,WAC5B;AAAA,SACF,CAAA;AACD,QAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAY7B,QAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,UAAA,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,EAAG,WAAW,yBAAyB,CAAA;AAAA,QACtE;AACA,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAM,OAAA;AAC3B,QAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,qBAAqB,CAAA;AACnD,QAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AAC/C,UAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,QACzD;AACA,QAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA;AAClD,QAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACnE,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,WAAA;AAAA,UACE,oBAAA,CAAqB;AAAA,YACnB,IAAI,OAAA,CAAQ,EAAA;AAAA,YACZ,IAAA,EAAM,QAAQ,IAAA,IAAQ,UAAA;AAAA,YACtB,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAO,KAAA,CAAM;AAAA,WACd;AAAA,SACH;AACA,QAAA,WAAA,CAAY,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACxB,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,YAAA,CAAa;AAAA,UACX,IAAA,EAAM,yBAAA;AAAA,UACN,SAAA,EAAW,MAAM,KAAA,CAAM;AAAA,SACxB,CAAA;AAAA,MACH,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,MAAM,OAAA,GACJ,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,0BAAA;AACnC,QAAA,QAAA,CAAS,OAAO,CAAA;AAChB,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,YAAA,CAAa,EAAE,IAAA,EAAM,wBAAA,EAA0B,OAAA,EAAS,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA;AACA,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAEhC,EAAA,MAAM,YAAA,GAAe,SAAA,GACjB,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA,GAC9E,IAAA;AAEJ,EAAA,uBACEC,GAAAA,CAAC,aAAA,EAAA,EACC,0BAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0DAAA,EAIb,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,sBACRA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,0BAAA;AAAA,YACL,IAAA,EAAK;AAAA;AAAA,SACP;AAAA,QAGD,oCACCA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,0BAAA;AAAA,YACL,IAAA,EAAK;AAAA;AAAA,YAEL,KAAA,mBACFA,IAAC,YAAA,EAAA,EAAa,IAAA,EAAK,4BAA2B,IAAA,EAAM,KAAA,EAAO,IACzD,QAAA,mBACFA,IAAC,eAAA,EAAA,EAA+B,QAAA,EAAoB,UAAQ,IAAA,EAAA,EAAtC,QAAuC,oBAE7DA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,qBAAA;AAAA,YACL,IAAA,EAAK;AAAA;AAAA;AACP;AAAA,KAEJ;AAAA,IAGC,OAAA,IAAW,YAAA,IAAgB,QAAA,mBAC1BC,IAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,YAAA;AAAA,QACN,MAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAI,qBAAA;AAAA,QACJ,SAAA,EAAU,kLAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,UAAA,EAAW,WAAU,UAAA,EAAW,CAAA;AAAA,UAAE;AAAA;AAAA;AAAA,KAE/C,GACE;AAAA,GAAA,EACN,CAAA,EACF,CAAA;AAEJ;AAIA,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,EAAK,EAAmC;AACpE,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAY,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,oBAC3DA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACnDA,IAAC,cAAA,EAAA,EAAe;AAAA,GAAA,EAClB,CAAA;AAEJ;AAEA,SAAS,qBAAqB,KAAA,EAKV;AAClB,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,aAAa,KAAA,CAAM,EAAA;AAAA,IACnB,OAAA,EAAS,OAAA;AAAA,IACT,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,QAAQ,EAAE,cAAA,EAAgB,EAAE,YAAA,EAAc,MAAK;AAAE;AACnD,GACF;AACF;AAEA,SAAS,aAAa,OAAA,EAAwC;AAC5D,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAQ;AAG9B,EAAA,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,OAAA,EAAS,GAAG,CAAA;AACxC;AC/MA,IAAM,eAAA,GAAkB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmBxB,IAAM,sBAAA,GAAyB,GAAA;AAAA,EAAA,EAC3B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWnB,IAAM,wBAAA,GAA2B,GAAA;AAAA,EAAA,EAC7B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYnB,IAAM,wBAAA,GAA2B,GAAA;AAAA,EAAA,EAC7B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAenB,IAAM,wBAAA,GAA2B,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AASjC,IAAM,8BAAA,GAAiC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAUvC,IAAM,4BAAA,GAA+B,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAsBrC,IAAM,4BAAA,GAA+B,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmBrC,IAAM,gCAAA,GAAmC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAalC,SAAS,aAAa,MAAA,EAG1B;AACD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIE,QAAAA,CAA6B,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,QAAQ,MAAA,EAAQ,KAAA;AACtB,EAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAE1B,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAEzB;AAAA,QACD,KAAA,EAAO,sBAAA;AAAA,QACP,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,QAC9B,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,iBAAA,EAAmB,SAAA,IAAa,EAAE,CAAA;AAC5D,MAAA,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,iBAAA,EAAmB,KAAA,IAAS,CAAC,CAAA;AAAA,IACrD,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAErB,EAAAC,UAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAU;AAChE;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,OAAO,KAAA,KAAuC;AAC5C,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,MAAA,CAAO,MAAA,CAMV,EAAE,QAAA,EAAU,0BAA0B,SAAA,EAAW,EAAE,KAAA,EAAM,EAAG;AAAA,SACjE;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,sBAAA;AAC9B,QAAA,IAAI,CAAC,QAAA,EAAU,OAAA;AACb,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,2BAA2B,CAAA;AAClE,QAAA,OAAO,QAAA,CAAS,QAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAY,CAAA;AACrB,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAM;AAC1C;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,OAAO,IAAY,KAAA,KAAuC;AACxD,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,MAAA,CAAO,MAAA,CAMV,EAAE,QAAA,EAAU,wBAAA,EAA0B,SAAA,EAAW,EAAE,EAAA,EAAI,KAAA,EAAM,EAAG;AAAA,SACrE;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,sBAAA;AAC9B,QAAA,IAAI,CAAC,QAAA,EAAU,OAAA;AACb,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,2BAA2B,CAAA;AAClE,QAAA,OAAO,QAAA,CAAS,QAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAY,CAAA;AACrB,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAM;AAC1C;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,OAAO,EAAA,KAAe;AACvD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,OAAO,MAAA,CAEV;AAAA,UACD,QAAA,EAAU,wBAAA;AAAA,UACV,SAAA,EAAW,EAAE,EAAA;AAAG,SACjB;AAAA,OACH;AACA,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,sBAAA;AAC9B,MAAA,IAAI,CAAC,QAAA,EAAU,OAAA;AACb,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,2BAA2B,CAAA;AAClE,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAM;AAC1C;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAO,EAAA,KAAe;AACpD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,MAAA,CAAO,MAAA,CAMV,EAAE,QAAA,EAAU,gCAAgC,SAAA,EAAW,EAAE,EAAA,EAAG,EAAG;AAAA,OACpE;AACA,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,2BAAA;AAC9B,MAAA,IAAI,CAAC,QAAA,EAAU,OAAA;AACb,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,wBAAwB,CAAA;AAC/D,MAAA,OAAO,SAAS,KAAA,IAAS,EAAA;AAAA,IAC3B,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AACvC;AAMO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA,CAAkC,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAEzB;AAAA,QACD,KAAA,EAAO,4BAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,sBAAA,IAA0B,EAAE,CAAA;AAAA,IACtD,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,UAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAU;AACvD;AAEO,SAAS,4BAAA,GAA+B;AAC7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,OAAO,KAAA,KAA0C;AAC/C,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,MAAA,CAAO,MAAA,CAMV,EAAE,QAAA,EAAU,8BAA8B,SAAA,EAAW,EAAE,KAAA,EAAM,EAAG;AAAA,SACrE;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,yBAAA;AAC9B,QAAA,IAAI,CAAC,QAAA,EAAU,OAAA;AACb,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,UAAU,OAAA,IAAW;AAAA,WACvB;AACF,QAAA,OAAO,QAAA,CAAS,MAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAY,CAAA;AACrB,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAM;AACtC;AAEO,SAAS,gCAAA,GAAmC;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,OAAO,QAAA,KAAiC;AACzE,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,OAAO,MAAA,CAEV;AAAA,UACD,QAAA,EAAU,gCAAA;AAAA,UACV,SAAA,EAAW,EAAE,QAAA;AAAS,SACvB;AAAA,OACH;AACA,MAAA,OACE,MAAA,CAAO,MAAM,6BAAA,IAAiC;AAAA,QAC5C,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,IAEJ,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAM;AAC1C;AClcA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAS,EAAmC;AACvE,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAQ,GAAI,sBAAA,EAAuB;AACxD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE5D,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,gBAAA,KAAqB,MAAA;AAEpE,EAAA,MAAM,YAAA,GAAeE,YAAY,YAAY;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA;AAC3C,MAAA,WAAA,CAAY,KAAK,CAAA;AAEjB,MAAA,UAAA,CAAW,MAAM,WAAA,CAAY,IAAI,CAAA,EAAG,IAAK,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ,eAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA,CAAG,qCAAqC,wBAAwB;AAAA,OACtE;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,QAAA,CAAS,EAAA,EAAI,EAAE,CAAC,CAAA;AAEjC,EAAA,IAAI,QAAA,CAAS,gBAAA,KAAqB,MAAA,IAAU,QAAA,KAAa,IAAA,EAAM;AAC7D,IAAA,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACK,OAAA,EAAM,OAAA,EAAQ,WAAU,SAAA,EAAU,mBAAA,EAChC,mBAAS,gBAAA,EACZ,CAAA;AAAA,MACC,QAAA,CAAS,+BACRL,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oDAAA;AAAA,UACV,OAAO,QAAA,CAAS,WAAA;AAAA,UAEf,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,OACZ;AAAA,sBAEFA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,YAAA;AAAA,UACT,QAAA,EAAU,OAAA;AAAA,UACV,SAAA,EAAU,+DAAA;AAAA,UAET,QAAA,EAAA,EAAA,CAAG,+BAA+B,QAAQ;AAAA;AAAA;AAC7C,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBACEA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EAA6B,QAAA,EAAA,QAAA,CAAS,SAAS,EAAA,EAAG,CAAA;AAAA,EAEtE;AAEA,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAuC,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,sBAChEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,UAC/B,SAAA,EAAU,wEAAA;AAAA,UAET,QAAA,EAAA,EAAA,CAAG,6BAA6B,MAAM;AAAA;AAAA;AACzC,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA,kDAAA,EAElE,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,SAAA,EAAU,+DAAA;AAAA,QAET,oBACG,EAAA,CAAG,gCAAA,EAAkC,iBAAY,CAAA,GACjD,EAAA,CAAG,+BAA+B,QAAQ;AAAA;AAAA;AAChD,GAAA,EACF,CAAA;AAEJ;AAaA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,cAAA,EAAgB,OAAA,EAAS,QAAA,KAAa,iBAAA,EAAkB;AAChE,EAAA,MAAM,EAAE,cAAA,EAAgB,OAAA,EAAS,QAAA,KAAa,iBAAA,EAAkB;AAChE,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,QAAA;AAEjB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,IAAIE,QAAAA,CAAS,QAAA,EAAU,OAAO,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,QAAAA,CAAS,QAAA,EAAU,eAAe,EAAE,CAAA;AAC1E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIA,QAAAA,CAAS,QAAA,EAAU,YAAY,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA;AAAA,IACxB,UAAU,KAAA,IAAS;AAAA,GACrB;AAEA,EAAA,MAAM,SAAA,GAAYE,YAAY,MAAM;AAClC,IAAA,MAAA,CAAO,QAAA,EAAU,OAAO,EAAE,CAAA;AAC1B,IAAA,cAAA,CAAe,QAAA,EAAU,eAAe,EAAE,CAAA;AAC1C,IAAA,WAAA,CAAY,QAAA,EAAU,YAAY,KAAK,CAAA;AACvC,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,QAAA,CAAS,QAAA,EAAU,SAAS,WAAW,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,YAAA,GAAeA,YAAY,YAAY;AAC3C,IAAA,IAAI;AACF,MAAA,IAAI,UAAU,QAAA,EAAU;AACtB,QAAA,MAAM,cAAA,CAAe,SAAS,EAAA,EAAI;AAAA,UAChC,aAAa,WAAA,IAAe,KAAA,CAAA;AAAA,UAC5B,QAAA;AAAA,UACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,SAC1B,CAAA;AACD,QAAA,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,8BAAA,EAAgC,kBAAkB,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AACL,QAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAK,EAAG;AACf,UAAA,KAAA,CAAM,KAAA;AAAA,YACJ,EAAA,CAAG,oCAAoC,iBAAiB;AAAA,WAC1D;AACA,UAAA;AAAA,QACF;AACA,QAAA,MAAM,cAAA,CAAe;AAAA,UACnB,GAAA,EAAK,IAAI,IAAA,EAAK;AAAA,UACd,aAAa,WAAA,IAAe,KAAA,CAAA;AAAA,UAC5B,QAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,8BAAA,EAAgC,kBAAkB,CAAC,CAAA;AAAA,MACtE;AACA,MAAA,OAAA,EAAQ;AACR,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ,eAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA,CAAG,mCAAmC,yBAAyB;AAAA,OACrE;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACEJ,GAAAA;AAAA,IAACM,MAAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,MAAM,SAAA,EAAU;AACpB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA;AAAA,MAEA,QAAA,kBAAAL,IAAAA,CAACM,aAAAA,EAAA,EAAc,WAAU,UAAA,EACvB,QAAA,EAAA;AAAA,wBAAAP,IAACQ,YAAAA,EAAA,EACC,QAAA,kBAAAR,GAAAA,CAACS,aAAA,EACE,QAAA,EAAA,MAAA,GACG,EAAA,CAAG,gCAAA,EAAkC,eAAe,CAAA,GACpD,EAAA,CAAG,kCAAA,EAAoC,cAAc,GAC3D,CAAA,EACF,CAAA;AAAA,wBAEAR,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,gBACZ,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,KAAK,CAAA,EAC5C,CAAA;AAAA,4BACAV,GAAAA;AAAA,cAACW,KAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,cAAA;AAAA,gBACH,KAAA,EAAO,GAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACtC,QAAA,EAAU,MAAA;AAAA,gBACV,WAAA,EAAY;AAAA;AAAA,aACd;AAAA,4BACAX,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,cACC,8BAAA;AAAA,cACA;AAAA,aACF,EACF;AAAA,WAAA,EACF,CAAA;AAAA,UAEC,CAAC,MAAA,oBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,kBACZ,QAAA,EAAA,EAAA,CAAG,iCAAA,EAAmC,OAAO,CAAA,EAChD,CAAA;AAAA,4BACAT,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,KAAA;AAAA,gBACP,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,CAA4B,CAAA;AAAA,gBAE3D,QAAA,EAAA;AAAA,kCAAAD,IAAC,aAAA,EAAA,EAAc,EAAA,EAAG,kBAChB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAC,KAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAD,IAAC,UAAA,EAAA,EAAW,KAAA,EAAM,aACf,QAAA,EAAA,EAAA,CAAG,qCAAA,EAAuC,WAAW,CAAA,EACxD,CAAA;AAAA,oCACAA,IAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WACf,QAAA,EAAA,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA,EACpD;AAAA,mBAAA,EACF;AAAA;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BAGFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,wBACZ,QAAA,EAAA,EAAA,CAAG,uCAAA,EAAyC,aAAa,CAAA,EAC5D,CAAA;AAAA,4BACAV,GAAAA;AAAA,cAACW,KAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,sBAAA;AAAA,gBACH,KAAA,EAAO,WAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBAC9C,WAAA,EAAa,EAAA;AAAA,kBACX,6CAAA;AAAA,kBACA;AAAA;AACF;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BAEAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,mBACZ,QAAA,EAAA,EAAA,CAAG,kCAAA,EAAoC,cAAc,CAAA,EACxD,CAAA;AAAA,8BACAV,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,gBACC,iCAAA;AAAA,gBACA;AAAA,eACF,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,OAAA,EAAS,QAAA;AAAA,gBACT,eAAA,EAAiB;AAAA;AAAA;AACnB,WAAA,EACF,CAAA;AAAA,0BAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,kBACZ,QAAA,EAAA,EAAA,CAAG,iCAAA,EAAmC,OAAO,CAAA,EAChD,CAAA;AAAA,4BACAV,GAAAA;AAAA,cAACW,KAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,gBAAA;AAAA,gBACH,IAAA,EAAM,WAAW,UAAA,GAAa,MAAA;AAAA,gBAC9B,KAAA;AAAA,gBACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACxC,aACE,MAAA,GACI,EAAA;AAAA,kBACE,sCAAA;AAAA,kBACA;AAAA,iBACF,GACA;AAAA;AAAA;AAER,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAV,IAAAA,CAACW,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EACxD,QAAA,EAAA,EAAA,CAAG,6BAAA,EAA+B,QAAQ,CAAA,EAC7C,CAAA;AAAA,0BACAb,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,UAAU,QAAA,IAAY,QAAA,EAClD,QAAA,EAAA,QAAA,IAAY,QAAA,GACT,GAAG,6BAAA,EAA+B,cAAS,IAC3C,EAAA,CAAG,2BAAA,EAA6B,MAAM,CAAA,EAC5C;AAAA,SAAA,EACF;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAMA,SAAS,YAAA,GAAe;AACtB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,OAAA,KAAY,YAAA,EAAa;AACrD,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,iBAAA,EAAkB;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIX,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAkC,IAAI,CAAA;AAEpE,EAAA,MAAM,YAAA,GAAeE,YAAY,MAAM;AACrC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA,CAAY,CAAC,QAAA,KAA+B;AAC7D,IAAA,UAAA,CAAW,QAAQ,CAAA;AACnB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,OAAO,QAAA,KAA+B;AACpC,MAAA,IACE,CAAC,MAAA,CAAO,OAAA;AAAA,QACN,EAAA;AAAA,UACE,oCAAA;AAAA,UACA,CAAA,iBAAA,EAAoB,SAAS,GAAG,CAAA,EAAA;AAAA;AAClC,OACF;AAEA,QAAA;AACF,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,CAAe,SAAS,EAAE,CAAA;AAChC,QAAA,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,8BAAA,EAAgC,kBAAkB,CAAC,CAAA;AACpE,QAAA,OAAA,EAAQ;AAAA,MACV,SAAS,GAAA,EAAK;AACZ,QAAA,KAAA,CAAM,KAAA;AAAA,UACJ,GAAA,YAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA;AAAA,YACE,mCAAA;AAAA,YACA;AAAA;AACF,SACN;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,OAAA,EAAS,EAAE;AAAA,GAC9B;AAEA,EAAA,uBACEH,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,qCAAA;AAAA,QACA;AAAA,OACF,EACF,CAAA;AAAA,sBACAC,IAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAK,IAAA,EAClC,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,YAAW,SAAA,EAAU,QAAA,EAAS,OAAO,EAAA,EAAI,CAAA;AAAA,QACnD,EAAA,CAAG,oCAAoC,cAAc;AAAA,OAAA,EACxD;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAd,IAACe,IAAAA,EAAA,EAAK,WAAU,wDAAA,EACd,QAAA,kBAAAd,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAC,IAAAA,CAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,EAAA,CAAG,6BAAA,EAA+B,KAAK,CAAA,EAAE,CAAA;AAAA,wBACrDA,GAAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,OAAO,CAAA,EAC9C,CAAA;AAAA,wBACAA,GAAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,OAAO,CAAA,EAC9C,CAAA;AAAA,wBACAA,IAAC,SAAA,EAAA,EAAU,SAAA,EAAU,cAClB,QAAA,EAAA,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA,EAClD;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,sBACAC,KAAC,SAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,OAAA,oBACCD,GAAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,CAAA;AAAA,YACT,SAAA,EAAU,sCAAA;AAAA,YAET,QAAA,EAAA,EAAA,CAAG,gCAAgC,eAAU;AAAA;AAAA,SAChD,EACF,CAAA;AAAA,QAED,CAAC,WAAW,SAAA,CAAU,MAAA,KAAW,qBAChCA,GAAAA,CAAC,YACC,QAAA,kBAAAA,GAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,CAAA;AAAA,YACT,SAAA,EAAU,sCAAA;AAAA,YAET,QAAA,EAAA,EAAA,CAAG,8BAA8B,kBAAkB;AAAA;AAAA,SACtD,EACF,CAAA;AAAA,QAED,UAAU,GAAA,CAAI,CAAC,QAAA,qBACdC,KAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,KAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACb,mBAAS,GAAA,EACZ,CAAA;AAAA,cACC,QAAA,CAAS,QAAA,oBACRA,GAAAA,CAACK,KAAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,aAAA,EAChC,QAAA,EAAA,EAAA,CAAG,kCAAA,EAAoC,QAAQ,CAAA,EAClD;AAAA,aAAA,EAEJ,CAAA;AAAA,YACC,QAAA,CAAS,+BACRL,GAAAA,CAAC,OAAE,SAAA,EAAU,oCAAA,EACV,mBAAS,WAAA,EACZ;AAAA,WAAA,EAEJ,CAAA;AAAA,0BACAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,6BAAA,EAClB,mBAAS,KAAA,EACZ,CAAA;AAAA,0BACAA,GAAAA,CAAC,SAAA,EAAA,EACC,0BAAAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,UAAoB,CAAA,EACzC,CAAA;AAAA,0BACAA,IAAC,SAAA,EAAA,EAAU,SAAA,EAAU,cACnB,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,MAAM,UAAA,CAAW,QAAQ,CAAA;AAAA,gBAClC,SAAA,EAAU,wFAAA;AAAA,gBACV,KAAA,EAAO,EAAA,CAAG,2BAAA,EAA6B,MAAM,CAAA;AAAA,gBAE7C,0BAAAA,GAAAA,CAACc,IAAAA,EAAA,EAAK,IAAA,EAAK,oBAAA,EAAqB,OAAO,EAAA,EAAI;AAAA;AAAA,aAC7C;AAAA,4BACAd,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,MAAM,YAAA,CAAa,QAAQ,CAAA;AAAA,gBACpC,SAAA,EAAU,mFAAA;AAAA,gBACV,KAAA,EAAO,EAAA,CAAG,6BAAA,EAA+B,QAAQ,CAAA;AAAA,gBAEjD,0BAAAA,GAAAA,CAACc,IAAAA,EAAA,EAAK,IAAA,EAAK,uBAAA,EAAwB,OAAO,EAAA,EAAI;AAAA;AAAA;AAChD,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EAAA,EAzCa,QAAA,CAAS,EA0CxB,CACD;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAEAd,GAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,UAAA;AAAA,QACN,YAAA,EAAc,aAAA;AAAA,QACd,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS;AAAA;AAAA;AACX,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,oBAAA,GAAuB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,OAAA,KAAY,yBAAA,EAA0B;AAChE,EAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAS,MAAA,KAAW,4BAAA,EAA6B;AACrE,EAAA,MAAM,EAAE,cAAA,EAAgB,OAAA,EAAS,OAAA,KAC/B,gCAAA,EAAiC;AAEnC,EAAA,MAAM,YAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,qBAAqB,CAAA;AAC1E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIE,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,YAAY,CAAA;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAGtB,IAAI,CAAA;AAKd,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC5E,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,EAAA,KAAO,gBAAA,EAAkB;AACrD,IAAA,SAAA,CAAU,SAAA,CAAU,2BAA2B,EAAE,CAAA;AACjD,IAAA,SAAA,CAAU,SAAA,CAAU,aAAa,YAAY,CAAA;AAC7C,IAAA,UAAA,CAAW,UAAU,SAAS,CAAA;AAC9B,IAAA,WAAA;AAAA,MACE,UAAU,cAAA,GACN;AAAA,QACE,OAAA,EAAS,UAAU,cAAA,KAAmB,SAAA;AAAA,QACtC,OAAA,EAAS,UAAU,eAAA,IAAmB;AAAA,OACxC,GACA;AAAA,KACN;AACA,IAAA,mBAAA,CAAoB,UAAU,EAAE,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAEhC,EAAA,MAAM,UAAA,GAAaC,YAAY,YAAY;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,CAAW;AAAA,QACf,QAAA,EAAU,qBAAA;AAAA,QACV,yBAAyB,MAAA,IAAU,KAAA,CAAA;AAAA,QACnC,WAAW,MAAA,IAAU,KAAA,CAAA;AAAA,QACrB,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,KAAA,CAAM,OAAA;AAAA,QACJ,EAAA;AAAA,UACE,oCAAA;AAAA,UACA;AAAA;AACF,OACF;AACA,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ,eAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA,CAAG,2CAA2C,gBAAgB;AAAA,OACpE;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,MAAA,EAAQ,QAAQ,OAAA,EAAS,OAAA,EAAS,EAAE,CAAC,CAAA;AAErD,EAAA,MAAM,UAAA,GAAaA,YAAY,YAAY;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,cAAA;AAAA,QACnB;AAAA,OACF;AACA,MAAA,WAAA,CAAY,MAAM,CAAA;AAClB,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,KAAA,CAAM,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ,eAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA,CAAG,mCAAmC,wBAAwB;AAAA,OACpE;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,EAAE,CAAC,CAAA;AAEvB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BACV,QAAA,EAAA,EAAA,CAAG,8BAAA,EAAgC,eAAU,CAAA,EAChD,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAACe,IAAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EACd,0BAAAd,IAAAA,CAACe,UAAAA,EAAA,EAAW,SAAA,EAAU,gBAAA,EACpB,QAAA,EAAA;AAAA,sBAAAf,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,WAAU,KAAA,EAAO,EAAA,EAAI,WAAU,qBAAA,EAAsB,CAAA;AAAA,wBAChEd,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,EAAA;AAAA,UACC,uCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,6CAAA;AAAA,QACA;AAAA,OACF,EACF,CAAA;AAAA,sBAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EACZ,QAAA,EAAA,EAAA;AAAA,UACC,qCAAA;AAAA,UACA;AAAA,SACF,EACF,CAAA;AAAA,wBACAV,GAAAA;AAAA,UAACW,KAAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,YAAA;AAAA,YACH,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACzC,WAAA,EAAY;AAAA;AAAA;AACd,OAAA,EACF,CAAA;AAAA,sBAEAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,cACZ,QAAA,EAAA,EAAA,CAAG,qCAAA,EAAuC,QAAQ,CAAA,EACrD,CAAA;AAAA,wBACAV,GAAAA;AAAA,UAACW,KAAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,YAAA;AAAA,YACH,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA;AAC3C,OAAA,EACF,CAAA;AAAA,sBAEAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,eACZ,QAAA,EAAA,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA,EACvD,CAAA;AAAA,wBACAV,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,aAAA;AAAA,YACH,OAAA,EAAS,OAAA;AAAA,YACT,eAAA,EAAiB;AAAA;AAAA;AACnB,OAAA,EACF,CAAA;AAAA,MAEC,4BACCA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAA,oCAAA,EACT,QAAA,CAAS,OAAA,GACL,6DACA,8CACN,CAAA,CAAA;AAAA,UAEC,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,OACZ;AAAA,sBAGFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,IAACa,MAAAA,EAAA,EAAO,OAAA,EAAS,UAAA,EAAY,UAAU,MAAA,EAAQ,IAAA,EAAK,IAAA,EACjD,QAAA,EAAA,MAAA,GACG,GAAG,6BAAA,EAA+B,cAAS,IAC3C,EAAA,CAAG,2BAAA,EAA6B,MAAM,CAAA,EAC5C,CAAA;AAAA,wBACAb,GAAAA;AAAA,UAACa,MAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,OAAA;AAAA,YACV,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YAEJ,oBACG,EAAA,CAAG,8BAAA,EAAgC,eAAU,CAAA,GAC7C,EAAA,CAAG,uCAAuC,iBAAiB;AAAA;AAAA;AACjE,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAEAb,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,MACC,yCAAA;AAAA,MACA;AAAA,KACF,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAMO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIE,SAAS,WAAW,CAAA;AAEtD,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oDACX,QAAA,EAAA,EAAA,CAAG,gCAAA,EAAkC,WAAW,CAAA,EACnD,CAAA;AAAA,wBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EACV,QAAA,EAAA,EAAA;AAAA,UACC,mCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAC,IAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,kBAAiB,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,QACvD,EAAA,CAAG,wCAAwC,mBAAmB;AAAA,OAAA,EACjE;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAb,KAAC,IAAA,EAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,YAAA,EAAc,WAAU,QAAA,EAC7D,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,6DAAA,EAClB,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EAAY,WAAU,SAAA,EACvC,QAAA,EAAA;AAAA,0BAAAD,IAACc,IAAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAe,OAAO,EAAA,EAAI,CAAA;AAAA,UACpC,EAAA,CAAG,qCAAqC,WAAW;AAAA,SAAA,EACtD,CAAA;AAAA,wBACAb,IAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EAAY,WAAU,SAAA,EACvC,QAAA,EAAA;AAAA,0BAAAD,IAACc,IAAAA,EAAA,EAAK,IAAA,EAAK,uBAAA,EAAwB,OAAO,EAAA,EAAI,CAAA;AAAA,UAC7C,EAAA,CAAG,qCAAqC,oBAAoB;AAAA,SAAA,EAC/D;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAd,IAAC,WAAA,EAAA,EAAY,KAAA,EAAM,aACjB,QAAA,kBAAAA,GAAAA,CAAC,gBAAa,CAAA,EAChB,CAAA;AAAA,sBACAA,IAAC,WAAA,EAAA,EAAY,KAAA,EAAM,aACjB,QAAA,kBAAAA,GAAAA,CAAC,wBAAqB,CAAA,EACxB;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC9rBA,IAAM,oBAAA,GAAuBiB,GAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA0B7B,IAAM,0BAAA,GAA6BA,GAAAA;AAAA,EAAA,EAC/B,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWxB,IAAM,oBAAA,GAAuBA,GAAAA;AAAA,EAAA,EACzB,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA0BjB,SAAS,wBAAwB,OAAA,EAIrC;AACD,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,EAAA;AAChC,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,CAAA;AAClC,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,IAAA;AAElD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIf,QAAAA,CAAgC,EAAE,CAAA;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAYE,YAAY,YAAY;AACxC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAKzB;AAAA,QACD,KAAA,EAAO,0BAAA;AAAA,QACP,SAAA,EAAW,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,QAC3B,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,oBAAA,EAAsB,KAAA,IAAS,EAAE,CAAA;AACvD,MAAA,aAAA,CAAc,MAAA,CAAO,IAAA,EAAM,oBAAA,EAAsB,UAAA,IAAc,CAAC,CAAA;AAAA,IAClE,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAAD,UAAU,MAAM;AACd,IAAA,SAAA,EAAU;AACV,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACzB,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,SAAA,EAAW,cAAc,CAAA;AACtD,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AAE9B,EAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAU;AACjE;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,MAAA,GAASE,WAAAA;AAAA,IACb,OAAO,IAAY,SAAA,KAA2C;AAC5D,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,OAAO,MAAA,CAOV;AAAA,YACD,QAAA,EAAU,oBAAA;AAAA,YACV,SAAA,EAAW,EAAE,EAAA,EAAI,SAAA;AAAU,WAC5B;AAAA,SACH;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,kBAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,KAAA,IAAS,+BAA+B,CAAA;AAAA,QACpE;AACA,QAAA,OAAO,QAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,GAAY,CAAA;AACrB,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OACE,OAAA,EACA,QAAA,EACA,MAAA,KACG;AACH,MAAA,OAAO,MAAA;AAAA,QACL,OAAA,CAAQ,EAAA;AAAA,QACR,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAC/B,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAA;AAAA,UACA;AAAA,SACF,CAAE;AAAA,OACJ;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM;AAC7C;ACpMA,SAAS,WAAW,QAAA,EAA0B;AAC5C,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA,CAAK,MAAM,QAAQ,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAEA,SAAS,OAAA,CAAQ,KAAa,EAAA,EAAwB;AACpD,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,EAAE,OAAA,EAAQ;AACnC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAK,CAAA;AACzC,EAAA,IAAI,OAAA,GAAU,CAAA,EAAG,OAAO,EAAA,CAAG,mCAAmC,UAAU,CAAA;AACxE,EAAA,IAAI,OAAA,GAAU,EAAA;AACZ,IAAA,OAAO,EAAA,CAAG,sCAAsC,kBAAA,EAAoB;AAAA,MAClE;AAAA,KACD,CAAA;AACH,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,IAAI,KAAA,GAAQ,EAAA;AACV,IAAA,OAAO,EAAA,CAAG,kCAAA,EAAoC,gBAAA,EAAkB,EAAE,OAAO,CAAA;AAC3E,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA;AAClC,EAAA,OAAO,EAAA,CAAG,iCAAA,EAAmC,eAAA,EAAiB,EAAE,MAAM,CAAA;AACxE;AAaA,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,SAAS,EAAE,CAAA;AAEvC,EAAA,uBACEF,IAACM,MAAAA,EAAA,EAAO,MAAY,YAAA,EAClB,QAAA,kBAAAL,IAAAA,CAACM,aAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAP,IAACQ,YAAAA,EAAA,EACC,QAAA,kBAAAR,GAAAA,CAACS,aAAA,EACE,QAAA,EAAA,EAAA;AAAA,MACC,2CAAA;AAAA,MACA;AAAA,OAEJ,CAAA,EACF,CAAA;AAAA,oBACAR,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EACZ,QAAA,EAAA,EAAA;AAAA,QACC,2CAAA;AAAA,QACA;AAAA,OACF,EACF,CAAA;AAAA,sBACAV,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,eAAA;AAAA,UACH,KAAA,EAAO,MAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACzC,WAAA,EAAa,EAAA;AAAA,YACX,iDAAA;AAAA,YACA;AAAA;AACF;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBACAC,IAAAA,CAACW,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAZ,GAAAA;AAAA,QAACa,MAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,UACjC,QAAA,EAAU,UAAA;AAAA,UAET,QAAA,EAAA,EAAA,CAAG,kCAAkC,QAAQ;AAAA;AAAA,OAChD;AAAA,sBACAb,GAAAA;AAAA,QAACa,MAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,MAAM,SAAA,CAAU,MAAM,CAAA;AAAA,UAC/B,QAAA,EAAU,UAAA;AAAA,UAET,uBACG,EAAA,CAAG,mCAAA,EAAqC,iBAAY,CAAA,GACpD,EAAA,CAAG,yCAAyC,QAAQ;AAAA;AAAA;AAC1D,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAWA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAS,SAAA,EAAU,EAAqB;AAC7D,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,qBAAA,EAAsB;AACrD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIX,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,YAAA,GAAe,OACnB,QAAA,EACA,MAAA,KACG;AACH,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AACzC,MAAAgB,KAAAA,CAAM,OAAA;AAAA,QACJ,aAAa,UAAA,GACT,EAAA;AAAA,UACE,uCAAA;AAAA,UACA;AAAA,SACF,GACA,EAAA;AAAA,UACE,uCAAA;AAAA,UACA;AAAA;AACF,OACN;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,SAAA,EAAU;AAAA,IACZ,SAAS,GAAA,EAAK;AACZ,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,GAAA,YAAe,KAAA,GACX,GAAA,CAAI,OAAA,GACJ,EAAA;AAAA,UACE,wCAAA;AAAA,UACA;AAAA;AACF,OACN;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACEjB,IAAAA;AAAA,IAACc,IAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,wDAAA;AAAA,MACV,aAAA,EAAY,oBAAA;AAAA,MACZ,mBAAiB,OAAA,CAAQ,EAAA;AAAA,MAEzB,QAAA,EAAA;AAAA,wBAAAd,IAAAA,CAACe,UAAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EACpB,QAAA,EAAA;AAAA,0BAAAf,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAACc,IAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,mBAAA;AAAA,kBACL,KAAA,EAAO,EAAA;AAAA,kBACP,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BACAb,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,gBAAA,EAAA,CAAG,qCAAqC,MAAM,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,GAAA;AAAA,gBAClD,OAAA,CAAQ;AAAA,eAAA,EACX;AAAA,aAAA,EACF,CAAA;AAAA,4BACAD,IAACK,KAAAA,EAAA,EAAM,SAAQ,SAAA,EAAU,SAAA,EAAU,uBAAA,EAChC,QAAA,EAAA,OAAA,CAAQ,WAAA,EACX;AAAA,WAAA,EACF,CAAA;AAAA,0BACAJ,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA;AAAA,YAAA,EAAA,CAAG,uCAAuC,oBAAA,EAAsB;AAAA,cAC/D,IAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,EAAE;AAAA,aACtC,CAAA;AAAA,YACA,OAAA,CAAQ,aACP,CAAA,MAAA,EAAM,EAAA;AAAA,cACJ,wCAAA;AAAA,cACA,2BAAA;AAAA,cACA;AAAA,gBACE,MAAM,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,cAAA;AAAe;AACnD,aACD,CAAA;AAAA,WAAA,EACL;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,IAAAA,CAACkB,WAAAA,EAAA,EAAY,WAAU,WAAA,EACpB,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,qBACtBlB,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,qEAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,kCAAAD,GAAAA;AAAA,oBAACc,IAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,sBAAA;AAAA,sBACL,KAAA,EAAO,EAAA;AAAA,sBACP,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACAd,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACb,eAAK,IAAA,EACR;AAAA,iBAAA,EACF,CAAA;AAAA,gCACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EACZ,QAAA,EAAA,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,EAC3B;AAAA;AAAA,aAAA;AAAA,YAfK,IAAA,CAAK;AAAA,WAiBb,CAAA;AAAA,0BAEDC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAACY,MAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,IAAA;AAAA,gBACL,QAAA,EAAU,OAAA;AAAA,gBACV,OAAA,EAAS,MAAM,YAAA,CAAa,UAAU,CAAA;AAAA,gBACtC,aAAA,EAAY,uBAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAb,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,aAAY,SAAA,EAAU,QAAA,EAAS,OAAO,EAAA,EAAI,CAAA;AAAA,kBACpD,EAAA,CAAG,mCAAmC,SAAS;AAAA;AAAA;AAAA,aAClD;AAAA,4BACAb,IAAAA;AAAA,cAACY,MAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAQ,aAAA;AAAA,gBACR,QAAA,EAAU,OAAA;AAAA,gBACV,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,gBACjC,aAAA,EAAY,sBAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAb,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,aAAY,SAAA,EAAU,QAAA,EAAS,OAAO,EAAA,EAAI,CAAA;AAAA,kBACpD,EAAA,CAAG,kCAAkC,QAAQ;AAAA;AAAA;AAAA;AAChD,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAd,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,UAAA;AAAA,YACN,YAAA,EAAc,aAAA;AAAA,YACd,UAAA,EAAY,OAAA;AAAA,YACZ,WAAW,CAAC,MAAA,KAAW,YAAA,CAAa,UAAA,EAAY,UAAU,MAAS;AAAA;AAAA;AACrE;AAAA;AAAA,GACF;AAEJ;AAMO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAWoB,WAAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,SAAS,KAAA,EAAO,OAAA,KACzC,uBAAA,EAAwB;AAE1B,EAAA,uBACEnB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oDACX,QAAA,EAAA,EAAA,CAAG,mCAAA,EAAqC,gBAAgB,CAAA,EAC3D,CAAA;AAAA,wBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EACV,QAAA,EAAA,EAAA;AAAA,UACC,sCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAC,IAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,wBAAAb,GAAAA,CAACc,MAAA,EAAK,IAAA,EAAK,kBAAiB,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,QACvD,EAAA,CAAG,sCAAsC,cAAc;AAAA,OAAA,EAC1D;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,OAAA,IAAW,KAAA,CAAM,MAAA,KAAW,CAAA,oBAC3Bd,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA,CAAG,iCAAA,EAAmC,eAAU,CAAA,EACnD,CAAA;AAAA,IAGD,yBACCA,GAAAA,CAAC,OAAE,SAAA,EAAU,0BAAA,EAA2B,MAAK,OAAA,EAC1C,QAAA,EAAA,EAAA;AAAA,MACC,oCAAA;AAAA,MACA,+CAAA;AAAA,MACA;AAAA,QACE,SAAS,KAAA,CAAM;AAAA;AACjB,KACF,EACF,CAAA;AAAA,IAGD,CAAC,OAAA,IAAW,CAAC,SAAS,KAAA,CAAM,MAAA,KAAW,qBACtCA,GAAAA,CAACe,IAAAA,EAAA,EAAK,WAAU,wDAAA,EACd,QAAA,kBAAAd,KAACkB,WAAAA,EAAA,EAAY,WAAU,oDAAA,EACrB,QAAA,EAAA;AAAA,sBAAAnB,GAAAA;AAAA,QAACc,IAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,0BAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACAd,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,oCAAA;AAAA,QACA;AAAA,OACF,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,uCAAA;AAAA,QACA;AAAA,OACF,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAGD,KAAA,CAAM,MAAA,GAAS,CAAA,oBACdA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,kCAAA;AAAA,QACV,aAAA,EAAY,qBAAA;AAAA,QAEX,QAAA,EAAA,EAAA;AAAA,UACC,+BAAA;AAAA,UACA,qCAAA;AAAA,UACA;AAAA,YACE,OAAO,KAAA,CAAM,MAAA;AAAA,YACb,KAAA,EAAO;AAAA;AACT;AACF;AAAA,KACF;AAAA,oBAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,OAAA,qBACVA,GAAAA,CAAC,eAA6B,OAAA,EAAkB,SAAA,EAAW,WAAzC,OAAA,CAAQ,EAA0C,CACrE,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC9SA,IAAM,iBAAA,GAAoBiB,GAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAsB1B,IAAM,qBAAA,GAAwBA,GAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAU9B,IAAM,eAAA,GAAkBA,GAAAA;AAAA,EAAA,EACpB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWrB,IAAM,mBAAA,GAAsBA,GAAAA;AAAA,EAAA,EACxB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWzB,IAAM,iBAAA,GAAoBA,GAAAA;AAAA,EAAA,EACtB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYrB,IAAM,iBAAA,GAAoBA,GAAAA;AAAA,EAAA,EACtB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYrB,IAAM,iBAAA,GAAoBA,GAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAS1B,IAAM,qBAAA,GAAwBA,GAAAA;AAAA,EAAA,EAC1B,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYzB,IAAM,qBAAA,GAAwBA,GAAAA;AAAA,EAAA,EAC1B,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYzB,IAAM,sBAAA,GAAyBA,GAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAgD/B,SAAS,MACP,GAAA,EACc;AACd,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,IAAA,EAAM,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,IACvB,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,WAAW,GAAA,CAAI;AAAA,GACjB;AACF;AAEA,SAAS,SAAS,KAAA,EAAyC;AAGzD,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACrE,KAAA,GACD,EAAC;AACP;AAEA,SAAS,cAAA,CAAe,OAAgB,QAAA,EAAyB;AAC/D,EAAA,OAAO,IAAI,KAAA,CAAM,sBAAA,CAAuB,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC1D;AAEO,SAAS,cAAc,MAAA,EAAiB;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIf,QAAAA,CAAsB,EAAE,CAAA;AACpD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,WAAA,GAAcE,YAAY,YAAY;AAC1C,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,mBAAA,EAAoB,CAAE,KAAA,CAAuB;AAAA,UACjD,KAAA,EAAO,eAAA;AAAA,UACP,SAAA,EAAW;AAAA,YACT,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAK,IAAK,KAAA,CAAA;AAAA,YAC1B,KAAA,EAAO,GAAA;AAAA,YACP,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,WAAA,EAAa;AAAA,SACd;AAAA,OACH;AACA,MAAA,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,UAAA,CAAW,MAAA,IAAU,EAAE,CAAA;AAC9C,MAAA,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,UAAA,CAAW,KAAA,IAAS,CAAC,CAAA;AAAA,IAC7C,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,cAAA,CAAe,GAAA,EAAK,4BAA4B,CAAC,CAAA;AAAA,IAC5D,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,WAAA,EAAY;AAAA,EACnB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAAS,WAAA,EAAY;AAC/D;AAEO,SAAS,iBAAiB,OAAA,EAAwB;AACvD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAID,QAAAA,CAAyB,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAYE,YAAY,YAAY;AACxC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,EAAE,CAAA;AACV,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,mBAAA,EAAoB,CAAE,KAAA,CAA0B;AAAA,UACpD,KAAA,EAAO,mBAAA;AAAA,UACP,SAAA,EAAW,EAAE,KAAA,EAAO,EAAE,SAAS,KAAA,EAAO,GAAA,EAAM,MAAA,EAAQ,CAAA,EAAE,EAAE;AAAA,UACxD,WAAA,EAAa;AAAA,SACd;AAAA,OACH;AACA,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,aAAA;AAC9B,MAAA,OAAA,CAAQ,UAAU,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,EAAE,CAAA;AACvC,MAAA,QAAA,CAAS,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,IAC/B,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,cAAA,CAAe,GAAA,EAAK,gCAAgC,CAAC,CAAA;AAAA,IAChE,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,SAAA,EAAU;AAAA,EACjB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAU;AAC3D;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,eAAA,GAAkBE,WAAAA,CAAY,OAAO,KAAA,KAAgC;AACzE,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAEzB,EAAE,QAAA,EAAU,iBAAA,EAAmB,SAAA,EAAW,EAAE,KAAA,EAAM,EAAG;AAAA,OAC1D;AACA,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,eAAA;AAC9B,MAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,6BAA6B,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,SAAS,KAAA,IAAS,IAAA;AAAA,IAC3B,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,iBAAiB,OAAA,EAAQ;AACpC;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,eAAA,GAAkBE,WAAAA;AAAA,IACtB,OAAO,IAAY,KAAA,KAAgC;AACjD,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAEzB,EAAE,QAAA,EAAU,iBAAA,EAAmB,SAAA,EAAW,EAAE,EAAA,EAAI,KAAA,EAAM,EAAG;AAAA,SAC9D;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,eAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,6BAA6B,CAAA;AAAA,QACpE;AACA,QAAA,OAAO,SAAS,KAAA,IAAS,IAAA;AAAA,MAC3B,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,iBAAiB,OAAA,EAAQ;AACpC;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,eAAA,GAAkBE,WAAAA,CAAY,OAAO,EAAA,KAAe;AACxD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,QACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAEzB,EAAE,QAAA,EAAU,iBAAA,EAAmB,SAAA,EAAW,EAAE,EAAA,EAAG,EAAG;AAAA,OACvD;AACA,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,eAAA;AAC9B,MAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,6BAA6B,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,iBAAiB,OAAA,EAAQ;AACpC;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,kBAAA,GAAqBE,WAAAA;AAAA,IACzB,OAAO,SAAiB,IAAA,KAAkC;AACxD,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAEzB;AAAA,YACD,QAAA,EAAU,qBAAA;AAAA,YACV,SAAA,EAAW,EAAE,OAAA,EAAS,IAAA;AAAK,WAC5B;AAAA,SACH;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,kBAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,sBAAsB,CAAA;AAAA,QAC7D;AACA,QAAA,OAAO,QAAA,CAAS,GAAA,GAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AAAA,MAC9C,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,oBAAoB,OAAA,EAAQ;AACvC;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,kBAAA,GAAqBE,WAAAA;AAAA,IACzB,OAAO,IAAY,IAAA,KAAkC;AACnD,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAEzB,EAAE,QAAA,EAAU,qBAAA,EAAuB,SAAA,EAAW,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG;AAAA,SACjE;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,kBAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,sBAAsB,CAAA;AAAA,QAC7D;AACA,QAAA,OAAO,QAAA,CAAS,GAAA,GAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AAAA,MAC9C,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,oBAAoB,OAAA,EAAQ;AACvC;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,mBAAA,GAAsBE,WAAAA;AAAA,IAC1B,OAAO,SAAiB,GAAA,KAAkB;AACxC,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,UACb,MAAM,mBAAA,EAAoB,CAAE,MAAA,CAMzB;AAAA,YACD,QAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAW,EAAE,OAAA,EAAS,GAAA;AAAI,WAC3B;AAAA,SACH;AACA,QAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,mBAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,UAAA,MAAM,IAAI,KAAA,CAAM,QAAA,EAAU,OAAA,IAAW,uBAAuB,CAAA;AAAA,QAC9D;AACA,QAAA,OAAO,QAAA,CAAS,QAAA;AAAA,MAClB,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,qBAAqB,OAAA,EAAQ;AACxC;;;ACveO,SAAS,SAAS,IAAA,EAA0B;AACjD,EAAA,MAAM,OAAmB,EAAC;AAC1B,EAAA,IAAI,MAAgB,EAAC;AACrB,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,MAAA,GAAS,KAAA;AAEb,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,SAAA,GAAY,KAAK,KAAK,CAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA;AAE3B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,SAAA,KAAc,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AACrC,QAAA,IAAA,IAAQ,GAAA;AACR,QAAA,KAAA,IAAS,CAAA;AAAA,MACX,CAAA,MAAA,IAAW,cAAc,GAAA,EAAK;AAC5B,QAAA,MAAA,GAAS,KAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAA,IAAA,IAAQ,SAAA;AAAA,MACV;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,KAAc,GAAA,IAAO,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC1C,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA,MAAA,IAAW,cAAc,GAAA,EAAK;AAC5B,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AACb,MAAA,IAAA,GAAO,EAAA;AAAA,IACT,CAAA,MAAA,IAAW,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,IAAA,EAAM;AACnD,MAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM,KAAA,IAAS,CAAA;AAClD,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AACb,MAAA,IAAA,GAAO,EAAA;AACP,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AACxD,MAAA,GAAA,GAAM,EAAC;AAAA,IACT,CAAA,MAAO;AACL,MAAA,IAAA,IAAQ,SAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACrC,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AACb,IAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAAe,IAAA,EAAoC;AACrE,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,IAAA,KAAS,WAAW,EAAA,GAAK,IAAA;AAAA,EAClC;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AACzB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAA,CAAG,CAAA;AACrD,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,IACA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,MAAA,IAAI,UAAA,KAAe,QAAQ,OAAO,IAAA;AAClC,MAAA,IAAI,UAAA,KAAe,SAAS,OAAO,KAAA;AACnC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1D;AAAA,IACA,KAAK,MAAA;AACH,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,MACvD;AAAA,IACF,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,KAAA;AAAA;AAEb;AAGO,SAAS,SAAA,CACd,MACA,OAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,GAAS,SAAS,IAAI,CAAA;AAC5B,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,EAAC;AAE/B,EAAA,MAAM,OAAA,GAAU,OAAO,CAAC,CAAA,CAAE,IAAI,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,EAAM,CAAA;AACvD,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,GAAA,EAAK,MAAM,CAAC,CAAC,CAAA;AACzE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9D;AACA,IAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AAAA,EACjB;AAEA,EAAA,OAAO,OAAO,KAAA,CAAM,CAAC,EAAE,GAAA,CAAI,CAAC,QAAQ,QAAA,KAAa;AAC/C,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,WAAA,KAAgB;AACvC,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACrC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,WAAW,CAAA,IAAK,EAAA;AACxC,MAAA,IAAI;AACF,QAAA,GAAA,CAAI,MAAM,CAAA,GAAI,UAAA,CAAW,QAAA,EAAU,OAAO,IAAI,CAAA;AAAA,MAChD,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,OAAA,GACJ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA;AAC3C,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,QAAA,GAAW,CAAC,KAAK,MAAA,CAAO,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MACpE;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,QAAQ,KAAA,EAAwB;AACvC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,MAAM,IAAA,GACJ,OAAO,KAAA,KAAU,QAAA,GAAW,KAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAClE,EAAA,OAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,CAAA,EAAI,KAAK,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,IAAA;AACrE;AAGO,SAAS,SAAA,CACd,SACA,IAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACpE,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,IAAI,CAAC,GAAA,KACvB,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,OAAO,GAAG,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG;AAAA,GACjE;AACA,EAAA,OAAO,CAAC,MAAA,EAAQ,GAAG,MAAM,CAAA,CAAE,KAAK,MAAM,CAAA;AACxC;AC5EA,IAAM,YAAA,GAAsC;AAAA,EAC1C,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,YAAY,KAAA,EAAqC;AACxD,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,UAAU,KAAK,CAAA,CAAA;AAAA,IACpB,KAAA,EAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACtB,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAEA,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,QAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC1D,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,gBAAgB,IAAA,EAAmC;AAC1D,EAAA,OAAO,IAAA,KAAS,MAAA,GAAS,MAAA,GAAS,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AACxE;AAEA,SAAS,WAAA,CAAY,OAAgB,IAAA,EAAmC;AACtE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,SAAS,MAAA,EAAQ,OAAO,KAAK,SAAA,CAAU,KAAA,EAAO,MAAM,CAAC,CAAA;AACzD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,cAAA,CAAe,OAAe,IAAA,EAAoC;AACzE,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAA,EAAQ,OAAO,KAAA;AACjD,EAAA,IAAI,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA,EAAI,OAAO,IAAA;AAChC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,KAAK,CAAA,iBAAA,CAAmB,CAAA;AAC1E,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,IAAA;AAC7B,IAAA,IAAI,KAAA,KAAU,SAAS,OAAO,KAAA;AAC9B,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACF;AASA,SAAS,eAAA,CAAgB;AAAA,EACvB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAS,QAAA,KAAa,kBAAA,EAAmB;AAClE,EAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAS,QAAA,KAAa,kBAAA,EAAmB;AAClE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIF,SAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA,CAAiC,EAAE,CAAA;AACjE,EAAA,MAAM,UAAU,KAAA,KAAU,IAAA;AAC1B,EAAA,MAAM,SAAS,QAAA,IAAY,QAAA;AAE3B,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,OAAA,CAAQ,KAAA,EAAO,QAAQ,EAAE,CAAA;AACzB,IAAA,cAAA,CAAe,KAAA,EAAO,eAAe,EAAE,CAAA;AACvC,IAAA,UAAA;AAAA,MACE,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,QAC9B,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,GAAI,OAAO,YAAA,KAAiB,MAAA,GACxB,EAAE,YAAA,EAAc,MAAA,CAAO,YAAA,EAAa,GACpC;AAAC,OACP,CAAE,CAAA,IAAK,CAAC,WAAA,CAAY,CAAC,CAAC;AAAA,KACxB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,MAAM,YAAA,GAAeC,WAAAA;AAAA,IACnB,CAAC,OAAe,KAAA,KAAyC;AACvD,MAAA,UAAA;AAAA,QAAW,CAAC,YACV,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAC,MAAA,EAAQ,WAAA,KACnB,WAAA,KAAgB,KAAA,GAAQ,EAAE,GAAG,MAAA,EAAQ,GAAG,KAAA,EAAM,GAAI;AAAA;AACpD,OACF;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAeA,YAAY,YAAY;AAC3C,IAAA,MAAM,WAAA,GAAc,KAAK,IAAA,EAAK;AAC9B,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAAc,KAAAA,CAAM,KAAA;AAAA,QACJ,EAAA,CAAG,sCAAsC,wBAAwB;AAAA,OACnE;AACA,MAAA;AAAA,IACF;AACA,IAAA,IACE,QAAQ,MAAA,KAAW,CAAA,IACnB,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,GAAA,CAAI,MAAK,IAAK,CAAC,OAAO,KAAA,CAAM,IAAA,EAAM,CAAA,EACnE;AACA,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,EAAA;AAAA,UACE,uCAAA;AAAA,UACA;AAAA;AACF,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MACjD,GAAG,MAAA;AAAA,MACH,GAAA,EAAK,MAAA,CAAO,GAAA,CAAI,IAAA,EAAK;AAAA,MACrB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA;AAAK,KAC3B,CAAE,CAAA;AACF,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,iBAAA,CAAkB,IAAI,CAAC,MAAA,KAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AAClE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,iBAAA,CAAkB,MAAA,EAAQ;AAC1C,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,EAAA,CAAG,oCAAoC,4BAA4B;AAAA,OACrE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,OAAA,GACV,MAAM,eAAA,CAAgB,MAAM,EAAA,EAAI;AAAA,QAC9B,IAAA,EAAM,WAAA;AAAA,QACN,WAAA,EAAa,WAAA,CAAY,IAAA,EAAK,IAAK,KAAA,CAAA;AAAA,QACnC,OAAA,EAAS;AAAA,OACV,CAAA,GACD,MAAM,eAAA,CAAgB;AAAA,QACpB,IAAA,EAAM,WAAA;AAAA,QACN,WAAA,EAAa,WAAA,CAAY,IAAA,EAAK,IAAK,KAAA,CAAA;AAAA,QACnC,OAAA,EAAS;AAAA,OACV,CAAA;AACL,MAAAA,KAAAA,CAAM,OAAA;AAAA,QACJ,UACI,EAAA,CAAG,+BAAA,EAAiC,oBAAoB,CAAA,GACxD,EAAA,CAAG,iCAAiC,oBAAoB;AAAA,OAC9D;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AACb,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,sBAAA;AAAA,UACE,KAAA;AAAA,UACA,EAAA,CAAG,oCAAoC,2BAA2B;AAAA;AACpE,OACF;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACElB,GAAAA,CAACM,MAAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAClB,QAAA,kBAAAL,IAAAA,CAACM,aAAAA,EAAA,EAAc,SAAA,EAAU,wCAAA,EACvB,QAAA,EAAA;AAAA,oBAAAP,IAACQ,YAAAA,EAAA,EACC,QAAA,kBAAAR,GAAAA,CAACS,aAAA,EACE,QAAA,EAAA,OAAA,GACG,EAAA,CAAG,iCAAA,EAAmC,iBAAiB,CAAA,GACvD,EAAA,CAAG,gCAAA,EAAkC,gBAAgB,GAC3D,CAAA,EACF,CAAA;AAAA,oBACAR,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,mBACZ,QAAA,EAAA,EAAA,CAAG,4BAAA,EAA8B,MAAM,CAAA,EAC1C,CAAA;AAAA,0BACAV,GAAAA;AAAA,YAACW,KAAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,iBAAA;AAAA,cACH,KAAA,EAAO,IAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,OAAA,CAAQ,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAC/C,WAAA,EAAY,UAAA;AAAA,cACZ,SAAA,EAAS;AAAA;AAAA;AACX,SAAA,EACF,CAAA;AAAA,wBACAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAACU,OAAA,EAAM,OAAA,EAAQ,0BACZ,QAAA,EAAA,EAAA,CAAG,mCAAA,EAAqC,aAAa,CAAA,EACxD,CAAA;AAAA,0BACAV,GAAAA;AAAA,YAACW,KAAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,wBAAA;AAAA,cACH,KAAA,EAAO,WAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,cAAA,CAAe,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cACtD,WAAA,EAAa,EAAA;AAAA,gBACX,8CAAA;AAAA,gBACA;AAAA;AACF;AAAA;AACF,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAD,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CACX,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAChD,CAAA;AAAA,4BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA,EAAA;AAAA,cACC,mCAAA;AAAA,cACA;AAAA,aACF,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BACAC,IAAAA;AAAA,YAACY,MAAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MACP,UAAA,CAAW,CAAC,OAAA,KAAY;AAAA,gBACtB,GAAG,OAAA;AAAA,gBACH,WAAA,CAAY,OAAA,CAAQ,MAAA,GAAS,CAAC;AAAA,eAC/B,CAAA;AAAA,cAGH,QAAA,EAAA;AAAA,gCAAAb,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,gBAClD,EAAA,CAAG,mCAAmC,YAAY;AAAA;AAAA;AAAA;AACrD,SAAA,EACF,CAAA;AAAA,wBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,kBAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBACpBC,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,wGAAA;AAAA,YAGV,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAA,EAC3C,QAAA,EAAA,EAAA,CAAG,2BAAA,EAA6B,KAAK,CAAA,EACxC,CAAA;AAAA,gCACAV,GAAAA;AAAA,kBAACW,KAAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,yBAAyB,KAAK,CAAA,CAAA;AAAA,oBAClC,OAAO,MAAA,CAAO,GAAA;AAAA,oBACd,QAAA,EAAU,CAAC,KAAA,KACT,YAAA,CAAa,KAAA,EAAO,EAAE,GAAA,EAAK,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AAEnD,eAAA,EACF,CAAA;AAAA,8BACAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAA,EAC7C,QAAA,EAAA,EAAA,CAAG,6BAAA,EAA+B,OAAO,CAAA,EAC5C,CAAA;AAAA,gCACAV,GAAAA;AAAA,kBAACW,KAAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,2BAA2B,KAAK,CAAA,CAAA;AAAA,oBACpC,OAAO,MAAA,CAAO,KAAA;AAAA,oBACd,QAAA,EAAU,CAAC,KAAA,KACT,YAAA,CAAa,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AAErD,eAAA,EACF,CAAA;AAAA,8BACAV,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAA,EAC5C,QAAA,EAAA,EAAA,CAAG,4BAAA,EAA8B,MAAM,CAAA,EAC1C,CAAA;AAAA,gCACAV,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,0BAA0B,KAAK,CAAA,CAAA;AAAA,oBACnC,SAAA,EAAU,mGAAA;AAAA,oBACV,OAAO,MAAA,CAAO,IAAA;AAAA,oBACd,QAAA,EAAU,CAAC,KAAA,KACT,YAAA,CAAa,KAAA,EAAO;AAAA,sBAClB,IAAA,EAAM,MAAM,MAAA,CAAO;AAAA,qBACpB,CAAA;AAAA,oBAGF,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,qBACjBA,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,IAAA,EACvB,QAAA,EAAA,eAAA,CAAgB,IAAI,CAAA,EAAA,EADV,IAEb,CACD;AAAA;AAAA;AACH,eAAA,EACF,CAAA;AAAA,8BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qDAAA,EACf,QAAA,EAAA;AAAA,kCAAAD,GAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,UAAA;AAAA,sBACL,OAAA,EAAS,OAAO,QAAA,IAAY,KAAA;AAAA,sBAC5B,QAAA,EAAU,CAAC,KAAA,KACT,YAAA,CAAa,KAAA,EAAO;AAAA,wBAClB,QAAA,EAAU,MAAM,MAAA,CAAO;AAAA,uBACxB;AAAA;AAAA,mBAEL;AAAA,kBACC,EAAA,CAAG,kCAAkC,UAAU;AAAA,iBAAA,EAClD,CAAA;AAAA,gCACAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAA,EAAU,0GAAA;AAAA,oBACV,SAAS,MACP,UAAA;AAAA,sBAAW,CAAC,YACV,OAAA,CAAQ,MAAA;AAAA,wBACN,CAAC,CAAA,EAAG,WAAA,KAAgB,WAAA,KAAgB;AAAA;AACtC,qBACF;AAAA,oBAEF,QAAA,EAAU,QAAQ,MAAA,KAAW,CAAA;AAAA,oBAC7B,KAAA,EAAO,EAAA;AAAA,sBACL,oCAAA;AAAA,sBACA;AAAA,qBACF;AAAA,oBACA,YAAA,EAAY,EAAA;AAAA,sBACV,oCAAA;AAAA,sBACA;AAAA,qBACF;AAAA,oBAEA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO;AAAA;AAAA;AAChD,eAAA,EACF;AAAA;AAAA,WAAA;AAAA,UAlFK,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,SAoF9B,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBACAC,IAAAA,CAACW,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EACxD,QAAA,EAAA,EAAA,CAAG,8BAAA,EAAgC,QAAQ,CAAA,EAC9C,CAAA;AAAA,sBACAb,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAS,cAAc,QAAA,EAAU,MAAA,EACtC,QAAA,EAAA,MAAA,GACG,EAAA,CAAG,gCAAgC,cAAS,CAAA,GAC5C,EAAA,CAAG,4BAAA,EAA8B,YAAY,CAAA,EACnD;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAUA,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,kBAAA,EAAoB,OAAA,EAAS,SAAA,KAAc,qBAAA,EAAsB;AACzE,EAAA,MAAM,EAAE,kBAAA,EAAoB,OAAA,EAAS,QAAA,KAAa,qBAAA,EAAsB;AACxE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIX,QAAAA,CAAiC,EAAE,CAAA;AAC/D,EAAA,MAAM,UAAU,GAAA,KAAQ,IAAA;AACxB,EAAA,MAAM,SAAS,SAAA,IAAa,QAAA;AAE5B,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACrB,IAAA,MAAM,OAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,MAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA,CAAY,GAAA,EAAK,KAAK,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA;AAAA,IACnE;AACA,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,IAAA,EAAM,GAAA,EAAK,KAAK,CAAC,CAAA;AAErB,EAAA,MAAM,YAAA,GAAeC,YAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,OAAgC,EAAC;AACvC,MAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AACpC,QAAA,IAAI,MAAA,CAAO,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AAC1C,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,QAC/C;AACA,QAAA,IAAA,CAAK,OAAO,GAAG,CAAA,GAAI,cAAA,CAAe,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,MACtD;AACA,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA,MAAM,kBAAA,CAAmB,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,MACvC,CAAA,MAAO;AACL,QAAA,MAAM,kBAAA,CAAmB,KAAA,CAAM,EAAA,EAAI,IAAI,CAAA;AAAA,MACzC;AACA,MAAAc,KAAAA,CAAM,OAAA;AAAA,QACJ,UACI,EAAA,CAAG,kCAAA,EAAoC,aAAa,CAAA,GACpD,EAAA,CAAG,oCAAoC,WAAW;AAAA,OACxD;AACA,MAAA,OAAA,EAAQ;AACR,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,sBAAA;AAAA,UACE,KAAA;AAAA,UACA,EAAA,CAAG,uCAAuC,oBAAoB;AAAA;AAChE,OACF;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACElB,GAAAA,CAACM,MAAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAClB,QAAA,kBAAAL,IAAAA,CAACM,aAAAA,EAAA,EAAc,SAAA,EAAU,wCAAA,EACvB,QAAA,EAAA;AAAA,oBAAAP,IAACQ,YAAAA,EAAA,EACC,QAAA,kBAAAR,GAAAA,CAACS,aAAA,EACE,QAAA,EAAA,OAAA,GACG,EAAA,CAAG,+BAAA,EAAiC,UAAU,CAAA,GAC9C,EAAA,CAAG,8BAAA,EAAgC,SAAS,GAClD,CAAA,EACF,CAAA;AAAA,IACC,KAAA,oBACCT,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACZ,QAAA,EAAA,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBAClBC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,KAACS,KAAAA,EAAA,EAAM,SAAS,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAA,CAAA,EACzC,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,KAAA;AAAA,wBACRT,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAC/C,MAAA,CAAO,GAAA;AAAA,UAAI,QAAA;AAAA,UAAI,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,UAAE;AAAA,SAAA,EAChD,CAAA;AAAA,QACC,OAAO,QAAA,oBACND,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAA2B,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EAEhD,CAAA;AAAA,MACC,MAAA,CAAO,IAAA,KAAS,MAAA,mBACfA,GAAAA;AAAA,QAACqB,QAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,UAChC,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,UAC7B,QAAA,EAAU,CAAC,KAAA,KACT,SAAA,CAAU,CAAC,OAAA,MAAa;AAAA,YACtB,GAAG,OAAA;AAAA,YACH,CAAC,MAAA,CAAO,GAAG,GAAG,MAAM,MAAA,CAAO;AAAA,WAC7B,CAAE,CAAA;AAAA,UAEJ,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAY;AAAA;AAAA,0BAGdrB,GAAAA;AAAA,QAACW,KAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,UAChC,IAAA,EACE,OAAO,IAAA,KAAS,QAAA,GACZ,WACA,MAAA,CAAO,IAAA,KAAS,SACd,gBAAA,GACA,MAAA;AAAA,UAER,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,IAAK,EAAA;AAAA,UAC7B,QAAA,EAAU,CAAC,KAAA,KACT,SAAA,CAAU,CAAC,OAAA,MAAa;AAAA,YACtB,GAAG,OAAA;AAAA,YACH,CAAC,MAAA,CAAO,GAAG,GAAG,MAAM,MAAA,CAAO;AAAA,WAC7B,CAAE;AAAA;AAAA;AAEN,KAAA,EAAA,EAxC8B,MAAA,CAAO,GA0CzC,CACD,CAAA,EACH,CAAA;AAAA,oBAEFV,IAAAA,CAACW,YAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EACxD,QAAA,EAAA,EAAA,CAAG,8BAAA,EAAgC,QAAQ,CAAA,EAC9C,CAAA;AAAA,sBACAb,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,UAAU,MAAA,IAAU,CAAC,KAAA,EACjD,QAAA,EAAA,MAAA,GACG,GAAG,8BAAA,EAAgC,cAAS,IAC5C,EAAA,CAAG,+BAAA,EAAiC,UAAU,CAAA,EACpD;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAOA,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,cAAA,EAAe,EAAwB;AACtE,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,EAAE,MAAM,KAAA,EAAO,OAAA,EAAS,OAAO,OAAA,EAAQ,GAAI,gBAAA,CAAiB,KAAA,CAAM,EAAE,CAAA;AAC1E,EAAA,MAAM,EAAE,mBAAA,EAAqB,OAAA,EAAS,QAAA,KAAa,sBAAA,EAAuB;AAC1E,EAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,qBAAA,EAAsB;AACrD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIX,QAAAA,iBAAsB,IAAI,KAAK,CAAA;AACrE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAA8B,IAAI,CAAA;AACtE,EAAA,MAAM,YAAA,GAAe,OAAyB,IAAI,CAAA;AAElD,EAAAC,UAAU,MAAM;AACd,IAAA,cAAA,CAAe,CAAC,OAAA,KAAY;AAC1B,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AACjD,MAAA,OAAO,IAAI,GAAA,CAAI,CAAC,GAAG,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAC,CAAC,CAAA;AAAA,IAC7D,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,qBACJ,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,IAAA,CAAK,MAAA;AAE/C,EAAA,MAAM,SAAA,GAAYC,YAAY,MAAM;AAClC,IAAA,cAAA;AAAA,MACE,kBAAA,mBAAqB,IAAI,GAAA,EAAI,GAAI,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC;AAAA,KACpE;AAAA,EACF,CAAA,EAAG,CAAC,kBAAA,EAAoB,IAAI,CAAC,CAAA;AAE7B,EAAA,MAAM,gBAAA,GAAmBA,YAAY,YAAY;AAC/C,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC5B,IAAA,IACE,CAAC,MAAA,CAAO,OAAA;AAAA,MACN,EAAA;AAAA,QACE,yCAAA;AAAA,QACA,CAAA,OAAA,EAAU,YAAY,IAAI,CAAA,iBAAA;AAAA;AAC5B,KACF,EACA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,KAAA,CAAM,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;AACrE,MAAAc,KAAAA,CAAM,OAAA;AAAA,QACJ,EAAA,CAAG,mCAAA,EAAqC,CAAA,EAAG,QAAQ,CAAA,eAAA,CAAiB;AAAA,OACtE;AACA,MAAA,cAAA,iBAAe,IAAI,KAAK,CAAA;AACxB,MAAA,MAAM,OAAA,EAAQ;AACd,MAAA,cAAA,EAAe;AAAA,IACjB,SAASI,MAAAA,EAAO;AACd,MAAAJ,KAAAA,CAAM,KAAA;AAAA,QACJ,sBAAA;AAAA,UACEI,MAAAA;AAAA,UACA,EAAA,CAAG,0CAA0C,uBAAuB;AAAA;AACtE,OACF;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,mBAAA,EAAqB,cAAA,EAAgB,SAAS,WAAA,EAAa,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA;AAE5E,EAAA,MAAM,YAAA,GAAelB,YAAY,MAAM;AACrC,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,OAAA,EAAS,IAAI,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,wBAAA,EAA0B,CAAA;AAC/D,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACzC,IAAA,MAAA,CAAO,IAAA,GAAO,GAAA;AACd,IAAA,MAAA,CAAO,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAA;AAC/B,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACvB,IAAAc,KAAAA,CAAM,OAAA;AAAA,MACJ,EAAA,CAAG,kCAAkC,8BAA8B;AAAA,KACrE;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,KAAA,CAAM,SAAS,KAAA,CAAM,IAAA,EAAM,EAAE,CAAC,CAAA;AAExC,EAAA,MAAM,YAAA,GAAed,WAAAA;AAAA,IACnB,OAAO,KAAA,KAAyC;AAC9C,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AACnC,MAAA,KAAA,CAAM,OAAO,KAAA,GAAQ,EAAA;AACrB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,MAAM,eAAe,SAAA,CAAU,MAAM,KAAK,IAAA,EAAK,EAAG,MAAM,OAAO,CAAA;AAC/D,QAAA,IAAI,QAAA,GAAW,CAAA;AACf,QAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,UAAA,MAAM,kBAAA,CAAmB,KAAA,CAAM,EAAA,EAAI,IAAI,CAAA;AACvC,UAAA,QAAA,IAAY,CAAA;AAAA,QACd;AACA,QAAAc,KAAAA,CAAM,OAAA;AAAA,UACJ,EAAA,CAAG,gCAAA,EAAkC,CAAA,EAAG,QAAQ,CAAA,gBAAA,CAAkB;AAAA,SACpE;AACA,QAAA,MAAM,OAAA,EAAQ;AACd,QAAA,cAAA,EAAe;AAAA,MACjB,SAASI,MAAAA,EAAO;AACd,QAAAJ,KAAAA,CAAM,KAAA;AAAA,UACJ,sBAAA;AAAA,YACEI,MAAAA;AAAA,YACA,EAAA,CAAG,sCAAsC,sBAAsB;AAAA;AACjE,SACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,oBAAoB,cAAA,EAAgB,OAAA,EAAS,MAAM,OAAA,EAAS,KAAA,CAAM,IAAI,EAAE;AAAA,GAC3E;AAEA,EAAA,MAAM,UAAA,GAAalB,YAAY,MAAM;AACnC,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcA,WAAAA,CAAY,CAAC,GAAA,KAAsB;AACrD,IAAA,aAAA,CAAc,GAAG,CAAA;AACjB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEH,IAAAA,CAACc,IAAAA,EAAA,EAAK,WAAU,iCAAA,EACd,QAAA,EAAA;AAAA,oBAAAd,IAAAA,CAACe,UAAAA,EAAA,EAAW,SAAA,EAAU,mDAAA,EACpB,QAAA,EAAA;AAAA,sBAAAf,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAACsB,SAAAA,EAAA,EAAU,SAAA,EAAU,iCAAA,EACnB,QAAA,EAAA;AAAA,4BAAAvB,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,4BAAA;AAAA,gBACV,aAAA,EAAY;AAAA;AAAA,aACd;AAAA,4BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,gBAAM,IAAA,EAAK;AAAA,WAAA,EACzC,CAAA;AAAA,0BACAA,GAAAA,CAACwB,eAAAA,EAAA,EAAgB,SAAA,EAAU,MAAA,EACxB,QAAA,EAAA,KAAA,CAAM,WAAA,IACL,EAAA,CAAG,qCAAA,EAAuC,gBAAgB,CAAA,EAC9D;AAAA,SAAA,EACF,CAAA;AAAA,wBACAvB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAACY,QAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,IAAA,EAAK,SAAS,UAAA,EAC3C,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,YAClD,EAAA,CAAG,gCAAgC,SAAS;AAAA,WAAA,EAC/C,CAAA;AAAA,0BACAC,IAAAA;AAAA,YAACY,MAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA,EAAS,KAAA,EAAM;AAAA,cAE3C,QAAA,EAAA;AAAA,gCAAAb,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,gBAC7D,EAAA,CAAG,gCAAgC,YAAY;AAAA;AAAA;AAAA,WAClD;AAAA,0BACAA,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,eAAA;AAAA,cACP,SAAA,EAAU,QAAA;AAAA,cACV,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAC,IAAAA;AAAA,YAACY,MAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,QAAA,EAAU,KAAK,MAAA,KAAW,CAAA;AAAA,cAE1B,QAAA,EAAA;AAAA,gCAAAb,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,gBAC7D,EAAA,CAAG,gCAAgC,YAAY;AAAA;AAAA;AAAA;AAClD,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAACI,KAAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UAAM,GAAA;AAAA,UAAE,EAAA,CAAG,8BAA8B,MAAM;AAAA,SAAA,EAClD,CAAA;AAAA,wBACAJ,IAAAA,CAACI,KAAAA,EAAA,EAAM,SAAQ,SAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,OAAA,CAAQ,MAAA;AAAA,UAAQ,GAAA;AAAA,UACtB,EAAA,CAAG,iCAAiC,SAAS;AAAA,SAAA,EAChD,CAAA;AAAA,wBACAL,IAACK,KAAAA,EAAA,EAAM,SAAQ,SAAA,EAAW,QAAA,EAAA,WAAA,CAAY,KAAA,CAAM,SAAS,CAAA,EAAE,CAAA;AAAA,QACtD,WAAA,CAAY,IAAA,GAAO,CAAA,oBAClBJ,IAAAA;AAAA,UAACY,MAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,gBAAA;AAAA,YACT,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAb,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,cACpD,QAAA,GACG,EAAA,CAAG,gCAAA,EAAkC,gBAAW,CAAA,GAChD,EAAA;AAAA,gBACE,sCAAA;AAAA,gBACA,CAAA,OAAA,EAAU,YAAY,IAAI,CAAA,SAAA;AAAA;AAC5B;AAAA;AAAA;AACN,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBACAC,IAAAA,CAACkB,WAAAA,EAAA,EAAY,WAAU,KAAA,EACpB,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCnB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACZ,gBAAM,OAAA,EACT,CAAA;AAAA,sBAEFA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACb,QAAA,kBAAAC,IAAAA,CAACwB,OAAA,EACC,QAAA,EAAA;AAAA,wBAAAzB,IAAC0B,WAAAA,EAAA,EACC,QAAA,kBAAAzB,IAAAA,CAAC0B,UAAA,EACC,QAAA,EAAA;AAAA,0BAAA3B,GAAAA,CAAC4B,SAAAA,EAAA,EAAU,SAAA,EAAU,QACnB,QAAA,kBAAA5B,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,kBAAA;AAAA,cACT,QAAA,EAAU,SAAA;AAAA,cACV,YAAA,EAAY,EAAA;AAAA,gBACV,iCAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC4B,SAAAA,EAAA,EACE,QAAA,EAAA,EAAA,CAAG,6BAAA,EAA+B,KAAK,CAAA,EAC1C,CAAA;AAAA,UACC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBAClB5B,GAAAA,CAAC4B,SAAAA,EAAA,EAA4B,QAAA,EAAA,MAAA,CAAO,KAAA,EAAA,EAApB,MAAA,CAAO,GAAmB,CAC3C,CAAA;AAAA,0BACD5B,IAAC4B,SAAAA,EAAA,EAAU,WAAU,YAAA,EAClB,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAChD;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACA3B,IAAAA,CAAC4B,SAAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,OAAA,oBACC7B,GAAAA,CAAC2B,QAAAA,EAAA,EACC,QAAA,kBAAA3B,GAAAA;AAAA,YAAC8B,SAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA;AAAA,cAChC,SAAA,EAAU,uCAAA;AAAA,cAET,QAAA,EAAA,EAAA,CAAG,qCAAqC,oBAAe;AAAA;AAAA,WAC1D,EACF,CAAA;AAAA,UAED,CAAC,WAAW,IAAA,CAAK,MAAA,KAAW,qBAC3B9B,GAAAA,CAAC2B,QAAAA,EAAA,EACC,QAAA,kBAAA3B,GAAAA;AAAA,YAAC8B,SAAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA;AAAA,cAChC,SAAA,EAAU,uCAAA;AAAA,cAET,QAAA,EAAA,EAAA;AAAA,gBACC,iCAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF,EACF,CAAA;AAAA,UAED,CAAC,WACA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACR7B,IAAAA,CAAC0B,QAAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA3B,GAAAA,CAAC8B,SAAAA,EAAA,EACC,QAAA,kBAAA9B,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,UAAA;AAAA,gBACL,OAAA,EAAS,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AAAA,gBAC/B,QAAA,EAAU,MACR,cAAA,CAAe,CAAC,OAAA,KAAY;AAC1B,kBAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,OAAO,CAAA;AAC5B,kBAAA,IAAI,IAAA,CAAK,IAAI,GAAA,CAAI,EAAE,GAAG,IAAA,CAAK,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA,uBACnC,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AACpB,kBAAA,OAAO,IAAA;AAAA,gBACT,CAAC,CAAA;AAAA,gBAEH,YAAA,EAAY,EAAA;AAAA,kBACV,iCAAA;AAAA,kBACA;AAAA;AACF;AAAA,aACF,EACF,CAAA;AAAA,4BACAA,GAAAA,CAAC8B,SAAAA,EAAA,EACC,0BAAA9B,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EACb,cAAI,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAC,GACpB,CAAA,EACF,CAAA;AAAA,YACC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,2BAClBA,GAAAA;AAAA,cAAC8B,SAAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gCAAA;AAAA,gBAEV,OAAO,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,gBAEtC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC;AAAA,eAAA;AAAA,cAH5B,MAAA,CAAO;AAAA,aAKf,CAAA;AAAA,4BACD9B,GAAAA,CAAC8B,SAAAA,EAAA,EAAU,SAAA,EAAU,cACnB,QAAA,kBAAA9B,GAAAA;AAAA,cAACa,MAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AAAA,gBAC9B,KAAA,EAAO,EAAA,CAAG,+BAAA,EAAiC,UAAU,CAAA;AAAA,gBACrD,YAAA,EAAY,EAAA;AAAA,kBACV,+BAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAEA,0BAAAb,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO;AAAA;AAAA,aAChD,EACF;AAAA,WAAA,EAAA,EA9Ca,GAAA,CAAI,EA+CnB,CACD;AAAA,SAAA,EACL;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACC,KAAA,GAAQ,KAAK,MAAA,IAAU,CAAC,2BACvBA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wEAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,oCAAA;AAAA,QACA;AAAA,OACF,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,aAAA;AAAA,QACN,KAAA;AAAA,QACA,GAAA,EAAK,UAAA;AAAA,QACL,YAAA,EAAc,gBAAA;AAAA,QACd,SAAS,YAAY;AACnB,UAAA,MAAM,OAAA,EAAQ;AACd,UAAA,cAAA,EAAe;AAAA,QACjB;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAWoB,WAAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIlB,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,EAAE,QAAQ,KAAA,EAAO,OAAA,EAAS,OAAO,OAAA,EAAQ,GAAI,cAAc,MAAM,CAAA;AACvE,EAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAS,QAAA,KAAa,kBAAA,EAAmB;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAA2B,IAAI,CAAA;AAEvE,EAAA,MAAM,aAAA,GAAgB6B,OAAAA;AAAA,IACpB,MAAM,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,EAAA,KAAO,UAAU,CAAA,IAAK,IAAA;AAAA,IACzD,CAAC,YAAY,MAAM;AAAA,GACrB;AAEA,EAAA5B,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,EAAA,KAAO,UAAU,CAAA,EAAG;AACnE,MAAA,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,CAAE,EAAE,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AAEvB,EAAA,MAAM,OAAA,GAAUC,YAAY,YAAY;AACtC,IAAA,MAAM,OAAA,EAAQ;AAAA,EAChB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,iBAAA,GAAoBA,YAAY,YAAY;AAChD,IAAA,IAAI,CAAC,aAAA,EAAe;AACpB,IAAA,IACE,CAAC,MAAA,CAAO,OAAA;AAAA,MACN,EAAA;AAAA,QACE,0CAAA;AAAA,QACA,CAAA,cAAA,EAAiB,cAAc,IAAI,CAAA,sBAAA;AAAA;AACrC,KACF,EACA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,eAAA,CAAgB,cAAc,EAAE,CAAA;AACtC,MAAAc,KAAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,+BAAA,EAAiC,oBAAoB,CAAC,CAAA;AACvE,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,MAAM,OAAA,EAAQ;AAAA,IAChB,SAASI,MAAAA,EAAO;AACd,MAAAJ,KAAAA,CAAM,KAAA;AAAA,QACJ,sBAAA;AAAA,UACEI,MAAAA;AAAA,UACA,EAAA;AAAA,YACE,oCAAA;AAAA,YACA;AAAA;AACF;AACF,OACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAA,EAAiB,OAAA,EAAS,aAAA,EAAe,EAAE,CAAC,CAAA;AAEhD,EAAA,MAAM,gBAAA,GAAmBlB,WAAAA;AAAA,IACvB,CAAC,KAAA,KAA4B;AAC3B,MAAA,IAAI,KAAA,EAAO,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AACjC,MAAA,KAAK,OAAA,EAAQ;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,CAAC,KAAA,KAAsC;AACrC,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,SAAA,CAAU,WAAW,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,YAC/C,EAAA,CAAG,sCAAsC,eAAe;AAAA,WAAA,EAC3D,CAAA;AAAA,0BACAA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oDACX,QAAA,EAAA,EAAA,CAAG,iCAAA,EAAmC,aAAa,CAAA,EACtD,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,sBAAMA,GAAAA,CAAC,YAAS,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,cAErD,QAAA,EAAA,EAAA;AAAA,gBACC,oCAAA;AAAA,gBACA;AAAA;AACF;AAAA;AACF,SAAA,EACF,CAAA;AAAA,wBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAACY,QAAA,EAAO,OAAA,EAAQ,WAAU,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,4BAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO,CAAA;AAAA,YACrD,EAAA,CAAG,yCAAyC,mBAAmB;AAAA,WAAA,EAClE,CAAA;AAAA,0BACAC,IAAAA;AAAA,YAACY,MAAAA;AAAA,YAAA;AAAA,cACC,SAAS,MAAM;AACb,gBAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,gBAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,cACzB,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAb,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO,CAAA;AAAA,gBAChD,EAAA,CAAG,kCAAkC,gBAAgB;AAAA;AAAA;AAAA;AACxD,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAA,GAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,UAAA,EAAW,aAAA;AAAA,UACX,KAAA,EAAO,EAAA;AAAA,YACL,sCAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL;AAAA,cACE,EAAA,EAAI,QAAA;AAAA,cACJ,KAAA,EAAO,EAAA;AAAA,gBACL,2CAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,WAAA,EAAa,EAAA;AAAA,gBACX,iDAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,sBAAMA,GAAAA,CAAC,QAAK,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,cAClD,SAAS,MAAM;AACb,gBAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,gBAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,cACzB;AAAA,aACF;AAAA,YACA;AAAA,cACE,EAAA,EAAI,SAAA;AAAA,cACJ,KAAA,EAAO,EAAA;AAAA,gBACL,4CAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,WAAA,EAAa,EAAA;AAAA,gBACX,kDAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,sBAAMA,GAAAA,CAAC,UAAO,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,cACpD,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS;AAAA,aACnC;AAAA,YACA;AAAA,cACE,EAAA,EAAI,OAAA;AAAA,cACJ,KAAA,EAAO,EAAA;AAAA,gBACL,0CAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,WAAA,EAAa,EAAA;AAAA,gBACX,gDAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,sBAAMA,GAAAA,CAAC,aAAU,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO;AAAA;AACzD;AACF;AAAA,OACF;AAAA,sBAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAACc,IAAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACd,QAAA,EAAA;AAAA,0BAAAd,IAAAA,CAACe,UAAAA,EAAA,EAAW,SAAA,EAAU,4CAAA,EACpB,QAAA,EAAA;AAAA,4BAAAf,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAACuB,WAAA,EAAU,SAAA,EAAU,aAClB,QAAA,EAAA,EAAA,CAAG,8BAAA,EAAgC,QAAQ,CAAA,EAC9C,CAAA;AAAA,8BACAvB,GAAAA,CAACK,KAAAA,EAAA,EAAM,OAAA,EAAQ,WAAW,QAAA,EAAA,KAAA,EAAM;AAAA,aAAA,EAClC,CAAA;AAAA,4BACAJ,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EAAa,UAAU,YAAA,EACrC,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,0EAAA;AAAA,oBACV,aAAA,EAAY;AAAA;AAAA,iBACd;AAAA,gCACAA,GAAAA;AAAA,kBAACW,KAAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,MAAA;AAAA,oBACV,KAAA,EAAO,WAAA;AAAA,oBACP,UAAU,CAAC,KAAA,KAAU,cAAA,CAAe,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,oBACtD,WAAA,EAAa,EAAA;AAAA,sBACX,8BAAA;AAAA,sBACA;AAAA,qBACF;AAAA,oBACA,YAAA,EAAY,EAAA;AAAA,sBACV,8BAAA;AAAA,sBACA;AAAA;AACF;AAAA;AACF,eAAA,EACF,CAAA;AAAA,8BACAX,GAAAA,CAACa,MAAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAC1C,QAAA,EAAA,EAAA,CAAG,oCAAA,EAAsC,QAAQ,CAAA,EACpD;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BACAZ,IAAAA,CAACkB,WAAAA,EAAA,EAAY,WAAU,KAAA,EACpB,QAAA,EAAA;AAAA,YAAA,OAAA,oBACCnB,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCACV,QAAA,EAAA,EAAA,CAAG,+BAAA,EAAiC,sBAAiB,CAAA,EACxD,CAAA;AAAA,YAED,CAAC,OAAA,IAAW,MAAA,CAAO,MAAA,KAAW,qBAC7BA,GAAAA;AAAA,cAAC,qBAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,MAAA;AAAA,gBACV,YAAA,EAAa,YAAA;AAAA,gBACb,KAAA,EAAO,EAAA;AAAA,kBACL,6BAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,WAAA,EAAa,EAAA;AAAA,kBACX,iCAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,wBACEC,IAAAA;AAAA,kBAACY,MAAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,IAAA;AAAA,oBACL,SAAS,MAAM;AACb,sBAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,sBAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,oBACzB,CAAA;AAAA,oBAEA,QAAA,EAAA;AAAA,sCAAAb,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO,CAAA;AAAA,sBAChD,EAAA;AAAA,wBACC,wCAAA;AAAA,wBACA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,aAEJ;AAAA,YAED,CAAC,OAAA,IACA,MAAA,CAAO,GAAA,CAAI,CAAC,0BACVC,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBAEL,OAAA,EAAS,MAAM,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AAAA,gBACrC,WAAW,CAAA,oGAAA,EACT,UAAA,KAAe,KAAA,CAAM,EAAA,GACjB,6CACA,2EACN,CAAA,CAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EACd,QAAA,EAAA;AAAA,oCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,oCACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,KAAA,CAAM,QAAA;AAAA,sBAAU,GAAA;AAAA,sBAChB,EAAA,CAAG,8BAA8B,MAAM,CAAA;AAAA,sBAAE,OAAA;AAAA,sBAAG,GAAA;AAAA,sBAC5C,MAAM,OAAA,CAAQ,MAAA;AAAA,sBAAQ,GAAA;AAAA,sBACtB,EAAA,CAAG,iCAAiC,SAAS;AAAA,qBAAA,EAChD;AAAA,mBAAA,EACF,CAAA;AAAA,kCACAD,GAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,wBAAA;AAAA,sBACV,aAAA,EAAY;AAAA;AAAA;AACd;AAAA,eAAA;AAAA,cAtBK,KAAA,CAAM;AAAA,aAwBd;AAAA,WAAA,EACL;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,KAAA,IAAS,CAAC,aAAA,oBACTA,IAACe,IAAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,kBAAAd,IAAAA,CAACkB,WAAAA,EAAA,EAAY,WAAU,iCAAA,EACrB,QAAA,EAAA;AAAA,0BAAAnB,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ,CAAA;AAAA,0BAClBC,IAAAA;AAAA,YAACY,MAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,MAAA;AAAA,cACV,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,MAAM,KAAK,OAAA,EAAQ;AAAA,cAE5B,QAAA,EAAA;AAAA,gCAAAb,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO,CAAA;AAAA,gBACrD,EAAA,CAAG,+BAA+B,WAAW;AAAA;AAAA;AAAA;AAChD,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QAGD,CAAC,KAAA,IAAS,CAAC,aAAA,IAAiB,CAAC,2BAC5BA,GAAAA,CAACe,IAAAA,EAAA,EAAK,WAAU,yBAAA,EACd,QAAA,kBAAAd,KAACkB,WAAAA,EAAA,EAAY,WAAU,yEAAA,EACrB,QAAA,EAAA;AAAA,0BAAAnB,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kCAAA;AAAA,cACV,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,EAAA;AAAA,YACC,mCAAA;AAAA,YACA;AAAA,WACF,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,EAAA;AAAA,YACC,yCAAA;AAAA,YACA;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QAGD,aAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAACY,MAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,SAAS,MAAM;AACb,kBAAA,eAAA,CAAgB,aAAa,CAAA;AAC7B,kBAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,gBACzB,CAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAb,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,kBACpD,EAAA,CAAG,mCAAmC,YAAY;AAAA;AAAA;AAAA,aACrD;AAAA,4BACAC,IAAAA;AAAA,cAACY,MAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,iBAAA;AAAA,gBACT,QAAA,EAAU,QAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAb,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,eAAY,MAAA,EAAO,CAAA;AAAA,kBACpD,WACG,EAAA,CAAG,gCAAA,EAAkC,gBAAW,CAAA,GAChD,EAAA,CAAG,qCAAqC,cAAc;AAAA;AAAA;AAAA;AAC5D,WAAA,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAO,aAAA,EAAe,gBAAgB,OAAA,EAAS;AAAA,SAAA,EACjE;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,YAAA;AAAA,QACP,YAAA,EAAc,kBAAA;AAAA,QACd,OAAA,EAAS;AAAA;AAAA;AACX,GAAA,EACF,CAAA;AAEJ;;;ACzqCO,SAAS,wBACdgC,OAAAA,EACmB;AACnB,EAAA,MAAM,kBAAkB,sBAAA,CAAuB;AAAA,IAC7C,eAAeA,OAAAA,CAAO,eAAA;AAAA,IACtB,WAAWA,OAAAA,CAAO,SAAA;AAAA,IAClB,aAAaA,OAAAA,CAAO,WAAA;AAAA,IACpB,UAAUA,OAAAA,CAAO;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,eAAe,uBAAA,CAAwB;AAAA,IAC3C,cAAcA,OAAAA,CAAO,YAAA;AAAA,IACrB,WAAWA,OAAAA,CAAO,SAAA;AAAA,IAClB,aAAaA,OAAAA,CAAO,WAAA;AAAA,IACpB,UAAUA,OAAAA,CAAO,QAAA;AAAA,IACjB,gBAAgBA,OAAAA,CAAO;AAAA,GACxB,CAAA;AAED,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACwDO,IAAM,iBAAA,GAGT;AAAA,EACF,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAS,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,eAAA,EAAiB,SAAS,aAAA,EAAc;AAAA,EAC5E,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,gBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAQ,EAAE,KAAA,EAAO,UAAU,KAAA,EAAO,cAAA,EAAgB,SAAS,YAAA,EAAa;AAAA,EACxE,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,eAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS;AAAA;AAEb;AAEO,IAAM,kBAAA,GAGT;AAAA,EACF,MAAM,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,eAAA,EAAiB,SAAS,aAAA,EAAc;AAAA,EACtE,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAS,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,eAAA,EAAiB,SAAS,aAAA,EAAc;AAAA,EAC5E,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,gBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAO,EAAE,KAAA,EAAO,SAAS,KAAA,EAAO,cAAA,EAAgB,SAAS,YAAA,EAAa;AAAA,EACtE,SAAS,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,eAAA,EAAiB,SAAS,YAAA;AAChE;ACvKA,IAAMX,SAAAA,GAAiBY,MAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACEjC,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,sSAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACAqB,SAAAA,CAAS,WAAA,GAAc,UAAA;ACfvB,SAASa,KAAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoD;AAClD,EAAA,uBACElC,GAAAA;AAAA,IAAe,aAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAASmC,SAAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoD;AAClD,EAAA,uBACEnC,GAAAA;AAAA,IAAe,aAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAASoC,YAAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEpC,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6YAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAASqC,YAAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACErC,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;ACxDA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEC,IAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAqB,mBAAA,CAAA,QAAA;AAAA,UAApB;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,4HAAA;AAAA,YAET;AAAA;AAAA,SACH;AAAA,wBACAA,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXA,GAAAA,CAAqB,mBAAA,CAAA,MAAA,EAApB,EAA2B;AAAA;AAAA;AAAA,GAC9B;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,mBAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,gBAAgB,UAAA,IACd,4CAAA;AAAA,QACF,gBAAgB,YAAA,IACd,8CAAA;AAAA,QACF;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAqB,mBAAA,CAAA,eAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,mBAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ;AChDA,IAAM,SAAA,GAAkBsC,MAAA,CAAA,UAAA;AAAA,EAItB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEAtC,GAAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,GAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA,WAAA,KAAgB,eAAe,gBAAA,GAAmB,gBAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,cAAiC,kBAAA,CAAA,IAAA,CAAK,WAAA;ACpBhD,IAAMuC,OAAAA,GAAyB,eAAA,CAAA;AAE/B,IAAM,WAAA,GAA8B,eAAA,CAAA;AAEpC,IAAMC,YAAAA,GAA8B,eAAA,CAAA;AAEpC,SAASC,cAAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmE;AACjE,EAAA,uBACExC,IAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2cAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDD,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,wBAAA,EAAyB,aAAA,EAAY,QAAO,CAAA,EACrE;AAAA;AAAA;AAAA,GACF;AAEJ;AACAyC,cAAAA,CAAc,cAA8B,eAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,uBACEzC,GAAAA;AAAA,IAAiB,eAAA,CAAA,cAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GAChC;AAEJ;AACA,oBAAA,CAAqB,cAA8B,eAAA,CAAA,cAAA,CAAe,WAAA;AAElE,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4E;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,gBAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GAClC;AAEJ;AACA,sBAAA,CAAuB,cACL,eAAA,CAAA,gBAAA,CAAiB,WAAA;AAEnC,SAAS0C,cAAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX,GAAG;AACL,CAAA,EAAmE;AACjE,EAAA,uBACE1C,GAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACC,QAAA,kBAAAC,IAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,meAAA;AAAA,QACA,aAAa,QAAA,IACX,iIAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,QAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,IAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,GAAAA;AAAA,UAAiB,eAAA,CAAA,QAAA;AAAA,UAAhB;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,KAAA;AAAA,cACA,aAAa,QAAA,IACX;AAAA,aACJ;AAAA,YAEC;AAAA;AAAA,SACH;AAAA,wBACAA,IAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC1B,EACF,CAAA;AAEJ;AACA0C,cAAAA,CAAc,cAA8B,eAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACE1C,GAAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,WAAA,CAAY,cAA8B,eAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,SAAS2C,WAAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgE;AAC9D,EAAA,uBACE1C,IAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qUAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAAA,EACd,0BAAAA,GAAAA,CAAiB,eAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,GAC5B,CAAA,EACF,CAAA;AAAA,wBAEAA,GAAAA,CAAiB,eAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACtC;AAEJ;AACA2C,WAAAA,CAAW,cAA8B,eAAA,CAAA,IAAA,CAAK,WAAA;AAE9C,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqE;AACnE,EAAA,uBACE3C,GAAAA;AAAA,IAAiB,eAAA,CAAA,SAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,eAAA,CAAgB,cAA8B,eAAA,CAAA,SAAA,CAAU,WAAA;AC1JxD,IAAM,YAAA,GAAqC,qBAAA,CAAA;AAE3C,IAAM,mBAAA,GAA4C,qBAAA,CAAA;AAElD,IAAM,iBAAA,GAA0C,qBAAA,CAAA;AAEhD,IAAM,kBAAA,GAA2C,qBAAA,CAAA;AAEjD,IAAM,eAAA,GAAwC,qBAAA,CAAA;AAE9C,IAAM,sBAAA,GAA+C,qBAAA,CAAA;AAErD,IAAM,sBAAA,GAA+B,MAAA,CAAA,UAAA,CAKnC,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3CC,IAAAA;AAAA,EAAuB,qBAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,2BAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACT,sNAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDD,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,gCAAA,EAAiC;AAAA;AAAA;AAC3D,CACD;AACD,sBAAA,CAAuB,cACC,qBAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,sBAAA,GAA+B,kBAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,2BAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACT,qdAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,sBAAA,CAAuB,cACC,qBAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,mBAAA,GAA4B,MAAA,CAAA,UAAA,CAGhC,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1CA,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,OAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,uBAAA;AAAA,IACV,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qdAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,mBAAA,CAAoB,cAAoC,qBAAA,CAAA,OAAA,CAAQ,WAAA;AAEhE,IAAM,gBAAA,GAAyB,MAAA,CAAA,UAAA,CAK7B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,IAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,oBAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACT,sQAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,cAAoC,qBAAA,CAAA,IAAA,CAAK,WAAA;AAE1D,IAAM,wBAAA,GAAiC,MAAA,CAAA,UAAA,CAGrC,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CC,IAAAA;AAAA,EAAuB,qBAAA,CAAA,YAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2QAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,IAAC4C,KAAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,GAC5B,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,wBAAA,CAAyB,cACD,qBAAA,CAAA,YAAA,CAAa,WAAA;AAErC,IAAM,qBAAA,GAA8B,MAAA,CAAA,UAAA,CAGlC,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC3C,IAAAA;AAAA,EAAuB,qBAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2QAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,qBAAA,EAAsB,GAC1C,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,qBAAA,CAAsB,cAAoC,qBAAA,CAAA,SAAA,CAAU,WAAA;AAEpE,IAAM,iBAAA,GAA0B,MAAA,CAAA,UAAA,CAK9B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,KAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,yEAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAAoC,qBAAA,CAAA,KAAA,CAAM,WAAA;AAE5D,IAAM,qBAAA,GAA8B,kBAGlC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,IAC1D,GAAG;AAAA;AACN,CACD;AACD,qBAAA,CAAsB,cAAoC,qBAAA,CAAA,SAAA,CAAU,WAAA;AAEpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA6C;AAC3C,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;ACpLnC,IAAM,QAAA,GAAiB6C,kBAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B7C,GAAAA;AAAA,EAAmB,iBAAA,CAAA,IAAA;AAAA,EAAlB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gTAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA;AAAA,MAAmB,iBAAA,CAAA,SAAA;AAAA,MAAlB;AAAA,QACC,SAAA,EAAW,GAAG,+CAA+C,CAAA;AAAA,QAE7D,QAAA,kBAAAA,GAAAA,CAAC4C,KAAAA,EAAA,EAAM,WAAU,SAAA,EAAU;AAAA;AAAA;AAC7B;AACF,CACD;AACD,QAAA,CAAS,cAAgC,iBAAA,CAAA,IAAA,CAAK,WAAA;ACpB9C,IAAME,OAAAA,GAAeC,kBAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B/C,GAAAA;AAAA,EAAkB,gBAAA,CAAA,IAAA;AAAA,EAAjB;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,oXAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAA;AAAA,IAEA,QAAA,kBAAAA,GAAAA;AAAA,MAAkB,gBAAA,CAAA,KAAA;AAAA,MAAjB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT;AAAA;AACF;AAAA;AACF;AACF,CACD;AACD8C,OAAAA,CAAO,cAA+B,gBAAA,CAAA,IAAA,CAAK,WAAA;ACnB3C,IAAM,OAAA,GAA2B,gBAAA,CAAA;AAEjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAExC,IAAM,iBAAuBE,MAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,OAAM,EAAG,GAAA,qBAC5DhD,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,iBAAA;AAAA,IACV,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,0cAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA","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","/**\n * Query parameters the public `/embed/workflow` viewer honours.\n *\n * There is deliberately no branding parameter: the viewer always shows the\n * \"Powered by FluidGrids\" mark (Burdenoff does no white-labelling). The old\n * `badge=false` parameter is not read, so embeds that still send it keep\n * working and simply show the mark.\n */\nexport interface EmbedParams {\n /** WORKFLOW store product to fetch, or null for postMessage mode. */\n productId: string | null;\n /** Forced theme, or null to keep the visitor's own preference. */\n theme: \"light\" | \"dark\" | null;\n /** Whether to show the \"Use this template\" button (productId mode only). */\n showCta: boolean;\n}\n\nexport function parseEmbedParams(search: string): EmbedParams {\n const params = new URLSearchParams(search);\n return {\n productId: params.get(\"productId\") || null,\n theme: normalizeTheme(params.get(\"theme\")),\n showCta: params.get(\"cta\") !== \"false\",\n };\n}\n\nfunction normalizeTheme(value: string | null): \"light\" | \"dark\" | null {\n return value === \"light\" || value === \"dark\" ? value : null;\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 { FluidGridsMark } from \"../components/shared/FluidGridsMark\";\nimport { parseEmbedParams } from \"./embed-params\";\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 (parsed by `parseEmbedParams`):\n * - `theme=light|dark` — force a theme without touching the visitor's stored\n * preference (attributes are forced, never persisted).\n * - `cta=false` — hide the \"Use this template\" button (productId mode only).\n *\n * Branding: every state of the viewer shows exactly one \"Powered by\n * FluidGrids\" mark — the canvas draws its own once a workflow is loaded, and\n * the loading, error and waiting notes draw one otherwise. Burdenoff does no\n * white-labelling, so no parameter, prop or message hides it; the retired\n * `badge=false` parameter is ignored.\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 {\n productId,\n theme: forcedTheme,\n showCta,\n } = useMemo(() => parseEmbedParams(window.location.search), []);\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 {/* The loaded canvas carries its own FluidGridsMark; every other state\n is a CenteredNote, which draws one — so each state shows exactly\n one mark, and none of them can be switched off. */}\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 {/* Top-left: the FluidGrids mark holds the canvas's top-right corner. */}\n {showCta && openInAppUrl && workflow ? (\n <a\n href={openInAppUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"absolute left-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 </div>\n </ThemeProvider>\n );\n}\n\n/** A full-page status note for the states that have no canvas (and so no\n * canvas mark): it draws the FluidGrids mark itself. */\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 <FluidGridsMark />\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 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","/**\n * Custom hooks for the AI Agent tool-approval inbox (BOFF-7521).\n * Queries/mutates wspace-workflow-svc via the federated GraphQL gateway —\n * mirrors the variables module's hook pattern\n * (`modules/variables/hooks/useVariables.ts`).\n */\nimport { useCallback, useEffect, useState } 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 ToolApprovalStatus =\n \"PENDING\" | \"APPROVED\" | \"REJECTED\" | \"PARTIAL\" | \"TIMED_OUT\";\n\nexport type ToolApprovalTimeoutAction = \"AUTO_REJECT\" | \"AUTO_APPROVE\";\n\nexport type ToolApprovalDecisionValue = \"APPROVED\" | \"REJECTED\";\n\nexport interface PendingToolCall {\n callId: string;\n name: string;\n /** JSON-encoded arguments the agent proposed for this call. */\n argsJson: string;\n}\n\nexport interface ToolApprovalDecisionRecord {\n callId: string;\n decision: ToolApprovalDecisionValue;\n reason?: string | null;\n}\n\nexport interface ToolApprovalRequest {\n id: string;\n runId: string;\n nodeId: string;\n workflowId: string;\n workflowKey: string;\n status: ToolApprovalStatus;\n toolCalls: PendingToolCall[];\n decisions?: ToolApprovalDecisionRecord[] | null;\n timeoutAt?: string | null;\n timeoutAction: ToolApprovalTimeoutAction;\n requestedAt: string;\n decidedAt?: string | null;\n decidedBy?: string | null;\n}\n\nexport interface ToolApprovalDecisionInput {\n callId: string;\n decision: ToolApprovalDecisionValue;\n reason?: string;\n}\n\n// ============================================================================\n// GraphQL\n// ============================================================================\n\nconst TOOL_APPROVAL_FIELDS = gql`\n fragment ToolApprovalRequestFields on ToolApprovalRequest {\n id\n runId\n nodeId\n workflowId\n workflowKey\n status\n toolCalls {\n callId\n name\n argsJson\n }\n decisions {\n callId\n decision\n reason\n }\n timeoutAt\n timeoutAction\n requestedAt\n decidedAt\n decidedBy\n }\n`;\n\nconst GET_PENDING_TOOL_APPROVALS = gql`\n ${TOOL_APPROVAL_FIELDS}\n query GetPendingToolApprovals($limit: Int, $offset: Int) {\n pendingToolApprovals(limit: $limit, offset: $offset) {\n totalCount\n items {\n ...ToolApprovalRequestFields\n }\n }\n }\n`;\n\nconst DECIDE_TOOL_APPROVAL = gql`\n ${TOOL_APPROVAL_FIELDS}\n mutation DecideToolApproval(\n $id: ID!\n $decisions: [ToolApprovalDecisionInput!]!\n ) {\n decideToolApproval(id: $id, decisions: $decisions) {\n success\n error\n resumedFromNodeId\n request {\n ...ToolApprovalRequestFields\n }\n }\n }\n`;\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Polls the pending tool-approval inbox. Short polling interval (not a\n * subscription) — approvals are rare/low-volume and the caller wants a\n * near-real-time inbox without standing up a dedicated subscription channel\n * for a v1 feature.\n */\nexport function usePendingToolApprovals(options?: {\n limit?: number;\n offset?: number;\n pollIntervalMs?: number;\n}) {\n const limit = options?.limit ?? 50;\n const offset = options?.offset ?? 0;\n const pollIntervalMs = options?.pollIntervalMs ?? 15000;\n\n const [items, setItems] = useState<ToolApprovalRequest[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<{\n pendingToolApprovals: {\n totalCount: number;\n items: ToolApprovalRequest[];\n };\n }>({\n query: GET_PENDING_TOOL_APPROVALS,\n variables: { limit, offset },\n fetchPolicy: \"network-only\",\n });\n setItems(result.data?.pendingToolApprovals?.items ?? []);\n setTotalCount(result.data?.pendingToolApprovals?.totalCount ?? 0);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [limit, offset]);\n\n useEffect(() => {\n fetchData();\n if (pollIntervalMs <= 0) return;\n const interval = setInterval(fetchData, pollIntervalMs);\n return () => clearInterval(interval);\n }, [fetchData, pollIntervalMs]);\n\n return { items, totalCount, loading, error, refetch: fetchData };\n}\n\nexport function useDecideToolApproval() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const decide = useCallback(\n async (id: string, decisions: ToolApprovalDecisionInput[]) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<{\n decideToolApproval: {\n success: boolean;\n error: string | null;\n resumedFromNodeId: string | null;\n request: ToolApprovalRequest | null;\n };\n }>({\n mutation: DECIDE_TOOL_APPROVAL,\n variables: { id, decisions },\n }),\n );\n const response = result.data?.decideToolApproval;\n if (!response?.success) {\n throw new Error(response?.error ?? \"Failed to record the decision\");\n }\n return response;\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n /** Convenience: approve or reject every proposed call in one batch. */\n const decideAll = useCallback(\n async (\n request: Pick<ToolApprovalRequest, \"id\" | \"toolCalls\">,\n decision: ToolApprovalDecisionValue,\n reason?: string,\n ) => {\n return decide(\n request.id,\n request.toolCalls.map((call) => ({\n callId: call.callId,\n decision,\n reason,\n })),\n );\n },\n [decide],\n );\n\n return { decide, decideAll, loading, error };\n}\n","/**\n * Tool Approval Inbox (BOFF-7521)\n *\n * Human-in-the-loop gate for AI Agent tool calls: lists every run currently\n * paused waiting for a decision, shows the proposed tool call(s) and their\n * arguments, and lets the reviewer approve or reject the whole batch (or, in\n * a future iteration, individual calls). Approving/rejecting resumes the\n * underlying run via `decideToolApproval`, which reuses the exact same\n * WAITING/`resumeWorkflowRun` mechanism the Wait node uses.\n */\nimport { useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Card,\n CardContent,\n CardHeader,\n Badge,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n Textarea,\n Label,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr, type Translator } from \"../../../hooks/useTr\";\nimport {\n usePendingToolApprovals,\n useDecideToolApproval,\n type ToolApprovalRequest,\n type ToolApprovalDecisionValue,\n} from \"../hooks/useToolApprovals\";\n\nfunction formatArgs(argsJson: string): string {\n try {\n return JSON.stringify(JSON.parse(argsJson), null, 2);\n } catch {\n return argsJson;\n }\n}\n\nfunction timeAgo(iso: string, tr: Translator): string {\n const then = new Date(iso).getTime();\n const diffMs = Date.now() - then;\n const minutes = Math.floor(diffMs / 60000);\n if (minutes < 1) return tr(\"fluidgrids.toolApproval.justNow\", \"just now\");\n if (minutes < 60)\n return tr(\"fluidgrids.toolApproval.minutesAgo\", \"{{minutes}}m ago\", {\n minutes,\n });\n const hours = Math.floor(minutes / 60);\n if (hours < 24)\n return tr(\"fluidgrids.toolApproval.hoursAgo\", \"{{hours}}h ago\", { hours });\n const days = Math.floor(hours / 24);\n return tr(\"fluidgrids.toolApproval.daysAgo\", \"{{days}}d ago\", { days });\n}\n\n// ============================================================================\n// Reject reason dialog\n// ============================================================================\n\ninterface RejectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirm: (reason: string) => void;\n submitting: boolean;\n}\n\nfunction RejectDialog({\n open,\n onOpenChange,\n onConfirm,\n submitting,\n}: RejectDialogProps) {\n const tr = useTr();\n const [reason, setReason] = useState(\"\");\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {tr(\n \"fluidgrids.toolApproval.rejectDialogTitle\",\n \"Reject tool call\",\n )}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"reject-reason\">\n {tr(\n \"fluidgrids.toolApproval.rejectReasonLabel\",\n \"Reason (optional)\",\n )}\n </Label>\n <Textarea\n id=\"reject-reason\"\n value={reason}\n onChange={(e) => setReason(e.target.value)}\n placeholder={tr(\n \"fluidgrids.toolApproval.rejectReasonPlaceholder\",\n \"Why is this call being rejected? The agent sees this.\",\n )}\n />\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {tr(\"fluidgrids.toolApproval.cancel\", \"Cancel\")}\n </Button>\n <Button\n variant=\"destructive\"\n onClick={() => onConfirm(reason)}\n disabled={submitting}\n >\n {submitting\n ? tr(\"fluidgrids.toolApproval.rejecting\", \"Rejecting…\")\n : tr(\"fluidgrids.toolApproval.rejectConfirm\", \"Reject\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// One pending request card\n// ============================================================================\n\ninterface RequestCardProps {\n request: ToolApprovalRequest;\n onDecided: () => void;\n}\n\nfunction RequestCard({ request, onDecided }: RequestCardProps) {\n const tr = useTr();\n const { decideAll, loading } = useDecideToolApproval();\n const [showReject, setShowReject] = useState(false);\n\n const handleDecide = async (\n decision: ToolApprovalDecisionValue,\n reason?: string,\n ) => {\n try {\n await decideAll(request, decision, reason);\n toast.success(\n decision === \"APPROVED\"\n ? tr(\n \"fluidgrids.toolApproval.approvedToast\",\n \"Tool call approved — run resumed\",\n )\n : tr(\n \"fluidgrids.toolApproval.rejectedToast\",\n \"Tool call rejected — run resumed\",\n ),\n );\n setShowReject(false);\n onDecided();\n } catch (err) {\n toast.error(\n err instanceof Error\n ? err.message\n : tr(\n \"fluidgrids.toolApproval.decisionFailed\",\n \"Failed to record the decision\",\n ),\n );\n }\n };\n\n return (\n <Card\n className=\"border border-border-secondary bg-background-secondary\"\n data-testid=\"tool-approval-card\"\n data-request-id={request.id}\n >\n <CardHeader className=\"pb-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:robot-outline\"\n width={18}\n className=\"text-text-secondary\"\n />\n <span className=\"text-sm font-semibold text-text-primary\">\n {tr(\"fluidgrids.toolApproval.nodeLabel\", \"Node\")}:{\" \"}\n {request.nodeId}\n </span>\n </div>\n <Badge variant=\"outline\" className=\"font-mono text-[10px]\">\n {request.workflowKey}\n </Badge>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.toolApproval.requestedAt\", \"Requested {{when}}\", {\n when: timeAgo(request.requestedAt, tr),\n })}\n {request.timeoutAt &&\n ` · ${tr(\n \"fluidgrids.toolApproval.autoResolvesAt\",\n \"auto-resolves at {{time}}\",\n {\n time: new Date(request.timeoutAt).toLocaleString(),\n },\n )}`}\n </p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {request.toolCalls.map((call) => (\n <div\n key={call.callId}\n className=\"rounded-md border border-border-secondary bg-background-primary p-3\"\n >\n <div className=\"mb-1 flex items-center gap-2\">\n <Icon\n icon=\"mdi:function-variant\"\n width={14}\n className=\"text-text-secondary\"\n />\n <span className=\"text-sm font-medium text-text-primary\">\n {call.name}\n </span>\n </div>\n <pre className=\"overflow-x-auto whitespace-pre-wrap break-all text-xs text-text-secondary\">\n {formatArgs(call.argsJson)}\n </pre>\n </div>\n ))}\n\n <div className=\"flex items-center gap-2 pt-1\">\n <Button\n size=\"sm\"\n disabled={loading}\n onClick={() => handleDecide(\"APPROVED\")}\n data-testid=\"tool-approval-approve\"\n >\n <Icon icon=\"mdi:check\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.toolApproval.approve\", \"Approve\")}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={loading}\n onClick={() => setShowReject(true)}\n data-testid=\"tool-approval-reject\"\n >\n <Icon icon=\"mdi:close\" className=\"mr-1.5\" width={16} />\n {tr(\"fluidgrids.toolApproval.reject\", \"Reject\")}\n </Button>\n </div>\n </CardContent>\n\n <RejectDialog\n open={showReject}\n onOpenChange={setShowReject}\n submitting={loading}\n onConfirm={(reason) => handleDecide(\"REJECTED\", reason || undefined)}\n />\n </Card>\n );\n}\n\n// ============================================================================\n// Main page\n// ============================================================================\n\nexport function ApprovalInboxPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const { items, totalCount, loading, error, refetch } =\n usePendingToolApprovals();\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.toolApproval.pageTitle\", \"Tool Approvals\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.toolApproval.pageSubtitle\",\n \"AI Agent tool calls waiting for a human decision before they run\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../runs\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.toolApproval.backToRuns\", \"Back to Runs\")}\n </Button>\n </div>\n\n {loading && items.length === 0 && (\n <p className=\"text-text-secondary text-sm\">\n {tr(\"fluidgrids.toolApproval.loading\", \"Loading…\")}\n </p>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {tr(\n \"fluidgrids.toolApproval.loadFailed\",\n \"Failed to load pending approvals: {{message}}\",\n {\n message: error.message,\n },\n )}\n </p>\n )}\n\n {!loading && !error && items.length === 0 && (\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardContent className=\"flex flex-col items-center gap-2 py-10 text-center\">\n <Icon\n icon=\"mdi:shield-check-outline\"\n width={32}\n className=\"text-text-secondary\"\n />\n <p className=\"text-sm font-medium text-text-primary\">\n {tr(\n \"fluidgrids.toolApproval.emptyTitle\",\n \"Nothing waiting for approval\",\n )}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.toolApproval.emptySubtitle\",\n \"Runs will appear here when an AI Agent with tool approval enabled proposes a tool call.\",\n )}\n </p>\n </CardContent>\n </Card>\n )}\n\n {items.length > 0 && (\n <div\n className=\"mb-3 text-xs text-text-secondary\"\n data-testid=\"tool-approval-count\"\n >\n {tr(\n \"fluidgrids.toolApproval.count\",\n \"{{count}} pending ({{total}} total)\",\n {\n count: items.length,\n total: totalCount,\n },\n )}\n </div>\n )}\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {items.map((request) => (\n <RequestCard key={request.id} request={request} onDecided={refetch} />\n ))}\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { gql } from \"@apollo/client\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n describeOperationError,\n throwIfResultError,\n} from \"../../../graphql/errors\";\n\nexport type DataTableColumnType =\n \"STRING\" | \"NUMBER\" | \"BOOLEAN\" | \"DATE\" | \"JSON\";\n\nexport interface DataTableColumn {\n key: string;\n label: string;\n type: DataTableColumnType;\n required: boolean;\n defaultValue?: unknown;\n}\n\nexport interface DataTable {\n id: string;\n workspaceId: string;\n name: string;\n description?: string | null;\n columns: DataTableColumn[];\n rowCount: number;\n sizeBytes: number;\n createdAt: string;\n updatedAt: string;\n createdBy: string;\n updatedBy?: string | null;\n}\n\nexport interface DataTableRow {\n id: string;\n tableId: string;\n data: Record<string, unknown>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface DataTableColumnInput {\n key: string;\n label: string;\n type: DataTableColumnType;\n required?: boolean;\n defaultValue?: unknown;\n}\n\nexport interface CreateDataTableInput {\n name: string;\n description?: string;\n columns: DataTableColumnInput[];\n}\n\nexport interface UpdateDataTableInput {\n name?: string;\n description?: string;\n columns?: DataTableColumnInput[];\n}\n\nconst DATA_TABLE_FIELDS = gql`\n fragment DataTableFields on DataTable {\n id\n workspaceId\n name\n description\n columns {\n key\n label\n type\n required\n defaultValue\n }\n rowCount\n sizeBytes\n createdAt\n updatedAt\n createdBy\n updatedBy\n }\n`;\n\nconst DATA_TABLE_ROW_FIELDS = gql`\n fragment DataTableRowFields on DataTableRow {\n id\n tableId\n data\n createdAt\n updatedAt\n }\n`;\n\nconst GET_DATA_TABLES = gql`\n ${DATA_TABLE_FIELDS}\n query GetDataTables($search: String, $limit: Int, $offset: Int) {\n dataTables(search: $search, limit: $limit, offset: $offset) {\n tables {\n ...DataTableFields\n }\n total\n }\n }\n`;\n\nconst GET_DATA_TABLE_ROWS = gql`\n ${DATA_TABLE_ROW_FIELDS}\n query GetDataTableRows($input: DataTableRowsQueryInput!) {\n dataTableRows(input: $input) {\n rows {\n ...DataTableRowFields\n }\n total\n }\n }\n`;\n\nconst CREATE_DATA_TABLE = gql`\n ${DATA_TABLE_FIELDS}\n mutation CreateDataTable($input: CreateDataTableInput!) {\n createDataTable(input: $input) {\n success\n message\n table {\n ...DataTableFields\n }\n }\n }\n`;\n\nconst UPDATE_DATA_TABLE = gql`\n ${DATA_TABLE_FIELDS}\n mutation UpdateDataTable($id: ID!, $input: UpdateDataTableInput!) {\n updateDataTable(id: $id, input: $input) {\n success\n message\n table {\n ...DataTableFields\n }\n }\n }\n`;\n\nconst DELETE_DATA_TABLE = gql`\n mutation DeleteDataTable($id: ID!) {\n deleteDataTable(id: $id) {\n success\n message\n }\n }\n`;\n\nconst INSERT_DATA_TABLE_ROW = gql`\n ${DATA_TABLE_ROW_FIELDS}\n mutation InsertDataTableRow($tableId: ID!, $data: JSON!) {\n insertDataTableRow(tableId: $tableId, data: $data) {\n success\n message\n row {\n ...DataTableRowFields\n }\n }\n }\n`;\n\nconst UPDATE_DATA_TABLE_ROW = gql`\n ${DATA_TABLE_ROW_FIELDS}\n mutation UpdateDataTableRow($id: ID!, $data: JSON!) {\n updateDataTableRow(id: $id, data: $data) {\n success\n message\n row {\n ...DataTableRowFields\n }\n }\n }\n`;\n\nconst DELETE_DATA_TABLE_ROWS = gql`\n mutation DeleteDataTableRows($tableId: ID!, $ids: [ID!]!) {\n deleteDataTableRows(tableId: $tableId, ids: $ids) {\n success\n message\n affected\n }\n }\n`;\n\ninterface DataTablesQuery {\n dataTables: {\n tables: DataTable[];\n total: number;\n };\n}\n\ninterface DataTableRowsQuery {\n dataTableRows: {\n rows: Array<{\n id: string;\n tableId: string;\n data: unknown;\n createdAt: string;\n updatedAt: string;\n }>;\n total: number;\n };\n}\n\ninterface DataTableMutationResponse {\n success: boolean;\n message: string;\n table?: DataTable | null;\n}\n\ninterface DataTableRowMutationResponse {\n success: boolean;\n message: string;\n row?: {\n id: string;\n tableId: string;\n data: unknown;\n createdAt: string;\n updatedAt: string;\n } | null;\n}\n\nfunction toRow(\n row: DataTableRowsQuery[\"dataTableRows\"][\"rows\"][number],\n): DataTableRow {\n return {\n id: row.id,\n tableId: row.tableId,\n data: toRecord(row.data),\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> {\n // JSON scalars are objects at runtime for valid Data Table rows; keep an\n // invalid server response from crashing the table page if it ever occurs.\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction operationError(error: unknown, fallback: string): Error {\n return new Error(describeOperationError(error, fallback));\n}\n\nexport function useDataTables(search?: string) {\n const [tables, setTables] = useState<DataTable[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchTables = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataTablesQuery>({\n query: GET_DATA_TABLES,\n variables: {\n search: search?.trim() || undefined,\n limit: 200,\n offset: 0,\n },\n fetchPolicy: \"network-only\",\n }),\n );\n setTables(result.data?.dataTables.tables ?? []);\n setTotal(result.data?.dataTables.total ?? 0);\n } catch (err) {\n setError(operationError(err, \"Failed to load data tables\"));\n } finally {\n setLoading(false);\n }\n }, [search]);\n\n useEffect(() => {\n void fetchTables();\n }, [fetchTables]);\n\n return { tables, total, loading, error, refetch: fetchTables };\n}\n\nexport function useDataTableRows(tableId: string | null) {\n const [rows, setRows] = useState<DataTableRow[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRows = useCallback(async () => {\n if (!tableId) {\n setRows([]);\n setTotal(0);\n setLoading(false);\n setError(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataTableRowsQuery>({\n query: GET_DATA_TABLE_ROWS,\n variables: { input: { tableId, limit: 5000, offset: 0 } },\n fetchPolicy: \"network-only\",\n }),\n );\n const response = result.data?.dataTableRows;\n setRows(response?.rows.map(toRow) ?? []);\n setTotal(response?.total ?? 0);\n } catch (err) {\n setError(operationError(err, \"Failed to load data table rows\"));\n } finally {\n setLoading(false);\n }\n }, [tableId]);\n\n useEffect(() => {\n void fetchRows();\n }, [fetchRows]);\n\n return { rows, total, loading, error, refetch: fetchRows };\n}\n\nexport function useCreateDataTable() {\n const [loading, setLoading] = useState(false);\n\n const createDataTable = useCallback(async (input: CreateDataTableInput) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n createDataTable: DataTableMutationResponse;\n }>({ mutation: CREATE_DATA_TABLE, variables: { input } }),\n );\n const response = result.data?.createDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to create data table\");\n }\n return response.table ?? null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { createDataTable, loading };\n}\n\nexport function useUpdateDataTable() {\n const [loading, setLoading] = useState(false);\n\n const updateDataTable = useCallback(\n async (id: string, input: UpdateDataTableInput) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n updateDataTable: DataTableMutationResponse;\n }>({ mutation: UPDATE_DATA_TABLE, variables: { id, input } }),\n );\n const response = result.data?.updateDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to update data table\");\n }\n return response.table ?? null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateDataTable, loading };\n}\n\nexport function useDeleteDataTable() {\n const [loading, setLoading] = useState(false);\n\n const deleteDataTable = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n deleteDataTable: { success: boolean; message: string };\n }>({ mutation: DELETE_DATA_TABLE, variables: { id } }),\n );\n const response = result.data?.deleteDataTable;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to delete data table\");\n }\n return true;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deleteDataTable, loading };\n}\n\nexport function useInsertDataTableRow() {\n const [loading, setLoading] = useState(false);\n\n const insertDataTableRow = useCallback(\n async (tableId: string, data: Record<string, unknown>) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n insertDataTableRow: DataTableRowMutationResponse;\n }>({\n mutation: INSERT_DATA_TABLE_ROW,\n variables: { tableId, data },\n }),\n );\n const response = result.data?.insertDataTableRow;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to insert row\");\n }\n return response.row ? toRow(response.row) : null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { insertDataTableRow, loading };\n}\n\nexport function useUpdateDataTableRow() {\n const [loading, setLoading] = useState(false);\n\n const updateDataTableRow = useCallback(\n async (id: string, data: Record<string, unknown>) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n updateDataTableRow: DataTableRowMutationResponse;\n }>({ mutation: UPDATE_DATA_TABLE_ROW, variables: { id, data } }),\n );\n const response = result.data?.updateDataTableRow;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to update row\");\n }\n return response.row ? toRow(response.row) : null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { updateDataTableRow, loading };\n}\n\nexport function useDeleteDataTableRows() {\n const [loading, setLoading] = useState(false);\n\n const deleteDataTableRows = useCallback(\n async (tableId: string, ids: string[]) => {\n setLoading(true);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<{\n deleteDataTableRows: {\n success: boolean;\n message: string;\n affected: number;\n };\n }>({\n mutation: DELETE_DATA_TABLE_ROWS,\n variables: { tableId, ids },\n }),\n );\n const response = result.data?.deleteDataTableRows;\n if (!response?.success) {\n throw new Error(response?.message || \"Failed to delete rows\");\n }\n return response.affected;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return { deleteDataTableRows, loading };\n}\n","import type {\n DataTableColumn,\n DataTableColumnType,\n} from \"../hooks/useDataTables\";\n\n/** Parse RFC 4180-style CSV while preserving quoted commas and line breaks. */\nexport function parseCsv(text: string): string[][] {\n const rows: string[][] = [];\n let row: string[] = [];\n let cell = \"\";\n let quoted = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const character = text[index];\n const next = text[index + 1];\n\n if (quoted) {\n if (character === '\"' && next === '\"') {\n cell += '\"';\n index += 1;\n } else if (character === '\"') {\n quoted = false;\n } else {\n cell += character;\n }\n continue;\n }\n\n if (character === '\"' && cell.length === 0) {\n quoted = true;\n } else if (character === \",\") {\n row.push(cell);\n cell = \"\";\n } else if (character === \"\\n\" || character === \"\\r\") {\n if (character === \"\\r\" && next === \"\\n\") index += 1;\n row.push(cell);\n cell = \"\";\n if (row.some((value) => value.length > 0)) rows.push(row);\n row = [];\n } else {\n cell += character;\n }\n }\n\n if (quoted) {\n throw new Error(\"CSV contains an unterminated quoted value\");\n }\n\n if (cell.length > 0 || row.length > 0) {\n row.push(cell);\n if (row.some((value) => value.length > 0)) rows.push(row);\n }\n\n return rows;\n}\n\nfunction parseValue(value: string, type: DataTableColumnType): unknown {\n if (value === \"\") {\n return type === \"STRING\" ? \"\" : null;\n }\n\n switch (type) {\n case \"NUMBER\": {\n const parsed = Number(value);\n if (!Number.isFinite(parsed))\n throw new Error(`Expected a number, got \"${value}\"`);\n return parsed;\n }\n case \"BOOLEAN\": {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n throw new Error(`Expected true or false, got \"${value}\"`);\n }\n case \"JSON\":\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(`Expected valid JSON, got \"${value}\"`);\n }\n case \"DATE\":\n case \"STRING\":\n return value;\n }\n}\n\n/** Convert a CSV whose first row contains column keys into validated row data. */\nexport function csvToRows(\n text: string,\n columns: DataTableColumn[],\n): Record<string, unknown>[] {\n const parsed = parseCsv(text);\n if (parsed.length < 2) return [];\n\n const headers = parsed[0].map((header) => header.trim());\n const columnByKey = new Map(columns.map((column) => [column.key, column]));\n const seen = new Set<string>();\n\n for (const header of headers) {\n if (!header || seen.has(header)) {\n throw new Error(\"CSV must have unique, non-empty column headers\");\n }\n if (!columnByKey.has(header)) {\n throw new Error(`CSV contains an unknown column \"${header}\"`);\n }\n seen.add(header);\n }\n\n return parsed.slice(1).map((values, rowIndex) => {\n const row: Record<string, unknown> = {};\n headers.forEach((header, columnIndex) => {\n const column = columnByKey.get(header);\n if (!column) return;\n const rawValue = values[columnIndex] ?? \"\";\n try {\n row[header] = parseValue(rawValue, column.type);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid value\";\n throw new Error(`Row ${rowIndex + 2}, ${column.label}: ${message}`);\n }\n });\n return row;\n });\n}\n\nfunction csvCell(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n const text =\n typeof value === \"object\" ? JSON.stringify(value) : String(value);\n return /[\",\\r\\n]/.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n}\n\n/** Serialize table rows with a stable header matching the table schema. */\nexport function rowsToCsv(\n columns: DataTableColumn[],\n rows: Array<{ data: Record<string, unknown> }>,\n): string {\n const header = columns.map((column) => csvCell(column.key)).join(\",\");\n const values = rows.map((row) =>\n columns.map((column) => csvCell(row.data[column.key])).join(\",\"),\n );\n return [header, ...values].join(\"\\r\\n\");\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FormEvent,\n} from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n ArrowDownToLine,\n ArrowLeft,\n ArrowUpFromLine,\n Database,\n Pencil,\n Plus,\n RefreshCw,\n Search,\n Table2,\n Trash2,\n} from \"lucide-react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n IllustratedEmptyState,\n Input,\n Label,\n NextSteps,\n PagePurpose,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Textarea,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { describeOperationError } from \"../../../graphql/errors\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n useCreateDataTable,\n useDataTableRows,\n useDataTables,\n useDeleteDataTable,\n useDeleteDataTableRows,\n useInsertDataTableRow,\n useUpdateDataTable,\n useUpdateDataTableRow,\n type DataTable,\n type DataTableColumnInput,\n type DataTableColumnType,\n type DataTableRow,\n} from \"../hooks/useDataTables\";\nimport { csvToRows, rowsToCsv } from \"../utils/csv\";\n\nconst COLUMN_TYPES: DataTableColumnType[] = [\n \"STRING\",\n \"NUMBER\",\n \"BOOLEAN\",\n \"DATE\",\n \"JSON\",\n];\n\nfunction emptyColumn(index: number): DataTableColumnInput {\n return {\n key: `column_${index}`,\n label: `Column ${index}`,\n type: \"STRING\",\n required: false,\n };\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null || value === undefined) return \"—\";\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nfunction columnTypeLabel(type: DataTableColumnType): string {\n return type === \"JSON\" ? \"JSON\" : type[0] + type.slice(1).toLowerCase();\n}\n\nfunction asFormValue(value: unknown, type: DataTableColumnType): string {\n if (value === null || value === undefined) return \"\";\n if (type === \"JSON\") return JSON.stringify(value, null, 2);\n return String(value);\n}\n\nfunction parseFormValue(value: string, type: DataTableColumnType): unknown {\n if (type === \"STRING\" || type === \"DATE\") return value;\n if (value.trim() === \"\") return null;\n if (type === \"NUMBER\") {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new Error(`\"${value}\" is not a number`);\n return number;\n }\n if (type === \"BOOLEAN\") {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new Error(\"Boolean values must be true or false\");\n }\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(\"JSON values must contain valid JSON\");\n }\n}\n\ninterface TableFormDialogProps {\n open: boolean;\n table: DataTable | null;\n onOpenChange: (open: boolean) => void;\n onSaved: (table: DataTable | null) => void;\n}\n\nfunction TableFormDialog({\n open,\n table,\n onOpenChange,\n onSaved,\n}: TableFormDialogProps) {\n const tr = useTr();\n const { createDataTable, loading: creating } = useCreateDataTable();\n const { updateDataTable, loading: updating } = useUpdateDataTable();\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [columns, setColumns] = useState<DataTableColumnInput[]>([]);\n const editing = table !== null;\n const saving = creating || updating;\n\n useEffect(() => {\n if (!open) return;\n setName(table?.name ?? \"\");\n setDescription(table?.description ?? \"\");\n setColumns(\n table?.columns.map((column) => ({\n key: column.key,\n label: column.label,\n type: column.type,\n required: column.required,\n ...(column.defaultValue !== undefined\n ? { defaultValue: column.defaultValue }\n : {}),\n })) ?? [emptyColumn(1)],\n );\n }, [open, table]);\n\n const updateColumn = useCallback(\n (index: number, patch: Partial<DataTableColumnInput>) => {\n setColumns((current) =>\n current.map((column, columnIndex) =>\n columnIndex === index ? { ...column, ...patch } : column,\n ),\n );\n },\n [],\n );\n\n const handleSubmit = useCallback(async () => {\n const trimmedName = name.trim();\n if (!trimmedName) {\n toast.error(\n tr(\"fluidgrids.dataTables.nameRequired\", \"Table name is required\"),\n );\n return;\n }\n if (\n columns.length === 0 ||\n columns.some((column) => !column.key.trim() || !column.label.trim())\n ) {\n toast.error(\n tr(\n \"fluidgrids.dataTables.columnsRequired\",\n \"Add at least one column with a key and label\",\n ),\n );\n return;\n }\n\n const normalizedColumns = columns.map((column) => ({\n ...column,\n key: column.key.trim(),\n label: column.label.trim(),\n }));\n const keys = new Set(normalizedColumns.map((column) => column.key));\n if (keys.size !== normalizedColumns.length) {\n toast.error(\n tr(\"fluidgrids.dataTables.uniqueKeys\", \"Column keys must be unique\"),\n );\n return;\n }\n\n try {\n const saved = editing\n ? await updateDataTable(table.id, {\n name: trimmedName,\n description: description.trim() || undefined,\n columns: normalizedColumns,\n })\n : await createDataTable({\n name: trimmedName,\n description: description.trim() || undefined,\n columns: normalizedColumns,\n });\n toast.success(\n editing\n ? tr(\"fluidgrids.dataTables.updated\", \"Data table updated\")\n : tr(\"fluidgrids.dataTables.created\", \"Data table created\"),\n );\n onSaved(saved);\n onOpenChange(false);\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.saveFailed\", \"Failed to save data table\"),\n ),\n );\n }\n }, [\n columns,\n createDataTable,\n description,\n editing,\n name,\n onOpenChange,\n onSaved,\n table,\n tr,\n updateDataTable,\n ]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] max-w-3xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editing\n ? tr(\"fluidgrids.dataTables.editTable\", \"Edit data table\")\n : tr(\"fluidgrids.dataTables.newTable\", \"New data table\")}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-5 py-2\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"data-table-name\">\n {tr(\"fluidgrids.dataTables.name\", \"Name\")}\n </Label>\n <Input\n id=\"data-table-name\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"contacts\"\n autoFocus\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"data-table-description\">\n {tr(\"fluidgrids.dataTables.description\", \"Description\")}\n </Label>\n <Input\n id=\"data-table-description\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder={tr(\n \"fluidgrids.dataTables.descriptionPlaceholder\",\n \"Optional\",\n )}\n />\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\"fluidgrids.dataTables.columns\", \"Columns\")}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.columnsHint\",\n \"Column keys are used by workflow nodes and must be unique.\",\n )}\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n setColumns((current) => [\n ...current,\n emptyColumn(current.length + 1),\n ])\n }\n >\n <Plus className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.addColumn\", \"Add column\")}\n </Button>\n </div>\n\n <div className=\"space-y-2\">\n {columns.map((column, index) => (\n <div\n className=\"grid gap-2 rounded-md border border-border-secondary p-3 sm:grid-cols-[1fr_1fr_8rem_auto] sm:items-end\"\n key={`${column.key}-${index}`}\n >\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-key-${index}`}>\n {tr(\"fluidgrids.dataTables.key\", \"Key\")}\n </Label>\n <Input\n id={`data-table-column-key-${index}`}\n value={column.key}\n onChange={(event) =>\n updateColumn(index, { key: event.target.value })\n }\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-label-${index}`}>\n {tr(\"fluidgrids.dataTables.label\", \"Label\")}\n </Label>\n <Input\n id={`data-table-column-label-${index}`}\n value={column.label}\n onChange={(event) =>\n updateColumn(index, { label: event.target.value })\n }\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor={`data-table-column-type-${index}`}>\n {tr(\"fluidgrids.dataTables.type\", \"Type\")}\n </Label>\n <select\n id={`data-table-column-type-${index}`}\n className=\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-text-primary\"\n value={column.type}\n onChange={(event) =>\n updateColumn(index, {\n type: event.target.value as DataTableColumnType,\n })\n }\n >\n {COLUMN_TYPES.map((type) => (\n <option key={type} value={type}>\n {columnTypeLabel(type)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex items-center gap-2 pb-2 sm:flex-col sm:items-center sm:gap-1\">\n <label className=\"flex items-center gap-2 text-xs text-text-secondary\">\n <input\n type=\"checkbox\"\n checked={column.required ?? false}\n onChange={(event) =>\n updateColumn(index, {\n required: event.target.checked,\n })\n }\n />\n {tr(\"fluidgrids.dataTables.required\", \"Required\")}\n </label>\n <button\n type=\"button\"\n className=\"rounded p-1 text-text-secondary hover:bg-background-tertiary hover:text-text-primary disabled:opacity-40\"\n onClick={() =>\n setColumns((current) =>\n current.filter(\n (_, columnIndex) => columnIndex !== index,\n ),\n )\n }\n disabled={columns.length === 1}\n title={tr(\n \"fluidgrids.dataTables.removeColumn\",\n \"Remove column\",\n )}\n aria-label={tr(\n \"fluidgrids.dataTables.removeColumn\",\n \"Remove column\",\n )}\n >\n <Trash2 className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.dataTables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={saving}>\n {saving\n ? tr(\"fluidgrids.dataTables.saving\", \"Saving…\")\n : tr(\"fluidgrids.dataTables.save\", \"Save table\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\ninterface RowFormDialogProps {\n open: boolean;\n table: DataTable | null;\n row: DataTableRow | null;\n onOpenChange: (open: boolean) => void;\n onSaved: () => void;\n}\n\nfunction RowFormDialog({\n open,\n table,\n row,\n onOpenChange,\n onSaved,\n}: RowFormDialogProps) {\n const tr = useTr();\n const { insertDataTableRow, loading: inserting } = useInsertDataTableRow();\n const { updateDataTableRow, loading: updating } = useUpdateDataTableRow();\n const [values, setValues] = useState<Record<string, string>>({});\n const editing = row !== null;\n const saving = inserting || updating;\n\n useEffect(() => {\n if (!open || !table) return;\n const next: Record<string, string> = {};\n for (const column of table.columns) {\n next[column.key] = asFormValue(row?.data[column.key], column.type);\n }\n setValues(next);\n }, [open, row, table]);\n\n const handleSubmit = useCallback(async () => {\n if (!table) return;\n try {\n const data: Record<string, unknown> = {};\n for (const column of table.columns) {\n const value = values[column.key] ?? \"\";\n if (column.required && value.trim() === \"\") {\n throw new Error(`${column.label} is required`);\n }\n data[column.key] = parseFormValue(value, column.type);\n }\n if (editing && row) {\n await updateDataTableRow(row.id, data);\n } else {\n await insertDataTableRow(table.id, data);\n }\n toast.success(\n editing\n ? tr(\"fluidgrids.dataTables.rowUpdated\", \"Row updated\")\n : tr(\"fluidgrids.dataTables.rowCreated\", \"Row added\"),\n );\n onSaved();\n onOpenChange(false);\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.rowSaveFailed\", \"Failed to save row\"),\n ),\n );\n }\n }, [\n editing,\n insertDataTableRow,\n onOpenChange,\n onSaved,\n row,\n table,\n tr,\n updateDataTableRow,\n values,\n ]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] max-w-2xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editing\n ? tr(\"fluidgrids.dataTables.editRow\", \"Edit row\")\n : tr(\"fluidgrids.dataTables.addRow\", \"Add row\")}\n </DialogTitle>\n </DialogHeader>\n {table && (\n <div className=\"space-y-4 py-2\">\n {table.columns.map((column) => (\n <div className=\"space-y-1.5\" key={column.key}>\n <Label htmlFor={`data-table-row-${column.key}`}>\n {column.label}\n <span className=\"ml-1 text-xs text-text-secondary\">\n ({column.key} · {columnTypeLabel(column.type)})\n </span>\n {column.required && (\n <span className=\"ml-1 text-text-secondary\">*</span>\n )}\n </Label>\n {column.type === \"JSON\" ? (\n <Textarea\n id={`data-table-row-${column.key}`}\n value={values[column.key] ?? \"\"}\n onChange={(event) =>\n setValues((current) => ({\n ...current,\n [column.key]: event.target.value,\n }))\n }\n rows={4}\n placeholder=\"{ }\"\n />\n ) : (\n <Input\n id={`data-table-row-${column.key}`}\n type={\n column.type === \"NUMBER\"\n ? \"number\"\n : column.type === \"DATE\"\n ? \"datetime-local\"\n : \"text\"\n }\n value={values[column.key] ?? \"\"}\n onChange={(event) =>\n setValues((current) => ({\n ...current,\n [column.key]: event.target.value,\n }))\n }\n />\n )}\n </div>\n ))}\n </div>\n )}\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {tr(\"fluidgrids.dataTables.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={handleSubmit} disabled={saving || !table}>\n {saving\n ? tr(\"fluidgrids.dataTables.saving\", \"Saving…\")\n : tr(\"fluidgrids.dataTables.saveRow\", \"Save row\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\ninterface TableRowsPanelProps {\n table: DataTable;\n onTableChanged: () => void;\n}\n\nfunction TableRowsPanel({ table, onTableChanged }: TableRowsPanelProps) {\n const tr = useTr();\n const { rows, total, loading, error, refetch } = useDataTableRows(table.id);\n const { deleteDataTableRows, loading: deleting } = useDeleteDataTableRows();\n const { insertDataTableRow } = useInsertDataTableRow();\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [rowDialogOpen, setRowDialogOpen] = useState(false);\n const [editingRow, setEditingRow] = useState<DataTableRow | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setSelectedIds((current) => {\n const visible = new Set(rows.map((row) => row.id));\n return new Set([...current].filter((id) => visible.has(id)));\n });\n }, [rows]);\n\n const allVisibleSelected =\n rows.length > 0 && selectedIds.size === rows.length;\n\n const toggleAll = useCallback(() => {\n setSelectedIds(\n allVisibleSelected ? new Set() : new Set(rows.map((row) => row.id)),\n );\n }, [allVisibleSelected, rows]);\n\n const handleDeleteRows = useCallback(async () => {\n if (selectedIds.size === 0) return;\n if (\n !window.confirm(\n tr(\n \"fluidgrids.dataTables.confirmDeleteRows\",\n `Delete ${selectedIds.size} selected row(s)?`,\n ),\n )\n ) {\n return;\n }\n try {\n const affected = await deleteDataTableRows(table.id, [...selectedIds]);\n toast.success(\n tr(\"fluidgrids.dataTables.rowsDeleted\", `${affected} row(s) deleted`),\n );\n setSelectedIds(new Set());\n await refetch();\n onTableChanged();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.deleteRowsFailed\", \"Failed to delete rows\"),\n ),\n );\n }\n }, [deleteDataTableRows, onTableChanged, refetch, selectedIds, table.id, tr]);\n\n const handleExport = useCallback(() => {\n const csv = rowsToCsv(table.columns, rows);\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = `${table.name}.csv`;\n anchor.click();\n URL.revokeObjectURL(url);\n toast.success(\n tr(\"fluidgrids.dataTables.exported\", \"Visible rows exported to CSV\"),\n );\n }, [rows, table.columns, table.name, tr]);\n\n const handleImport = useCallback(\n async (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file) return;\n try {\n const importedRows = csvToRows(await file.text(), table.columns);\n let inserted = 0;\n for (const data of importedRows) {\n await insertDataTableRow(table.id, data);\n inserted += 1;\n }\n toast.success(\n tr(\"fluidgrids.dataTables.imported\", `${inserted} row(s) imported`),\n );\n await refetch();\n onTableChanged();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\"fluidgrids.dataTables.importFailed\", \"Failed to import CSV\"),\n ),\n );\n }\n },\n [insertDataTableRow, onTableChanged, refetch, table.columns, table.id, tr],\n );\n\n const openNewRow = useCallback(() => {\n setEditingRow(null);\n setRowDialogOpen(true);\n }, []);\n\n const openEditRow = useCallback((row: DataTableRow) => {\n setEditingRow(row);\n setRowDialogOpen(true);\n }, []);\n\n return (\n <Card className=\"min-w-0 border-border-secondary\">\n <CardHeader className=\"gap-3 border-b border-border-secondary p-4 sm:p-5\">\n <div className=\"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"min-w-0\">\n <CardTitle className=\"flex items-center gap-2 text-lg\">\n <Table2\n className=\"size-5 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <span className=\"truncate\">{table.name}</span>\n </CardTitle>\n <CardDescription className=\"mt-1\">\n {table.description ||\n tr(\"fluidgrids.dataTables.noDescription\", \"No description\")}\n </CardDescription>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={openNewRow}>\n <Plus className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.addRow\", \"Add row\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n >\n <ArrowUpFromLine className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.import\", \"Import CSV\")}\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv,text/csv\"\n className=\"hidden\"\n onChange={handleImport}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleExport}\n disabled={rows.length === 0}\n >\n <ArrowDownToLine className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.export\", \"Export CSV\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-text-secondary\">\n <Badge variant=\"outline\">\n {total} {tr(\"fluidgrids.dataTables.rows\", \"rows\")}\n </Badge>\n <Badge variant=\"outline\">\n {table.columns.length}{\" \"}\n {tr(\"fluidgrids.dataTables.columns\", \"columns\")}\n </Badge>\n <Badge variant=\"outline\">{formatBytes(table.sizeBytes)}</Badge>\n {selectedIds.size > 0 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDeleteRows}\n disabled={deleting}\n >\n <Trash2 className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {deleting\n ? tr(\"fluidgrids.dataTables.deleting\", \"Deleting…\")\n : tr(\n \"fluidgrids.dataTables.deleteSelected\",\n `Delete ${selectedIds.size} selected`,\n )}\n </Button>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"p-0\">\n {error && (\n <div className=\"m-4 rounded-md border border-border-secondary bg-background-secondary p-3 text-sm text-text-secondary\">\n {error.message}\n </div>\n )}\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n checked={allVisibleSelected}\n onChange={toggleAll}\n aria-label={tr(\n \"fluidgrids.dataTables.selectAll\",\n \"Select all rows\",\n )}\n />\n </TableHead>\n <TableHead>\n {tr(\"fluidgrids.dataTables.rowId\", \"Row\")}\n </TableHead>\n {table.columns.map((column) => (\n <TableHead key={column.key}>{column.label}</TableHead>\n ))}\n <TableHead className=\"text-right\">\n {tr(\"fluidgrids.dataTables.actions\", \"Actions\")}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && (\n <TableRow>\n <TableCell\n colSpan={table.columns.length + 3}\n className=\"py-10 text-center text-text-secondary\"\n >\n {tr(\"fluidgrids.dataTables.loadingRows\", \"Loading rows…\")}\n </TableCell>\n </TableRow>\n )}\n {!loading && rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={table.columns.length + 3}\n className=\"py-10 text-center text-text-secondary\"\n >\n {tr(\n \"fluidgrids.dataTables.emptyRows\",\n \"No rows yet. Add a row or import a CSV to get started.\",\n )}\n </TableCell>\n </TableRow>\n )}\n {!loading &&\n rows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <input\n type=\"checkbox\"\n checked={selectedIds.has(row.id)}\n onChange={() =>\n setSelectedIds((current) => {\n const next = new Set(current);\n if (next.has(row.id)) next.delete(row.id);\n else next.add(row.id);\n return next;\n })\n }\n aria-label={tr(\n \"fluidgrids.dataTables.selectRow\",\n \"Select row\",\n )}\n />\n </TableCell>\n <TableCell>\n <code className=\"text-xs text-text-secondary\">\n {row.id.slice(0, 8)}\n </code>\n </TableCell>\n {table.columns.map((column) => (\n <TableCell\n className=\"max-w-[16rem] truncate text-sm\"\n key={column.key}\n title={formatValue(row.data[column.key])}\n >\n {formatValue(row.data[column.key])}\n </TableCell>\n ))}\n <TableCell className=\"text-right\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => openEditRow(row)}\n title={tr(\"fluidgrids.dataTables.editRow\", \"Edit row\")}\n aria-label={tr(\n \"fluidgrids.dataTables.editRow\",\n \"Edit row\",\n )}\n >\n <Pencil className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n {total > rows.length && !loading && (\n <p className=\"border-t border-border-secondary px-4 py-3 text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.rowLimitNote\",\n \"Showing the first 5,000 rows. Use workflow filters for larger tables.\",\n )}\n </p>\n )}\n </CardContent>\n <RowFormDialog\n open={rowDialogOpen}\n table={table}\n row={editingRow}\n onOpenChange={setRowDialogOpen}\n onSaved={async () => {\n await refetch();\n onTableChanged();\n }}\n />\n </Card>\n );\n}\n\nexport function DataTablesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [searchInput, setSearchInput] = useState(\"\");\n const [search, setSearch] = useState(\"\");\n const { tables, total, loading, error, refetch } = useDataTables(search);\n const { deleteDataTable, loading: deleting } = useDeleteDataTable();\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tableDialogOpen, setTableDialogOpen] = useState(false);\n const [editingTable, setEditingTable] = useState<DataTable | null>(null);\n\n const selectedTable = useMemo(\n () => tables.find((table) => table.id === selectedId) ?? null,\n [selectedId, tables],\n );\n\n useEffect(() => {\n if (tables.length === 0) {\n setSelectedId(null);\n return;\n }\n if (!selectedId || !tables.some((table) => table.id === selectedId)) {\n setSelectedId(tables[0].id);\n }\n }, [selectedId, tables]);\n\n const refresh = useCallback(async () => {\n await refetch();\n }, [refetch]);\n\n const handleDeleteTable = useCallback(async () => {\n if (!selectedTable) return;\n if (\n !window.confirm(\n tr(\n \"fluidgrids.dataTables.confirmDeleteTable\",\n `Delete table \"${selectedTable.name}\" and all of its rows?`,\n ),\n )\n ) {\n return;\n }\n try {\n await deleteDataTable(selectedTable.id);\n toast.success(tr(\"fluidgrids.dataTables.deleted\", \"Data table deleted\"));\n setSelectedId(null);\n await refetch();\n } catch (error) {\n toast.error(\n describeOperationError(\n error,\n tr(\n \"fluidgrids.dataTables.deleteFailed\",\n \"Failed to delete data table\",\n ),\n ),\n );\n }\n }, [deleteDataTable, refetch, selectedTable, tr]);\n\n const handleTableSaved = useCallback(\n (table: DataTable | null) => {\n if (table) setSelectedId(table.id);\n void refetch();\n },\n [refetch],\n );\n\n const submitSearch = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setSearch(searchInput);\n },\n [searchInput],\n );\n\n return (\n <div className=\"min-h-screen bg-background-primary p-4 sm:p-6\">\n <div className=\"mx-auto flex max-w-[1500px] flex-col gap-5\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <div className=\"mb-2 flex items-center gap-2 text-sm text-text-secondary\">\n <Database className=\"size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.workflowData\", \"Workflow data\")}\n </div>\n <h1 className=\"text-2xl font-bold text-text-primary sm:text-3xl\">\n {tr(\"fluidgrids.dataTables.pageTitle\", \"Data Tables\")}\n </h1>\n <PagePurpose\n icon={<Database className=\"size-4\" aria-hidden=\"true\" />}\n >\n {tr(\n \"fluidgrids.dataTables.pageSubtitle\",\n \"Use Data Tables as lightweight persistent storage for workflow state, lookups, and records shared across runs.\",\n )}\n </PagePurpose>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <ArrowLeft className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n <Button\n onClick={() => {\n setEditingTable(null);\n setTableDialogOpen(true);\n }}\n >\n <Plus className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.newTable\", \"New data table\")}\n </Button>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"data-tables\"\n title={tr(\n \"fluidgrids.dataTables.nextStepsTitle\",\n \"How to use Data Tables\",\n )}\n steps={[\n {\n id: \"create\",\n label: tr(\n \"fluidgrids.dataTables.nextStepCreateLabel\",\n \"Create a table\",\n ),\n description: tr(\n \"fluidgrids.dataTables.nextStepCreateDescription\",\n \"Define typed columns for the records your workflow needs.\",\n ),\n icon: <Plus className=\"size-4\" aria-hidden=\"true\" />,\n onClick: () => {\n setEditingTable(null);\n setTableDialogOpen(true);\n },\n },\n {\n id: \"connect\",\n label: tr(\n \"fluidgrids.dataTables.nextStepConnectLabel\",\n \"Connect it to a workflow\",\n ),\n description: tr(\n \"fluidgrids.dataTables.nextStepConnectDescription\",\n \"Add a Data Table node to get, insert, update, upsert, or delete rows.\",\n ),\n icon: <Table2 className=\"size-4\" aria-hidden=\"true\" />,\n onClick: () => navigate(\"../list\"),\n },\n {\n id: \"reuse\",\n label: tr(\n \"fluidgrids.dataTables.nextStepReuseLabel\",\n \"Reuse data across runs\",\n ),\n description: tr(\n \"fluidgrids.dataTables.nextStepReuseDescription\",\n \"Use saved status, cursors, lookups, and deduplication keys on later runs.\",\n ),\n icon: <RefreshCw className=\"size-4\" aria-hidden=\"true\" />,\n },\n ]}\n />\n\n <div className=\"grid gap-5 lg:grid-cols-[minmax(16rem,22rem)_minmax(0,1fr)]\">\n <Card className=\"h-fit border-border-secondary\">\n <CardHeader className=\"gap-3 border-b border-border-secondary p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base\">\n {tr(\"fluidgrids.dataTables.tables\", \"Tables\")}\n </CardTitle>\n <Badge variant=\"outline\">{total}</Badge>\n </div>\n <form className=\"flex gap-2\" onSubmit={submitSearch}>\n <div className=\"relative min-w-0 flex-1\">\n <Search\n className=\"pointer-events-none absolute left-2.5 top-2.5 size-4 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <Input\n className=\"pl-8\"\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n placeholder={tr(\n \"fluidgrids.dataTables.search\",\n \"Search tables\",\n )}\n aria-label={tr(\n \"fluidgrids.dataTables.search\",\n \"Search tables\",\n )}\n />\n </div>\n <Button type=\"submit\" variant=\"outline\" size=\"sm\">\n {tr(\"fluidgrids.dataTables.searchAction\", \"Search\")}\n </Button>\n </form>\n </CardHeader>\n <CardContent className=\"p-2\">\n {loading && (\n <p className=\"p-4 text-sm text-text-secondary\">\n {tr(\"fluidgrids.dataTables.loading\", \"Loading tables…\")}\n </p>\n )}\n {!loading && tables.length === 0 && (\n <IllustratedEmptyState\n className=\"py-8\"\n illustration=\"onboarding\"\n title={tr(\n \"fluidgrids.dataTables.empty\",\n \"Create your first Data Table\",\n )}\n description={tr(\n \"fluidgrids.dataTables.emptyHint\",\n \"Give your workflows a shared place to store typed records across runs.\",\n )}\n action={\n <Button\n size=\"sm\"\n onClick={() => {\n setEditingTable(null);\n setTableDialogOpen(true);\n }}\n >\n <Plus className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\n \"fluidgrids.dataTables.createFirstTable\",\n \"Create a table\",\n )}\n </Button>\n }\n />\n )}\n {!loading &&\n tables.map((table) => (\n <button\n type=\"button\"\n key={table.id}\n onClick={() => setSelectedId(table.id)}\n className={`mb-1 flex w-full items-start justify-between gap-3 rounded-md px-3 py-3 text-left transition-colors ${\n selectedId === table.id\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:bg-background-secondary hover:text-text-primary\"\n }`}\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium\">\n {table.name}\n </span>\n <span className=\"mt-1 block text-xs text-text-secondary\">\n {table.rowCount}{\" \"}\n {tr(\"fluidgrids.dataTables.rows\", \"rows\")} ·{\" \"}\n {table.columns.length}{\" \"}\n {tr(\"fluidgrids.dataTables.columns\", \"columns\")}\n </span>\n </span>\n <Table2\n className=\"mt-0.5 size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n </button>\n ))}\n </CardContent>\n </Card>\n\n {error && !selectedTable && (\n <Card className=\"border-border-secondary\">\n <CardContent className=\"p-6 text-sm text-text-secondary\">\n <p>{error.message}</p>\n <Button\n className=\"mt-4\"\n variant=\"outline\"\n onClick={() => void refresh()}\n >\n <RefreshCw className=\"mr-2 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.retry\", \"Try again\")}\n </Button>\n </CardContent>\n </Card>\n )}\n\n {!error && !selectedTable && !loading && (\n <Card className=\"border-border-secondary\">\n <CardContent className=\"flex min-h-[22rem] flex-col items-center justify-center p-6 text-center\">\n <Database\n className=\"mb-3 size-10 text-text-secondary\"\n aria-hidden=\"true\"\n />\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.dataTables.selectTitle\",\n \"Select a data table\",\n )}\n </h2>\n <p className=\"mt-1 max-w-sm text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.dataTables.selectDescription\",\n \"Choose a table to view and edit its rows, or create your first table.\",\n )}\n </p>\n </CardContent>\n </Card>\n )}\n\n {selectedTable && (\n <div className=\"min-w-0 space-y-3\">\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setEditingTable(selectedTable);\n setTableDialogOpen(true);\n }}\n >\n <Pencil className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {tr(\"fluidgrids.dataTables.editTable\", \"Edit table\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDeleteTable}\n disabled={deleting}\n >\n <Trash2 className=\"mr-1.5 size-4\" aria-hidden=\"true\" />\n {deleting\n ? tr(\"fluidgrids.dataTables.deleting\", \"Deleting…\")\n : tr(\"fluidgrids.dataTables.deleteTable\", \"Delete table\")}\n </Button>\n </div>\n <TableRowsPanel table={selectedTable} onTableChanged={refresh} />\n </div>\n )}\n </div>\n </div>\n\n <TableFormDialog\n open={tableDialogOpen}\n table={editingTable}\n onOpenChange={setTableDialogOpen}\n onSaved={handleTableSaved}\n />\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\n/**\n * The backend's immutable plan for one `executeStep` TEST run. Keeping it with\n * the execution slice lets the node detail view explain which data was reused\n * rather than inferring it after polling starts.\n */\nexport interface StepExecutionPlan {\n runId: string;\n targetNodeId: string;\n sourceRunId: string | null;\n reusedNodeIds: string[];\n pinnedNodeIds: string[];\n executeNodeIds: string[];\n initialNodeIds: string[];\n blockers: string[];\n}\n\n/**\n * Workflow identity captured with the run currently loaded in the builder.\n * Continuation must never reuse logs from a different workflow version.\n */\nexport interface ExecutionRunMetadata {\n runId: string;\n workflowKey: string;\n version: string;\n /** Source runs used for continuation must be TEST runs. */\n sourceMode?: \"TEST\" | \"PRODUCTION\";\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\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 data-[placeholder]:text-text-placeholder focus:border-border-focus focus:outline-none focus:shadow-[var(--shadow-focus)] focus:ring-1 focus:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-status-error-border [&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 text-text-muted\" aria-hidden=\"true\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated text-text-primary shadow-elevation-3 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 );\n}\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n className={cn(\n \"py-1.5 pl-8 pr-2 text-xs font-medium uppercase tracking-wide text-text-muted\",\n className,\n )}\n {...props}\n />\n );\n}\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary data-[state=checked]:bg-[var(--color-accent-soft)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n className={cn(\"-mx-1 my-1 h-px bg-border-subtle\", className)}\n {...props}\n />\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 data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n \"flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] data-[state=open]:bg-[var(--color-accent-soft)]\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-text-muted\" />\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 data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated p-1 text-text-primary shadow-elevation-3 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 data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-card border border-border-subtle bg-bg-elevated p-1 text-text-primary shadow-elevation-3 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 data-slot=\"dropdown-menu-item\"\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary 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-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary 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 size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-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-button py-1.5 pl-8 pr-2 text-sm text-text-primary outline-none transition-colors focus:bg-[var(--color-accent-soft)] focus:text-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"size-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-xs font-medium uppercase tracking-wide text-text-muted\",\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-border-subtle\", 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(\n \"ml-auto text-xs tracking-widest text-text-muted\",\n className,\n )}\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 data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-card border border-border-subtle bg-bg-elevated p-4 text-text-primary shadow-elevation-3 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"]}
|