@burdenoff/fluidgrids-fe-sdk 2026.1008.1 → 2026.1008.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/ExecutionDetailPage-JB5UYJMF.js +12 -0
  2. package/dist/{ExecutionDetailPage-3QKAXLHE.js.map → ExecutionDetailPage-JB5UYJMF.js.map} +1 -1
  3. package/dist/ExecutionsListPage-RDGTW6UF.js +11 -0
  4. package/dist/{ExecutionsListPage-KZLKLSSC.js.map → ExecutionsListPage-RDGTW6UF.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-VW2MQ3TP.js → WorkflowBuilder-YVIRBXAH.js} +7 -7
  6. package/dist/{WorkflowBuilder-VW2MQ3TP.js.map → WorkflowBuilder-YVIRBXAH.js.map} +1 -1
  7. package/dist/WorkflowsList-CQRXZV6I.js +14 -0
  8. package/dist/{WorkflowsList-3Q7SSUYR.js.map → WorkflowsList-CQRXZV6I.js.map} +1 -1
  9. package/dist/{chunk-ZLYJKIKG.js → chunk-2ORIFA6I.js} +3 -3
  10. package/dist/{chunk-ZLYJKIKG.js.map → chunk-2ORIFA6I.js.map} +1 -1
  11. package/dist/{chunk-U2ORKW7G.js → chunk-5DQU54IB.js} +65 -10
  12. package/dist/chunk-5DQU54IB.js.map +1 -0
  13. package/dist/{chunk-DP277LT4.js → chunk-5UB3HSNE.js} +5 -5
  14. package/dist/{chunk-DP277LT4.js.map → chunk-5UB3HSNE.js.map} +1 -1
  15. package/dist/{chunk-LW722GAN.js → chunk-CZ7APZ5B.js} +5 -4
  16. package/dist/chunk-CZ7APZ5B.js.map +1 -0
  17. package/dist/chunk-DFGJKGWH.js +206 -0
  18. package/dist/chunk-DFGJKGWH.js.map +1 -0
  19. package/dist/{chunk-XJIQEIOD.js → chunk-EL672H2D.js} +4 -4
  20. package/dist/{chunk-XJIQEIOD.js.map → chunk-EL672H2D.js.map} +1 -1
  21. package/dist/{chunk-ZZRRG37Q.js → chunk-F5UXTEW5.js} +3 -3
  22. package/dist/{chunk-ZZRRG37Q.js.map → chunk-F5UXTEW5.js.map} +1 -1
  23. package/dist/{chunk-SJORR3EX.js → chunk-FA7S7YMY.js} +5 -153
  24. package/dist/chunk-FA7S7YMY.js.map +1 -0
  25. package/dist/{chunk-FKOUPL6Z.js → chunk-FAPYERDO.js} +3 -3
  26. package/dist/{chunk-FKOUPL6Z.js.map → chunk-FAPYERDO.js.map} +1 -1
  27. package/dist/{chunk-G3RPRMP5.js → chunk-M2YFTRLL.js} +4 -4
  28. package/dist/{chunk-G3RPRMP5.js.map → chunk-M2YFTRLL.js.map} +1 -1
  29. package/dist/{chunk-674J7L3F.js → chunk-VGJKZYW2.js} +10 -4
  30. package/dist/chunk-VGJKZYW2.js.map +1 -0
  31. package/dist/{chunk-5A7GP6O7.js → chunk-WNFZXH3Z.js} +3 -3
  32. package/dist/{chunk-5A7GP6O7.js.map → chunk-WNFZXH3Z.js.map} +1 -1
  33. package/dist/{chunk-BNSM27CU.js → chunk-WXNDAONY.js} +3 -3
  34. package/dist/{chunk-BNSM27CU.js.map → chunk-WXNDAONY.js.map} +1 -1
  35. package/dist/{chunk-GKSXZFDY.js → chunk-XBIHI224.js} +4 -4
  36. package/dist/{chunk-GKSXZFDY.js.map → chunk-XBIHI224.js.map} +1 -1
  37. package/dist/{chunk-RJPBWDZM.js → chunk-Z5HU6MUG.js} +5 -5
  38. package/dist/{chunk-RJPBWDZM.js.map → chunk-Z5HU6MUG.js.map} +1 -1
  39. package/dist/{chunk-5BDQNSP3.js → chunk-ZBMMEE5U.js} +6 -4
  40. package/dist/chunk-ZBMMEE5U.js.map +1 -0
  41. package/dist/client-YFAZ23OL.js +3 -0
  42. package/dist/{client-AMUUS7VE.js.map → client-YFAZ23OL.js.map} +1 -1
  43. package/dist/config-SCVEDF5V.js +3 -0
  44. package/dist/{config-5UMLMALY.js.map → config-SCVEDF5V.js.map} +1 -1
  45. package/dist/executions.js +6 -6
  46. package/dist/history.js +4 -4
  47. package/dist/index.d.ts +17 -5
  48. package/dist/index.js +29 -24
  49. package/dist/index.js.map +1 -1
  50. package/dist/nodes.js +2 -2
  51. package/dist/observability.js +3 -3
  52. package/dist/settings.js +3 -3
  53. package/dist/templates.js +5 -5
  54. package/dist/{workflow-builder-CpdCzzst.d.ts → workflow-builder-DvbjeuIN.d.ts} +5 -1
  55. package/dist/workflow-builder.d.ts +1 -1
  56. package/dist/workflow-builder.js +6 -6
  57. package/dist/workflows-list.js +4 -4
  58. package/package.json +1 -1
  59. package/dist/ExecutionDetailPage-3QKAXLHE.js +0 -12
  60. package/dist/ExecutionsListPage-KZLKLSSC.js +0 -11
  61. package/dist/WorkflowsList-3Q7SSUYR.js +0 -14
  62. package/dist/chunk-5BDQNSP3.js.map +0 -1
  63. package/dist/chunk-674J7L3F.js.map +0 -1
  64. package/dist/chunk-LW722GAN.js.map +0 -1
  65. package/dist/chunk-SJORR3EX.js.map +0 -1
  66. package/dist/chunk-U2ORKW7G.js.map +0 -1
  67. package/dist/chunk-U4AJLVHA.js +0 -52
  68. package/dist/chunk-U4AJLVHA.js.map +0 -1
  69. package/dist/client-AMUUS7VE.js +0 -3
  70. package/dist/config-5UMLMALY.js +0 -3
@@ -0,0 +1,12 @@
1
+ export { ExecutionDetailPage } from './chunk-Z5HU6MUG.js';
2
+ import './chunk-FA7S7YMY.js';
3
+ import './chunk-NK32XOQN.js';
4
+ import './chunk-W23ZXNKU.js';
5
+ import './chunk-3ZYUGTIT.js';
6
+ import './chunk-DFGJKGWH.js';
7
+ import './chunk-3P4YQ7DO.js';
8
+ import './chunk-LMO5ASOE.js';
9
+ import './chunk-7YWBH2A5.js';
10
+ import './chunk-ZBMMEE5U.js';
11
+ //# sourceMappingURL=ExecutionDetailPage-JB5UYJMF.js.map
12
+ //# sourceMappingURL=ExecutionDetailPage-JB5UYJMF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-3QKAXLHE.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-JB5UYJMF.js"}
@@ -0,0 +1,11 @@
1
+ export { ExecutionsListPage } from './chunk-CZ7APZ5B.js';
2
+ import './chunk-FA7S7YMY.js';
3
+ import './chunk-NK32XOQN.js';
4
+ import './chunk-XBIHI224.js';
5
+ import './chunk-DFGJKGWH.js';
6
+ import './chunk-3P4YQ7DO.js';
7
+ import './chunk-LMO5ASOE.js';
8
+ import './chunk-7YWBH2A5.js';
9
+ import './chunk-ZBMMEE5U.js';
10
+ //# sourceMappingURL=ExecutionsListPage-RDGTW6UF.js.map
11
+ //# sourceMappingURL=ExecutionsListPage-RDGTW6UF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-KZLKLSSC.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-RDGTW6UF.js"}
@@ -1,6 +1,6 @@
1
- export { WorkflowBuilder } from './chunk-DP277LT4.js';
1
+ export { WorkflowBuilder } from './chunk-5UB3HSNE.js';
2
2
  import './chunk-KGD6CRSA.js';
3
- import './chunk-U2ORKW7G.js';
3
+ import './chunk-5DQU54IB.js';
4
4
  import './chunk-XQP33UJR.js';
5
5
  import './chunk-P5PKRQAO.js';
6
6
  import './chunk-NH5YCY37.js';
@@ -10,12 +10,12 @@ import './chunk-6LXMUIR3.js';
10
10
  import './chunk-AANIWER2.js';
11
11
  import './chunk-W23ZXNKU.js';
12
12
  import './chunk-3ZYUGTIT.js';
