@trustgraph/react-state 1.2.0 → 1.2.1
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.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +2 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/state/token-costs.d.ts +10 -2
- package/dist/state/token-costs.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/NotificationProvider.tsx","../src/hooks/useNotification.ts","../src/state/progress.ts","../src/hooks/useActivity.ts","../src/state/session.ts","../src/state/conversation.ts","../src/state/workbench.ts","../src/state/load.ts","../src/state/search.ts","../src/model/settings-types.ts","../src/state/settings.ts","../src/state/flows.ts","../src/utils/document-encoding.ts","../src/model/document-metadata.ts","../src/state/library.ts","../src/state/triples.ts","../src/utils/knowledge-graph.ts","../src/utils/knowledge-graph-viz.ts","../src/state/graph-query.ts","../src/state/graph-embeddings.ts","../src/utils/row.ts","../src/utils/vector-search.ts","../src/state/vector-search.ts","../src/state/entity-query.ts","../src/state/inference.ts","../src/state/chat-session.ts","../src/state/structured-query.ts","../src/state/objects-query.ts","../src/state/embeddings.ts","../src/state/collections.ts","../src/state/nlp-query.ts","../src/state/processing.ts","../src/state/agent-tools.ts","../src/state/mcp-tools.ts","../src/state/prompts.ts","../src/state/schemas.ts","../src/state/ontologies.ts","../src/state/knowledge-cores.ts","../src/state/token-costs.ts","../src/state/llm-models.ts","../src/state/flow-blueprints.ts","../src/state/flow-parameters.ts","../src/state/node-details.ts"],"sourcesContent":["import React, { createContext, ReactNode } from \"react\";\nimport type { NotificationHandler } from \"./types\";\n\n// Create context for notification handler\nexport const NotificationContext = createContext<NotificationHandler | null>(\n null\n);\n\n/**\n * Props for NotificationProvider\n */\nexport interface NotificationProviderProps {\n children: ReactNode;\n handler: NotificationHandler;\n}\n\n/**\n * NotificationProvider component\n * Provides a notification handler to all child components via context\n * This allows applications to inject their own notification/toast UI implementation\n *\n * @example\n * ```tsx\n * const toasterHandler: NotificationHandler = {\n * success: (msg) => toast.success(msg),\n * error: (msg) => toast.error(msg),\n * warning: (msg) => toast.warning(msg),\n * info: (msg) => toast.info(msg)\n * };\n *\n * <NotificationProvider handler={toasterHandler}>\n * <App />\n * </NotificationProvider>\n * ```\n */\nexport const NotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n handler,\n}) => {\n return (\n <NotificationContext.Provider value={handler}>\n {children}\n </NotificationContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { NotificationContext } from \"../NotificationProvider\";\nimport type { NotificationHandler } from \"../types\";\n\n/**\n * Custom hook for accessing the notification handler\n * Must be used within a NotificationProvider\n *\n * @returns {NotificationHandler} The notification handler methods\n * @throws {Error} If used outside of NotificationProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const notify = useNotification();\n *\n * const handleSuccess = () => {\n * notify.success(\"Operation completed!\");\n * };\n *\n * const handleError = () => {\n * notify.error(\"Something went wrong\");\n * };\n *\n * return <button onClick={handleSuccess}>Do Something</button>;\n * }\n * ```\n */\nexport const useNotification = (): NotificationHandler => {\n const handler = useContext(NotificationContext);\n\n if (!handler) {\n throw new Error(\n \"useNotification must be used within a NotificationProvider\"\n );\n }\n\n return handler;\n};\n","import { create } from \"zustand\";\n\n// Interface defining the shape of the progress state store\nexport interface ProgressState {\n // Set of active activity identifiers - using Set for O(1) lookups and\n // automatic deduplication\n activity: Set<string>;\n\n // Current error message, empty string when no error\n error: string;\n\n // Function to add a new activity to the tracking set\n addActivity: (act: string) => void;\n\n // Function to remove an activity from the tracking set\n removeActivity: (act: string) => void;\n\n // Function to set/update the current error message\n setError: (error: string) => void;\n}\n\n// Zustand store for managing progress/loading states and errors across the\n// application\nexport const useProgressStateStore = create<ProgressState>()((set) => ({\n // Initial state: empty activity set and no error\n activity: new Set<string>([]),\n error: \"\",\n\n // Add an activity identifier to track ongoing operations\n addActivity: (act) =>\n set((state) => {\n // Create a new Set to maintain immutability (Zustand best practice)\n const n = new Set(state.activity);\n n.add(act);\n return {\n ...state,\n activity: n,\n };\n }),\n\n // Remove an activity identifier when operation completes\n removeActivity: (act) =>\n set((state) => {\n // Create a new Set to maintain immutability\n const n = new Set(state.activity);\n n.delete(act);\n return {\n ...state,\n activity: n,\n };\n }),\n\n // Update the error state (pass empty string to clear error)\n setError: (error) =>\n set((state) => {\n return {\n ...state,\n error: error,\n };\n }),\n}));\n","import { useEffect } from \"react\";\nimport { useProgressStateStore } from \"../state/progress\";\n\n/**\n * Custom hook for managing activity notifications in the UI\n * Automatically adds/removes activity indicators based on a boolean condition\n *\n * @param {boolean} isActive - Boolean condition that determines if activity\n * is ongoing\n * @param {string} description - Description text to display for the activity\n *\n * @example\n * // Show \"Loading documents\" while documentsQuery.isLoading is true\n * useActivity(documentsQuery.isLoading, \"Loading documents\");\n *\n * @example\n * // Show \"Saving data\" while mutation is pending\n * useActivity(saveMutation.isPending, \"Saving data\");\n */\nexport const useActivity = (isActive: boolean, description: string) => {\n // Get activity management functions from the progress state store\n const addActivity = useProgressStateStore((state) => state.addActivity);\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n useEffect(() => {\n // Only manage activity when isActive is true\n if (isActive) {\n // Add the activity to the progress state\n addActivity(description);\n\n // Return cleanup function to remove activity when effect cleans up\n // This ensures activity is removed when:\n // - isActive becomes false\n // - description changes\n // - component unmounts\n return () => removeActivity(description);\n }\n // Re-run effect when any dependency changes\n }, [isActive, description, addActivity, removeActivity]);\n};\n","import { create } from \"zustand\";\n\n// Interface defining the shape of the session state store\nexport interface SessionState {\n // Current flow ID\n flowId: string;\n\n // Current flow name/type\n flow: string | null;\n\n // Description of the current flow\n flowDescription: string;\n\n // Function to update the current flow ID\n setFlowId: (v: string) => void;\n\n // Function to update the current flow\n setFlow: (v: string) => void;\n}\n\n// Zustand store for managing session/workflow state\nexport const useSessionStore = create<SessionState>()((set) => ({\n flowId: \"default\",\n flow: null,\n flowDescription: \"\",\n\n setFlowId: (v) =>\n set(() => ({\n flowId: v,\n })),\n\n setFlow: (v) =>\n set(() => ({\n flow: v,\n })),\n}));\n","import { create } from \"zustand\";\nimport { Message } from \"../model/message\";\n\nexport type ChatMode = \"graph-rag\" | \"agent\" | \"basic-llm\";\n\nexport interface ConversationState {\n messages: Message[];\n input: string;\n chatMode: ChatMode;\n\n setMessages: (v: Message[]) => void;\n addMessage: (\n role: string,\n text: string,\n type?: \"normal\" | \"thinking\" | \"observation\" | \"answer\"\n ) => void;\n updateLastMessage: (text: string) => void;\n setInput: (v: string) => void;\n setChatMode: (mode: ChatMode) => void;\n}\n\nexport const useConversation = create<ConversationState>()((set) => ({\n messages: [\n {\n role: \"ai\",\n text: \"Welcome to the TrustGraph Test Suite. Use the chat interface to perform Graph RAG requests.\",\n },\n ],\n\n input: \"\",\n chatMode: \"graph-rag\",\n\n setMessages: (v) =>\n set(() => ({\n messages: v,\n })),\n\n addMessage: (\n role: string,\n text: string,\n type?: \"normal\" | \"thinking\" | \"observation\" | \"answer\"\n ) =>\n set((state) => ({\n messages: [\n ...state.messages,\n {\n role: role,\n text: text,\n type: type || \"normal\",\n },\n ],\n })),\n\n updateLastMessage: (text: string) =>\n set((state) => {\n if (state.messages.length === 0) return state;\n const messages = [...state.messages];\n messages[messages.length - 1] = {\n ...messages[messages.length - 1],\n text: text,\n };\n return { messages };\n }),\n\n setInput: (v) =>\n set(() => ({\n input: v,\n })),\n\n setChatMode: (mode: ChatMode) =>\n set(() => ({\n chatMode: mode,\n })),\n}));\n","// Zustand state management library for creating stores\nimport { create } from \"zustand\";\n// Entity interface definition for knowledge graph entities\nimport { Entity } from \"../model/entity\";\n\n/**\n * State interface for the main workbench/workspace application\n * Manages the current tool selection, entity selection, and available entities\n */\nexport interface WorkbenchState {\n // Currently selected entity in the knowledge graph (optional)\n selected?: Entity;\n // Currently active tool/page (e.g., \"chat\", \"graph\", \"search\", etc.)\n tool: string;\n // List of all available entities in the current context\n entities: Entity[];\n\n // Entity selection management\n setSelected: (e: Entity) => void; // Select a specific entity\n unsetSelected: () => void; // Clear the current entity selection\n\n // Tool/page navigation\n setTool: (v: string) => void; // Switch to a different tool/page\n\n // Entity list management\n setEntities: (ents: Entity[]) => void; // Update the available entities list\n}\n\n/**\n * Zustand store for managing the main workbench application state\n * Provides centralized state management for tool navigation and entity selection\n */\nexport const useWorkbenchStateStore = create<WorkbenchState>()((set) => ({\n // Initial state values\n selected: undefined, // No entity selected by default\n\n tool: \"chat\", // Default tool is the chat interface\n\n entities: [], // Empty entities list by default\n\n // Entity selection functions\n setSelected: (e: Entity) =>\n set(() => ({\n selected: e,\n })),\n\n // Clear the current entity selection\n unsetSelected: () =>\n set(() => ({\n selected: undefined,\n })),\n\n // Tool/page navigation function\n setTool: (v) =>\n set(() => ({\n tool: v,\n })),\n\n // Update the list of available entities\n setEntities: (v) =>\n set(() => ({\n entities: v,\n })),\n}));\n","// Zustand state management library for creating stores\nimport { create } from \"zustand\";\n\n/**\n * State interface for managing document loading and upload operations\n * Handles file uploads, text input, metadata, and processing operations\n */\nexport interface LoadState {\n // Document metadata\n title: string; // Document title/name\n comments: string; // Additional comments or description\n url: string; // Source URL (for web-based content)\n keywords: string[]; // Keywords/tags associated with the document\n\n // Processing configuration\n operation: string; // Type of operation (e.g., \"upload-pdf\", \"upload-text\")\n\n // File management\n files: File[]; // Files selected for upload\n uploaded: string[]; // List of successfully uploaded file names\n text: string; // Direct text input content\n\n // State update functions for document metadata\n setTitle: (v: string) => void;\n setComments: (v: string) => void;\n setUrl: (v: string) => void;\n setKeywords: (v: string[]) => void;\n\n // State update functions for processing\n setOperation: (v: string) => void;\n\n // State update functions for file management\n setFiles: (v: File[]) => void;\n setUploaded: (v: string[]) => void;\n setText: (v: string) => void;\n addUploaded: (v: string) => void; // Add a single uploaded file to the list\n removeFile: (v: File) => void; // Remove a file from the selection\n\n // Text upload tracking\n textUploads: number; // Counter for text-based uploads\n setTextUploads: (v: number) => void;\n incTextUploads: () => void; // Increment the text upload counter\n}\n\n/**\n * Zustand store for managing document loading state\n * Provides centralized state management for the document upload/loading workflow\n */\nexport const useLoadStateStore = create<LoadState>()((set) => ({\n // Initial state values\n title: \"\", // Empty title by default\n comments: \"\", // Empty comments by default\n url: \"\", // Empty URL by default\n keywords: [], // No keywords by default\n operation: \"upload-pdf\", // Default operation is PDF upload\n files: [], // No files selected by default\n uploaded: [], // No files uploaded yet\n text: \"\", // Empty text content by default\n\n // Setter functions for document metadata\n setTitle: (v) =>\n set(() => ({\n title: v,\n })),\n\n setComments: (v) =>\n set(() => ({\n comments: v,\n })),\n\n setUrl: (v) =>\n set(() => ({\n url: v,\n })),\n\n setKeywords: (v) =>\n set(() => ({\n keywords: v,\n })),\n\n // Setter function for processing operation type\n setOperation: (v) =>\n set(() => ({\n operation: v,\n })),\n\n // Setter functions for file management\n setFiles: (v) =>\n set(() => ({\n files: v,\n })),\n\n setUploaded: (v) =>\n set(() => ({\n uploaded: v,\n })),\n\n // Add a single file to the uploaded list (preserving existing uploads)\n addUploaded: (v) =>\n set((state) => ({\n uploaded: [...state.uploaded, v],\n })),\n\n setText: (v) =>\n set(() => ({\n text: v,\n })),\n\n // Remove a specific file from the selected files list\n removeFile: (v) =>\n set((state) => ({\n files: Array.from(state.files).filter((f) => f != v),\n })),\n\n // Text upload counter management\n textUploads: 0, // Initial counter value\n setTextUploads: (v) =>\n set(() => ({\n textUploads: v,\n })),\n // Increment the text upload counter (useful for generating unique IDs)\n incTextUploads: () =>\n set((state) => ({\n textUploads: state.textUploads + 1,\n })),\n}));\n","import { create } from \"zustand\";\nimport { Row } from \"../utils/row\";\n\n// Interface defining the shape of the search state store\nexport interface SearchState {\n // Array of Row objects representing search results or filtered data\n rows: Row[];\n\n // Function to update the entire rows array (replaces all results)\n setRows: (v: Row[]) => void;\n\n // Current search input/query string from user\n input: string;\n\n // Function to update the search input value\n setInput: (v: string) => void;\n}\n\n// Zustand store for managing search functionality state\nexport const useSearchStateStore = create<SearchState>()((set) => ({\n // Initial state: no search results and empty search input\n rows: [],\n input: \"\",\n\n // Replace the entire rows array with new search results\n // Note: This completely overwrites the previous results\n setRows: (v) =>\n set(() => ({\n rows: v,\n })),\n\n // Update the search input string (typically bound to search input field)\n setInput: (v) =>\n set(() => ({\n input: v,\n })),\n}));\n","export interface Settings {\n user: string;\n collection: string;\n authentication: {\n apiKey: string;\n };\n graphrag: {\n entityLimit: number;\n tripleLimit: number;\n maxSubgraphSize: number;\n pathLength: number;\n };\n featureSwitches: {\n ontologyEditor: boolean;\n submissions: boolean;\n agentTools: boolean;\n mcpTools: boolean;\n schemas: boolean;\n tokenCost: boolean;\n flowBlueprints: boolean;\n flowBlueprintEditor: boolean;\n structuredQuery: boolean;\n llmModels: boolean;\n };\n}\n\nexport const DEFAULT_SETTINGS: Settings = {\n user: \"trustgraph\", // Default user ID\n collection: \"default\", // Default collection ID\n authentication: {\n apiKey: \"\",\n },\n graphrag: {\n entityLimit: 50,\n tripleLimit: 30,\n maxSubgraphSize: 1000,\n pathLength: 2,\n },\n featureSwitches: {\n ontologyEditor: false,\n submissions: false,\n agentTools: true, // On by default\n mcpTools: false, // Off by default\n schemas: false, // Off by default\n tokenCost: false, // Off by default\n flowBlueprints: false, // Off by default\n flowBlueprintEditor: false, // Off by default - experimental feature\n structuredQuery: false, // Off by default\n llmModels: false, // Off by default\n },\n};\n\nexport const SETTINGS_STORAGE_KEY = \"trustgraph-settings\";\n","// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Settings types and defaults\nimport {\n Settings,\n DEFAULT_SETTINGS,\n SETTINGS_STORAGE_KEY,\n} from \"../model/settings-types\";\n\n/**\n * Utility function to merge imported settings with defaults\n * Ensures all required properties exist and handles partial imports\n */\nconst mergeWithDefaults = (settings: Partial<Settings>): Settings => {\n return {\n user: settings.user ?? DEFAULT_SETTINGS.user,\n collection: settings.collection ?? DEFAULT_SETTINGS.collection,\n authentication: {\n ...DEFAULT_SETTINGS.authentication,\n ...settings.authentication,\n },\n graphrag: {\n ...DEFAULT_SETTINGS.graphrag,\n ...settings.graphrag,\n },\n featureSwitches: {\n ...DEFAULT_SETTINGS.featureSwitches,\n ...settings.featureSwitches,\n },\n };\n};\n\n/**\n * Utility function to update localStorage as a cache/fallback\n */\nconst updateLocalStorage = (settings: Settings) => {\n try {\n localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(settings));\n } catch (error) {\n console.warn(\"Failed to update localStorage:\", error);\n }\n};\n\n/**\n * Utility function to load from localStorage as fallback\n */\nconst loadFromLocalStorage = (): Settings => {\n try {\n const stored = localStorage.getItem(SETTINGS_STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n return mergeWithDefaults(parsed);\n }\n } catch (error) {\n console.warn(\"Failed to load from localStorage:\", error);\n }\n return DEFAULT_SETTINGS;\n};\n\n/**\n * Custom hook for managing application settings\n * Uses TanStack Query for consistent async patterns while storing in localStorage\n * Ready for future backend integration when needed\n */\nexport const useSettings = () => {\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Query to fetch settings from localStorage\n const settingsQuery = useQuery({\n queryKey: [\"settings\"],\n queryFn: async () => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n return loadFromLocalStorage();\n },\n // Enable background refetching\n staleTime: 5 * 60 * 1000, // 5 minutes\n refetchOnWindowFocus: false,\n });\n\n // Mutation for updating settings\n const updateSettingsMutation = useMutation({\n mutationFn: async ({\n path,\n value,\n onSuccess,\n }: {\n path: string;\n value: unknown;\n onSuccess?: () => void;\n }) => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n\n // Get fresh settings from localStorage to avoid race conditions\n const currentSettings = loadFromLocalStorage();\n const newSettings = { ...currentSettings };\n const keys = path.split(\".\");\n\n if (keys.length === 1) {\n // Handle top-level properties like 'user' and 'collection'\n const [key] = keys;\n if (key in newSettings) {\n (newSettings as Record<string, unknown>)[key] = value;\n }\n } else if (keys.length === 2) {\n const [section, key] = keys;\n if (section in newSettings) {\n const settingsRecord = newSettings as unknown as Record<\n string,\n Record<string, unknown>\n >;\n settingsRecord[section] = {\n ...settingsRecord[section],\n [key]: value,\n };\n }\n }\n\n // Update localStorage\n updateLocalStorage(newSettings);\n\n // Execute callback if provided\n if (onSuccess) onSuccess();\n },\n onError: (err) => {\n notify.error(`Failed to save settings: ${err.toString()}`);\n },\n onSuccess: () => {\n // Refresh the settings data after successful update\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n },\n });\n\n // Mutation for resetting settings to defaults\n const resetSettingsMutation = useMutation({\n mutationFn: async ({ onSuccess }: { onSuccess?: () => void } = {}) => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n\n // Clear localStorage\n localStorage.removeItem(SETTINGS_STORAGE_KEY);\n\n // Execute callback if provided\n if (onSuccess) onSuccess();\n },\n onError: (err) => {\n notify.error(`Failed to reset settings: ${err.toString()}`);\n },\n onSuccess: () => {\n // Refresh the settings data after successful reset\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n notify.success(\"Settings reset to defaults\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(settingsQuery.isLoading, \"Loading settings\");\n useActivity(updateSettingsMutation.isPending, \"Saving settings\");\n useActivity(resetSettingsMutation.isPending, \"Resetting settings\");\n\n // Get current settings or defaults\n const settings = settingsQuery.data || DEFAULT_SETTINGS;\n\n // Helper function to update a specific setting path\n const updateSetting = (path: string, value: unknown) => {\n updateSettingsMutation.mutate({ path, value });\n };\n\n // Helper function to save complete settings\n const saveSettings = (newSettings: Settings) => {\n // For complete settings replacement, directly update localStorage\n updateLocalStorage(newSettings);\n // Then invalidate the query to refetch\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n };\n\n // Helper function to reset settings\n const resetSettings = () => {\n resetSettingsMutation.mutate({});\n };\n\n // Helper function to export settings as JSON\n const exportSettings = (): string => {\n return JSON.stringify(settings, null, 2);\n };\n\n // Helper function to import settings from JSON\n const importSettings = (jsonString: string) => {\n try {\n const imported = JSON.parse(jsonString);\n const validatedSettings = mergeWithDefaults(imported);\n saveSettings(validatedSettings);\n } catch (error) {\n notify.error(\"Failed to import settings: Invalid JSON format\");\n throw error;\n }\n };\n\n // Return the public API for the hook\n return {\n // Settings data and state\n settings,\n isLoaded: !settingsQuery.isLoading,\n isLoading: settingsQuery.isLoading,\n error: settingsQuery.error,\n\n // Settings operations\n updateSetting,\n saveSettings,\n resetSettings,\n exportSettings,\n importSettings,\n\n // Loading states for individual operations\n isSaving: updateSettingsMutation.isPending,\n isResetting: resetSettingsMutation.isPending,\n\n // Manual refetch function\n refetch: settingsQuery.refetch,\n };\n};\n","import { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing flow operations\n * Provides functionality for fetching, deleting, and creating flows\n * @returns {Object} Flow state and operations\n */\nexport const useFlows = () => {\n // WebSocket connection for communicating with the flows service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all flows\n * Uses React Query for caching and background refetching\n */\n const flowsQuery = useQuery({\n queryKey: [\"flows\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .flows()\n .getFlows()\n .then((flows) =>\n Promise.all(\n flows.map((flowId) =>\n socket\n .flows()\n .getFlow(flowId)\n .then((flow) => {\n return { ...flow, id: flowId };\n })\n )\n )\n );\n },\n });\n\n /**\n * Query for fetching all flow blueprints\n * Uses React Query for caching and background refetching\n */\n const flowBlueprintsQuery = useQuery({\n queryKey: [\"flow-blueprints\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .flows()\n .getFlowBlueprints()\n .then((cls) =>\n Promise.all(\n cls.map((id) =>\n socket\n .flows()\n .getFlowBlueprint(id)\n .then((cls) => [id, cls])\n )\n )\n );\n },\n });\n\n /**\n * Mutation for starting a new flow for processing workflows\n */\n const startFlowMutation = useMutation({\n mutationFn: ({\n id,\n blueprintName,\n description,\n parameters,\n onSuccess,\n }: {\n id: string;\n blueprintName: string;\n description: string;\n parameters?: Record<string, unknown>;\n onSuccess?: () => void;\n }) => {\n return socket\n .flows()\n .startFlow(id, blueprintName, description, parameters)\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.message);\n },\n onSuccess: () => {\n // Invalidate flows cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"flows\"] });\n notify.success(\"Started flow\");\n },\n });\n\n /**\n * Mutation for deleting multiple flows\n * Executes parallel deletion requests and handles success/error states\n */\n const stopFlowMutation = useMutation({\n mutationFn: ({\n ids,\n onSuccess,\n }: {\n ids: string[];\n onSuccess?: () => void;\n }) => {\n // Execute deletion requests in parallel for all flows\n return Promise.all(ids.map((id) => socket.flows().stopFlow(id))).then(\n () => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n }\n );\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.message);\n },\n onSuccess: () => {\n // Invalidate flows cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"flows\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(flowsQuery.isLoading, \"Loading flows\");\n useActivity(flowBlueprintsQuery.isLoading, \"Loading flow blueprints\");\n useActivity(startFlowMutation.isPending, \"Starting flow\");\n useActivity(stopFlowMutation.isPending, \"Stopping flows\");\n\n // Return flows state and operations for use in components\n return {\n // Flow data and query state\n flows: flowsQuery.data,\n isLoading: flowsQuery.isLoading,\n isError: flowsQuery.isError,\n error: flowsQuery.error,\n\n // Flow blueprint data and query state\n flowBlueprints: flowBlueprintsQuery.data,\n isFlowBlueprintsLoading: flowBlueprintsQuery.isLoading,\n isFlowBlueprintsError: flowBlueprintsQuery.isError,\n flowBlueprintsError: flowBlueprintsQuery.error,\n\n // Flow start operations\n startFlow: startFlowMutation.mutate,\n isStarting: startFlowMutation.isPending,\n startError: startFlowMutation.error,\n\n // Flow stop operations\n stopFlows: stopFlowMutation.mutate,\n isStopping: stopFlowMutation.isPending,\n stopError: stopFlowMutation.error,\n\n // Manual refetch function\n refetch: flowsQuery.refetch,\n };\n};\n","/**\n * textToBase64 using TextEncoder\n */\nexport const textToBase64 = (input) => {\n // Convert string to UTF-8 bytes, then to Base64\n const encoder = new TextEncoder();\n const bytes = encoder.encode(input);\n\n // Convert Uint8Array to string for btoa()\n const binaryString = Array.from(bytes, (byte) =>\n String.fromCharCode(byte)\n ).join(\"\");\n return btoa(binaryString);\n};\n\n/**\n * Converts a text string to Base64 encoding with proper UTF-8 handling\n *\n * WHY THIS LOOKS WEIRD:\n * FileReader.readAsDataURL() returns a data URL like\n * \"data:image/png;base64,iVBORw0KGgoA...\"\n * but we only want the Base64 part. The regex removes the \"data:\" prefix\n * and everything up to the comma, leaving just the Base64 data.\n *\n * ISSUES WITH CURRENT IMPLEMENTATION:\n * - Type assertion (as string) is unsafe - reader.result could be ArrayBuffer\n * - No error handling for failed file reads\n * - Regex is overly complex for simple string removal\n *\n * @param {File} file - The file to convert to Base64\n * @returns {Promise<string>} Promise that resolves to Base64 string\n */\nexport const fileToBase64 = (file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onloadend = () => {\n // FIXME: Type is 'string | ArrayBuffer'? is this safe?\n // FIXME: Use Blob.arrayBuffer API?\n const data = (reader.result as string)\n .replace(\"data:\", \"\")\n .replace(/^.+,/, \"\");\n\n resolve(data);\n };\n\n reader.readAsDataURL(file);\n });\n};\n","import { v4 as uuidv4 } from \"uuid\";\n\nimport { Triple } from \"@trustgraph/client\";\n\nexport const RDF_TYPE = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\";\nexport const RDFS_LABEL = \"http://www.w3.org/2000/01/rdf-schema#label\";\nexport const DIGITAL_DOCUMENT = \"https://schema.org/DigitalDocument\";\nexport const SCHEMA_URL = \"https://schema.org/url\";\nexport const SCHEMA_KEYWORDS = \"https://schema.org/keywords\";\n\nexport interface DocumentParameters {\n title?: string;\n url?: string;\n keywords?: string[];\n comments?: string;\n}\n\nexport const createDocId = () => {\n return \"https://trustgraph.ai/doc/\" + uuidv4();\n};\n\nexport const prepareMetadata = (doc_id: string, params) => {\n let doc_meta: Triple[] = [\n {\n s: { v: doc_id, e: true },\n p: { v: RDF_TYPE, e: true },\n o: { v: DIGITAL_DOCUMENT, e: true },\n },\n ];\n\n if (params.title != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: RDFS_LABEL, e: true },\n o: { v: params.title, e: false },\n },\n ];\n\n if (params.url != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: SCHEMA_URL, e: true },\n o: { v: params.url, e: true },\n },\n ];\n\n for (const keyword of params.keywords)\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: SCHEMA_KEYWORDS, e: true },\n o: { v: keyword, e: false },\n },\n ];\n\n return doc_meta;\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { fileToBase64, textToBase64 } from \"../utils/document-encoding\";\nimport { prepareMetadata, createDocId } from \"../model/document-metadata\";\n\n/**\n * Custom hook for managing document library operations\n * Provides functionality for fetching, deleting, and submitting documents\n * @returns {Object} Library state and operations\n */\nexport const useLibrary = (): {\n documents: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n deleteDocuments: (params: any) => void;\n isDeleting: boolean;\n deleteError: Error | null;\n submitDocuments: (params: any) => void;\n isSubmitting: boolean;\n submitError: Error | null;\n uploadFiles: (params: any) => void;\n isUploadingFiles: boolean;\n filesUploadError: Error | null;\n uploadTexts: (params: any) => void;\n isUploadingTexts: boolean;\n textsUploadError: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the librarian service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all documents from the library\n * Uses React Query for caching and background refetching\n */\n const documentsQuery = useQuery({\n queryKey: [\"documents\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket.librarian().getDocuments();\n },\n });\n\n /**\n * Mutation for deleting multiple documents\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteDocumentsMutation = useMutation({\n mutationFn: ({ ids, onSuccess }) => {\n // Execute deletion requests in parallel for all document IDs\n return Promise.all(\n ids.map((id) => socket.librarian().removeDocument(id))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for submitting documents to processing workflows\n * Creates processing entries for each document with specified flow and tags\n */\n const submitDocumentsMutation = useMutation({\n mutationFn: ({ ids, flow, tags, collection, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n ids.map((id) => {\n // Generate unique processing ID for each document\n const proc_id = uuidv4();\n return socket\n .librarian()\n .addProcessing(proc_id, id, flow, collection, tags);\n })\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n notify.success(\"Successful submission\");\n },\n });\n\n /**\n * Uploading documents into the library. Puts the documents in the\n * library, but does not initiate processing.\n */\n const uploadFilesMutation = useMutation({\n mutationFn: ({ files, params, mimeType, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n files.map((file) => {\n // Generate unique doc ID for each document\n const doc_id = createDocId();\n\n const meta = prepareMetadata(doc_id, params);\n\n return fileToBase64(file)\n .then((enc) => {\n return socket\n .librarian()\n .loadDocument(\n enc,\n mimeType,\n params.title,\n params.comments,\n params.keywords,\n doc_id,\n meta\n );\n })\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n })\n );\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n notify.success(\"Successful upload\");\n },\n });\n\n /**\n * Uploading text into the library. Puts the text in the\n * library, but does not initiate processing.\n */\n const uploadTextsMutation = useMutation({\n mutationFn: ({ texts, params, mimeType, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n texts.map((text) => {\n // Generate unique doc ID for each document\n const doc_id = createDocId();\n\n const enc = textToBase64(text);\n\n const meta = prepareMetadata(doc_id, params);\n\n return socket\n .librarian()\n .loadDocument(\n enc,\n mimeType,\n params.title,\n params.comments,\n params.keywords,\n doc_id,\n meta\n );\n })\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n // Notify\n notify.success(\"Successful upload\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(documentsQuery.isLoading, \"Loading documents\");\n useActivity(deleteDocumentsMutation.isPending, \"Deleting documents\");\n useActivity(submitDocumentsMutation.isPending, \"Submitting documents\");\n useActivity(uploadFilesMutation.isPending, \"Uploading files\");\n useActivity(uploadTextsMutation.isPending, \"Uploading text\");\n\n // Return library state and operations for use in components\n return {\n // Document data and query state\n documents: documentsQuery.data,\n isLoading: documentsQuery.isLoading,\n isError: documentsQuery.isError,\n error: documentsQuery.error,\n\n // Document deletion operations\n deleteDocuments: deleteDocumentsMutation.mutate,\n isDeleting: deleteDocumentsMutation.isPending,\n deleteError: deleteDocumentsMutation.error,\n\n // Document submission operations\n submitDocuments: submitDocumentsMutation.mutate,\n isSubmitting: submitDocumentsMutation.isPending,\n submitError: submitDocumentsMutation.error,\n\n // Document upload operations\n uploadFiles: uploadFilesMutation.mutate,\n isUploadingFiles: uploadFilesMutation.isPending,\n filesUploadError: uploadFilesMutation.error,\n\n // Document upload operations\n uploadTexts: uploadTextsMutation.mutate,\n isUploadingTexts: uploadTextsMutation.isPending,\n textsUploadError: uploadTextsMutation.error,\n\n // Manual refetch function\n refetch: documentsQuery.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useTriples = ({ flow, s, p, o, limit, collection }: {\n flow?: string;\n s?: any;\n p?: any;\n o?: any;\n limit: number;\n collection?: string;\n}): {\n triples: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"triples\", { flow, s, p, o, limit }],\n queryFn: () => {\n return socket\n .flow(flow)\n .triplesQuery(s, p, o, limit, collection || settings.collection)\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading triples\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n triples: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { FlowApi, Triple } from \"@trustgraph/client\";\n\nexport const RDFS_LABEL = \"http://www.w3.org/2000/01/rdf-schema#label\";\n\nexport const SKOS_DEFINITION =\n \"http://www.w3.org/2004/02/skos/core#definition\";\n\nexport const SCHEMAORG_SUBJECT_OF = \"https://schema.org/subjectOf\";\n\nexport const SCHEMAORG_DESCRIPTION = \"https://schema.org/description\";\n\n// Some pre-defined labels, don't need to be fetched from the graph\nconst predefined: { [k: string]: string } = {\n [RDFS_LABEL]: \"label\",\n [SKOS_DEFINITION]: \"definition\",\n [SCHEMAORG_SUBJECT_OF]: \"subject of\",\n [SCHEMAORG_DESCRIPTION]: \"description\",\n \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\": \"has type\",\n \"https://schema.org/publication\": \"publication\",\n \"https://schema.org/url\": \"url\",\n \"https://schema.org/PublicationEvent\": \"publication event\",\n \"https://schema.org/publishedBy\": \"published by\",\n \"https://schema.org/DigitalDocument\": \"digital document\",\n \"https://schema.org/startDate\": \"start date\",\n \"https://schema.org/endDate\": \"end date\",\n \"https://schema.org/name\": \"name\",\n \"https://schema.org/copyrightNotice\": \"copyright notice\",\n \"https://schema.org/copyrightHolder\": \"copyright holder\",\n \"https://schema.org/copyrightYear\": \"copyright year\",\n \"https://schema.org/keywords\": \"keywords\",\n};\n\n// Default triple limit on queries\nexport const LIMIT = 30;\n\n// Query triples which match URI on 's'\nexport const queryS = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query S: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n { v: uri, e: true },\n undefined,\n undefined,\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 'p'\nexport const queryP = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query P: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n undefined,\n { v: uri, e: true },\n undefined,\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 'o'\nexport const queryO = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query O: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n undefined,\n undefined,\n { v: uri, e: true },\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 's', 'p' or 'o'.\nexport const query = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query: \" + uri;\n add(act);\n\n return Promise.all([\n queryS(socket, uri, add, remove, limit, collection),\n queryP(socket, uri, add, remove, limit, collection),\n queryO(socket, uri, add, remove, limit, collection),\n ])\n .then((resp) => {\n return resp[0].concat(resp[1]).concat(resp[2]);\n })\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Convert a URI to its label by querying the graph store, returns a\n// promise\nexport const queryLabel = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<string> => {\n const act = \"Label \" + uri;\n\n // If the URI is in the pre-defined list, just return that\n if (uri in predefined) {\n return new Promise((s) => s(predefined[uri]));\n }\n\n add(act);\n\n // Search tthe graph for the URI->label relationship\n return socket\n .triplesQuery(\n { v: uri, e: true },\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n collection\n )\n .then((triples: Triple[]) => {\n // If got a result, return the label, otherwise the URI\n // can be its own label\n if (triples.length > 0) return triples[0].o.v;\n else return uri;\n })\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Add 'label' elements to 's' elements in a list of triples.\n// Returns a promise\nexport const labelS = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, t.s.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n s: {\n ...t.s,\n label: label,\n },\n };\n }\n );\n })\n );\n};\n\n// Add 'label' elements to 'p' elements in a list of triples.\n// Returns a promise\nexport const labelP = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, t.p.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n p: {\n ...t.p,\n label: label,\n },\n };\n }\n );\n })\n );\n};\n\n// Add 'label' elements to 'o' elements in a list of triples.\n// Returns a promise\nexport const labelO = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n // If the 'o' element is a entity, do a label lookup, else\n // just use the literal value for its label\n if (t.o.e)\n return queryLabel(socket, t.o.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n o: {\n ...t.o,\n label: label,\n },\n };\n }\n );\n else\n return new Promise<Triple>((resolve) => {\n resolve({\n ...t,\n o: {\n ...t.o,\n label: t.o.v,\n },\n });\n });\n })\n );\n};\n\n// Triple filter\nexport const filter = (triples: Triple[], fn: (t: Triple) => boolean) =>\n triples.filter((t) => fn(t));\n\n// Filter out 'structural' edges nobody needs to see\nexport const filterInternals = (triples: Triple[]) =>\n triples.filter((t) => {\n if (t.p.e && t.p.v == RDFS_LABEL) return false;\n return true;\n });\n\n// Generic triple fetcher, fetches triples related to a URI, adds labels\n// and provides over-arching uri/label props for the input URI\nexport const getTriples = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n // FIXME: Cache more\n // FIXME: Too many queries\n\n return query(socket, uri, add, remove, limit, collection)\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => {\n return queryLabel(socket, uri, add, remove, collection).then(\n (label: string) => {\n return {\n triples: d,\n uri: uri,\n label: label,\n };\n }\n );\n });\n};\n","// Functionality here helps construct subgraphs for react-force-graph\n// visualisation\n\nimport { Triple, FlowApi } from \"@trustgraph/client\";\nimport {\n query,\n labelS,\n labelP,\n labelO,\n filterInternals,\n} from \"./knowledge-graph\";\n\ninterface Node {\n id: string;\n label: string;\n group: number;\n}\n\ninterface Link {\n id: string;\n source: string;\n target: string;\n label: string;\n value: number;\n}\n\nexport interface Subgraph {\n nodes: Node[];\n links: Link[];\n}\n\nexport const createSubgraph = (): Subgraph => {\n return {\n nodes: [],\n links: [],\n };\n};\n\nexport const updateSubgraphTriples = (sg: Subgraph, triples: Triple[]) => {\n const groupId = 1;\n\n const nodeIds = new Set<string>(sg.nodes.map((n) => n.id));\n const linkIds = new Set<string>(sg.links.map((n) => n.id));\n\n for (const t of triples) {\n // Skip triples where the object is a literal (property edges)\n // These are now shown in the node details drawer instead\n if (!t.o.e) {\n continue;\n }\n // Source has a URI, that can be its unique ID\n const sourceId = t.s.v;\n\n // Target is always an entity now (we filtered out literals above)\n const targetId = t.o.v;\n\n // Links have an ID so that this edge is unique\n const linkId = t.s.v + \"@@\" + t.p.v + \"@@\" + t.o.v;\n\n if (!nodeIds.has(sourceId)) {\n const n: Node = {\n id: sourceId,\n label: t.s.label ? t.s.label : \"unknown\",\n group: groupId,\n };\n nodeIds.add(sourceId);\n sg = {\n ...sg,\n nodes: [...sg.nodes, n],\n };\n }\n\n if (!nodeIds.has(targetId)) {\n const n: Node = {\n id: targetId,\n label: t.o.label ? t.o.label : \"unknown\",\n group: groupId,\n };\n nodeIds.add(targetId);\n sg = {\n ...sg,\n nodes: [...sg.nodes, n],\n };\n }\n\n if (!linkIds.has(linkId)) {\n const l: Link = {\n source: sourceId,\n target: targetId,\n id: linkId,\n label: t.p.label ? t.p.label : \"unknown\",\n value: 1,\n };\n linkIds.add(linkId);\n sg = {\n ...sg,\n links: [...sg.links, l],\n };\n }\n }\n\n return sg;\n};\n\nexport const updateSubgraph = (\n socket: FlowApi,\n uri: string,\n sg: Subgraph,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n) => {\n return query(socket, uri, add, remove, undefined, collection)\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => updateSubgraphTriples(sg, d));\n};\n\nexport const updateSubgraphByRelationship = (\n socket: FlowApi,\n selectedNodeId: string,\n relationshipUri: string,\n direction: \"incoming\" | \"outgoing\",\n sg: Subgraph,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n) => {\n const activityName = `Following ${direction} relationship: ${relationshipUri}`;\n\n add(activityName);\n\n // Build the query based on direction\n const queryPromise =\n direction === \"outgoing\"\n ? socket.triplesQuery(\n { v: selectedNodeId, e: true }, // s = selectedNode\n { v: relationshipUri, e: true }, // p = relationship\n undefined, // o = ??? (what we want to find)\n 20, // Limit results\n collection\n )\n : socket.triplesQuery(\n undefined, // s = ??? (what we want to find)\n { v: relationshipUri, e: true }, // p = relationship\n { v: selectedNodeId, e: true }, // o = selectedNode\n 20, // Limit results\n collection\n );\n\n return queryPromise\n .then((triples) => {\n remove(activityName);\n return triples;\n })\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => updateSubgraphTriples(sg, d));\n};\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport {\n createSubgraph,\n updateSubgraph,\n updateSubgraphByRelationship,\n Subgraph,\n} from \"../utils/knowledge-graph-viz\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing graph visualization operations using React Query\n * Provides functionality for fetching and updating graph subgraphs\n * @param entityUri - The URI of the entity to build the graph around\n * @param flowId - The flow ID to use for the query\n * @param collection - The collection to query\n * @returns {Object} Graph state and operations\n */\nexport const useGraphSubgraph = (\n entityUri: string | undefined,\n flowId: string,\n collection: string\n) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Query client for cache management\n const queryClient = useQueryClient();\n\n /**\n * Query for fetching initial graph subgraph\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"graph-subgraph\", { entityUri, flowId, collection }],\n queryFn: async () => {\n if (!entityUri) {\n throw new Error(\"Entity URI is required\");\n }\n\n const sg = createSubgraph();\n\n // Use the existing updateSubgraph utility function for initial load\n const api = socket.flow(flowId);\n return updateSubgraph(\n api,\n entityUri,\n sg,\n addActivity,\n removeActivity,\n collection\n );\n },\n enabled: !!entityUri && !!flowId, // Only run query if both entityUri and flowId are available\n });\n\n /**\n * Mutation for updating the graph subgraph when nodes are clicked\n */\n const updateMutation = useMutation({\n mutationFn: async ({\n nodeId,\n currentGraph,\n }: {\n nodeId: string;\n currentGraph: Subgraph;\n }) => {\n const api = socket.flow(flowId);\n return updateSubgraph(\n api,\n nodeId,\n currentGraph,\n addActivity,\n removeActivity\n );\n },\n onSuccess: (newGraph) => {\n // Update the cache with the new graph data\n queryClient.setQueryData(\n [\"graph-subgraph\", { entityUri, flowId, collection }],\n newGraph\n );\n },\n onError: (err) => {\n console.log(\"Graph update error:\", err);\n notify.error(err.toString());\n },\n });\n\n /**\n * Mutation for expanding the graph by following specific relationships\n */\n const relationshipNavigationMutation = useMutation({\n mutationFn: async ({\n selectedNodeId,\n relationshipUri,\n direction,\n currentGraph,\n }: {\n selectedNodeId: string;\n relationshipUri: string;\n direction: \"incoming\" | \"outgoing\";\n currentGraph: Subgraph;\n }) => {\n const api = socket.flow(flowId);\n return updateSubgraphByRelationship(\n api,\n selectedNodeId,\n relationshipUri,\n direction,\n currentGraph,\n addActivity,\n removeActivity,\n collection\n );\n },\n onSuccess: (newGraph) => {\n // Update the cache with the new graph data\n queryClient.setQueryData(\n [\"graph-subgraph\", { entityUri, flowId, collection }],\n newGraph\n );\n },\n onError: (err) => {\n console.log(\"Relationship navigation error:\", err);\n notify.error(err.toString());\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(\n query.isLoading,\n entityUri ? `Build subgraph: ${entityUri}` : \"Loading graph\"\n );\n useActivity(updateMutation.isPending, \"Update subgraph\");\n useActivity(\n relationshipNavigationMutation.isPending,\n \"Following relationship\"\n );\n\n // Handle query errors\n if (query.isError && query.error) {\n notify.error(query.error.toString());\n }\n\n // Return graph state and operations for use in components\n return {\n // Graph query state\n view: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Graph update operations\n updateSubgraph: updateMutation.mutate,\n isUpdating: updateMutation.isPending,\n\n // Relationship navigation operations\n navigateByRelationship: relationshipNavigationMutation.mutate,\n isNavigating: relationshipNavigationMutation.isPending,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useGraphEmbeddings = ({ flow, vecs, limit, collection }: {\n flow?: string;\n vecs: number[][];\n limit: number;\n collection?: string;\n}): {\n graphEmbeddings: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching graph embeddings\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"graph-embeddings\", { vecs, limit }],\n queryFn: () => {\n return socket\n .flow(flow)\n .graphEmbeddingsQuery(vecs, limit, collection || settings.collection)\n .then((x) => {\n return x;\n })\n .catch((err: unknown) => {\n console.log(\"Error:\", err);\n const message = err instanceof Error ? err.message : String(err);\n notify.error(message);\n throw err;\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading graph embeddings\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n graphEmbeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { Value, FlowApi } from \"@trustgraph/client\";\nimport { RDFS_LABEL, SKOS_DEFINITION } from \"./knowledge-graph\";\n// @ts-ignore - compute-cosine-similarity is a CommonJS module with no types\nimport similarity from \"compute-cosine-similarity\";\n\nexport interface Row {\n uri: string;\n label?: string;\n description?: string;\n embeddings?: number[];\n target?: number[];\n similarity?: number;\n}\n\n// Take the embeddings, and lookup entities using graph\n// embeddings, add embedding to each entity row, just an easy\n// place to put it\nexport const getGraphEmbeddings = (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n // Take the embeddings, and lookup entities using graph\n // embeddings, add embedding to each entity row, just an easy\n // place to put it\n return (vecs: number[][]): Promise<Row[]> => {\n const act = \"Graph embedding search\";\n add(act);\n\n return socket\n .graphEmbeddingsQuery(vecs, limit ? limit : 10, collection)\n .then((ents: Value[]): Row[] => {\n remove(act);\n return ents.map((ent) => {\n return { uri: ent.v, target: vecs[0] };\n });\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n };\n};\n\n// For entities, lookup labels\nexport const addRowLabels =\n (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n ) =>\n (entities: Row[]): Promise<Row[]> => {\n return Promise.all<Row>(\n entities.map((ent: Row) => {\n const act = \"Label \" + ent.uri;\n add(act);\n return socket\n .triplesQuery(\n { v: ent.uri, e: true },\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n collection\n )\n .then((t): Row => {\n if (t.length < 1) {\n remove(act);\n return {\n uri: ent.uri,\n label: \"\",\n target: ent.target,\n };\n } else {\n remove(act);\n return {\n uri: ent.uri,\n label: t[0].o.v,\n target: ent.target,\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// For entities, lookup definitions\nexport const addRowDefinitions =\n (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n ) =>\n // For entities, lookup labels\n (entities: Row[]) => {\n return Promise.all<Row>(\n entities.map((ent) => {\n const act = \"Description \" + ent.uri;\n add(act);\n return socket\n .triplesQuery(\n { v: ent.uri, e: true },\n { v: SKOS_DEFINITION, e: true },\n undefined,\n 1,\n collection\n )\n .then((t) => {\n if (t.length < 1) {\n remove(act);\n return { ...ent, description: \"\" };\n } else {\n remove(act);\n return {\n ...ent,\n description: t[0].o.v,\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// Compute an embedding for each entity based on its definition or label\nexport const addRowEmbeddings =\n (socket: FlowApi, add: (s: string) => void, remove: (s: string) => void) =>\n (entities: Row[]) => {\n return Promise.all<Row>(\n entities.map((ent) => {\n let text: string = \"\";\n if (ent.description && ent.description != \"\") text = ent.description;\n else text = ent.label!;\n\n const act = \"Embeddings \" + text.substring(0, 20);\n add(act);\n\n return socket\n .embeddings(text)\n .then((x) => {\n if (x && x.length > 0) {\n remove(act);\n return {\n ...ent,\n embeddings: x[0],\n };\n } else {\n remove(act);\n return {\n ...ent,\n embeddings: [],\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// Rest of the procecess is not async, so not adding progress\n\nexport const computeCosineSimilarity =\n () =>\n (entities: Row[]): Row[] =>\n entities.map((ent) => {\n const sim = similarity(ent.target!, ent.embeddings!);\n return {\n uri: ent.uri,\n label: ent.label,\n description: ent.description,\n similarity: sim ? sim : -1,\n };\n });\n\nexport const sortSimilarity = () => (entities: Row[]) => {\n const arr = Array.from(entities);\n arr.sort((a, b) => b.similarity! - a.similarity!);\n return arr;\n};\n","import {\n getGraphEmbeddings,\n addRowLabels,\n addRowDefinitions,\n addRowEmbeddings,\n computeCosineSimilarity,\n sortSimilarity,\n} from \"./row\";\n\nexport const vectorSearch = (\n socket,\n flowId,\n addActivity,\n removeActivity,\n term: string,\n collection?: string,\n limit?: number\n) => {\n const api = socket.flow(flowId);\n\n const searchAct = \"Search: \" + term;\n addActivity(searchAct);\n\n return api\n .embeddings(term)\n .then(\n getGraphEmbeddings(\n api,\n addActivity,\n removeActivity,\n limit || 10,\n collection\n )\n )\n .then(addRowLabels(api, addActivity, removeActivity, collection))\n .then(addRowDefinitions(api, addActivity, removeActivity, collection))\n .then(addRowEmbeddings(api, addActivity, removeActivity))\n .then(computeCosineSimilarity())\n .then(sortSimilarity())\n .then((x) => {\n removeActivity(searchAct);\n return {\n view: x,\n entities: x.map((row) => {\n return {\n uri: row.uri,\n label: row.label ? row.label : \"n/a\",\n };\n }),\n };\n })\n .catch((err) => {\n removeActivity(searchAct);\n throw err;\n });\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useState } from \"react\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { vectorSearch } from \"../utils/vector-search\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing vector search operations\n * Provides functionality for searching entities using vector embeddings\n * @returns {Object} Vector search state and operations\n */\n\nexport const useVectorSearch = () => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // State to track current search parameters\n const [searchParams, setSearchParams] = useState(null);\n\n /**\n * Query for fetching vector search results\n * Uses React Query for caching and background refetching\n */\n const searchQuery = useQuery({\n queryKey: [\"search\", searchParams],\n enabled: !!searchParams?.term,\n queryFn: () => {\n const { flow, term, limit, collection } = searchParams;\n return vectorSearch(\n socket,\n flow || \"default\",\n addActivity,\n removeActivity,\n term,\n collection,\n limit\n )\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n throw err;\n });\n },\n });\n\n // Function to trigger a new search\n const startSearch = ({ flow, term, limit, collection }) => {\n if (!term) {\n setSearchParams(null);\n return;\n }\n setSearchParams({\n flow: flow || \"default\",\n term,\n limit: limit || 10,\n collection,\n });\n };\n\n // Return vector search state and operations for use in components\n return {\n // Function to start a new search\n startSearch: startSearch,\n // Search results and state\n data: searchQuery.data,\n isLoading: searchQuery.isLoading || searchQuery.isFetching,\n isError: searchQuery.isError,\n error: searchQuery.error,\n // Current search parameters\n searchParams: searchParams,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { getTriples } from \"../utils/knowledge-graph\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing entity detail operations using React Query\n * Provides functionality for fetching entity details and related triples\n * @param entityUri - The URI of the entity to fetch details for\n * @param flowId - The flow ID to use for the query\n * @param collection - The collection to query\n * @returns {Object} Entity detail state and operations\n */\nexport const useEntityDetail = (\n entityUri: string | undefined,\n flowId: string,\n collection: string\n): {\n detail: Awaited<ReturnType<typeof getTriples>> | undefined;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n /**\n * Query for fetching entity details\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"entity-detail\", { entityUri, flowId, collection }],\n queryFn: async () => {\n if (!entityUri) {\n throw new Error(\"Entity URI is required\");\n }\n\n // Use the existing getTriples utility function\n const api = socket.flow(flowId);\n return getTriples(\n api,\n entityUri,\n addActivity,\n removeActivity,\n undefined,\n collection\n );\n },\n // Only run query if both entityUri and flowId are available\n enabled: !!entityUri && !!flowId,\n });\n\n // Show loading indicators for long-running operations\n useActivity(\n query.isLoading,\n entityUri ? `Knowledge graph search: ${entityUri}` : \"Loading entity\"\n );\n\n // Handle errors\n if (query.isError && query.error) {\n notify.error(query.error.toString());\n }\n\n // Return entity detail state and operations for use in components\n return {\n // Entity detail query state\n detail: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Value } from \"@trustgraph/client\";\n\nexport interface GraphRagOptions {\n entityLimit?: number;\n tripleLimit?: number;\n maxSubgraphSize?: number;\n pathLength?: number;\n}\n\nexport interface GraphRagResult {\n response: string;\n entities: Value[];\n}\n\nexport interface GraphRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onError?: (error: string) => void;\n}\n\nexport interface TextCompletionCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onError?: (error: string) => void;\n}\n\nexport interface AgentCallbacks {\n onThink?: (thought: string, complete?: boolean) => void;\n onObserve?: (observation: string, complete?: boolean) => void;\n onAnswer?: (answer: string, complete?: boolean) => void;\n onError?: (error: string) => void;\n}\n\n/**\n * Hook providing low-level access to LLM inference services\n * No conversation state or side effects - just the API calls\n */\nexport const useInference = () => {\n const socket = useSocket();\n const flowId = useSessionStore((state) => state.flowId);\n\n /**\n * Graph RAG inference with entity discovery\n */\n const graphRagMutation = useMutation({\n mutationFn: async ({\n input,\n options,\n collection,\n callbacks,\n }: {\n input: string;\n options?: GraphRagOptions;\n collection: string;\n callbacks?: GraphRagCallbacks;\n }): Promise<GraphRagResult> => {\n // If callbacks provided, use streaming API\n const response = callbacks\n ? await new Promise<string>((resolve, reject) => {\n let accumulated = \"\";\n\n const onChunk = (chunk: string, complete: boolean) => {\n accumulated += chunk;\n callbacks?.onChunk?.(chunk, complete);\n if (complete) {\n resolve(accumulated);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .graphRagStreaming(input, onChunk, onError, options, collection);\n })\n : await socket.flow(flowId).graphRag(input, options || {}, collection);\n\n // Get embeddings for entity discovery\n const embeddings = await socket.flow(flowId).embeddings(input);\n\n // Query graph embeddings to find entities\n const entities = await socket\n .flow(flowId)\n .graphEmbeddingsQuery(\n embeddings,\n options?.entityLimit || 10,\n collection\n );\n\n return { response, entities };\n },\n });\n\n /**\n * Basic LLM text completion\n */\n const textCompletionMutation = useMutation({\n mutationFn: async ({\n systemPrompt,\n input,\n callbacks,\n }: {\n systemPrompt: string;\n input: string;\n callbacks?: TextCompletionCallbacks;\n }): Promise<string> => {\n // If callbacks provided, use streaming API\n return callbacks\n ? await new Promise<string>((resolve, reject) => {\n let accumulated = \"\";\n\n const onChunk = (chunk: string, complete: boolean) => {\n accumulated += chunk;\n callbacks?.onChunk?.(chunk, complete);\n if (complete) {\n resolve(accumulated);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .textCompletionStreaming(systemPrompt, input, onChunk, onError);\n })\n : await socket.flow(flowId).textCompletion(systemPrompt, input);\n },\n });\n\n /**\n * Agent inference with streaming callbacks\n */\n const agentMutation = useMutation({\n mutationFn: async ({\n input,\n callbacks,\n }: {\n input: string;\n callbacks?: AgentCallbacks;\n }): Promise<string> => {\n return new Promise<string>((resolve, reject) => {\n let fullAnswer = \"\";\n\n const onThink = (thought: string, complete: boolean) => {\n callbacks?.onThink?.(thought, complete);\n };\n\n const onObserve = (observation: string, complete: boolean) => {\n callbacks?.onObserve?.(observation, complete);\n };\n\n const onAnswer = (answer: string, complete: boolean) => {\n fullAnswer += answer;\n callbacks?.onAnswer?.(answer, complete);\n if (complete) {\n resolve(fullAnswer);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .agent(input, onThink, onObserve, onAnswer, onError);\n });\n },\n });\n\n return {\n graphRag: graphRagMutation.mutateAsync,\n textCompletion: textCompletionMutation.mutateAsync,\n agent: agentMutation.mutateAsync,\n isLoading:\n graphRagMutation.isPending ||\n textCompletionMutation.isPending ||\n agentMutation.isPending,\n };\n};\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useConversation } from \"./conversation\";\nimport { useInference } from \"./inference\";\nimport { useWorkbenchStateStore } from \"./workbench\";\nimport { useProgressStateStore } from \"./progress\";\nimport { useSettings } from \"./settings\";\nimport { RDFS_LABEL } from \"../utils/knowledge-graph\";\nimport { Entity } from \"../model/entity\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Triple } from \"@trustgraph/client\";\n\n/**\n * High-level hook for managing chat sessions\n * Combines conversation state with inference services\n * Handles routing, progress tracking, entity management, and notifications\n */\nexport const useChatSession = () => {\n const socket = useSocket();\n const notify = useNotification();\n\n // Conversation state\n const addMessage = useConversation((state) => state.addMessage);\n const updateLastMessage = useConversation((state) => state.updateLastMessage);\n const setInput = useConversation((state) => state.setInput);\n const chatMode = useConversation((state) => state.chatMode);\n\n // Progress and activity management\n const addActivity = useProgressStateStore((state) => state.addActivity);\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Session and workbench state\n const flowId = useSessionStore((state) => state.flowId);\n const setEntities = useWorkbenchStateStore((state) => state.setEntities);\n\n // Settings for GraphRAG configuration\n const { settings } = useSettings();\n\n // Inference services\n const inference = useInference();\n\n /**\n * Graph RAG chat handling with entity discovery\n */\n const handleGraphRag = async (input: string) => {\n const ragActivity = \"Graph RAG: \" + input;\n const embActivity = \"Find entities: \" + input;\n\n addActivity(ragActivity);\n\n let accumulated = \"\";\n let messageAdded = false;\n\n try {\n // Execute Graph RAG with streaming and entity discovery\n const result = await inference.graphRag({\n input,\n options: {\n entityLimit: settings.graphrag.entityLimit,\n tripleLimit: settings.graphrag.tripleLimit,\n maxSubgraphSize: settings.graphrag.maxSubgraphSize,\n pathLength: settings.graphrag.pathLength,\n },\n collection: settings.collection,\n callbacks: {\n onChunk: (chunk, complete) => {\n accumulated += chunk;\n\n if (!messageAdded) {\n // Add empty message on first chunk\n addMessage(\"ai\", accumulated);\n messageAdded = true;\n } else {\n // Update existing message with accumulated text\n updateLastMessage(accumulated);\n }\n },\n },\n });\n\n removeActivity(ragActivity);\n\n // Start embeddings activity\n addActivity(embActivity);\n\n // Get labels for each entity\n const labelPromises = result.entities.map(async (entity) => {\n const labelActivity = \"Label \" + entity.v;\n addActivity(labelActivity);\n\n try {\n const triples = await socket\n .flow(flowId)\n .triplesQuery(\n entity,\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n settings.collection\n );\n removeActivity(labelActivity);\n return triples;\n } catch (err) {\n removeActivity(labelActivity);\n throw err;\n }\n });\n\n const labelResponses = await Promise.all(labelPromises);\n\n // Convert graph labels to entity list\n const entityList: Entity[] = labelResponses\n .filter((resp) => resp && resp.length > 0)\n .map((resp: Triple[]) => ({\n label: resp[0].o.v,\n uri: resp[0].s.v,\n }));\n\n setEntities(entityList);\n removeActivity(embActivity);\n\n return result.response;\n } catch (error) {\n removeActivity(ragActivity);\n removeActivity(embActivity);\n throw error;\n }\n };\n\n /**\n * Basic LLM chat handling\n */\n const handleBasicLlm = async (input: string) => {\n const activity = \"Text completion: \" + input;\n addActivity(activity);\n\n let accumulated = \"\";\n let messageAdded = false;\n\n try {\n const response = await inference.textCompletion({\n systemPrompt:\n \"You are a helpful assistant. Provide clear and concise responses.\",\n input,\n callbacks: {\n onChunk: (chunk, complete) => {\n accumulated += chunk;\n\n if (!messageAdded) {\n // Add empty message on first chunk\n addMessage(\"ai\", accumulated);\n messageAdded = true;\n } else {\n // Update existing message with accumulated text\n updateLastMessage(accumulated);\n }\n },\n },\n });\n\n removeActivity(activity);\n setEntities([]);\n\n return response;\n } catch (error) {\n removeActivity(activity);\n throw error;\n }\n };\n\n /**\n * Agent chat handling with streaming responses\n */\n const handleAgent = async (input: string) => {\n const activity = \"Agent: \" + input;\n addActivity(activity);\n\n let thinkingAccumulated = \"\";\n let thinkingMessageAdded = false;\n let observationAccumulated = \"\";\n let observationMessageAdded = false;\n let answerAccumulated = \"\";\n let answerMessageAdded = false;\n\n try {\n const response = await inference.agent({\n input,\n callbacks: {\n onThink: (thought, complete) => {\n thinkingAccumulated += thought;\n if (!thinkingMessageAdded) {\n addMessage(\"ai\", thinkingAccumulated, \"thinking\");\n thinkingMessageAdded = true;\n } else {\n updateLastMessage(thinkingAccumulated);\n }\n if (complete) {\n thinkingAccumulated = \"\";\n thinkingMessageAdded = false;\n }\n },\n onObserve: (observation, complete) => {\n observationAccumulated += observation;\n if (!observationMessageAdded) {\n addMessage(\"ai\", observationAccumulated, \"observation\");\n observationMessageAdded = true;\n } else {\n updateLastMessage(observationAccumulated);\n }\n if (complete) {\n observationAccumulated = \"\";\n observationMessageAdded = false;\n }\n },\n onAnswer: (answer, complete) => {\n answerAccumulated += answer;\n if (!answerMessageAdded) {\n addMessage(\"ai\", answerAccumulated, \"answer\");\n answerMessageAdded = true;\n } else {\n updateLastMessage(answerAccumulated);\n }\n },\n },\n });\n\n removeActivity(activity);\n setEntities([]);\n\n return response;\n } catch (error) {\n removeActivity(activity);\n throw error;\n }\n };\n\n /**\n * Main chat mutation handling message submission\n */\n const chatMutation = useMutation({\n mutationFn: async ({ input }: { input: string }) => {\n // Add user message immediately\n addMessage(\"human\", input);\n\n try {\n let response: string;\n\n // Route to appropriate handler based on chat mode\n switch (chatMode) {\n case \"graph-rag\":\n response = await handleGraphRag(input);\n break;\n case \"basic-llm\":\n response = await handleBasicLlm(input);\n break;\n case \"agent\":\n response = await handleAgent(input);\n break;\n default:\n throw new Error(\"Unknown chat mode\");\n }\n\n // Clear input after successful submission\n setInput(\"\");\n return response;\n } catch (error) {\n // Add error message to chat\n const errorMessage =\n error instanceof Error\n ? error.message\n : error?.toString() || \"Unknown error\";\n addMessage(\"ai\", errorMessage);\n\n // Clear input even on error\n setInput(\"\");\n throw error;\n }\n },\n onError: (err) => {\n console.log(\"Chat error:\", err);\n notify.error(err.toString());\n },\n });\n\n // Show loading indicator for chat operations\n useActivity(chatMutation.isPending, \"Processing chat message\");\n\n return {\n submitMessage: chatMutation.mutate,\n isSubmitting: chatMutation.isPending,\n submitError: chatMutation.error,\n };\n};\n\n// Re-export as useChat for convenience\nexport const useChat = useChatSession;\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n// Settings for user and collection\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing structured query operations\n * Provides functionality for executing natural language questions against structured data\n * Combines NLP query conversion and GraphQL execution in a single operation\n */\nexport const useStructuredQuery = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n // Settings for default collection\n const { settings } = useSettings();\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for executing structured queries from natural language\n const structuredQueryMutation = useMutation({\n mutationFn: async ({\n question,\n collection,\n }: {\n question: string;\n collection?: string;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket\n .flow(flowId)\n .structuredQuery(question, collection || settings.collection);\n },\n onError: (err) => {\n console.log(\"Structured query error:\", err);\n const errorMessage =\n err instanceof Error\n ? err.message\n : err?.toString() || \"Unknown error\";\n notify.error(`Structured query failed: ${errorMessage}`);\n },\n onSuccess: (data) => {\n if (data.data) {\n notify.success(\"Structured query executed successfully\");\n } else if (data.errors && data.errors.length > 0) {\n notify.warning(\"Query executed with errors\");\n } else {\n notify.warning(\"Query processed but returned no data\");\n }\n },\n });\n\n // Show loading indicator for structured query operations\n useActivity(structuredQueryMutation.isPending, \"Executing structured query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: structuredQueryMutation.mutate,\n executeQueryAsync: structuredQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: structuredQueryMutation.isPending,\n error: structuredQueryMutation.error,\n data: structuredQueryMutation.data,\n\n // Extracted data for easier access\n queryData: structuredQueryMutation.data?.data,\n queryErrors: structuredQueryMutation.data?.errors,\n hasErrors:\n structuredQueryMutation.data?.errors &&\n structuredQueryMutation.data.errors.length > 0,\n\n // Reset function to clear previous results\n reset: structuredQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n// Settings for user and collection\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing GraphQL objects queries\n * Provides functionality for executing GraphQL queries against structured data objects\n */\nexport const useObjectsQuery = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n // Settings for default collection\n const { settings } = useSettings();\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for executing GraphQL objects queries\n const objectsQueryMutation = useMutation({\n mutationFn: async ({\n query,\n collection,\n variables,\n operationName,\n }: {\n query: string;\n collection?: string;\n variables?: Record<string, unknown>;\n operationName?: string;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket\n .flow(flowId)\n .objectsQuery(\n query,\n collection || settings.collection,\n variables,\n operationName\n );\n },\n onError: (err: unknown) => {\n console.log(\"Objects query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`GraphQL query failed: ${errorMessage}`);\n },\n onSuccess: () => {\n notify.success(\"GraphQL query executed successfully\");\n },\n });\n\n // Show loading indicator for query operations\n useActivity(objectsQueryMutation.isPending, \"Executing GraphQL query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: objectsQueryMutation.mutate,\n executeQueryAsync: objectsQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: objectsQueryMutation.isPending,\n error: objectsQueryMutation.error,\n data: objectsQueryMutation.data,\n\n // Reset function to clear previous results\n reset: objectsQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useEmbeddings = ({ flow, term }) => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"embeddings\", { flow, term }],\n enabled: isSocketReady && !!term && !!flow,\n queryFn: () => {\n return socket\n .flow(flow)\n .embeddings(term)\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Compute embeddings\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n embeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Collection metadata structure\n */\nexport interface CollectionMetadata {\n user: string;\n collection: string;\n name: string;\n description: string;\n tags: string[];\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Custom hook for managing collection operations\n * Provides functionality for fetching, creating, updating, and deleting collections\n * @returns {Object} Collections state and operations\n */\nexport const useCollections = () => {\n // WebSocket connection for communicating with the collection management service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all collections from the collection management service\n * Uses React Query for caching and background refetching\n */\n const collectionsQuery = useQuery({\n queryKey: [\"collections\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket.collectionManagement().listCollections();\n },\n });\n\n /**\n * Mutation for creating or updating a collection\n * Executes update request and handles success/error states\n */\n const updateCollectionMutation = useMutation({\n mutationFn: ({ collection, name, description, tags, onSuccess }) => {\n return socket\n .collectionManagement()\n .updateCollection(collection, name, description, tags)\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate collections cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"collections\"] });\n // Show success notification\n notify.success(\"Collection saved successfully\");\n },\n });\n\n /**\n * Mutation for deleting multiple collections\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteCollectionsMutation = useMutation({\n mutationFn: ({ collections, onSuccess }) => {\n // Execute deletion requests in parallel for all collection IDs\n return Promise.all(\n collections.map((collection) =>\n socket.collectionManagement().deleteCollection(collection)\n )\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate collections cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"collections\"] });\n // Show success notification\n notify.success(\"Collections deleted successfully\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(collectionsQuery.isLoading, \"Loading collections\");\n useActivity(updateCollectionMutation.isPending, \"Saving collection\");\n useActivity(deleteCollectionsMutation.isPending, \"Deleting collections\");\n\n // Return collections state and operations for use in components\n return {\n // Collection data and query state\n collections: collectionsQuery.data || [],\n isLoading: collectionsQuery.isLoading,\n isError: collectionsQuery.isError,\n error: collectionsQuery.error,\n\n // Update/create collection operations\n updateCollection: updateCollectionMutation.mutate,\n isUpdating: updateCollectionMutation.isPending,\n updateError: updateCollectionMutation.error,\n\n // Delete collection operations\n deleteCollections: deleteCollectionsMutation.mutate,\n isDeleting: deleteCollectionsMutation.isPending,\n deleteError: deleteCollectionsMutation.error,\n\n // Manual refetch function\n refetch: collectionsQuery.refetch,\n };\n};\n","// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n\n/**\n * Custom hook for managing NLP query operations\n * Provides functionality for converting natural language questions to GraphQL queries\n */\nexport const useNlpQuery = (): {\n convertQuery: (params: { question: string; maxResults?: number }) => void;\n convertQueryAsync: (params: { question: string; maxResults?: number }) => Promise<any>;\n isConverting: boolean;\n error: unknown;\n data: any;\n graphqlQuery: string | undefined;\n variables: Record<string, unknown> | undefined;\n detectedSchemas: Record<string, unknown>[] | undefined;\n confidence: number | undefined;\n reset: () => void;\n isReady: boolean;\n} => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for converting natural language to GraphQL\n const nlpQueryMutation = useMutation({\n mutationFn: async ({\n question,\n maxResults,\n }: {\n question: string;\n maxResults?: number;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(flowId).nlpQuery(question, maxResults);\n },\n onError: (err: unknown) => {\n console.log(\"NLP query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`NLP query conversion failed: ${errorMessage}`);\n },\n onSuccess: (data) => {\n if (data.graphql_query) {\n notify.success(\"Natural language converted to GraphQL successfully\");\n } else {\n notify.warning(\"Query processed but no GraphQL generated\");\n }\n },\n });\n\n // Show loading indicator for conversion operations\n useActivity(\n nlpQueryMutation.isPending,\n \"Converting natural language to GraphQL\"\n );\n\n // Return the public API for the hook\n return {\n // Query conversion\n convertQuery: nlpQueryMutation.mutate,\n convertQueryAsync: nlpQueryMutation.mutateAsync,\n\n // Query state\n isConverting: nlpQueryMutation.isPending,\n error: nlpQueryMutation.error,\n data: nlpQueryMutation.data,\n\n // Extracted data for easier access\n graphqlQuery: nlpQueryMutation.data?.graphql_query,\n variables: nlpQueryMutation.data?.variables,\n detectedSchemas: nlpQueryMutation.data?.detected_schemas,\n confidence: nlpQueryMutation.data?.confidence,\n\n // Reset function to clear previous results\n reset: nlpQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing processing operations\n * Provides functionality for fetching, deleting, and creating processing\n * @returns {Object} Processing state and operations\n */\nexport const useProcessing = (): {\n processing: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the librarian service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all processing\n * Uses React Query for caching and background refetching\n */\n const processingQuery = useQuery({\n queryKey: [\"processing\"],\n enabled: isSocketReady,\n queryFn: async () => {\n const result = await socket.librarian().getProcessing();\n // React Query requires non-undefined return value\n return result || [];\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(processingQuery.isLoading, \"Loading submissions\");\n\n // Return procecssing state and operations for use in components\n return {\n // Processing data and query state\n processing: processingQuery.data,\n isLoading: processingQuery.isLoading,\n isError: processingQuery.isError,\n error: processingQuery.error,\n\n // Manual refetch function\n refetch: processingQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing agent tools (create, read, update, delete operations)\n * Provides CRUD operations for agent tools stored in the TrustGraph configuration\n */\nexport const useAgentTools = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch all agent tools\n // Gets all tools directly from the 'tool' configuration type\n const toolsQuery = useQuery({\n queryKey: [\"agent-tools\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Get all tools using the getValues operation\n return socket\n .config()\n .getValues(\"tool\")\n .then((values) => {\n // Parse tool configurations and pair them with their IDs\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n // Mutation for updating an existing tool's configuration\n const updateToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Update the tool configuration in the backend\n return socket\n .config()\n .putConfig([\n {\n type: \"tool\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful update\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool updated\");\n },\n });\n\n // Mutation for creating a new tool\n // Creates the tool configuration directly\n const createToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Create the new tool configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"tool\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool created\");\n },\n });\n\n // Mutation for deleting a tool\n // Deletes the tool configuration directly\n const deleteToolMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Delete the tool configuration\n return socket\n .config()\n .deleteConfig([\n {\n type: \"tool\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(toolsQuery.isLoading, \"Loading tools\");\n useActivity(updateToolMutation.isPending, \"Updating tool\");\n useActivity(createToolMutation.isPending, \"Creating tool\");\n useActivity(deleteToolMutation.isPending, \"Deleting tool\");\n\n // Return the public API for the hook\n return {\n // Tools data and query state\n tools: toolsQuery.data || [], // Array of [id, toolConfig] pairs\n isLoading: toolsQuery.isLoading,\n isError: toolsQuery.isError,\n error: toolsQuery.error,\n\n // Update tool operations\n updateTool: updateToolMutation.mutate,\n isUpdatingTool: updateToolMutation.isPending,\n\n // Create tool operations\n createTool: createToolMutation.mutate,\n isCreatingTool: createToolMutation.isPending,\n\n // Delete tool operations\n deleteTool: deleteToolMutation.mutate,\n isDeletingTool: deleteToolMutation.isPending,\n\n // Manual refetch function\n refetch: toolsQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing MCP tools (create, read, update, delete operations)\n * Provides CRUD operations for MCP tools stored in the TrustGraph configuration\n */\nexport const useMcpTools = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch all MCP tools\n // Uses the list operation to get all MCP tools directly\n const toolsQuery = useQuery({\n queryKey: [\"mcp-tools\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Get all MCP tools using the getValues operation\n return socket\n .config()\n .getValues(\"mcp\")\n .then((values) => {\n // Parse tool configurations and pair them with their IDs\n // MCP tools have simplified structure: { name: string, url: string }\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n });\n },\n });\n\n // Mutation for updating an existing tool's configuration\n const updateToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Update the tool configuration in the backend\n return socket\n .config()\n .putConfig([\n {\n type: \"mcp\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful update\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool updated\");\n },\n });\n\n // Mutation for creating a new tool\n // Creates the tool configuration directly\n const createToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Create the new tool configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"mcp\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool created\");\n },\n });\n\n // Mutation for deleting a tool\n // Deletes the tool configuration directly\n const deleteToolMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Delete the tool configuration\n return socket\n .config()\n .deleteConfig([\n {\n type: \"mcp\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(toolsQuery.isLoading, \"Loading tools\");\n useActivity(updateToolMutation.isPending, \"Updating tool\");\n useActivity(createToolMutation.isPending, \"Creating tool\");\n useActivity(deleteToolMutation.isPending, \"Deleting tool\");\n\n // Return the public API for the hook\n return {\n // Tools data and query state\n tools: toolsQuery.data || [], // Array of [id, toolConfig] pairs\n isLoading: toolsQuery.isLoading,\n isError: toolsQuery.isError,\n error: toolsQuery.error,\n\n // Update tool operations\n updateTool: updateToolMutation.mutate,\n isUpdatingTool: updateToolMutation.isPending,\n\n // Create tool operations\n createTool: createToolMutation.mutate,\n isCreatingTool: createToolMutation.isPending,\n\n // Delete tool operations\n deleteTool: deleteToolMutation.mutate,\n isDeletingTool: deleteToolMutation.isPending,\n\n // Manual refetch function\n refetch: toolsQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing AI prompts (system prompt and prompt templates)\n * Provides CRUD operations for both the system prompt and user-defined prompt templates\n */\nexport const usePrompts = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch the system prompt configuration\n // System prompt defines the AI assistant's behavior and instructions\n const systemPromptQuery = useQuery({\n queryKey: [\"system-prompt\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"system\" }])\n .then((res) => {\n if (res[\"error\"]) {\n console.log(\"Error:\", res);\n throw res.error.message;\n }\n return JSON.parse(res.values[0].value);\n });\n },\n });\n\n // Query to fetch all prompt templates\n // First gets the template index (list of template IDs), then fetches each template's configuration\n const promptsQuery = useQuery({\n queryKey: [\"prompts\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Step 1: Get the template index (array of template IDs)\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => {\n if (res[\"error\"]) {\n console.log(\"Error:\", res);\n throw res.error.message;\n }\n const promptIds = JSON.parse(res.values[0].value);\n\n // Step 2: Fetch configuration for each template using their IDs\n return socket\n .config()\n .getConfig(\n promptIds.map((id) => ({\n type: \"prompt\",\n key: \"template.\" + id,\n }))\n )\n .then((r) => {\n if (r[\"error\"]) {\n console.log(\"Error:\", r);\n throw r.error.message;\n }\n // Parse template configurations and pair them with their IDs\n const config = r.values.map((c) => JSON.parse(c.value));\n return promptIds.map((id, ix) => [id, config[ix]]);\n });\n });\n },\n });\n\n // Mutation for updating the system prompt\n // System prompt controls the AI assistant's base behavior and instructions\n const updateSystemPromptMutation = useMutation({\n mutationFn: ({ prompt, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"system\",\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the system prompt data after successful update\n queryClient.invalidateQueries({ queryKey: [\"system-prompt\"] });\n notify.success(\"System prompt updated\");\n },\n });\n\n // Mutation for updating an existing prompt template\n const updatePromptMutation = useMutation({\n mutationFn: ({ id, prompt, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template.\" + id,\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful update\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt updated\");\n },\n });\n\n // Mutation for creating a new prompt template\n // Updates both the template index and creates the template configuration\n const createPromptMutation = useMutation({\n mutationFn: ({ id, prompt, onSuccess }) => {\n // Step 1: Get current template index\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => JSON.parse(res.values[0].value))\n .then((existingIds) => {\n // Step 2: Add new template ID to the index\n const newIds = [...existingIds, id];\n // Step 3: Update both the template index and create the new template configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template-index\",\n value: JSON.stringify(newIds),\n },\n {\n type: \"prompt\",\n key: \"template.\" + id,\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt created\");\n },\n });\n\n // Mutation for deleting a prompt template\n // Removes the template from both the index and deletes its configuration\n const deletePromptMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Step 1: Get current template index\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => JSON.parse(res.values[0].value))\n .then((existingIds) => {\n // Step 2: Remove the template ID from the index\n const newIds = existingIds.filter((existingId) => existingId !== id);\n // Step 3: Update the template index\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template-index\",\n value: JSON.stringify(newIds),\n },\n ])\n .then(() => {\n // Step 4: Delete the template configuration\n return socket.config().deleteConfig([\n {\n type: \"prompt\",\n key: \"template.\" + id,\n },\n ]);\n })\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(systemPromptQuery.isLoading, \"Loading system prompt\");\n useActivity(promptsQuery.isLoading, \"Loading prompts\");\n useActivity(updateSystemPromptMutation.isPending, \"Updating system prompt\");\n useActivity(updatePromptMutation.isPending, \"Updating prompt\");\n useActivity(createPromptMutation.isPending, \"Creating prompt\");\n useActivity(deletePromptMutation.isPending, \"Deleting prompt\");\n\n // Return the public API for the hook\n return {\n // System prompt data and state\n systemPrompt: systemPromptQuery.data, // The current system prompt configuration\n systemPromptLoading: systemPromptQuery.isLoading,\n systemPromptError: systemPromptQuery.error,\n\n // Prompt templates data and state\n prompts: promptsQuery.data || [], // Array of [id, promptConfig] pairs\n promptsLoading: promptsQuery.isLoading,\n promptsError: promptsQuery.error,\n\n // System prompt operations\n updateSystemPrompt: updateSystemPromptMutation.mutate,\n isUpdatingSystemPrompt: updateSystemPromptMutation.isPending,\n\n // Prompt template operations\n updatePrompt: updatePromptMutation.mutate,\n isUpdatingPrompt: updatePromptMutation.isPending,\n\n createPrompt: createPromptMutation.mutate,\n isCreatingPrompt: createPromptMutation.isPending,\n\n deletePrompt: deletePromptMutation.mutate,\n isDeletingPrompt: deletePromptMutation.isPending,\n\n // Manual refetch function for both queries\n refetch: () => {\n systemPromptQuery.refetch();\n promptsQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\nexport const useSchemas = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const schemasQuery = useQuery({\n queryKey: [\"schemas\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getValues(\"schema\")\n .then((values) => {\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n const updateSchemaMutation = useMutation({\n mutationFn: ({ id, schema, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"schema\",\n key: id,\n value: JSON.stringify(schema),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema updated\");\n },\n });\n\n const createSchemaMutation = useMutation({\n mutationFn: ({ id, schema, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"schema\",\n key: id,\n value: JSON.stringify(schema),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema created\");\n },\n });\n\n const deleteSchemaMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n return socket\n .config()\n .deleteConfig([\n {\n type: \"schema\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema deleted\");\n },\n });\n\n useActivity(schemasQuery.isLoading, \"Loading schemas\");\n useActivity(updateSchemaMutation.isPending, \"Updating schema\");\n useActivity(createSchemaMutation.isPending, \"Creating schema\");\n useActivity(deleteSchemaMutation.isPending, \"Deleting schema\");\n\n return {\n schemas: schemasQuery.data || [],\n schemasLoading: schemasQuery.isLoading,\n schemasError: schemasQuery.error,\n\n updateSchema: updateSchemaMutation.mutate,\n isUpdatingSchema: updateSchemaMutation.isPending,\n\n createSchema: createSchemaMutation.mutate,\n isCreatingSchema: createSchemaMutation.isPending,\n\n deleteSchema: deleteSchemaMutation.mutate,\n isDeletingSchema: deleteSchemaMutation.isPending,\n\n refetch: () => {\n schemasQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\nexport interface OntologyMetadata {\n name: string;\n description: string;\n version: string;\n created: string;\n modified: string;\n creator: string;\n namespace: string;\n imports?: string[];\n}\n\nexport interface OWLClass {\n uri: string;\n type: \"owl:Class\";\n \"rdfs:label\"?: Array<{ value: string; lang?: string }>;\n \"rdfs:comment\"?: string;\n \"rdfs:subClassOf\"?: string;\n \"owl:equivalentClass\"?: string[];\n \"owl:disjointWith\"?: string[];\n \"dcterms:identifier\"?: string;\n}\n\nexport interface OWLBaseProperty {\n uri: string;\n \"rdfs:label\"?: Array<{ value: string; lang?: string }>;\n \"rdfs:domain\"?: string;\n \"rdfs:range\"?: string;\n \"rdfs:comment\"?: string;\n \"owl:functionalProperty\"?: boolean;\n \"owl:minCardinality\"?: number;\n \"owl:maxCardinality\"?: number;\n \"owl:cardinality\"?: number;\n \"rdfs:subPropertyOf\"?: string;\n}\n\nexport interface OWLObjectProperty extends OWLBaseProperty {\n type: \"owl:ObjectProperty\";\n \"owl:inverseOf\"?: string;\n \"owl:inverseFunctionalProperty\"?: boolean;\n}\n\nexport interface OWLDatatypeProperty extends OWLBaseProperty {\n type: \"owl:DatatypeProperty\";\n}\n\nexport interface Ontology {\n metadata: OntologyMetadata;\n classes: Record<string, OWLClass>;\n objectProperties: Record<string, OWLObjectProperty>;\n datatypeProperties: Record<string, OWLDatatypeProperty>;\n}\n\nexport const useOntologies = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const ontologiesQuery = useQuery({\n queryKey: [\"ontologies\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getValues(\"ontology\")\n .then((values) => {\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n const updateOntologyMutation = useMutation({\n mutationFn: ({\n id,\n ontology,\n onSuccess,\n }: {\n id: string;\n ontology: Ontology;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"ontology\",\n key: id,\n value: JSON.stringify(ontology),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology updated\");\n },\n });\n\n const createOntologyMutation = useMutation({\n mutationFn: ({\n id,\n ontology,\n onSuccess,\n }: {\n id: string;\n ontology: Ontology;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"ontology\",\n key: id,\n value: JSON.stringify(ontology),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology created\");\n },\n });\n\n const deleteOntologyMutation = useMutation({\n mutationFn: ({\n id,\n onSuccess,\n }: {\n id: string;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .deleteConfig([\n {\n type: \"ontology\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology deleted\");\n },\n });\n\n useActivity(ontologiesQuery.isLoading, \"Loading ontologies\");\n useActivity(updateOntologyMutation.isPending, \"Updating ontology\");\n useActivity(createOntologyMutation.isPending, \"Creating ontology\");\n useActivity(deleteOntologyMutation.isPending, \"Deleting ontology\");\n\n return {\n ontologies: ontologiesQuery.data || [],\n ontologiesLoading: ontologiesQuery.isLoading,\n ontologiesError: ontologiesQuery.error,\n\n updateOntology: updateOntologyMutation.mutate,\n isUpdatingOntology: updateOntologyMutation.isPending,\n\n createOntology: createOntologyMutation.mutate,\n isCreatingOntology: createOntologyMutation.isPending,\n\n deleteOntology: deleteOntologyMutation.mutate,\n isDeletingOntology: deleteOntologyMutation.isPending,\n\n refetch: () => {\n ontologiesQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing knowledge core operations\n * Provides functionality for fetching, deleting, down/uploading cores\n * @returns {Object} Knowledge core state and operations\n */\nexport const useKnowledgeCores = () => {\n // WebSocket connection for communicating with the knowledge service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all knowledge cores\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"knowledge-cores\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .knowledge()\n .getKnowledgeCores()\n .then((cores) =>\n cores.map((x) => {\n return { id: x };\n })\n );\n },\n });\n\n /**\n * Mutation for deleting multiple knowledge cores\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, onSuccess }) => {\n const user = \"trustgraph\";\n\n // Execute deletion requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().deleteKgCore(id, user))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"knowledge-cores\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for loading multiple knowledge cores\n * Executes parallel load requests with specified flow\n */\n const loadKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, flow, onSuccess }) => {\n // Execute load requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().loadKgCore(id, flow))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Show success notification\n notify.success(\"Knowledge cores loaded successfully\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading knowledge cores\");\n\n // Return knowledge core state and operations for use in components\n return {\n // Knowledge cores\n knowledgeCores: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Knowledge core deletion operations\n deleteKnowledgeCores: deleteKnowledgeCoresMutation.mutate,\n isDeleting: deleteKnowledgeCoresMutation.isPending,\n deleteError: deleteKnowledgeCoresMutation.error,\n\n // Knowledge core loading operations\n loadKnowledgeCores: loadKnowledgeCoresMutation.mutate,\n isLoadingCores: loadKnowledgeCoresMutation.isPending,\n loadError: loadKnowledgeCoresMutation.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useTokenCosts = () => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"token-cost\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getTokenCosts()\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n });\n },\n });\n\n /**\n * Mutation for deleting a specific model's token cost\n * Removes the token cost configuration for a given model\n */\n const deleteTokenCostMutation = useMutation({\n mutationFn: ({ model, onSuccess }) => {\n // Delete the token cost configuration for the specified model\n return socket\n .config()\n .deleteConfig([\n {\n type: \"token-cost\",\n key: model,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"token-cost\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for updating token cost for a specific model\n * Converts per-million token prices to per-token prices and saves\n * configuration\n */\n const updateTokenCostMutation = useMutation({\n mutationFn: ({ model, input_price, output_price, onSuccess }) => {\n // Convert per-million token prices to per-token prices\n const tokenCosts = {\n input_price: input_price / 1000000,\n output_price: output_price / 1000000,\n };\n\n // Save the token cost configuration for the specified model\n return socket\n .config()\n .putConfig([\n {\n type: \"token-cost\",\n key: model,\n value: JSON.stringify(tokenCosts),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate cache to refresh the token costs list\n queryClient.invalidateQueries({ queryKey: [\"token-cost\"] });\n notify.success(\"Token costs updated\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading token costs\");\n useActivity(deleteTokenCostMutation.isPending, \"Deleting token cost\");\n useActivity(updateTokenCostMutation.isPending, \"Updating token cost\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n tokenCosts: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Token cost deletion operations\n deleteTokenCost: deleteTokenCostMutation.mutate,\n isDeleting: deleteTokenCostMutation.isPending,\n deleteError: deleteTokenCostMutation.error,\n\n // Token cost update operations\n updateTokenCost: updateTokenCostMutation.mutate,\n isSubmitting: updateTokenCostMutation.isPending,\n submitError: updateTokenCostMutation.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { EnumOption } from \"../model/llm-models\";\n\nexport const useLLMModels = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Fetch the llm-model parameter type\n const paramTypesQuery = useQuery({\n queryKey: [\"llm-models\"],\n enabled: isSocketReady,\n queryFn: async () => {\n const response = await socket\n .config()\n .getConfig([{ type: \"parameter-type\", key: \"llm-model\" }]);\n\n if (!response.values || response.values.length === 0) {\n return [];\n }\n\n const item = response.values[0];\n const paramDef = JSON.parse(item.value);\n\n return [\n {\n name: item.key,\n type: paramDef.type || \"string\",\n description: paramDef.description || item.key,\n default: paramDef.default || \"\",\n enum: paramDef.enum || [],\n required: paramDef.required || false,\n },\n ];\n },\n });\n\n // Update a parameter type's enum and default\n const updateMutation = useMutation({\n mutationFn: async ({\n name,\n enum: enumOptions,\n default: defaultValue,\n }: {\n name: string;\n enum: EnumOption[];\n default: string;\n }) => {\n // Get current parameter type to preserve other fields\n const currentParam = paramTypesQuery.data?.find(\n (pt) => pt.name === name\n );\n if (!currentParam) {\n throw new Error(`Parameter type ${name} not found`);\n }\n\n // Update only enum and default, preserve other fields\n const updatedDef = {\n type: currentParam.type,\n description: currentParam.description,\n required: currentParam.required,\n enum: enumOptions,\n default: defaultValue,\n };\n\n await socket.config().putConfig([\n {\n type: \"parameter-type\",\n key: name,\n value: JSON.stringify(updatedDef),\n },\n ]);\n },\n onError: (err) => {\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"llm-models\"] });\n notify.success(\"Models updated successfully\");\n },\n });\n\n useActivity(paramTypesQuery.isLoading, \"Loading LLM models\");\n useActivity(updateMutation.isPending, \"Updating models\");\n\n return {\n parameterTypes: paramTypesQuery.data || [],\n isLoading: paramTypesQuery.isLoading,\n isError: paramTypesQuery.isError,\n error: paramTypesQuery.error,\n\n updateParameter: updateMutation.mutate,\n isUpdating: updateMutation.isPending,\n\n refetch: paramTypesQuery.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Flow blueprint definition interface\n */\nexport interface FlowBlueprintDefinition {\n id?: string;\n class: {\n [key: string]: {\n [queueName: string]: string;\n };\n };\n flow: {\n [key: string]: {\n [queueName: string]: string;\n };\n };\n interfaces: {\n [key: string]:\n | string\n | {\n request: string;\n response: string;\n };\n };\n description?: string;\n tags?: string[];\n}\n\n/**\n * Custom hook for managing flow blueprint operations\n * Provides functionality for fetching, creating, updating, and deleting flow blueprintes\n * @returns {Object} Flow blueprint state and operations\n */\nexport const useFlowBlueprints = () => {\n // WebSocket connection for communicating with the config service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all flow blueprintes\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"flow-blueprints\"],\n enabled: isSocketReady,\n staleTime: 0, // Force fresh data\n gcTime: 0, // Don't cache (React Query v5 uses gcTime instead of cacheTime)\n refetchOnMount: \"always\",\n queryFn: async (): Promise<FlowBlueprintDefinition[]> => {\n try {\n const response = await socket.config().getConfigAll();\n\n // Handle both array and object responses\n const config = response.config[\"flow-blueprints\"];\n\n if (Array.isArray(config)) {\n // If it's already an array, check if it's an array of [key, value] pairs\n if (\n config.length > 0 &&\n Array.isArray(config[0]) &&\n config[0].length === 2\n ) {\n // It's an array of [id, flowBlueprint] pairs - convert to objects\n const converted = config.map(([id, flowBlueprintData]) => {\n let flowBlueprint = flowBlueprintData;\n // If the flowBlueprint is a JSON string, parse it\n if (typeof flowBlueprintData === \"string\") {\n try {\n flowBlueprint = JSON.parse(flowBlueprintData);\n } catch (error) {\n console.error(\n `Failed to parse flow blueprint JSON for ${id}:`,\n error\n );\n flowBlueprint = flowBlueprintData;\n }\n }\n return {\n id,\n ...(flowBlueprint as Omit<FlowBlueprintDefinition, \"id\">),\n };\n });\n return converted;\n } else {\n // It's already an array of flow blueprint objects\n return config;\n }\n } else if (config && typeof config === \"object\") {\n // Convert object to array of flow blueprintes\n const converted = Object.entries(config).map(\n ([id, flowBlueprintData]) => {\n let flowBlueprint = flowBlueprintData;\n // If the flowBlueprint is a JSON string, parse it\n if (typeof flowBlueprintData === \"string\") {\n try {\n flowBlueprint = JSON.parse(flowBlueprintData);\n } catch (error) {\n console.error(\n `Failed to parse flow blueprint JSON for ${id}:`,\n error\n );\n flowBlueprint = flowBlueprintData;\n }\n }\n return {\n id,\n ...(flowBlueprint as Omit<FlowBlueprintDefinition, \"id\">),\n };\n }\n );\n return converted;\n }\n\n return [];\n } catch (error) {\n console.error(\"Failed to fetch flow blueprintes:\", error);\n throw new Error(\"Failed to fetch flow blueprintes\");\n }\n },\n });\n\n // Track loading state\n useActivity(query.isLoading, \"Loading flow blueprintes\");\n\n /**\n * Mutation for creating a new flow blueprint\n */\n const createMutation = useMutation({\n mutationFn: async ({\n id,\n flowBlueprint,\n }: {\n id: string;\n flowBlueprint: Omit<FlowBlueprintDefinition, \"id\">;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n value: JSON.stringify(flowBlueprint),\n },\n ]);\n\n return {\n id,\n ...flowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to create flow blueprint ${id}:`, error);\n throw new Error(`Failed to create flow blueprint: ${id}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n // Invalidate and refetch flow blueprintes\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${flowBlueprint.id}\" created successfully`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to create flow blueprint: ${error.message}`);\n },\n });\n\n /**\n * Mutation for updating an existing flow blueprint\n */\n const updateMutation = useMutation({\n mutationFn: async ({\n id,\n flowBlueprint,\n }: {\n id: string;\n flowBlueprint: Partial<Omit<FlowBlueprintDefinition, \"id\">>;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n // Get current flow blueprint to merge changes\n const currentResponse = await socket.config().getConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n },\n ]);\n\n const updatedFlowBlueprint = {\n ...currentResponse.config[\"flow-blueprints\"][id],\n ...flowBlueprint,\n };\n\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n value: JSON.stringify(updatedFlowBlueprint),\n },\n ]);\n\n return {\n id,\n ...updatedFlowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to update flow blueprint ${id}:`, error);\n throw new Error(`Failed to update flow blueprint: ${id}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n // Update cache\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${flowBlueprint.id}\" updated successfully`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to update flow blueprint: ${error.message}`);\n },\n });\n\n /**\n * Mutation for deleting a flow blueprint\n */\n const deleteMutation = useMutation({\n mutationFn: async (id: string): Promise<void> => {\n try {\n await socket.flows().deleteFlowBlueprint(id);\n } catch (error) {\n console.error(`Failed to delete flow blueprint ${id}:`, error);\n // Re-throw the original error to preserve the API error message\n throw error;\n }\n },\n onSuccess: (_, id) => {\n // Remove from cache\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${id}\" deleted successfully`);\n },\n onError: (error: Error) => {\n // Show the actual API error message without additional prefixes\n notify.error(\n error.message || \"Unknown error occurred while deleting flow blueprint\"\n );\n },\n });\n\n /**\n * Mutation for duplicating a flow blueprint\n */\n const duplicateMutation = useMutation({\n mutationFn: async ({\n sourceId,\n targetId,\n }: {\n sourceId: string;\n targetId: string;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n // Get source flow blueprint\n const sourceResponse = await socket.config().getConfig([\n {\n type: \"flow-blueprints\",\n key: sourceId,\n },\n ]);\n\n const sourceFlowBlueprint = sourceResponse.config[\"flow-blueprints\"][\n sourceId\n ] as Omit<FlowBlueprintDefinition, \"id\">;\n\n // Create duplicate with updated description\n const duplicatedFlowBlueprint = {\n ...sourceFlowBlueprint,\n description: `${sourceFlowBlueprint.description || sourceId} (Copy)`,\n tags: [...(sourceFlowBlueprint.tags || []), \"copy\"],\n };\n\n // Save as new flow blueprint\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: targetId,\n value: JSON.stringify(duplicatedFlowBlueprint),\n },\n ]);\n\n return {\n id: targetId,\n ...duplicatedFlowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to duplicate flow blueprint ${sourceId}:`, error);\n throw new Error(`Failed to duplicate flow blueprint: ${sourceId}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint duplicated as \"${flowBlueprint.id}\"`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to duplicate flow blueprint: ${error.message}`);\n },\n });\n\n // Track mutation loading states\n useActivity(createMutation.isPending, \"Creating flow blueprint\");\n useActivity(updateMutation.isPending, \"Updating flow blueprint\");\n useActivity(deleteMutation.isPending, \"Deleting flow blueprint\");\n useActivity(duplicateMutation.isPending, \"Duplicating flow blueprint\");\n\n return {\n // Query state\n flowBlueprints: query.data || [],\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n\n // Utilities\n getFlowBlueprint: (id: string): FlowBlueprintDefinition | undefined => {\n const found = query.data?.find((fc) => {\n return fc.id === id;\n });\n return found;\n },\n exists: (id: string): boolean => {\n return query.data?.some((fc) => fc.id === id) ?? false;\n },\n\n // Mutations\n createFlowBlueprint: createMutation.mutateAsync,\n updateFlowBlueprint: updateMutation.mutateAsync,\n deleteFlowBlueprint: deleteMutation.mutateAsync,\n duplicateFlowBlueprint: duplicateMutation.mutateAsync,\n\n // Mutation states\n isCreating: createMutation.isPending,\n isUpdating: updateMutation.isPending,\n isDeleting: deleteMutation.isPending,\n isDuplicating: duplicateMutation.isPending,\n };\n};\n\n/**\n * Generate a unique flow blueprint ID\n */\nexport const generateFlowBlueprintId = (baseName = \"flow-class\"): string => {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${baseName}-${timestamp}-${random}`;\n};\n\n/**\n * Validate flow blueprint ID format\n */\nexport const isValidFlowBlueprintId = (id: string): boolean => {\n // Flow blueprint IDs should be kebab-case, alphanumeric with hyphens\n return /^[a-z0-9-]+$/.test(id) && id.length >= 3 && id.length <= 50;\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n// Parameter schema definition\ninterface ParameterSchema {\n type: \"string\" | \"number\" | \"integer\" | \"boolean\";\n description?: string;\n default?: unknown;\n enum?: EnumOption[] | string[];\n minimum?: number;\n maximum?: number;\n pattern?: string;\n required?: boolean;\n helper?: string;\n placeholder?: string;\n}\n\n// Rich enum option structure\ninterface EnumOption {\n id: string;\n description: string;\n}\n\n// Parameter definitions fetched from config\ninterface ParameterDefinitions {\n [definitionName: string]: ParameterSchema;\n}\n\n// Flow parameter metadata (stored in flow class)\ninterface FlowParameterMetadata {\n description: string;\n order: number;\n type: string; // Reference to parameter definition name\n advanced?: boolean; // If true, parameter is shown in collapsible advanced section\n \"controlled-by\"?: string; // Name of parameter that controls this parameter's value\n}\n\n/**\n * Custom hook for fetching parameter definitions for a flow blueprint\n * @param flowBlueprintName - The name of the flow blueprint to fetch parameters for\n * @returns Parameter definitions, mapping, and loading states\n */\nexport const useFlowParameters = (flowBlueprintName?: string) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching parameter definitions for a flow blueprint\n */\n const parametersQuery = useQuery({\n queryKey: [\"flow-parameters\", flowBlueprintName],\n enabled: isSocketReady && !!flowBlueprintName,\n queryFn: async () => {\n if (!flowBlueprintName) return null;\n\n try {\n // Get flow blueprint definition first\n const flowBlueprint = await socket.flows().getFlowBlueprint(flowBlueprintName);\n\n // Extract parameter metadata with new structure\n const parameterMetadata: { [key: string]: FlowParameterMetadata } =\n flowBlueprint.parameters || {};\n if (Object.keys(parameterMetadata).length === 0) {\n return {\n parameterDefinitions: {},\n parameterMapping: {},\n parameterMetadata: {},\n };\n }\n\n // Create mapping from flow param names to definition names\n const parameterMapping: { [key: string]: string } = {};\n Object.entries(parameterMetadata).forEach(\n ([flowParamName, metadata]) => {\n parameterMapping[flowParamName] = metadata.type;\n }\n );\n\n // Fetch parameter definitions from config\n const definitionNames = Object.values(parameterMapping);\n const configKeys = definitionNames.map((name) => ({\n type: \"parameter-type\",\n key: name,\n }));\n\n const configResponse = await socket.config().getConfig(configKeys);\n const parameterDefinitions: ParameterDefinitions = {};\n\n // Parse config response to get parameter definitions\n configResponse.values?.forEach((item) => {\n if (item.type === \"parameter-type\") {\n try {\n parameterDefinitions[item.key] = JSON.parse(item.value);\n } catch (error) {\n console.error(\n `Failed to parse parameter definition for ${item.key}:`,\n error\n );\n }\n }\n });\n\n return {\n parameterDefinitions,\n parameterMapping, // Maps flow param names to definition names\n parameterMetadata, // Flow-specific metadata with description, order, type\n };\n } catch (error) {\n console.error(\"Failed to fetch flow parameters:\", error);\n throw error;\n }\n },\n });\n\n useActivity(parametersQuery.isLoading, \"Loading flow parameters\");\n\n return {\n parameterDefinitions: parametersQuery.data?.parameterDefinitions || {},\n parameterMapping: parametersQuery.data?.parameterMapping || {},\n parameterMetadata: parametersQuery.data?.parameterMetadata || {},\n isLoading: parametersQuery.isLoading,\n isError: parametersQuery.isError,\n error: parametersQuery.error,\n };\n};\n\n/**\n * Custom hook for parameter validation\n * @param parameterDefinitions - The parameter schema definitions\n * @param parameterMapping - Maps flow param names to definition names\n * @param parameterMetadata - Flow parameter metadata including controlled-by relationships\n * @param parameterValues - Current parameter values\n * @returns Validation result with isValid flag and errors object\n */\nexport const useParameterValidation = (\n parameterDefinitions: ParameterDefinitions,\n parameterMapping: { [key: string]: string },\n parameterMetadata: { [key: string]: FlowParameterMetadata },\n parameterValues: { [key: string]: unknown }\n) => {\n return useMemo(() => {\n const errors: { [key: string]: string } = {};\n let isValid = true;\n\n // Resolve parameter value considering controlled-by relationships\n const resolveParameterValue = (\n paramName: string,\n currentValues: { [key: string]: unknown }\n ): unknown => {\n const metadata = parameterMetadata[paramName];\n const schema = parameterDefinitions[parameterMapping[paramName]];\n\n // If parameter has explicit value, use it\n if (\n currentValues[paramName] !== undefined &&\n currentValues[paramName] !== \"\"\n ) {\n return currentValues[paramName];\n }\n\n // If parameter is controlled by another parameter, inherit its value\n if (metadata && metadata[\"controlled-by\"]) {\n const controllerName = metadata[\"controlled-by\"];\n const controllerValue = resolveParameterValue(\n controllerName,\n currentValues\n );\n if (controllerValue !== undefined && controllerValue !== \"\") {\n return controllerValue;\n }\n }\n\n // Fall back to default value from schema\n return schema?.default ?? \"\";\n };\n\n Object.entries(parameterMapping).forEach(\n ([flowParamName, definitionName]) => {\n const schema = parameterDefinitions[definitionName];\n if (!schema) return;\n\n const resolvedValue = resolveParameterValue(\n flowParamName,\n parameterValues\n );\n const value = resolvedValue;\n\n // Check required fields\n if (schema.required && (value === undefined || value === \"\")) {\n errors[flowParamName] = `${flowParamName} is required`;\n isValid = false;\n return;\n }\n\n // Skip validation for empty optional fields\n if (value === undefined || value === \"\") {\n return;\n }\n\n // Type validation\n if (schema.type === \"number\" || schema.type === \"integer\") {\n const numValue =\n typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(numValue)) {\n errors[flowParamName] = `${flowParamName} must be a valid number`;\n isValid = false;\n return;\n }\n\n if (schema.type === \"integer\" && !Number.isInteger(numValue)) {\n errors[flowParamName] = `${flowParamName} must be an integer`;\n isValid = false;\n return;\n }\n\n // Range validation\n if (schema.minimum !== undefined && numValue < schema.minimum) {\n errors[flowParamName] =\n `${flowParamName} must be at least ${schema.minimum}`;\n isValid = false;\n }\n if (schema.maximum !== undefined && numValue > schema.maximum) {\n errors[flowParamName] =\n `${flowParamName} must be at most ${schema.maximum}`;\n isValid = false;\n }\n }\n\n // Enum validation\n if (schema.enum && schema.enum.length > 0) {\n const validValues = schema.enum.map((option) =>\n typeof option === \"object\" ? option.id : option\n );\n if (!validValues.includes(value)) {\n errors[flowParamName] =\n `${flowParamName} must be one of: ${validValues.join(\", \")}`;\n isValid = false;\n }\n }\n\n // Pattern validation for strings\n if (schema.pattern && schema.type === \"string\") {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value.toString())) {\n errors[flowParamName] = `${flowParamName} format is invalid`;\n isValid = false;\n }\n }\n }\n );\n\n return { isValid, errors };\n }, [\n parameterDefinitions,\n parameterMapping,\n parameterMetadata,\n parameterValues,\n ]);\n};\n\nexport type {\n ParameterSchema,\n EnumOption,\n ParameterDefinitions,\n FlowParameterMetadata,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\nimport { Value } from \"@trustgraph/client\";\nimport { RDFS_LABEL } from \"../utils/knowledge-graph\";\n\n/**\n * Standard URI to label mappings\n * These common URIs are mapped directly without knowledge graph queries\n */\nconst STANDARD_URI_LABELS: Record<string, string> = {\n \"https://schema.org/subjectOf\": \"subject of\",\n \"https://schema.org/description\": \"description\",\n \"https://schema.org/copyrightHolder\": \"copyright holder\",\n \"https://schema.org/copyrightNotice\": \"copyright notice\",\n \"https://schema.org/keywords\": \"keywords\",\n \"https://schema.org/name\": \"Name\",\n \"https://schema.org/author\": \"author\",\n \"https://schema.org/publication\": \"publication\",\n \"https://schema.org/url\": \"url\",\n \"http://www.w3.org/2004/02/skos/core#definition\": \"Definition\",\n \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\": \"type\",\n};\n\n/**\n * Get label for a URI, checking standard mappings first\n * @param uri - The URI to get a label for\n * @returns The label if found in standard mappings, undefined otherwise\n */\nconst getStandardLabel = (uri: string): string | undefined => {\n return STANDARD_URI_LABELS[uri];\n};\n\n/**\n * Custom hook for managing node details operations\n * Provides functionality for fetching triples and processing outbound relationships\n * for a selected graph node\n * @param nodeId - The ID of the selected node\n * @param flowId - The flow ID to use for the query\n * @returns {Object} Node details state and processed data\n */\nexport const useNodeDetails = (nodeId: string | undefined, flowId: string) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n /**\n * Query for fetching outbound triples where the node is the subject\n * Uses React Query for caching and background refetching\n */\n const outboundTriplesQuery = useQuery({\n queryKey: [\"node-details-outbound-triples\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const subjectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n undefined,\n undefined,\n 20,\n settings.collection\n )\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n return triples;\n })\n .catch((err) => {\n console.error(\"Error fetching outbound triples:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Query for fetching inbound triples where the node is the object\n * Uses React Query for caching and background refetching\n */\n const inboundTriplesQuery = useQuery({\n queryKey: [\"node-details-inbound-triples\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const objectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n undefined,\n undefined,\n objectValue,\n 20,\n settings.collection\n )\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n return triples;\n })\n .catch((err) => {\n console.error(\"Error fetching inbound triples:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Query for fetching properties where the node is the subject and object is a literal\n * Uses React Query for caching and background refetching\n */\n const propertiesQuery = useQuery({\n queryKey: [\"node-details-properties\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const subjectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n undefined,\n undefined,\n 50,\n settings.collection\n ) // More limit for properties\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n // Filter for properties (where o.e === false)\n return triples.filter((triple) => triple.o && triple.o.e === false);\n })\n .catch((err) => {\n console.error(\"Error fetching properties:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Process outbound triples to extract navigable relationships\n * Filters for entity relationships (o.e === true) and removes duplicates\n */\n const outboundRelationships = useMemo(() => {\n if (!outboundTriplesQuery.data) return [];\n\n // Filter for entity relationships and extract unique predicates\n const uniqueRelationships = new Set<string>();\n\n outboundTriplesQuery.data.forEach((triple) => {\n // Check if object is an entity (o.e === true)\n if (triple.o && triple.o.e === true && triple.p && triple.p.v) {\n uniqueRelationships.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueRelationships);\n }, [outboundTriplesQuery.data]);\n\n /**\n * Process inbound triples to extract navigable relationships\n * Filters for entity relationships (s.e === true) and removes duplicates\n */\n const inboundRelationships = useMemo(() => {\n if (!inboundTriplesQuery.data) return [];\n\n // Filter for entity relationships and extract unique predicates\n const uniqueRelationships = new Set<string>();\n\n inboundTriplesQuery.data.forEach((triple) => {\n // Check if subject is an entity (s.e === true)\n if (triple.s && triple.s.e === true && triple.p && triple.p.v) {\n uniqueRelationships.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueRelationships);\n }, [inboundTriplesQuery.data]);\n\n /**\n * Process properties to extract unique property URIs\n * Properties are triples where o.e === false (literals)\n */\n const propertyURIs = useMemo(() => {\n if (!propertiesQuery.data) return [];\n\n // Extract unique property predicates\n const uniqueProperties = new Set<string>();\n\n propertiesQuery.data.forEach((triple) => {\n if (triple.p && triple.p.v) {\n uniqueProperties.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueProperties);\n }, [propertiesQuery.data]);\n\n /**\n * Fetch labels for outbound relationship URIs\n * Uses dependent query that only runs when outbound relationships are available\n */\n const outboundLabelsQuery = useQuery({\n queryKey: [\n \"relationship-labels-outbound\",\n { nodeId, flowId, relationships: outboundRelationships },\n ],\n queryFn: async () => {\n if (!outboundRelationships.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each relationship URI\n await Promise.all(\n outboundRelationships.map(async (relationshipURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(relationshipURI);\n if (standardLabel) {\n labelMap[relationshipURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: relationshipURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[relationshipURI] = labelTriples[0].o.v;\n } else {\n labelMap[relationshipURI] = relationshipURI;\n }\n } catch (error) {\n console.warn(\n `Failed to fetch label for ${relationshipURI}:`,\n error\n );\n labelMap[relationshipURI] = relationshipURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && outboundRelationships.length > 0,\n });\n\n /**\n * Fetch labels for inbound relationship URIs\n * Uses dependent query that only runs when inbound relationships are available\n */\n const inboundLabelsQuery = useQuery({\n queryKey: [\n \"relationship-labels-inbound\",\n { nodeId, flowId, relationships: inboundRelationships },\n ],\n queryFn: async () => {\n if (!inboundRelationships.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each relationship URI\n await Promise.all(\n inboundRelationships.map(async (relationshipURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(relationshipURI);\n if (standardLabel) {\n labelMap[relationshipURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: relationshipURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[relationshipURI] = labelTriples[0].o.v;\n } else {\n labelMap[relationshipURI] = relationshipURI;\n }\n } catch (error) {\n console.warn(\n `Failed to fetch label for ${relationshipURI}:`,\n error\n );\n labelMap[relationshipURI] = relationshipURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && inboundRelationships.length > 0,\n });\n\n /**\n * Fetch labels for property URIs\n * Uses dependent query that only runs when properties are available\n */\n const propertyLabelsQuery = useQuery({\n queryKey: [\n \"property-labels\",\n { nodeId, flowId, properties: propertyURIs },\n ],\n queryFn: async () => {\n if (!propertyURIs.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each property URI\n await Promise.all(\n propertyURIs.map(async (propertyURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(propertyURI);\n if (standardLabel) {\n labelMap[propertyURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: propertyURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[propertyURI] = labelTriples[0].o.v;\n } else {\n labelMap[propertyURI] = propertyURI;\n }\n } catch (error) {\n console.warn(`Failed to fetch label for ${propertyURI}:`, error);\n labelMap[propertyURI] = propertyURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && propertyURIs.length > 0,\n });\n\n /**\n * Combine relationship URIs with their labels\n */\n const outboundRelationshipsWithLabels = useMemo(() => {\n if (!outboundLabelsQuery.data) {\n return outboundRelationships.map((uri) => ({ uri, label: uri }));\n }\n\n return outboundRelationships.map((uri) => ({\n uri,\n label: outboundLabelsQuery.data[uri] || uri,\n }));\n }, [outboundRelationships, outboundLabelsQuery.data]);\n\n const inboundRelationshipsWithLabels = useMemo(() => {\n if (!inboundLabelsQuery.data) {\n return inboundRelationships.map((uri) => ({ uri, label: uri }));\n }\n\n return inboundRelationships.map((uri) => ({\n uri,\n label: inboundLabelsQuery.data[uri] || uri,\n }));\n }, [inboundRelationships, inboundLabelsQuery.data]);\n\n /**\n * Combine properties with their labels and values\n * Creates array of {predicate: {uri, label}, value} objects\n * Excludes label properties since they're already displayed at the top\n */\n const propertiesWithLabels = useMemo(() => {\n if (!propertiesQuery.data) return [];\n\n return propertiesQuery.data\n .filter((triple) => {\n // Exclude label properties (RDFS_LABEL) since node label is already shown\n return triple.p?.v !== RDFS_LABEL;\n })\n .map((triple) => ({\n predicate: {\n uri: triple.p?.v || \"\",\n label:\n propertyLabelsQuery.data?.[triple.p?.v || \"\"] || triple.p?.v || \"\",\n },\n value: triple.o?.v || \"\",\n }));\n }, [propertiesQuery.data, propertyLabelsQuery.data]);\n\n // Show loading indicators for long-running operations\n useActivity(\n outboundTriplesQuery.isLoading ||\n inboundTriplesQuery.isLoading ||\n propertiesQuery.isLoading ||\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n \"Loading node details\"\n );\n\n // Return node details state and operations for use in components\n return {\n // Raw triples data\n outboundTriples: outboundTriplesQuery.data,\n inboundTriples: inboundTriplesQuery.data,\n properties: propertiesQuery.data,\n\n // Loading states\n triplesLoading:\n outboundTriplesQuery.isLoading || inboundTriplesQuery.isLoading,\n propertiesLoading: propertiesQuery.isLoading,\n labelsLoading:\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n isLoading:\n outboundTriplesQuery.isLoading ||\n inboundTriplesQuery.isLoading ||\n propertiesQuery.isLoading ||\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n\n outboundTriplesLoading: outboundTriplesQuery.isLoading,\n inboundTriplesLoading: inboundTriplesQuery.isLoading,\n propertiesQueryLoading: propertiesQuery.isLoading,\n outboundLabelsLoading: outboundLabelsQuery.isLoading,\n inboundLabelsLoading: inboundLabelsQuery.isLoading,\n propertyLabelsLoading: propertyLabelsQuery.isLoading,\n\n // Error states\n triplesError: outboundTriplesQuery.isError || inboundTriplesQuery.isError,\n propertiesError: propertiesQuery.isError,\n labelsError:\n outboundLabelsQuery.isError ||\n inboundLabelsQuery.isError ||\n propertyLabelsQuery.isError,\n hasError:\n outboundTriplesQuery.isError ||\n inboundTriplesQuery.isError ||\n propertiesQuery.isError ||\n outboundLabelsQuery.isError ||\n inboundLabelsQuery.isError ||\n propertyLabelsQuery.isError,\n\n outboundTriplesError: outboundTriplesQuery.isError,\n inboundTriplesError: inboundTriplesQuery.isError,\n outboundLabelsError: outboundLabelsQuery.isError,\n inboundLabelsError: inboundLabelsQuery.isError,\n\n // Error messages\n outboundTriplesErrorMessage: outboundTriplesQuery.error,\n inboundTriplesErrorMessage: inboundTriplesQuery.error,\n propertiesErrorMessage: propertiesQuery.error,\n outboundLabelsErrorMessage: outboundLabelsQuery.error,\n inboundLabelsErrorMessage: inboundLabelsQuery.error,\n propertyLabelsErrorMessage: propertyLabelsQuery.error,\n\n // Processed data - URIs only (for backward compatibility)\n outboundRelationships,\n inboundRelationships,\n propertyURIs,\n\n // Processed data - with labels\n outboundRelationshipsWithLabels,\n inboundRelationshipsWithLabels,\n propertiesWithLabels,\n\n // Manual refetch functions\n refetchOutbound: () => {\n outboundTriplesQuery.refetch();\n outboundLabelsQuery.refetch();\n },\n refetchInbound: () => {\n inboundTriplesQuery.refetch();\n inboundLabelsQuery.refetch();\n },\n refetchProperties: () => {\n propertiesQuery.refetch();\n propertyLabelsQuery.refetch();\n },\n refetch: () => {\n outboundTriplesQuery.refetch();\n inboundTriplesQuery.refetch();\n propertiesQuery.refetch();\n outboundLabelsQuery.refetch();\n inboundLabelsQuery.refetch();\n propertyLabelsQuery.refetch();\n },\n };\n};\n"],"names":["createContext","_jsx","useContext","create","useEffect","useQueryClient","useQuery","useMutation","useSocket","useConnectionState","RDFS_LABEL","uuidv4","useState","useMemo"],"mappings":";;;;;;;;;;AAGA;AACO,MAAM,mBAAmB,GAAGA,mBAAa,CAC9C,IAAI,CACL;AAUD;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,EACR,OAAO,GACR,KAAI;AACH,IAAA,QACEC,cAAA,CAAC,mBAAmB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,OAAO,EAAA,QAAA,EACzC,QAAQ,EAAA,CACoB;AAEnC;;ACxCA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACI,MAAM,eAAe,GAAG,MAA0B;AACvD,IAAA,MAAM,OAAO,GAAGC,gBAAU,CAAC,mBAAmB,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D;IACH;AAEA,IAAA,OAAO,OAAO;AAChB;;ACjBA;AACA;AACO,MAAM,qBAAqB,GAAGC,cAAM,EAAiB,CAAC,CAAC,GAAG,MAAM;;AAErE,IAAA,QAAQ,EAAE,IAAI,GAAG,CAAS,EAAE,CAAC;AAC7B,IAAA,KAAK,EAAE,EAAE;;IAGT,WAAW,EAAE,CAAC,GAAG,KACf,GAAG,CAAC,CAAC,KAAK,KAAI;;QAEZ,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACjC,QAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACV,OAAO;AACL,YAAA,GAAG,KAAK;AACR,YAAA,QAAQ,EAAE,CAAC;SACZ;AACH,IAAA,CAAC,CAAC;;IAGJ,cAAc,EAAE,CAAC,GAAG,KAClB,GAAG,CAAC,CAAC,KAAK,KAAI;;QAEZ,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACjC,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACb,OAAO;AACL,YAAA,GAAG,KAAK;AACR,YAAA,QAAQ,EAAE,CAAC;SACZ;AACH,IAAA,CAAC,CAAC;;IAGJ,QAAQ,EAAE,CAAC,KAAK,KACd,GAAG,CAAC,CAAC,KAAK,KAAI;QACZ,OAAO;AACL,YAAA,GAAG,KAAK;AACR,YAAA,KAAK,EAAE,KAAK;SACb;AACH,IAAA,CAAC,CAAC;AACL,CAAA,CAAC;;ACzDF;;;;;;;;;;;;;;;AAeG;MACU,WAAW,GAAG,CAAC,QAAiB,EAAE,WAAmB,KAAI;;AAEpE,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;AACvE,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAChC;IAEDC,eAAS,CAAC,MAAK;;QAEb,IAAI,QAAQ,EAAE;;YAEZ,WAAW,CAAC,WAAW,CAAC;;;;;;AAOxB,YAAA,OAAO,MAAM,cAAc,CAAC,WAAW,CAAC;QAC1C;;IAEF,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAC1D;;ACrBA;AACO,MAAM,eAAe,GAAGD,cAAM,EAAgB,CAAC,CAAC,GAAG,MAAM;AAC9D,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,eAAe,EAAE,EAAE;IAEnB,SAAS,EAAE,CAAC,CAAC,KACX,GAAG,CAAC,OAAO;AACT,QAAA,MAAM,EAAE,CAAC;AACV,KAAA,CAAC,CAAC;IAEL,OAAO,EAAE,CAAC,CAAC,KACT,GAAG,CAAC,OAAO;AACT,QAAA,IAAI,EAAE,CAAC;AACR,KAAA,CAAC,CAAC;AACN,CAAA,CAAC;;ACdK,MAAM,eAAe,GAAGA,cAAM,EAAqB,CAAC,CAAC,GAAG,MAAM;AACnE,IAAA,QAAQ,EAAE;AACR,QAAA;AACE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,6FAA6F;AACpG,SAAA;AACF,KAAA;AAED,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,QAAQ,EAAE,WAAW;IAErB,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;AAEL,IAAA,UAAU,EAAE,CACV,IAAY,EACZ,IAAY,EACZ,IAAuD,KAEvD,GAAG,CAAC,CAAC,KAAK,MAAM;AACd,QAAA,QAAQ,EAAE;YACR,GAAG,KAAK,CAAC,QAAQ;AACjB,YAAA;AACE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI,IAAI,QAAQ;AACvB,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;IAEL,iBAAiB,EAAE,CAAC,IAAY,KAC9B,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAC7C,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AACpC,QAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AAC9B,YAAA,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,EAAE,IAAI;SACX;QACD,OAAO,EAAE,QAAQ,EAAE;AACrB,IAAA,CAAC,CAAC;IAEJ,QAAQ,EAAE,CAAC,CAAC,KACV,GAAG,CAAC,OAAO;AACT,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC,CAAC;IAEL,WAAW,EAAE,CAAC,IAAc,KAC1B,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC,CAAC;AACN,CAAA,CAAC;;ACzEF;AA4BA;;;AAGG;AACI,MAAM,sBAAsB,GAAGA,cAAM,EAAkB,CAAC,CAAC,GAAG,MAAM;;IAEvE,QAAQ,EAAE,SAAS;IAEnB,IAAI,EAAE,MAAM;IAEZ,QAAQ,EAAE,EAAE;;IAGZ,WAAW,EAAE,CAAC,CAAS,KACrB,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;;IAGL,aAAa,EAAE,MACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,SAAS;AACpB,KAAA,CAAC,CAAC;;IAGL,OAAO,EAAE,CAAC,CAAC,KACT,GAAG,CAAC,OAAO;AACT,QAAA,IAAI,EAAE,CAAC;AACR,KAAA,CAAC,CAAC;;IAGL,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;AACN,CAAA,CAAC;;AC/DF;AA4CA;;;AAGG;AACI,MAAM,iBAAiB,GAAGA,cAAM,EAAa,CAAC,CAAC,GAAG,MAAM;;IAE7D,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,YAAY;IACvB,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;;IAGR,QAAQ,EAAE,CAAC,CAAC,KACV,GAAG,CAAC,OAAO;AACT,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC,CAAC;IAEL,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;IAEL,MAAM,EAAE,CAAC,CAAC,KACR,GAAG,CAAC,OAAO;AACT,QAAA,GAAG,EAAE,CAAC;AACP,KAAA,CAAC,CAAC;IAEL,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;;IAGL,YAAY,EAAE,CAAC,CAAC,KACd,GAAG,CAAC,OAAO;AACT,QAAA,SAAS,EAAE,CAAC;AACb,KAAA,CAAC,CAAC;;IAGL,QAAQ,EAAE,CAAC,CAAC,KACV,GAAG,CAAC,OAAO;AACT,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC,CAAC;IAEL,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,OAAO;AACT,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA,CAAC,CAAC;;AAGL,IAAA,WAAW,EAAE,CAAC,CAAC,KACb,GAAG,CAAC,CAAC,KAAK,MAAM;QACd,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjC,KAAA,CAAC,CAAC;IAEL,OAAO,EAAE,CAAC,CAAC,KACT,GAAG,CAAC,OAAO;AACT,QAAA,IAAI,EAAE,CAAC;AACR,KAAA,CAAC,CAAC;;AAGL,IAAA,UAAU,EAAE,CAAC,CAAC,KACZ,GAAG,CAAC,CAAC,KAAK,MAAM;QACd,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,KAAA,CAAC,CAAC;;IAGL,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC,CAAC,KAChB,GAAG,CAAC,OAAO;AACT,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,CAAC,CAAC;;IAEL,cAAc,EAAE,MACd,GAAG,CAAC,CAAC,KAAK,MAAM;AACd,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC;AACnC,KAAA,CAAC,CAAC;AACN,CAAA,CAAC;;AC3GF;AACO,MAAM,mBAAmB,GAAGA,cAAM,EAAe,CAAC,CAAC,GAAG,MAAM;;AAEjE,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,EAAE;;;IAIT,OAAO,EAAE,CAAC,CAAC,KACT,GAAG,CAAC,OAAO;AACT,QAAA,IAAI,EAAE,CAAC;AACR,KAAA,CAAC,CAAC;;IAGL,QAAQ,EAAE,CAAC,CAAC,KACV,GAAG,CAAC,OAAO;AACT,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC,CAAC;AACN,CAAA,CAAC;;ACVK,MAAM,gBAAgB,GAAa;IACxC,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,SAAS;AACrB,IAAA,cAAc,EAAE;AACd,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;QAC1B,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,KAAK;AACjB,KAAA;;AAGI,MAAM,oBAAoB,GAAG;;ACpDpC;AAcA;;;AAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,QAA2B,KAAc;IAClE,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI;AAC5C,QAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAAC,UAAU;AAC9D,QAAA,cAAc,EAAE;YACd,GAAG,gBAAgB,CAAC,cAAc;YAClC,GAAG,QAAQ,CAAC,cAAc;AAC3B,SAAA;AACD,QAAA,QAAQ,EAAE;YACR,GAAG,gBAAgB,CAAC,QAAQ;YAC5B,GAAG,QAAQ,CAAC,QAAQ;AACrB,SAAA;AACD,QAAA,eAAe,EAAE;YACf,GAAG,gBAAgB,CAAC,eAAe;YACnC,GAAG,QAAQ,CAAC,eAAe;AAC5B,SAAA;KACF;AACH,CAAC;AAED;;AAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,QAAkB,KAAI;AAChD,IAAA,IAAI;AACF,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtE;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC;IACvD;AACF,CAAC;AAED;;AAEG;AACH,MAAM,oBAAoB,GAAG,MAAe;AAC1C,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACzD,IAAI,MAAM,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,YAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC;QAClC;IACF;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC;IAC1D;AACA,IAAA,OAAO,gBAAgB;AACzB,CAAC;AAED;;;;AAIG;AACI,MAAM,WAAW,GAAG,MAAK;;AAE9B,IAAA,MAAM,WAAW,GAAGE,yBAAc,EAAE;;AAEpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;IAGhC,MAAM,aAAa,GAAGC,mBAAQ,CAAC;QAC7B,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,OAAO,EAAE,YAAW;;AAElB,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,oBAAoB,EAAE;QAC/B,CAAC;;AAED,QAAA,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;AACxB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;;IAGF,MAAM,sBAAsB,GAAGC,sBAAW,CAAC;QACzC,UAAU,EAAE,OAAO,EACjB,IAAI,EACJ,KAAK,EACL,SAAS,GAKV,KAAI;;AAEH,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;;AAGtD,YAAA,MAAM,eAAe,GAAG,oBAAoB,EAAE;AAC9C,YAAA,MAAM,WAAW,GAAG,EAAE,GAAG,eAAe,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE5B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;AAErB,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;AAClB,gBAAA,IAAI,GAAG,IAAI,WAAW,EAAE;AACrB,oBAAA,WAAuC,CAAC,GAAG,CAAC,GAAG,KAAK;gBACvD;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,gBAAA,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI;AAC3B,gBAAA,IAAI,OAAO,IAAI,WAAW,EAAE;oBAC1B,MAAM,cAAc,GAAG,WAGtB;oBACD,cAAc,CAAC,OAAO,CAAC,GAAG;wBACxB,GAAG,cAAc,CAAC,OAAO,CAAC;wBAC1B,CAAC,GAAG,GAAG,KAAK;qBACb;gBACH;YACF;;YAGA,kBAAkB,CAAC,WAAW,CAAC;;AAG/B,YAAA,IAAI,SAAS;AAAE,gBAAA,SAAS,EAAE;QAC5B,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;YACf,MAAM,CAAC,KAAK,CAAC,CAAA,yBAAA,EAA4B,GAAG,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;QAC5D,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,CAAC;AACF,KAAA,CAAC;;IAGF,MAAM,qBAAqB,GAAGA,sBAAW,CAAC;QACxC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAA,GAAiC,EAAE,KAAI;;AAEnE,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;;AAGtD,YAAA,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC;;AAG7C,YAAA,IAAI,SAAS;AAAE,gBAAA,SAAS,EAAE;QAC5B,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;YACf,MAAM,CAAC,KAAK,CAAC,CAAA,0BAAA,EAA6B,GAAG,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;QAC7D,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AACzD,YAAA,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC;QAC9C,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,kBAAkB,CAAC;AACxD,IAAA,WAAW,CAAC,sBAAsB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAChE,IAAA,WAAW,CAAC,qBAAqB,CAAC,SAAS,EAAE,oBAAoB,CAAC;;AAGlE,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,IAAI,gBAAgB;;AAGvD,IAAA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAc,KAAI;QACrD,sBAAsB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChD,IAAA,CAAC;;AAGD,IAAA,MAAM,YAAY,GAAG,CAAC,WAAqB,KAAI;;QAE7C,kBAAkB,CAAC,WAAW,CAAC;;QAE/B,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AAC3D,IAAA,CAAC;;IAGD,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,IAAA,CAAC;;IAGD,MAAM,cAAc,GAAG,MAAa;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,IAAA,CAAC;;AAGD,IAAA,MAAM,cAAc,GAAG,CAAC,UAAkB,KAAI;AAC5C,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACvC,YAAA,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YACrD,YAAY,CAAC,iBAAiB,CAAC;QACjC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC;AAC9D,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;;IAGD,OAAO;;QAEL,QAAQ;AACR,QAAA,QAAQ,EAAE,CAAC,aAAa,CAAC,SAAS;QAClC,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,KAAK,EAAE,aAAa,CAAC,KAAK;;QAG1B,aAAa;QACb,YAAY;QACZ,aAAa;QACb,cAAc;QACd,cAAc;;QAGd,QAAQ,EAAE,sBAAsB,CAAC,SAAS;QAC1C,WAAW,EAAE,qBAAqB,CAAC,SAAS;;QAG5C,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B;AACH;;AC/NA;;;;AAIG;AACI,MAAM,QAAQ,GAAG,MAAK;;AAE3B,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,UAAU,GAAGC,mBAAQ,CAAC;QAC1B,QAAQ,EAAE,CAAC,OAAO,CAAC;AACnB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,KAAK;AACL,iBAAA,QAAQ;AACR,iBAAA,IAAI,CAAC,CAAC,KAAK,KACV,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KACf;AACG,iBAAA,KAAK;iBACL,OAAO,CAAC,MAAM;AACd,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;gBACb,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE;AAChC,YAAA,CAAC,CAAC,CACL,CACF,CACF;QACL,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,mBAAmB,GAAGA,mBAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,iBAAiB,CAAC;AAC7B,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,KAAK;AACL,iBAAA,iBAAiB;AACjB,iBAAA,IAAI,CAAC,CAAC,GAAG,KACR,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KACT;AACG,iBAAA,KAAK;iBACL,gBAAgB,CAAC,EAAE;AACnB,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAC5B,CACF,CACF;QACL,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,iBAAiB,GAAGC,sBAAW,CAAC;AACpC,QAAA,UAAU,EAAE,CAAC,EACX,EAAE,EACF,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,GAOV,KAAI;AACH,YAAA,OAAO;AACJ,iBAAA,KAAK;iBACL,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU;iBACpD,IAAI,CAAC,MAAK;;AAET,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;AAE1B,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACtD,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,gBAAgB,GAAGA,sBAAW,CAAC;QACnC,UAAU,EAAE,CAAC,EACX,GAAG,EACH,SAAS,GAIV,KAAI;;AAEH,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACnE,MAAK;;AAEH,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CACF;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;AAE1B,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;;AAEtD,YAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC;AAClD,IAAA,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,yBAAyB,CAAC;AACrE,IAAA,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,eAAe,CAAC;AACzD,IAAA,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC;;IAGzD,OAAO;;QAEL,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;;QAGvB,cAAc,EAAE,mBAAmB,CAAC,IAAI;QACxC,uBAAuB,EAAE,mBAAmB,CAAC,SAAS;QACtD,qBAAqB,EAAE,mBAAmB,CAAC,OAAO;QAClD,mBAAmB,EAAE,mBAAmB,CAAC,KAAK;;QAG9C,SAAS,EAAE,iBAAiB,CAAC,MAAM;QACnC,UAAU,EAAE,iBAAiB,CAAC,SAAS;QACvC,UAAU,EAAE,iBAAiB,CAAC,KAAK;;QAGnC,SAAS,EAAE,gBAAgB,CAAC,MAAM;QAClC,UAAU,EAAE,gBAAgB,CAAC,SAAS;QACtC,SAAS,EAAE,gBAAgB,CAAC,KAAK;;QAGjC,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B;AACH;;ACpLA;;AAEG;AACI,MAAM,YAAY,GAAG,CAAC,KAAK,KAAI;;AAEpC,IAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;IAGnC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAC1C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAC1B,CAAC,IAAI,CAAC,EAAE,CAAC;AACV,IAAA,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B;AAEA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,YAAY,GAAG,CAAC,IAAI,KAAI;AACnC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAE/B,QAAA,MAAM,CAAC,SAAS,GAAG,MAAK;;;AAGtB,YAAA,MAAM,IAAI,GAAI,MAAM,CAAC;AAClB,iBAAA,OAAO,CAAC,OAAO,EAAE,EAAE;AACnB,iBAAA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAEtB,OAAO,CAAC,IAAI,CAAC;AACf,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5B,IAAA,CAAC,CAAC;AACJ;;AC5CO,MAAM,QAAQ,GAAG,iDAAiD;AAClE,MAAMG,YAAU,GAAG,4CAA4C;AAC/D,MAAM,gBAAgB,GAAG,oCAAoC;AAC7D,MAAM,UAAU,GAAG,wBAAwB;AAC3C,MAAM,eAAe,GAAG,6BAA6B;AASrD,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,OAAO,4BAA4B,GAAGC,OAAM,EAAE;AAChD;MAEa,eAAe,GAAG,CAAC,MAAc,EAAE,MAAM,KAAI;AACxD,IAAA,IAAI,QAAQ,GAAa;AACvB,QAAA;YACE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;YACzB,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE;YAC3B,CAAC,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE;AACpC,SAAA;KACF;AAED,IAAA,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE;AACpB,QAAA,QAAQ,GAAG;AACT,YAAA,GAAG,QAAQ;AACX,YAAA;gBACE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;gBACzB,CAAC,EAAE,EAAE,CAAC,EAAED,YAAU,EAAE,CAAC,EAAE,IAAI,EAAE;gBAC7B,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;AACjC,aAAA;SACF;AAEH,IAAA,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE;AAClB,QAAA,QAAQ,GAAG;AACT,YAAA,GAAG,QAAQ;AACX,YAAA;gBACE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;gBACzB,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE;gBAC7B,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE;AAC9B,aAAA;SACF;AAEH,IAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;AACnC,QAAA,QAAQ,GAAG;AACT,YAAA,GAAG,QAAQ;AACX,YAAA;gBACE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;gBACzB,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE;gBAClC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE;AAC5B,aAAA;SACF;AAEH,IAAA,OAAO,QAAQ;AACjB;;AC7DA;AAWA;;;;AAIG;AACI,MAAM,UAAU,GAAG,MAkBtB;;AAEF,IAAA,MAAM,MAAM,GAAGF,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,cAAc,GAAGC,mBAAQ,CAAC;QAC9B,QAAQ,EAAE,CAAC,WAAW,CAAC;AACvB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE;QAC1C,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,uBAAuB,GAAGC,sBAAW,CAAC;QAC1C,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAI;;AAEjC,YAAA,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CACvD,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;;AAE1D,YAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,uBAAuB,GAAGA,sBAAW,CAAC;AAC1C,QAAA,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAI;;YAEzD,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;;AAEb,gBAAA,MAAM,OAAO,GAAGI,OAAM,EAAE;AACxB,gBAAA,OAAO;AACJ,qBAAA,SAAS;qBACT,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;AACvD,YAAA,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACzC,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,mBAAmB,GAAGJ,sBAAW,CAAC;AACtC,QAAA,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAI;;YAErD,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;;AAEjB,gBAAA,MAAM,MAAM,GAAG,WAAW,EAAE;gBAE5B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;gBAE5C,OAAO,YAAY,CAAC,IAAI;AACrB,qBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;AACZ,oBAAA,OAAO;AACJ,yBAAA,SAAS;yBACT,YAAY,CACX,GAAG,EACH,QAAQ,EACR,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,MAAM,EACN,IAAI,CACL;AACL,gBAAA,CAAC;qBACA,IAAI,CAAC,MAAK;;AAET,oBAAA,IAAI,SAAS;AAAE,wBAAA,SAAS,EAAE;AAC5B,gBAAA,CAAC,CAAC;YACN,CAAC,CAAC,CACH;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACrC,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,mBAAmB,GAAGA,sBAAW,CAAC;AACtC,QAAA,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAI;;YAErD,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;;AAEjB,gBAAA,MAAM,MAAM,GAAG,WAAW,EAAE;AAE5B,gBAAA,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC;gBAE9B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;AAE5C,gBAAA,OAAO;AACJ,qBAAA,SAAS;qBACT,YAAY,CACX,GAAG,EACH,QAAQ,EACR,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,MAAM,EACN,IAAI,CACL;AACL,YAAA,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;;AAE1D,YAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACrC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,mBAAmB,CAAC;AAC1D,IAAA,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,oBAAoB,CAAC;AACpE,IAAA,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,sBAAsB,CAAC;AACtE,IAAA,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC7D,IAAA,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,CAAC;;IAG5D,OAAO;;QAEL,SAAS,EAAE,cAAc,CAAC,IAAI;QAC9B,SAAS,EAAE,cAAc,CAAC,SAAS;QACnC,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,KAAK,EAAE,cAAc,CAAC,KAAK;;QAG3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,UAAU,EAAE,uBAAuB,CAAC,SAAS;QAC7C,WAAW,EAAE,uBAAuB,CAAC,KAAK;;QAG1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,YAAY,EAAE,uBAAuB,CAAC,SAAS;QAC/C,WAAW,EAAE,uBAAuB,CAAC,KAAK;;QAG1C,WAAW,EAAE,mBAAmB,CAAC,MAAM;QACvC,gBAAgB,EAAE,mBAAmB,CAAC,SAAS;QAC/C,gBAAgB,EAAE,mBAAmB,CAAC,KAAK;;QAG3C,WAAW,EAAE,mBAAmB,CAAC,MAAM;QACvC,gBAAgB,EAAE,mBAAmB,CAAC,SAAS;QAC/C,gBAAgB,EAAE,mBAAmB,CAAC,KAAK;;QAG3C,OAAO,EAAE,cAAc,CAAC,OAAO;KAChC;AACH;;AC5PA;AAQA;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAO5D,KAMG;;AAEF,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;;AAG1B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AAElC,IAAA,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,SAAS;AAE3B;;;AAGG;IACH,MAAM,KAAK,GAAGF,mBAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/C,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,IAAI;AACT,iBAAA,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU;AAC9D,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC;;IAG/C,OAAO;;QAEL,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;AC3EO,MAAM,UAAU,GAAG;AAEnB,MAAM,eAAe,GAC1B,gDAAgD;AAE3C,MAAM,oBAAoB,GAAG,8BAA8B;AAE3D,MAAM,qBAAqB,GAAG,gCAAgC;AAErE;AACA,MAAM,UAAU,GAA4B;IAC1C,CAAC,UAAU,GAAG,OAAO;IACrB,CAAC,eAAe,GAAG,YAAY;IAC/B,CAAC,oBAAoB,GAAG,YAAY;IACpC,CAAC,qBAAqB,GAAG,aAAa;AACtC,IAAA,iDAAiD,EAAE,UAAU;AAC7D,IAAA,gCAAgC,EAAE,aAAa;AAC/C,IAAA,wBAAwB,EAAE,KAAK;AAC/B,IAAA,qCAAqC,EAAE,mBAAmB;AAC1D,IAAA,gCAAgC,EAAE,cAAc;AAChD,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,8BAA8B,EAAE,YAAY;AAC5C,IAAA,4BAA4B,EAAE,UAAU;AACxC,IAAA,yBAAyB,EAAE,MAAM;AACjC,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,kCAAkC,EAAE,gBAAgB;AACpD,IAAA,6BAA6B,EAAE,UAAU;CAC1C;AAED;AACO,MAAM,KAAK,GAAG,EAAE;AAEvB;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;AACF,IAAA,MAAM,GAAG,GAAG,WAAW,GAAG,GAAG;IAC7B,GAAG,CAAC,GAAG,CAAC;AAER,IAAA,OAAO;SACJ,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACnB,SAAS,EACT,SAAS,EACT,KAAK,GAAG,KAAK,GAAG,KAAK,EACrB,UAAU;AAEX,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;AACF,IAAA,MAAM,GAAG,GAAG,WAAW,GAAG,GAAG;IAC7B,GAAG,CAAC,GAAG,CAAC;AAER,IAAA,OAAO;SACJ,YAAY,CACX,SAAS,EACT,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACnB,SAAS,EACT,KAAK,GAAG,KAAK,GAAG,KAAK,EACrB,UAAU;AAEX,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;AACF,IAAA,MAAM,GAAG,GAAG,WAAW,GAAG,GAAG;IAC7B,GAAG,CAAC,GAAG,CAAC;AAER,IAAA,OAAO;SACJ,YAAY,CACX,SAAS,EACT,SAAS,EACT,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACnB,KAAK,GAAG,KAAK,GAAG,KAAK,EACrB,UAAU;AAEX,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACO,MAAM,KAAK,GAAG,CACnB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;AACF,IAAA,MAAM,GAAG,GAAG,SAAS,GAAG,GAAG;IAC3B,GAAG,CAAC,GAAG,CAAC;IAER,OAAO,OAAO,CAAC,GAAG,CAAC;AACjB,QAAA,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;AACnD,QAAA,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;AACnD,QAAA,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;KACpD;AACE,SAAA,IAAI,CAAC,CAAC,IAAI,KAAI;QACb,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACA;AACO,MAAM,UAAU,GAAG,CACxB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACA;AACnB,IAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,GAAG;;AAG1B,IAAA,IAAI,GAAG,IAAI,UAAU,EAAE;AACrB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C;IAEA,GAAG,CAAC,GAAG,CAAC;;AAGR,IAAA,OAAO;SACJ,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACnB,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAC1B,SAAS,EACT,CAAC,EACD,UAAU;AAEX,SAAA,IAAI,CAAC,CAAC,OAAiB,KAAI;;;AAG1B,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AACxC,YAAA,OAAO,GAAG;AACjB,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,MAAM,CAAC,GAAG,CAAC;AACX,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN,CAAC;AAED;AACA;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,OAAiB,EACjB,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACE;IACrB,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAChB,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAC5D,CAAC,KAAa,KAAI;YAChB,OAAO;AACL,gBAAA,GAAG,CAAC;AACJ,gBAAA,CAAC,EAAE;oBACD,GAAG,CAAC,CAAC,CAAC;AACN,oBAAA,KAAK,EAAE,KAAK;AACb,iBAAA;aACF;AACH,QAAA,CAAC,CACF;IACH,CAAC,CAAC,CACH;AACH,CAAC;AAED;AACA;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,OAAiB,EACjB,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACE;IACrB,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAChB,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAC5D,CAAC,KAAa,KAAI;YAChB,OAAO;AACL,gBAAA,GAAG,CAAC;AACJ,gBAAA,CAAC,EAAE;oBACD,GAAG,CAAC,CAAC,CAAC;AACN,oBAAA,KAAK,EAAE,KAAK;AACb,iBAAA;aACF;AACH,QAAA,CAAC,CACF;IACH,CAAC,CAAC,CACH;AACH,CAAC;AAED;AACA;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,OAAiB,EACjB,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACE;IACrB,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;;;AAGhB,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACP,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAC5D,CAAC,KAAa,KAAI;gBAChB,OAAO;AACL,oBAAA,GAAG,CAAC;AACJ,oBAAA,CAAC,EAAE;wBACD,GAAG,CAAC,CAAC,CAAC;AACN,wBAAA,KAAK,EAAE,KAAK;AACb,qBAAA;iBACF;AACH,YAAA,CAAC,CACF;;AAED,YAAA,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,KAAI;AACrC,gBAAA,OAAO,CAAC;AACN,oBAAA,GAAG,CAAC;AACJ,oBAAA,CAAC,EAAE;wBACD,GAAG,CAAC,CAAC,CAAC;AACN,wBAAA,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,qBAAA;AACF,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;IACN,CAAC,CAAC,CACH;AACH,CAAC;AAMD;AACO,MAAM,eAAe,GAAG,CAAC,OAAiB,KAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACnB,IAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU;AAAE,QAAA,OAAO,KAAK;AAC9C,IAAA,OAAO,IAAI;AACb,CAAC,CAAC;AAEJ;AACA;AACO,MAAM,UAAU,GAAG,CACxB,MAAe,EACf,GAAW,EACX,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;;;AAIF,IAAA,OAAO,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;AACrD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;AAC9B,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAC1D,CAAC,KAAa,KAAI;YAChB,OAAO;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,KAAK,EAAE,KAAK;aACb;AACH,QAAA,CAAC,CACF;AACH,IAAA,CAAC,CAAC;AACN;;ACzUA;AACA;AA8BO,MAAM,cAAc,GAAG,MAAe;IAC3C,OAAO;AACL,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;KACV;AACH,CAAC;AAEM,MAAM,qBAAqB,GAAG,CAAC,EAAY,EAAE,OAAiB,KAAI;IACvE,MAAM,OAAO,GAAG,CAAC;IAEjB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAE1D,IAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;;;AAGvB,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACV;QACF;;AAEA,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;QAGtB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS;AACxC,gBAAA,KAAK,EAAE,OAAO;aACf;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrB,YAAA,EAAE,GAAG;AACH,gBAAA,GAAG,EAAE;gBACL,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;aACxB;QACH;QAEA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS;AACxC,gBAAA,KAAK,EAAE,OAAO;aACf;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrB,YAAA,EAAE,GAAG;AACH,gBAAA,GAAG,EAAE;gBACL,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;aACxB;QACH;QAEA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxB,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS;AACxC,gBAAA,KAAK,EAAE,CAAC;aACT;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACnB,YAAA,EAAE,GAAG;AACH,gBAAA,GAAG,EAAE;gBACL,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;aACxB;QACH;IACF;AAEA,IAAA,OAAO,EAAE;AACX,CAAC;AAEM,MAAM,cAAc,GAAG,CAC5B,MAAe,EACf,GAAW,EACX,EAAY,EACZ,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACjB;AACF,IAAA,OAAO,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;AACzD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;AAC9B,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAEM,MAAM,4BAA4B,GAAG,CAC1C,MAAe,EACf,cAAsB,EACtB,eAAuB,EACvB,SAAkC,EAClC,EAAY,EACZ,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACjB;AACF,IAAA,MAAM,YAAY,GAAG,CAAA,UAAA,EAAa,SAAS,CAAA,eAAA,EAAkB,eAAe,EAAE;IAE9E,GAAG,CAAC,YAAY,CAAC;;AAGjB,IAAA,MAAM,YAAY,GAChB,SAAS,KAAK;AACZ,UAAE,MAAM,CAAC,YAAY,CACjB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE;QAC9B,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE;AAC/B,QAAA,SAAS;AACT,QAAA,EAAE;AACF,QAAA,UAAU;AAEd,UAAE,MAAM,CAAC,YAAY,CACjB,SAAS;QACT,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE;QAC/B,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE;AAC9B,QAAA,EAAE;AACF,QAAA,UAAU,CACX;AAEP,IAAA,OAAO;AACJ,SAAA,IAAI,CAAC,CAAC,OAAO,KAAI;QAChB,MAAM,CAAC,YAAY,CAAC;AACpB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;AACtD,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;AAC9B,SAAA,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACrJD;;;;;;;AAOG;AACI,MAAM,gBAAgB,GAAG,CAC9B,SAA6B,EAC7B,MAAc,EACd,UAAkB,KAChB;;AAEF,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAE1B,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;AAEvE,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAChC;;AAGD,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,WAAW,GAAGH,yBAAc,EAAE;AAEpC;;;AAGG;IACH,MAAM,KAAK,GAAGC,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/D,OAAO,EAAE,YAAW;YAClB,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;YAC3C;AAEA,YAAA,MAAM,EAAE,GAAG,cAAc,EAAE;;YAG3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,YAAA,OAAO,cAAc,CACnB,GAAG,EACH,SAAS,EACT,EAAE,EACF,WAAW,EACX,cAAc,EACd,UAAU,CACX;QACH,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM;AACjC,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,cAAc,GAAGC,sBAAW,CAAC;QACjC,UAAU,EAAE,OAAO,EACjB,MAAM,EACN,YAAY,GAIb,KAAI;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,YAAA,OAAO,cAAc,CACnB,GAAG,EACH,MAAM,EACN,YAAY,EACZ,WAAW,EACX,cAAc,CACf;QACH,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;;AAEtB,YAAA,WAAW,CAAC,YAAY,CACtB,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EACrD,QAAQ,CACT;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,8BAA8B,GAAGA,sBAAW,CAAC;AACjD,QAAA,UAAU,EAAE,OAAO,EACjB,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,GAMb,KAAI;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,YAAA,OAAO,4BAA4B,CACjC,GAAG,EACH,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,CACX;QACH,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;;AAEtB,YAAA,WAAW,CAAC,YAAY,CACtB,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EACrD,QAAQ,CACT;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CACT,KAAK,CAAC,SAAS,EACf,SAAS,GAAG,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAE,GAAG,eAAe,CAC7D;AACD,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,iBAAiB,CAAC;AACxD,IAAA,WAAW,CACT,8BAA8B,CAAC,SAAS,EACxC,wBAAwB,CACzB;;IAGD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACtC;;IAGA,OAAO;;QAEL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,cAAc,EAAE,cAAc,CAAC,MAAM;QACrC,UAAU,EAAE,cAAc,CAAC,SAAS;;QAGpC,sBAAsB,EAAE,8BAA8B,CAAC,MAAM;QAC7D,YAAY,EAAE,8BAA8B,CAAC,SAAS;;QAGtD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;ACzKA;;;;;AAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAKjE,KAMG;;AAEF,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;;AAG1B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AAElC,IAAA,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,SAAS;AAE3B;;;AAGG;IACH,MAAM,KAAK,GAAGF,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC/C,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,IAAI;iBACT,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU;AACnE,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAY,KAAI;AACtB,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAChE,gBAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACrB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC;;IAGxD,OAAO;;QAEL,eAAe,EAAE,KAAK,CAAC,IAAI;QAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;AC1DA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,CAChC,MAAe,EACf,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;;;;IAIF,OAAO,CAAC,IAAgB,KAAoB;QAC1C,MAAM,GAAG,GAAG,wBAAwB;QACpC,GAAG,CAAC,GAAG,CAAC;AAER,QAAA,OAAO;AACJ,aAAA,oBAAoB,CAAC,IAAI,EAAU,KAAK,CAAK,EAAE,UAAU;AACzD,aAAA,IAAI,CAAC,CAAC,IAAa,KAAW;YAC7B,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACtB,gBAAA,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACxC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;YACb,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,MAAM,GAAG;AACX,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AACH,CAAC;AAED;AACO,MAAM,YAAY,GACvB,CACE,MAAe,EACf,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KAErB,CAAC,QAAe,KAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;AACxB,QAAA,MAAM,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,GAAG;QAC9B,GAAG,CAAC,GAAG,CAAC;AACR,QAAA,OAAO;AACJ,aAAA,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACvB,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAC1B,SAAS,EACT,CAAC,EACD,UAAU;AAEX,aAAA,IAAI,CAAC,CAAC,CAAC,KAAS;AACf,YAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO;oBACL,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,oBAAA,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,GAAG,CAAC,MAAM;iBACnB;YACH;iBAAO;gBACL,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO;oBACL,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACf,MAAM,EAAE,GAAG,CAAC,MAAM;iBACnB;YACH;AACF,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;YACb,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,MAAM,GAAG;AACX,QAAA,CAAC,CAAC;IACN,CAAC,CAAC,CACH;AACH,CAAC;AAEH;AACO,MAAM,iBAAiB,GAC5B,CACE,MAAe,EACf,GAAwB,EACxB,MAA2B,EAC3B,UAAmB;AAErB;AACA,CAAC,QAAe,KAAI;IAClB,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACnB,QAAA,MAAM,GAAG,GAAG,cAAc,GAAG,GAAG,CAAC,GAAG;QACpC,GAAG,CAAC,GAAG,CAAC;AACR,QAAA,OAAO;AACJ,aAAA,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EACvB,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,EAC/B,SAAS,EACT,CAAC,EACD,UAAU;AAEX,aAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,YAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE;YACpC;iBAAO;gBACL,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO;AACL,oBAAA,GAAG,GAAG;oBACN,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACtB;YACH;AACF,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;YACb,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,MAAM,GAAG;AACX,QAAA,CAAC,CAAC;IACN,CAAC,CAAC,CACH;AACH,CAAC;AAEH;AACO,MAAM,gBAAgB,GAC3B,CAAC,MAAe,EAAE,GAAwB,EAAE,MAA2B,KACvE,CAAC,QAAe,KAAI;IAClB,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;QACnB,IAAI,IAAI,GAAW,EAAE;QACrB,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;AAAE,YAAA,IAAI,GAAG,GAAG,CAAC,WAAW;;AAC/D,YAAA,IAAI,GAAG,GAAG,CAAC,KAAM;AAEtB,QAAA,MAAM,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,GAAG,CAAC;AAER,QAAA,OAAO;aACJ,UAAU,CAAC,IAAI;AACf,aAAA,IAAI,CAAC,CAAC,CAAC,KAAI;YACV,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;iBACjB;YACH;iBAAO;gBACL,MAAM,CAAC,GAAG,CAAC;gBACX,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,UAAU,EAAE,EAAE;iBACf;YACH;AACF,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;YACb,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,MAAM,GAAG;AACX,QAAA,CAAC,CAAC;IACN,CAAC,CAAC,CACH;AACH,CAAC;AAEH;AAEO,MAAM,uBAAuB,GAClC,MACA,CAAC,QAAe,KACd,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACnB,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAO,EAAE,GAAG,CAAC,UAAW,CAAC;IACpD,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE;KAC3B;AACH,CAAC,CAAC;AAEC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAe,KAAI;IACtD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,IAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAW,GAAG,CAAC,CAAC,UAAW,CAAC;AACjD,IAAA,OAAO,GAAG;AACZ,CAAC;;ACtLM,MAAM,YAAY,GAAG,CAC1B,MAAM,EACN,MAAM,EACN,WAAW,EACX,cAAc,EACd,IAAY,EACZ,UAAmB,EACnB,KAAc,KACZ;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAE/B,IAAA,MAAM,SAAS,GAAG,UAAU,GAAG,IAAI;IACnC,WAAW,CAAC,SAAS,CAAC;AAEtB,IAAA,OAAO;SACJ,UAAU,CAAC,IAAI;AACf,SAAA,IAAI,CACH,kBAAkB,CAChB,GAAG,EACH,WAAW,EACX,cAAc,EACd,KAAK,IAAI,EAAE,EACX,UAAU,CACX;SAEF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC;SAC/D,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC;SACpE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC;SACvD,IAAI,CAAC,uBAAuB,EAAE;SAC9B,IAAI,CAAC,cAAc,EAAE;AACrB,SAAA,IAAI,CAAC,CAAC,CAAC,KAAI;QACV,cAAc,CAAC,SAAS,CAAC;QACzB,OAAO;AACL,YAAA,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBACtB,OAAO;oBACL,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,oBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;iBACrC;AACH,YAAA,CAAC,CAAC;SACH;AACH,IAAA,CAAC;AACA,SAAA,KAAK,CAAC,CAAC,GAAG,KAAI;QACb,cAAc,CAAC,SAAS,CAAC;AACzB,QAAA,MAAM,GAAG;AACX,IAAA,CAAC,CAAC;AACN;;AC/CA;;;;AAIG;AAEI,MAAM,eAAe,GAAG,MAAK;;AAElC,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAE1B,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;AAEvE,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAChC;;AAGD,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;IAGhC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGI,cAAQ,CAAC,IAAI,CAAC;AAEtD;;;AAGG;IACH,MAAM,WAAW,GAAGN,mBAAQ,CAAC;AAC3B,QAAA,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;AAClC,QAAA,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI;QAC7B,OAAO,EAAE,MAAK;YACZ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,YAAY;AACtD,YAAA,OAAO,YAAY,CACjB,MAAM,EACN,IAAI,IAAI,SAAS,EACjB,WAAW,EACX,cAAc,EACd,IAAI,EACJ,UAAU,EACV,KAAK;AAEJ,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACjB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI;QACxD,IAAI,CAAC,IAAI,EAAE;YACT,eAAe,CAAC,IAAI,CAAC;YACrB;QACF;AACA,QAAA,eAAe,CAAC;YACd,IAAI,EAAE,IAAI,IAAI,SAAS;YACvB,IAAI;YACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,UAAU;AACX,SAAA,CAAC;AACJ,IAAA,CAAC;;IAGD,OAAO;;AAEL,QAAA,WAAW,EAAE,WAAW;;QAExB,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,QAAA,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,UAAU;QAC1D,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;;AAExB,QAAA,YAAY,EAAE,YAAY;KAC3B;AACH;;ACjFA;;;;;;;AAOG;AACI,MAAM,eAAe,GAAG,CAC7B,SAA6B,EAC7B,MAAc,EACd,UAAkB,KAOhB;;AAEF,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAE1B,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;AAEvE,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAChC;;AAGD,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAEhC;;;AAGG;IACH,MAAM,KAAK,GAAGF,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC9D,OAAO,EAAE,YAAW;YAClB,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;YAC3C;;YAGA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/B,YAAA,OAAO,UAAU,CACf,GAAG,EACH,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,EACT,UAAU,CACX;QACH,CAAC;;AAED,QAAA,OAAO,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM;AACjC,KAAA,CAAC;;AAGF,IAAA,WAAW,CACT,KAAK,CAAC,SAAS,EACf,SAAS,GAAG,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAE,GAAG,gBAAgB,CACtE;;IAGD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACtC;;IAGA,OAAO;;QAEL,MAAM,EAAE,KAAK,CAAC,IAAI;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;ACrDA;;;AAGG;AACI,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAC1B,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAEvD;;AAEG;IACH,MAAM,gBAAgB,GAAGD,sBAAW,CAAC;AACnC,QAAA,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,GAMV,KAA6B;;YAE5B,MAAM,QAAQ,GAAG;kBACb,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;oBAC5C,IAAI,WAAW,GAAG,EAAE;AAEpB,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAiB,KAAI;wBACnD,WAAW,IAAI,KAAK;wBACpB,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,CAAC;wBACrC,IAAI,QAAQ,EAAE;4BACZ,OAAO,CAAC,WAAW,CAAC;wBACtB;AACF,oBAAA,CAAC;AAED,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,KAAI;AAChC,wBAAA,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC;AAC3B,wBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,CAAC;oBAED;yBACG,IAAI,CAAC,MAAM;yBACX,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;AACpE,gBAAA,CAAC;AACH,kBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC;;AAGxE,YAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;;YAG9D,MAAM,QAAQ,GAAG,MAAM;iBACpB,IAAI,CAAC,MAAM;iBACX,oBAAoB,CACnB,UAAU,EACV,OAAO,EAAE,WAAW,IAAI,EAAE,EAC1B,UAAU,CACX;AAEH,YAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAC/B,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,sBAAsB,GAAGA,sBAAW,CAAC;QACzC,UAAU,EAAE,OAAO,EACjB,YAAY,EACZ,KAAK,EACL,SAAS,GAKV,KAAqB;;AAEpB,YAAA,OAAO;kBACH,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;oBAC5C,IAAI,WAAW,GAAG,EAAE;AAEpB,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAiB,KAAI;wBACnD,WAAW,IAAI,KAAK;wBACpB,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,CAAC;wBACrC,IAAI,QAAQ,EAAE;4BACZ,OAAO,CAAC,WAAW,CAAC;wBACtB;AACF,oBAAA,CAAC;AAED,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,KAAI;AAChC,wBAAA,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC;AAC3B,wBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,CAAC;oBAED;yBACG,IAAI,CAAC,MAAM;yBACX,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AACnE,gBAAA,CAAC;AACH,kBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC;QACnE,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,aAAa,GAAGA,sBAAW,CAAC;QAChC,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,SAAS,GAIV,KAAqB;YACpB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC7C,IAAI,UAAU,GAAG,EAAE;AAEnB,gBAAA,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,QAAiB,KAAI;oBACrD,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,QAAQ,CAAC;AACzC,gBAAA,CAAC;AAED,gBAAA,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,QAAiB,KAAI;oBAC3D,SAAS,EAAE,SAAS,GAAG,WAAW,EAAE,QAAQ,CAAC;AAC/C,gBAAA,CAAC;AAED,gBAAA,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,QAAiB,KAAI;oBACrD,UAAU,IAAI,MAAM;oBACpB,SAAS,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;oBACvC,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,UAAU,CAAC;oBACrB;AACF,gBAAA,CAAC;AAED,gBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,KAAI;AAChC,oBAAA,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC;AAC3B,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,gBAAA,CAAC;gBAED;qBACG,IAAI,CAAC,MAAM;qBACX,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;AACxD,YAAA,CAAC,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,gBAAgB,CAAC,WAAW;QACtC,cAAc,EAAE,sBAAsB,CAAC,WAAW;QAClD,KAAK,EAAE,aAAa,CAAC,WAAW;QAChC,SAAS,EACP,gBAAgB,CAAC,SAAS;AAC1B,YAAA,sBAAsB,CAAC,SAAS;AAChC,YAAA,aAAa,CAAC,SAAS;KAC1B;AACH;;AC7KA;;;;AAIG;AACI,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;AAC/D,IAAA,MAAM,iBAAiB,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,iBAAiB,CAAC;AAC7E,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;AAC3D,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;;AAG3D,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;AACvE,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAChC;;AAGD,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AACvD,IAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;;AAGxE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,SAAS,GAAG,YAAY,EAAE;AAEhC;;AAEG;AACH,IAAA,MAAM,cAAc,GAAG,OAAO,KAAa,KAAI;AAC7C,QAAA,MAAM,WAAW,GAAG,aAAa,GAAG,KAAK;AACzC,QAAA,MAAM,WAAW,GAAG,iBAAiB,GAAG,KAAK;QAE7C,WAAW,CAAC,WAAW,CAAC;QAExB,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,YAAY,GAAG,KAAK;AAExB,QAAA,IAAI;;AAEF,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC;gBACtC,KAAK;AACL,gBAAA,OAAO,EAAE;AACP,oBAAA,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW;AAC1C,oBAAA,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW;AAC1C,oBAAA,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,eAAe;AAClD,oBAAA,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU;AACzC,iBAAA;gBACD,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,gBAAA,SAAS,EAAE;AACT,oBAAA,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;wBAC3B,WAAW,IAAI,KAAK;wBAEpB,IAAI,CAAC,YAAY,EAAE;;AAEjB,4BAAA,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;4BAC7B,YAAY,GAAG,IAAI;wBACrB;6BAAO;;4BAEL,iBAAiB,CAAC,WAAW,CAAC;wBAChC;oBACF,CAAC;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,cAAc,CAAC,WAAW,CAAC;;YAG3B,WAAW,CAAC,WAAW,CAAC;;AAGxB,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,MAAM,KAAI;AACzD,gBAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;gBACzC,WAAW,CAAC,aAAa,CAAC;AAE1B,gBAAA,IAAI;oBACF,MAAM,OAAO,GAAG,MAAM;yBACnB,IAAI,CAAC,MAAM;yBACX,YAAY,CACX,MAAM,EACN,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAC1B,SAAS,EACT,CAAC,EACD,QAAQ,CAAC,UAAU,CACpB;oBACH,cAAc,CAAC,aAAa,CAAC;AAC7B,oBAAA,OAAO,OAAO;gBAChB;gBAAE,OAAO,GAAG,EAAE;oBACZ,cAAc,CAAC,aAAa,CAAC;AAC7B,oBAAA,MAAM,GAAG;gBACX;AACF,YAAA,CAAC,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;;YAGvD,MAAM,UAAU,GAAa;AAC1B,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACxC,iBAAA,GAAG,CAAC,CAAC,IAAc,MAAM;gBACxB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClB,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,aAAA,CAAC,CAAC;YAEL,WAAW,CAAC,UAAU,CAAC;YACvB,cAAc,CAAC,WAAW,CAAC;YAE3B,OAAO,MAAM,CAAC,QAAQ;QACxB;QAAE,OAAO,KAAK,EAAE;YACd,cAAc,CAAC,WAAW,CAAC;YAC3B,cAAc,CAAC,WAAW,CAAC;AAC3B,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;AAED;;AAEG;AACH,IAAA,MAAM,cAAc,GAAG,OAAO,KAAa,KAAI;AAC7C,QAAA,MAAM,QAAQ,GAAG,mBAAmB,GAAG,KAAK;QAC5C,WAAW,CAAC,QAAQ,CAAC;QAErB,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,YAAY,GAAG,KAAK;AAExB,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC;AAC9C,gBAAA,YAAY,EACV,mEAAmE;gBACrE,KAAK;AACL,gBAAA,SAAS,EAAE;AACT,oBAAA,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;wBAC3B,WAAW,IAAI,KAAK;wBAEpB,IAAI,CAAC,YAAY,EAAE;;AAEjB,4BAAA,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;4BAC7B,YAAY,GAAG,IAAI;wBACrB;6BAAO;;4BAEL,iBAAiB,CAAC,WAAW,CAAC;wBAChC;oBACF,CAAC;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,cAAc,CAAC,QAAQ,CAAC;YACxB,WAAW,CAAC,EAAE,CAAC;AAEf,YAAA,OAAO,QAAQ;QACjB;QAAE,OAAO,KAAK,EAAE;YACd,cAAc,CAAC,QAAQ,CAAC;AACxB,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;AAED;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,OAAO,KAAa,KAAI;AAC1C,QAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK;QAClC,WAAW,CAAC,QAAQ,CAAC;QAErB,IAAI,mBAAmB,GAAG,EAAE;QAC5B,IAAI,oBAAoB,GAAG,KAAK;QAChC,IAAI,sBAAsB,GAAG,EAAE;QAC/B,IAAI,uBAAuB,GAAG,KAAK;QACnC,IAAI,iBAAiB,GAAG,EAAE;QAC1B,IAAI,kBAAkB,GAAG,KAAK;AAE9B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;gBACrC,KAAK;AACL,gBAAA,SAAS,EAAE;AACT,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAI;wBAC7B,mBAAmB,IAAI,OAAO;wBAC9B,IAAI,CAAC,oBAAoB,EAAE;AACzB,4BAAA,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,CAAC;4BACjD,oBAAoB,GAAG,IAAI;wBAC7B;6BAAO;4BACL,iBAAiB,CAAC,mBAAmB,CAAC;wBACxC;wBACA,IAAI,QAAQ,EAAE;4BACZ,mBAAmB,GAAG,EAAE;4BACxB,oBAAoB,GAAG,KAAK;wBAC9B;oBACF,CAAC;AACD,oBAAA,SAAS,EAAE,CAAC,WAAW,EAAE,QAAQ,KAAI;wBACnC,sBAAsB,IAAI,WAAW;wBACrC,IAAI,CAAC,uBAAuB,EAAE;AAC5B,4BAAA,UAAU,CAAC,IAAI,EAAE,sBAAsB,EAAE,aAAa,CAAC;4BACvD,uBAAuB,GAAG,IAAI;wBAChC;6BAAO;4BACL,iBAAiB,CAAC,sBAAsB,CAAC;wBAC3C;wBACA,IAAI,QAAQ,EAAE;4BACZ,sBAAsB,GAAG,EAAE;4BAC3B,uBAAuB,GAAG,KAAK;wBACjC;oBACF,CAAC;AACD,oBAAA,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAI;wBAC7B,iBAAiB,IAAI,MAAM;wBAC3B,IAAI,CAAC,kBAAkB,EAAE;AACvB,4BAAA,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC;4BAC7C,kBAAkB,GAAG,IAAI;wBAC3B;6BAAO;4BACL,iBAAiB,CAAC,iBAAiB,CAAC;wBACtC;oBACF,CAAC;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,cAAc,CAAC,QAAQ,CAAC;YACxB,WAAW,CAAC,EAAE,CAAC;AAEf,YAAA,OAAO,QAAQ;QACjB;QAAE,OAAO,KAAK,EAAE;YACd,cAAc,CAAC,QAAQ,CAAC;AACxB,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;AAED;;AAEG;IACH,MAAM,YAAY,GAAGD,sBAAW,CAAC;AAC/B,QAAA,UAAU,EAAE,OAAO,EAAE,KAAK,EAAqB,KAAI;;AAEjD,YAAA,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;AAE1B,YAAA,IAAI;AACF,gBAAA,IAAI,QAAgB;;gBAGpB,QAAQ,QAAQ;AACd,oBAAA,KAAK,WAAW;AACd,wBAAA,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;wBACtC;AACF,oBAAA,KAAK,WAAW;AACd,wBAAA,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;wBACtC;AACF,oBAAA,KAAK,OAAO;AACV,wBAAA,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC;wBACnC;AACF,oBAAA;AACE,wBAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;;;gBAIxC,QAAQ,CAAC,EAAE,CAAC;AACZ,gBAAA,OAAO,QAAQ;YACjB;YAAE,OAAO,KAAK,EAAE;;AAEd,gBAAA,MAAM,YAAY,GAChB,KAAK,YAAY;sBACb,KAAK,CAAC;AACR,sBAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,eAAe;AAC1C,gBAAA,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC;;gBAG9B,QAAQ,CAAC,EAAE,CAAC;AACZ,gBAAA,MAAM,KAAK;YACb;QACF,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAE9D,OAAO;QACL,aAAa,EAAE,YAAY,CAAC,MAAM;QAClC,YAAY,EAAE,YAAY,CAAC,SAAS;QACpC,WAAW,EAAE,YAAY,CAAC,KAAK;KAChC;AACH;AAEA;AACO,MAAM,OAAO,GAAG;;AC3SvB;AACA;AAcA;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAK;;AAErC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAEhC,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAEvD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;IAG/C,MAAM,uBAAuB,GAAGF,sBAAW,CAAC;QAC1C,UAAU,EAAE,OAAO,EACjB,QAAQ,EACR,UAAU,GAIX,KAAI;YACH,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;YAChD;AAEA,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;iBACX,eAAe,CAAC,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;QACjE,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,GAAG,CAAC;AAC3C,YAAA,MAAM,YAAY,GAChB,GAAG,YAAY;kBACX,GAAG,CAAC;AACN,kBAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,eAAe;AACxC,YAAA,MAAM,CAAC,KAAK,CAAC,4BAA4B,YAAY,CAAA,CAAE,CAAC;QAC1D,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,MAAM,CAAC,OAAO,CAAC,wCAAwC,CAAC;YAC1D;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,gBAAA,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC;YAC9C;iBAAO;AACL,gBAAA,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC;YACxD;QACF,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,4BAA4B,CAAC;;IAG5E,OAAO;;QAEL,YAAY,EAAE,uBAAuB,CAAC,MAAM;QAC5C,iBAAiB,EAAE,uBAAuB,CAAC,WAAW;;QAGtD,WAAW,EAAE,uBAAuB,CAAC,SAAS;QAC9C,KAAK,EAAE,uBAAuB,CAAC,KAAK;QACpC,IAAI,EAAE,uBAAuB,CAAC,IAAI;;AAGlC,QAAA,SAAS,EAAE,uBAAuB,CAAC,IAAI,EAAE,IAAI;AAC7C,QAAA,WAAW,EAAE,uBAAuB,CAAC,IAAI,EAAE,MAAM;AACjD,QAAA,SAAS,EACP,uBAAuB,CAAC,IAAI,EAAE,MAAM;AACpC,YAAA,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;;QAGhD,KAAK,EAAE,uBAAuB,CAAC,KAAK;;AAGpC,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;ACnGA;AAcA;;;AAGG;AACI,MAAM,eAAe,GAAG,MAAK;;AAElC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAEhC,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAEvD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;IAG/C,MAAM,oBAAoB,GAAGF,sBAAW,CAAC;AACvC,QAAA,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,UAAU,EACV,SAAS,EACT,aAAa,GAMd,KAAI;YACH,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;YAChD;AAEA,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,KAAK,EACL,UAAU,IAAI,QAAQ,CAAC,UAAU,EACjC,SAAS,EACT,aAAa,CACd;QACL,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAY,KAAI;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,GAAG,CAAC;AACxC,YAAA,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AACrE,YAAA,MAAM,CAAC,KAAK,CAAC,yBAAyB,YAAY,CAAA,CAAE,CAAC;QACvD,CAAC;QACD,SAAS,EAAE,MAAK;AACd,YAAA,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC;QACvD,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,yBAAyB,CAAC;;IAGtE,OAAO;;QAEL,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,iBAAiB,EAAE,oBAAoB,CAAC,WAAW;;QAGnD,WAAW,EAAE,oBAAoB,CAAC,SAAS;QAC3C,KAAK,EAAE,oBAAoB,CAAC,KAAK;QACjC,IAAI,EAAE,oBAAoB,CAAC,IAAI;;QAG/B,KAAK,EAAE,oBAAoB,CAAC,KAAK;;AAGjC,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;AC1FA;AAOA;;;;;AAKG;AACI,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAI;;AAE9C,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;AAG/C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAEhC,IAAA,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,SAAS;AAE3B;;;AAGG;IACH,MAAM,KAAK,GAAGH,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;QAC1C,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,IAAI;iBACT,UAAU,CAAC,IAAI;AACf,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC;;IAGlD,OAAO;;QAEL,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;ACnEA;AAoBA;;;;AAIG;AACI,MAAM,cAAc,GAAG,MAAK;;AAEjC,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,gBAAgB,GAAGC,mBAAQ,CAAC;QAChC,QAAQ,EAAE,CAAC,aAAa,CAAC;AACzB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO,MAAM,CAAC,oBAAoB,EAAE,CAAC,eAAe,EAAE;QACxD,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,wBAAwB,GAAGC,sBAAW,CAAC;AAC3C,QAAA,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;AACjE,YAAA,OAAO;AACJ,iBAAA,oBAAoB;iBACpB,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI;iBACpD,IAAI,CAAC,MAAK;;AAET,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;;AAE5D,YAAA,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC;QACjD,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,yBAAyB,GAAGA,sBAAW,CAAC;QAC5C,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,KAAI;;AAEzC,YAAA,OAAO,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,KACzB,MAAM,CAAC,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAC3D,CACF,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;;AAE5D,YAAA,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC;QACpD,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC;AAC9D,IAAA,WAAW,CAAC,wBAAwB,CAAC,SAAS,EAAE,mBAAmB,CAAC;AACpE,IAAA,WAAW,CAAC,yBAAyB,CAAC,SAAS,EAAE,sBAAsB,CAAC;;IAGxE,OAAO;;AAEL,QAAA,WAAW,EAAE,gBAAgB,CAAC,IAAI,IAAI,EAAE;QACxC,SAAS,EAAE,gBAAgB,CAAC,SAAS;QACrC,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,KAAK,EAAE,gBAAgB,CAAC,KAAK;;QAG7B,gBAAgB,EAAE,wBAAwB,CAAC,MAAM;QACjD,UAAU,EAAE,wBAAwB,CAAC,SAAS;QAC9C,WAAW,EAAE,wBAAwB,CAAC,KAAK;;QAG3C,iBAAiB,EAAE,yBAAyB,CAAC,MAAM;QACnD,UAAU,EAAE,yBAAyB,CAAC,SAAS;QAC/C,WAAW,EAAE,yBAAyB,CAAC,KAAK;;QAG5C,OAAO,EAAE,gBAAgB,CAAC,OAAO;KAClC;AACH;;ACvIA;AAYA;;;AAGG;AACI,MAAM,WAAW,GAAG,MAYvB;;AAEF,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAEhC,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAGvD,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;IAG/C,MAAM,gBAAgB,GAAGF,sBAAW,CAAC;QACnC,UAAU,EAAE,OAAO,EACjB,QAAQ,EACR,UAAU,GAIX,KAAI;YACH,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;YAChD;AAEA,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC3D,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAY,KAAI;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC;AACpC,YAAA,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AACrE,YAAA,MAAM,CAAC,KAAK,CAAC,gCAAgC,YAAY,CAAA,CAAE,CAAC;QAC9D,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,MAAM,CAAC,OAAO,CAAC,oDAAoD,CAAC;YACtE;iBAAO;AACL,gBAAA,MAAM,CAAC,OAAO,CAAC,0CAA0C,CAAC;YAC5D;QACF,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CACT,gBAAgB,CAAC,SAAS,EAC1B,wCAAwC,CACzC;;IAGD,OAAO;;QAEL,YAAY,EAAE,gBAAgB,CAAC,MAAM;QACrC,iBAAiB,EAAE,gBAAgB,CAAC,WAAW;;QAG/C,YAAY,EAAE,gBAAgB,CAAC,SAAS;QACxC,KAAK,EAAE,gBAAgB,CAAC,KAAK;QAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;;AAG3B,QAAA,YAAY,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa;AAClD,QAAA,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS;AAC3C,QAAA,eAAe,EAAE,gBAAgB,CAAC,IAAI,EAAE,gBAAgB;AACxD,QAAA,UAAU,EAAE,gBAAgB,CAAC,IAAI,EAAE,UAAU;;QAG7C,KAAK,EAAE,gBAAgB,CAAC,KAAK;;AAG7B,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;AC/FA;;;;AAIG;AACI,MAAM,aAAa,GAAG,MAMzB;;AAEF,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,eAAe,GAAGH,mBAAQ,CAAC;QAC/B,QAAQ,EAAE,CAAC,YAAY,CAAC;AACxB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,YAAW;YAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE;;YAEvD,OAAO,MAAM,IAAI,EAAE;QACrB,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,qBAAqB,CAAC;;IAG7D,OAAO;;QAEL,UAAU,EAAE,eAAe,CAAC,IAAI;QAChC,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,KAAK,EAAE,eAAe,CAAC,KAAK;;QAG5B,OAAO,EAAE,eAAe,CAAC,OAAO;KACjC;AACH;;ACtDA;AACA;AAUA;;;AAGG;AACI,MAAM,aAAa,GAAG,MAAK;;AAEhC,IAAA,MAAM,MAAM,GAAGE,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAEpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;;IAI/C,MAAM,UAAU,GAAGC,mBAAQ,CAAC;QAC1B,QAAQ,EAAE,CAAC,aAAa,CAAC;AACzB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;;AAEZ,YAAA,OAAO;AACJ,iBAAA,MAAM;iBACN,SAAS,CAAC,MAAM;AAChB,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;;gBAEf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;IAGF,MAAM,kBAAkB,GAAGC,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;;AAEtC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAC5D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,kBAAkB,GAAGA,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;;AAEtC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAC5D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,kBAAkB,GAAGA,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAI;;AAEhC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,YAAY,CAAC;AACZ,gBAAA;AACE,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,GAAG,EAAE,EAAE;AACR,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAC5D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC;AAClD,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1D,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1D,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;;IAG1D,OAAO;;AAEL,QAAA,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;QAC5B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;;QAGvB,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B;AACH;;ACnLA;AACA;AAUA;;;AAGG;AACI,MAAM,WAAW,GAAG,MAAK;;AAE9B,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAEpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;;IAI/C,MAAM,UAAU,GAAGC,mBAAQ,CAAC;QAC1B,QAAQ,EAAE,CAAC,WAAW,CAAC;AACvB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;;AAEZ,YAAA,OAAO;AACJ,iBAAA,MAAM;iBACN,SAAS,CAAC,KAAK;AACf,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;;;gBAGf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;IAGF,MAAM,kBAAkB,GAAGC,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;;AAEtC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,kBAAkB,GAAGA,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;;AAEtC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,kBAAkB,GAAGA,sBAAW,CAAC;QACrC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAI;;AAEhC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,YAAY,CAAC;AACZ,gBAAA;AACE,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,GAAG,EAAE,EAAE;AACR,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC;AAClD,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1D,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1D,IAAA,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;;IAG1D,OAAO;;AAEL,QAAA,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;QAC5B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;;QAGvB,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,UAAU,EAAE,kBAAkB,CAAC,MAAM;QACrC,cAAc,EAAE,kBAAkB,CAAC,SAAS;;QAG5C,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B;AACH;;AChLA;AACA;AAUA;;;AAGG;AACI,MAAM,UAAU,GAAG,MAAK;;AAE7B,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAEpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;;IAI/C,MAAM,iBAAiB,GAAGC,mBAAQ,CAAC;QACjC,QAAQ,EAAE,CAAC,eAAe,CAAC;AAC3B,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC7C,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,oBAAA,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO;gBACzB;AACA,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,YAAY,GAAGA,mBAAQ,CAAC;QAC5B,QAAQ,EAAE,CAAC,SAAS,CAAC;AACrB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;;AAEZ,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACrD,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,oBAAA,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO;gBACzB;AACA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;AAGjD,gBAAA,OAAO;AACJ,qBAAA,MAAM;qBACN,SAAS,CACR,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM;AACrB,oBAAA,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,WAAW,GAAG,EAAE;AACtB,iBAAA,CAAC,CAAC;AAEJ,qBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,wBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,wBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;oBACvB;;oBAEA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACvD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,0BAA0B,GAAGC,sBAAW,CAAC;QAC7C,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAI;AACpC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;AAC9D,YAAA,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACzC,CAAC;AACF,KAAA,CAAC;;IAGF,MAAM,oBAAoB,GAAGA,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAI;AACxC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,WAAW,GAAG,EAAE;AACrB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,oBAAoB,GAAGA,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAI;;AAExC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACrD,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7C,iBAAA,IAAI,CAAC,CAAC,WAAW,KAAI;;gBAEpB,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,EAAE,EAAE,CAAC;;AAEnC,gBAAA,OAAO;AACJ,qBAAA,MAAM;AACN,qBAAA,SAAS,CAAC;AACT,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,GAAG,EAAE,gBAAgB;AACrB,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;wBACd,GAAG,EAAE,WAAW,GAAG,EAAE;AACrB,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,qBAAA;iBACF;AACA,qBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,wBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,wBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;oBACvB;;AAEA,oBAAA,IAAI,SAAS;AAAE,wBAAA,SAAS,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;;;IAIF,MAAM,oBAAoB,GAAGA,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAI;;AAEhC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACrD,iBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7C,iBAAA,IAAI,CAAC,CAAC,WAAW,KAAI;;AAEpB,gBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,KAAK,EAAE,CAAC;;AAEpE,gBAAA,OAAO;AACJ,qBAAA,MAAM;AACN,qBAAA,SAAS,CAAC;AACT,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,GAAG,EAAE,gBAAgB;AACrB,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,qBAAA;iBACF;qBACA,IAAI,CAAC,MAAK;;AAET,oBAAA,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC;AAClC,wBAAA;AACE,4BAAA,IAAI,EAAE,QAAQ;4BACd,GAAG,EAAE,WAAW,GAAG,EAAE;AACtB,yBAAA;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,wBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,wBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;oBACvB;;AAEA,oBAAA,IAAI,SAAS;AAAE,wBAAA,SAAS,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,uBAAuB,CAAC;AACjE,IAAA,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,CAAC;AACtD,IAAA,WAAW,CAAC,0BAA0B,CAAC,SAAS,EAAE,wBAAwB,CAAC;AAC3E,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;;IAG9D,OAAO;;AAEL,QAAA,YAAY,EAAE,iBAAiB,CAAC,IAAI;QACpC,mBAAmB,EAAE,iBAAiB,CAAC,SAAS;QAChD,iBAAiB,EAAE,iBAAiB,CAAC,KAAK;;AAG1C,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;QAChC,cAAc,EAAE,YAAY,CAAC,SAAS;QACtC,YAAY,EAAE,YAAY,CAAC,KAAK;;QAGhC,kBAAkB,EAAE,0BAA0B,CAAC,MAAM;QACrD,sBAAsB,EAAE,0BAA0B,CAAC,SAAS;;QAG5D,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;QAEhD,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;QAEhD,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;;QAGhD,OAAO,EAAE,MAAK;YACZ,iBAAiB,CAAC,OAAO,EAAE;YAC3B,YAAY,CAAC,OAAO,EAAE;QACxB,CAAC;KACF;AACH;;ACpSA;AAOO,MAAM,UAAU,GAAG,MAAK;AAC7B,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;AACpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,YAAY,GAAGC,mBAAQ,CAAC;QAC5B,QAAQ,EAAE,CAAC,SAAS,CAAC;AACrB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,MAAM;iBACN,SAAS,CAAC,QAAQ;AAClB,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;gBACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAGC,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAI;AACxC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAGA,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAI;AACxC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAGA,sBAAW,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAI;AAChC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,YAAY,CAAC;AACZ,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,GAAG,EAAE,EAAE;AACR,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACxD,YAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,CAAC;AACtD,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC9D,IAAA,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAE9D,OAAO;AACL,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;QAChC,cAAc,EAAE,YAAY,CAAC,SAAS;QACtC,YAAY,EAAE,YAAY,CAAC,KAAK;QAEhC,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;QAEhD,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;QAEhD,YAAY,EAAE,oBAAoB,CAAC,MAAM;QACzC,gBAAgB,EAAE,oBAAoB,CAAC,SAAS;QAEhD,OAAO,EAAE,MAAK;YACZ,YAAY,CAAC,OAAO,EAAE;QACxB,CAAC;KACF;AACH;;AChJA;AA2DO,MAAM,aAAa,GAAG,MAAK;AAChC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;AACpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,eAAe,GAAGC,mBAAQ,CAAC;QAC/B,QAAQ,EAAE,CAAC,YAAY,CAAC;AACxB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,MAAM;iBACN,SAAS,CAAC,UAAU;AACpB,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;gBACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1B,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,sBAAsB,GAAGC,sBAAW,CAAC;QACzC,UAAU,EAAE,CAAC,EACX,EAAE,EACF,QAAQ,EACR,SAAS,GAKV,KAAI;AACH,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAChC,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACpC,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,sBAAsB,GAAGA,sBAAW,CAAC;QACzC,UAAU,EAAE,CAAC,EACX,EAAE,EACF,QAAQ,EACR,SAAS,GAKV,KAAI;AACH,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAChC,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACpC,CAAC;AACF,KAAA,CAAC;IAEF,MAAM,sBAAsB,GAAGA,sBAAW,CAAC;QACzC,UAAU,EAAE,CAAC,EACX,EAAE,EACF,SAAS,GAIV,KAAI;AACH,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,YAAY,CAAC;AACZ,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,GAAG,EAAE,EAAE;AACR,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACpC,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC;AAC5D,IAAA,WAAW,CAAC,sBAAsB,CAAC,SAAS,EAAE,mBAAmB,CAAC;AAClE,IAAA,WAAW,CAAC,sBAAsB,CAAC,SAAS,EAAE,mBAAmB,CAAC;AAClE,IAAA,WAAW,CAAC,sBAAsB,CAAC,SAAS,EAAE,mBAAmB,CAAC;IAElE,OAAO;AACL,QAAA,UAAU,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;QACtC,iBAAiB,EAAE,eAAe,CAAC,SAAS;QAC5C,eAAe,EAAE,eAAe,CAAC,KAAK;QAEtC,cAAc,EAAE,sBAAsB,CAAC,MAAM;QAC7C,kBAAkB,EAAE,sBAAsB,CAAC,SAAS;QAEpD,cAAc,EAAE,sBAAsB,CAAC,MAAM;QAC7C,kBAAkB,EAAE,sBAAsB,CAAC,SAAS;QAEpD,cAAc,EAAE,sBAAsB,CAAC,MAAM;QAC7C,kBAAkB,EAAE,sBAAsB,CAAC,SAAS;QAEpD,OAAO,EAAE,MAAK;YACZ,eAAe,CAAC,OAAO,EAAE;QAC3B,CAAC;KACF;AACH;;AC1NA;AAOA;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,MAAK;;AAEpC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,KAAK,GAAGC,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;AAC7B,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,SAAS;AACT,iBAAA,iBAAiB;AACjB,iBAAA,IAAI,CAAC,CAAC,KAAK,KACV,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACd,gBAAA,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE;YAClB,CAAC,CAAC,CACH;QACL,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,4BAA4B,GAAGC,sBAAW,CAAC;QAC/C,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAI;YACjC,MAAM,IAAI,GAAG,YAAY;;AAGzB,YAAA,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;;AAEhE,YAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,0BAA0B,GAAGA,sBAAW,CAAC;QAC7C,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAI;;AAEvC,YAAA,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CACzD,CAAC,IAAI,CAAC,MAAK;;AAEV,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;AAEd,YAAA,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC;QACvD,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAyB,CAAC;;IAGvD,OAAO;;QAEL,cAAc,EAAE,KAAK,CAAC,IAAI;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,oBAAoB,EAAE,4BAA4B,CAAC,MAAM;QACzD,UAAU,EAAE,4BAA4B,CAAC,SAAS;QAClD,WAAW,EAAE,4BAA4B,CAAC,KAAK;;QAG/C,kBAAkB,EAAE,0BAA0B,CAAC,MAAM;QACrD,cAAc,EAAE,0BAA0B,CAAC,SAAS;QACpD,SAAS,EAAE,0BAA0B,CAAC,KAAK;;QAG3C,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;AC7HA;AAOA;;;;;AAKG;AACI,MAAM,aAAa,GAAG,MAAK;;AAEhC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,KAAK,GAAGC,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,YAAY,CAAC;AACxB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,aAAa;AACb,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,uBAAuB,GAAGC,sBAAW,CAAC;QAC1C,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAI;;AAEnC,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,YAAY,CAAC;AACZ,gBAAA;AACE,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,GAAG,EAAE,KAAK;AACX,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;;AAE3D,YAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;AACF,KAAA,CAAC;AAEF;;;;AAIG;IACH,MAAM,uBAAuB,GAAGA,sBAAW,CAAC;AAC1C,QAAA,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,KAAI;;AAE9D,YAAA,MAAM,UAAU,GAAG;gBACjB,WAAW,EAAE,WAAW,GAAG,OAAO;gBAClC,YAAY,EAAE,YAAY,GAAG,OAAO;aACrC;;AAGD,YAAA,OAAO;AACJ,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC;AACT,gBAAA;AACE,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAClC,iBAAA;aACF;AACA,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxB,oBAAA,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO;gBACvB;;AAEA,gBAAA,IAAI,SAAS;AAAE,oBAAA,SAAS,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;;YAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;;YAEd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC;AACnD,IAAA,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,qBAAqB,CAAC;AACrE,IAAA,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,qBAAqB,CAAC;;IAGrE,OAAO;;QAEL,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,UAAU,EAAE,uBAAuB,CAAC,SAAS;QAC7C,WAAW,EAAE,uBAAuB,CAAC,KAAK;;QAG1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,YAAY,EAAE,uBAAuB,CAAC,SAAS;QAC/C,WAAW,EAAE,uBAAuB,CAAC,KAAK;;QAG1C,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;AC7JA;AAOO,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;AACpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAEhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;IAG/C,MAAM,eAAe,GAAGC,mBAAQ,CAAC;QAC/B,QAAQ,EAAE,CAAC,YAAY,CAAC;AACxB,QAAA,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,YAAW;YAClB,MAAM,QAAQ,GAAG,MAAM;AACpB,iBAAA,MAAM;AACN,iBAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACpD,gBAAA,OAAO,EAAE;YACX;YAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAEvC,OAAO;AACL,gBAAA;oBACE,IAAI,EAAE,IAAI,CAAC,GAAG;AACd,oBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ;AAC/B,oBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG;AAC7C,oBAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;AAC/B,oBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;AACzB,oBAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;AACrC,iBAAA;aACF;QACH,CAAC;AACF,KAAA,CAAC;;IAGF,MAAM,cAAc,GAAGC,sBAAW,CAAC;AACjC,QAAA,UAAU,EAAE,OAAO,EACjB,IAAI,EACJ,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,YAAY,GAKtB,KAAI;;AAEH,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAC7C,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CACzB;YACD,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAA,UAAA,CAAY,CAAC;YACrD;;AAGA,YAAA,MAAM,UAAU,GAAG;gBACjB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,YAAY;aACtB;AAED,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAC9B,gBAAA;AACE,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAClC,iBAAA;AACF,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,SAAS,EAAE,MAAK;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAC/C,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC;AAC5D,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAExD,OAAO;AACL,QAAA,cAAc,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;QAC1C,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,KAAK,EAAE,eAAe,CAAC,KAAK;QAE5B,eAAe,EAAE,cAAc,CAAC,MAAM;QACtC,UAAU,EAAE,cAAc,CAAC,SAAS;QAEpC,OAAO,EAAE,eAAe,CAAC,OAAO;KACjC;AACH;;ACzGA;AAiCA;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,MAAK;;AAEpC,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAGJ,yBAAc,EAAE;;AAGpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,KAAK,GAAGC,mBAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;AAC7B,QAAA,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;AACT,QAAA,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,YAA+C;AACtD,YAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE;;gBAGrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAEjD,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;AAEzB,oBAAA,IACE,MAAM,CAAC,MAAM,GAAG,CAAC;AACjB,wBAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACxB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EACtB;;AAEA,wBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAI;4BACvD,IAAI,aAAa,GAAG,iBAAiB;;AAErC,4BAAA,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AACzC,gCAAA,IAAI;AACF,oCAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gCAC/C;gCAAE,OAAO,KAAK,EAAE;oCACd,OAAO,CAAC,KAAK,CACX,CAAA,wCAAA,EAA2C,EAAE,CAAA,CAAA,CAAG,EAChD,KAAK,CACN;oCACD,aAAa,GAAG,iBAAiB;gCACnC;4BACF;4BACA,OAAO;gCACL,EAAE;AACF,gCAAA,GAAI,aAAqD;6BAC1D;AACH,wBAAA,CAAC,CAAC;AACF,wBAAA,OAAO,SAAS;oBAClB;yBAAO;;AAEL,wBAAA,OAAO,MAAM;oBACf;gBACF;AAAO,qBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;AAE/C,oBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAC1C,CAAC,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAI;wBAC1B,IAAI,aAAa,GAAG,iBAAiB;;AAErC,wBAAA,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AACzC,4BAAA,IAAI;AACF,gCAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;4BAC/C;4BAAE,OAAO,KAAK,EAAE;gCACd,OAAO,CAAC,KAAK,CACX,CAAA,wCAAA,EAA2C,EAAE,CAAA,CAAA,CAAG,EAChD,KAAK,CACN;gCACD,aAAa,GAAG,iBAAiB;4BACnC;wBACF;wBACA,OAAO;4BACL,EAAE;AACF,4BAAA,GAAI,aAAqD;yBAC1D;AACH,oBAAA,CAAC,CACF;AACD,oBAAA,OAAO,SAAS;gBAClB;AAEA,gBAAA,OAAO,EAAE;YACX;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC;AACzD,gBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;YACrD;QACF,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC;AAExD;;AAEG;IACH,MAAM,cAAc,GAAGC,sBAAW,CAAC;QACjC,UAAU,EAAE,OAAO,EACjB,EAAE,EACF,aAAa,GAId,KAAsC;AACrC,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAC9B,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,GAAG,EAAE,EAAE;AACP,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AACrC,qBAAA;AACF,iBAAA,CAAC;gBAEF,OAAO;oBACL,EAAE;AACF,oBAAA,GAAG,aAAa;iBACjB;YACH;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC9D,gBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAA,CAAE,CAAC;YAC3D;QACF,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,aAAa,KAAI;;YAE3B,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAA,gBAAA,EAAmB,aAAa,CAAC,EAAE,CAAA,sBAAA,CAAwB,CAAC;QAC7E,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,KAAY,KAAI;YACxB,MAAM,CAAC,KAAK,CAAC,CAAA,iCAAA,EAAoC,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;QACnE,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,cAAc,GAAGA,sBAAW,CAAC;QACjC,UAAU,EAAE,OAAO,EACjB,EAAE,EACF,aAAa,GAId,KAAsC;AACrC,YAAA,IAAI;;gBAEF,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AACtD,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,GAAG,EAAE,EAAE;AACR,qBAAA;AACF,iBAAA,CAAC;AAEF,gBAAA,MAAM,oBAAoB,GAAG;oBAC3B,GAAG,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;AAChD,oBAAA,GAAG,aAAa;iBACjB;AAED,gBAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAC9B,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,GAAG,EAAE,EAAE;AACP,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;AAC5C,qBAAA;AACF,iBAAA,CAAC;gBAEF,OAAO;oBACL,EAAE;AACF,oBAAA,GAAG,oBAAoB;iBACxB;YACH;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC9D,gBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAA,CAAE,CAAC;YAC3D;QACF,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,aAAa,KAAI;;YAE3B,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAA,gBAAA,EAAmB,aAAa,CAAC,EAAE,CAAA,sBAAA,CAAwB,CAAC;QAC7E,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,KAAY,KAAI;YACxB,MAAM,CAAC,KAAK,CAAC,CAAA,iCAAA,EAAoC,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;QACnE,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,cAAc,GAAGA,sBAAW,CAAC;AACjC,QAAA,UAAU,EAAE,OAAO,EAAU,KAAmB;AAC9C,YAAA,IAAI;gBACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;;AAE9D,gBAAA,MAAM,KAAK;YACb;QACF,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,KAAI;;YAEnB,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;AAEhE,YAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAA,sBAAA,CAAwB,CAAC;QAC/D,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,KAAY,KAAI;;YAExB,MAAM,CAAC,KAAK,CACV,KAAK,CAAC,OAAO,IAAI,sDAAsD,CACxE;QACH,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,iBAAiB,GAAGA,sBAAW,CAAC;QACpC,UAAU,EAAE,OAAO,EACjB,QAAQ,EACR,QAAQ,GAIT,KAAsC;AACrC,YAAA,IAAI;;gBAEF,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AACrD,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,GAAG,EAAE,QAAQ;AACd,qBAAA;AACF,iBAAA,CAAC;gBAEF,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAClE,QAAQ,CAC8B;;AAGxC,gBAAA,MAAM,uBAAuB,GAAG;AAC9B,oBAAA,GAAG,mBAAmB;AACtB,oBAAA,WAAW,EAAE,CAAA,EAAG,mBAAmB,CAAC,WAAW,IAAI,QAAQ,CAAA,OAAA,CAAS;AACpE,oBAAA,IAAI,EAAE,CAAC,IAAI,mBAAmB,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC;iBACpD;;AAGD,gBAAA,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAC9B,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,GAAG,EAAE,QAAQ;AACb,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;AAC/C,qBAAA;AACF,iBAAA,CAAC;gBAEF,OAAO;AACL,oBAAA,EAAE,EAAE,QAAQ;AACZ,oBAAA,GAAG,uBAAuB;iBAC3B;YACH;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,mCAAA,EAAsC,QAAQ,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACvE,gBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAA,CAAE,CAAC;YACpE;QACF,CAAC;AACD,QAAA,SAAS,EAAE,CAAC,aAAa,KAAI;YAC3B,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAA,8BAAA,EAAiC,aAAa,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC;QACtE,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,KAAY,KAAI;YACxB,MAAM,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;QACtE,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAChE,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAChE,IAAA,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAChE,IAAA,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,4BAA4B,CAAC;IAEtE,OAAO;;AAEL,QAAA,cAAc,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;;AAGtB,QAAA,gBAAgB,EAAE,CAAC,EAAU,KAAyC;YACpE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,KAAI;AACpC,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE;AACrB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;QACd,CAAC;AACD,QAAA,MAAM,EAAE,CAAC,EAAU,KAAa;AAC9B,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK;QACxD,CAAC;;QAGD,mBAAmB,EAAE,cAAc,CAAC,WAAW;QAC/C,mBAAmB,EAAE,cAAc,CAAC,WAAW;QAC/C,mBAAmB,EAAE,cAAc,CAAC,WAAW;QAC/C,sBAAsB,EAAE,iBAAiB,CAAC,WAAW;;QAGrD,UAAU,EAAE,cAAc,CAAC,SAAS;QACpC,UAAU,EAAE,cAAc,CAAC,SAAS;QACpC,UAAU,EAAE,cAAc,CAAC,SAAS;QACpC,aAAa,EAAE,iBAAiB,CAAC,SAAS;KAC3C;AACH;AAEA;;AAEG;MACU,uBAAuB,GAAG,CAAC,QAAQ,GAAG,YAAY,KAAY;AACzE,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC5B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,MAAM,EAAE;AAC7C;;AC5WA;AAwCA;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,CAAC,iBAA0B,KAAI;AAC9D,IAAA,MAAM,MAAM,GAAGC,uBAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAGC,gCAAkB,EAAE;AAE5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;AAEG;IACH,MAAM,eAAe,GAAGH,mBAAQ,CAAC;AAC/B,QAAA,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;AAChD,QAAA,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,iBAAiB;QAC7C,OAAO,EAAE,YAAW;AAClB,YAAA,IAAI,CAAC,iBAAiB;AAAE,gBAAA,OAAO,IAAI;AAEnC,YAAA,IAAI;;AAEF,gBAAA,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;;AAG9E,gBAAA,MAAM,iBAAiB,GACrB,aAAa,CAAC,UAAU,IAAI,EAAE;gBAChC,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC/C,OAAO;AACL,wBAAA,oBAAoB,EAAE,EAAE;AACxB,wBAAA,gBAAgB,EAAE,EAAE;AACpB,wBAAA,iBAAiB,EAAE,EAAE;qBACtB;gBACH;;gBAGA,MAAM,gBAAgB,GAA8B,EAAE;AACtD,gBAAA,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CACvC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAI;AAC5B,oBAAA,gBAAgB,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI;AACjD,gBAAA,CAAC,CACF;;gBAGD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBACvD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAChD,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,GAAG,EAAE,IAAI;AACV,iBAAA,CAAC,CAAC;AAEH,gBAAA,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gBAClE,MAAM,oBAAoB,GAAyB,EAAE;;gBAGrD,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AACtC,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE;AAClC,wBAAA,IAAI;AACF,4BAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;wBACzD;wBAAE,OAAO,KAAK,EAAE;4BACd,OAAO,CAAC,KAAK,CACX,CAAA,yCAAA,EAA4C,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG,EACvD,KAAK,CACN;wBACH;oBACF;AACF,gBAAA,CAAC,CAAC;gBAEF,OAAO;oBACL,oBAAoB;AACpB,oBAAA,gBAAgB;AAChB,oBAAA,iBAAiB;iBAClB;YACH;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,gBAAA,MAAM,KAAK;YACb;QACF,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAEjE,OAAO;AACL,QAAA,oBAAoB,EAAE,eAAe,CAAC,IAAI,EAAE,oBAAoB,IAAI,EAAE;AACtE,QAAA,gBAAgB,EAAE,eAAe,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE;AAC9D,QAAA,iBAAiB,EAAE,eAAe,CAAC,IAAI,EAAE,iBAAiB,IAAI,EAAE;QAChE,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,KAAK,EAAE,eAAe,CAAC,KAAK;KAC7B;AACH;AAEA;;;;;;;AAOG;AACI,MAAM,sBAAsB,GAAG,CACpC,oBAA0C,EAC1C,gBAA2C,EAC3C,iBAA2D,EAC3D,eAA2C,KACzC;IACF,OAAOO,aAAO,CAAC,MAAK;QAClB,MAAM,MAAM,GAA8B,EAAE;QAC5C,IAAI,OAAO,GAAG,IAAI;;AAGlB,QAAA,MAAM,qBAAqB,GAAG,CAC5B,SAAiB,EACjB,aAAyC,KAC9B;AACX,YAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;YAC7C,MAAM,MAAM,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;;AAGhE,YAAA,IACE,aAAa,CAAC,SAAS,CAAC,KAAK,SAAS;AACtC,gBAAA,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,EAC/B;AACA,gBAAA,OAAO,aAAa,CAAC,SAAS,CAAC;YACjC;;AAGA,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE;AACzC,gBAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAChD,MAAM,eAAe,GAAG,qBAAqB,CAC3C,cAAc,EACd,aAAa,CACd;gBACD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,EAAE,EAAE;AAC3D,oBAAA,OAAO,eAAe;gBACxB;YACF;;AAGA,YAAA,OAAO,MAAM,EAAE,OAAO,IAAI,EAAE;AAC9B,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CACtC,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,KAAI;AAClC,YAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,cAAc,CAAC;AACnD,YAAA,IAAI,CAAC,MAAM;gBAAE;YAEb,MAAM,aAAa,GAAG,qBAAqB,CACzC,aAAa,EACb,eAAe,CAChB;YACD,MAAM,KAAK,GAAG,aAAa;;AAG3B,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE;AAC5D,gBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAA,EAAG,aAAa,cAAc;gBACtD,OAAO,GAAG,KAAK;gBACf;YACF;;YAGA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;gBACvC;YACF;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACzD,gBAAA,MAAM,QAAQ,GACZ,OAAO,KAAK,KAAK,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;AACvD,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnB,oBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAA,EAAG,aAAa,yBAAyB;oBACjE,OAAO,GAAG,KAAK;oBACf;gBACF;AAEA,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC5D,oBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAA,EAAG,aAAa,qBAAqB;oBAC7D,OAAO,GAAG,KAAK;oBACf;gBACF;;AAGA,gBAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE;oBAC7D,MAAM,CAAC,aAAa,CAAC;AACnB,wBAAA,CAAA,EAAG,aAAa,CAAA,kBAAA,EAAqB,MAAM,CAAC,OAAO,EAAE;oBACvD,OAAO,GAAG,KAAK;gBACjB;AACA,gBAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE;oBAC7D,MAAM,CAAC,aAAa,CAAC;AACnB,wBAAA,CAAA,EAAG,aAAa,CAAA,iBAAA,EAAoB,MAAM,CAAC,OAAO,EAAE;oBACtD,OAAO,GAAG,KAAK;gBACjB;YACF;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KACzC,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAChD;gBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBAChC,MAAM,CAAC,aAAa,CAAC;wBACnB,CAAA,EAAG,aAAa,oBAAoB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;oBAC9D,OAAO,GAAG,KAAK;gBACjB;YACF;;YAGA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC9C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE;AACjC,oBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAA,EAAG,aAAa,oBAAoB;oBAC5D,OAAO,GAAG,KAAK;gBACjB;YACF;AACF,QAAA,CAAC,CACF;AAED,QAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;AAC5B,IAAA,CAAC,EAAE;QACD,oBAAoB;QACpB,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;AAChB,KAAA,CAAC;AACJ;;AC/PA;;;AAGG;AACH,MAAM,mBAAmB,GAA2B;AAClD,IAAA,8BAA8B,EAAE,YAAY;AAC5C,IAAA,gCAAgC,EAAE,aAAa;AAC/C,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,oCAAoC,EAAE,kBAAkB;AACxD,IAAA,6BAA6B,EAAE,UAAU;AACzC,IAAA,yBAAyB,EAAE,MAAM;AACjC,IAAA,2BAA2B,EAAE,QAAQ;AACrC,IAAA,gCAAgC,EAAE,aAAa;AAC/C,IAAA,wBAAwB,EAAE,KAAK;AAC/B,IAAA,gDAAgD,EAAE,YAAY;AAC9D,IAAA,iDAAiD,EAAE,MAAM;CAC1D;AAED;;;;AAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,GAAW,KAAwB;AAC3D,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC;AACjC,CAAC;AAED;;;;;;;AAOG;MACU,cAAc,GAAG,CAAC,MAA0B,EAAE,MAAc,KAAI;;AAE3E,IAAA,MAAM,MAAM,GAAGL,uBAAS,EAAE;;AAG1B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAEhC;;;AAGG;IACH,MAAM,oBAAoB,GAAGF,mBAAQ,CAAC;QACpC,QAAQ,EAAE,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/D,OAAO,EAAE,MAAK;YACZ,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACxC;YAEA,MAAM,YAAY,GAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;AAElD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,EAAE,EACF,QAAQ,CAAC,UAAU;AAEpB,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3B,oBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC;AACtD,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;AACA,gBAAA,OAAO,OAAO;AAChB,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC;AACtD,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACjB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;AAC9B,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,mBAAmB,GAAGA,mBAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9D,OAAO,EAAE,MAAK;YACZ,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACxC;YAEA,MAAM,WAAW,GAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;AAEjD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,EAAE,EACF,QAAQ,CAAC,UAAU;AAEpB,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3B,oBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC;AACtD,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;AACA,gBAAA,OAAO,OAAO;AAChB,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;AACrD,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACjB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;AAC9B,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,eAAe,GAAGA,mBAAQ,CAAC;QAC/B,QAAQ,EAAE,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACzD,OAAO,EAAE,MAAK;YACZ,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACxC;YAEA,MAAM,YAAY,GAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;AAElD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,EAAE,EACF,QAAQ,CAAC,UAAU,CACpB;AACA,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3B,oBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC;AACtD,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;;gBAEA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;AACrE,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC;AAChD,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACjB,gBAAA,MAAM,GAAG;AACX,YAAA,CAAC,CAAC;QACN,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;AAC9B,KAAA,CAAC;AAEF;;;AAGG;AACH,IAAA,MAAM,qBAAqB,GAAGO,aAAO,CAAC,MAAK;QACzC,IAAI,CAAC,oBAAoB,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;;AAGzC,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU;QAE7C,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;;YAE3C,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC7D,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACxC,IAAA,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAE/B;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAGA,aAAO,CAAC,MAAK;QACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;;AAGxC,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU;QAE7C,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;;YAE1C,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC7D,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACxC,IAAA,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE9B;;;AAGG;AACH,IAAA,MAAM,YAAY,GAAGA,aAAO,CAAC,MAAK;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;;AAGpC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU;QAE1C,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACtC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC1B,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACrC,IAAA,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAE1B;;;AAGG;IACH,MAAM,mBAAmB,GAAGP,mBAAQ,CAAC;AACnC,QAAA,QAAQ,EAAE;YACR,8BAA8B;AAC9B,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE;AACzD,SAAA;QACD,OAAO,EAAE,YAAW;YAClB,IAAI,CAAC,qBAAqB,CAAC,MAAM;AAAE,gBAAA,OAAO,EAAE;YAE5C,MAAM,QAAQ,GAA2B,EAAE;;AAG3C,YAAA,MAAM,OAAO,CAAC,GAAG,CACf,qBAAqB,CAAC,GAAG,CAAC,OAAO,eAAe,KAAI;;AAElD,gBAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,eAAe,CAAC;gBACvD,IAAI,aAAa,EAAE;AACjB,oBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,aAAa;oBACzC;gBACF;;AAGA,gBAAA,IAAI;oBACF,MAAM,YAAY,GAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE;oBAC3D,MAAM,cAAc,GAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,CAAC,EACD,QAAQ,CAAC,UAAU,CACpB;;AAGH,oBAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,wBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD;yBAAO;AACL,wBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe;oBAC7C;gBACF;gBAAE,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CACV,CAAA,0BAAA,EAA6B,eAAe,CAAA,CAAA,CAAG,EAC/C,KAAK,CACN;AACD,oBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe;gBAC7C;YACF,CAAC,CAAC,CACH;AAED,YAAA,OAAO,QAAQ;QACjB,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC;AAClE,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,kBAAkB,GAAGA,mBAAQ,CAAC;AAClC,QAAA,QAAQ,EAAE;YACR,6BAA6B;AAC7B,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE;AACxD,SAAA;QACD,OAAO,EAAE,YAAW;YAClB,IAAI,CAAC,oBAAoB,CAAC,MAAM;AAAE,gBAAA,OAAO,EAAE;YAE3C,MAAM,QAAQ,GAA2B,EAAE;;AAG3C,YAAA,MAAM,OAAO,CAAC,GAAG,CACf,oBAAoB,CAAC,GAAG,CAAC,OAAO,eAAe,KAAI;;AAEjD,gBAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,eAAe,CAAC;gBACvD,IAAI,aAAa,EAAE;AACjB,oBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,aAAa;oBACzC;gBACF;;AAGA,gBAAA,IAAI;oBACF,MAAM,YAAY,GAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE;oBAC3D,MAAM,cAAc,GAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,CAAC,EACD,QAAQ,CAAC,UAAU,CACpB;;AAGH,oBAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,wBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD;yBAAO;AACL,wBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe;oBAC7C;gBACF;gBAAE,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CACV,CAAA,0BAAA,EAA6B,eAAe,CAAA,CAAA,CAAG,EAC/C,KAAK,CACN;AACD,oBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,eAAe;gBAC7C;YACF,CAAC,CAAC,CACH;AAED,YAAA,OAAO,QAAQ;QACjB,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC;AACjE,KAAA,CAAC;AAEF;;;AAGG;IACH,MAAM,mBAAmB,GAAGA,mBAAQ,CAAC;AACnC,QAAA,QAAQ,EAAE;YACR,iBAAiB;AACjB,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE;AAC7C,SAAA;QACD,OAAO,EAAE,YAAW;YAClB,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,gBAAA,OAAO,EAAE;YAEnC,MAAM,QAAQ,GAA2B,EAAE;;AAG3C,YAAA,MAAM,OAAO,CAAC,GAAG,CACf,YAAY,CAAC,GAAG,CAAC,OAAO,WAAW,KAAI;;AAErC,gBAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC;gBACnD,IAAI,aAAa,EAAE;AACjB,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,aAAa;oBACrC;gBACF;;AAGA,gBAAA,IAAI;oBACF,MAAM,YAAY,GAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE;oBACvD,MAAM,cAAc,GAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,CAAC,EACD,QAAQ,CAAC,UAAU,CACpB;;AAGH,oBAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,wBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C;yBAAO;AACL,wBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW;oBACrC;gBACF;gBAAE,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,WAAW,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAChE,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW;gBACrC;YACF,CAAC,CAAC,CACH;AAED,YAAA,OAAO,QAAQ;QACjB,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;AACzD,KAAA,CAAC;AAEF;;AAEG;AACH,IAAA,MAAM,+BAA+B,GAAGO,aAAO,CAAC,MAAK;AACnD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE;QAEA,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;YACzC,GAAG;YACH,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAC5C,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAErD,IAAA,MAAM,8BAA8B,GAAGA,aAAO,CAAC,MAAK;AAClD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC5B,YAAA,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE;QAEA,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;YACxC,GAAG;YACH,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;AAC3C,SAAA,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAEnD;;;;AAIG;AACH,IAAA,MAAM,oBAAoB,GAAGA,aAAO,CAAC,MAAK;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QAEpC,OAAO,eAAe,CAAC;AACpB,aAAA,MAAM,CAAC,CAAC,MAAM,KAAI;;AAEjB,YAAA,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU;AACnC,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,MAAM,MAAM;AAChB,YAAA,SAAS,EAAE;AACT,gBAAA,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;gBACtB,KAAK,EACH,mBAAmB,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;AACrE,aAAA;AACD,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;AACzB,SAAA,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;;IAGpD,WAAW,CACT,oBAAoB,CAAC,SAAS;AAC5B,QAAA,mBAAmB,CAAC,SAAS;AAC7B,QAAA,eAAe,CAAC,SAAS;AACzB,QAAA,mBAAmB,CAAC,SAAS;AAC7B,QAAA,kBAAkB,CAAC,SAAS;AAC5B,QAAA,mBAAmB,CAAC,SAAS,EAC/B,sBAAsB,CACvB;;IAGD,OAAO;;QAEL,eAAe,EAAE,oBAAoB,CAAC,IAAI;QAC1C,cAAc,EAAE,mBAAmB,CAAC,IAAI;QACxC,UAAU,EAAE,eAAe,CAAC,IAAI;;AAGhC,QAAA,cAAc,EACZ,oBAAoB,CAAC,SAAS,IAAI,mBAAmB,CAAC,SAAS;QACjE,iBAAiB,EAAE,eAAe,CAAC,SAAS;QAC5C,aAAa,EACX,mBAAmB,CAAC,SAAS;AAC7B,YAAA,kBAAkB,CAAC,SAAS;AAC5B,YAAA,mBAAmB,CAAC,SAAS;QAC/B,SAAS,EACP,oBAAoB,CAAC,SAAS;AAC9B,YAAA,mBAAmB,CAAC,SAAS;AAC7B,YAAA,eAAe,CAAC,SAAS;AACzB,YAAA,mBAAmB,CAAC,SAAS;AAC7B,YAAA,kBAAkB,CAAC,SAAS;AAC5B,YAAA,mBAAmB,CAAC,SAAS;QAE/B,sBAAsB,EAAE,oBAAoB,CAAC,SAAS;QACtD,qBAAqB,EAAE,mBAAmB,CAAC,SAAS;QACpD,sBAAsB,EAAE,eAAe,CAAC,SAAS;QACjD,qBAAqB,EAAE,mBAAmB,CAAC,SAAS;QACpD,oBAAoB,EAAE,kBAAkB,CAAC,SAAS;QAClD,qBAAqB,EAAE,mBAAmB,CAAC,SAAS;;AAGpD,QAAA,YAAY,EAAE,oBAAoB,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO;QACzE,eAAe,EAAE,eAAe,CAAC,OAAO;QACxC,WAAW,EACT,mBAAmB,CAAC,OAAO;AAC3B,YAAA,kBAAkB,CAAC,OAAO;AAC1B,YAAA,mBAAmB,CAAC,OAAO;QAC7B,QAAQ,EACN,oBAAoB,CAAC,OAAO;AAC5B,YAAA,mBAAmB,CAAC,OAAO;AAC3B,YAAA,eAAe,CAAC,OAAO;AACvB,YAAA,mBAAmB,CAAC,OAAO;AAC3B,YAAA,kBAAkB,CAAC,OAAO;AAC1B,YAAA,mBAAmB,CAAC,OAAO;QAE7B,oBAAoB,EAAE,oBAAoB,CAAC,OAAO;QAClD,mBAAmB,EAAE,mBAAmB,CAAC,OAAO;QAChD,mBAAmB,EAAE,mBAAmB,CAAC,OAAO;QAChD,kBAAkB,EAAE,kBAAkB,CAAC,OAAO;;QAG9C,2BAA2B,EAAE,oBAAoB,CAAC,KAAK;QACvD,0BAA0B,EAAE,mBAAmB,CAAC,KAAK;QACrD,sBAAsB,EAAE,eAAe,CAAC,KAAK;QAC7C,0BAA0B,EAAE,mBAAmB,CAAC,KAAK;QACrD,yBAAyB,EAAE,kBAAkB,CAAC,KAAK;QACnD,0BAA0B,EAAE,mBAAmB,CAAC,KAAK;;QAGrD,qBAAqB;QACrB,oBAAoB;QACpB,YAAY;;QAGZ,+BAA+B;QAC/B,8BAA8B;QAC9B,oBAAoB;;QAGpB,eAAe,EAAE,MAAK;YACpB,oBAAoB,CAAC,OAAO,EAAE;YAC9B,mBAAmB,CAAC,OAAO,EAAE;QAC/B,CAAC;QACD,cAAc,EAAE,MAAK;YACnB,mBAAmB,CAAC,OAAO,EAAE;YAC7B,kBAAkB,CAAC,OAAO,EAAE;QAC9B,CAAC;QACD,iBAAiB,EAAE,MAAK;YACtB,eAAe,CAAC,OAAO,EAAE;YACzB,mBAAmB,CAAC,OAAO,EAAE;QAC/B,CAAC;QACD,OAAO,EAAE,MAAK;YACZ,oBAAoB,CAAC,OAAO,EAAE;YAC9B,mBAAmB,CAAC,OAAO,EAAE;YAC7B,eAAe,CAAC,OAAO,EAAE;YACzB,mBAAmB,CAAC,OAAO,EAAE;YAC7B,kBAAkB,CAAC,OAAO,EAAE;YAC5B,mBAAmB,CAAC,OAAO,EAAE;QAC/B,CAAC;KACF;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/NotificationProvider.tsx","../src/hooks/useNotification.ts","../src/state/progress.ts","../src/hooks/useActivity.ts","../src/state/session.ts","../src/state/conversation.ts","../src/state/workbench.ts","../src/state/load.ts","../src/state/search.ts","../src/model/settings-types.ts","../src/state/settings.ts","../src/state/flows.ts","../src/utils/document-encoding.ts","../src/model/document-metadata.ts","../src/state/library.ts","../src/state/triples.ts","../src/utils/knowledge-graph.ts","../src/utils/knowledge-graph-viz.ts","../src/state/graph-query.ts","../src/state/graph-embeddings.ts","../src/utils/row.ts","../src/utils/vector-search.ts","../src/state/vector-search.ts","../src/state/entity-query.ts","../src/state/inference.ts","../src/state/chat-session.ts","../src/state/structured-query.ts","../src/state/objects-query.ts","../src/state/embeddings.ts","../src/state/collections.ts","../src/state/nlp-query.ts","../src/state/processing.ts","../src/state/agent-tools.ts","../src/state/mcp-tools.ts","../src/state/prompts.ts","../src/state/schemas.ts","../src/state/ontologies.ts","../src/state/knowledge-cores.ts","../src/state/token-costs.ts","../src/state/llm-models.ts","../src/state/flow-blueprints.ts","../src/state/flow-parameters.ts","../src/state/node-details.ts"],"sourcesContent":["import React, { createContext, ReactNode } from \"react\";\nimport type { NotificationHandler } from \"./types\";\n\n// Create context for notification handler\nexport const NotificationContext = createContext<NotificationHandler | null>(\n null\n);\n\n/**\n * Props for NotificationProvider\n */\nexport interface NotificationProviderProps {\n children: ReactNode;\n handler: NotificationHandler;\n}\n\n/**\n * NotificationProvider component\n * Provides a notification handler to all child components via context\n * This allows applications to inject their own notification/toast UI implementation\n *\n * @example\n * ```tsx\n * const toasterHandler: NotificationHandler = {\n * success: (msg) => toast.success(msg),\n * error: (msg) => toast.error(msg),\n * warning: (msg) => toast.warning(msg),\n * info: (msg) => toast.info(msg)\n * };\n *\n * <NotificationProvider handler={toasterHandler}>\n * <App />\n * </NotificationProvider>\n * ```\n */\nexport const NotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n handler,\n}) => {\n return (\n <NotificationContext.Provider value={handler}>\n {children}\n </NotificationContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { NotificationContext } from \"../NotificationProvider\";\nimport type { NotificationHandler } from \"../types\";\n\n/**\n * Custom hook for accessing the notification handler\n * Must be used within a NotificationProvider\n *\n * @returns {NotificationHandler} The notification handler methods\n * @throws {Error} If used outside of NotificationProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const notify = useNotification();\n *\n * const handleSuccess = () => {\n * notify.success(\"Operation completed!\");\n * };\n *\n * const handleError = () => {\n * notify.error(\"Something went wrong\");\n * };\n *\n * return <button onClick={handleSuccess}>Do Something</button>;\n * }\n * ```\n */\nexport const useNotification = (): NotificationHandler => {\n const handler = useContext(NotificationContext);\n\n if (!handler) {\n throw new Error(\n \"useNotification must be used within a NotificationProvider\"\n );\n }\n\n return handler;\n};\n","import { create } from \"zustand\";\n\n// Interface defining the shape of the progress state store\nexport interface ProgressState {\n // Set of active activity identifiers - using Set for O(1) lookups and\n // automatic deduplication\n activity: Set<string>;\n\n // Current error message, empty string when no error\n error: string;\n\n // Function to add a new activity to the tracking set\n addActivity: (act: string) => void;\n\n // Function to remove an activity from the tracking set\n removeActivity: (act: string) => void;\n\n // Function to set/update the current error message\n setError: (error: string) => void;\n}\n\n// Zustand store for managing progress/loading states and errors across the\n// application\nexport const useProgressStateStore = create<ProgressState>()((set) => ({\n // Initial state: empty activity set and no error\n activity: new Set<string>([]),\n error: \"\",\n\n // Add an activity identifier to track ongoing operations\n addActivity: (act) =>\n set((state) => {\n // Create a new Set to maintain immutability (Zustand best practice)\n const n = new Set(state.activity);\n n.add(act);\n return {\n ...state,\n activity: n,\n };\n }),\n\n // Remove an activity identifier when operation completes\n removeActivity: (act) =>\n set((state) => {\n // Create a new Set to maintain immutability\n const n = new Set(state.activity);\n n.delete(act);\n return {\n ...state,\n activity: n,\n };\n }),\n\n // Update the error state (pass empty string to clear error)\n setError: (error) =>\n set((state) => {\n return {\n ...state,\n error: error,\n };\n }),\n}));\n","import { useEffect } from \"react\";\nimport { useProgressStateStore } from \"../state/progress\";\n\n/**\n * Custom hook for managing activity notifications in the UI\n * Automatically adds/removes activity indicators based on a boolean condition\n *\n * @param {boolean} isActive - Boolean condition that determines if activity\n * is ongoing\n * @param {string} description - Description text to display for the activity\n *\n * @example\n * // Show \"Loading documents\" while documentsQuery.isLoading is true\n * useActivity(documentsQuery.isLoading, \"Loading documents\");\n *\n * @example\n * // Show \"Saving data\" while mutation is pending\n * useActivity(saveMutation.isPending, \"Saving data\");\n */\nexport const useActivity = (isActive: boolean, description: string) => {\n // Get activity management functions from the progress state store\n const addActivity = useProgressStateStore((state) => state.addActivity);\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n useEffect(() => {\n // Only manage activity when isActive is true\n if (isActive) {\n // Add the activity to the progress state\n addActivity(description);\n\n // Return cleanup function to remove activity when effect cleans up\n // This ensures activity is removed when:\n // - isActive becomes false\n // - description changes\n // - component unmounts\n return () => removeActivity(description);\n }\n // Re-run effect when any dependency changes\n }, [isActive, description, addActivity, removeActivity]);\n};\n","import { create } from \"zustand\";\n\n// Interface defining the shape of the session state store\nexport interface SessionState {\n // Current flow ID\n flowId: string;\n\n // Current flow name/type\n flow: string | null;\n\n // Description of the current flow\n flowDescription: string;\n\n // Function to update the current flow ID\n setFlowId: (v: string) => void;\n\n // Function to update the current flow\n setFlow: (v: string) => void;\n}\n\n// Zustand store for managing session/workflow state\nexport const useSessionStore = create<SessionState>()((set) => ({\n flowId: \"default\",\n flow: null,\n flowDescription: \"\",\n\n setFlowId: (v) =>\n set(() => ({\n flowId: v,\n })),\n\n setFlow: (v) =>\n set(() => ({\n flow: v,\n })),\n}));\n","import { create } from \"zustand\";\nimport { Message } from \"../model/message\";\n\nexport type ChatMode = \"graph-rag\" | \"agent\" | \"basic-llm\";\n\nexport interface ConversationState {\n messages: Message[];\n input: string;\n chatMode: ChatMode;\n\n setMessages: (v: Message[]) => void;\n addMessage: (\n role: string,\n text: string,\n type?: \"normal\" | \"thinking\" | \"observation\" | \"answer\"\n ) => void;\n updateLastMessage: (text: string) => void;\n setInput: (v: string) => void;\n setChatMode: (mode: ChatMode) => void;\n}\n\nexport const useConversation = create<ConversationState>()((set) => ({\n messages: [\n {\n role: \"ai\",\n text: \"Welcome to the TrustGraph Test Suite. Use the chat interface to perform Graph RAG requests.\",\n },\n ],\n\n input: \"\",\n chatMode: \"graph-rag\",\n\n setMessages: (v) =>\n set(() => ({\n messages: v,\n })),\n\n addMessage: (\n role: string,\n text: string,\n type?: \"normal\" | \"thinking\" | \"observation\" | \"answer\"\n ) =>\n set((state) => ({\n messages: [\n ...state.messages,\n {\n role: role,\n text: text,\n type: type || \"normal\",\n },\n ],\n })),\n\n updateLastMessage: (text: string) =>\n set((state) => {\n if (state.messages.length === 0) return state;\n const messages = [...state.messages];\n messages[messages.length - 1] = {\n ...messages[messages.length - 1],\n text: text,\n };\n return { messages };\n }),\n\n setInput: (v) =>\n set(() => ({\n input: v,\n })),\n\n setChatMode: (mode: ChatMode) =>\n set(() => ({\n chatMode: mode,\n })),\n}));\n","// Zustand state management library for creating stores\nimport { create } from \"zustand\";\n// Entity interface definition for knowledge graph entities\nimport { Entity } from \"../model/entity\";\n\n/**\n * State interface for the main workbench/workspace application\n * Manages the current tool selection, entity selection, and available entities\n */\nexport interface WorkbenchState {\n // Currently selected entity in the knowledge graph (optional)\n selected?: Entity;\n // Currently active tool/page (e.g., \"chat\", \"graph\", \"search\", etc.)\n tool: string;\n // List of all available entities in the current context\n entities: Entity[];\n\n // Entity selection management\n setSelected: (e: Entity) => void; // Select a specific entity\n unsetSelected: () => void; // Clear the current entity selection\n\n // Tool/page navigation\n setTool: (v: string) => void; // Switch to a different tool/page\n\n // Entity list management\n setEntities: (ents: Entity[]) => void; // Update the available entities list\n}\n\n/**\n * Zustand store for managing the main workbench application state\n * Provides centralized state management for tool navigation and entity selection\n */\nexport const useWorkbenchStateStore = create<WorkbenchState>()((set) => ({\n // Initial state values\n selected: undefined, // No entity selected by default\n\n tool: \"chat\", // Default tool is the chat interface\n\n entities: [], // Empty entities list by default\n\n // Entity selection functions\n setSelected: (e: Entity) =>\n set(() => ({\n selected: e,\n })),\n\n // Clear the current entity selection\n unsetSelected: () =>\n set(() => ({\n selected: undefined,\n })),\n\n // Tool/page navigation function\n setTool: (v) =>\n set(() => ({\n tool: v,\n })),\n\n // Update the list of available entities\n setEntities: (v) =>\n set(() => ({\n entities: v,\n })),\n}));\n","// Zustand state management library for creating stores\nimport { create } from \"zustand\";\n\n/**\n * State interface for managing document loading and upload operations\n * Handles file uploads, text input, metadata, and processing operations\n */\nexport interface LoadState {\n // Document metadata\n title: string; // Document title/name\n comments: string; // Additional comments or description\n url: string; // Source URL (for web-based content)\n keywords: string[]; // Keywords/tags associated with the document\n\n // Processing configuration\n operation: string; // Type of operation (e.g., \"upload-pdf\", \"upload-text\")\n\n // File management\n files: File[]; // Files selected for upload\n uploaded: string[]; // List of successfully uploaded file names\n text: string; // Direct text input content\n\n // State update functions for document metadata\n setTitle: (v: string) => void;\n setComments: (v: string) => void;\n setUrl: (v: string) => void;\n setKeywords: (v: string[]) => void;\n\n // State update functions for processing\n setOperation: (v: string) => void;\n\n // State update functions for file management\n setFiles: (v: File[]) => void;\n setUploaded: (v: string[]) => void;\n setText: (v: string) => void;\n addUploaded: (v: string) => void; // Add a single uploaded file to the list\n removeFile: (v: File) => void; // Remove a file from the selection\n\n // Text upload tracking\n textUploads: number; // Counter for text-based uploads\n setTextUploads: (v: number) => void;\n incTextUploads: () => void; // Increment the text upload counter\n}\n\n/**\n * Zustand store for managing document loading state\n * Provides centralized state management for the document upload/loading workflow\n */\nexport const useLoadStateStore = create<LoadState>()((set) => ({\n // Initial state values\n title: \"\", // Empty title by default\n comments: \"\", // Empty comments by default\n url: \"\", // Empty URL by default\n keywords: [], // No keywords by default\n operation: \"upload-pdf\", // Default operation is PDF upload\n files: [], // No files selected by default\n uploaded: [], // No files uploaded yet\n text: \"\", // Empty text content by default\n\n // Setter functions for document metadata\n setTitle: (v) =>\n set(() => ({\n title: v,\n })),\n\n setComments: (v) =>\n set(() => ({\n comments: v,\n })),\n\n setUrl: (v) =>\n set(() => ({\n url: v,\n })),\n\n setKeywords: (v) =>\n set(() => ({\n keywords: v,\n })),\n\n // Setter function for processing operation type\n setOperation: (v) =>\n set(() => ({\n operation: v,\n })),\n\n // Setter functions for file management\n setFiles: (v) =>\n set(() => ({\n files: v,\n })),\n\n setUploaded: (v) =>\n set(() => ({\n uploaded: v,\n })),\n\n // Add a single file to the uploaded list (preserving existing uploads)\n addUploaded: (v) =>\n set((state) => ({\n uploaded: [...state.uploaded, v],\n })),\n\n setText: (v) =>\n set(() => ({\n text: v,\n })),\n\n // Remove a specific file from the selected files list\n removeFile: (v) =>\n set((state) => ({\n files: Array.from(state.files).filter((f) => f != v),\n })),\n\n // Text upload counter management\n textUploads: 0, // Initial counter value\n setTextUploads: (v) =>\n set(() => ({\n textUploads: v,\n })),\n // Increment the text upload counter (useful for generating unique IDs)\n incTextUploads: () =>\n set((state) => ({\n textUploads: state.textUploads + 1,\n })),\n}));\n","import { create } from \"zustand\";\nimport { Row } from \"../utils/row\";\n\n// Interface defining the shape of the search state store\nexport interface SearchState {\n // Array of Row objects representing search results or filtered data\n rows: Row[];\n\n // Function to update the entire rows array (replaces all results)\n setRows: (v: Row[]) => void;\n\n // Current search input/query string from user\n input: string;\n\n // Function to update the search input value\n setInput: (v: string) => void;\n}\n\n// Zustand store for managing search functionality state\nexport const useSearchStateStore = create<SearchState>()((set) => ({\n // Initial state: no search results and empty search input\n rows: [],\n input: \"\",\n\n // Replace the entire rows array with new search results\n // Note: This completely overwrites the previous results\n setRows: (v) =>\n set(() => ({\n rows: v,\n })),\n\n // Update the search input string (typically bound to search input field)\n setInput: (v) =>\n set(() => ({\n input: v,\n })),\n}));\n","export interface Settings {\n user: string;\n collection: string;\n authentication: {\n apiKey: string;\n };\n graphrag: {\n entityLimit: number;\n tripleLimit: number;\n maxSubgraphSize: number;\n pathLength: number;\n };\n featureSwitches: {\n ontologyEditor: boolean;\n submissions: boolean;\n agentTools: boolean;\n mcpTools: boolean;\n schemas: boolean;\n tokenCost: boolean;\n flowBlueprints: boolean;\n flowBlueprintEditor: boolean;\n structuredQuery: boolean;\n llmModels: boolean;\n };\n}\n\nexport const DEFAULT_SETTINGS: Settings = {\n user: \"trustgraph\", // Default user ID\n collection: \"default\", // Default collection ID\n authentication: {\n apiKey: \"\",\n },\n graphrag: {\n entityLimit: 50,\n tripleLimit: 30,\n maxSubgraphSize: 1000,\n pathLength: 2,\n },\n featureSwitches: {\n ontologyEditor: false,\n submissions: false,\n agentTools: true, // On by default\n mcpTools: false, // Off by default\n schemas: false, // Off by default\n tokenCost: false, // Off by default\n flowBlueprints: false, // Off by default\n flowBlueprintEditor: false, // Off by default - experimental feature\n structuredQuery: false, // Off by default\n llmModels: false, // Off by default\n },\n};\n\nexport const SETTINGS_STORAGE_KEY = \"trustgraph-settings\";\n","// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Settings types and defaults\nimport {\n Settings,\n DEFAULT_SETTINGS,\n SETTINGS_STORAGE_KEY,\n} from \"../model/settings-types\";\n\n/**\n * Utility function to merge imported settings with defaults\n * Ensures all required properties exist and handles partial imports\n */\nconst mergeWithDefaults = (settings: Partial<Settings>): Settings => {\n return {\n user: settings.user ?? DEFAULT_SETTINGS.user,\n collection: settings.collection ?? DEFAULT_SETTINGS.collection,\n authentication: {\n ...DEFAULT_SETTINGS.authentication,\n ...settings.authentication,\n },\n graphrag: {\n ...DEFAULT_SETTINGS.graphrag,\n ...settings.graphrag,\n },\n featureSwitches: {\n ...DEFAULT_SETTINGS.featureSwitches,\n ...settings.featureSwitches,\n },\n };\n};\n\n/**\n * Utility function to update localStorage as a cache/fallback\n */\nconst updateLocalStorage = (settings: Settings) => {\n try {\n localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(settings));\n } catch (error) {\n console.warn(\"Failed to update localStorage:\", error);\n }\n};\n\n/**\n * Utility function to load from localStorage as fallback\n */\nconst loadFromLocalStorage = (): Settings => {\n try {\n const stored = localStorage.getItem(SETTINGS_STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n return mergeWithDefaults(parsed);\n }\n } catch (error) {\n console.warn(\"Failed to load from localStorage:\", error);\n }\n return DEFAULT_SETTINGS;\n};\n\n/**\n * Custom hook for managing application settings\n * Uses TanStack Query for consistent async patterns while storing in localStorage\n * Ready for future backend integration when needed\n */\nexport const useSettings = () => {\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Query to fetch settings from localStorage\n const settingsQuery = useQuery({\n queryKey: [\"settings\"],\n queryFn: async () => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n return loadFromLocalStorage();\n },\n // Enable background refetching\n staleTime: 5 * 60 * 1000, // 5 minutes\n refetchOnWindowFocus: false,\n });\n\n // Mutation for updating settings\n const updateSettingsMutation = useMutation({\n mutationFn: async ({\n path,\n value,\n onSuccess,\n }: {\n path: string;\n value: unknown;\n onSuccess?: () => void;\n }) => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n\n // Get fresh settings from localStorage to avoid race conditions\n const currentSettings = loadFromLocalStorage();\n const newSettings = { ...currentSettings };\n const keys = path.split(\".\");\n\n if (keys.length === 1) {\n // Handle top-level properties like 'user' and 'collection'\n const [key] = keys;\n if (key in newSettings) {\n (newSettings as Record<string, unknown>)[key] = value;\n }\n } else if (keys.length === 2) {\n const [section, key] = keys;\n if (section in newSettings) {\n const settingsRecord = newSettings as unknown as Record<\n string,\n Record<string, unknown>\n >;\n settingsRecord[section] = {\n ...settingsRecord[section],\n [key]: value,\n };\n }\n }\n\n // Update localStorage\n updateLocalStorage(newSettings);\n\n // Execute callback if provided\n if (onSuccess) onSuccess();\n },\n onError: (err) => {\n notify.error(`Failed to save settings: ${err.toString()}`);\n },\n onSuccess: () => {\n // Refresh the settings data after successful update\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n },\n });\n\n // Mutation for resetting settings to defaults\n const resetSettingsMutation = useMutation({\n mutationFn: async ({ onSuccess }: { onSuccess?: () => void } = {}) => {\n // Minimal delay for async consistency\n await new Promise((resolve) => setTimeout(resolve, 1));\n\n // Clear localStorage\n localStorage.removeItem(SETTINGS_STORAGE_KEY);\n\n // Execute callback if provided\n if (onSuccess) onSuccess();\n },\n onError: (err) => {\n notify.error(`Failed to reset settings: ${err.toString()}`);\n },\n onSuccess: () => {\n // Refresh the settings data after successful reset\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n notify.success(\"Settings reset to defaults\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(settingsQuery.isLoading, \"Loading settings\");\n useActivity(updateSettingsMutation.isPending, \"Saving settings\");\n useActivity(resetSettingsMutation.isPending, \"Resetting settings\");\n\n // Get current settings or defaults\n const settings = settingsQuery.data || DEFAULT_SETTINGS;\n\n // Helper function to update a specific setting path\n const updateSetting = (path: string, value: unknown) => {\n updateSettingsMutation.mutate({ path, value });\n };\n\n // Helper function to save complete settings\n const saveSettings = (newSettings: Settings) => {\n // For complete settings replacement, directly update localStorage\n updateLocalStorage(newSettings);\n // Then invalidate the query to refetch\n queryClient.invalidateQueries({ queryKey: [\"settings\"] });\n };\n\n // Helper function to reset settings\n const resetSettings = () => {\n resetSettingsMutation.mutate({});\n };\n\n // Helper function to export settings as JSON\n const exportSettings = (): string => {\n return JSON.stringify(settings, null, 2);\n };\n\n // Helper function to import settings from JSON\n const importSettings = (jsonString: string) => {\n try {\n const imported = JSON.parse(jsonString);\n const validatedSettings = mergeWithDefaults(imported);\n saveSettings(validatedSettings);\n } catch (error) {\n notify.error(\"Failed to import settings: Invalid JSON format\");\n throw error;\n }\n };\n\n // Return the public API for the hook\n return {\n // Settings data and state\n settings,\n isLoaded: !settingsQuery.isLoading,\n isLoading: settingsQuery.isLoading,\n error: settingsQuery.error,\n\n // Settings operations\n updateSetting,\n saveSettings,\n resetSettings,\n exportSettings,\n importSettings,\n\n // Loading states for individual operations\n isSaving: updateSettingsMutation.isPending,\n isResetting: resetSettingsMutation.isPending,\n\n // Manual refetch function\n refetch: settingsQuery.refetch,\n };\n};\n","import { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing flow operations\n * Provides functionality for fetching, deleting, and creating flows\n * @returns {Object} Flow state and operations\n */\nexport const useFlows = () => {\n // WebSocket connection for communicating with the flows service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all flows\n * Uses React Query for caching and background refetching\n */\n const flowsQuery = useQuery({\n queryKey: [\"flows\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .flows()\n .getFlows()\n .then((flows) =>\n Promise.all(\n flows.map((flowId) =>\n socket\n .flows()\n .getFlow(flowId)\n .then((flow) => {\n return { ...flow, id: flowId };\n })\n )\n )\n );\n },\n });\n\n /**\n * Query for fetching all flow blueprints\n * Uses React Query for caching and background refetching\n */\n const flowBlueprintsQuery = useQuery({\n queryKey: [\"flows-blueprints\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .flows()\n .getFlowBlueprints()\n .then((cls) =>\n Promise.all(\n cls.map((id) =>\n socket\n .flows()\n .getFlowBlueprint(id)\n .then((cls) => [id, cls])\n )\n )\n );\n },\n });\n\n /**\n * Mutation for starting a new flow for processing workflows\n */\n const startFlowMutation = useMutation({\n mutationFn: ({\n id,\n blueprintName,\n description,\n parameters,\n onSuccess,\n }: {\n id: string;\n blueprintName: string;\n description: string;\n parameters?: Record<string, unknown>;\n onSuccess?: () => void;\n }) => {\n return socket\n .flows()\n .startFlow(id, blueprintName, description, parameters)\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.message);\n },\n onSuccess: () => {\n // Invalidate flows cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"flows\"] });\n notify.success(\"Started flow\");\n },\n });\n\n /**\n * Mutation for deleting multiple flows\n * Executes parallel deletion requests and handles success/error states\n */\n const stopFlowMutation = useMutation({\n mutationFn: ({\n ids,\n onSuccess,\n }: {\n ids: string[];\n onSuccess?: () => void;\n }) => {\n // Execute deletion requests in parallel for all flows\n return Promise.all(ids.map((id) => socket.flows().stopFlow(id))).then(\n () => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n }\n );\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.message);\n },\n onSuccess: () => {\n // Invalidate flows cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"flows\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(flowsQuery.isLoading, \"Loading flows\");\n useActivity(flowBlueprintsQuery.isLoading, \"Loading flow blueprints\");\n useActivity(startFlowMutation.isPending, \"Starting flow\");\n useActivity(stopFlowMutation.isPending, \"Stopping flows\");\n\n // Return flows state and operations for use in components\n return {\n // Flow data and query state\n flows: flowsQuery.data,\n isLoading: flowsQuery.isLoading,\n isError: flowsQuery.isError,\n error: flowsQuery.error,\n\n // Flow blueprint data and query state\n flowBlueprints: flowBlueprintsQuery.data,\n isFlowBlueprintsLoading: flowBlueprintsQuery.isLoading,\n isFlowBlueprintsError: flowBlueprintsQuery.isError,\n flowBlueprintsError: flowBlueprintsQuery.error,\n\n // Flow start operations\n startFlow: startFlowMutation.mutate,\n isStarting: startFlowMutation.isPending,\n startError: startFlowMutation.error,\n\n // Flow stop operations\n stopFlows: stopFlowMutation.mutate,\n isStopping: stopFlowMutation.isPending,\n stopError: stopFlowMutation.error,\n\n // Manual refetch function\n refetch: flowsQuery.refetch,\n };\n};\n","/**\n * textToBase64 using TextEncoder\n */\nexport const textToBase64 = (input) => {\n // Convert string to UTF-8 bytes, then to Base64\n const encoder = new TextEncoder();\n const bytes = encoder.encode(input);\n\n // Convert Uint8Array to string for btoa()\n const binaryString = Array.from(bytes, (byte) =>\n String.fromCharCode(byte)\n ).join(\"\");\n return btoa(binaryString);\n};\n\n/**\n * Converts a text string to Base64 encoding with proper UTF-8 handling\n *\n * WHY THIS LOOKS WEIRD:\n * FileReader.readAsDataURL() returns a data URL like\n * \"data:image/png;base64,iVBORw0KGgoA...\"\n * but we only want the Base64 part. The regex removes the \"data:\" prefix\n * and everything up to the comma, leaving just the Base64 data.\n *\n * ISSUES WITH CURRENT IMPLEMENTATION:\n * - Type assertion (as string) is unsafe - reader.result could be ArrayBuffer\n * - No error handling for failed file reads\n * - Regex is overly complex for simple string removal\n *\n * @param {File} file - The file to convert to Base64\n * @returns {Promise<string>} Promise that resolves to Base64 string\n */\nexport const fileToBase64 = (file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onloadend = () => {\n // FIXME: Type is 'string | ArrayBuffer'? is this safe?\n // FIXME: Use Blob.arrayBuffer API?\n const data = (reader.result as string)\n .replace(\"data:\", \"\")\n .replace(/^.+,/, \"\");\n\n resolve(data);\n };\n\n reader.readAsDataURL(file);\n });\n};\n","import { v4 as uuidv4 } from \"uuid\";\n\nimport { Triple } from \"@trustgraph/client\";\n\nexport const RDF_TYPE = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\";\nexport const RDFS_LABEL = \"http://www.w3.org/2000/01/rdf-schema#label\";\nexport const DIGITAL_DOCUMENT = \"https://schema.org/DigitalDocument\";\nexport const SCHEMA_URL = \"https://schema.org/url\";\nexport const SCHEMA_KEYWORDS = \"https://schema.org/keywords\";\n\nexport interface DocumentParameters {\n title?: string;\n url?: string;\n keywords?: string[];\n comments?: string;\n}\n\nexport const createDocId = () => {\n return \"https://trustgraph.ai/doc/\" + uuidv4();\n};\n\nexport const prepareMetadata = (doc_id: string, params) => {\n let doc_meta: Triple[] = [\n {\n s: { v: doc_id, e: true },\n p: { v: RDF_TYPE, e: true },\n o: { v: DIGITAL_DOCUMENT, e: true },\n },\n ];\n\n if (params.title != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: RDFS_LABEL, e: true },\n o: { v: params.title, e: false },\n },\n ];\n\n if (params.url != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: SCHEMA_URL, e: true },\n o: { v: params.url, e: true },\n },\n ];\n\n for (const keyword of params.keywords)\n doc_meta = [\n ...doc_meta,\n {\n s: { v: doc_id, e: true },\n p: { v: SCHEMA_KEYWORDS, e: true },\n o: { v: keyword, e: false },\n },\n ];\n\n return doc_meta;\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { fileToBase64, textToBase64 } from \"../utils/document-encoding\";\nimport { prepareMetadata, createDocId } from \"../model/document-metadata\";\n\n/**\n * Custom hook for managing document library operations\n * Provides functionality for fetching, deleting, and submitting documents\n * @returns {Object} Library state and operations\n */\nexport const useLibrary = (): {\n documents: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n deleteDocuments: (params: any) => void;\n isDeleting: boolean;\n deleteError: Error | null;\n submitDocuments: (params: any) => void;\n isSubmitting: boolean;\n submitError: Error | null;\n uploadFiles: (params: any) => void;\n isUploadingFiles: boolean;\n filesUploadError: Error | null;\n uploadTexts: (params: any) => void;\n isUploadingTexts: boolean;\n textsUploadError: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the librarian service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all documents from the library\n * Uses React Query for caching and background refetching\n */\n const documentsQuery = useQuery({\n queryKey: [\"documents\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket.librarian().getDocuments();\n },\n });\n\n /**\n * Mutation for deleting multiple documents\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteDocumentsMutation = useMutation({\n mutationFn: ({ ids, onSuccess }) => {\n // Execute deletion requests in parallel for all document IDs\n return Promise.all(\n ids.map((id) => socket.librarian().removeDocument(id))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for submitting documents to processing workflows\n * Creates processing entries for each document with specified flow and tags\n */\n const submitDocumentsMutation = useMutation({\n mutationFn: ({ ids, flow, tags, collection, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n ids.map((id) => {\n // Generate unique processing ID for each document\n const proc_id = uuidv4();\n return socket\n .librarian()\n .addProcessing(proc_id, id, flow, collection, tags);\n })\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n notify.success(\"Successful submission\");\n },\n });\n\n /**\n * Uploading documents into the library. Puts the documents in the\n * library, but does not initiate processing.\n */\n const uploadFilesMutation = useMutation({\n mutationFn: ({ files, params, mimeType, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n files.map((file) => {\n // Generate unique doc ID for each document\n const doc_id = createDocId();\n\n const meta = prepareMetadata(doc_id, params);\n\n return fileToBase64(file)\n .then((enc) => {\n return socket\n .librarian()\n .loadDocument(\n enc,\n mimeType,\n params.title,\n params.comments,\n params.keywords,\n doc_id,\n meta\n );\n })\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n })\n );\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n notify.success(\"Successful upload\");\n },\n });\n\n /**\n * Uploading text into the library. Puts the text in the\n * library, but does not initiate processing.\n */\n const uploadTextsMutation = useMutation({\n mutationFn: ({ texts, params, mimeType, onSuccess }) => {\n // Create processing entries for each document\n return Promise.all(\n texts.map((text) => {\n // Generate unique doc ID for each document\n const doc_id = createDocId();\n\n const enc = textToBase64(text);\n\n const meta = prepareMetadata(doc_id, params);\n\n return socket\n .librarian()\n .loadDocument(\n enc,\n mimeType,\n params.title,\n params.comments,\n params.keywords,\n doc_id,\n meta\n );\n })\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to refresh the list\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n // Notify\n notify.success(\"Successful upload\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(documentsQuery.isLoading, \"Loading documents\");\n useActivity(deleteDocumentsMutation.isPending, \"Deleting documents\");\n useActivity(submitDocumentsMutation.isPending, \"Submitting documents\");\n useActivity(uploadFilesMutation.isPending, \"Uploading files\");\n useActivity(uploadTextsMutation.isPending, \"Uploading text\");\n\n // Return library state and operations for use in components\n return {\n // Document data and query state\n documents: documentsQuery.data,\n isLoading: documentsQuery.isLoading,\n isError: documentsQuery.isError,\n error: documentsQuery.error,\n\n // Document deletion operations\n deleteDocuments: deleteDocumentsMutation.mutate,\n isDeleting: deleteDocumentsMutation.isPending,\n deleteError: deleteDocumentsMutation.error,\n\n // Document submission operations\n submitDocuments: submitDocumentsMutation.mutate,\n isSubmitting: submitDocumentsMutation.isPending,\n submitError: submitDocumentsMutation.error,\n\n // Document upload operations\n uploadFiles: uploadFilesMutation.mutate,\n isUploadingFiles: uploadFilesMutation.isPending,\n filesUploadError: uploadFilesMutation.error,\n\n // Document upload operations\n uploadTexts: uploadTextsMutation.mutate,\n isUploadingTexts: uploadTextsMutation.isPending,\n textsUploadError: uploadTextsMutation.error,\n\n // Manual refetch function\n refetch: documentsQuery.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useTriples = ({ flow, s, p, o, limit, collection }: {\n flow?: string;\n s?: any;\n p?: any;\n o?: any;\n limit: number;\n collection?: string;\n}): {\n triples: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"triples\", { flow, s, p, o, limit }],\n queryFn: () => {\n return socket\n .flow(flow)\n .triplesQuery(s, p, o, limit, collection || settings.collection)\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading triples\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n triples: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { FlowApi, Triple } from \"@trustgraph/client\";\n\nexport const RDFS_LABEL = \"http://www.w3.org/2000/01/rdf-schema#label\";\n\nexport const SKOS_DEFINITION =\n \"http://www.w3.org/2004/02/skos/core#definition\";\n\nexport const SCHEMAORG_SUBJECT_OF = \"https://schema.org/subjectOf\";\n\nexport const SCHEMAORG_DESCRIPTION = \"https://schema.org/description\";\n\n// Some pre-defined labels, don't need to be fetched from the graph\nconst predefined: { [k: string]: string } = {\n [RDFS_LABEL]: \"label\",\n [SKOS_DEFINITION]: \"definition\",\n [SCHEMAORG_SUBJECT_OF]: \"subject of\",\n [SCHEMAORG_DESCRIPTION]: \"description\",\n \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\": \"has type\",\n \"https://schema.org/publication\": \"publication\",\n \"https://schema.org/url\": \"url\",\n \"https://schema.org/PublicationEvent\": \"publication event\",\n \"https://schema.org/publishedBy\": \"published by\",\n \"https://schema.org/DigitalDocument\": \"digital document\",\n \"https://schema.org/startDate\": \"start date\",\n \"https://schema.org/endDate\": \"end date\",\n \"https://schema.org/name\": \"name\",\n \"https://schema.org/copyrightNotice\": \"copyright notice\",\n \"https://schema.org/copyrightHolder\": \"copyright holder\",\n \"https://schema.org/copyrightYear\": \"copyright year\",\n \"https://schema.org/keywords\": \"keywords\",\n};\n\n// Default triple limit on queries\nexport const LIMIT = 30;\n\n// Query triples which match URI on 's'\nexport const queryS = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query S: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n { v: uri, e: true },\n undefined,\n undefined,\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 'p'\nexport const queryP = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query P: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n undefined,\n { v: uri, e: true },\n undefined,\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 'o'\nexport const queryO = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query O: \" + uri;\n add(act);\n\n return socket\n .triplesQuery(\n undefined,\n undefined,\n { v: uri, e: true },\n limit ? limit : LIMIT,\n collection\n )\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Query triples which match URI on 's', 'p' or 'o'.\nexport const query = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n const act = \"Query: \" + uri;\n add(act);\n\n return Promise.all([\n queryS(socket, uri, add, remove, limit, collection),\n queryP(socket, uri, add, remove, limit, collection),\n queryO(socket, uri, add, remove, limit, collection),\n ])\n .then((resp) => {\n return resp[0].concat(resp[1]).concat(resp[2]);\n })\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Convert a URI to its label by querying the graph store, returns a\n// promise\nexport const queryLabel = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<string> => {\n const act = \"Label \" + uri;\n\n // If the URI is in the pre-defined list, just return that\n if (uri in predefined) {\n return new Promise((s) => s(predefined[uri]));\n }\n\n add(act);\n\n // Search tthe graph for the URI->label relationship\n return socket\n .triplesQuery(\n { v: uri, e: true },\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n collection\n )\n .then((triples: Triple[]) => {\n // If got a result, return the label, otherwise the URI\n // can be its own label\n if (triples.length > 0) return triples[0].o.v;\n else return uri;\n })\n .then((x) => {\n remove(act);\n return x;\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n};\n\n// Add 'label' elements to 's' elements in a list of triples.\n// Returns a promise\nexport const labelS = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, t.s.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n s: {\n ...t.s,\n label: label,\n },\n };\n }\n );\n })\n );\n};\n\n// Add 'label' elements to 'p' elements in a list of triples.\n// Returns a promise\nexport const labelP = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, t.p.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n p: {\n ...t.p,\n label: label,\n },\n };\n }\n );\n })\n );\n};\n\n// Add 'label' elements to 'o' elements in a list of triples.\n// Returns a promise\nexport const labelO = (\n socket: FlowApi,\n triples: Triple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<Triple[]> => {\n return Promise.all(\n triples.map((t) => {\n // If the 'o' element is a entity, do a label lookup, else\n // just use the literal value for its label\n if (t.o.e)\n return queryLabel(socket, t.o.v, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n o: {\n ...t.o,\n label: label,\n },\n };\n }\n );\n else\n return new Promise<Triple>((resolve) => {\n resolve({\n ...t,\n o: {\n ...t.o,\n label: t.o.v,\n },\n });\n });\n })\n );\n};\n\n// Triple filter\nexport const filter = (triples: Triple[], fn: (t: Triple) => boolean) =>\n triples.filter((t) => fn(t));\n\n// Filter out 'structural' edges nobody needs to see\nexport const filterInternals = (triples: Triple[]) =>\n triples.filter((t) => {\n if (t.p.e && t.p.v == RDFS_LABEL) return false;\n return true;\n });\n\n// Generic triple fetcher, fetches triples related to a URI, adds labels\n// and provides over-arching uri/label props for the input URI\nexport const getTriples = (\n socket: FlowApi,\n uri: string,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n // FIXME: Cache more\n // FIXME: Too many queries\n\n return query(socket, uri, add, remove, limit, collection)\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => {\n return queryLabel(socket, uri, add, remove, collection).then(\n (label: string) => {\n return {\n triples: d,\n uri: uri,\n label: label,\n };\n }\n );\n });\n};\n","// Functionality here helps construct subgraphs for react-force-graph\n// visualisation\n\nimport { Triple, FlowApi } from \"@trustgraph/client\";\nimport {\n query,\n labelS,\n labelP,\n labelO,\n filterInternals,\n} from \"./knowledge-graph\";\n\ninterface Node {\n id: string;\n label: string;\n group: number;\n}\n\ninterface Link {\n id: string;\n source: string;\n target: string;\n label: string;\n value: number;\n}\n\nexport interface Subgraph {\n nodes: Node[];\n links: Link[];\n}\n\nexport const createSubgraph = (): Subgraph => {\n return {\n nodes: [],\n links: [],\n };\n};\n\nexport const updateSubgraphTriples = (sg: Subgraph, triples: Triple[]) => {\n const groupId = 1;\n\n const nodeIds = new Set<string>(sg.nodes.map((n) => n.id));\n const linkIds = new Set<string>(sg.links.map((n) => n.id));\n\n for (const t of triples) {\n // Skip triples where the object is a literal (property edges)\n // These are now shown in the node details drawer instead\n if (!t.o.e) {\n continue;\n }\n // Source has a URI, that can be its unique ID\n const sourceId = t.s.v;\n\n // Target is always an entity now (we filtered out literals above)\n const targetId = t.o.v;\n\n // Links have an ID so that this edge is unique\n const linkId = t.s.v + \"@@\" + t.p.v + \"@@\" + t.o.v;\n\n if (!nodeIds.has(sourceId)) {\n const n: Node = {\n id: sourceId,\n label: t.s.label ? t.s.label : \"unknown\",\n group: groupId,\n };\n nodeIds.add(sourceId);\n sg = {\n ...sg,\n nodes: [...sg.nodes, n],\n };\n }\n\n if (!nodeIds.has(targetId)) {\n const n: Node = {\n id: targetId,\n label: t.o.label ? t.o.label : \"unknown\",\n group: groupId,\n };\n nodeIds.add(targetId);\n sg = {\n ...sg,\n nodes: [...sg.nodes, n],\n };\n }\n\n if (!linkIds.has(linkId)) {\n const l: Link = {\n source: sourceId,\n target: targetId,\n id: linkId,\n label: t.p.label ? t.p.label : \"unknown\",\n value: 1,\n };\n linkIds.add(linkId);\n sg = {\n ...sg,\n links: [...sg.links, l],\n };\n }\n }\n\n return sg;\n};\n\nexport const updateSubgraph = (\n socket: FlowApi,\n uri: string,\n sg: Subgraph,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n) => {\n return query(socket, uri, add, remove, undefined, collection)\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => updateSubgraphTriples(sg, d));\n};\n\nexport const updateSubgraphByRelationship = (\n socket: FlowApi,\n selectedNodeId: string,\n relationshipUri: string,\n direction: \"incoming\" | \"outgoing\",\n sg: Subgraph,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n) => {\n const activityName = `Following ${direction} relationship: ${relationshipUri}`;\n\n add(activityName);\n\n // Build the query based on direction\n const queryPromise =\n direction === \"outgoing\"\n ? socket.triplesQuery(\n { v: selectedNodeId, e: true }, // s = selectedNode\n { v: relationshipUri, e: true }, // p = relationship\n undefined, // o = ??? (what we want to find)\n 20, // Limit results\n collection\n )\n : socket.triplesQuery(\n undefined, // s = ??? (what we want to find)\n { v: relationshipUri, e: true }, // p = relationship\n { v: selectedNodeId, e: true }, // o = selectedNode\n 20, // Limit results\n collection\n );\n\n return queryPromise\n .then((triples) => {\n remove(activityName);\n return triples;\n })\n .then((d) => labelS(socket, d, add, remove, collection))\n .then((d) => labelP(socket, d, add, remove, collection))\n .then((d) => labelO(socket, d, add, remove, collection))\n .then((d) => filterInternals(d))\n .then((d) => updateSubgraphTriples(sg, d));\n};\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport {\n createSubgraph,\n updateSubgraph,\n updateSubgraphByRelationship,\n Subgraph,\n} from \"../utils/knowledge-graph-viz\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing graph visualization operations using React Query\n * Provides functionality for fetching and updating graph subgraphs\n * @param entityUri - The URI of the entity to build the graph around\n * @param flowId - The flow ID to use for the query\n * @param collection - The collection to query\n * @returns {Object} Graph state and operations\n */\nexport const useGraphSubgraph = (\n entityUri: string | undefined,\n flowId: string,\n collection: string\n) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Query client for cache management\n const queryClient = useQueryClient();\n\n /**\n * Query for fetching initial graph subgraph\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"graph-subgraph\", { entityUri, flowId, collection }],\n queryFn: async () => {\n if (!entityUri) {\n throw new Error(\"Entity URI is required\");\n }\n\n const sg = createSubgraph();\n\n // Use the existing updateSubgraph utility function for initial load\n const api = socket.flow(flowId);\n return updateSubgraph(\n api,\n entityUri,\n sg,\n addActivity,\n removeActivity,\n collection\n );\n },\n enabled: !!entityUri && !!flowId, // Only run query if both entityUri and flowId are available\n });\n\n /**\n * Mutation for updating the graph subgraph when nodes are clicked\n */\n const updateMutation = useMutation({\n mutationFn: async ({\n nodeId,\n currentGraph,\n }: {\n nodeId: string;\n currentGraph: Subgraph;\n }) => {\n const api = socket.flow(flowId);\n return updateSubgraph(\n api,\n nodeId,\n currentGraph,\n addActivity,\n removeActivity\n );\n },\n onSuccess: (newGraph) => {\n // Update the cache with the new graph data\n queryClient.setQueryData(\n [\"graph-subgraph\", { entityUri, flowId, collection }],\n newGraph\n );\n },\n onError: (err) => {\n console.log(\"Graph update error:\", err);\n notify.error(err.toString());\n },\n });\n\n /**\n * Mutation for expanding the graph by following specific relationships\n */\n const relationshipNavigationMutation = useMutation({\n mutationFn: async ({\n selectedNodeId,\n relationshipUri,\n direction,\n currentGraph,\n }: {\n selectedNodeId: string;\n relationshipUri: string;\n direction: \"incoming\" | \"outgoing\";\n currentGraph: Subgraph;\n }) => {\n const api = socket.flow(flowId);\n return updateSubgraphByRelationship(\n api,\n selectedNodeId,\n relationshipUri,\n direction,\n currentGraph,\n addActivity,\n removeActivity,\n collection\n );\n },\n onSuccess: (newGraph) => {\n // Update the cache with the new graph data\n queryClient.setQueryData(\n [\"graph-subgraph\", { entityUri, flowId, collection }],\n newGraph\n );\n },\n onError: (err) => {\n console.log(\"Relationship navigation error:\", err);\n notify.error(err.toString());\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(\n query.isLoading,\n entityUri ? `Build subgraph: ${entityUri}` : \"Loading graph\"\n );\n useActivity(updateMutation.isPending, \"Update subgraph\");\n useActivity(\n relationshipNavigationMutation.isPending,\n \"Following relationship\"\n );\n\n // Handle query errors\n if (query.isError && query.error) {\n notify.error(query.error.toString());\n }\n\n // Return graph state and operations for use in components\n return {\n // Graph query state\n view: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Graph update operations\n updateSubgraph: updateMutation.mutate,\n isUpdating: updateMutation.isPending,\n\n // Relationship navigation operations\n navigateByRelationship: relationshipNavigationMutation.mutate,\n isNavigating: relationshipNavigationMutation.isPending,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useGraphEmbeddings = ({ flow, vecs, limit, collection }: {\n flow?: string;\n vecs: number[][];\n limit: number;\n collection?: string;\n}): {\n graphEmbeddings: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching graph embeddings\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"graph-embeddings\", { vecs, limit }],\n queryFn: () => {\n return socket\n .flow(flow)\n .graphEmbeddingsQuery(vecs, limit, collection || settings.collection)\n .then((x) => {\n return x;\n })\n .catch((err: unknown) => {\n console.log(\"Error:\", err);\n const message = err instanceof Error ? err.message : String(err);\n notify.error(message);\n throw err;\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading graph embeddings\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n graphEmbeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { Value, FlowApi } from \"@trustgraph/client\";\nimport { RDFS_LABEL, SKOS_DEFINITION } from \"./knowledge-graph\";\n// @ts-ignore - compute-cosine-similarity is a CommonJS module with no types\nimport similarity from \"compute-cosine-similarity\";\n\nexport interface Row {\n uri: string;\n label?: string;\n description?: string;\n embeddings?: number[];\n target?: number[];\n similarity?: number;\n}\n\n// Take the embeddings, and lookup entities using graph\n// embeddings, add embedding to each entity row, just an easy\n// place to put it\nexport const getGraphEmbeddings = (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n limit?: number,\n collection?: string\n) => {\n // Take the embeddings, and lookup entities using graph\n // embeddings, add embedding to each entity row, just an easy\n // place to put it\n return (vecs: number[][]): Promise<Row[]> => {\n const act = \"Graph embedding search\";\n add(act);\n\n return socket\n .graphEmbeddingsQuery(vecs, limit ? limit : 10, collection)\n .then((ents: Value[]): Row[] => {\n remove(act);\n return ents.map((ent) => {\n return { uri: ent.v, target: vecs[0] };\n });\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n };\n};\n\n// For entities, lookup labels\nexport const addRowLabels =\n (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n ) =>\n (entities: Row[]): Promise<Row[]> => {\n return Promise.all<Row>(\n entities.map((ent: Row) => {\n const act = \"Label \" + ent.uri;\n add(act);\n return socket\n .triplesQuery(\n { v: ent.uri, e: true },\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n collection\n )\n .then((t): Row => {\n if (t.length < 1) {\n remove(act);\n return {\n uri: ent.uri,\n label: \"\",\n target: ent.target,\n };\n } else {\n remove(act);\n return {\n uri: ent.uri,\n label: t[0].o.v,\n target: ent.target,\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// For entities, lookup definitions\nexport const addRowDefinitions =\n (\n socket: FlowApi,\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n ) =>\n // For entities, lookup labels\n (entities: Row[]) => {\n return Promise.all<Row>(\n entities.map((ent) => {\n const act = \"Description \" + ent.uri;\n add(act);\n return socket\n .triplesQuery(\n { v: ent.uri, e: true },\n { v: SKOS_DEFINITION, e: true },\n undefined,\n 1,\n collection\n )\n .then((t) => {\n if (t.length < 1) {\n remove(act);\n return { ...ent, description: \"\" };\n } else {\n remove(act);\n return {\n ...ent,\n description: t[0].o.v,\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// Compute an embedding for each entity based on its definition or label\nexport const addRowEmbeddings =\n (socket: FlowApi, add: (s: string) => void, remove: (s: string) => void) =>\n (entities: Row[]) => {\n return Promise.all<Row>(\n entities.map((ent) => {\n let text: string = \"\";\n if (ent.description && ent.description != \"\") text = ent.description;\n else text = ent.label!;\n\n const act = \"Embeddings \" + text.substring(0, 20);\n add(act);\n\n return socket\n .embeddings(text)\n .then((x) => {\n if (x && x.length > 0) {\n remove(act);\n return {\n ...ent,\n embeddings: x[0],\n };\n } else {\n remove(act);\n return {\n ...ent,\n embeddings: [],\n };\n }\n })\n .catch((err) => {\n remove(act);\n throw err;\n });\n })\n );\n };\n\n// Rest of the procecess is not async, so not adding progress\n\nexport const computeCosineSimilarity =\n () =>\n (entities: Row[]): Row[] =>\n entities.map((ent) => {\n const sim = similarity(ent.target!, ent.embeddings!);\n return {\n uri: ent.uri,\n label: ent.label,\n description: ent.description,\n similarity: sim ? sim : -1,\n };\n });\n\nexport const sortSimilarity = () => (entities: Row[]) => {\n const arr = Array.from(entities);\n arr.sort((a, b) => b.similarity! - a.similarity!);\n return arr;\n};\n","import {\n getGraphEmbeddings,\n addRowLabels,\n addRowDefinitions,\n addRowEmbeddings,\n computeCosineSimilarity,\n sortSimilarity,\n} from \"./row\";\n\nexport const vectorSearch = (\n socket,\n flowId,\n addActivity,\n removeActivity,\n term: string,\n collection?: string,\n limit?: number\n) => {\n const api = socket.flow(flowId);\n\n const searchAct = \"Search: \" + term;\n addActivity(searchAct);\n\n return api\n .embeddings(term)\n .then(\n getGraphEmbeddings(\n api,\n addActivity,\n removeActivity,\n limit || 10,\n collection\n )\n )\n .then(addRowLabels(api, addActivity, removeActivity, collection))\n .then(addRowDefinitions(api, addActivity, removeActivity, collection))\n .then(addRowEmbeddings(api, addActivity, removeActivity))\n .then(computeCosineSimilarity())\n .then(sortSimilarity())\n .then((x) => {\n removeActivity(searchAct);\n return {\n view: x,\n entities: x.map((row) => {\n return {\n uri: row.uri,\n label: row.label ? row.label : \"n/a\",\n };\n }),\n };\n })\n .catch((err) => {\n removeActivity(searchAct);\n throw err;\n });\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useState } from \"react\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { vectorSearch } from \"../utils/vector-search\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing vector search operations\n * Provides functionality for searching entities using vector embeddings\n * @returns {Object} Vector search state and operations\n */\n\nexport const useVectorSearch = () => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // State to track current search parameters\n const [searchParams, setSearchParams] = useState(null);\n\n /**\n * Query for fetching vector search results\n * Uses React Query for caching and background refetching\n */\n const searchQuery = useQuery({\n queryKey: [\"search\", searchParams],\n enabled: !!searchParams?.term,\n queryFn: () => {\n const { flow, term, limit, collection } = searchParams;\n return vectorSearch(\n socket,\n flow || \"default\",\n addActivity,\n removeActivity,\n term,\n collection,\n limit\n )\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n throw err;\n });\n },\n });\n\n // Function to trigger a new search\n const startSearch = ({ flow, term, limit, collection }) => {\n if (!term) {\n setSearchParams(null);\n return;\n }\n setSearchParams({\n flow: flow || \"default\",\n term,\n limit: limit || 10,\n collection,\n });\n };\n\n // Return vector search state and operations for use in components\n return {\n // Function to start a new search\n startSearch: startSearch,\n // Search results and state\n data: searchQuery.data,\n isLoading: searchQuery.isLoading || searchQuery.isFetching,\n isError: searchQuery.isError,\n error: searchQuery.error,\n // Current search parameters\n searchParams: searchParams,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { getTriples } from \"../utils/knowledge-graph\";\nimport { useProgressStateStore } from \"./progress\";\n\n/**\n * Custom hook for managing entity detail operations using React Query\n * Provides functionality for fetching entity details and related triples\n * @param entityUri - The URI of the entity to fetch details for\n * @param flowId - The flow ID to use for the query\n * @param collection - The collection to query\n * @returns {Object} Entity detail state and operations\n */\nexport const useEntityDetail = (\n entityUri: string | undefined,\n flowId: string,\n collection: string\n): {\n detail: Awaited<ReturnType<typeof getTriples>> | undefined;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n const addActivity = useProgressStateStore((state) => state.addActivity);\n\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n /**\n * Query for fetching entity details\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"entity-detail\", { entityUri, flowId, collection }],\n queryFn: async () => {\n if (!entityUri) {\n throw new Error(\"Entity URI is required\");\n }\n\n // Use the existing getTriples utility function\n const api = socket.flow(flowId);\n return getTriples(\n api,\n entityUri,\n addActivity,\n removeActivity,\n undefined,\n collection\n );\n },\n // Only run query if both entityUri and flowId are available\n enabled: !!entityUri && !!flowId,\n });\n\n // Show loading indicators for long-running operations\n useActivity(\n query.isLoading,\n entityUri ? `Knowledge graph search: ${entityUri}` : \"Loading entity\"\n );\n\n // Handle errors\n if (query.isError && query.error) {\n notify.error(query.error.toString());\n }\n\n // Return entity detail state and operations for use in components\n return {\n // Entity detail query state\n detail: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Value } from \"@trustgraph/client\";\n\nexport interface GraphRagOptions {\n entityLimit?: number;\n tripleLimit?: number;\n maxSubgraphSize?: number;\n pathLength?: number;\n}\n\nexport interface GraphRagResult {\n response: string;\n entities: Value[];\n}\n\nexport interface GraphRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onError?: (error: string) => void;\n}\n\nexport interface TextCompletionCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onError?: (error: string) => void;\n}\n\nexport interface AgentCallbacks {\n onThink?: (thought: string, complete?: boolean) => void;\n onObserve?: (observation: string, complete?: boolean) => void;\n onAnswer?: (answer: string, complete?: boolean) => void;\n onError?: (error: string) => void;\n}\n\n/**\n * Hook providing low-level access to LLM inference services\n * No conversation state or side effects - just the API calls\n */\nexport const useInference = () => {\n const socket = useSocket();\n const flowId = useSessionStore((state) => state.flowId);\n\n /**\n * Graph RAG inference with entity discovery\n */\n const graphRagMutation = useMutation({\n mutationFn: async ({\n input,\n options,\n collection,\n callbacks,\n }: {\n input: string;\n options?: GraphRagOptions;\n collection: string;\n callbacks?: GraphRagCallbacks;\n }): Promise<GraphRagResult> => {\n // If callbacks provided, use streaming API\n const response = callbacks\n ? await new Promise<string>((resolve, reject) => {\n let accumulated = \"\";\n\n const onChunk = (chunk: string, complete: boolean) => {\n accumulated += chunk;\n callbacks?.onChunk?.(chunk, complete);\n if (complete) {\n resolve(accumulated);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .graphRagStreaming(input, onChunk, onError, options, collection);\n })\n : await socket.flow(flowId).graphRag(input, options || {}, collection);\n\n // Get embeddings for entity discovery\n const embeddings = await socket.flow(flowId).embeddings(input);\n\n // Query graph embeddings to find entities\n const entities = await socket\n .flow(flowId)\n .graphEmbeddingsQuery(\n embeddings,\n options?.entityLimit || 10,\n collection\n );\n\n return { response, entities };\n },\n });\n\n /**\n * Basic LLM text completion\n */\n const textCompletionMutation = useMutation({\n mutationFn: async ({\n systemPrompt,\n input,\n callbacks,\n }: {\n systemPrompt: string;\n input: string;\n callbacks?: TextCompletionCallbacks;\n }): Promise<string> => {\n // If callbacks provided, use streaming API\n return callbacks\n ? await new Promise<string>((resolve, reject) => {\n let accumulated = \"\";\n\n const onChunk = (chunk: string, complete: boolean) => {\n accumulated += chunk;\n callbacks?.onChunk?.(chunk, complete);\n if (complete) {\n resolve(accumulated);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .textCompletionStreaming(systemPrompt, input, onChunk, onError);\n })\n : await socket.flow(flowId).textCompletion(systemPrompt, input);\n },\n });\n\n /**\n * Agent inference with streaming callbacks\n */\n const agentMutation = useMutation({\n mutationFn: async ({\n input,\n callbacks,\n }: {\n input: string;\n callbacks?: AgentCallbacks;\n }): Promise<string> => {\n return new Promise<string>((resolve, reject) => {\n let fullAnswer = \"\";\n\n const onThink = (thought: string, complete: boolean) => {\n callbacks?.onThink?.(thought, complete);\n };\n\n const onObserve = (observation: string, complete: boolean) => {\n callbacks?.onObserve?.(observation, complete);\n };\n\n const onAnswer = (answer: string, complete: boolean) => {\n fullAnswer += answer;\n callbacks?.onAnswer?.(answer, complete);\n if (complete) {\n resolve(fullAnswer);\n }\n };\n\n const onError = (error: string) => {\n callbacks?.onError?.(error);\n reject(new Error(error));\n };\n\n socket\n .flow(flowId)\n .agent(input, onThink, onObserve, onAnswer, onError);\n });\n },\n });\n\n return {\n graphRag: graphRagMutation.mutateAsync,\n textCompletion: textCompletionMutation.mutateAsync,\n agent: agentMutation.mutateAsync,\n isLoading:\n graphRagMutation.isPending ||\n textCompletionMutation.isPending ||\n agentMutation.isPending,\n };\n};\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useConversation } from \"./conversation\";\nimport { useInference } from \"./inference\";\nimport { useWorkbenchStateStore } from \"./workbench\";\nimport { useProgressStateStore } from \"./progress\";\nimport { useSettings } from \"./settings\";\nimport { RDFS_LABEL } from \"../utils/knowledge-graph\";\nimport { Entity } from \"../model/entity\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Triple } from \"@trustgraph/client\";\n\n/**\n * High-level hook for managing chat sessions\n * Combines conversation state with inference services\n * Handles routing, progress tracking, entity management, and notifications\n */\nexport const useChatSession = () => {\n const socket = useSocket();\n const notify = useNotification();\n\n // Conversation state\n const addMessage = useConversation((state) => state.addMessage);\n const updateLastMessage = useConversation((state) => state.updateLastMessage);\n const setInput = useConversation((state) => state.setInput);\n const chatMode = useConversation((state) => state.chatMode);\n\n // Progress and activity management\n const addActivity = useProgressStateStore((state) => state.addActivity);\n const removeActivity = useProgressStateStore(\n (state) => state.removeActivity\n );\n\n // Session and workbench state\n const flowId = useSessionStore((state) => state.flowId);\n const setEntities = useWorkbenchStateStore((state) => state.setEntities);\n\n // Settings for GraphRAG configuration\n const { settings } = useSettings();\n\n // Inference services\n const inference = useInference();\n\n /**\n * Graph RAG chat handling with entity discovery\n */\n const handleGraphRag = async (input: string) => {\n const ragActivity = \"Graph RAG: \" + input;\n const embActivity = \"Find entities: \" + input;\n\n addActivity(ragActivity);\n\n let accumulated = \"\";\n let messageAdded = false;\n\n try {\n // Execute Graph RAG with streaming and entity discovery\n const result = await inference.graphRag({\n input,\n options: {\n entityLimit: settings.graphrag.entityLimit,\n tripleLimit: settings.graphrag.tripleLimit,\n maxSubgraphSize: settings.graphrag.maxSubgraphSize,\n pathLength: settings.graphrag.pathLength,\n },\n collection: settings.collection,\n callbacks: {\n onChunk: (chunk, complete) => {\n accumulated += chunk;\n\n if (!messageAdded) {\n // Add empty message on first chunk\n addMessage(\"ai\", accumulated);\n messageAdded = true;\n } else {\n // Update existing message with accumulated text\n updateLastMessage(accumulated);\n }\n },\n },\n });\n\n removeActivity(ragActivity);\n\n // Start embeddings activity\n addActivity(embActivity);\n\n // Get labels for each entity\n const labelPromises = result.entities.map(async (entity) => {\n const labelActivity = \"Label \" + entity.v;\n addActivity(labelActivity);\n\n try {\n const triples = await socket\n .flow(flowId)\n .triplesQuery(\n entity,\n { v: RDFS_LABEL, e: true },\n undefined,\n 1,\n settings.collection\n );\n removeActivity(labelActivity);\n return triples;\n } catch (err) {\n removeActivity(labelActivity);\n throw err;\n }\n });\n\n const labelResponses = await Promise.all(labelPromises);\n\n // Convert graph labels to entity list\n const entityList: Entity[] = labelResponses\n .filter((resp) => resp && resp.length > 0)\n .map((resp: Triple[]) => ({\n label: resp[0].o.v,\n uri: resp[0].s.v,\n }));\n\n setEntities(entityList);\n removeActivity(embActivity);\n\n return result.response;\n } catch (error) {\n removeActivity(ragActivity);\n removeActivity(embActivity);\n throw error;\n }\n };\n\n /**\n * Basic LLM chat handling\n */\n const handleBasicLlm = async (input: string) => {\n const activity = \"Text completion: \" + input;\n addActivity(activity);\n\n let accumulated = \"\";\n let messageAdded = false;\n\n try {\n const response = await inference.textCompletion({\n systemPrompt:\n \"You are a helpful assistant. Provide clear and concise responses.\",\n input,\n callbacks: {\n onChunk: (chunk, complete) => {\n accumulated += chunk;\n\n if (!messageAdded) {\n // Add empty message on first chunk\n addMessage(\"ai\", accumulated);\n messageAdded = true;\n } else {\n // Update existing message with accumulated text\n updateLastMessage(accumulated);\n }\n },\n },\n });\n\n removeActivity(activity);\n setEntities([]);\n\n return response;\n } catch (error) {\n removeActivity(activity);\n throw error;\n }\n };\n\n /**\n * Agent chat handling with streaming responses\n */\n const handleAgent = async (input: string) => {\n const activity = \"Agent: \" + input;\n addActivity(activity);\n\n let thinkingAccumulated = \"\";\n let thinkingMessageAdded = false;\n let observationAccumulated = \"\";\n let observationMessageAdded = false;\n let answerAccumulated = \"\";\n let answerMessageAdded = false;\n\n try {\n const response = await inference.agent({\n input,\n callbacks: {\n onThink: (thought, complete) => {\n thinkingAccumulated += thought;\n if (!thinkingMessageAdded) {\n addMessage(\"ai\", thinkingAccumulated, \"thinking\");\n thinkingMessageAdded = true;\n } else {\n updateLastMessage(thinkingAccumulated);\n }\n if (complete) {\n thinkingAccumulated = \"\";\n thinkingMessageAdded = false;\n }\n },\n onObserve: (observation, complete) => {\n observationAccumulated += observation;\n if (!observationMessageAdded) {\n addMessage(\"ai\", observationAccumulated, \"observation\");\n observationMessageAdded = true;\n } else {\n updateLastMessage(observationAccumulated);\n }\n if (complete) {\n observationAccumulated = \"\";\n observationMessageAdded = false;\n }\n },\n onAnswer: (answer, complete) => {\n answerAccumulated += answer;\n if (!answerMessageAdded) {\n addMessage(\"ai\", answerAccumulated, \"answer\");\n answerMessageAdded = true;\n } else {\n updateLastMessage(answerAccumulated);\n }\n },\n },\n });\n\n removeActivity(activity);\n setEntities([]);\n\n return response;\n } catch (error) {\n removeActivity(activity);\n throw error;\n }\n };\n\n /**\n * Main chat mutation handling message submission\n */\n const chatMutation = useMutation({\n mutationFn: async ({ input }: { input: string }) => {\n // Add user message immediately\n addMessage(\"human\", input);\n\n try {\n let response: string;\n\n // Route to appropriate handler based on chat mode\n switch (chatMode) {\n case \"graph-rag\":\n response = await handleGraphRag(input);\n break;\n case \"basic-llm\":\n response = await handleBasicLlm(input);\n break;\n case \"agent\":\n response = await handleAgent(input);\n break;\n default:\n throw new Error(\"Unknown chat mode\");\n }\n\n // Clear input after successful submission\n setInput(\"\");\n return response;\n } catch (error) {\n // Add error message to chat\n const errorMessage =\n error instanceof Error\n ? error.message\n : error?.toString() || \"Unknown error\";\n addMessage(\"ai\", errorMessage);\n\n // Clear input even on error\n setInput(\"\");\n throw error;\n }\n },\n onError: (err) => {\n console.log(\"Chat error:\", err);\n notify.error(err.toString());\n },\n });\n\n // Show loading indicator for chat operations\n useActivity(chatMutation.isPending, \"Processing chat message\");\n\n return {\n submitMessage: chatMutation.mutate,\n isSubmitting: chatMutation.isPending,\n submitError: chatMutation.error,\n };\n};\n\n// Re-export as useChat for convenience\nexport const useChat = useChatSession;\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n// Settings for user and collection\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing structured query operations\n * Provides functionality for executing natural language questions against structured data\n * Combines NLP query conversion and GraphQL execution in a single operation\n */\nexport const useStructuredQuery = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n // Settings for default collection\n const { settings } = useSettings();\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for executing structured queries from natural language\n const structuredQueryMutation = useMutation({\n mutationFn: async ({\n question,\n collection,\n }: {\n question: string;\n collection?: string;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket\n .flow(flowId)\n .structuredQuery(question, collection || settings.collection);\n },\n onError: (err) => {\n console.log(\"Structured query error:\", err);\n const errorMessage =\n err instanceof Error\n ? err.message\n : err?.toString() || \"Unknown error\";\n notify.error(`Structured query failed: ${errorMessage}`);\n },\n onSuccess: (data) => {\n if (data.data) {\n notify.success(\"Structured query executed successfully\");\n } else if (data.errors && data.errors.length > 0) {\n notify.warning(\"Query executed with errors\");\n } else {\n notify.warning(\"Query processed but returned no data\");\n }\n },\n });\n\n // Show loading indicator for structured query operations\n useActivity(structuredQueryMutation.isPending, \"Executing structured query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: structuredQueryMutation.mutate,\n executeQueryAsync: structuredQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: structuredQueryMutation.isPending,\n error: structuredQueryMutation.error,\n data: structuredQueryMutation.data,\n\n // Extracted data for easier access\n queryData: structuredQueryMutation.data?.data,\n queryErrors: structuredQueryMutation.data?.errors,\n hasErrors:\n structuredQueryMutation.data?.errors &&\n structuredQueryMutation.data.errors.length > 0,\n\n // Reset function to clear previous results\n reset: structuredQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n// Settings for user and collection\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for managing GraphQL objects queries\n * Provides functionality for executing GraphQL queries against structured data objects\n */\nexport const useObjectsQuery = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n // Settings for default collection\n const { settings } = useSettings();\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for executing GraphQL objects queries\n const objectsQueryMutation = useMutation({\n mutationFn: async ({\n query,\n collection,\n variables,\n operationName,\n }: {\n query: string;\n collection?: string;\n variables?: Record<string, unknown>;\n operationName?: string;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket\n .flow(flowId)\n .objectsQuery(\n query,\n collection || settings.collection,\n variables,\n operationName\n );\n },\n onError: (err: unknown) => {\n console.log(\"Objects query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`GraphQL query failed: ${errorMessage}`);\n },\n onSuccess: () => {\n notify.success(\"GraphQL query executed successfully\");\n },\n });\n\n // Show loading indicator for query operations\n useActivity(objectsQueryMutation.isPending, \"Executing GraphQL query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: objectsQueryMutation.mutate,\n executeQueryAsync: objectsQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: objectsQueryMutation.isPending,\n error: objectsQueryMutation.error,\n data: objectsQueryMutation.data,\n\n // Reset function to clear previous results\n reset: objectsQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useEmbeddings = ({ flow, term }) => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n if (!flow) flow = \"default\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"embeddings\", { flow, term }],\n enabled: isSocketReady && !!term && !!flow,\n queryFn: () => {\n return socket\n .flow(flow)\n .embeddings(term)\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n notify.error(err);\n });\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Compute embeddings\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n embeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Collection metadata structure\n */\nexport interface CollectionMetadata {\n user: string;\n collection: string;\n name: string;\n description: string;\n tags: string[];\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Custom hook for managing collection operations\n * Provides functionality for fetching, creating, updating, and deleting collections\n * @returns {Object} Collections state and operations\n */\nexport const useCollections = () => {\n // WebSocket connection for communicating with the collection management service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all collections from the collection management service\n * Uses React Query for caching and background refetching\n */\n const collectionsQuery = useQuery({\n queryKey: [\"collections\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket.collectionManagement().listCollections();\n },\n });\n\n /**\n * Mutation for creating or updating a collection\n * Executes update request and handles success/error states\n */\n const updateCollectionMutation = useMutation({\n mutationFn: ({ collection, name, description, tags, onSuccess }) => {\n return socket\n .collectionManagement()\n .updateCollection(collection, name, description, tags)\n .then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate collections cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"collections\"] });\n // Show success notification\n notify.success(\"Collection saved successfully\");\n },\n });\n\n /**\n * Mutation for deleting multiple collections\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteCollectionsMutation = useMutation({\n mutationFn: ({ collections, onSuccess }) => {\n // Execute deletion requests in parallel for all collection IDs\n return Promise.all(\n collections.map((collection) =>\n socket.collectionManagement().deleteCollection(collection)\n )\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate collections cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"collections\"] });\n // Show success notification\n notify.success(\"Collections deleted successfully\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(collectionsQuery.isLoading, \"Loading collections\");\n useActivity(updateCollectionMutation.isPending, \"Saving collection\");\n useActivity(deleteCollectionsMutation.isPending, \"Deleting collections\");\n\n // Return collections state and operations for use in components\n return {\n // Collection data and query state\n collections: collectionsQuery.data || [],\n isLoading: collectionsQuery.isLoading,\n isError: collectionsQuery.isError,\n error: collectionsQuery.error,\n\n // Update/create collection operations\n updateCollection: updateCollectionMutation.mutate,\n isUpdating: updateCollectionMutation.isPending,\n updateError: updateCollectionMutation.error,\n\n // Delete collection operations\n deleteCollections: deleteCollectionsMutation.mutate,\n isDeleting: deleteCollectionsMutation.isPending,\n deleteError: deleteCollectionsMutation.error,\n\n // Manual refetch function\n refetch: collectionsQuery.refetch,\n };\n};\n","// React Query hooks for data fetching and mutation management\nimport { useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n// Session state for flow ID\nimport { useSessionStore } from \"./session\";\n\n/**\n * Custom hook for managing NLP query operations\n * Provides functionality for converting natural language questions to GraphQL queries\n */\nexport const useNlpQuery = (): {\n convertQuery: (params: { question: string; maxResults?: number }) => void;\n convertQueryAsync: (params: { question: string; maxResults?: number }) => Promise<any>;\n isConverting: boolean;\n error: unknown;\n data: any;\n graphqlQuery: string | undefined;\n variables: Record<string, unknown> | undefined;\n detectedSchemas: Record<string, unknown>[] | undefined;\n confidence: number | undefined;\n reset: () => void;\n isReady: boolean;\n} => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Notification system for user feedback\n const notify = useNotification();\n // Session state for current flow ID\n const flowId = useSessionStore((state) => state.flowId);\n\n // Only enable operations when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Mutation for converting natural language to GraphQL\n const nlpQueryMutation = useMutation({\n mutationFn: async ({\n question,\n maxResults,\n }: {\n question: string;\n maxResults?: number;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(flowId).nlpQuery(question, maxResults);\n },\n onError: (err: unknown) => {\n console.log(\"NLP query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`NLP query conversion failed: ${errorMessage}`);\n },\n onSuccess: (data) => {\n if (data.graphql_query) {\n notify.success(\"Natural language converted to GraphQL successfully\");\n } else {\n notify.warning(\"Query processed but no GraphQL generated\");\n }\n },\n });\n\n // Show loading indicator for conversion operations\n useActivity(\n nlpQueryMutation.isPending,\n \"Converting natural language to GraphQL\"\n );\n\n // Return the public API for the hook\n return {\n // Query conversion\n convertQuery: nlpQueryMutation.mutate,\n convertQueryAsync: nlpQueryMutation.mutateAsync,\n\n // Query state\n isConverting: nlpQueryMutation.isPending,\n error: nlpQueryMutation.error,\n data: nlpQueryMutation.data,\n\n // Extracted data for easier access\n graphqlQuery: nlpQueryMutation.data?.graphql_query,\n variables: nlpQueryMutation.data?.variables,\n detectedSchemas: nlpQueryMutation.data?.detected_schemas,\n confidence: nlpQueryMutation.data?.confidence,\n\n // Reset function to clear previous results\n reset: nlpQueryMutation.reset,\n\n // Socket readiness\n isReady: isSocketReady,\n };\n};\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing processing operations\n * Provides functionality for fetching, deleting, and creating processing\n * @returns {Object} Processing state and operations\n */\nexport const useProcessing = (): {\n processing: any;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n refetch: () => void;\n} => {\n // WebSocket connection for communicating with the librarian service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all processing\n * Uses React Query for caching and background refetching\n */\n const processingQuery = useQuery({\n queryKey: [\"processing\"],\n enabled: isSocketReady,\n queryFn: async () => {\n const result = await socket.librarian().getProcessing();\n // React Query requires non-undefined return value\n return result || [];\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(processingQuery.isLoading, \"Loading submissions\");\n\n // Return procecssing state and operations for use in components\n return {\n // Processing data and query state\n processing: processingQuery.data,\n isLoading: processingQuery.isLoading,\n isError: processingQuery.isError,\n error: processingQuery.error,\n\n // Manual refetch function\n refetch: processingQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing agent tools (create, read, update, delete operations)\n * Provides CRUD operations for agent tools stored in the TrustGraph configuration\n */\nexport const useAgentTools = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch all agent tools\n // Gets all tools directly from the 'tool' configuration type\n const toolsQuery = useQuery({\n queryKey: [\"agent-tools\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Get all tools using the getValues operation\n return socket\n .config()\n .getValues(\"tool\")\n .then((values) => {\n // Parse tool configurations and pair them with their IDs\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n // Mutation for updating an existing tool's configuration\n const updateToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Update the tool configuration in the backend\n return socket\n .config()\n .putConfig([\n {\n type: \"tool\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful update\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool updated\");\n },\n });\n\n // Mutation for creating a new tool\n // Creates the tool configuration directly\n const createToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Create the new tool configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"tool\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool created\");\n },\n });\n\n // Mutation for deleting a tool\n // Deletes the tool configuration directly\n const deleteToolMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Delete the tool configuration\n return socket\n .config()\n .deleteConfig([\n {\n type: \"tool\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"agent-tools\"] });\n notify.success(\"Tool deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(toolsQuery.isLoading, \"Loading tools\");\n useActivity(updateToolMutation.isPending, \"Updating tool\");\n useActivity(createToolMutation.isPending, \"Creating tool\");\n useActivity(deleteToolMutation.isPending, \"Deleting tool\");\n\n // Return the public API for the hook\n return {\n // Tools data and query state\n tools: toolsQuery.data || [], // Array of [id, toolConfig] pairs\n isLoading: toolsQuery.isLoading,\n isError: toolsQuery.isError,\n error: toolsQuery.error,\n\n // Update tool operations\n updateTool: updateToolMutation.mutate,\n isUpdatingTool: updateToolMutation.isPending,\n\n // Create tool operations\n createTool: createToolMutation.mutate,\n isCreatingTool: createToolMutation.isPending,\n\n // Delete tool operations\n deleteTool: deleteToolMutation.mutate,\n isDeletingTool: deleteToolMutation.isPending,\n\n // Manual refetch function\n refetch: toolsQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing MCP tools (create, read, update, delete operations)\n * Provides CRUD operations for MCP tools stored in the TrustGraph configuration\n */\nexport const useMcpTools = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch all MCP tools\n // Uses the list operation to get all MCP tools directly\n const toolsQuery = useQuery({\n queryKey: [\"mcp-tools\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Get all MCP tools using the getValues operation\n return socket\n .config()\n .getValues(\"mcp\")\n .then((values) => {\n // Parse tool configurations and pair them with their IDs\n // MCP tools have simplified structure: { name: string, url: string }\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n });\n },\n });\n\n // Mutation for updating an existing tool's configuration\n const updateToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Update the tool configuration in the backend\n return socket\n .config()\n .putConfig([\n {\n type: \"mcp\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful update\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool updated\");\n },\n });\n\n // Mutation for creating a new tool\n // Creates the tool configuration directly\n const createToolMutation = useMutation({\n mutationFn: ({ id, tool, onSuccess }) => {\n // Create the new tool configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"mcp\",\n key: id,\n value: JSON.stringify(tool),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool created\");\n },\n });\n\n // Mutation for deleting a tool\n // Deletes the tool configuration directly\n const deleteToolMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Delete the tool configuration\n return socket\n .config()\n .deleteConfig([\n {\n type: \"mcp\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the tools list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"mcp-tools\"] });\n notify.success(\"Tool deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(toolsQuery.isLoading, \"Loading tools\");\n useActivity(updateToolMutation.isPending, \"Updating tool\");\n useActivity(createToolMutation.isPending, \"Creating tool\");\n useActivity(deleteToolMutation.isPending, \"Deleting tool\");\n\n // Return the public API for the hook\n return {\n // Tools data and query state\n tools: toolsQuery.data || [], // Array of [id, toolConfig] pairs\n isLoading: toolsQuery.isLoading,\n isError: toolsQuery.isError,\n error: toolsQuery.error,\n\n // Update tool operations\n updateTool: updateToolMutation.mutate,\n isUpdatingTool: updateToolMutation.isPending,\n\n // Create tool operations\n createTool: createToolMutation.mutate,\n isCreatingTool: createToolMutation.isPending,\n\n // Delete tool operations\n deleteTool: deleteToolMutation.mutate,\n isDeletingTool: deleteToolMutation.isPending,\n\n // Manual refetch function\n refetch: toolsQuery.refetch,\n };\n};\n","// @ts-nocheck\n// React Query hooks for data fetching and mutation management\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\n// TrustGraph socket connection for API communication\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\n// Notification system for user feedback\nimport { useNotification } from \"../hooks/useNotification\";\n// Activity tracking for loading states\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing AI prompts (system prompt and prompt templates)\n * Provides CRUD operations for both the system prompt and user-defined prompt templates\n */\nexport const usePrompts = () => {\n // Socket connection for API calls\n const socket = useSocket();\n const connectionState = useConnectionState();\n // Query client for cache management\n const queryClient = useQueryClient();\n // Notification system for user feedback\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Query to fetch the system prompt configuration\n // System prompt defines the AI assistant's behavior and instructions\n const systemPromptQuery = useQuery({\n queryKey: [\"system-prompt\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"system\" }])\n .then((res) => {\n if (res[\"error\"]) {\n console.log(\"Error:\", res);\n throw res.error.message;\n }\n return JSON.parse(res.values[0].value);\n });\n },\n });\n\n // Query to fetch all prompt templates\n // First gets the template index (list of template IDs), then fetches each template's configuration\n const promptsQuery = useQuery({\n queryKey: [\"prompts\"],\n enabled: isSocketReady,\n queryFn: () => {\n // Step 1: Get the template index (array of template IDs)\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => {\n if (res[\"error\"]) {\n console.log(\"Error:\", res);\n throw res.error.message;\n }\n const promptIds = JSON.parse(res.values[0].value);\n\n // Step 2: Fetch configuration for each template using their IDs\n return socket\n .config()\n .getConfig(\n promptIds.map((id) => ({\n type: \"prompt\",\n key: \"template.\" + id,\n }))\n )\n .then((r) => {\n if (r[\"error\"]) {\n console.log(\"Error:\", r);\n throw r.error.message;\n }\n // Parse template configurations and pair them with their IDs\n const config = r.values.map((c) => JSON.parse(c.value));\n return promptIds.map((id, ix) => [id, config[ix]]);\n });\n });\n },\n });\n\n // Mutation for updating the system prompt\n // System prompt controls the AI assistant's base behavior and instructions\n const updateSystemPromptMutation = useMutation({\n mutationFn: ({ prompt, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"system\",\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the system prompt data after successful update\n queryClient.invalidateQueries({ queryKey: [\"system-prompt\"] });\n notify.success(\"System prompt updated\");\n },\n });\n\n // Mutation for updating an existing prompt template\n const updatePromptMutation = useMutation({\n mutationFn: ({ id, prompt, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template.\" + id,\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful update\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt updated\");\n },\n });\n\n // Mutation for creating a new prompt template\n // Updates both the template index and creates the template configuration\n const createPromptMutation = useMutation({\n mutationFn: ({ id, prompt, onSuccess }) => {\n // Step 1: Get current template index\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => JSON.parse(res.values[0].value))\n .then((existingIds) => {\n // Step 2: Add new template ID to the index\n const newIds = [...existingIds, id];\n // Step 3: Update both the template index and create the new template configuration\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template-index\",\n value: JSON.stringify(newIds),\n },\n {\n type: \"prompt\",\n key: \"template.\" + id,\n value: JSON.stringify(prompt),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful creation\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt created\");\n },\n });\n\n // Mutation for deleting a prompt template\n // Removes the template from both the index and deletes its configuration\n const deletePromptMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n // Step 1: Get current template index\n return socket\n .config()\n .getConfig([{ type: \"prompt\", key: \"template-index\" }])\n .then((res) => JSON.parse(res.values[0].value))\n .then((existingIds) => {\n // Step 2: Remove the template ID from the index\n const newIds = existingIds.filter((existingId) => existingId !== id);\n // Step 3: Update the template index\n return socket\n .config()\n .putConfig([\n {\n type: \"prompt\",\n key: \"template-index\",\n value: JSON.stringify(newIds),\n },\n ])\n .then(() => {\n // Step 4: Delete the template configuration\n return socket.config().deleteConfig([\n {\n type: \"prompt\",\n key: \"template.\" + id,\n },\n ]);\n })\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute callback if provided\n if (onSuccess) onSuccess();\n });\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Refresh the prompts list after successful deletion\n queryClient.invalidateQueries({ queryKey: [\"prompts\"] });\n notify.success(\"Prompt deleted\");\n },\n });\n\n // Track loading states for UI feedback\n useActivity(systemPromptQuery.isLoading, \"Loading system prompt\");\n useActivity(promptsQuery.isLoading, \"Loading prompts\");\n useActivity(updateSystemPromptMutation.isPending, \"Updating system prompt\");\n useActivity(updatePromptMutation.isPending, \"Updating prompt\");\n useActivity(createPromptMutation.isPending, \"Creating prompt\");\n useActivity(deletePromptMutation.isPending, \"Deleting prompt\");\n\n // Return the public API for the hook\n return {\n // System prompt data and state\n systemPrompt: systemPromptQuery.data, // The current system prompt configuration\n systemPromptLoading: systemPromptQuery.isLoading,\n systemPromptError: systemPromptQuery.error,\n\n // Prompt templates data and state\n prompts: promptsQuery.data || [], // Array of [id, promptConfig] pairs\n promptsLoading: promptsQuery.isLoading,\n promptsError: promptsQuery.error,\n\n // System prompt operations\n updateSystemPrompt: updateSystemPromptMutation.mutate,\n isUpdatingSystemPrompt: updateSystemPromptMutation.isPending,\n\n // Prompt template operations\n updatePrompt: updatePromptMutation.mutate,\n isUpdatingPrompt: updatePromptMutation.isPending,\n\n createPrompt: createPromptMutation.mutate,\n isCreatingPrompt: createPromptMutation.isPending,\n\n deletePrompt: deletePromptMutation.mutate,\n isDeletingPrompt: deletePromptMutation.isPending,\n\n // Manual refetch function for both queries\n refetch: () => {\n systemPromptQuery.refetch();\n promptsQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\nexport const useSchemas = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const schemasQuery = useQuery({\n queryKey: [\"schemas\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getValues(\"schema\")\n .then((values) => {\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n const updateSchemaMutation = useMutation({\n mutationFn: ({ id, schema, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"schema\",\n key: id,\n value: JSON.stringify(schema),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema updated\");\n },\n });\n\n const createSchemaMutation = useMutation({\n mutationFn: ({ id, schema, onSuccess }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"schema\",\n key: id,\n value: JSON.stringify(schema),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema created\");\n },\n });\n\n const deleteSchemaMutation = useMutation({\n mutationFn: ({ id, onSuccess }) => {\n return socket\n .config()\n .deleteConfig([\n {\n type: \"schema\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"schemas\"] });\n notify.success(\"Schema deleted\");\n },\n });\n\n useActivity(schemasQuery.isLoading, \"Loading schemas\");\n useActivity(updateSchemaMutation.isPending, \"Updating schema\");\n useActivity(createSchemaMutation.isPending, \"Creating schema\");\n useActivity(deleteSchemaMutation.isPending, \"Deleting schema\");\n\n return {\n schemas: schemasQuery.data || [],\n schemasLoading: schemasQuery.isLoading,\n schemasError: schemasQuery.error,\n\n updateSchema: updateSchemaMutation.mutate,\n isUpdatingSchema: updateSchemaMutation.isPending,\n\n createSchema: createSchemaMutation.mutate,\n isCreatingSchema: createSchemaMutation.isPending,\n\n deleteSchema: deleteSchemaMutation.mutate,\n isDeletingSchema: deleteSchemaMutation.isPending,\n\n refetch: () => {\n schemasQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\nexport interface OntologyMetadata {\n name: string;\n description: string;\n version: string;\n created: string;\n modified: string;\n creator: string;\n namespace: string;\n imports?: string[];\n}\n\nexport interface OWLClass {\n uri: string;\n type: \"owl:Class\";\n \"rdfs:label\"?: Array<{ value: string; lang?: string }>;\n \"rdfs:comment\"?: string;\n \"rdfs:subClassOf\"?: string;\n \"owl:equivalentClass\"?: string[];\n \"owl:disjointWith\"?: string[];\n \"dcterms:identifier\"?: string;\n}\n\nexport interface OWLBaseProperty {\n uri: string;\n \"rdfs:label\"?: Array<{ value: string; lang?: string }>;\n \"rdfs:domain\"?: string;\n \"rdfs:range\"?: string;\n \"rdfs:comment\"?: string;\n \"owl:functionalProperty\"?: boolean;\n \"owl:minCardinality\"?: number;\n \"owl:maxCardinality\"?: number;\n \"owl:cardinality\"?: number;\n \"rdfs:subPropertyOf\"?: string;\n}\n\nexport interface OWLObjectProperty extends OWLBaseProperty {\n type: \"owl:ObjectProperty\";\n \"owl:inverseOf\"?: string;\n \"owl:inverseFunctionalProperty\"?: boolean;\n}\n\nexport interface OWLDatatypeProperty extends OWLBaseProperty {\n type: \"owl:DatatypeProperty\";\n}\n\nexport interface Ontology {\n metadata: OntologyMetadata;\n classes: Record<string, OWLClass>;\n objectProperties: Record<string, OWLObjectProperty>;\n datatypeProperties: Record<string, OWLDatatypeProperty>;\n}\n\nexport const useOntologies = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const ontologiesQuery = useQuery({\n queryKey: [\"ontologies\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getValues(\"ontology\")\n .then((values) => {\n return values.map((item) => [item.key, JSON.parse(item.value)]);\n })\n .catch((err) => {\n console.log(\"Error:\", err);\n throw err;\n });\n },\n });\n\n const updateOntologyMutation = useMutation({\n mutationFn: ({\n id,\n ontology,\n onSuccess,\n }: {\n id: string;\n ontology: Ontology;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"ontology\",\n key: id,\n value: JSON.stringify(ontology),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology updated\");\n },\n });\n\n const createOntologyMutation = useMutation({\n mutationFn: ({\n id,\n ontology,\n onSuccess,\n }: {\n id: string;\n ontology: Ontology;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .putConfig([\n {\n type: \"ontology\",\n key: id,\n value: JSON.stringify(ontology),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology created\");\n },\n });\n\n const deleteOntologyMutation = useMutation({\n mutationFn: ({\n id,\n onSuccess,\n }: {\n id: string;\n onSuccess?: () => void;\n }) => {\n return socket\n .config()\n .deleteConfig([\n {\n type: \"ontology\",\n key: id,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"ontologies\"] });\n notify.success(\"Ontology deleted\");\n },\n });\n\n useActivity(ontologiesQuery.isLoading, \"Loading ontologies\");\n useActivity(updateOntologyMutation.isPending, \"Updating ontology\");\n useActivity(createOntologyMutation.isPending, \"Creating ontology\");\n useActivity(deleteOntologyMutation.isPending, \"Deleting ontology\");\n\n return {\n ontologies: ontologiesQuery.data || [],\n ontologiesLoading: ontologiesQuery.isLoading,\n ontologiesError: ontologiesQuery.error,\n\n updateOntology: updateOntologyMutation.mutate,\n isUpdatingOntology: updateOntologyMutation.isPending,\n\n createOntology: createOntologyMutation.mutate,\n isCreatingOntology: createOntologyMutation.isPending,\n\n deleteOntology: deleteOntologyMutation.mutate,\n isDeletingOntology: deleteOntologyMutation.isPending,\n\n refetch: () => {\n ontologiesQuery.refetch();\n },\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing knowledge core operations\n * Provides functionality for fetching, deleting, down/uploading cores\n * @returns {Object} Knowledge core state and operations\n */\nexport const useKnowledgeCores = () => {\n // WebSocket connection for communicating with the knowledge service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all knowledge cores\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"knowledge-cores\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .knowledge()\n .getKnowledgeCores()\n .then((cores) =>\n cores.map((x) => {\n return { id: x };\n })\n );\n },\n });\n\n /**\n * Mutation for deleting multiple knowledge cores\n * Executes parallel deletion requests and handles success/error states\n */\n const deleteKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, onSuccess }) => {\n const user = \"trustgraph\";\n\n // Execute deletion requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().deleteKgCore(id, user))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate documents cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"knowledge-cores\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for loading multiple knowledge cores\n * Executes parallel load requests with specified flow\n */\n const loadKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, flow, onSuccess }) => {\n // Execute load requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().loadKgCore(id, flow))\n ).then(() => {\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Show success notification\n notify.success(\"Knowledge cores loaded successfully\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading knowledge cores\");\n\n // Return knowledge core state and operations for use in components\n return {\n // Knowledge cores\n knowledgeCores: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Knowledge core deletion operations\n deleteKnowledgeCores: deleteKnowledgeCoresMutation.mutate,\n isDeleting: deleteKnowledgeCoresMutation.isPending,\n deleteError: deleteKnowledgeCoresMutation.error,\n\n // Knowledge core loading operations\n loadKnowledgeCores: loadKnowledgeCoresMutation.mutate,\n isLoadingCores: loadKnowledgeCoresMutation.isPending,\n loadError: loadKnowledgeCoresMutation.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQueryClient, useQuery, useMutation } from \"@tanstack/react-query\";\n\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Custom hook for managing token cost operations\n * Provides functionality for fetching, deleting, and updating token costs\n * for AI models\n * @returns {Object} Token cost state and operations\n */\nexport const useTokenCosts = () => {\n // WebSocket connection for communicating with the configuration service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all token costs\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"token-cost\"],\n enabled: isSocketReady,\n queryFn: () => {\n return socket\n .config()\n .getTokenCosts()\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n return x;\n });\n },\n });\n\n /**\n * Mutation for deleting a specific model's token cost\n * Removes the token cost configuration for a given model\n */\n const deleteTokenCostMutation = useMutation({\n mutationFn: ({ model, onSuccess }) => {\n // Delete the token cost configuration for the specified model\n return socket\n .config()\n .deleteConfig([\n {\n type: \"token-cost\",\n key: model,\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate cache to trigger refetch\n queryClient.invalidateQueries({ queryKey: [\"token-cost\"] });\n // Show success notification\n notify.success(\"Successful deletion\");\n },\n });\n\n /**\n * Mutation for updating token cost for a specific model\n * Converts per-million token prices to per-token prices and saves\n * configuration\n */\n const updateTokenCostMutation = useMutation({\n mutationFn: ({ model, input_price, output_price, onSuccess }) => {\n // Convert per-million token prices to per-token prices\n const tokenCosts = {\n input_price: input_price / 1000000,\n output_price: output_price / 1000000,\n };\n\n // Save the token cost configuration for the specified model\n return socket\n .config()\n .putConfig([\n {\n type: \"token-cost\",\n key: model,\n value: JSON.stringify(tokenCosts),\n },\n ])\n .then((x) => {\n if (x[\"error\"]) {\n console.log(\"Error:\", x);\n throw x.error.message;\n }\n // Execute success callback if provided\n if (onSuccess) onSuccess();\n });\n },\n onError: (err) => {\n console.log(\"Error:\", err);\n // Show error notification to user\n notify.error(err.toString());\n },\n onSuccess: () => {\n // Invalidate cache to refresh the token costs list\n queryClient.invalidateQueries({ queryKey: [\"token-cost\"] });\n notify.success(\"Token costs updated\");\n },\n });\n\n // Show loading indicators for long-running operations\n useActivity(query.isLoading, \"Loading token costs\");\n useActivity(deleteTokenCostMutation.isPending, \"Deleting token cost\");\n useActivity(updateTokenCostMutation.isPending, \"Updating token cost\");\n\n // Return token cost state and operations for use in components\n return {\n // Token cost query state\n tokenCosts: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n\n // Token cost deletion operations\n deleteTokenCost: deleteTokenCostMutation.mutate,\n isDeleting: deleteTokenCostMutation.isPending,\n deleteError: deleteTokenCostMutation.error,\n\n // Token cost update operations\n updateTokenCost: updateTokenCostMutation.mutate,\n isSubmitting: updateTokenCostMutation.isPending,\n submitError: updateTokenCostMutation.error,\n\n // Manual refetch function\n refetch: query.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { EnumOption } from \"../model/llm-models\";\n\nexport const useLLMModels = () => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n // Fetch the llm-model parameter type\n const paramTypesQuery = useQuery({\n queryKey: [\"llm-models\"],\n enabled: isSocketReady,\n queryFn: async () => {\n const response = await socket\n .config()\n .getConfig([{ type: \"parameter-type\", key: \"llm-model\" }]);\n\n if (!response.values || response.values.length === 0) {\n return [];\n }\n\n const item = response.values[0];\n const paramDef = JSON.parse(item.value);\n\n return [\n {\n name: item.key,\n type: paramDef.type || \"string\",\n description: paramDef.description || item.key,\n default: paramDef.default || \"\",\n enum: paramDef.enum || [],\n required: paramDef.required || false,\n },\n ];\n },\n });\n\n // Update a parameter type's enum and default\n const updateMutation = useMutation({\n mutationFn: async ({\n name,\n enum: enumOptions,\n default: defaultValue,\n }: {\n name: string;\n enum: EnumOption[];\n default: string;\n }) => {\n // Get current parameter type to preserve other fields\n const currentParam = paramTypesQuery.data?.find(\n (pt) => pt.name === name\n );\n if (!currentParam) {\n throw new Error(`Parameter type ${name} not found`);\n }\n\n // Update only enum and default, preserve other fields\n const updatedDef = {\n type: currentParam.type,\n description: currentParam.description,\n required: currentParam.required,\n enum: enumOptions,\n default: defaultValue,\n };\n\n await socket.config().putConfig([\n {\n type: \"parameter-type\",\n key: name,\n value: JSON.stringify(updatedDef),\n },\n ]);\n },\n onError: (err) => {\n notify.error(err.toString());\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"llm-models\"] });\n notify.success(\"Models updated successfully\");\n },\n });\n\n useActivity(paramTypesQuery.isLoading, \"Loading LLM models\");\n useActivity(updateMutation.isPending, \"Updating models\");\n\n return {\n parameterTypes: paramTypesQuery.data || [],\n isLoading: paramTypesQuery.isLoading,\n isError: paramTypesQuery.isError,\n error: paramTypesQuery.error,\n\n updateParameter: updateMutation.mutate,\n isUpdating: updateMutation.isPending,\n\n refetch: paramTypesQuery.refetch,\n };\n};\n","// @ts-nocheck\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n/**\n * Flow blueprint definition interface\n */\nexport interface FlowBlueprintDefinition {\n id?: string;\n class: {\n [key: string]: {\n [queueName: string]: string;\n };\n };\n flow: {\n [key: string]: {\n [queueName: string]: string;\n };\n };\n interfaces: {\n [key: string]:\n | string\n | {\n request: string;\n response: string;\n };\n };\n description?: string;\n tags?: string[];\n}\n\n/**\n * Custom hook for managing flow blueprint operations\n * Provides functionality for fetching, creating, updating, and deleting flow blueprintes\n * @returns {Object} Flow blueprint state and operations\n */\nexport const useFlowBlueprints = () => {\n // WebSocket connection for communicating with the config service\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n // React Query client for cache management and invalidation\n const queryClient = useQueryClient();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n // Only enable queries when socket is connected and ready\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching all flow blueprintes\n * Uses React Query for caching and background refetching\n */\n const query = useQuery({\n queryKey: [\"flow-blueprints\"],\n enabled: isSocketReady,\n staleTime: 0, // Force fresh data\n gcTime: 0, // Don't cache (React Query v5 uses gcTime instead of cacheTime)\n refetchOnMount: \"always\",\n queryFn: async (): Promise<FlowBlueprintDefinition[]> => {\n try {\n const response = await socket.config().getConfigAll();\n\n // Handle both array and object responses\n const config = response.config[\"flow-blueprint\"];\n\n if (Array.isArray(config)) {\n // If it's already an array, check if it's an array of [key, value] pairs\n if (\n config.length > 0 &&\n Array.isArray(config[0]) &&\n config[0].length === 2\n ) {\n // It's an array of [id, flowBlueprint] pairs - convert to objects\n const converted = config.map(([id, flowBlueprintData]) => {\n let flowBlueprint = flowBlueprintData;\n // If the flowBlueprint is a JSON string, parse it\n if (typeof flowBlueprintData === \"string\") {\n try {\n flowBlueprint = JSON.parse(flowBlueprintData);\n } catch (error) {\n console.error(\n `Failed to parse flow blueprint JSON for ${id}:`,\n error\n );\n flowBlueprint = flowBlueprintData;\n }\n }\n return {\n id,\n ...(flowBlueprint as Omit<FlowBlueprintDefinition, \"id\">),\n };\n });\n return converted;\n } else {\n // It's already an array of flow blueprint objects\n return config;\n }\n } else if (config && typeof config === \"object\") {\n // Convert object to array of flow blueprintes\n const converted = Object.entries(config).map(\n ([id, flowBlueprintData]) => {\n let flowBlueprint = flowBlueprintData;\n // If the flowBlueprint is a JSON string, parse it\n if (typeof flowBlueprintData === \"string\") {\n try {\n flowBlueprint = JSON.parse(flowBlueprintData);\n } catch (error) {\n console.error(\n `Failed to parse flow blueprint JSON for ${id}:`,\n error\n );\n flowBlueprint = flowBlueprintData;\n }\n }\n return {\n id,\n ...(flowBlueprint as Omit<FlowBlueprintDefinition, \"id\">),\n };\n }\n );\n return converted;\n }\n\n return [];\n } catch (error) {\n console.error(\"Failed to fetch flow blueprintes:\", error);\n throw new Error(\"Failed to fetch flow blueprintes\");\n }\n },\n });\n\n // Track loading state\n useActivity(query.isLoading, \"Loading flow blueprintes\");\n\n /**\n * Mutation for creating a new flow blueprint\n */\n const createMutation = useMutation({\n mutationFn: async ({\n id,\n flowBlueprint,\n }: {\n id: string;\n flowBlueprint: Omit<FlowBlueprintDefinition, \"id\">;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n value: JSON.stringify(flowBlueprint),\n },\n ]);\n\n return {\n id,\n ...flowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to create flow blueprint ${id}:`, error);\n throw new Error(`Failed to create flow blueprint: ${id}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n // Invalidate and refetch flow blueprintes\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${flowBlueprint.id}\" created successfully`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to create flow blueprint: ${error.message}`);\n },\n });\n\n /**\n * Mutation for updating an existing flow blueprint\n */\n const updateMutation = useMutation({\n mutationFn: async ({\n id,\n flowBlueprint,\n }: {\n id: string;\n flowBlueprint: Partial<Omit<FlowBlueprintDefinition, \"id\">>;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n // Get current flow blueprint to merge changes\n const currentResponse = await socket.config().getConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n },\n ]);\n\n const updatedFlowBlueprint = {\n ...currentResponse.config[\"flow-blueprints\"][id],\n ...flowBlueprint,\n };\n\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: id,\n value: JSON.stringify(updatedFlowBlueprint),\n },\n ]);\n\n return {\n id,\n ...updatedFlowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to update flow blueprint ${id}:`, error);\n throw new Error(`Failed to update flow blueprint: ${id}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n // Update cache\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${flowBlueprint.id}\" updated successfully`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to update flow blueprint: ${error.message}`);\n },\n });\n\n /**\n * Mutation for deleting a flow blueprint\n */\n const deleteMutation = useMutation({\n mutationFn: async (id: string): Promise<void> => {\n try {\n await socket.flows().deleteFlowBlueprint(id);\n } catch (error) {\n console.error(`Failed to delete flow blueprint ${id}:`, error);\n // Re-throw the original error to preserve the API error message\n throw error;\n }\n },\n onSuccess: (_, id) => {\n // Remove from cache\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint \"${id}\" deleted successfully`);\n },\n onError: (error: Error) => {\n // Show the actual API error message without additional prefixes\n notify.error(\n error.message || \"Unknown error occurred while deleting flow blueprint\"\n );\n },\n });\n\n /**\n * Mutation for duplicating a flow blueprint\n */\n const duplicateMutation = useMutation({\n mutationFn: async ({\n sourceId,\n targetId,\n }: {\n sourceId: string;\n targetId: string;\n }): Promise<FlowBlueprintDefinition> => {\n try {\n // Get source flow blueprint\n const sourceResponse = await socket.config().getConfig([\n {\n type: \"flow-blueprints\",\n key: sourceId,\n },\n ]);\n\n const sourceFlowBlueprint = sourceResponse.config[\"flow-blueprints\"][\n sourceId\n ] as Omit<FlowBlueprintDefinition, \"id\">;\n\n // Create duplicate with updated description\n const duplicatedFlowBlueprint = {\n ...sourceFlowBlueprint,\n description: `${sourceFlowBlueprint.description || sourceId} (Copy)`,\n tags: [...(sourceFlowBlueprint.tags || []), \"copy\"],\n };\n\n // Save as new flow blueprint\n await socket.config().putConfig([\n {\n type: \"flow-blueprints\",\n key: targetId,\n value: JSON.stringify(duplicatedFlowBlueprint),\n },\n ]);\n\n return {\n id: targetId,\n ...duplicatedFlowBlueprint,\n };\n } catch (error) {\n console.error(`Failed to duplicate flow blueprint ${sourceId}:`, error);\n throw new Error(`Failed to duplicate flow blueprint: ${sourceId}`);\n }\n },\n onSuccess: (flowBlueprint) => {\n queryClient.invalidateQueries({ queryKey: [\"flow-blueprints\"] });\n\n notify.success(`Flow blueprint duplicated as \"${flowBlueprint.id}\"`);\n },\n onError: (error: Error) => {\n notify.error(`Failed to duplicate flow blueprint: ${error.message}`);\n },\n });\n\n // Track mutation loading states\n useActivity(createMutation.isPending, \"Creating flow blueprint\");\n useActivity(updateMutation.isPending, \"Updating flow blueprint\");\n useActivity(deleteMutation.isPending, \"Deleting flow blueprint\");\n useActivity(duplicateMutation.isPending, \"Duplicating flow blueprint\");\n\n return {\n // Query state\n flowBlueprints: query.data || [],\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n\n // Utilities\n getFlowBlueprint: (id: string): FlowBlueprintDefinition | undefined => {\n const found = query.data?.find((fc) => {\n return fc.id === id;\n });\n return found;\n },\n exists: (id: string): boolean => {\n return query.data?.some((fc) => fc.id === id) ?? false;\n },\n\n // Mutations\n createFlowBlueprint: createMutation.mutateAsync,\n updateFlowBlueprint: updateMutation.mutateAsync,\n deleteFlowBlueprint: deleteMutation.mutateAsync,\n duplicateFlowBlueprint: duplicateMutation.mutateAsync,\n\n // Mutation states\n isCreating: createMutation.isPending,\n isUpdating: updateMutation.isPending,\n isDeleting: deleteMutation.isPending,\n isDuplicating: duplicateMutation.isPending,\n };\n};\n\n/**\n * Generate a unique flow blueprint ID\n */\nexport const generateFlowBlueprintId = (baseName = \"flow-class\"): string => {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${baseName}-${timestamp}-${random}`;\n};\n\n/**\n * Validate flow blueprint ID format\n */\nexport const isValidFlowBlueprintId = (id: string): boolean => {\n // Flow blueprint IDs should be kebab-case, alphanumeric with hyphens\n return /^[a-z0-9-]+$/.test(id) && id.length >= 3 && id.length <= 50;\n};\n","// @ts-nocheck\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useActivity } from \"../hooks/useActivity\";\n\n// Parameter schema definition\ninterface ParameterSchema {\n type: \"string\" | \"number\" | \"integer\" | \"boolean\";\n description?: string;\n default?: unknown;\n enum?: EnumOption[] | string[];\n minimum?: number;\n maximum?: number;\n pattern?: string;\n required?: boolean;\n helper?: string;\n placeholder?: string;\n}\n\n// Rich enum option structure\ninterface EnumOption {\n id: string;\n description: string;\n}\n\n// Parameter definitions fetched from config\ninterface ParameterDefinitions {\n [definitionName: string]: ParameterSchema;\n}\n\n// Flow parameter metadata (stored in flow class)\ninterface FlowParameterMetadata {\n description: string;\n order: number;\n type: string; // Reference to parameter definition name\n advanced?: boolean; // If true, parameter is shown in collapsible advanced section\n \"controlled-by\"?: string; // Name of parameter that controls this parameter's value\n}\n\n/**\n * Custom hook for fetching parameter definitions for a flow blueprint\n * @param flowBlueprintName - The name of the flow blueprint to fetch parameters for\n * @returns Parameter definitions, mapping, and loading states\n */\nexport const useFlowParameters = (flowBlueprintName?: string) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n /**\n * Query for fetching parameter definitions for a flow blueprint\n */\n const parametersQuery = useQuery({\n queryKey: [\"flow-parameters\", flowBlueprintName],\n enabled: isSocketReady && !!flowBlueprintName,\n queryFn: async () => {\n if (!flowBlueprintName) return null;\n\n try {\n // Get flow blueprint definition first\n const flowBlueprint = await socket.flows().getFlowBlueprint(flowBlueprintName);\n\n // Extract parameter metadata with new structure\n const parameterMetadata: { [key: string]: FlowParameterMetadata } =\n flowBlueprint.parameters || {};\n if (Object.keys(parameterMetadata).length === 0) {\n return {\n parameterDefinitions: {},\n parameterMapping: {},\n parameterMetadata: {},\n };\n }\n\n // Create mapping from flow param names to definition names\n const parameterMapping: { [key: string]: string } = {};\n Object.entries(parameterMetadata).forEach(\n ([flowParamName, metadata]) => {\n parameterMapping[flowParamName] = metadata.type;\n }\n );\n\n // Fetch parameter definitions from config\n const definitionNames = Object.values(parameterMapping);\n const configKeys = definitionNames.map((name) => ({\n type: \"parameter-type\",\n key: name,\n }));\n\n const configResponse = await socket.config().getConfig(configKeys);\n const parameterDefinitions: ParameterDefinitions = {};\n\n // Parse config response to get parameter definitions\n configResponse.values?.forEach((item) => {\n if (item.type === \"parameter-type\") {\n try {\n parameterDefinitions[item.key] = JSON.parse(item.value);\n } catch (error) {\n console.error(\n `Failed to parse parameter definition for ${item.key}:`,\n error\n );\n }\n }\n });\n\n return {\n parameterDefinitions,\n parameterMapping, // Maps flow param names to definition names\n parameterMetadata, // Flow-specific metadata with description, order, type\n };\n } catch (error) {\n console.error(\"Failed to fetch flow parameters:\", error);\n throw error;\n }\n },\n });\n\n useActivity(parametersQuery.isLoading, \"Loading flow parameters\");\n\n return {\n parameterDefinitions: parametersQuery.data?.parameterDefinitions || {},\n parameterMapping: parametersQuery.data?.parameterMapping || {},\n parameterMetadata: parametersQuery.data?.parameterMetadata || {},\n isLoading: parametersQuery.isLoading,\n isError: parametersQuery.isError,\n error: parametersQuery.error,\n };\n};\n\n/**\n * Custom hook for parameter validation\n * @param parameterDefinitions - The parameter schema definitions\n * @param parameterMapping - Maps flow param names to definition names\n * @param parameterMetadata - Flow parameter metadata including controlled-by relationships\n * @param parameterValues - Current parameter values\n * @returns Validation result with isValid flag and errors object\n */\nexport const useParameterValidation = (\n parameterDefinitions: ParameterDefinitions,\n parameterMapping: { [key: string]: string },\n parameterMetadata: { [key: string]: FlowParameterMetadata },\n parameterValues: { [key: string]: unknown }\n) => {\n return useMemo(() => {\n const errors: { [key: string]: string } = {};\n let isValid = true;\n\n // Resolve parameter value considering controlled-by relationships\n const resolveParameterValue = (\n paramName: string,\n currentValues: { [key: string]: unknown }\n ): unknown => {\n const metadata = parameterMetadata[paramName];\n const schema = parameterDefinitions[parameterMapping[paramName]];\n\n // If parameter has explicit value, use it\n if (\n currentValues[paramName] !== undefined &&\n currentValues[paramName] !== \"\"\n ) {\n return currentValues[paramName];\n }\n\n // If parameter is controlled by another parameter, inherit its value\n if (metadata && metadata[\"controlled-by\"]) {\n const controllerName = metadata[\"controlled-by\"];\n const controllerValue = resolveParameterValue(\n controllerName,\n currentValues\n );\n if (controllerValue !== undefined && controllerValue !== \"\") {\n return controllerValue;\n }\n }\n\n // Fall back to default value from schema\n return schema?.default ?? \"\";\n };\n\n Object.entries(parameterMapping).forEach(\n ([flowParamName, definitionName]) => {\n const schema = parameterDefinitions[definitionName];\n if (!schema) return;\n\n const resolvedValue = resolveParameterValue(\n flowParamName,\n parameterValues\n );\n const value = resolvedValue;\n\n // Check required fields\n if (schema.required && (value === undefined || value === \"\")) {\n errors[flowParamName] = `${flowParamName} is required`;\n isValid = false;\n return;\n }\n\n // Skip validation for empty optional fields\n if (value === undefined || value === \"\") {\n return;\n }\n\n // Type validation\n if (schema.type === \"number\" || schema.type === \"integer\") {\n const numValue =\n typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(numValue)) {\n errors[flowParamName] = `${flowParamName} must be a valid number`;\n isValid = false;\n return;\n }\n\n if (schema.type === \"integer\" && !Number.isInteger(numValue)) {\n errors[flowParamName] = `${flowParamName} must be an integer`;\n isValid = false;\n return;\n }\n\n // Range validation\n if (schema.minimum !== undefined && numValue < schema.minimum) {\n errors[flowParamName] =\n `${flowParamName} must be at least ${schema.minimum}`;\n isValid = false;\n }\n if (schema.maximum !== undefined && numValue > schema.maximum) {\n errors[flowParamName] =\n `${flowParamName} must be at most ${schema.maximum}`;\n isValid = false;\n }\n }\n\n // Enum validation\n if (schema.enum && schema.enum.length > 0) {\n const validValues = schema.enum.map((option) =>\n typeof option === \"object\" ? option.id : option\n );\n if (!validValues.includes(value)) {\n errors[flowParamName] =\n `${flowParamName} must be one of: ${validValues.join(\", \")}`;\n isValid = false;\n }\n }\n\n // Pattern validation for strings\n if (schema.pattern && schema.type === \"string\") {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value.toString())) {\n errors[flowParamName] = `${flowParamName} format is invalid`;\n isValid = false;\n }\n }\n }\n );\n\n return { isValid, errors };\n }, [\n parameterDefinitions,\n parameterMapping,\n parameterMetadata,\n parameterValues,\n ]);\n};\n\nexport type {\n ParameterSchema,\n EnumOption,\n ParameterDefinitions,\n FlowParameterMetadata,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSettings } from \"./settings\";\nimport { Value } from \"@trustgraph/client\";\nimport { RDFS_LABEL } from \"../utils/knowledge-graph\";\n\n/**\n * Standard URI to label mappings\n * These common URIs are mapped directly without knowledge graph queries\n */\nconst STANDARD_URI_LABELS: Record<string, string> = {\n \"https://schema.org/subjectOf\": \"subject of\",\n \"https://schema.org/description\": \"description\",\n \"https://schema.org/copyrightHolder\": \"copyright holder\",\n \"https://schema.org/copyrightNotice\": \"copyright notice\",\n \"https://schema.org/keywords\": \"keywords\",\n \"https://schema.org/name\": \"Name\",\n \"https://schema.org/author\": \"author\",\n \"https://schema.org/publication\": \"publication\",\n \"https://schema.org/url\": \"url\",\n \"http://www.w3.org/2004/02/skos/core#definition\": \"Definition\",\n \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\": \"type\",\n};\n\n/**\n * Get label for a URI, checking standard mappings first\n * @param uri - The URI to get a label for\n * @returns The label if found in standard mappings, undefined otherwise\n */\nconst getStandardLabel = (uri: string): string | undefined => {\n return STANDARD_URI_LABELS[uri];\n};\n\n/**\n * Custom hook for managing node details operations\n * Provides functionality for fetching triples and processing outbound relationships\n * for a selected graph node\n * @param nodeId - The ID of the selected node\n * @param flowId - The flow ID to use for the query\n * @returns {Object} Node details state and processed data\n */\nexport const useNodeDetails = (nodeId: string | undefined, flowId: string) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n // Settings for default collection\n const { settings } = useSettings();\n\n // Hook for displaying user notifications\n const notify = useNotification();\n\n /**\n * Query for fetching outbound triples where the node is the subject\n * Uses React Query for caching and background refetching\n */\n const outboundTriplesQuery = useQuery({\n queryKey: [\"node-details-outbound-triples\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const subjectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n undefined,\n undefined,\n 20,\n settings.collection\n )\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n return triples;\n })\n .catch((err) => {\n console.error(\"Error fetching outbound triples:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Query for fetching inbound triples where the node is the object\n * Uses React Query for caching and background refetching\n */\n const inboundTriplesQuery = useQuery({\n queryKey: [\"node-details-inbound-triples\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const objectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n undefined,\n undefined,\n objectValue,\n 20,\n settings.collection\n )\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n return triples;\n })\n .catch((err) => {\n console.error(\"Error fetching inbound triples:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Query for fetching properties where the node is the subject and object is a literal\n * Uses React Query for caching and background refetching\n */\n const propertiesQuery = useQuery({\n queryKey: [\"node-details-properties\", { nodeId, flowId }],\n queryFn: () => {\n if (!nodeId) {\n throw new Error(\"Node ID is required\");\n }\n\n const subjectValue: Value = { v: nodeId, e: true };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n undefined,\n undefined,\n 50,\n settings.collection\n ) // More limit for properties\n .then((triples) => {\n if (!Array.isArray(triples)) {\n console.error(\"Expected triples array, got:\", triples);\n throw new Error(\"Invalid triples response\");\n }\n // Filter for properties (where o.e === false)\n return triples.filter((triple) => triple.o && triple.o.e === false);\n })\n .catch((err) => {\n console.error(\"Error fetching properties:\", err);\n notify.error(err);\n throw err;\n });\n },\n enabled: !!nodeId && !!flowId,\n });\n\n /**\n * Process outbound triples to extract navigable relationships\n * Filters for entity relationships (o.e === true) and removes duplicates\n */\n const outboundRelationships = useMemo(() => {\n if (!outboundTriplesQuery.data) return [];\n\n // Filter for entity relationships and extract unique predicates\n const uniqueRelationships = new Set<string>();\n\n outboundTriplesQuery.data.forEach((triple) => {\n // Check if object is an entity (o.e === true)\n if (triple.o && triple.o.e === true && triple.p && triple.p.v) {\n uniqueRelationships.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueRelationships);\n }, [outboundTriplesQuery.data]);\n\n /**\n * Process inbound triples to extract navigable relationships\n * Filters for entity relationships (s.e === true) and removes duplicates\n */\n const inboundRelationships = useMemo(() => {\n if (!inboundTriplesQuery.data) return [];\n\n // Filter for entity relationships and extract unique predicates\n const uniqueRelationships = new Set<string>();\n\n inboundTriplesQuery.data.forEach((triple) => {\n // Check if subject is an entity (s.e === true)\n if (triple.s && triple.s.e === true && triple.p && triple.p.v) {\n uniqueRelationships.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueRelationships);\n }, [inboundTriplesQuery.data]);\n\n /**\n * Process properties to extract unique property URIs\n * Properties are triples where o.e === false (literals)\n */\n const propertyURIs = useMemo(() => {\n if (!propertiesQuery.data) return [];\n\n // Extract unique property predicates\n const uniqueProperties = new Set<string>();\n\n propertiesQuery.data.forEach((triple) => {\n if (triple.p && triple.p.v) {\n uniqueProperties.add(triple.p.v);\n }\n });\n\n // Convert Set to array\n return Array.from(uniqueProperties);\n }, [propertiesQuery.data]);\n\n /**\n * Fetch labels for outbound relationship URIs\n * Uses dependent query that only runs when outbound relationships are available\n */\n const outboundLabelsQuery = useQuery({\n queryKey: [\n \"relationship-labels-outbound\",\n { nodeId, flowId, relationships: outboundRelationships },\n ],\n queryFn: async () => {\n if (!outboundRelationships.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each relationship URI\n await Promise.all(\n outboundRelationships.map(async (relationshipURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(relationshipURI);\n if (standardLabel) {\n labelMap[relationshipURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: relationshipURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[relationshipURI] = labelTriples[0].o.v;\n } else {\n labelMap[relationshipURI] = relationshipURI;\n }\n } catch (error) {\n console.warn(\n `Failed to fetch label for ${relationshipURI}:`,\n error\n );\n labelMap[relationshipURI] = relationshipURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && outboundRelationships.length > 0,\n });\n\n /**\n * Fetch labels for inbound relationship URIs\n * Uses dependent query that only runs when inbound relationships are available\n */\n const inboundLabelsQuery = useQuery({\n queryKey: [\n \"relationship-labels-inbound\",\n { nodeId, flowId, relationships: inboundRelationships },\n ],\n queryFn: async () => {\n if (!inboundRelationships.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each relationship URI\n await Promise.all(\n inboundRelationships.map(async (relationshipURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(relationshipURI);\n if (standardLabel) {\n labelMap[relationshipURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: relationshipURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[relationshipURI] = labelTriples[0].o.v;\n } else {\n labelMap[relationshipURI] = relationshipURI;\n }\n } catch (error) {\n console.warn(\n `Failed to fetch label for ${relationshipURI}:`,\n error\n );\n labelMap[relationshipURI] = relationshipURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && inboundRelationships.length > 0,\n });\n\n /**\n * Fetch labels for property URIs\n * Uses dependent query that only runs when properties are available\n */\n const propertyLabelsQuery = useQuery({\n queryKey: [\n \"property-labels\",\n { nodeId, flowId, properties: propertyURIs },\n ],\n queryFn: async () => {\n if (!propertyURIs.length) return {};\n\n const labelMap: Record<string, string> = {};\n\n // Fetch labels for each property URI\n await Promise.all(\n propertyURIs.map(async (propertyURI) => {\n // Check standard mappings first\n const standardLabel = getStandardLabel(propertyURI);\n if (standardLabel) {\n labelMap[propertyURI] = standardLabel;\n return;\n }\n\n // If not in standard mappings, query the knowledge graph\n try {\n const subjectValue: Value = { v: propertyURI, e: true };\n const predicateValue: Value = { v: RDFS_LABEL, e: true };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectValue,\n predicateValue,\n undefined,\n 1,\n settings.collection\n );\n\n // Extract label from the first result, or use URI as fallback\n if (labelTriples && labelTriples.length > 0 && labelTriples[0].o) {\n labelMap[propertyURI] = labelTriples[0].o.v;\n } else {\n labelMap[propertyURI] = propertyURI;\n }\n } catch (error) {\n console.warn(`Failed to fetch label for ${propertyURI}:`, error);\n labelMap[propertyURI] = propertyURI;\n }\n })\n );\n\n return labelMap;\n },\n enabled: !!nodeId && !!flowId && propertyURIs.length > 0,\n });\n\n /**\n * Combine relationship URIs with their labels\n */\n const outboundRelationshipsWithLabels = useMemo(() => {\n if (!outboundLabelsQuery.data) {\n return outboundRelationships.map((uri) => ({ uri, label: uri }));\n }\n\n return outboundRelationships.map((uri) => ({\n uri,\n label: outboundLabelsQuery.data[uri] || uri,\n }));\n }, [outboundRelationships, outboundLabelsQuery.data]);\n\n const inboundRelationshipsWithLabels = useMemo(() => {\n if (!inboundLabelsQuery.data) {\n return inboundRelationships.map((uri) => ({ uri, label: uri }));\n }\n\n return inboundRelationships.map((uri) => ({\n uri,\n label: inboundLabelsQuery.data[uri] || uri,\n }));\n }, [inboundRelationships, inboundLabelsQuery.data]);\n\n /**\n * Combine properties with their labels and values\n * Creates array of {predicate: {uri, label}, value} objects\n * Excludes label properties since they're already displayed at the top\n */\n const propertiesWithLabels = useMemo(() => {\n if (!propertiesQuery.data) return [];\n\n return propertiesQuery.data\n .filter((triple) => {\n // Exclude label properties (RDFS_LABEL) since node label is already shown\n return triple.p?.v !== RDFS_LABEL;\n })\n .map((triple) => ({\n predicate: {\n uri: triple.p?.v || \"\",\n label:\n propertyLabelsQuery.data?.[triple.p?.v || \"\"] || triple.p?.v || \"\",\n },\n value: triple.o?.v || \"\",\n }));\n }, [propertiesQuery.data, propertyLabelsQuery.data]);\n\n // Show loading indicators for long-running operations\n useActivity(\n outboundTriplesQuery.isLoading ||\n inboundTriplesQuery.isLoading ||\n propertiesQuery.isLoading ||\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n \"Loading node details\"\n );\n\n // Return node details state and operations for use in components\n return {\n // Raw triples data\n outboundTriples: outboundTriplesQuery.data,\n inboundTriples: inboundTriplesQuery.data,\n properties: propertiesQuery.data,\n\n // Loading states\n triplesLoading:\n outboundTriplesQuery.isLoading || inboundTriplesQuery.isLoading,\n propertiesLoading: propertiesQuery.isLoading,\n labelsLoading:\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n isLoading:\n outboundTriplesQuery.isLoading ||\n inboundTriplesQuery.isLoading ||\n propertiesQuery.isLoading ||\n outboundLabelsQuery.isLoading ||\n inboundLabelsQuery.isLoading ||\n propertyLabelsQuery.isLoading,\n\n outboundTriplesLoading: outboundTriplesQuery.isLoading,\n inboundTriplesLoading: inboundTriplesQuery.isLoading,\n propertiesQueryLoading: propertiesQuery.isLoading,\n outboundLabelsLoading: outboundLabelsQuery.isLoading,\n inboundLabelsLoading: inboundLabelsQuery.isLoading,\n propertyLabelsLoading: propertyLabelsQuery.isLoading,\n\n // Error states\n triplesError: outboundTriplesQuery.isError || inboundTriplesQuery.isError,\n propertiesError: propertiesQuery.isError,\n labelsError:\n outboundLabelsQuery.isError ||\n inboundLabelsQuery.isError ||\n propertyLabelsQuery.isError,\n hasError:\n outboundTriplesQuery.isError ||\n inboundTriplesQuery.isError ||\n propertiesQuery.isError ||\n outboundLabelsQuery.isError ||\n inboundLabelsQuery.isError ||\n propertyLabelsQuery.isError,\n\n outboundTriplesError: outboundTriplesQuery.isError,\n inboundTriplesError: inboundTriplesQuery.isError,\n outboundLabelsError: outboundLabelsQuery.isError,\n inboundLabelsError: inboundLabelsQuery.isError,\n\n // Error messages\n outboundTriplesErrorMessage: outboundTriplesQuery.error,\n inboundTriplesErrorMessage: inboundTriplesQuery.error,\n propertiesErrorMessage: propertiesQuery.error,\n outboundLabelsErrorMessage: outboundLabelsQuery.error,\n inboundLabelsErrorMessage: inboundLabelsQuery.error,\n propertyLabelsErrorMessage: propertyLabelsQuery.error,\n\n // Processed data - URIs only (for backward compatibility)\n outboundRelationships,\n inboundRelationships,\n propertyURIs,\n\n // Processed data - with labels\n outboundRelationshipsWithLabels,\n inboundRelationshipsWithLabels,\n propertiesWithLabels,\n\n // Manual refetch functions\n refetchOutbound: () => {\n outboundTriplesQuery.refetch();\n outboundLabelsQuery.refetch();\n },\n refetchInbound: () => {\n inboundTriplesQuery.refetch();\n inboundLabelsQuery.refetch();\n },\n refetchProperties: () => {\n propertiesQuery.refetch();\n propertyLabelsQuery.refetch();\n },\n refetch: () => {\n outboundTriplesQuery.refetch();\n inboundTriplesQuery.refetch();\n propertiesQuery.refetch();\n outboundLabelsQuery.refetch();\n inboundLabelsQuery.refetch();\n propertyLabelsQuery.refetch();\n },\n };\n};\n"],"names":["createContext","_jsx","useContext","create","useEffect","useQueryClient","useQuery","useMutation","useSocket","useConnectionState","RDFS_LABEL","uuidv4","useState","useMemo"],"mappings":"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"}
|