13
- import './chunk-GKSXZFDY.js';
14
- import './chunk-U4AJLVHA.js';
13
+ import './chunk-XBIHI224.js';
14
+ import './chunk-DFGJKGWH.js';
15
15
  import './chunk-3B5YEXSW.js';
16
16
  import './chunk-3P4YQ7DO.js';
17
17
  import './chunk-LMO5ASOE.js';
18
18
  import './chunk-7YWBH2A5.js';
19
- import './chunk-5BDQNSP3.js';
20
- //# sourceMappingURL=WorkflowBuilder-VW2MQ3TP.js.map
21
- //# sourceMappingURL=WorkflowBuilder-VW2MQ3TP.js.map
19
+ import './chunk-ZBMMEE5U.js';
20
+ //# sourceMappingURL=WorkflowBuilder-YVIRBXAH.js.map
21
+ //# sourceMappingURL=WorkflowBuilder-YVIRBXAH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-VW2MQ3TP.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-YVIRBXAH.js"}
@@ -0,0 +1,14 @@
1
+ export { WorkflowsList } from './chunk-F5UXTEW5.js';
2
+ import './chunk-KGD6CRSA.js';
3
+ import './chunk-AANIWER2.js';
4
+ import './chunk-W23ZXNKU.js';
5
+ import './chunk-3ZYUGTIT.js';
6
+ import './chunk-XBIHI224.js';
7
+ import './chunk-DFGJKGWH.js';
8
+ import './chunk-3B5YEXSW.js';
9
+ import './chunk-3P4YQ7DO.js';
10
+ import './chunk-LMO5ASOE.js';
11
+ import './chunk-7YWBH2A5.js';
12
+ import './chunk-ZBMMEE5U.js';
13
+ //# sourceMappingURL=WorkflowsList-CQRXZV6I.js.map
14
+ //# sourceMappingURL=WorkflowsList-CQRXZV6I.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-3Q7SSUYR.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-CQRXZV6I.js"}
@@ -1,6 +1,6 @@
1
1
  import { NodeEndpointConfigsDocument, NodeEndpointConfigDocument, NodeManifestDocument } from './chunk-3P4YQ7DO.js';
2
2
  import { useTr } from './chunk-7YWBH2A5.js';
3
- import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
3
+ import { getFluidGridsClient } from './chunk-ZBMMEE5U.js';
4
4
  import { useState, useCallback, useEffect, useMemo } from 'react';
5
5
  import { useNavigate } from 'react-router';
6
6
  import { Icon } from '@iconify/react';
@@ -501,5 +501,5 @@ function NodesPage() {
501
501
  }
502
502
 
503
503
  export { NodesPage, fetchAllNodesWithManifests, useLazyNodeManifest, useNodeEndpoint, useNodeEndpoints, useNodeManifest };
504
- //# sourceMappingURL=chunk-ZLYJKIKG.js.map
505
- //# sourceMappingURL=chunk-ZLYJKIKG.js.map
504
+ //# sourceMappingURL=chunk-2ORIFA6I.js.map
505
+ //# sourceMappingURL=chunk-2ORIFA6I.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useNodeEndpoints.ts","../src/modules/nodes/pages/NodesPage.tsx"],"names":["useState"],"mappings":"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","file":"chunk-ZLYJKIKG.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport {\n NodeEndpointConfigsDocument,\n NodeEndpointConfigDocument,\n NodeManifestDocument,\n} from \"../generated/operations\";\nimport type {\n NodeEndpointConfig,\n WorkflowPaginationInput,\n} from \"../generated/graphql-types\";\n\n// Alias for backward compatibility\nconst NODE_ENDPOINT_CONFIGS = NodeEndpointConfigsDocument;\nconst NODE_ENDPOINT_CONFIG = NodeEndpointConfigDocument;\nconst NODE_MANIFEST = NodeManifestDocument;\n\ninterface NodeEndpointConfigsData {\n nodeEndpointConfigs: {\n configs: NodeEndpointConfig[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n };\n}\n\ninterface NodeEndpointConfigData {\n nodeEndpointConfig: NodeEndpointConfig | null;\n}\n\ninterface NodeManifestData {\n nodeManifest: unknown;\n}\n\ninterface UseNodeEndpointsOptions {\n pagination?: WorkflowPaginationInput;\n status?: \"AVAILABLE\" | \"DEPRECATED\" | \"DISABLED\";\n publishType?: \"STORE\" | \"CUSTOM\";\n skip?: boolean;\n}\n\n/**\n * Hook to fetch all node endpoint configurations\n * Uses Apollo Client directly to avoid Vite bundling issues with @apollo/client hooks\n */\nexport function useNodeEndpoints(options: UseNodeEndpointsOptions = {}) {\n const { pagination, status = \"AVAILABLE\", publishType, skip } = options;\n\n const [nodes, setNodes] = useState<NodeEndpointConfig[]>([]);\n const [paginationData, setPaginationData] = useState<\n NodeEndpointConfigsData[\"nodeEndpointConfigs\"][\"pagination\"] | undefined\n >();\n const [loading, setLoading] = useState(!skip);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (skip) return;\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: { pagination, status, publishType },\n fetchPolicy: \"cache-first\",\n });\n setNodes(result.data?.nodeEndpointConfigs?.configs ?? []);\n setPaginationData(result.data?.nodeEndpointConfigs?.pagination);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [pagination, status, publishType, skip]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodes,\n pagination: paginationData,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single node endpoint configuration\n */\nexport function useNodeEndpoint(nodeType: string, nodeVersion: string) {\n const [node, setNode] = useState<NodeEndpointConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !nodeVersion) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigData>({\n query: NODE_ENDPOINT_CONFIG,\n variables: { nodeType, nodeVersion },\n fetchPolicy: \"cache-first\",\n });\n setNode(result.data?.nodeEndpointConfig ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, nodeVersion]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n node,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch node manifest\n */\nexport function useNodeManifest(nodeType: string, version: string) {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !version) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n fetchPolicy: \"cache-first\",\n });\n setManifest(result.data?.nodeManifest ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, version]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n manifest,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook for fetching node manifest on demand\n */\nexport function useLazyNodeManifest() {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getManifest = useCallback(async (nodeType: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n });\n const manifestData = result.data?.nodeManifest ?? null;\n setManifest(manifestData);\n return manifestData;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getManifest,\n manifest,\n loading,\n error,\n };\n}\n\n/**\n * Utility function to fetch all nodes and their manifests (for initial load)\n * This replaces the top-level await pattern in blocks/index.ts\n */\nexport async function fetchAllNodesWithManifests(): Promise<\n NodeEndpointConfig[]\n> {\n const client = getFluidGridsClient();\n\n try {\n // Fetch all node configurations\n const { data: nodesData } = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: {\n status: \"AVAILABLE\",\n pagination: { limit: 100 },\n },\n });\n\n const nodes = nodesData?.nodeEndpointConfigs?.configs ?? [];\n\n // Fetch manifests for each node (in parallel)\n const nodesWithManifests = await Promise.all(\n nodes.map(async (node) => {\n try {\n const { data: manifestData } = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: {\n nodeType: node.nodeType,\n version: node.nodeVersion,\n },\n });\n\n return {\n ...node,\n manifest: manifestData?.nodeManifest ?? null,\n };\n } catch (err) {\n console.error(`Failed to fetch manifest for ${node.nodeType}:`, err);\n return {\n ...node,\n manifest: null,\n };\n }\n }),\n );\n\n return nodesWithManifests;\n } catch (err) {\n console.error(\"Failed to fetch nodes:\", err);\n return [];\n }\n}\n","import { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Skeleton,\n Input,\n Badge,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useNodeEndpoints } from \"../../../hooks/useNodeEndpoints\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport type { NodeEndpointConfig as GqlNodeEndpointConfig } from \"../../../generated/graphql-types\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_CATEGORIES = [\n { value: \"all\", label: \"All\", icon: \"mdi:view-grid\" },\n { value: \"integration\", label: \"Integration\", icon: \"mdi:connection\" },\n { value: \"data\", label: \"Data\", icon: \"mdi:database\" },\n { value: \"logic\", label: \"Logic\", icon: \"mdi:code-braces\" },\n { value: \"ai-ml\", label: \"AI/ML\", icon: \"mdi:brain\" },\n { value: \"communication\", label: \"Communication\", icon: \"mdi:message-text\" },\n] as const;\n\nconst STATUS_STYLES: Record<\n string,\n { className: string; label: string; icon: string }\n> = {\n AVAILABLE: {\n className: \"bg-emerald-500/15 text-emerald-400 border-emerald-500/30\",\n label: \"Available\",\n icon: \"mdi:check-circle\",\n },\n DEPRECATED: {\n className: \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n label: \"Deprecated\",\n icon: \"mdi:alert\",\n },\n DISABLED: {\n className: \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\",\n label: \"Disabled\",\n icon: \"mdi:close-circle\",\n },\n};\n\nconst CATEGORY_COLORS: Record<string, string> = {\n integration: \"bg-violet-500/15 text-violet-400 border-violet-500/30\",\n data: \"bg-blue-500/15 text-blue-400 border-blue-500/30\",\n logic: \"bg-cyan-500/15 text-cyan-400 border-cyan-500/30\",\n \"ai-ml\": \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n communication: \"bg-rose-500/15 text-rose-400 border-rose-500/30\",\n};\n\n/**\n * Infer a category for a node based on its metadata.\n */\nfunction inferNodeCategory(node: GqlNodeEndpointConfig): string {\n const text = [\n node.name,\n node.nodeType,\n ...(node.keywords ?? []),\n ...(node.kind ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n\n if (\n text.includes(\"ai\") ||\n text.includes(\"ml\") ||\n text.includes(\"llm\") ||\n text.includes(\"model\")\n )\n return \"ai-ml\";\n if (\n text.includes(\"integrat\") ||\n text.includes(\"api\") ||\n text.includes(\"http\") ||\n text.includes(\"webhook\") ||\n text.includes(\"oauth\")\n )\n return \"integration\";\n if (\n text.includes(\"data\") ||\n text.includes(\"transform\") ||\n text.includes(\"filter\") ||\n text.includes(\"aggregate\") ||\n text.includes(\"database\")\n )\n return \"data\";\n if (\n text.includes(\"email\") ||\n text.includes(\"slack\") ||\n text.includes(\"notification\") ||\n text.includes(\"sms\") ||\n text.includes(\"message\")\n )\n return \"communication\";\n if (\n text.includes(\"if\") ||\n text.includes(\"switch\") ||\n text.includes(\"loop\") ||\n text.includes(\"merge\") ||\n text.includes(\"logic\") ||\n text.includes(\"condition\")\n )\n return \"logic\";\n return \"integration\"; // default\n}\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction NodesSkeleton() {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {Array.from({ length: 8 }).map((_, i) => (\n <Skeleton key={i} className=\"h-44 rounded-lg bg-card-foreground/10\" />\n ))}\n </div>\n );\n}\n\nfunction EmptyState({ hasFilters }: { hasFilters: boolean }) {\n const tr = useTr();\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <div className=\"rounded-full bg-background-secondary p-4 mb-4\">\n <Icon\n icon=\"mdi:puzzle-outline\"\n width={40}\n className=\"text-text-secondary\"\n />\n </div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyTitleFiltered\",\n \"No matching nodes\",\n )\n : tr(\"fluidgrids.nodes.nodesPage.emptyTitle\", \"No nodes registered\")}\n </h3>\n <p className=\"text-sm text-text-secondary max-w-md\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyHintFiltered\",\n \"Try adjusting your search or category filter.\",\n )\n : tr(\n \"fluidgrids.nodes.nodesPage.emptyHint\",\n \"Node endpoint configurations will appear here once registered.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction ErrorState({\n message,\n onRetry,\n}: {\n message: string;\n onRetry: () => void;\n}) {\n const tr = useTr();\n return (\n <div className=\"p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\"fluidgrids.nodes.nodesPage.errorHeading\", \"Error loading nodes\")}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetry}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n {tr(\"fluidgrids.nodes.nodesPage.errorRetry\", \"Retry\")}\n </Button>\n </div>\n );\n}\n\ninterface NodeCardProps {\n node: GqlNodeEndpointConfig;\n category: string;\n}\n\nfunction NodeCard({ node, category }: NodeCardProps) {\n const tr = useTr();\n const status = STATUS_STYLES[node.status] ?? STATUS_STYLES.AVAILABLE;\n const catColor =\n CATEGORY_COLORS[category] ??\n \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\";\n const catLabel =\n NODE_CATEGORIES.find((c) => c.value === category)?.label ??\n tr(\"fluidgrids.nodes.nodeCard.categoryFallback\", \"Node\");\n\n return (\n <Card className=\"border border-border-secondary bg-background-secondary hover:border-border-primary transition-all duration-200 flex flex-col\">\n <CardHeader className=\"flex-1 pb-3\">\n <div className=\"flex items-start justify-between gap-2 mb-3\">\n <div className=\"rounded-lg bg-background-tertiary p-2\">\n <Icon\n icon={node.icon ?? node.favicon ?? \"mdi:puzzle\"}\n width={22}\n className=\"text-text-primary\"\n />\n </div>\n <Badge variant=\"outline\" className={status.className}>\n <Icon icon={status.icon} width={12} className=\"mr-1\" />\n {status.label}\n </Badge>\n </div>\n <h3 className=\"font-semibold text-text-primary text-sm leading-tight mb-1 line-clamp-1\">\n {node.name}\n </h3>\n <p className=\"text-xs text-text-secondary line-clamp-2 min-h-[2rem]\">\n {node.description ??\n tr(\n \"fluidgrids.nodes.nodeCard.noDescription\",\n \"No description available.\",\n )}\n </p>\n </CardHeader>\n <div className=\"px-6 pb-4 pt-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className={catColor}>\n {catLabel}\n </Badge>\n <span className=\"text-xs text-text-secondary\">\n v{node.nodeVersion}\n </span>\n </div>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\">\n <Icon icon=\"mdi:cog\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\n \"fluidgrids.nodes.nodeCard.configureTooltip\",\n \"Configure node\",\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function NodesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [search, setSearch] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string>(\"all\");\n\n // Fetch available nodes (default status=AVAILABLE)\n const { nodes, loading, error, refetch } = useNodeEndpoints({\n pagination: { limit: 200 },\n });\n\n // Fetch deprecated nodes for stats\n const { nodes: deprecatedNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DEPRECATED\",\n });\n\n // Fetch disabled nodes for stats\n const { nodes: disabledNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DISABLED\",\n });\n\n // Categorize nodes\n const categorizedNodes = useMemo(() => {\n return nodes.map((n) => ({\n node: n,\n category: inferNodeCategory(n),\n }));\n }, [nodes]);\n\n // Filter\n const filtered = useMemo(() => {\n let items = categorizedNodes;\n\n if (activeCategory !== \"all\") {\n items = items.filter((item) => item.category === activeCategory);\n }\n\n if (search.trim()) {\n const q = search.toLowerCase();\n items = items.filter(\n (item) =>\n item.node.name.toLowerCase().includes(q) ||\n item.node.nodeType.toLowerCase().includes(q) ||\n (item.node.description ?? \"\").toLowerCase().includes(q) ||\n item.node.keywords?.some((k) => k.toLowerCase().includes(q)),\n );\n }\n\n return items;\n }, [categorizedNodes, activeCategory, search]);\n\n // Stats (combine all statuses)\n const stats = useMemo(() => {\n const active = nodes.length;\n const deprecated = deprecatedNodes.length;\n const total = active + deprecated + disabledNodes.length;\n return { total, active, deprecated };\n }, [nodes, deprecatedNodes, disabledNodes]);\n\n // Category counts\n const categoryCounts = useMemo(() => {\n const counts: Record<string, number> = { all: categorizedNodes.length };\n for (const item of categorizedNodes) {\n counts[item.category] = (counts[item.category] ?? 0) + 1;\n }\n return counts;\n }, [categorizedNodes]);\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\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.nodes.nodesPage.title\", \"Node Catalog\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.nodes.nodesPage.subtitle\",\n \"Browse and manage available workflow nodes\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button variant=\"outline\" onClick={() => refetch()}>\n <Icon icon=\"mdi:refresh\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.nodes.nodesPage.refreshButton\", \"Refresh\")}\n </Button>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.nodes.nodesPage.backToWorkflowsButton\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid grid-cols-3 gap-3 mb-6\">\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:puzzle\"\n width={18}\n className=\"text-text-secondary\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statTotal\", \"Total Nodes\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-text-primary mt-1\">\n {loading ? \"—\" : stats.total}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:check-circle\"\n width={18}\n className=\"text-emerald-400\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statActive\", \"Active\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-emerald-400 mt-1\">\n {loading ? \"—\" : stats.active}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:alert\" width={18} className=\"text-amber-400\" />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statDeprecated\", \"Deprecated\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-amber-400 mt-1\">\n {loading ? \"—\" : stats.deprecated}\n </p>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"relative max-w-md mb-6\">\n <Icon\n icon=\"mdi:magnify\"\n width={18}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n />\n <Input\n placeholder={tr(\n \"fluidgrids.nodes.nodesPage.searchPlaceholder\",\n \"Search nodes by name, type, or keyword...\",\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10 bg-background-secondary border-border-secondary\"\n />\n </div>\n\n {/* Category Tabs */}\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {NODE_CATEGORIES.map((cat) => {\n const count = categoryCounts[cat.value] ?? 0;\n const isActive = activeCategory === cat.value;\n return (\n <button\n key={cat.value}\n onClick={() => setActiveCategory(cat.value)}\n className={`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${\n isActive\n ? \"bg-background-tertiary text-text-primary border border-border-primary\"\n : \"bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary\"\n }`}\n >\n <Icon icon={cat.icon} width={16} />\n {cat.label}\n <span\n className={`ml-0.5 text-xs ${isActive ? \"text-text-primary\" : \"text-text-secondary\"}`}\n >\n ({count})\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6\">\n <ErrorState message={error.message} onRetry={refetch} />\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <NodesSkeleton />\n ) : filtered.length === 0 ? (\n <EmptyState\n hasFilters={search.trim().length > 0 || activeCategory !== \"all\"}\n />\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {filtered.map(({ node, category }) => (\n <NodeCard key={node.id} node={node} category={category} />\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useNodeEndpoints.ts","../src/modules/nodes/pages/NodesPage.tsx"],"names":["useState"],"mappings":";;;;;;;;;;AAaA,IAAM,qBAAA,GAAwB,2BAAA;AAC9B,IAAM,oBAAA,GAAuB,0BAAA;AAC7B,IAAM,aAAA,GAAgB,oBAAA;AAiCf,SAAS,gBAAA,CAAiB,OAAA,GAAmC,EAAC,EAAG;AACtE,EAAA,MAAM,EAAE,UAAA,EAAY,MAAA,GAAS,WAAA,EAAa,WAAA,EAAa,MAAK,GAAI,OAAA;AAEhE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAA+B,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,EAE1C;AACF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAAS,CAAC,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,IAAI,IAAA,EAAM;AAEV,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,CAA+B;AAAA,QACzD,KAAA,EAAO,qBAAA;AAAA,QACP,SAAA,EAAW,EAAE,UAAA,EAAY,MAAA,EAAQ,WAAA,EAAY;AAAA,QAC7C,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,mBAAA,EAAqB,OAAA,IAAW,EAAE,CAAA;AACxD,MAAA,iBAAA,CAAkB,MAAA,CAAO,IAAA,EAAM,mBAAA,EAAqB,UAAU,CAAA;AAAA,IAChE,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,MAAA,EAAQ,WAAA,EAAa,IAAI,CAAC,CAAA;AAE1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,UAAA,EAAY,cAAA;AAAA,IACZ,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAKO,SAAS,eAAA,CAAgB,UAAkB,WAAA,EAAqB;AACrE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAoC,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,WAAA,EAAa;AAC7B,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA;AAAA,IACF;AAEA,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,CAA8B;AAAA,QACxD,KAAA,EAAO,oBAAA;AAAA,QACP,SAAA,EAAW,EAAE,QAAA,EAAU,WAAA,EAAY;AAAA,QACnC,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,kBAAA,IAAsB,IAAI,CAAA;AAAA,IACjD,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,QAAA,EAAU,WAAW,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAKO,SAAS,eAAA,CAAgB,UAAkB,OAAA,EAAiB;AACjE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAkB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AACzB,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA;AAAA,IACF;AAEA,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,CAAwB;AAAA,QAClD,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,EAAE,QAAA,EAAU,OAAA,EAAQ;AAAA,QAC/B,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,YAAA,IAAgB,IAAI,CAAA;AAAA,IAC/C,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,QAAA,EAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAKO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAkB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAO,QAAA,EAAkB,OAAA,KAAoB;AAC3E,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,CAAwB;AAAA,QAClD,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,EAAE,QAAA,EAAU,OAAA;AAAQ,OAChC,CAAA;AACD,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,EAAM,YAAA,IAAgB,IAAA;AAClD,MAAA,WAAA,CAAY,YAAY,CAAA;AACxB,MAAA,OAAO,YAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAMA,eAAsB,0BAAA,GAEpB;AACA,EAAA,MAAM,SAAS,mBAAA,EAAoB;AAEnC,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,MAAM,OAAO,KAAA,CAA+B;AAAA,MACtE,KAAA,EAAO,qBAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ,WAAA;AAAA,QACR,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA;AAAI;AAC3B,KACD,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,SAAA,EAAW,mBAAA,EAAqB,OAAA,IAAW,EAAC;AAG1D,IAAA,MAAM,kBAAA,GAAqB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACvC,KAAA,CAAM,GAAA,CAAI,OAAO,IAAA,KAAS;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,MAAM,OAAO,KAAA,CAAwB;AAAA,YAClE,KAAA,EAAO,aAAA;AAAA,YACP,SAAA,EAAW;AAAA,cACT,UAAU,IAAA,CAAK,QAAA;AAAA,cACf,SAAS,IAAA,CAAK;AAAA;AAChB,WACD,CAAA;AAED,UAAA,OAAO;AAAA,YACL,GAAG,IAAA;AAAA,YACH,QAAA,EAAU,cAAc,YAAA,IAAgB;AAAA,WAC1C;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAA,CAAK,QAAQ,KAAK,GAAG,CAAA;AACnE,UAAA,OAAO;AAAA,YACL,GAAG,IAAA;AAAA,YACH,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,KACH;AAEA,IAAA,OAAO,kBAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAC3C,IAAA,OAAO,EAAC;AAAA,EACV;AACF;ACnPA,IAAM,eAAA,GAAkB;AAAA,EACtB,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAM,eAAA,EAAgB;AAAA,EACpD,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,MAAM,gBAAA,EAAiB;AAAA,EACrE,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,cAAA,EAAe;AAAA,EACrD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,iBAAA,EAAkB;AAAA,EAC1D,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,WAAA,EAAY;AAAA,EACpD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,MAAM,kBAAA;AAC1D,CAAA;AAEA,IAAM,aAAA,GAGF;AAAA,EACF,SAAA,EAAW;AAAA,IACT,SAAA,EAAW,0DAAA;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA,UAAA,EAAY;AAAA,IACV,SAAA,EAAW,oDAAA;AAAA,IACX,KAAA,EAAO,YAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,SAAA,EAAW,iDAAA;AAAA,IACX,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,WAAA,EAAa,uDAAA;AAAA,EACb,IAAA,EAAM,iDAAA;AAAA,EACN,KAAA,EAAO,iDAAA;AAAA,EACP,OAAA,EAAS,oDAAA;AAAA,EACT,aAAA,EAAe;AACjB,CAAA;AAKA,SAAS,kBAAkB,IAAA,EAAqC;AAC9D,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,IAAA,CAAK,IAAA;AAAA,IACL,IAAA,CAAK,QAAA;AAAA,IACL,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,IACtB,GAAI,IAAA,CAAK,IAAA,IAAQ;AAAC,GACpB,CACG,IAAA,CAAK,GAAG,CAAA,CACR,WAAA,EAAY;AAEf,EAAA,IACE,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAClB,KAAK,QAAA,CAAS,IAAI,CAAA,IAClB,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IACnB,IAAA,CAAK,SAAS,OAAO,CAAA;AAErB,IAAA,OAAO,OAAA;AACT,EAAA,IACE,KAAK,QAAA,CAAS,UAAU,KACxB,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IACnB,IAAA,CAAK,QAAA,CAAS,MAAM,KACpB,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,IACvB,IAAA,CAAK,SAAS,OAAO,CAAA;AAErB,IAAA,OAAO,aAAA;AACT,EAAA,IACE,KAAK,QAAA,CAAS,MAAM,KACpB,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,IACzB,IAAA,CAAK,QAAA,CAAS,QAAQ,KACtB,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,IACzB,IAAA,CAAK,SAAS,UAAU,CAAA;AAExB,IAAA,OAAO,MAAA;AACT,EAAA,IACE,KAAK,QAAA,CAAS,OAAO,KACrB,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IACrB,IAAA,CAAK,QAAA,CAAS,cAAc,KAC5B,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IACnB,IAAA,CAAK,SAAS,SAAS,CAAA;AAEvB,IAAA,OAAO,eAAA;AACT,EAAA,IACE,IAAA,CAAK,SAAS,IAAI,CAAA,IAClB,KAAK,QAAA,CAAS,QAAQ,CAAA,IACtB,IAAA,CAAK,QAAA,CAAS,MAAM,KACpB,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IACrB,IAAA,CAAK,SAAS,OAAO,CAAA,IACrB,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAEzB,IAAA,OAAO,OAAA;AACT,EAAA,OAAO,aAAA;AACT;AAMA,SAAS,aAAA,GAAgB;AACvB,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAU,qEAAA,EACZ,gBAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAG,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,qBACjC,GAAA,CAAC,YAAiB,SAAA,EAAU,uCAAA,EAAA,EAAb,CAAqD,CACrE,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,UAAA,EAAW,EAA4B;AAC3D,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,oBAAA;AAAA,QACL,KAAA,EAAO,EAAA;AAAA,QACP,SAAA,EAAU;AAAA;AAAA,KACZ,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8CAAA,EACX,QAAA,EAAA,UAAA,GACG,EAAA;AAAA,MACE,+CAAA;AAAA,MACA;AAAA,KACF,GACA,EAAA,CAAG,uCAAA,EAAyC,qBAAqB,CAAA,EACvE,CAAA;AAAA,oBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAA,EACV,QAAA,EAAA,UAAA,GACG,EAAA;AAAA,MACE,8CAAA;AAAA,MACA;AAAA,KACF,GACA,EAAA;AAAA,MACE,sCAAA;AAAA,MACA;AAAA,KACF,EACN;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0GAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+DAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,0BACxC,MAAA,EAAA,EAAK,SAAA,EAAU,eACb,QAAA,EAAA,EAAA,CAAG,yCAAA,EAA2C,qBAAqB,CAAA,EACtE;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oDAAA,EACV,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAU,qIAAA;AAAA,QAET,QAAA,EAAA,EAAA,CAAG,yCAAyC,OAAO;AAAA;AAAA;AACtD,GAAA,EACF,CAAA;AAEJ;AAOA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAS,EAAkB;AACnD,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,CAAK,MAAM,KAAK,aAAA,CAAc,SAAA;AAC3D,EAAA,MAAM,QAAA,GACJ,eAAA,CAAgB,QAAQ,CAAA,IACxB,iDAAA;AACF,EAAA,MAAM,QAAA,GACJ,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,QAAQ,CAAA,EAAG,KAAA,IACnD,EAAA,CAAG,4CAAA,EAA8C,MAAM,CAAA;AAEzD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8HAAA,EACd,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,aAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,OAAA,IAAW,YAAA;AAAA,YACnC,KAAA,EAAO,EAAA;AAAA,YACP,SAAA,EAAU;AAAA;AAAA,SACZ,EACF,CAAA;AAAA,6BACC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,OAAO,SAAA,EACzC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,IAAA,EAAM,MAAA,CAAO,MAAM,KAAA,EAAO,EAAA,EAAI,WAAU,MAAA,EAAO,CAAA;AAAA,UACpD,MAAA,CAAO;AAAA,SAAA,EACV;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yEAAA,EACX,eAAK,IAAA,EACR,CAAA;AAAA,sBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uDAAA,EACV,eAAK,WAAA,IACJ,EAAA;AAAA,QACE,yCAAA;AAAA,QACA;AAAA,OACF,EACJ;AAAA,KAAA,EACF,CAAA;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,UACjC,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,wBACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA8B,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAC1C,IAAA,CAAK;AAAA,SAAA,EACT;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,YAAO,SAAA,EAAU,0GAAA,EAChB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAA,EAAI,GAClC,CAAA,EACF,CAAA;AAAA,4BACC,cAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,UACC,4CAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAMO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAiB,KAAK,CAAA;AAGlE,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,KAAY,gBAAA,CAAiB;AAAA,IAC1D,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA;AAAI,GAC1B,CAAA;AAGD,EAAA,MAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,GAAI,gBAAA,CAAiB;AAAA,IAClD,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,IACzB,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,gBAAA,CAAiB;AAAA,IAChD,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,IACzB,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACvB,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU,kBAAkB,CAAC;AAAA,KAC/B,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,IAAI,KAAA,GAAQ,gBAAA;AAEZ,IAAA,IAAI,mBAAmB,KAAA,EAAO;AAC5B,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,cAAc,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,MAAA,CAAO,MAAK,EAAG;AACjB,MAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AAAA,QACZ,CAAC,IAAA,KACC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,CAAC,CAAA,IACvC,KAAK,IAAA,CAAK,QAAA,CAAS,aAAY,CAAE,QAAA,CAAS,CAAC,CAAA,IAAA,CAC1C,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,IAAI,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,KACtD,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAY,CAAE,QAAA,CAAS,CAAC,CAAC;AAAA,OAC/D;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,gBAAA,EAAkB,cAAA,EAAgB,MAAM,CAAC,CAAA;AAG7C,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM;AAC1B,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,aAAa,eAAA,CAAgB,MAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,UAAA,GAAa,aAAA,CAAc,MAAA;AAClD,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAW;AAAA,EACrC,CAAA,EAAG,CAAC,KAAA,EAAO,eAAA,EAAiB,aAAa,CAAC,CAAA;AAG1C,EAAA,MAAM,cAAA,GAAiB,QAAQ,MAAM;AACnC,IAAA,MAAM,MAAA,GAAiC,EAAE,GAAA,EAAK,gBAAA,CAAiB,MAAA,EAAO;AACtE,IAAA,KAAA,MAAW,QAAQ,gBAAA,EAAkB;AACnC,MAAA,MAAA,CAAO,KAAK,QAAQ,CAAA,GAAA,CAAK,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAG,SAAA,EAAU,kDAAA,EACX,QAAA,EAAA,EAAA,CAAG,kCAAA,EAAoC,cAAc,CAAA,EACxD,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EACV,QAAA,EAAA,EAAA;AAAA,UACC,qCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,SAAQ,EAC/C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,aAAA,EAAc,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,UACpD,EAAA,CAAG,4CAA4C,SAAS;AAAA,SAAA,EAC3D,CAAA;AAAA,wBACA,IAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,SAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,gBAAA,EAAiB,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,UACvD,EAAA;AAAA,YACC,kDAAA;AAAA,YACA;AAAA;AACF,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uEAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,YAAA;AAAA,cACL,KAAA,EAAO,EAAA;AAAA,cACP,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,8BACC,GAAA,EAAA,EAAE,SAAA,EAAU,+BACV,QAAA,EAAA,EAAA,CAAG,sCAAA,EAAwC,aAAa,CAAA,EAC3D;AAAA,SAAA,EACF,CAAA;AAAA,4BACC,GAAA,EAAA,EAAE,SAAA,EAAU,4CACV,QAAA,EAAA,OAAA,GAAU,QAAA,GAAM,MAAM,KAAA,EACzB;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,kBAAA;AAAA,cACL,KAAA,EAAO,EAAA;AAAA,cACP,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,8BACC,GAAA,EAAA,EAAE,SAAA,EAAU,+BACV,QAAA,EAAA,EAAA,CAAG,uCAAA,EAAyC,QAAQ,CAAA,EACvD;AAAA,SAAA,EACF,CAAA;AAAA,4BACC,GAAA,EAAA,EAAE,SAAA,EAAU,2CACV,QAAA,EAAA,OAAA,GAAU,QAAA,GAAM,MAAM,MAAA,EACzB;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,WAAA,EAAY,KAAA,EAAO,EAAA,EAAI,WAAU,gBAAA,EAAiB,CAAA;AAAA,8BAC5D,GAAA,EAAA,EAAE,SAAA,EAAU,+BACV,QAAA,EAAA,EAAA,CAAG,2CAAA,EAA6C,YAAY,CAAA,EAC/D;AAAA,SAAA,EACF,CAAA;AAAA,4BACC,GAAA,EAAA,EAAE,SAAA,EAAU,yCACV,QAAA,EAAA,OAAA,GAAU,QAAA,GAAM,MAAM,UAAA,EACzB;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,aAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAa,EAAA;AAAA,YACX,8CAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO,MAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACzC,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,wBAGC,KAAA,EAAA,EAAI,SAAA,EAAU,6BACZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC5B,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA;AAC3C,MAAA,MAAM,QAAA,GAAW,mBAAmB,GAAA,CAAI,KAAA;AACxC,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,OAAA,EAAS,MAAM,iBAAA,CAAkB,GAAA,CAAI,KAAK,CAAA;AAAA,UAC1C,SAAA,EAAW,CAAA,8FAAA,EACT,QAAA,GACI,uEAAA,GACA,gIACN,CAAA,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAO,EAAA,EAAI,CAAA;AAAA,YAChC,GAAA,CAAI,KAAA;AAAA,4BACL,IAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,CAAA,eAAA,EAAkB,QAAA,GAAW,mBAAA,GAAsB,qBAAqB,CAAA,CAAA;AAAA,gBACpF,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBACG,KAAA;AAAA,kBAAM;AAAA;AAAA;AAAA;AACV;AAAA,SAAA;AAAA,QAdK,GAAA,CAAI;AAAA,OAeX;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAGC,KAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,CAAA,EACxD,CAAA;AAAA,IAID,0BACC,GAAA,CAAC,aAAA,EAAA,EAAc,CAAA,GACb,QAAA,CAAS,WAAW,CAAA,mBACtB,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,YAAY,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,KAAK,cAAA,KAAmB;AAAA;AAAA,wBAG7D,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACZ,QAAA,EAAA,QAAA,CAAS,IAAI,CAAC,EAAE,MAAM,QAAA,EAAS,yBAC7B,QAAA,EAAA,EAAuB,IAAA,EAAY,YAArB,IAAA,CAAK,EAAoC,CACzD,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-2ORIFA6I.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport {\n NodeEndpointConfigsDocument,\n NodeEndpointConfigDocument,\n NodeManifestDocument,\n} from \"../generated/operations\";\nimport type {\n NodeEndpointConfig,\n WorkflowPaginationInput,\n} from \"../generated/graphql-types\";\n\n// Alias for backward compatibility\nconst NODE_ENDPOINT_CONFIGS = NodeEndpointConfigsDocument;\nconst NODE_ENDPOINT_CONFIG = NodeEndpointConfigDocument;\nconst NODE_MANIFEST = NodeManifestDocument;\n\ninterface NodeEndpointConfigsData {\n nodeEndpointConfigs: {\n configs: NodeEndpointConfig[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n };\n}\n\ninterface NodeEndpointConfigData {\n nodeEndpointConfig: NodeEndpointConfig | null;\n}\n\ninterface NodeManifestData {\n nodeManifest: unknown;\n}\n\ninterface UseNodeEndpointsOptions {\n pagination?: WorkflowPaginationInput;\n status?: \"AVAILABLE\" | \"DEPRECATED\" | \"DISABLED\";\n publishType?: \"STORE\" | \"CUSTOM\";\n skip?: boolean;\n}\n\n/**\n * Hook to fetch all node endpoint configurations\n * Uses Apollo Client directly to avoid Vite bundling issues with @apollo/client hooks\n */\nexport function useNodeEndpoints(options: UseNodeEndpointsOptions = {}) {\n const { pagination, status = \"AVAILABLE\", publishType, skip } = options;\n\n const [nodes, setNodes] = useState<NodeEndpointConfig[]>([]);\n const [paginationData, setPaginationData] = useState<\n NodeEndpointConfigsData[\"nodeEndpointConfigs\"][\"pagination\"] | undefined\n >();\n const [loading, setLoading] = useState(!skip);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (skip) return;\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: { pagination, status, publishType },\n fetchPolicy: \"cache-first\",\n });\n setNodes(result.data?.nodeEndpointConfigs?.configs ?? []);\n setPaginationData(result.data?.nodeEndpointConfigs?.pagination);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [pagination, status, publishType, skip]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodes,\n pagination: paginationData,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single node endpoint configuration\n */\nexport function useNodeEndpoint(nodeType: string, nodeVersion: string) {\n const [node, setNode] = useState<NodeEndpointConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !nodeVersion) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeEndpointConfigData>({\n query: NODE_ENDPOINT_CONFIG,\n variables: { nodeType, nodeVersion },\n fetchPolicy: \"cache-first\",\n });\n setNode(result.data?.nodeEndpointConfig ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, nodeVersion]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n node,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch node manifest\n */\nexport function useNodeManifest(nodeType: string, version: string) {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!nodeType || !version) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n fetchPolicy: \"cache-first\",\n });\n setManifest(result.data?.nodeManifest ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [nodeType, version]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n manifest,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook for fetching node manifest on demand\n */\nexport function useLazyNodeManifest() {\n const [manifest, setManifest] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getManifest = useCallback(async (nodeType: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: { nodeType, version },\n });\n const manifestData = result.data?.nodeManifest ?? null;\n setManifest(manifestData);\n return manifestData;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getManifest,\n manifest,\n loading,\n error,\n };\n}\n\n/**\n * Utility function to fetch all nodes and their manifests (for initial load)\n * This replaces the top-level await pattern in blocks/index.ts\n */\nexport async function fetchAllNodesWithManifests(): Promise<\n NodeEndpointConfig[]\n> {\n const client = getFluidGridsClient();\n\n try {\n // Fetch all node configurations\n const { data: nodesData } = await client.query<NodeEndpointConfigsData>({\n query: NODE_ENDPOINT_CONFIGS,\n variables: {\n status: \"AVAILABLE\",\n pagination: { limit: 100 },\n },\n });\n\n const nodes = nodesData?.nodeEndpointConfigs?.configs ?? [];\n\n // Fetch manifests for each node (in parallel)\n const nodesWithManifests = await Promise.all(\n nodes.map(async (node) => {\n try {\n const { data: manifestData } = await client.query<NodeManifestData>({\n query: NODE_MANIFEST,\n variables: {\n nodeType: node.nodeType,\n version: node.nodeVersion,\n },\n });\n\n return {\n ...node,\n manifest: manifestData?.nodeManifest ?? null,\n };\n } catch (err) {\n console.error(`Failed to fetch manifest for ${node.nodeType}:`, err);\n return {\n ...node,\n manifest: null,\n };\n }\n }),\n );\n\n return nodesWithManifests;\n } catch (err) {\n console.error(\"Failed to fetch nodes:\", err);\n return [];\n }\n}\n","import { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Skeleton,\n Input,\n Badge,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useNodeEndpoints } from \"../../../hooks/useNodeEndpoints\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport type { NodeEndpointConfig as GqlNodeEndpointConfig } from \"../../../generated/graphql-types\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst NODE_CATEGORIES = [\n { value: \"all\", label: \"All\", icon: \"mdi:view-grid\" },\n { value: \"integration\", label: \"Integration\", icon: \"mdi:connection\" },\n { value: \"data\", label: \"Data\", icon: \"mdi:database\" },\n { value: \"logic\", label: \"Logic\", icon: \"mdi:code-braces\" },\n { value: \"ai-ml\", label: \"AI/ML\", icon: \"mdi:brain\" },\n { value: \"communication\", label: \"Communication\", icon: \"mdi:message-text\" },\n] as const;\n\nconst STATUS_STYLES: Record<\n string,\n { className: string; label: string; icon: string }\n> = {\n AVAILABLE: {\n className: \"bg-emerald-500/15 text-emerald-400 border-emerald-500/30\",\n label: \"Available\",\n icon: \"mdi:check-circle\",\n },\n DEPRECATED: {\n className: \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n label: \"Deprecated\",\n icon: \"mdi:alert\",\n },\n DISABLED: {\n className: \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\",\n label: \"Disabled\",\n icon: \"mdi:close-circle\",\n },\n};\n\nconst CATEGORY_COLORS: Record<string, string> = {\n integration: \"bg-violet-500/15 text-violet-400 border-violet-500/30\",\n data: \"bg-blue-500/15 text-blue-400 border-blue-500/30\",\n logic: \"bg-cyan-500/15 text-cyan-400 border-cyan-500/30\",\n \"ai-ml\": \"bg-amber-500/15 text-amber-400 border-amber-500/30\",\n communication: \"bg-rose-500/15 text-rose-400 border-rose-500/30\",\n};\n\n/**\n * Infer a category for a node based on its metadata.\n */\nfunction inferNodeCategory(node: GqlNodeEndpointConfig): string {\n const text = [\n node.name,\n node.nodeType,\n ...(node.keywords ?? []),\n ...(node.kind ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n\n if (\n text.includes(\"ai\") ||\n text.includes(\"ml\") ||\n text.includes(\"llm\") ||\n text.includes(\"model\")\n )\n return \"ai-ml\";\n if (\n text.includes(\"integrat\") ||\n text.includes(\"api\") ||\n text.includes(\"http\") ||\n text.includes(\"webhook\") ||\n text.includes(\"oauth\")\n )\n return \"integration\";\n if (\n text.includes(\"data\") ||\n text.includes(\"transform\") ||\n text.includes(\"filter\") ||\n text.includes(\"aggregate\") ||\n text.includes(\"database\")\n )\n return \"data\";\n if (\n text.includes(\"email\") ||\n text.includes(\"slack\") ||\n text.includes(\"notification\") ||\n text.includes(\"sms\") ||\n text.includes(\"message\")\n )\n return \"communication\";\n if (\n text.includes(\"if\") ||\n text.includes(\"switch\") ||\n text.includes(\"loop\") ||\n text.includes(\"merge\") ||\n text.includes(\"logic\") ||\n text.includes(\"condition\")\n )\n return \"logic\";\n return \"integration\"; // default\n}\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction NodesSkeleton() {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {Array.from({ length: 8 }).map((_, i) => (\n <Skeleton key={i} className=\"h-44 rounded-lg bg-card-foreground/10\" />\n ))}\n </div>\n );\n}\n\nfunction EmptyState({ hasFilters }: { hasFilters: boolean }) {\n const tr = useTr();\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <div className=\"rounded-full bg-background-secondary p-4 mb-4\">\n <Icon\n icon=\"mdi:puzzle-outline\"\n width={40}\n className=\"text-text-secondary\"\n />\n </div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-2\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyTitleFiltered\",\n \"No matching nodes\",\n )\n : tr(\"fluidgrids.nodes.nodesPage.emptyTitle\", \"No nodes registered\")}\n </h3>\n <p className=\"text-sm text-text-secondary max-w-md\">\n {hasFilters\n ? tr(\n \"fluidgrids.nodes.nodesPage.emptyHintFiltered\",\n \"Try adjusting your search or category filter.\",\n )\n : tr(\n \"fluidgrids.nodes.nodesPage.emptyHint\",\n \"Node endpoint configurations will appear here once registered.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction ErrorState({\n message,\n onRetry,\n}: {\n message: string;\n onRetry: () => void;\n}) {\n const tr = useTr();\n return (\n <div className=\"p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\"fluidgrids.nodes.nodesPage.errorHeading\", \"Error loading nodes\")}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRetry}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n {tr(\"fluidgrids.nodes.nodesPage.errorRetry\", \"Retry\")}\n </Button>\n </div>\n );\n}\n\ninterface NodeCardProps {\n node: GqlNodeEndpointConfig;\n category: string;\n}\n\nfunction NodeCard({ node, category }: NodeCardProps) {\n const tr = useTr();\n const status = STATUS_STYLES[node.status] ?? STATUS_STYLES.AVAILABLE;\n const catColor =\n CATEGORY_COLORS[category] ??\n \"bg-zinc-500/15 text-zinc-400 border-zinc-500/30\";\n const catLabel =\n NODE_CATEGORIES.find((c) => c.value === category)?.label ??\n tr(\"fluidgrids.nodes.nodeCard.categoryFallback\", \"Node\");\n\n return (\n <Card className=\"border border-border-secondary bg-background-secondary hover:border-border-primary transition-all duration-200 flex flex-col\">\n <CardHeader className=\"flex-1 pb-3\">\n <div className=\"flex items-start justify-between gap-2 mb-3\">\n <div className=\"rounded-lg bg-background-tertiary p-2\">\n <Icon\n icon={node.icon ?? node.favicon ?? \"mdi:puzzle\"}\n width={22}\n className=\"text-text-primary\"\n />\n </div>\n <Badge variant=\"outline\" className={status.className}>\n <Icon icon={status.icon} width={12} className=\"mr-1\" />\n {status.label}\n </Badge>\n </div>\n <h3 className=\"font-semibold text-text-primary text-sm leading-tight mb-1 line-clamp-1\">\n {node.name}\n </h3>\n <p className=\"text-xs text-text-secondary line-clamp-2 min-h-[2rem]\">\n {node.description ??\n tr(\n \"fluidgrids.nodes.nodeCard.noDescription\",\n \"No description available.\",\n )}\n </p>\n </CardHeader>\n <div className=\"px-6 pb-4 pt-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className={catColor}>\n {catLabel}\n </Badge>\n <span className=\"text-xs text-text-secondary\">\n v{node.nodeVersion}\n </span>\n </div>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\">\n <Icon icon=\"mdi:cog\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\n \"fluidgrids.nodes.nodeCard.configureTooltip\",\n \"Configure node\",\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n </Card>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function NodesPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [search, setSearch] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string>(\"all\");\n\n // Fetch available nodes (default status=AVAILABLE)\n const { nodes, loading, error, refetch } = useNodeEndpoints({\n pagination: { limit: 200 },\n });\n\n // Fetch deprecated nodes for stats\n const { nodes: deprecatedNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DEPRECATED\",\n });\n\n // Fetch disabled nodes for stats\n const { nodes: disabledNodes } = useNodeEndpoints({\n pagination: { limit: 200 },\n status: \"DISABLED\",\n });\n\n // Categorize nodes\n const categorizedNodes = useMemo(() => {\n return nodes.map((n) => ({\n node: n,\n category: inferNodeCategory(n),\n }));\n }, [nodes]);\n\n // Filter\n const filtered = useMemo(() => {\n let items = categorizedNodes;\n\n if (activeCategory !== \"all\") {\n items = items.filter((item) => item.category === activeCategory);\n }\n\n if (search.trim()) {\n const q = search.toLowerCase();\n items = items.filter(\n (item) =>\n item.node.name.toLowerCase().includes(q) ||\n item.node.nodeType.toLowerCase().includes(q) ||\n (item.node.description ?? \"\").toLowerCase().includes(q) ||\n item.node.keywords?.some((k) => k.toLowerCase().includes(q)),\n );\n }\n\n return items;\n }, [categorizedNodes, activeCategory, search]);\n\n // Stats (combine all statuses)\n const stats = useMemo(() => {\n const active = nodes.length;\n const deprecated = deprecatedNodes.length;\n const total = active + deprecated + disabledNodes.length;\n return { total, active, deprecated };\n }, [nodes, deprecatedNodes, disabledNodes]);\n\n // Category counts\n const categoryCounts = useMemo(() => {\n const counts: Record<string, number> = { all: categorizedNodes.length };\n for (const item of categorizedNodes) {\n counts[item.category] = (counts[item.category] ?? 0) + 1;\n }\n return counts;\n }, [categorizedNodes]);\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\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.nodes.nodesPage.title\", \"Node Catalog\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.nodes.nodesPage.subtitle\",\n \"Browse and manage available workflow nodes\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button variant=\"outline\" onClick={() => refetch()}>\n <Icon icon=\"mdi:refresh\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.nodes.nodesPage.refreshButton\", \"Refresh\")}\n </Button>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.nodes.nodesPage.backToWorkflowsButton\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid grid-cols-3 gap-3 mb-6\">\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:puzzle\"\n width={18}\n className=\"text-text-secondary\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statTotal\", \"Total Nodes\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-text-primary mt-1\">\n {loading ? \"—\" : stats.total}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon=\"mdi:check-circle\"\n width={18}\n className=\"text-emerald-400\"\n />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statActive\", \"Active\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-emerald-400 mt-1\">\n {loading ? \"—\" : stats.active}\n </p>\n </div>\n <div className=\"p-3 rounded-lg bg-background-secondary border border-border-secondary\">\n <div className=\"flex items-center gap-2\">\n <Icon icon=\"mdi:alert\" width={18} className=\"text-amber-400\" />\n <p className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.nodes.nodesPage.statDeprecated\", \"Deprecated\")}\n </p>\n </div>\n <p className=\"text-xl font-bold text-amber-400 mt-1\">\n {loading ? \"—\" : stats.deprecated}\n </p>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"relative max-w-md mb-6\">\n <Icon\n icon=\"mdi:magnify\"\n width={18}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n />\n <Input\n placeholder={tr(\n \"fluidgrids.nodes.nodesPage.searchPlaceholder\",\n \"Search nodes by name, type, or keyword...\",\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10 bg-background-secondary border-border-secondary\"\n />\n </div>\n\n {/* Category Tabs */}\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {NODE_CATEGORIES.map((cat) => {\n const count = categoryCounts[cat.value] ?? 0;\n const isActive = activeCategory === cat.value;\n return (\n <button\n key={cat.value}\n onClick={() => setActiveCategory(cat.value)}\n className={`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${\n isActive\n ? \"bg-background-tertiary text-text-primary border border-border-primary\"\n : \"bg-background-secondary text-text-secondary border border-border-secondary hover:text-text-primary hover:border-border-primary\"\n }`}\n >\n <Icon icon={cat.icon} width={16} />\n {cat.label}\n <span\n className={`ml-0.5 text-xs ${isActive ? \"text-text-primary\" : \"text-text-secondary\"}`}\n >\n ({count})\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6\">\n <ErrorState message={error.message} onRetry={refetch} />\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <NodesSkeleton />\n ) : filtered.length === 0 ? (\n <EmptyState\n hasFilters={search.trim().length > 0 || activeCategory !== \"all\"}\n />\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4\">\n {filtered.map(({ node, category }) => (\n <NodeCard key={node.id} node={node} category={category} />\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -7,15 +7,15 @@ import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, Instal
7
7
  import { QuotaExhaustedDialog } from './chunk-AANIWER2.js';
8
8
  import { SdkPermissionGate, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-W23ZXNKU.js';
9
9
  import { cn as cn$1 } from './chunk-3ZYUGTIT.js';
10
- import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-GKSXZFDY.js';
11
- import { config, getFluidGridsConfig, validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-U4AJLVHA.js';
10
+ import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-XBIHI224.js';
11
+ import { config, getFluidGridsConfig, validateTrustedOrigin, resetFluidGridsExecutionState, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-DFGJKGWH.js';
12
12
  import { useFlowStore } from './chunk-3B5YEXSW.js';
13
13
  import { NodeEndpointConfigsDocument, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowRunDocument, FluidgridsEntityTagsDocument, AvailableFluidgridsTagsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, UntagFluidgridsEntityDocument, ReplaceFluidgridsEntityTagsDocument, CreateFluidgridsTagDocument, NodeSchemaIntrospectionDocument, useWorkflowPinnedDataQuery, usePinNodeDataMutation, useUnpinNodeDataMutation, useRunFromNodeEligibilityQuery, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-3P4YQ7DO.js';
14
14
  import { throwIfResultError, describeOperationError } from './chunk-LMO5ASOE.js';
15
15
  import { useTr, FluidGridsTranslationProvider, ENGLISH_FALLBACK_TRANSLATOR } from './chunk-7YWBH2A5.js';
16
- import { waitForFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-5BDQNSP3.js';
16
+ import { waitForFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-ZBMMEE5U.js';
17
17
  import * as React2 from 'react';
18
- import React2__default, { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, memo, createContext, lazy, useCallback, useContext, useLayoutEffect, Suspense, useDeferredValue } from 'react';
18
+ import React2__default, { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, memo, createContext, lazy, useCallback, useSyncExternalStore, useContext, useLayoutEffect, Suspense, useDeferredValue } from 'react';
19
19
  import { Textarea, Input, Button, Card, Badge, CardContent as CardContent$1, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator, Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, TooltipProvider, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Popover, PopoverTrigger, PopoverContent, Tooltip, TooltipTrigger, TooltipContent, Toaster, Tabs, TabsList, TabsTrigger, TabsContent, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardDescription as CardDescription$1, ScrollArea, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@burdenoff/fe-libs/ui';
20
20
  import { cn } from '@burdenoff/fe-libs/utils';
21
21
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -6060,6 +6060,8 @@ function FluidGridsProvider({
6060
6060
  authToken,
6061
6061
  workspaceToken,
6062
6062
  workspaceId,
6063
+ productId,
6064
+ userId,
6063
6065
  trustedOrigins,
6064
6066
  tenantId,
6065
6067
  organizationId,
@@ -6070,6 +6072,43 @@ function FluidGridsProvider({
6070
6072
  children
6071
6073
  }) {
6072
6074
  validateTrustedOrigin(trustedOrigins);
6075
+ const [selection, setSelection] = useState(() => ({
6076
+ prop: productId,
6077
+ productId: productId ?? getFluidGridsConfig().productId
6078
+ }));
6079
+ if (selection.prop !== productId) {
6080
+ setSelection({ prop: productId, productId });
6081
+ }
6082
+ const resolvedProductId = selection.prop === productId ? selection.productId : productId;
6083
+ const identity = JSON.stringify([
6084
+ apiGatewayUrl,
6085
+ workspaceId,
6086
+ tenantId,
6087
+ resolvedProductId,
6088
+ userId
6089
+ ]);
6090
+ const [readiness] = useState(() => {
6091
+ let activeIdentity2 = null;
6092
+ const listeners2 = /* @__PURE__ */ new Set();
6093
+ return {
6094
+ subscribe: (listener) => {
6095
+ listeners2.add(listener);
6096
+ return () => {
6097
+ listeners2.delete(listener);
6098
+ };
6099
+ },
6100
+ snapshot: () => activeIdentity2,
6101
+ set: (value) => {
6102
+ activeIdentity2 = value;
6103
+ for (const listener of listeners2) listener();
6104
+ }
6105
+ };
6106
+ });
6107
+ const activeIdentity = useSyncExternalStore(
6108
+ readiness.subscribe,
6109
+ readiness.snapshot,
6110
+ () => null
6111
+ );
6073
6112
  const workspaceClient = useMemo(() => {
6074
6113
  if (externalWorkspaceClient) {
6075
6114
  return externalWorkspaceClient;
@@ -6083,6 +6122,7 @@ function FluidGridsProvider({
6083
6122
  authToken,
6084
6123
  workspaceToken,
6085
6124
  workspaceId,
6125
+ productId: resolvedProductId,
6086
6126
  tenantId
6087
6127
  });
6088
6128
  }
@@ -6094,6 +6134,7 @@ function FluidGridsProvider({
6094
6134
  authToken,
6095
6135
  workspaceToken,
6096
6136
  workspaceId,
6137
+ resolvedProductId,
6097
6138
  tenantId,
6098
6139
  externalWorkspaceClient,
6099
6140
  legacyClient
@@ -6120,6 +6161,14 @@ function FluidGridsProvider({
6120
6161
  organizationId,
6121
6162
  externalGlobalClient
6122
6163
  ]);
6164
+ useEffect(() => {
6165
+ resetFluidGridsExecutionState();
6166
+ readiness.set(identity);
6167
+ return () => {
6168
+ readiness.set(null);
6169
+ resetFluidGridsExecutionState();
6170
+ };
6171
+ }, [identity, readiness]);
6123
6172
  useEffect(() => {
6124
6173
  setFluidGridsClient(workspaceClient);
6125
6174
  return () => {
@@ -6141,6 +6190,7 @@ function FluidGridsProvider({
6141
6190
  globalApiUrl,
6142
6191
  authToken,
6143
6192
  workspaceId,
6193
+ productId: resolvedProductId,
6144
6194
  trustedOrigins,
6145
6195
  tenantId,
6146
6196
  organizationId
@@ -6153,6 +6203,7 @@ function FluidGridsProvider({
6153
6203
  globalApiUrl,
6154
6204
  authToken,
6155
6205
  workspaceId,
6206
+ resolvedProductId,
6156
6207
  trustedOrigins,
6157
6208
  tenantId,
6158
6209
  organizationId
@@ -6163,6 +6214,8 @@ function FluidGridsProvider({
6163
6214
  globalApiUrl,
6164
6215
  authToken,
6165
6216
  workspaceId,
6217
+ productId: resolvedProductId,
6218
+ userId,
6166
6219
  trustedOrigins,
6167
6220
  tenantId,
6168
6221
  organizationId,
@@ -6175,6 +6228,8 @@ function FluidGridsProvider({
6175
6228
  globalApiUrl,
6176
6229
  authToken,
6177
6230
  workspaceId,
6231
+ resolvedProductId,
6232
+ userId,
6178
6233
  trustedOrigins,
6179
6234
  tenantId,
6180
6235
  organizationId,
@@ -6185,7 +6240,7 @@ function FluidGridsProvider({
6185
6240
  // previous language until remount.
6186
6241
  t
6187
6242
  ]);
6188
- return /* @__PURE__ */ jsx(FluidGridsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(FluidGridsTranslationProvider, { t: t ?? ENGLISH_FALLBACK_TRANSLATOR, children: /* @__PURE__ */ jsx(ApolloProvider, { client: workspaceClient, children }) }) });
6243
+ return /* @__PURE__ */ jsx(FluidGridsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(FluidGridsTranslationProvider, { t: t ?? ENGLISH_FALLBACK_TRANSLATOR, children: /* @__PURE__ */ jsx(ApolloProvider, { client: workspaceClient, children: activeIdentity === identity ? children : null }) }) });
6189
6244
  }
6190
6245
  function useFluidGridsContext() {
6191
6246
  const context = useContext(FluidGridsContext);
@@ -10833,7 +10888,7 @@ function DesktopSidebarFragment({
10833
10888
  if (nodesToInstall.length > 0) {
10834
10889
  const { getGlobalStoreClient: getStore } = await import('./global-client-OW43ZRDR.js');
10835
10890
  const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-IMNN4YME.js');
10836
- const { getFluidGridsConfig: getFluidGridsConfig3 } = await import('./config-5UMLMALY.js');
10891
+ const { getFluidGridsConfig: getFluidGridsConfig3 } = await import('./config-SCVEDF5V.js');
10837
10892
  const storeClient = getStore();
10838
10893
  const cfg = getFluidGridsConfig3();
10839
10894
  for (let i = 0; i < nodesToInstall.length; i++) {
@@ -10888,8 +10943,8 @@ function DesktopSidebarFragment({
10888
10943
  overrides.templateInputs
10889
10944
  );
10890
10945
  }
10891
- const { getFluidGridsClient: getFluidGridsClient2 } = await import('./client-AMUUS7VE.js');
10892
- const { getFluidGridsConfig: getFluidGridsConfig2 } = await import('./config-5UMLMALY.js');
10946
+ const { getFluidGridsClient: getFluidGridsClient2 } = await import('./client-YFAZ23OL.js');
10947
+ const { getFluidGridsConfig: getFluidGridsConfig2 } = await import('./config-SCVEDF5V.js');
10893
10948
  const { gql: gql10 } = await import('@apollo/client/core');
10894
10949
  const IMPORT_MUTATION = gql10`
10895
10950
  mutation ImportWorkflowTemplate(
@@ -25431,5 +25486,5 @@ var FlowBuilderPage = ({
25431
25486
  };
25432
25487
 
25433
25488
  export { Card2 as Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConnectionFormDialog, ConnectionSelector, EntityTagPicker, FLUIDGRIDS_ENTITY_TYPES, FlowBuilderPage, FluidGridsMark, FluidGridsProvider, TemplateCard, buildNodeCheck, buildRequiredNodeTypes, listCustomBlocks, mergeStickyNotes, refetchStoreNodes, registerCustomBlock, resolveUiSpec, stripSubmitActions, tagLabel, useAvailableTags, useConnection, useConnections, useConnectionsByProvider, useCreateConnection, useCreateTag, useDraftEntityTags, useEntityTags, useFluidGridsContext, useImportWorkflowTemplate, useInitiateOAuth, useInstalledNodes, useNodeExecution, useProviders, useReplaceEntityTags, useSearchTags, useTagEntity, useUntagEntity, useWorkflowTemplates };
25434
- //# sourceMappingURL=chunk-U2ORKW7G.js.map
25435
- //# sourceMappingURL=chunk-U2ORKW7G.js.map
25489
+ //# sourceMappingURL=chunk-5DQU54IB.js.map
25490
+ //# sourceMappingURL=chunk-5DQU54IB.js.map