@trustgraph/react-state 1.7.1 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","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/explainability-store.ts","../src/utils/explainability.ts","../src/state/provenance.ts","../src/state/explainability.ts","../src/state/chat-session.ts","../src/state/structured-query.ts","../src/state/row-embeddings-query.ts","../src/state/document-embeddings-query.ts","../src/state/rows-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","../src/state/chunked-upload.ts","../src/state/chunked-download.ts","../src/state/document-metadata.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 explainSessionId?: string\n ) => void;\n updateLastMessage: (text: string, explainSessionId?: string) => void;\n setInput: (v: string) => void;\n setChatMode: (mode: ChatMode) => void;\n}\n\nexport const useConversation = create<ConversationState>()((set) => ({\n messages: [\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 explainSessionId?: string\n ) =>\n set((state) => ({\n messages: [\n ...state.messages,\n {\n role: role,\n text: text,\n type: type || \"normal\",\n explainSessionId,\n },\n ],\n })),\n\n updateLastMessage: (text: string, explainSessionId?: 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 ...(explainSessionId !== undefined && { explainSessionId }),\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 explainability: 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 explainability: true, // On 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: DocumentParameters) => {\n let doc_meta: Triple[] = [\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: RDF_TYPE },\n o: { t: \"i\", i: DIGITAL_DOCUMENT },\n },\n ];\n\n if (params.title != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: RDFS_LABEL },\n o: { t: \"l\", v: params.title ?? \"\" },\n },\n ];\n\n if (params.url != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: SCHEMA_URL },\n o: { t: \"i\", i: params.url ?? \"\" },\n },\n ];\n\n for (const keyword of params.keywords ?? [])\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: SCHEMA_KEYWORDS },\n o: { t: \"l\", v: keyword },\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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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: effectiveFlow, s, p, o, limit }],\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\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, Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\n\n// Extended types for Terms and Triples with labels (used for display purposes)\nexport type LabeledTerm = Term & { label?: string };\n\nexport interface LabeledTriple {\n s: LabeledTerm;\n p: LabeledTerm;\n o: LabeledTerm;\n g?: string;\n}\n\n// Helper to get the string value from a Term (IRI or Literal)\nexport const getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\n { t: \"i\", i: RDFS_LABEL },\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 getTermValue(triples[0].o);\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, getTermValue(t.s), add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n s: {\n ...t.s,\n label: label,\n } as LabeledTerm,\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, getTermValue(t.p), add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n p: {\n ...t.p,\n label: label,\n } as LabeledTerm,\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n // If the 'o' element is an IRI, do a label lookup, else\n // just use the literal value for its label\n if (isIri(t.o))\n return queryLabel(socket, t.o.i, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n o: {\n ...t.o,\n label: label,\n } as LabeledTerm,\n };\n }\n );\n else\n return new Promise<LabeledTriple>((resolve) => {\n resolve({\n ...t,\n o: {\n ...t.o,\n label: getTermValue(t.o),\n } as LabeledTerm,\n });\n });\n })\n );\n};\n\n// Triple filter\nexport const filter = <T extends Triple | LabeledTriple>(triples: T[], fn: (t: T) => boolean) =>\n triples.filter((t) => fn(t));\n\n// Filter out 'structural' edges nobody needs to see\nexport const filterInternals = <T extends Triple | LabeledTriple>(triples: T[]): T[] =>\n triples.filter((t) => {\n if (isIri(t.p) && t.p.i == 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, Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\nimport {\n query,\n labelS,\n labelP,\n labelO,\n filterInternals,\n} from \"./knowledge-graph\";\n\n// Helper to get the string value from a Term (IRI or Literal)\nconst getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\n\n// Extended Term type that includes optional label (added by labeling functions)\ntype LabeledTerm = Term & { label?: string };\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 (!isIri(t.o)) {\n continue;\n }\n // Source has a URI, that can be its unique ID\n const sourceId = getTermValue(t.s);\n\n // Target is always an entity now (we filtered out literals above)\n const targetId = getTermValue(t.o);\n\n // Links have an ID so that this edge is unique\n const linkId = getTermValue(t.s) + \"@@\" + getTermValue(t.p) + \"@@\" + getTermValue(t.o);\n\n if (!nodeIds.has(sourceId)) {\n const sLabeled = t.s as LabeledTerm;\n const n: Node = {\n id: sourceId,\n label: sLabeled.label ? sLabeled.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 oLabeled = t.o as LabeledTerm;\n const n: Node = {\n id: targetId,\n label: oLabeled.label ? oLabeled.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 pLabeled = t.p as LabeledTerm;\n const l: Link = {\n source: sourceId,\n target: targetId,\n id: linkId,\n label: pLabeled.label ? pLabeled.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 { t: \"i\", i: selectedNodeId }, // s = selectedNode\n { t: \"i\", i: relationshipUri }, // 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 { t: \"i\", i: relationshipUri }, // p = relationship\n { t: \"i\", i: selectedNodeId }, // 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\";\nimport { useSessionStore } from \"./session\";\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 flow - Optional flow ID to use for the query (defaults to session state)\n * @param collection - The collection to query\n * @returns {Object} Graph state and operations\n */\nexport const useGraphSubgraph = ({\n entityUri,\n flow,\n collection,\n}: {\n entityUri: string | undefined;\n flow?: string;\n collection: string;\n}) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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, flow: effectiveFlow, 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(effectiveFlow);\n return updateSubgraph(\n api,\n entityUri,\n sg,\n addActivity,\n removeActivity,\n collection\n );\n },\n enabled: !!entityUri && !!effectiveFlow, // Only run query if both entityUri and effectiveFlow 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(effectiveFlow);\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, flow: effectiveFlow, 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(effectiveFlow);\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, flow: effectiveFlow, 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\";\nimport { useSessionStore } from \"./session\";\n\n/**\n * Custom hook for querying graph embeddings\n * Finds graph entities similar to the provided embedding vector\n */\nexport const useGraphEmbeddings = ({ flow, vec, limit = 10, collection }: {\n flow?: string;\n vec?: 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 const socket = useSocket();\n const notify = useNotification();\n const { settings } = useSettings();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n const effectiveFlow = flow ?? sessionFlowId;\n const effectiveCollection = collection ?? settings.collection;\n\n const query = useQuery({\n queryKey: [\"graph-embeddings\", { flow: effectiveFlow, vec, limit, collection: effectiveCollection }],\n enabled: !!vec && vec.length > 0 && !!effectiveFlow,\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\n .graphEmbeddingsQuery(vec!, limit, effectiveCollection)\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(message);\n throw err;\n });\n },\n });\n\n useActivity(query.isLoading, \"Loading graph embeddings\");\n\n return {\n graphEmbeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n","import { Term, IriTerm, LiteralTerm, FlowApi, EntityMatch } 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 embedding vector, 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 embedding, and lookup entities using graph\n // embeddings, add embedding to each entity row\n return (vec: number[]): Promise<Row[]> => {\n const act = \"Graph embedding search\";\n add(act);\n\n return socket\n .graphEmbeddingsQuery(vec, limit ? limit : 10, collection)\n .then((matches: EntityMatch[]): Row[] => {\n remove(act);\n return matches\n .filter((m): m is EntityMatch & { entity: IriTerm } =>\n m.entity !== null && m.entity.t === \"i\")\n .map((m) => {\n return { uri: m.entity.i, target: vec };\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 { t: \"i\", i: ent.uri },\n { t: \"i\", i: RDFS_LABEL },\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 const obj = t[0].o as LiteralTerm;\n return {\n uri: ent.uri,\n label: obj.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 { t: \"i\", i: ent.uri },\n { t: \"i\", i: SKOS_DEFINITION },\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 const obj = t[0].o as LiteralTerm;\n return {\n ...ent,\n description: obj.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((vecs) => vecs[0])\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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\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 ?? sessionFlowId,\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 ?? sessionFlowId,\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\";\nimport { useSessionStore } from \"./session\";\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 flow - Optional flow ID to use for the query (defaults to session state)\n * @param collection - The collection to query\n * @returns {Object} Entity detail state and operations\n */\nexport const useEntityDetail = ({\n entityUri,\n flow,\n collection,\n}: {\n entityUri: string | undefined;\n flow?: 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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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, flow: effectiveFlow, 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(effectiveFlow);\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 effectiveFlow are available\n enabled: !!entityUri && !!effectiveFlow,\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 { EntityMatch, ExplainEvent } 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: EntityMatch[];\n explainEvents?: ExplainEvent[];\n}\n\nexport interface GraphRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onExplain?: (event: ExplainEvent) => 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, messageId?: string) => void;\n onObserve?: (observation: string, complete: boolean, messageId?: string) => void;\n onAnswer?: (answer: string, complete: boolean, messageId?: string) => void;\n onExplain?: (event: ExplainEvent) => void;\n onError?: (error: string) => void;\n}\n\nexport interface DocumentRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onExplain?: (event: ExplainEvent) => void;\n onError?: (error: string) => void;\n}\n\nexport interface DocumentRagResult {\n response: string;\n explainEvents?: ExplainEvent[];\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 = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\n\n /**\n * Graph RAG inference with entity discovery and optional explainability\n * Explainability events are only tracked if callbacks.onExplain is provided\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 // Only collect explain events if caller provided onExplain callback\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\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 // Only wire up onExplain if caller wants explainability\n const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .graphRagStreaming(input, onChunk, onError, options, collection, onExplain);\n })\n : await socket.flow(effectiveFlow).graphRag(input, options || {}, collection);\n\n // Get embeddings for entity discovery\n const allEmbeddings = await socket.flow(effectiveFlow).embeddings([input]);\n const embeddings = allEmbeddings[0];\n\n // Query graph embeddings to find entities\n const entities = await socket\n .flow(effectiveFlow)\n .graphEmbeddingsQuery(\n embeddings,\n options?.entityLimit || 10,\n collection\n );\n\n return { response, entities, explainEvents };\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(effectiveFlow)\n .textCompletionStreaming(systemPrompt, input, onChunk, onError);\n })\n : await socket.flow(effectiveFlow).textCompletion(systemPrompt, input);\n },\n });\n\n /**\n * Document RAG inference with optional explainability\n */\n const documentRagMutation = useMutation({\n mutationFn: async ({\n input,\n collection,\n docLimit,\n callbacks,\n }: {\n input: string;\n collection: string;\n docLimit?: number;\n callbacks?: DocumentRagCallbacks;\n }): Promise<DocumentRagResult> => {\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\n const response = 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 const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .documentRagStreaming(input, onChunk, onError, docLimit, collection, onExplain);\n });\n\n return { response, explainEvents };\n },\n });\n\n /**\n * Agent inference with streaming callbacks and optional explainability\n */\n const agentMutation = useMutation({\n mutationFn: async ({\n input,\n collection,\n callbacks,\n }: {\n input: string;\n collection?: string;\n callbacks?: AgentCallbacks;\n }): Promise<string> => {\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\n return new Promise<string>((resolve, reject) => {\n let fullAnswer = \"\";\n\n const onThink = (thought: string, complete: boolean, messageId?: string) => {\n callbacks?.onThink?.(thought, complete, messageId);\n };\n\n const onObserve = (observation: string, complete: boolean, messageId?: string) => {\n callbacks?.onObserve?.(observation, complete, messageId);\n };\n\n const onAnswer = (answer: string, complete: boolean, messageId?: string) => {\n fullAnswer += answer;\n callbacks?.onAnswer?.(answer, complete, messageId);\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 const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .agent(input, onThink, onObserve, onAnswer, onError, onExplain, collection);\n });\n },\n });\n\n return {\n graphRag: graphRagMutation.mutateAsync,\n documentRag: documentRagMutation.mutateAsync,\n textCompletion: textCompletionMutation.mutateAsync,\n agent: agentMutation.mutateAsync,\n isLoading:\n graphRagMutation.isPending ||\n documentRagMutation.isPending ||\n textCompletionMutation.isPending ||\n agentMutation.isPending,\n };\n};\n","/**\n * Zustand store for managing explainability sessions\n * Sessions are keyed by ID and linked to messages via explainSessionId\n */\n\nimport { create } from \"zustand\";\nimport type { ExplainabilitySession } from \"../utils/explainability\";\n\nexport interface ExplainabilityStoreState {\n /** Map of session ID to session data */\n sessions: Record<string, ExplainabilitySession>;\n\n /** Add or update a session */\n addSession: (id: string, session: ExplainabilitySession) => void;\n\n /** Update an existing session (merges with existing data) */\n updateSession: (id: string, partial: Partial<ExplainabilitySession>) => void;\n\n /** Get a session by ID */\n getSession: (id: string) => ExplainabilitySession | undefined;\n\n /** Remove a session */\n removeSession: (id: string) => void;\n\n /** Clear all sessions */\n clearSessions: () => void;\n}\n\nexport const useExplainabilityStore = create<ExplainabilityStoreState>()(\n (set, get) => ({\n sessions: {},\n\n addSession: (id, session) =>\n set((state) => ({\n sessions: {\n ...state.sessions,\n [id]: session,\n },\n })),\n\n updateSession: (id, partial) =>\n set((state) => ({\n sessions: {\n ...state.sessions,\n [id]: {\n ...state.sessions[id],\n ...partial,\n },\n },\n })),\n\n getSession: (id) => get().sessions[id],\n\n removeSession: (id) =>\n set((state) => {\n const { [id]: _, ...rest } = state.sessions;\n return { sessions: rest };\n }),\n\n clearSessions: () => set({ sessions: {} }),\n })\n);\n","/**\n * Explainability utilities for parsing and structuring explain events\n */\n\nimport type { Triple, Term } from \"@trustgraph/client\";\nimport {\n TG_QUERY,\n TG_EDGE_COUNT,\n TG_SELECTED_EDGE,\n TG_EDGE,\n TG_REASONING,\n TG_CONTENT,\n PROV_STARTED_AT_TIME,\n PROV_WAS_DERIVED_FROM,\n} from \"@trustgraph/client\";\n\n// Event types derived from explain_id URI\nexport type ExplainEventType = \"question\" | \"exploration\" | \"focus\" | \"synthesis\" | \"unknown\";\n\n// Structured data for each event type\n\nexport interface QuestionEvent {\n type: \"question\";\n explainId: string;\n explainGraph: string;\n query?: string;\n timestamp?: string;\n}\n\nexport interface ExplorationEvent {\n type: \"exploration\";\n explainId: string;\n explainGraph: string;\n edgeCount?: number;\n}\n\nexport interface SelectedEdge {\n /** The actual edge as (s, p, o) URIs */\n edge: {\n s: string;\n p: string;\n o: string;\n };\n /** Human-readable labels for the edge */\n labels?: {\n s: string;\n p: string;\n o: string;\n };\n /** LLM's reasoning for selecting this edge */\n reasoning?: string;\n /** Provenance chain to source documents */\n sources?: ProvenanceChainItem[];\n}\n\nexport interface FocusEvent {\n type: \"focus\";\n explainId: string;\n explainGraph: string;\n /** URIs of edge selection entities */\n edgeSelectionUris: string[];\n /** Fully resolved selected edges (populated after unpacking) */\n selectedEdges?: SelectedEdge[];\n}\n\nexport interface SynthesisEvent {\n type: \"synthesis\";\n explainId: string;\n explainGraph: string;\n /** Content length (full content is streamed separately) */\n contentLength?: number;\n}\n\nexport type StructuredExplainEvent =\n | QuestionEvent\n | ExplorationEvent\n | FocusEvent\n | SynthesisEvent;\n\n// Provenance chain types\n\nexport interface ProvenanceChainItem {\n uri: string;\n label: string;\n}\n\nexport interface ProvenanceChain {\n /** The chain from leaf to root (e.g., chunk → page → document) */\n chain: ProvenanceChainItem[];\n /** The root document URI */\n documentUri?: string;\n /** The root document label/title */\n documentLabel?: string;\n}\n\n// Full explainability session data\n\nexport interface ExplainabilitySession {\n question?: QuestionEvent;\n exploration?: ExplorationEvent;\n focus?: FocusEvent;\n synthesis?: SynthesisEvent;\n}\n\n/**\n * Extract event type from explainId URI\n * e.g., \"urn:trustgraph:question:abc123\" → \"question\"\n */\nexport function getEventType(explainId: string): ExplainEventType {\n if (explainId.includes(\"question\")) return \"question\";\n if (explainId.includes(\"exploration\")) return \"exploration\";\n if (explainId.includes(\"focus\")) return \"focus\";\n if (explainId.includes(\"synthesis\")) return \"synthesis\";\n return \"unknown\";\n}\n\n/**\n * Get term value from a Term object\n */\nexport function getTermValue(term: Term): string {\n if (!term) return \"\";\n if (term.t === \"i\") return term.i || \"\";\n if (term.t === \"l\") return term.v || \"\";\n if (term.t === \"t\" && term.tr) {\n // Quoted triple - return a serialized form\n const s = getTermValue(term.tr.s);\n const p = getTermValue(term.tr.p);\n const o = getTermValue(term.tr.o);\n return `<<${s} ${p} ${o}>>`;\n }\n return \"\";\n}\n\n/**\n * Extract quoted triple from a Term\n */\nexport function extractQuotedTriple(term: Term): { s: string; p: string; o: string } | null {\n if (term.t === \"t\" && term.tr) {\n return {\n s: getTermValue(term.tr.s),\n p: getTermValue(term.tr.p),\n o: getTermValue(term.tr.o),\n };\n }\n return null;\n}\n\n/**\n * Parse triples for a question event\n */\nexport function parseQuestionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): QuestionEvent {\n const event: QuestionEvent = {\n type: \"question\",\n explainId,\n explainGraph,\n };\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n const o = getTermValue(triple.o);\n\n if (p === TG_QUERY) {\n event.query = o;\n } else if (p === PROV_STARTED_AT_TIME) {\n event.timestamp = o;\n }\n }\n\n return event;\n}\n\n/**\n * Parse triples for an exploration event\n */\nexport function parseExplorationTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): ExplorationEvent {\n const event: ExplorationEvent = {\n type: \"exploration\",\n explainId,\n explainGraph,\n };\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n const o = getTermValue(triple.o);\n\n if (p === TG_EDGE_COUNT) {\n event.edgeCount = parseInt(o, 10);\n }\n }\n\n return event;\n}\n\n/**\n * Parse triples for a focus event\n */\nexport function parseFocusTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): FocusEvent {\n const event: FocusEvent = {\n type: \"focus\",\n explainId,\n explainGraph,\n edgeSelectionUris: [],\n };\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n const o = getTermValue(triple.o);\n\n if (p === TG_SELECTED_EDGE && typeof o === \"string\") {\n event.edgeSelectionUris.push(o);\n }\n }\n\n return event;\n}\n\n/**\n * Parse triples for a synthesis event\n */\nexport function parseSynthesisTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): SynthesisEvent {\n const event: SynthesisEvent = {\n type: \"synthesis\",\n explainId,\n explainGraph,\n };\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n const o = getTermValue(triple.o);\n\n if (p === TG_CONTENT) {\n event.contentLength = o.length;\n }\n }\n\n return event;\n}\n\n/**\n * Parse triples for an edge selection entity\n */\nexport function parseEdgeSelectionTriples(triples: Triple[]): {\n edge: { s: string; p: string; o: string } | null;\n reasoning: string | null;\n} {\n let edge: { s: string; p: string; o: string } | null = null;\n let reasoning: string | null = null;\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n\n if (p === TG_EDGE) {\n edge = extractQuotedTriple(triple.o);\n } else if (p === TG_REASONING) {\n reasoning = getTermValue(triple.o);\n }\n }\n\n return { edge, reasoning };\n}\n\n/**\n * Parse triples based on event type\n */\nexport function parseExplainTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): StructuredExplainEvent | null {\n const eventType = getEventType(explainId);\n\n switch (eventType) {\n case \"question\":\n return parseQuestionTriples(explainId, explainGraph, triples);\n case \"exploration\":\n return parseExplorationTriples(explainId, explainGraph, triples);\n case \"focus\":\n return parseFocusTriples(explainId, explainGraph, triples);\n case \"synthesis\":\n return parseSynthesisTriples(explainId, explainGraph, triples);\n default:\n return null;\n }\n}\n","/**\n * Hook for tracing provenance chains in the knowledge graph\n * Follows prov:wasDerivedFrom relationships from any entity to its source documents\n */\n\nimport { useState, useCallback, useRef } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Triple, Term } from \"@trustgraph/client\";\nimport {\n PROV_WAS_DERIVED_FROM,\n RDFS_LABEL,\n TG_REIFIES,\n} from \"@trustgraph/client\";\nimport type { ProvenanceChain, ProvenanceChainItem } from \"../utils/explainability\";\nimport { getTermValue } from \"../utils/explainability\";\n\nexport interface UseProvenanceOptions {\n flow?: string;\n collection?: string;\n /** Maximum depth to trace (default: 10) */\n maxDepth?: number;\n}\n\nexport interface UseProvenanceResult {\n /** Trace provenance chain from a URI to root */\n traceChain: (uri: string) => Promise<ProvenanceChain>;\n /** Trace provenance for an edge (s, p, o) - finds reifying statements first */\n traceEdgeProvenance: (s: string, p: string, o: string) => Promise<ProvenanceChain[]>;\n /** Resolve label for a URI (uses cache) */\n resolveLabel: (uri: string) => Promise<string>;\n /** Clear the label cache */\n clearCache: () => void;\n /** Whether any trace operation is in progress */\n isTracing: boolean;\n}\n\n/**\n * Hook for tracing provenance chains\n */\nexport const useProvenance = (options: UseProvenanceOptions = {}): UseProvenanceResult => {\n const { flow, collection = \"default\", maxDepth = 10 } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const effectiveFlow = flow ?? sessionFlowId;\n\n const [isTracing, setIsTracing] = useState(false);\n\n // Label cache to avoid repeated queries\n const labelCacheRef = useRef<Map<string, string>>(new Map());\n\n /**\n * Check if connected\n */\n const isConnected = useCallback(() => {\n return (\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\"\n );\n }, [connectionState]);\n\n /**\n * Query for rdfs:label of a URI\n */\n const resolveLabel = useCallback(\n async (uri: string): Promise<string> => {\n // Check cache\n if (labelCacheRef.current.has(uri)) {\n return labelCacheRef.current.get(uri)!;\n }\n\n // Not an IRI - return as-is\n if (!uri.startsWith(\"http\") && !uri.startsWith(\"urn:\")) {\n return uri;\n }\n\n if (!isConnected()) {\n return uri;\n }\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n { t: \"i\", i: uri },\n { t: \"i\", i: RDFS_LABEL },\n undefined,\n 1,\n collection\n );\n\n const label =\n triples.length > 0 ? getTermValue(triples[0].o) : uri;\n\n // Cache the result\n labelCacheRef.current.set(uri, label);\n return label;\n } catch {\n return uri;\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Query for prov:wasDerivedFrom parent of a URI\n */\n const queryDerivedFrom = useCallback(\n async (uri: string): Promise<string | null> => {\n if (!isConnected()) return null;\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n { t: \"i\", i: uri },\n { t: \"i\", i: PROV_WAS_DERIVED_FROM },\n undefined,\n 1,\n collection\n );\n\n if (triples.length > 0) {\n return getTermValue(triples[0].o);\n }\n return null;\n } catch {\n return null;\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Trace the full provenance chain from a URI to root\n */\n const traceChain = useCallback(\n async (uri: string): Promise<ProvenanceChain> => {\n setIsTracing(true);\n\n try {\n const chain: ProvenanceChainItem[] = [];\n let current: string | null = uri;\n\n for (let depth = 0; depth < maxDepth && current; depth++) {\n const label = await resolveLabel(current);\n chain.push({ uri: current, label });\n\n const parent = await queryDerivedFrom(current);\n if (!parent || parent === current) {\n break;\n }\n current = parent;\n }\n\n // The last item in the chain is the root document\n const rootItem = chain.length > 0 ? chain[chain.length - 1] : undefined;\n\n return {\n chain,\n documentUri: rootItem?.uri,\n documentLabel: rootItem?.label,\n };\n } finally {\n setIsTracing(false);\n }\n },\n [maxDepth, resolveLabel, queryDerivedFrom]\n );\n\n /**\n * Query for statements that reify an edge via tg:reifies\n */\n const queryReifyingStatements = useCallback(\n async (s: string, p: string, o: string): Promise<string[]> => {\n if (!isConnected()) return [];\n\n try {\n // Build the quoted triple term\n const quotedTriple: Term = {\n t: \"t\",\n tr: {\n s: { t: \"i\", i: s },\n p: { t: \"i\", i: p },\n o: o.startsWith(\"http\") || o.startsWith(\"urn:\")\n ? { t: \"i\", i: o }\n : { t: \"l\", v: o },\n },\n };\n\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n undefined,\n { t: \"i\", i: TG_REIFIES },\n quotedTriple,\n 10,\n collection\n );\n\n return triples.map((t) => getTermValue(t.s));\n } catch {\n return [];\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Trace provenance for an edge - finds reifying statements and traces each\n */\n const traceEdgeProvenance = useCallback(\n async (s: string, p: string, o: string): Promise<ProvenanceChain[]> => {\n setIsTracing(true);\n\n try {\n // Find statements that reify this edge\n const stmtUris = await queryReifyingStatements(s, p, o);\n\n // For each reifying statement, trace its provenance chain\n const chains: ProvenanceChain[] = [];\n\n for (const stmtUri of stmtUris) {\n // Get the wasDerivedFrom source for this statement\n const sourceUri = await queryDerivedFrom(stmtUri);\n if (sourceUri) {\n const chain = await traceChain(sourceUri);\n chains.push(chain);\n }\n }\n\n return chains;\n } finally {\n setIsTracing(false);\n }\n },\n [queryReifyingStatements, queryDerivedFrom, traceChain]\n );\n\n /**\n * Clear the label cache\n */\n const clearCache = useCallback(() => {\n labelCacheRef.current.clear();\n }, []);\n\n return {\n traceChain,\n traceEdgeProvenance,\n resolveLabel,\n clearCache,\n isTracing,\n };\n};\n","/**\n * Hook for managing explainability state during GraphRAG queries\n * Unpacks explain events into structured data with provenance chains\n *\n * Processing strategy:\n * - Events are processed immediately as they arrive\n * - Main event nodes (question, exploration, focus, synthesis) use\n * stability-based retry: fetch until count > 0 AND stable\n * - Edge sub-objects use simple retry-until-non-empty (fast)\n * - All edge fetching + label resolution + provenance runs in parallel\n */\n\nimport { useState, useCallback, useRef } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport { useProvenance } from \"./provenance\";\nimport type { ExplainEvent, Triple } from \"@trustgraph/client\";\nimport {\n getEventType,\n parseExplainTriples,\n parseEdgeSelectionTriples,\n getTermValue,\n type ExplainabilitySession,\n type QuestionEvent,\n type ExplorationEvent,\n type FocusEvent,\n type SynthesisEvent,\n type SelectedEdge,\n} from \"../utils/explainability\";\n\nexport interface UseExplainabilityOptions {\n flow?: string;\n collection?: string;\n /** Trace provenance for selected edges (default: true) */\n traceProvenance?: boolean;\n}\n\nexport interface UseExplainabilityResult {\n /** Add an explain event (wire this to graphRag callbacks.onExplain) */\n addEvent: (event: ExplainEvent) => void;\n /** Current session data (React state - may lag behind ref) */\n session: ExplainabilitySession;\n /** Ref-backed session that's always immediately up-to-date (no render delay) */\n sessionRef: React.RefObject<ExplainabilitySession>;\n /** Raw events received */\n events: ExplainEvent[];\n /** Whether unpacking is in progress (React state) */\n isUnpacking: boolean;\n /** Ref-backed processing flag - always immediately up-to-date */\n isProcessingRef: React.RefObject<boolean>;\n /** Any error during unpacking */\n error: string | null;\n /** Reset the session */\n reset: () => void;\n}\n\n/**\n * Hook for managing explainability during inference\n */\nexport const useExplainability = (\n options: UseExplainabilityOptions = {}\n): UseExplainabilityResult => {\n const {\n flow,\n collection = \"default\",\n traceProvenance = true,\n } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const effectiveFlow = flow ?? sessionFlowId;\n\n const { traceEdgeProvenance, resolveLabel } = useProvenance({\n flow: effectiveFlow,\n collection,\n });\n\n const [events, setEvents] = useState<ExplainEvent[]>([]);\n const [session, setSession] = useState<ExplainabilitySession>({});\n const [isUnpacking, setIsUnpacking] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Mirror session in a ref so it's always immediately readable (no render delay)\n const sessionRef = useRef<ExplainabilitySession>({});\n\n // Track pending unpack operations\n const unpackQueueRef = useRef<ExplainEvent[]>([]);\n const isProcessingRef = useRef(false);\n\n /**\n * Check if connected\n */\n const isConnected = useCallback(() => {\n return (\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\"\n );\n }, [connectionState]);\n\n /**\n * Single triple query (no retry)\n */\n const fetchTriples = useCallback(\n async (explainId: string, explainGraph?: string): Promise<Triple[]> => {\n return socket\n .flow(effectiveFlow)\n .triplesQuery(\n { t: \"i\", i: explainId },\n undefined,\n undefined,\n 100,\n collection,\n explainGraph\n );\n },\n [socket, effectiveFlow, collection]\n );\n\n /**\n * Stability-based retry for main event nodes.\n * Retries until: count > 0 AND count matches previous fetch.\n * Used for question, exploration, focus, synthesis nodes where the\n * backend may write multiple triples incrementally.\n */\n const queryWithStabilityRetry = useCallback(\n async (explainId: string, explainGraph?: string, timeoutMs: number = 5000): Promise<Triple[]> => {\n if (!isConnected()) return [];\n\n const retryDelay = 500;\n const maxAttempts = Math.ceil(timeoutMs / retryDelay) + 1;\n let prevCount = -1;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const triples = await fetchTriples(explainId, explainGraph);\n const count = triples.length;\n\n if (count > 0 && count === prevCount) {\n return triples;\n }\n\n prevCount = count;\n\n if (attempt < maxAttempts - 1) {\n await new Promise((r) => setTimeout(r, retryDelay));\n }\n } catch (err) {\n console.error(\"[explain] triple query failed:\", explainId, err);\n return [];\n }\n }\n\n // Return last fetch if we got anything\n if (prevCount > 0) {\n try {\n return await fetchTriples(explainId, explainGraph);\n } catch {\n return [];\n }\n }\n\n return [];\n },\n [fetchTriples, isConnected]\n );\n\n /**\n * Simple retry-until-non-empty for sub-objects (edge selections).\n * These are small atomic writes — either fully there or not yet.\n */\n const queryWithSimpleRetry = useCallback(\n async (explainId: string, explainGraph?: string, timeoutMs: number = 5000): Promise<Triple[]> => {\n if (!isConnected()) return [];\n\n const retryDelay = 300;\n const maxAttempts = Math.ceil(timeoutMs / retryDelay) + 1;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const triples = await fetchTriples(explainId, explainGraph);\n if (triples.length > 0) return triples;\n\n if (attempt < maxAttempts - 1) {\n await new Promise((r) => setTimeout(r, retryDelay));\n }\n } catch (err) {\n console.error(\"[explain] triple query failed:\", explainId, err);\n return [];\n }\n }\n\n return [];\n },\n [fetchTriples, isConnected]\n );\n\n /**\n * Resolve a single edge: fetch triples, labels, and provenance in parallel\n */\n const resolveEdge = useCallback(\n async (edgeSelUri: string, explainGraph: string): Promise<SelectedEdge | null> => {\n const triples = await queryWithSimpleRetry(edgeSelUri, explainGraph);\n const { edge, reasoning } = parseEdgeSelectionTriples(triples);\n\n if (!edge) return null;\n\n const selectedEdge: SelectedEdge = {\n edge,\n reasoning: reasoning || undefined,\n };\n\n // Kick off labels and provenance in parallel\n const [labels, provenanceChains] = await Promise.all([\n // Labels — all 3 in parallel\n Promise.all([\n resolveLabel(edge.s),\n resolveLabel(edge.p),\n resolveLabel(edge.o),\n ]),\n // Provenance\n traceProvenance\n ? traceEdgeProvenance(edge.s, edge.p, edge.o)\n : Promise.resolve([]),\n ]);\n\n selectedEdge.labels = { s: labels[0], p: labels[1], o: labels[2] };\n\n if (provenanceChains.length > 0) {\n selectedEdge.sources = provenanceChains.map((c) => c.chain).flat();\n }\n\n return selectedEdge;\n },\n [queryWithSimpleRetry, resolveLabel, traceProvenance, traceEdgeProvenance]\n );\n\n /**\n * Unpack a focus event — resolve ALL edges in parallel\n */\n const unpackFocusEvent = useCallback(\n async (focusEvent: FocusEvent): Promise<FocusEvent> => {\n // Fire off all edge resolutions concurrently\n const edgePromises = focusEvent.edgeSelectionUris.map(\n (uri) => resolveEdge(uri, focusEvent.explainGraph)\n );\n\n const results = await Promise.all(edgePromises);\n const selectedEdges = results.filter((e): e is SelectedEdge => e !== null);\n\n return {\n ...focusEvent,\n selectedEdges,\n };\n },\n [resolveEdge]\n );\n\n /** Helper to update both state and ref together */\n const updateSession = useCallback(\n (updater: (prev: ExplainabilitySession) => ExplainabilitySession) => {\n sessionRef.current = updater(sessionRef.current);\n setSession(updater);\n },\n []\n );\n\n /**\n * Process a single explain event\n */\n const processEvent = useCallback(\n async (event: ExplainEvent): Promise<void> => {\n // Query triples for main event node (stability retry)\n const triples = await queryWithStabilityRetry(event.explainId, event.explainGraph);\n\n // Parse into structured data\n const parsed = parseExplainTriples(event.explainId, event.explainGraph, triples);\n if (!parsed) return;\n\n // Update session based on event type\n updateSession((prev) => {\n const next = { ...prev };\n\n switch (parsed.type) {\n case \"question\":\n next.question = parsed as QuestionEvent;\n break;\n case \"exploration\":\n next.exploration = parsed as ExplorationEvent;\n break;\n case \"focus\":\n // Will be updated again after unpacking\n next.focus = parsed as FocusEvent;\n break;\n case \"synthesis\":\n next.synthesis = parsed as SynthesisEvent;\n break;\n }\n\n return next;\n });\n\n // For focus events, unpack edges in parallel\n if (parsed.type === \"focus\") {\n const unpackedFocus = await unpackFocusEvent(parsed as FocusEvent);\n updateSession((prev) => ({\n ...prev,\n focus: unpackedFocus,\n }));\n }\n },\n [queryWithStabilityRetry, unpackFocusEvent, updateSession]\n );\n\n /**\n * Process the unpack queue\n */\n const processQueue = useCallback(async () => {\n if (isProcessingRef.current) return;\n if (unpackQueueRef.current.length === 0) return;\n\n isProcessingRef.current = true;\n setIsUnpacking(true);\n\n try {\n while (unpackQueueRef.current.length > 0) {\n const event = unpackQueueRef.current.shift()!;\n await processEvent(event);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n setError(msg);\n }\n\n isProcessingRef.current = false;\n setIsUnpacking(false);\n\n // Check if more events were queued during processing (e.g., after a reset)\n if (unpackQueueRef.current.length > 0) {\n processQueue();\n }\n }, [processEvent]);\n\n /**\n * Add an explain event — immediately queues and starts processing\n */\n const addEvent = useCallback(\n (event: ExplainEvent) => {\n setEvents((prev) => [...prev, event]);\n unpackQueueRef.current.push(event);\n processQueue();\n },\n [processQueue]\n );\n\n /**\n * Reset the session\n */\n const reset = useCallback(() => {\n setEvents([]);\n setSession({});\n sessionRef.current = {};\n setError(null);\n unpackQueueRef.current = [];\n }, []);\n\n return {\n addEvent,\n session,\n sessionRef,\n events,\n isUnpacking,\n isProcessingRef,\n error,\n reset,\n };\n};\n\n// Re-export types for convenience\nexport type {\n ExplainabilitySession,\n QuestionEvent,\n ExplorationEvent,\n FocusEvent,\n SynthesisEvent,\n SelectedEdge,\n ProvenanceChain,\n ProvenanceChainItem,\n} from \"../utils/explainability\";\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useRef, useCallback } from \"react\";\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, getTermValue } from \"../utils/knowledge-graph\";\nimport { Entity } from \"../model/entity\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport { useExplainabilityStore } from \"./explainability-store\";\nimport { useExplainability } from \"./explainability\";\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 = ({ flow }: { flow?: string } = {}) => {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n const setEntities = useWorkbenchStateStore((state) => state.setEntities);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\n\n // Settings for GraphRAG configuration\n const { settings } = useSettings();\n\n // Explainability store for persisting sessions\n const addExplainSession = useExplainabilityStore((state) => state.addSession);\n\n // Explainability hook for processing events (processes each event immediately)\n const explainability = useExplainability({\n flow: effectiveFlow,\n collection: settings.collection,\n });\n const explainabilityRef = useRef(explainability);\n explainabilityRef.current = explainability;\n\n // Generate unique session IDs\n const generateSessionId = useCallback(() => {\n return `explain-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }, []);\n\n // Inference services\n const inference = useInference({ flow });\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 // Check if explainability is enabled\n const explainabilityEnabled = settings.featureSwitches.explainability;\n const sessionId = explainabilityEnabled ? generateSessionId() : undefined;\n\n // Reset explainability state for new query\n if (explainabilityEnabled) {\n explainabilityRef.current.reset();\n }\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 (with session ID if enabled)\n addMessage(\"ai\", accumulated, undefined, sessionId);\n messageAdded = true;\n } else {\n // Update existing message with accumulated text\n updateLastMessage(accumulated);\n }\n },\n // Wire up explainability callback if feature is enabled\n ...(explainabilityEnabled && {\n onExplain: (event) => {\n console.log(\"[explain] event received:\", event.explainId);\n explainabilityRef.current.addEvent(event);\n },\n }),\n },\n });\n\n removeActivity(ragActivity);\n\n // Store explainability session progressively — events are already being\n // processed as they arrive. Wait for processing to finish, then snapshot.\n if (explainabilityEnabled && sessionId) {\n const waitAndStore = async () => {\n // Poll until processing completes (events are processed as they arrive)\n const maxWait = 30000;\n let elapsed = 0;\n while (explainabilityRef.current.isProcessingRef.current && elapsed < maxWait) {\n await new Promise((r) => setTimeout(r, 500));\n elapsed += 500;\n }\n const sess = explainabilityRef.current.sessionRef.current;\n addExplainSession(sessionId, sess);\n };\n waitAndStore();\n }\n\n // Start embeddings activity\n addActivity(embActivity);\n\n // Get labels for each entity\n const labelPromises = result.entities\n .filter((match) => match.entity !== null)\n .map(async (match) => {\n const entity = match.entity!;\n const labelActivity = \"Label \" + getTermValue(entity);\n addActivity(labelActivity);\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n entity,\n { t: \"i\", i: RDFS_LABEL },\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: getTermValue(resp[0].o),\n uri: getTermValue(resp[0].s),\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: () => {\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","// @ts-nocheck\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSessionStore } from \"./session\";\nimport { useSettings } from \"./settings\";\nimport { RowEmbeddingsMatch } from \"@trustgraph/client\";\n\n/**\n * Custom hook for querying row embeddings using vectors.\n * Searches for similar records in structured data indexes.\n */\nexport const useRowEmbeddingsQuery = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const { settings } = useSettings();\n\n const effectiveFlow = flow ?? sessionFlowId;\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const mutation = useMutation({\n mutationFn: async ({\n vectors,\n schemaName,\n collection,\n indexName,\n limit = 10,\n }: {\n vectors: number[];\n schemaName: string;\n collection?: string;\n indexName?: string;\n limit?: number;\n }): Promise<RowEmbeddingsMatch[]> => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(effectiveFlow).rowEmbeddingsQuery(\n vectors,\n schemaName,\n collection ?? settings.collection,\n indexName,\n limit\n );\n },\n onError: (err) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(`Row embeddings query failed: ${message}`);\n },\n onSuccess: () => {\n },\n });\n\n useActivity(mutation.isPending, \"Querying row embeddings\");\n\n return {\n executeQuery: mutation.mutate,\n executeQueryAsync: mutation.mutateAsync,\n isExecuting: mutation.isPending,\n error: mutation.error,\n matches: mutation.data ?? [],\n hasResults: (mutation.data?.length ?? 0) > 0,\n reset: mutation.reset,\n isReady: isSocketReady,\n };\n};\n","// @ts-nocheck\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSessionStore } from \"./session\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for querying document chunks using vectors.\n * Searches for document chunks with similar embeddings.\n */\nexport const useDocumentEmbeddingsQuery = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const { settings } = useSettings();\n\n const effectiveFlow = flow ?? sessionFlowId;\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const mutation = useMutation({\n mutationFn: async ({\n vectors,\n user,\n collection,\n limit = 10,\n }: {\n vectors: number[][];\n user?: string;\n collection?: string;\n limit?: number;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(effectiveFlow).documentEmbeddingsQuery(\n vectors,\n user ?? settings.user,\n collection ?? settings.collection,\n limit\n );\n },\n onError: (err) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(`Document embeddings query failed: ${message}`);\n },\n onSuccess: () => {\n },\n });\n\n useActivity(mutation.isPending, \"Searching document chunks\");\n\n return {\n executeQuery: mutation.mutate,\n executeQueryAsync: mutation.mutateAsync,\n isExecuting: mutation.isPending,\n error: mutation.error,\n results: mutation.data ?? [],\n hasResults: Array.isArray(mutation.data) && mutation.data.length > 0,\n reset: mutation.reset,\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 rows queries\n * Provides functionality for executing GraphQL queries against structured row data\n */\nexport const useRowsQuery = ({ flow }: { flow?: string } = {}) => {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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 rows queries\n const rowsQueryMutation = 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(effectiveFlow)\n .rowsQuery(\n query,\n collection || settings.collection,\n variables,\n operationName\n );\n },\n onError: (err: unknown) => {\n console.log(\"Rows query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`GraphQL query failed: ${errorMessage}`);\n },\n onSuccess: () => {\n },\n });\n\n // Show loading indicator for query operations\n useActivity(rowsQueryMutation.isPending, \"Executing GraphQL query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: rowsQueryMutation.mutate,\n executeQueryAsync: rowsQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: rowsQueryMutation.isPending,\n error: rowsQueryMutation.error,\n data: rowsQueryMutation.data,\n\n // Reset function to clear previous results\n reset: rowsQueryMutation.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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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: effectiveFlow, term }],\n enabled: isSocketReady && !!term && !!effectiveFlow,\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\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","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 * 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\ninterface UpdateCollectionParams {\n collection: string;\n name: string;\n description: string;\n tags: string[];\n onSuccess?: () => void;\n}\n\ninterface DeleteCollectionsParams {\n collections: string[];\n onSuccess?: () => void;\n}\n\n/**\n * Custom hook for managing collection operations\n * Provides functionality for fetching, creating, updating, and deleting collections\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 }: UpdateCollectionParams) => {\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: Error) => {\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 }: DeleteCollectionsParams) => {\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: Error) => {\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 = ({ flow }: { flow?: string } = {}): {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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(effectiveFlow).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: () => {\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 and collection\n */\n const loadKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, flow, collection, onSuccess }) => {\n // Execute load requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().loadKgCore(id, flow, collection))\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 },\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 { Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\n\n// Helper to get the string value from a Term (IRI or Literal)\nconst getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\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 subjectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\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 objectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n undefined,\n undefined,\n objectTerm,\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 subjectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\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 is not an IRI, i.e., literals)\n return triples.filter((triple) => triple.o && !isIri(triple.o));\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 (where o is an IRI) 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 IRI (entity)\n if (triple.o && isIri(triple.o) && triple.p && isIri(triple.p)) {\n uniqueRelationships.add(triple.p.i);\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 (where s is an IRI) 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 IRI (entity)\n if (triple.s && isIri(triple.s) && triple.p && isIri(triple.p)) {\n uniqueRelationships.add(triple.p.i);\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 is a literal (not an IRI)\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 && isIri(triple.p)) {\n uniqueProperties.add(triple.p.i);\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 subjectTerm: IriTerm = { t: \"i\", i: relationshipURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 subjectTerm: IriTerm = { t: \"i\", i: relationshipURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 subjectTerm: IriTerm = { t: \"i\", i: propertyURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 const pUri = triple.p && isIri(triple.p) ? triple.p.i : \"\";\n return pUri !== RDFS_LABEL;\n })\n .map((triple) => {\n const pUri = triple.p && isIri(triple.p) ? triple.p.i : \"\";\n const oValue = triple.o ? getTermValue(triple.o) : \"\";\n return {\n predicate: {\n uri: pUri,\n label: propertyLabelsQuery.data?.[pUri] || pUri,\n },\n value: oValue,\n };\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","import { useState, useCallback, useRef } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport type { ChunkedUploadDocumentMetadata } from \"@trustgraph/client\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { createDocId } from \"../model/document-metadata\";\n\n// Default chunk size: 5MB (matches backend default)\nconst DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024;\n\n// Maximum parallel chunk uploads\nconst DEFAULT_PARALLEL_UPLOADS = 3;\n\nexport type UploadStatus =\n | \"idle\"\n | \"preparing\"\n | \"uploading\"\n | \"paused\"\n | \"completing\"\n | \"completed\"\n | \"error\"\n | \"cancelled\";\n\nexport interface UploadProgress {\n /** Total bytes to upload */\n totalBytes: number;\n /** Bytes uploaded so far */\n bytesUploaded: number;\n /** Upload percentage (0-100) */\n percentage: number;\n /** Total number of chunks */\n totalChunks: number;\n /** Number of chunks uploaded */\n chunksUploaded: number;\n /** Indices of chunks still pending */\n pendingChunks: number[];\n /** Current upload status */\n status: UploadStatus;\n /** Error message if status is 'error' */\n error?: string;\n /** Upload ID from server (for resume) */\n uploadId?: string;\n /** Document ID after completion */\n documentId?: string;\n}\n\nexport interface ChunkedUploadOptions {\n /** Chunk size in bytes (default: 5MB) */\n chunkSize?: number;\n /** Number of parallel chunk uploads (default: 3) */\n parallelUploads?: number;\n /** Progress callback for real-time updates */\n onProgress?: (progress: UploadProgress) => void;\n /** Called when upload completes successfully */\n onComplete?: (documentId: string) => void;\n /** Called on error */\n onError?: (error: string) => void;\n}\n\nexport interface ChunkedUploadParams {\n /** File to upload */\n file: File;\n /** Document title */\n title: string;\n /** Optional comments/description */\n comments?: string;\n /** Optional tags for categorization */\n tags?: string[];\n /** Optional collection name */\n collection?: string;\n /** Optional document ID (auto-generated if not provided) */\n documentId?: string;\n}\n\nexport interface ResumeUploadParams {\n /** Upload ID from a previous session */\n uploadId: string;\n /** File to resume uploading (must match original) */\n file: File;\n}\n\n/**\n * Hook for managing chunked document uploads with progress tracking\n *\n * Features:\n * - Automatic chunking of large files\n * - Parallel chunk uploads for performance\n * - Progress tracking (bytes, percentage, chunks)\n * - Pause/resume support\n * - Cancel support\n * - Resumability after interruption\n *\n * @param options - Configuration options for the upload\n * @returns Upload state and control methods\n */\nexport const useChunkedUpload = (options: ChunkedUploadOptions = {}) => {\n const {\n chunkSize = DEFAULT_CHUNK_SIZE,\n parallelUploads = DEFAULT_PARALLEL_UPLOADS,\n onProgress,\n onComplete,\n onError,\n } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Upload state\n const [progress, setProgress] = useState<UploadProgress>({\n totalBytes: 0,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks: 0,\n chunksUploaded: 0,\n pendingChunks: [],\n status: \"idle\",\n });\n\n // Refs for managing upload lifecycle\n const abortControllerRef = useRef<AbortController | null>(null);\n const isPausedRef = useRef(false);\n const currentFileRef = useRef<File | null>(null);\n const uploadIdRef = useRef<string | null>(null);\n\n // Update progress and notify callback\n const updateProgress = useCallback(\n (updates: Partial<UploadProgress>) => {\n setProgress((prev) => {\n const next = { ...prev, ...updates };\n onProgress?.(next);\n return next;\n });\n },\n [onProgress]\n );\n\n // Read a chunk from the file as base64\n const readChunkAsBase64 = useCallback(\n async (file: File, chunkIndex: number, chunkSz: number): Promise<string> => {\n const start = chunkIndex * chunkSz;\n const end = Math.min(start + chunkSz, file.size);\n const blob = file.slice(start, end);\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const dataUrl = reader.result as string;\n // Extract base64 from data URL\n const base64 = dataUrl.replace(/^data:[^;]+;base64,/, \"\");\n resolve(base64);\n };\n reader.onerror = () => reject(new Error(\"Failed to read file chunk\"));\n reader.readAsDataURL(blob);\n });\n },\n []\n );\n\n // Upload chunks in parallel with concurrency limit\n const uploadChunks = useCallback(\n async (\n file: File,\n uploadId: string,\n pendingChunks: number[],\n chunkSz: number,\n totalChunks: number\n ): Promise<void> => {\n const remaining = [...pendingChunks];\n let completedCount = totalChunks - remaining.length;\n let bytesUploaded = completedCount * chunkSz;\n\n // Process chunks with limited parallelism\n const uploadNextBatch = async (): Promise<void> => {\n while (remaining.length > 0 && !abortControllerRef.current?.signal.aborted) {\n // Wait if paused\n if (isPausedRef.current) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n continue;\n }\n\n // Take up to parallelUploads chunks\n const batch = remaining.splice(0, parallelUploads);\n\n // Upload batch in parallel\n const results = await Promise.allSettled(\n batch.map(async (chunkIndex) => {\n const content = await readChunkAsBase64(file, chunkIndex, chunkSz);\n await socket.librarian().uploadChunk(uploadId, chunkIndex, content);\n return chunkIndex;\n })\n );\n\n // Process results\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n completedCount++;\n // Calculate actual bytes for this chunk\n const chunkIdx = result.value;\n const chunkStart = chunkIdx * chunkSz;\n const chunkEnd = Math.min(chunkStart + chunkSz, file.size);\n bytesUploaded += chunkEnd - chunkStart;\n\n updateProgress({\n chunksUploaded: completedCount,\n bytesUploaded,\n percentage: Math.round((bytesUploaded / file.size) * 100),\n pendingChunks: [...remaining],\n });\n } else {\n // Re-add failed chunk to retry\n const failedIndex = batch[results.indexOf(result)];\n remaining.push(failedIndex);\n console.warn(`Chunk ${failedIndex} failed, will retry:`, result.reason);\n }\n }\n }\n };\n\n await uploadNextBatch();\n },\n [socket, parallelUploads, readChunkAsBase64, updateProgress]\n );\n\n /**\n * Start a new chunked upload\n */\n const upload = useCallback(\n async (params: ChunkedUploadParams): Promise<string | null> => {\n const { file, title, comments = \"\", tags = [], collection, documentId } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return null;\n }\n\n // Reset state\n abortControllerRef.current = new AbortController();\n isPausedRef.current = false;\n currentFileRef.current = file;\n\n const docId = documentId || createDocId();\n const totalChunks = Math.ceil(file.size / chunkSize);\n const pendingChunks = Array.from({ length: totalChunks }, (_, i) => i);\n\n updateProgress({\n totalBytes: file.size,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks,\n chunksUploaded: 0,\n pendingChunks,\n status: \"preparing\",\n error: undefined,\n uploadId: undefined,\n documentId: undefined,\n });\n\n try {\n // Initialize upload session\n const metadata: ChunkedUploadDocumentMetadata = {\n id: docId,\n time: Math.floor(Date.now() / 1000),\n kind: file.type || \"application/octet-stream\",\n title,\n comments,\n user: \"trustgraph\", // Will be set by server based on auth\n collection: collection || \"default\",\n tags,\n };\n\n const beginResponse = await socket\n .librarian()\n .beginUpload(metadata, file.size, chunkSize);\n\n const uploadId = beginResponse[\"upload-id\"];\n uploadIdRef.current = uploadId;\n\n updateProgress({\n status: \"uploading\",\n uploadId,\n });\n\n // Upload all chunks\n await uploadChunks(file, uploadId, pendingChunks, chunkSize, totalChunks);\n\n // Check if cancelled\n if (abortControllerRef.current?.signal.aborted) {\n return null;\n }\n\n // Complete the upload\n updateProgress({ status: \"completing\" });\n const completeResponse = await socket.librarian().completeUpload(uploadId);\n\n const finalDocId = completeResponse[\"document-id\"];\n\n updateProgress({\n status: \"completed\",\n documentId: finalDocId,\n percentage: 100,\n });\n\n // Invalidate documents cache\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n\n notify.success(`Upload complete: ${title}`);\n onComplete?.(finalDocId);\n\n return finalDocId;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n updateProgress({ status: \"error\", error: errorMsg });\n notify.error(`Upload failed: ${errorMsg}`);\n onError?.(errorMsg);\n return null;\n }\n },\n [\n socket,\n connectionState,\n chunkSize,\n queryClient,\n notify,\n updateProgress,\n uploadChunks,\n onComplete,\n onError,\n ]\n );\n\n /**\n * Resume an interrupted upload\n */\n const resume = useCallback(\n async (params: ResumeUploadParams): Promise<string | null> => {\n const { uploadId, file } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return null;\n }\n\n abortControllerRef.current = new AbortController();\n isPausedRef.current = false;\n currentFileRef.current = file;\n uploadIdRef.current = uploadId;\n\n updateProgress({\n status: \"preparing\",\n uploadId,\n });\n\n try {\n // Get current upload status\n const status = await socket.librarian().getUploadStatus(uploadId);\n\n if (status[\"upload-state\"] === \"completed\") {\n updateProgress({ status: \"completed\" });\n return null;\n }\n\n if (status[\"upload-state\"] === \"expired\") {\n throw new Error(\"Upload session has expired\");\n }\n\n const totalChunks = status[\"total-chunks\"];\n const missingChunks = status[\"missing-chunks\"];\n const bytesReceived = status[\"bytes-received\"];\n const totalBytes = status[\"total-bytes\"];\n\n updateProgress({\n totalBytes,\n bytesUploaded: bytesReceived,\n percentage: Math.round((bytesReceived / totalBytes) * 100),\n totalChunks,\n chunksUploaded: totalChunks - missingChunks.length,\n pendingChunks: missingChunks,\n status: \"uploading\",\n });\n\n // Upload missing chunks\n const effectiveChunkSize = status[\"chunk-size\"] || chunkSize;\n await uploadChunks(file, uploadId, missingChunks, effectiveChunkSize, totalChunks);\n\n // Check if cancelled\n if (abortControllerRef.current?.signal.aborted) {\n return null;\n }\n\n // Complete the upload\n updateProgress({ status: \"completing\" });\n const completeResponse = await socket.librarian().completeUpload(uploadId);\n\n const finalDocId = completeResponse[\"document-id\"];\n\n updateProgress({\n status: \"completed\",\n documentId: finalDocId,\n percentage: 100,\n });\n\n // Invalidate documents cache\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n\n notify.success(\"Upload resumed and completed\");\n onComplete?.(finalDocId);\n\n return finalDocId;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n updateProgress({ status: \"error\", error: errorMsg });\n notify.error(`Resume failed: ${errorMsg}`);\n onError?.(errorMsg);\n return null;\n }\n },\n [\n socket,\n connectionState,\n chunkSize,\n queryClient,\n notify,\n updateProgress,\n uploadChunks,\n onComplete,\n onError,\n ]\n );\n\n /**\n * Pause the current upload\n */\n const pause = useCallback(() => {\n if (progress.status === \"uploading\") {\n isPausedRef.current = true;\n updateProgress({ status: \"paused\" });\n }\n }, [progress.status, updateProgress]);\n\n /**\n * Resume a paused upload (not to be confused with resuming an interrupted upload)\n */\n const unpause = useCallback(() => {\n if (progress.status === \"paused\") {\n isPausedRef.current = false;\n updateProgress({ status: \"uploading\" });\n }\n }, [progress.status, updateProgress]);\n\n /**\n * Cancel the current upload\n */\n const cancel = useCallback(async () => {\n abortControllerRef.current?.abort();\n\n if (uploadIdRef.current) {\n try {\n await socket.librarian().abortUpload(uploadIdRef.current);\n } catch (err) {\n console.warn(\"Failed to abort upload on server:\", err);\n }\n }\n\n updateProgress({\n status: \"cancelled\",\n pendingChunks: [],\n });\n\n uploadIdRef.current = null;\n currentFileRef.current = null;\n }, [socket, updateProgress]);\n\n /**\n * Reset the upload state to idle\n */\n const reset = useCallback(() => {\n abortControllerRef.current?.abort();\n uploadIdRef.current = null;\n currentFileRef.current = null;\n isPausedRef.current = false;\n\n setProgress({\n totalBytes: 0,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks: 0,\n chunksUploaded: 0,\n pendingChunks: [],\n status: \"idle\",\n });\n }, []);\n\n return {\n // Current progress state\n progress,\n\n // Control methods\n upload,\n resume,\n pause,\n unpause,\n cancel,\n reset,\n\n // Convenience flags\n isIdle: progress.status === \"idle\",\n isUploading: progress.status === \"uploading\",\n isPaused: progress.status === \"paused\",\n isCompleted: progress.status === \"completed\",\n isError: progress.status === \"error\",\n };\n};\n","import { useState, useCallback, useRef } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\n\n// Default chunk size for downloads: 1MB\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024;\n\nexport type DownloadStatus =\n | \"idle\"\n | \"downloading\"\n | \"completed\"\n | \"error\"\n | \"cancelled\";\n\nexport interface DownloadProgress {\n /** Total number of chunks (known after first chunk arrives) */\n totalChunks: number;\n /** Number of chunks received */\n chunksReceived: number;\n /** Download percentage (0-100) */\n percentage: number;\n /** Current download status */\n status: DownloadStatus;\n /** Error message if status is 'error' */\n error?: string;\n /** Document ID being downloaded */\n documentId?: string;\n}\n\nexport interface ChunkedDownloadOptions {\n /** Chunk size in bytes (default: 1MB) */\n chunkSize?: number;\n /** Progress callback for real-time updates */\n onProgress?: (progress: DownloadProgress) => void;\n /** Called when download completes with the Blob */\n onComplete?: (blob: Blob, documentId: string) => void;\n /** Called on error */\n onError?: (error: string) => void;\n}\n\nexport interface DownloadParams {\n /** Document ID to download */\n documentId: string;\n /** Optional MIME type for the resulting Blob (default: application/octet-stream) */\n mimeType?: string;\n /** Optional filename for browser download (if not provided, returns Blob only) */\n filename?: string;\n}\n\n/**\n * Decode base64 string to Uint8Array\n */\nconst base64ToUint8Array = (base64: string): Uint8Array => {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n};\n\n/**\n * Trigger browser download of a Blob\n */\nconst triggerBrowserDownload = (blob: Blob, filename: string): void => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n};\n\n/**\n * Hook for managing streamed document downloads with progress tracking\n *\n * Features:\n * - Streams large documents via WebSocket streaming response\n * - Progress tracking (chunks received, percentage)\n * - Cancel support\n * - Returns Blob or triggers browser download\n *\n * @param options - Configuration options for the download\n * @returns Download state and control methods\n */\nexport const useChunkedDownload = (options: ChunkedDownloadOptions = {}) => {\n const {\n chunkSize = DEFAULT_CHUNK_SIZE,\n onProgress,\n onComplete,\n onError,\n } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n\n // Download state\n const [progress, setProgress] = useState<DownloadProgress>({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"idle\",\n });\n\n // Refs for managing download lifecycle\n const cancelledRef = useRef(false);\n const chunksRef = useRef<Map<number, Uint8Array>>(new Map());\n\n // Update progress and notify callback\n const updateProgress = useCallback(\n (updates: Partial<DownloadProgress>) => {\n setProgress((prev) => {\n const next = { ...prev, ...updates };\n onProgress?.(next);\n return next;\n });\n },\n [onProgress]\n );\n\n /**\n * Download a document via streaming and return as Blob\n */\n const download = useCallback(\n (params: DownloadParams): Promise<Blob | null> => {\n const { documentId, mimeType = \"application/octet-stream\", filename } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return Promise.resolve(null);\n }\n\n // Reset state\n cancelledRef.current = false;\n chunksRef.current = new Map();\n\n updateProgress({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"downloading\",\n error: undefined,\n documentId,\n });\n\n return new Promise<Blob | null>((resolve) => {\n const onChunk = (\n content: string,\n chunkIndex: number,\n totalChunks: number,\n complete: boolean\n ) => {\n // Check for cancellation\n if (cancelledRef.current) {\n return;\n }\n\n // Store chunk\n const chunkData = base64ToUint8Array(content);\n chunksRef.current.set(chunkIndex, chunkData);\n\n const chunksReceived = chunksRef.current.size;\n const percentage = totalChunks > 0\n ? Math.round((chunksReceived / totalChunks) * 100)\n : 0;\n\n updateProgress({\n totalChunks,\n chunksReceived,\n percentage,\n });\n\n // If complete, reassemble and return\n if (complete) {\n if (cancelledRef.current) {\n resolve(null);\n return;\n }\n\n // Reassemble chunks in order\n const orderedChunks: Uint8Array[] = [];\n for (let i = 0; i < totalChunks; i++) {\n const chunk = chunksRef.current.get(i);\n if (chunk) {\n orderedChunks.push(chunk);\n }\n }\n\n const blob = new Blob(orderedChunks as BlobPart[], { type: mimeType });\n\n updateProgress({\n status: \"completed\",\n percentage: 100,\n chunksReceived: totalChunks,\n });\n\n // Trigger browser download if filename provided\n if (filename) {\n triggerBrowserDownload(blob, filename);\n }\n\n notify.success(\"Download complete\");\n onComplete?.(blob, documentId);\n\n resolve(blob);\n }\n };\n\n const onStreamError = (error: string) => {\n if (cancelledRef.current) {\n return;\n }\n\n updateProgress({ status: \"error\", error });\n notify.error(`Download failed: ${error}`);\n onError?.(error);\n resolve(null);\n };\n\n // Start streaming download\n socket.librarian().streamDocument(\n documentId,\n onChunk,\n onStreamError,\n chunkSize\n );\n });\n },\n [socket, connectionState, chunkSize, notify, updateProgress, onComplete, onError]\n );\n\n /**\n * Cancel the current download\n */\n const cancel = useCallback(() => {\n cancelledRef.current = true;\n chunksRef.current = new Map();\n\n updateProgress({\n status: \"cancelled\",\n });\n }, [updateProgress]);\n\n /**\n * Reset the download state to idle\n */\n const reset = useCallback(() => {\n cancelledRef.current = true;\n chunksRef.current = new Map();\n\n setProgress({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"idle\",\n });\n }, []);\n\n return {\n // Current progress state\n progress,\n\n // Control methods\n download,\n cancel,\n reset,\n\n // Convenience flags\n isIdle: progress.status === \"idle\",\n isDownloading: progress.status === \"downloading\",\n isCompleted: progress.status === \"completed\",\n isError: progress.status === \"error\",\n };\n};\n","/**\n * Hook for fetching document metadata from the librarian service\n */\n\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport type { DocumentMetadata } from \"@trustgraph/client\";\n\nexport interface UseDocumentMetadataOptions {\n /** Document ID to fetch */\n documentId?: string;\n /** Whether to enable the query (default: true if documentId is provided) */\n enabled?: boolean;\n}\n\nexport interface UseDocumentMetadataResult {\n /** Document metadata if loaded */\n metadata: DocumentMetadata | null;\n /** Whether the query is loading */\n isLoading: boolean;\n /** Whether there was an error */\n isError: boolean;\n /** Error object if any */\n error: Error | null;\n /** Refetch the metadata */\n refetch: () => void;\n}\n\n/**\n * Hook for fetching a single document's metadata\n */\nexport const useDocumentMetadata = (\n options: UseDocumentMetadataOptions = {}\n): UseDocumentMetadataResult => {\n const { documentId, enabled } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const query = useQuery({\n queryKey: [\"document-metadata\", documentId],\n enabled: isSocketReady && !!documentId && (enabled !== false),\n queryFn: async () => {\n if (!documentId) return null;\n return socket.librarian().getDocumentMetadata(documentId);\n },\n });\n\n return {\n metadata: query.data ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n\n/**\n * Hook for fetching multiple documents' metadata\n */\nexport const useDocumentsMetadata = (documentIds: string[] = []) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const query = useQuery({\n queryKey: [\"documents-metadata\", documentIds],\n enabled: isSocketReady && documentIds.length > 0,\n queryFn: async () => {\n const results = await Promise.all(\n documentIds.map(async (id) => {\n // Check cache first\n const cached = queryClient.getQueryData<DocumentMetadata | null>([\n \"document-metadata\",\n id,\n ]);\n if (cached !== undefined) {\n return { id, metadata: cached };\n }\n\n // Fetch and cache\n const metadata = await socket.librarian().getDocumentMetadata(id);\n queryClient.setQueryData([\"document-metadata\", id], metadata);\n return { id, metadata };\n })\n );\n\n return results.reduce(\n (acc, { id, metadata }) => {\n acc[id] = metadata;\n return acc;\n },\n {} as Record<string, DocumentMetadata | null>\n );\n },\n });\n\n return {\n metadataMap: query.data ?? {},\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n"],"names":["_jsx","RDFS_LABEL","uuidv4","getTermValue","isIri","DEFAULT_CHUNK_SIZE"],"mappings":";;;;;;;;;;;AAGA;AACO,MAAM,mBAAmB,GAAG,aAAa,CAC9C,IAAI,CACL;AAUD;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,EACR,OAAO,GACR,KAAI;AACH,IAAA,QACEA,GAAA,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,GAAG,UAAU,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,GAAG,MAAM,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;IAED,SAAS,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,GAAG,MAAM,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;;ACbK,MAAM,eAAe,GAAG,MAAM,EAAqB,CAAC,CAAC,GAAG,MAAM;AACnE,IAAA,QAAQ,EAAE,EACT;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,EACvD,gBAAyB,KAEzB,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;gBACtB,gBAAgB;AACjB,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AAEL,IAAA,iBAAiB,EAAE,CAAC,IAAY,EAAE,gBAAyB,KACzD,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;YACV,IAAI,gBAAgB,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,CAAC;SAC5D;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,GAAG,MAAM,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,GAAG,MAAM,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,GAAG,MAAM,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;;ACTK,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;QAChB,cAAc,EAAE,IAAI;AACrB,KAAA;;AAGI,MAAM,oBAAoB,GAAG;;ACtDpC;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,GAAG,cAAc,EAAE;;AAEpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;IAGhC,MAAM,aAAa,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,QAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,kBAAkB,CAAC;AAC9B,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,GAAG,WAAW,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,GAAG,WAAW,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,MAAMC,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,EAAM,EAAE;AAChD;MAEa,eAAe,GAAG,CAAC,MAAc,EAAE,MAA0B,KAAI;AAC5E,IAAA,IAAI,QAAQ,GAAa;AACvB,QAAA;YACE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;YACxB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE;YAC1B,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,gBAAgB,EAAE;AACnC,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,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;gBACxB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAED,YAAU,EAAE;AAC5B,gBAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE;AACrC,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,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;gBACxB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE;AAC5B,gBAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE;AACnC,aAAA;SACF;AAEH,IAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE;AACzC,QAAA,QAAQ,GAAG;AACT,YAAA,GAAG,QAAQ;AACX,YAAA;gBACE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;gBACxB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE;gBACjC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE;AAC1B,aAAA;SACF;AAEH,IAAA,OAAO,QAAQ;AACjB;;AC7DA;AAWA;;;;AAIG;AACI,MAAM,UAAU,GAAG,MAkBtB;;AAEF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAGC,EAAM,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,GAAG,WAAW,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,GAAG,WAAW,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;AASA;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAO5D,KAMG;;AAEF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;;AAG1B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C;;;AAGG;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC9D,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,aAAa;AAClB,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;;ACtEA;AACO,MAAMC,cAAY,GAAG,CAAC,IAAU,KAAY;AACjD,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAgB,CAAC,CAAC;AAC9C,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAoB,CAAC,CAAC;AAClD,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAA,OAAO,EAAE;AACX;AAEA;AACA,MAAMC,OAAK,GAAG,CAAC,IAAU,KAAsB,IAAI,CAAC,CAAC,KAAK,GAAG;AAEtD,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,GAAG,EAAE,EAClB,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,GAAG,EAAE,EAClB,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,GAAG,EAAE,EAClB,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,GAAG,EAAE,EAClB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,EACzB,SAAS,EACT,CAAC,EACD,UAAU;AAEX,SAAA,IAAI,CAAC,CAAC,OAAiB,KAAI;;;AAG1B,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAOD,cAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AACpD,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,OAAmC,EACnC,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACS;IAC5B,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAChB,OAAO,UAAU,CAAC,MAAM,EAAEA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CACxE,CAAC,KAAa,KAAI;YAChB,OAAO;AACL,gBAAA,GAAG,CAAC;AACJ,gBAAA,CAAC,EAAE;oBACD,GAAG,CAAC,CAAC,CAAC;AACN,oBAAA,KAAK,EAAE,KAAK;AACE,iBAAA;aACjB;AACH,QAAA,CAAC,CACF;IACH,CAAC,CAAC,CACH;AACH,CAAC;AAED;AACA;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,OAAmC,EACnC,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACS;IAC5B,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAChB,OAAO,UAAU,CAAC,MAAM,EAAEA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CACxE,CAAC,KAAa,KAAI;YAChB,OAAO;AACL,gBAAA,GAAG,CAAC;AACJ,gBAAA,CAAC,EAAE;oBACD,GAAG,CAAC,CAAC,CAAC;AACN,oBAAA,KAAK,EAAE,KAAK;AACE,iBAAA;aACjB;AACH,QAAA,CAAC,CACF;IACH,CAAC,CAAC,CACH;AACH,CAAC;AAED;AACA;AACO,MAAM,MAAM,GAAG,CACpB,MAAe,EACf,OAAmC,EACnC,GAAwB,EACxB,MAA2B,EAC3B,UAAmB,KACS;IAC5B,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;;;AAGhB,QAAA,IAAIC,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,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;AACE,qBAAA;iBACjB;AACH,YAAA,CAAC,CACF;;AAED,YAAA,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,KAAI;AAC5C,gBAAA,OAAO,CAAC;AACN,oBAAA,GAAG,CAAC;AACJ,oBAAA,CAAC,EAAE;wBACD,GAAG,CAAC,CAAC,CAAC;AACN,wBAAA,KAAK,EAAED,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACV,qBAAA;AACjB,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;IACN,CAAC,CAAC,CACH;AACH,CAAC;AAMD;AACO,MAAM,eAAe,GAAG,CAAmC,OAAY,KAC5E,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACnB,IAAA,IAAIC,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU;AAAE,QAAA,OAAO,KAAK;AACnD,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;;AC9VA;AACA;AAWA;AACA,MAAMD,cAAY,GAAG,CAAC,IAAU,KAAY;AAC1C,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAgB,CAAC,CAAC;AAC9C,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAoB,CAAC,CAAC;AAClD,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAA,OAAO,EAAE;AACX,CAAC;AAED;AACA,MAAMC,OAAK,GAAG,CAAC,IAAU,KAAsB,IAAI,CAAC,CAAC,KAAK,GAAG;AAwBtD,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;;;QAGvB,IAAI,CAACA,OAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACf;QACF;;QAEA,MAAM,QAAQ,GAAGD,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;QAGlC,MAAM,QAAQ,GAAGA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;QAGlC,MAAM,MAAM,GAAGA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAgB;AACnC,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,SAAS;AAClD,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,QAAQ,GAAG,CAAC,CAAC,CAAgB;AACnC,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,SAAS;AAClD,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,QAAQ,GAAG,CAAC,CAAC,CAAgB;AACnC,YAAA,MAAM,CAAC,GAAS;AACd,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,SAAS;AAClD,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,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE;QAC7B,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE;AAC9B,QAAA,SAAS;AACT,QAAA,EAAE;AACF,QAAA,UAAU;AAEd,UAAE,MAAM,CAAC,YAAY,CACjB,SAAS;QACT,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE;QAC9B,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE;AAC7B,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;;ACrKD;;;;;;;AAOG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAC/B,SAAS,EACT,IAAI,EACJ,UAAU,GAKX,KAAI;;AAEH,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;;AAG1B,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C,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,GAAG,cAAc,EAAE;AAEpC;;;AAGG;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QAC5E,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,aAAa,CAAC;AACtC,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,aAAa;AACxC,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,cAAc,GAAG,WAAW,CAAC;QACjC,UAAU,EAAE,OAAO,EACjB,MAAM,EACN,YAAY,GAIb,KAAI;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,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,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,EAClE,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,GAAG,WAAW,CAAC;AACjD,QAAA,UAAU,EAAE,OAAO,EACjB,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,GAMb,KAAI;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,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,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,EAClE,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;;ACnLA;;;AAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,UAAU,EAKrE,KAMG;AACF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAChC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AAClC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAE9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAC3C,IAAA,MAAM,mBAAmB,GAAG,UAAU,IAAI,QAAQ,CAAC,UAAU;IAE7D,MAAM,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AACpG,QAAA,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa;QACnD,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,aAAa;AAClB,iBAAA,oBAAoB,CAAC,GAAI,EAAE,KAAK,EAAE,mBAAmB;AACrD,iBAAA,KAAK,CAAC,CAAC,GAAY,KAAI;AACtB,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;AAEF,IAAA,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC;IAExD,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,IAAI;QAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;AC1CA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,CAChC,MAAe,EACf,GAAwB,EACxB,MAA2B,EAC3B,KAAc,EACd,UAAmB,KACjB;;;IAGF,OAAO,CAAC,GAAa,KAAoB;QACvC,MAAM,GAAG,GAAG,wBAAwB;QACpC,GAAG,CAAC,GAAG,CAAC;AAER,QAAA,OAAO;AACJ,aAAA,oBAAoB,CAAC,GAAG,EAAU,KAAK,CAAK,EAAE,UAAU;AACxD,aAAA,IAAI,CAAC,CAAC,OAAsB,KAAW;YACtC,MAAM,CAAC,GAAG,CAAC;AACX,YAAA,OAAO;AACJ,iBAAA,MAAM,CAAC,CAAC,CAAC,KACR,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG;AACxC,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAI;AACT,gBAAA,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;AACzC,YAAA,CAAC,CAAC;AACN,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,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EACtB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,EACzB,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,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB;gBACjC,OAAO;oBACL,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,KAAK,EAAE,GAAG,CAAC,CAAC;oBACZ,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,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EACtB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,EAC9B,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,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB;gBACjC,OAAO;AACL,oBAAA,GAAG,GAAG;oBACN,WAAW,EAAE,GAAG,CAAC,CAAC;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,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,aAAA,UAAU,CAAC,CAAC,IAAI,CAAC;AACjB,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;;AC1LM,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;AACJ,SAAA,UAAU,CAAC,CAAC,IAAI,CAAC;SACjB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AACtB,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,GAAG,SAAS,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,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;IAG9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AAEtD;;;AAGG;IACH,MAAM,WAAW,GAAG,QAAQ,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,aAAa,EACrB,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,aAAa;YAC3B,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;;ACpFA;;;;;;;AAOG;AACI,MAAM,eAAe,GAAG,CAAC,EAC9B,SAAS,EACT,IAAI,EACJ,UAAU,GAKX,KAMG;;AAEF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;;AAG1B,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C,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,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QAC3E,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,aAAa,CAAC;AACtC,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,aAAa;AACxC,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;;AClDA;;;AAGG;AACI,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAAI;AAC/D,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C;;;AAGG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAAC;AACnC,QAAA,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,GAMV,KAA6B;;AAE5B,YAAA,MAAM,mBAAmB,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS;YAClD,MAAM,aAAa,GAA+B,mBAAmB,GAAG,EAAE,GAAG,SAAS;;YAGtF,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;;oBAGD,MAAM,SAAS,GAAG;AAChB,0BAAE,CAAC,KAAmB,KAAI;AACtB,4BAAA,aAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,4BAAA,SAAS,CAAC,SAAU,CAAC,KAAK,CAAC;wBAC7B;0BACA,SAAS;oBAEb;yBACG,IAAI,CAAC,aAAa;AAClB,yBAAA,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC;AAC/E,gBAAA,CAAC;AACH,kBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC;;AAG/E,YAAA,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1E,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC;;YAGnC,MAAM,QAAQ,GAAG,MAAM;iBACpB,IAAI,CAAC,aAAa;iBAClB,oBAAoB,CACnB,UAAU,EACV,OAAO,EAAE,WAAW,IAAI,EAAE,EAC1B,UAAU,CACX;AAEH,YAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE;QAC9C,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,sBAAsB,GAAG,WAAW,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,aAAa;yBAClB,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AACnE,gBAAA,CAAC;AACH,kBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC;QAC1E,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACtC,QAAA,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,GAMV,KAAgC;AAC/B,YAAA,MAAM,mBAAmB,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS;YAClD,MAAM,aAAa,GAA+B,mBAAmB,GAAG,EAAE,GAAG,SAAS;YAEtF,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC7D,IAAI,WAAW,GAAG,EAAE;AAEpB,gBAAA,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAiB,KAAI;oBACnD,WAAW,IAAI,KAAK;oBACpB,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,CAAC;oBACrC,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,WAAW,CAAC;oBACtB;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,MAAM,SAAS,GAAG;AAChB,sBAAE,CAAC,KAAmB,KAAI;AACtB,wBAAA,aAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,wBAAA,SAAS,CAAC,SAAU,CAAC,KAAK,CAAC;oBAC7B;sBACA,SAAS;gBAEb;qBACG,IAAI,CAAC,aAAa;AAClB,qBAAA,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;AACnF,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE;QACpC,CAAC;AACF,KAAA,CAAC;AAEF;;AAEG;IACH,MAAM,aAAa,GAAG,WAAW,CAAC;QAChC,UAAU,EAAE,OAAO,EACjB,KAAK,EACL,UAAU,EACV,SAAS,GAKV,KAAqB;AACpB,YAAA,MAAM,mBAAmB,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS;YAClD,MAAM,aAAa,GAA+B,mBAAmB,GAAG,EAAE,GAAG,SAAS;YAEtF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC7C,IAAI,UAAU,GAAG,EAAE;gBAEnB,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,QAAiB,EAAE,SAAkB,KAAI;oBACzE,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;AACpD,gBAAA,CAAC;gBAED,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,QAAiB,EAAE,SAAkB,KAAI;oBAC/E,SAAS,EAAE,SAAS,GAAG,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;AAC1D,gBAAA,CAAC;gBAED,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,QAAiB,EAAE,SAAkB,KAAI;oBACzE,UAAU,IAAI,MAAM;oBACpB,SAAS,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;oBAClD,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,MAAM,SAAS,GAAG;AAChB,sBAAE,CAAC,KAAmB,KAAI;AACtB,wBAAA,aAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,wBAAA,SAAS,CAAC,SAAU,CAAC,KAAK,CAAC;oBAC7B;sBACA,SAAS;gBAEb;qBACG,IAAI,CAAC,aAAa;AAClB,qBAAA,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;AAC/E,YAAA,CAAC,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,gBAAgB,CAAC,WAAW;QACtC,WAAW,EAAE,mBAAmB,CAAC,WAAW;QAC5C,cAAc,EAAE,sBAAsB,CAAC,WAAW;QAClD,KAAK,EAAE,aAAa,CAAC,WAAW;QAChC,SAAS,EACP,gBAAgB,CAAC,SAAS;AAC1B,YAAA,mBAAmB,CAAC,SAAS;AAC7B,YAAA,sBAAsB,CAAC,SAAS;AAChC,YAAA,aAAa,CAAC,SAAS;KAC1B;AACH;;AC1RA;;;AAGG;AAyBI,MAAM,sBAAsB,GAAG,MAAM,EAA4B,CACtE,CAAC,GAAG,EAAE,GAAG,MAAM;AACb,IAAA,QAAQ,EAAE,EAAE;AAEZ,IAAA,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,KACtB,GAAG,CAAC,CAAC,KAAK,MAAM;AACd,QAAA,QAAQ,EAAE;YACR,GAAG,KAAK,CAAC,QAAQ;YACjB,CAAC,EAAE,GAAG,OAAO;AACd,SAAA;AACF,KAAA,CAAC,CAAC;AAEL,IAAA,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KACzB,GAAG,CAAC,CAAC,KAAK,MAAM;AACd,QAAA,QAAQ,EAAE;YACR,GAAG,KAAK,CAAC,QAAQ;YACjB,CAAC,EAAE,GAAG;AACJ,gBAAA,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACrB,gBAAA,GAAG,OAAO;AACX,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AAEL,IAAA,UAAU,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEtC,aAAa,EAAE,CAAC,EAAE,KAChB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,QAAA,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ;AAC3C,QAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC3B,IAAA,CAAC,CAAC;IAEJ,aAAa,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3C,CAAA,CAAC;;AC5DJ;;AAEG;AAsGH;;;AAGG;AACG,SAAU,YAAY,CAAC,SAAiB,EAAA;AAC5C,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,QAAA,OAAO,UAAU;AACrD,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,QAAA,OAAO,aAAa;AAC3D,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,QAAA,OAAO,OAAO;AAC/C,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;AAAE,QAAA,OAAO,WAAW;AACvD,IAAA,OAAO,SAAS;AAClB;AAEA;;AAEG;AACG,SAAUA,cAAY,CAAC,IAAU,EAAA;AACrC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AACpB,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;AAAE,QAAA,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE;AACvC,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;AAAE,QAAA,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE;IACvC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;;QAE7B,MAAM,CAAC,GAAGA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAGA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAGA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,QAAA,OAAO,KAAK,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI;IAC7B;AACA,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,IAAU,EAAA;IAC5C,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;QAC7B,OAAO;YACL,CAAC,EAAEA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAEA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAEA,cAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3B;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;SACa,oBAAoB,CAClC,SAAiB,EACjB,YAAoB,EACpB,OAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAkB;AAC3B,QAAA,IAAI,EAAE,UAAU;QAChB,SAAS;QACT,YAAY;KACb;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,KAAK,GAAG,CAAC;QACjB;AAAO,aAAA,IAAI,CAAC,KAAK,oBAAoB,EAAE;AACrC,YAAA,KAAK,CAAC,SAAS,GAAG,CAAC;QACrB;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;SACa,uBAAuB,CACrC,SAAiB,EACjB,YAAoB,EACpB,OAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAqB;AAC9B,QAAA,IAAI,EAAE,aAAa;QACnB,SAAS;QACT,YAAY;KACb;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,aAAa,EAAE;YACvB,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;QACnC;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;SACa,iBAAiB,CAC/B,SAAiB,EACjB,YAAoB,EACpB,OAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAe;AACxB,QAAA,IAAI,EAAE,OAAO;QACb,SAAS;QACT,YAAY;AACZ,QAAA,iBAAiB,EAAE,EAAE;KACtB;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,gBAAgB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACnD,YAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;SACa,qBAAqB,CACnC,SAAiB,EACjB,YAAoB,EACpB,OAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAmB;AAC5B,QAAA,IAAI,EAAE,WAAW;QACjB,SAAS;QACT,YAAY;KACb;AAED,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,UAAU,EAAE;AACpB,YAAA,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM;QAChC;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;AACG,SAAU,yBAAyB,CAAC,OAAiB,EAAA;IAIzD,IAAI,IAAI,GAA+C,IAAI;IAC3D,IAAI,SAAS,GAAkB,IAAI;AAEnC,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,CAAC,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,OAAO,EAAE;AACjB,YAAA,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC;AAAO,aAAA,IAAI,CAAC,KAAK,YAAY,EAAE;AAC7B,YAAA,SAAS,GAAGA,cAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC;IACF;AAEA,IAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AAC5B;AAEA;;AAEG;SACa,mBAAmB,CACjC,SAAiB,EACjB,YAAoB,EACpB,OAAiB,EAAA;AAEjB,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IAEzC,QAAQ,SAAS;AACf,QAAA,KAAK,UAAU;YACb,OAAO,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;AAC/D,QAAA,KAAK,aAAa;YAChB,OAAO,uBAAuB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;AAClE,QAAA,KAAK,OAAO;YACV,OAAO,iBAAiB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;AAC5D,QAAA,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;AAChE,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;;AC3SA;;;AAGG;AAkCH;;AAEG;MACU,aAAa,GAAG,CAAC,OAAA,GAAgC,EAAE,KAAyB;AACvF,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO;AAE/D,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;IAE3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAGjD,MAAM,aAAa,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC;AAE5D;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;AACnC,QAAA,QACE,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,YAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAEjD,IAAA,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AAErB;;AAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC9B,OAAO,GAAW,KAAqB;;QAErC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE;QACxC;;AAGA,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACtD,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE;AAClB,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,MAAM;iBACnB,IAAI,CAAC,aAAa;iBAClB,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAClB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAEF,YAAU,EAAE,EACzB,SAAS,EACT,CAAC,EACD,UAAU,CACX;YAEH,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,GAAG,CAAC,GAAGE,cAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;;YAGvD,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACrC,YAAA,OAAO,KAAK;QACd;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,GAAG;QACZ;IACF,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CACjD;AAED;;AAEG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAClC,OAAO,GAAW,KAA4B;QAC5C,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI;AAE/B,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,MAAM;iBACnB,IAAI,CAAC,aAAa;iBAClB,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAClB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,qBAAqB,EAAE,EACpC,SAAS,EACT,CAAC,EACD,UAAU,CACX;AAEH,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,OAAOA,cAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC;AACA,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CACjD;AAED;;AAEG;IACH,MAAM,UAAU,GAAG,WAAW,CAC5B,OAAO,GAAW,KAA8B;QAC9C,YAAY,CAAC,IAAI,CAAC;AAElB,QAAA,IAAI;YACF,MAAM,KAAK,GAA0B,EAAE;YACvC,IAAI,OAAO,GAAkB,GAAG;AAEhC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE;AACxD,gBAAA,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEnC,gBAAA,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;oBACjC;gBACF;gBACA,OAAO,GAAG,MAAM;YAClB;;YAGA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;YAEvE,OAAO;gBACL,KAAK;gBACL,WAAW,EAAE,QAAQ,EAAE,GAAG;gBAC1B,aAAa,EAAE,QAAQ,EAAE,KAAK;aAC/B;QACH;gBAAU;YACR,YAAY,CAAC,KAAK,CAAC;QACrB;IACF,CAAC,EACD,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAC3C;AAED;;AAEG;AACH,IAAA,MAAM,uBAAuB,GAAG,WAAW,CACzC,OAAO,CAAS,EAAE,CAAS,EAAE,CAAS,KAAuB;QAC3D,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,EAAE;AAE7B,QAAA,IAAI;;AAEF,YAAA,MAAM,YAAY,GAAS;AACzB,gBAAA,CAAC,EAAE,GAAG;AACN,gBAAA,EAAE,EAAE;oBACF,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;oBACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACnB,oBAAA,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM;0BAC1C,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;0BACd,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACrB,iBAAA;aACF;YAED,MAAM,OAAO,GAAG,MAAM;iBACnB,IAAI,CAAC,aAAa;AAClB,iBAAA,YAAY,CACX,SAAS,EACT,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,EACzB,YAAY,EACZ,EAAE,EACF,UAAU,CACX;AAEH,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAKA,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE;QACX;IACF,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CACjD;AAED;;AAEG;AACH,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,OAAO,CAAS,EAAE,CAAS,EAAE,CAAS,KAAgC;QACpE,YAAY,CAAC,IAAI,CAAC;AAElB,QAAA,IAAI;;YAEF,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;YAGvD,MAAM,MAAM,GAAsB,EAAE;AAEpC,YAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;;AAE9B,gBAAA,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC;gBACjD,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC;AACzC,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB;YACF;AAEA,YAAA,OAAO,MAAM;QACf;gBAAU;YACR,YAAY,CAAC,KAAK,CAAC;QACrB;IACF,CAAC,EACD,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,UAAU,CAAC,CACxD;AAED;;AAEG;AACH,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAK;AAClC,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE;IAC/B,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;QACL,UAAU;QACV,mBAAmB;QACnB,YAAY;QACZ,UAAU;QACV,SAAS;KACV;AACH;;AC/PA;;;;;;;;;;AAUG;AA8CH;;AAEG;MACU,iBAAiB,GAAG,CAC/B,OAAA,GAAoC,EAAE,KACX;AAC3B,IAAA,MAAM,EACJ,IAAI,EACJ,UAAU,GAAG,SAAS,EACtB,eAAe,GAAG,IAAI,GACvB,GAAG,OAAO;AAEX,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C,IAAA,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;AAC1D,QAAA,IAAI,EAAE,aAAa;QACnB,UAAU;AACX,KAAA,CAAC;IAEF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;AAGvD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAwB,EAAE,CAAC;;AAGpD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAiB,EAAE,CAAC;AACjD,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;AAErC;;AAEG;AACH,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;AACnC,QAAA,QACE,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,YAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAEjD,IAAA,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AAErB;;AAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC9B,OAAO,SAAiB,EAAE,YAAqB,KAAuB;AACpE,QAAA,OAAO;aACJ,IAAI,CAAC,aAAa;aAClB,YAAY,CACX,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EACxB,SAAS,EACT,SAAS,EACT,GAAG,EACH,UAAU,EACV,YAAY,CACb;IACL,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CACpC;AAED;;;;;AAKG;AACH,IAAA,MAAM,uBAAuB,GAAG,WAAW,CACzC,OAAO,SAAiB,EAAE,YAAqB,EAAE,SAAA,GAAoB,IAAI,KAAuB;QAC9F,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,EAAE;QAE7B,MAAM,UAAU,GAAG,GAAG;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;AACzD,QAAA,IAAI,SAAS,GAAG,EAAE;AAElB,QAAA,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE;AACtD,YAAA,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC;AAC3D,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;gBAE5B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;AACpC,oBAAA,OAAO,OAAO;gBAChB;gBAEA,SAAS,GAAG,KAAK;AAEjB,gBAAA,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE;AAC7B,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACrD;YACF;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,EAAE,GAAG,CAAC;AAC/D,gBAAA,OAAO,EAAE;YACX;QACF;;AAGA,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI;AACF,gBAAA,OAAO,MAAM,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC;YACpD;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,WAAW,CAAC,CAC5B;AAED;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAG,WAAW,CACtC,OAAO,SAAiB,EAAE,YAAqB,EAAE,SAAA,GAAoB,IAAI,KAAuB;QAC9F,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,EAAE;QAE7B,MAAM,UAAU,GAAG,GAAG;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;AAEzD,QAAA,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE;AACtD,YAAA,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC;AAC3D,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,OAAO;AAEtC,gBAAA,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,EAAE;AAC7B,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACrD;YACF;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,EAAE,GAAG,CAAC;AAC/D,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,WAAW,CAAC,CAC5B;AAED;;AAEG;IACH,MAAM,WAAW,GAAG,WAAW,CAC7B,OAAO,UAAkB,EAAE,YAAoB,KAAkC;QAC/E,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC;QACpE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,OAAO,CAAC;AAE9D,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,MAAM,YAAY,GAAiB;YACjC,IAAI;YACJ,SAAS,EAAE,SAAS,IAAI,SAAS;SAClC;;QAGD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;;YAEnD,OAAO,CAAC,GAAG,CAAC;AACV,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;aACrB,CAAC;;YAEF;AACE,kBAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5C,kBAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,SAAA,CAAC;QAEF,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AAElE,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,YAAY,CAAC,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QACpE;AAEA,QAAA,OAAO,YAAY;IACrB,CAAC,EACD,CAAC,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAC3E;AAED;;AAEG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAClC,OAAO,UAAsB,KAAyB;;QAEpD,MAAM,YAAY,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CACnD,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,YAAY,CAAC,CACnD;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAwB,CAAC,KAAK,IAAI,CAAC;QAE1E,OAAO;AACL,YAAA,GAAG,UAAU;YACb,aAAa;SACd;AACH,IAAA,CAAC,EACD,CAAC,WAAW,CAAC,CACd;;AAGD,IAAA,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,OAA+D,KAAI;QAClE,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QAChD,UAAU,CAAC,OAAO,CAAC;IACrB,CAAC,EACD,EAAE,CACH;AAED;;AAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC9B,OAAO,KAAmB,KAAmB;;AAE3C,QAAA,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;;AAGlF,QAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC;AAChF,QAAA,IAAI,CAAC,MAAM;YAAE;;AAGb,QAAA,aAAa,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE;AAExB,YAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,gBAAA,KAAK,UAAU;AACb,oBAAA,IAAI,CAAC,QAAQ,GAAG,MAAuB;oBACvC;AACF,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,CAAC,WAAW,GAAG,MAA0B;oBAC7C;AACF,gBAAA,KAAK,OAAO;;AAEV,oBAAA,IAAI,CAAC,KAAK,GAAG,MAAoB;oBACjC;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,SAAS,GAAG,MAAwB;oBACzC;;AAGJ,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC3B,YAAA,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,MAAoB,CAAC;AAClE,YAAA,aAAa,CAAC,CAAC,IAAI,MAAM;AACvB,gBAAA,GAAG,IAAI;AACP,gBAAA,KAAK,EAAE,aAAa;AACrB,aAAA,CAAC,CAAC;QACL;IACF,CAAC,EACD,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAC3D;AAED;;AAEG;AACH,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,YAAW;QAC1C,IAAI,eAAe,CAAC,OAAO;YAAE;AAC7B,QAAA,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAEzC,QAAA,eAAe,CAAC,OAAO,GAAG,IAAI;QAC9B,cAAc,CAAC,IAAI,CAAC;AAEpB,QAAA,IAAI;YACF,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAG;AAC7C,gBAAA,MAAM,YAAY,CAAC,KAAK,CAAC;YAC3B;QACF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YAC5D,QAAQ,CAAC,GAAG,CAAC;QACf;AAEA,QAAA,eAAe,CAAC,OAAO,GAAG,KAAK;QAC/B,cAAc,CAAC,KAAK,CAAC;;QAGrB,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,YAAY,EAAE;QAChB;AACF,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,KAAmB,KAAI;AACtB,QAAA,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,QAAA,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,QAAA,YAAY,EAAE;AAChB,IAAA,CAAC,EACD,CAAC,YAAY,CAAC,CACf;AAED;;AAEG;AACH,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;QAC7B,SAAS,CAAC,EAAE,CAAC;QACb,UAAU,CAAC,EAAE,CAAC;AACd,QAAA,UAAU,CAAC,OAAO,GAAG,EAAE;QACvB,QAAQ,CAAC,IAAI,CAAC;AACd,QAAA,cAAc,CAAC,OAAO,GAAG,EAAE;IAC7B,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;QACL,QAAQ;QACR,OAAO;QACP,UAAU;QACV,MAAM;QACN,WAAW;QACX,eAAe;QACf,KAAK;QACL,KAAK;KACN;AACH;;ACvWA;;;;AAIG;AACI,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAAI;AACjE,IAAA,MAAM,MAAM,GAAG,SAAS,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,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC;;AAGxE,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;;AAG3C,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC;;IAG7E,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACvC,QAAA,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;AAChC,KAAA,CAAC;AACF,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC;AAChD,IAAA,iBAAiB,CAAC,OAAO,GAAG,cAAc;;AAG1C,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;QACzC,OAAO,CAAA,QAAA,EAAW,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;IAC3E,CAAC,EAAE,EAAE,CAAC;;IAGN,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;AAExC;;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;;AAGxB,QAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,eAAe,CAAC,cAAc;AACrE,QAAA,MAAM,SAAS,GAAG,qBAAqB,GAAG,iBAAiB,EAAE,GAAG,SAAS;;QAGzE,IAAI,qBAAqB,EAAE;AACzB,YAAA,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE;QACnC;AAEA,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;;4BAEjB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC;4BACnD,YAAY,GAAG,IAAI;wBACrB;6BAAO;;4BAEL,iBAAiB,CAAC,WAAW,CAAC;wBAChC;oBACF,CAAC;;oBAED,IAAI,qBAAqB,IAAI;AAC3B,wBAAA,SAAS,EAAE,CAAC,KAAK,KAAI;4BACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,SAAS,CAAC;AACzD,4BAAA,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAC3C,CAAC;qBACF,CAAC;AACH,iBAAA;AACF,aAAA,CAAC;YAEF,cAAc,CAAC,WAAW,CAAC;;;AAI3B,YAAA,IAAI,qBAAqB,IAAI,SAAS,EAAE;AACtC,gBAAA,MAAM,YAAY,GAAG,YAAW;;oBAE9B,MAAM,OAAO,GAAG,KAAK;oBACrB,IAAI,OAAO,GAAG,CAAC;AACf,oBAAA,OAAO,iBAAiB,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,EAAE;AAC7E,wBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBAC5C,OAAO,IAAI,GAAG;oBAChB;oBACA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO;AACzD,oBAAA,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC;AACpC,gBAAA,CAAC;AACD,gBAAA,YAAY,EAAE;YAChB;;YAGA,WAAW,CAAC,WAAW,CAAC;;AAGxB,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC;iBAC1B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,IAAI;AACvC,iBAAA,GAAG,CAAC,OAAO,KAAK,KAAI;AACrB,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAO;gBAC5B,MAAM,aAAa,GAAG,QAAQ,GAAGA,cAAY,CAAC,MAAM,CAAC;gBACrD,WAAW,CAAC,aAAa,CAAC;AAE1B,gBAAA,IAAI;oBACF,MAAM,OAAO,GAAG,MAAM;yBACnB,IAAI,CAAC,aAAa;yBAClB,YAAY,CACX,MAAM,EACN,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,EACzB,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,EAAEA,cAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,GAAG,EAAEA,cAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,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,GAAG,WAAW,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;;ACrWvB;AACA;AAcA;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAK;;AAErC,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,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,GAAG,WAAW,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;QACD,SAAS,EAAE,MAAK;QAChB,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;;AC5FA;AASA;;;AAGG;AACI,MAAM,qBAAqB,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAAI;AACxE,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAChC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AAElC,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC3B,QAAA,UAAU,EAAE,OAAO,EACjB,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,GAAG,EAAE,GAOX,KAAmC;YAClC,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;YAChD;YAEA,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,kBAAkB,CAClD,OAAO,EACP,UAAU,EACV,UAAU,IAAI,QAAQ,CAAC,UAAU,EACjC,SAAS,EACT,KAAK,CACN;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAChE,YAAA,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAA,CAAE,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,MAAK;QAChB,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAE1D,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,WAAW;QACvC,WAAW,EAAE,QAAQ,CAAC,SAAS;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,QAAA,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;QAC5B,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;QAC5C,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;ACxEA;AAQA;;;AAGG;AACI,MAAM,0BAA0B,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAAI;AAC7E,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAChC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AAElC,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC3B,QAAA,UAAU,EAAE,OAAO,EACjB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,KAAK,GAAG,EAAE,GAMX,KAAI;YACH,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;YAChD;YAEA,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,uBAAuB,CACvD,OAAO,EACP,IAAI,IAAI,QAAQ,CAAC,IAAI,EACrB,UAAU,IAAI,QAAQ,CAAC,UAAU,EACjC,KAAK,CACN;QACH,CAAC;AACD,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAChE,YAAA,MAAM,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAA,CAAE,CAAC;QAC9D,CAAC;QACD,SAAS,EAAE,MAAK;QAChB,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;IAE5D,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,WAAW;QACvC,WAAW,EAAE,QAAQ,CAAC,SAAS;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,QAAA,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC5B,QAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACpE,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;ACpEA;AAcA;;;AAGG;AACI,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAAI;;AAE/D,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAE5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAEhC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;;AAE3C,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,iBAAiB,GAAG,WAAW,CAAC;AACpC,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,aAAa;AAClB,iBAAA,SAAS,CACR,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,mBAAmB,EAAE,GAAG,CAAC;AACrC,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;QAChB,CAAC;AACF,KAAA,CAAC;;AAGF,IAAA,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,yBAAyB,CAAC;;IAGnE,OAAO;;QAEL,YAAY,EAAE,iBAAiB,CAAC,MAAM;QACtC,iBAAiB,EAAE,iBAAiB,CAAC,WAAW;;QAGhD,WAAW,EAAE,iBAAiB,CAAC,SAAS;QACxC,KAAK,EAAE,iBAAiB,CAAC,KAAK;QAC9B,IAAI,EAAE,iBAAiB,CAAC,IAAI;;QAG5B,KAAK,EAAE,iBAAiB,CAAC,KAAK;;AAG9B,QAAA,OAAO,EAAE,aAAa;KACvB;AACH;;AC5FA;AAQA;;;;;AAKG;AACI,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAI;;AAE9C,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,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;;AAGhC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;AAE3C;;;AAGG;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,aAAa;QACnD,OAAO,EAAE,MAAK;AACZ,YAAA,OAAO;iBACJ,IAAI,CAAC,aAAa;AAClB,iBAAA,UAAU,CAAC,CAAC,IAAI,CAAC;AACjB,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;;ACxCA;;;AAGG;AACI,MAAM,cAAc,GAAG,MAAK;;AAEjC,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,CAAC;AAC3C,QAAA,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAA0B,KAAI;AACzF,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,GAAU,KAAI;AACtB,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,GAAG,WAAW,CAAC;QAC5C,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAA2B,KAAI;;AAElE,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,GAAU,KAAI;AACtB,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;;AClJA;AAYA;;;AAGG;AACI,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAA,GAAwB,EAAE,KAYxD;;AAEF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAE5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAEhC,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,IAAI,IAAI,aAAa;;AAG3C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;;IAG/C,MAAM,gBAAgB,GAAG,WAAW,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,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;QAClE,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;QACD,SAAS,EAAE,MAAK;QAChB,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;;AC7FA;;;;AAIG;AACI,MAAM,aAAa,GAAG,MAMzB;;AAEF,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;;AAGG;IACH,MAAM,eAAe,GAAG,QAAQ,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAE5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,CAAC;AAC7C,QAAA,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAI;;AAEnD,YAAA,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CACrE,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;QAChB,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;;AC3HA;AAOA;;;;;AAKG;AACI,MAAM,aAAa,GAAG,MAAK;;AAEhC,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;;AAG5C,IAAA,MAAM,WAAW,GAAG,cAAc,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,GAAG,QAAQ,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,gBAAgB,CAAC;AAEhD,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,WAAW,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,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAE5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;AAE/C;;AAEG;IACH,MAAM,eAAe,GAAG,QAAQ,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,OAAO,OAAO,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;;AChQA;AACA,MAAM,YAAY,GAAG,CAAC,IAAU,KAAY;AAC1C,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAgB,CAAC,CAAC;AAC9C,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAQ,IAAoB,CAAC,CAAC;AAClD,IAAA,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC;AACjC,IAAA,OAAO,EAAE;AACX,CAAC;AAED;AACA,MAAM,KAAK,GAAG,CAAC,IAAU,KAAsB,IAAI,CAAC,CAAC,KAAK,GAAG;AAG7D;;;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,GAAG,SAAS,EAAE;;AAG1B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAGlC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAEhC;;;AAGG;IACH,MAAM,oBAAoB,GAAG,QAAQ,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,WAAW,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;AAElD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,WAAW,EACX,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,GAAG,QAAQ,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,UAAU,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;AAEjD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,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,GAAG,QAAQ,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,WAAW,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;AAElD,YAAA,OAAO;iBACJ,IAAI,CAAC,MAAM;AACX,iBAAA,YAAY,CACX,WAAW,EACX,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,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,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,GAAG,OAAO,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,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC9D,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,GAAG,OAAO,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,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC9D,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,GAAG,OAAO,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,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC/B,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,GAAG,QAAQ,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,WAAW,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE;oBAC3D,MAAM,aAAa,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,WAAW,EACX,aAAa,EACb,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,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D;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,GAAG,QAAQ,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,WAAW,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE;oBAC3D,MAAM,aAAa,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,WAAW,EACX,aAAa,EACb,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,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D;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,GAAG,QAAQ,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,WAAW,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE;oBACvD,MAAM,aAAa,GAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE;oBAExD,MAAM,YAAY,GAAG,MAAM;yBACxB,IAAI,CAAC,MAAM;AACX,yBAAA,YAAY,CACX,WAAW,EACX,aAAa,EACb,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,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzD;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,GAAG,OAAO,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,GAAG,OAAO,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,GAAG,OAAO,CAAC,MAAK;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QAEpC,OAAO,eAAe,CAAC;AACpB,aAAA,MAAM,CAAC,CAAC,MAAM,KAAI;;YAEjB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;YAC1D,OAAO,IAAI,KAAK,UAAU;AAC5B,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,MAAM,KAAI;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC1D,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YACrD,OAAO;AACL,gBAAA,SAAS,EAAE;AACT,oBAAA,GAAG,EAAE,IAAI;oBACT,KAAK,EAAE,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI;AAChD,iBAAA;AACD,gBAAA,KAAK,EAAE,MAAM;aACd;AACH,QAAA,CAAC,CAAC;IACN,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;;ACtjBA;AACA,MAAME,oBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;AAE1C;AACA,MAAM,wBAAwB,GAAG,CAAC;AAsElC;;;;;;;;;;;;;AAaG;MACU,gBAAgB,GAAG,CAAC,OAAA,GAAgC,EAAE,KAAI;AACrE,IAAA,MAAM,EACJ,SAAS,GAAGA,oBAAkB,EAC9B,eAAe,GAAG,wBAAwB,EAC1C,UAAU,EACV,UAAU,EACV,OAAO,GACR,GAAG,OAAO;AAEX,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAiB;AACvD,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,cAAc,EAAE,CAAC;AACjB,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,MAAM,EAAE,MAAM;AACf,KAAA,CAAC;;AAGF,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC;AAC/D,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAc,IAAI,CAAC;AAChD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC;;AAG/C,IAAA,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAgC,KAAI;AACnC,QAAA,WAAW,CAAC,CAAC,IAAI,KAAI;YACnB,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE;AACpC,YAAA,UAAU,GAAG,IAAI,CAAC;AAClB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,UAAU,CAAC,CACb;;AAGD,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACnC,OAAO,IAAU,EAAE,UAAkB,EAAE,OAAe,KAAqB;AACzE,QAAA,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QAEnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,SAAS,GAAG,MAAK;AACtB,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAgB;;gBAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;gBACzD,OAAO,CAAC,MAAM,CAAC;AACjB,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACrE,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ,CAAC,EACD,EAAE,CACH;;AAGD,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,OACE,IAAU,EACV,QAAgB,EAChB,aAAuB,EACvB,OAAe,EACf,WAAmB,KACF;AACjB,QAAA,MAAM,SAAS,GAAG,CAAC,GAAG,aAAa,CAAC;AACpC,QAAA,IAAI,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC,MAAM;AACnD,QAAA,IAAI,aAAa,GAAG,cAAc,GAAG,OAAO;;AAG5C,QAAA,MAAM,eAAe,GAAG,YAA0B;AAChD,YAAA,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;;AAE1E,gBAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACvB,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACxD;gBACF;;gBAGA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC;;AAGlD,gBAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;oBAC7B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;AAClE,oBAAA,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC;AACnE,oBAAA,OAAO,UAAU;gBACnB,CAAC,CAAC,CACH;;AAGD,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,oBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;AACjC,wBAAA,cAAc,EAAE;;AAEhB,wBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;AAC7B,wBAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO;AACrC,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1D,wBAAA,aAAa,IAAI,QAAQ,GAAG,UAAU;AAEtC,wBAAA,cAAc,CAAC;AACb,4BAAA,cAAc,EAAE,cAAc;4BAC9B,aAAa;AACb,4BAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;AACzD,4BAAA,aAAa,EAAE,CAAC,GAAG,SAAS,CAAC;AAC9B,yBAAA,CAAC;oBACJ;yBAAO;;wBAEL,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClD,wBAAA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,WAAW,CAAA,oBAAA,CAAsB,EAAE,MAAM,CAAC,MAAM,CAAC;oBACzE;gBACF;YACF;AACF,QAAA,CAAC;QAED,MAAM,eAAe,EAAE;IACzB,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAC7D;AAED;;AAEG;IACH,MAAM,MAAM,GAAG,WAAW,CACxB,OAAO,MAA2B,KAA4B;AAC5D,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM;;AAGhF,QAAA,IACE,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,YAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB,EAC7C;YACA,MAAM,KAAK,GAAG,yBAAyB;YACvC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1C,YAAA,OAAO,GAAG,KAAK,CAAC;AAChB,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE;AAClD,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK;AAC3B,QAAA,cAAc,CAAC,OAAO,GAAG,IAAI;AAE7B,QAAA,MAAM,KAAK,GAAG,UAAU,IAAI,WAAW,EAAE;AACzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACpD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEtE,QAAA,cAAc,CAAC;YACb,UAAU,EAAE,IAAI,CAAC,IAAI;AACrB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,UAAU,EAAE,CAAC;YACb,WAAW;AACX,YAAA,cAAc,EAAE,CAAC;YACjB,aAAa;AACb,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,UAAU,EAAE,SAAS;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI;;AAEF,YAAA,MAAM,QAAQ,GAAkC;AAC9C,gBAAA,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B;gBAC7C,KAAK;gBACL,QAAQ;gBACR,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,UAAU,IAAI,SAAS;gBACnC,IAAI;aACL;YAED,MAAM,aAAa,GAAG,MAAM;AACzB,iBAAA,SAAS;iBACT,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AAE9C,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC;AAC3C,YAAA,WAAW,CAAC,OAAO,GAAG,QAAQ;AAE9B,YAAA,cAAc,CAAC;AACb,gBAAA,MAAM,EAAE,WAAW;gBACnB,QAAQ;AACT,aAAA,CAAC;;AAGF,YAAA,MAAM,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC;;YAGzE,IAAI,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;AAC9C,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACxC,YAAA,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;AAE1E,YAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC;AAElD,YAAA,cAAc,CAAC;AACb,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,GAAG;AAChB,aAAA,CAAC;;YAGF,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAE1D,YAAA,MAAM,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAA,CAAE,CAAC;AAC3C,YAAA,UAAU,GAAG,UAAU,CAAC;AAExB,YAAA,OAAO,UAAU;QACnB;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YACjE,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACpD,YAAA,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAC1C,YAAA,OAAO,GAAG,QAAQ,CAAC;AACnB,YAAA,OAAO,IAAI;QACb;AACF,IAAA,CAAC,EACD;QACE,MAAM;QACN,eAAe;QACf,SAAS;QACT,WAAW;QACX,MAAM;QACN,cAAc;QACd,YAAY;QACZ,UAAU;QACV,OAAO;AACR,KAAA,CACF;AAED;;AAEG;IACH,MAAM,MAAM,GAAG,WAAW,CACxB,OAAO,MAA0B,KAA4B;AAC3D,QAAA,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM;;AAGjC,QAAA,IACE,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,YAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB,EAC7C;YACA,MAAM,KAAK,GAAG,yBAAyB;YACvC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1C,YAAA,OAAO,GAAG,KAAK,CAAC;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE;AAClD,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK;AAC3B,QAAA,cAAc,CAAC,OAAO,GAAG,IAAI;AAC7B,QAAA,WAAW,CAAC,OAAO,GAAG,QAAQ;AAE9B,QAAA,cAAc,CAAC;AACb,YAAA,MAAM,EAAE,WAAW;YACnB,QAAQ;AACT,SAAA,CAAC;AAEF,QAAA,IAAI;;AAEF,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;AAEjE,YAAA,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,WAAW,EAAE;AAC1C,gBAAA,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACvC,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE;AACxC,gBAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;YAC/C;AAEA,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AAC1C,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9C,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9C,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;AAExC,YAAA,cAAc,CAAC;gBACb,UAAU;AACV,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,UAAU,IAAI,GAAG,CAAC;gBAC1D,WAAW;AACX,gBAAA,cAAc,EAAE,WAAW,GAAG,aAAa,CAAC,MAAM;AAClD,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA,CAAC;;YAGF,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS;AAC5D,YAAA,MAAM,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC;;YAGlF,IAAI,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;AAC9C,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACxC,YAAA,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;AAE1E,YAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC;AAElD,YAAA,cAAc,CAAC;AACb,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,GAAG;AAChB,aAAA,CAAC;;YAGF,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAE1D,YAAA,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC;AAC9C,YAAA,UAAU,GAAG,UAAU,CAAC;AAExB,YAAA,OAAO,UAAU;QACnB;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YACjE,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACpD,YAAA,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAC1C,YAAA,OAAO,GAAG,QAAQ,CAAC;AACnB,YAAA,OAAO,IAAI;QACb;AACF,IAAA,CAAC,EACD;QACE,MAAM;QACN,eAAe;QACf,SAAS;QACT,WAAW;QACX,MAAM;QACN,cAAc;QACd,YAAY;QACZ,UAAU;QACV,OAAO;AACR,KAAA,CACF;AAED;;AAEG;AACH,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE;AACnC,YAAA,WAAW,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACtC;IACF,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAErC;;AAEG;AACH,IAAA,MAAM,OAAO,GAAG,WAAW,CAAC,MAAK;AAC/B,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;AAChC,YAAA,WAAW,CAAC,OAAO,GAAG,KAAK;AAC3B,YAAA,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACzC;IACF,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAErC;;AAEG;AACH,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,YAAW;AACpC,QAAA,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE;AAEnC,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI;gBACF,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;YAC3D;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC;YACxD;QACF;AAEA,QAAA,cAAc,CAAC;AACb,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,aAAa,EAAE,EAAE;AAClB,SAAA,CAAC;AAEF,QAAA,WAAW,CAAC,OAAO,GAAG,IAAI;AAC1B,QAAA,cAAc,CAAC,OAAO,GAAG,IAAI;AAC/B,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE5B;;AAEG;AACH,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,QAAA,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE;AACnC,QAAA,WAAW,CAAC,OAAO,GAAG,IAAI;AAC1B,QAAA,cAAc,CAAC,OAAO,GAAG,IAAI;AAC7B,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK;AAE3B,QAAA,WAAW,CAAC;AACV,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,MAAM;AACf,SAAA,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;;QAEL,QAAQ;;QAGR,MAAM;QACN,MAAM;QACN,KAAK;QACL,OAAO;QACP,MAAM;QACN,KAAK;;AAGL,QAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM;AAClC,QAAA,WAAW,EAAE,QAAQ,CAAC,MAAM,KAAK,WAAW;AAC5C,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,QAAQ;AACtC,QAAA,WAAW,EAAE,QAAQ,CAAC,MAAM,KAAK,WAAW;AAC5C,QAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,OAAO;KACrC;AACH;;ACzgBA;AACA,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI;AA4CtC;;AAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,MAAc,KAAgB;AACxD,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;AAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,IAAU,EAAE,QAAgB,KAAU;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,IAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;AAWG;MACU,kBAAkB,GAAG,CAAC,OAAA,GAAkC,EAAE,KAAI;AACzE,IAAA,MAAM,EACJ,SAAS,GAAG,kBAAkB,EAC9B,UAAU,EACV,UAAU,EACV,OAAO,GACR,GAAG,OAAO;AAEX,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;;AAGhC,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAmB;AACzD,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,cAAc,EAAE,CAAC;AACjB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,MAAM,EAAE,MAAM;AACf,KAAA,CAAC;;AAGF,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAA0B,IAAI,GAAG,EAAE,CAAC;;AAG5D,IAAA,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,OAAkC,KAAI;AACrC,QAAA,WAAW,CAAC,CAAC,IAAI,KAAI;YACnB,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE;AACpC,YAAA,UAAU,GAAG,IAAI,CAAC;AAClB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,UAAU,CAAC,CACb;AAED;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,MAAsB,KAA0B;QAC/C,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,0BAA0B,EAAE,QAAQ,EAAE,GAAG,MAAM;;AAG9E,QAAA,IACE,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,YAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB,EAC7C;YACA,MAAM,KAAK,GAAG,yBAAyB;YACvC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1C,YAAA,OAAO,GAAG,KAAK,CAAC;AAChB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B;;AAGA,QAAA,YAAY,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAE7B,QAAA,cAAc,CAAC;AACb,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,KAAK,EAAE,SAAS;YAChB,UAAU;AACX,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,KAAI;YAC1C,MAAM,OAAO,GAAG,CACd,OAAe,EACf,UAAkB,EAClB,WAAmB,EACnB,QAAiB,KACf;;AAEF,gBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;oBACxB;gBACF;;AAGA,gBAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC;gBAC7C,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;AAE5C,gBAAA,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI;AAC7C,gBAAA,MAAM,UAAU,GAAG,WAAW,GAAG;AAC/B,sBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,WAAW,IAAI,GAAG;sBAC/C,CAAC;AAEL,gBAAA,cAAc,CAAC;oBACb,WAAW;oBACX,cAAc;oBACd,UAAU;AACX,iBAAA,CAAC;;gBAGF,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;wBACxB,OAAO,CAAC,IAAI,CAAC;wBACb;oBACF;;oBAGA,MAAM,aAAa,GAAiB,EAAE;AACtC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;wBACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;wBACtC,IAAI,KAAK,EAAE;AACT,4BAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;wBAC3B;oBACF;AAEA,oBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,aAA2B,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEtE,oBAAA,cAAc,CAAC;AACb,wBAAA,MAAM,EAAE,WAAW;AACnB,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,cAAc,EAAE,WAAW;AAC5B,qBAAA,CAAC;;oBAGF,IAAI,QAAQ,EAAE;AACZ,wBAAA,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACxC;AAEA,oBAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACnC,oBAAA,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;oBAE9B,OAAO,CAAC,IAAI,CAAC;gBACf;AACF,YAAA,CAAC;AAED,YAAA,MAAM,aAAa,GAAG,CAAC,KAAa,KAAI;AACtC,gBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;oBACxB;gBACF;gBAEA,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1C,gBAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAA,CAAE,CAAC;AACzC,gBAAA,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC;AACf,YAAA,CAAC;;AAGD,YAAA,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,CAC/B,UAAU,EACV,OAAO,EACP,aAAa,EACb,SAAS,CACV;AACH,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAClF;AAED;;AAEG;AACH,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,MAAK;AAC9B,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAE7B,QAAA,cAAc,CAAC;AACb,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB;;AAEG;AACH,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAE7B,QAAA,WAAW,CAAC;AACV,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,MAAM;AACf,SAAA,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;;QAEL,QAAQ;;QAGR,QAAQ;QACR,MAAM;QACN,KAAK;;AAGL,QAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM;AAClC,QAAA,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,aAAa;AAChD,QAAA,WAAW,EAAE,QAAQ,CAAC,MAAM,KAAK,WAAW;AAC5C,QAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,OAAO;KACrC;AACH;;AC1RA;;AAEG;AA0BH;;AAEG;MACU,mBAAmB,GAAG,CACjC,OAAA,GAAsC,EAAE,KACX;AAC7B,IAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO;AAEvC,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAE5C,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,mBAAmB,EAAE,UAAU,CAAC;QAC3C,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO,KAAK,KAAK,CAAC;QAC7D,OAAO,EAAE,YAAW;AAClB,YAAA,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,IAAI;YAC5B,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAC3D,CAAC;AACF,KAAA,CAAC;IAEF,OAAO;AACL,QAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;AAEA;;AAEG;MACU,oBAAoB,GAAG,CAAC,WAAA,GAAwB,EAAE,KAAI;AACjE,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;AAC5C,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AAEpC,IAAA,MAAM,aAAa,GACjB,eAAe,EAAE,MAAM,KAAK,eAAe;AAC3C,QAAA,eAAe,EAAE,MAAM,KAAK,iBAAiB;IAE/C,MAAM,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC;AAC7C,QAAA,OAAO,EAAE,aAAa,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAChD,OAAO,EAAE,YAAW;AAClB,YAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAI;;AAE3B,gBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAA0B;oBAC/D,mBAAmB;oBACnB,EAAE;AACH,iBAAA,CAAC;AACF,gBAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,oBAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACjC;;AAGA,gBAAA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACjE,WAAW,CAAC,YAAY,CAAC,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC7D,gBAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE;YACzB,CAAC,CAAC,CACH;AAED,YAAA,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAI;AACxB,gBAAA,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ;AAClB,gBAAA,OAAO,GAAG;YACZ,CAAC,EACD,EAA6C,CAC9C;QACH,CAAC;AACF,KAAA,CAAC;IAEF,OAAO;AACL,QAAA,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;AACH;;;;"}
1
+ {"version":3,"file":"index.esm.js","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/explainability-store.ts","../src/utils/explainability.ts","../src/state/provenance.ts","../src/state/explainability.ts","../src/state/chat-session.ts","../src/state/structured-query.ts","../src/state/row-embeddings-query.ts","../src/state/document-embeddings-query.ts","../src/state/rows-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","../src/state/chunked-upload.ts","../src/state/chunked-download.ts","../src/state/document-metadata.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 explainSessionId?: string\n ) => void;\n updateLastMessage: (text: string, explainSessionId?: string) => void;\n setInput: (v: string) => void;\n setChatMode: (mode: ChatMode) => void;\n}\n\nexport const useConversation = create<ConversationState>()((set) => ({\n messages: [\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 explainSessionId?: string\n ) =>\n set((state) => ({\n messages: [\n ...state.messages,\n {\n role: role,\n text: text,\n type: type || \"normal\",\n explainSessionId,\n },\n ],\n })),\n\n updateLastMessage: (text: string, explainSessionId?: 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 ...(explainSessionId !== undefined && { explainSessionId }),\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 explainability: 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 explainability: true, // On 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: DocumentParameters) => {\n let doc_meta: Triple[] = [\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: RDF_TYPE },\n o: { t: \"i\", i: DIGITAL_DOCUMENT },\n },\n ];\n\n if (params.title != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: RDFS_LABEL },\n o: { t: \"l\", v: params.title ?? \"\" },\n },\n ];\n\n if (params.url != \"\")\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: SCHEMA_URL },\n o: { t: \"i\", i: params.url ?? \"\" },\n },\n ];\n\n for (const keyword of params.keywords ?? [])\n doc_meta = [\n ...doc_meta,\n {\n s: { t: \"i\", i: doc_id },\n p: { t: \"i\", i: SCHEMA_KEYWORDS },\n o: { t: \"l\", v: keyword },\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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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: effectiveFlow, s, p, o, limit }],\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\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, Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\n\n// Extended types for Terms and Triples with labels (used for display purposes)\nexport type LabeledTerm = Term & { label?: string };\n\nexport interface LabeledTriple {\n s: LabeledTerm;\n p: LabeledTerm;\n o: LabeledTerm;\n g?: string;\n}\n\n// Helper to get the string value from a Term (IRI or Literal)\nexport const getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\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 { t: \"i\", i: uri },\n { t: \"i\", i: RDFS_LABEL },\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 getTermValue(triples[0].o);\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, getTermValue(t.s), add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n s: {\n ...t.s,\n label: label,\n } as LabeledTerm,\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n return queryLabel(socket, getTermValue(t.p), add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n p: {\n ...t.p,\n label: label,\n } as LabeledTerm,\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[] | LabeledTriple[],\n add: (s: string) => void,\n remove: (s: string) => void,\n collection?: string\n): Promise<LabeledTriple[]> => {\n return Promise.all(\n triples.map((t) => {\n // If the 'o' element is an IRI, do a label lookup, else\n // just use the literal value for its label\n if (isIri(t.o))\n return queryLabel(socket, t.o.i, add, remove, collection).then(\n (label: string) => {\n return {\n ...t,\n o: {\n ...t.o,\n label: label,\n } as LabeledTerm,\n };\n }\n );\n else\n return new Promise<LabeledTriple>((resolve) => {\n resolve({\n ...t,\n o: {\n ...t.o,\n label: getTermValue(t.o),\n } as LabeledTerm,\n });\n });\n })\n );\n};\n\n// Triple filter\nexport const filter = <T extends Triple | LabeledTriple>(triples: T[], fn: (t: T) => boolean) =>\n triples.filter((t) => fn(t));\n\n// Filter out 'structural' edges nobody needs to see\nexport const filterInternals = <T extends Triple | LabeledTriple>(triples: T[]): T[] =>\n triples.filter((t) => {\n if (isIri(t.p) && t.p.i == 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, Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\nimport {\n query,\n labelS,\n labelP,\n labelO,\n filterInternals,\n} from \"./knowledge-graph\";\n\n// Helper to get the string value from a Term (IRI or Literal)\nconst getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\n\n// Extended Term type that includes optional label (added by labeling functions)\ntype LabeledTerm = Term & { label?: string };\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 (!isIri(t.o)) {\n continue;\n }\n // Source has a URI, that can be its unique ID\n const sourceId = getTermValue(t.s);\n\n // Target is always an entity now (we filtered out literals above)\n const targetId = getTermValue(t.o);\n\n // Links have an ID so that this edge is unique\n const linkId = getTermValue(t.s) + \"@@\" + getTermValue(t.p) + \"@@\" + getTermValue(t.o);\n\n if (!nodeIds.has(sourceId)) {\n const sLabeled = t.s as LabeledTerm;\n const n: Node = {\n id: sourceId,\n label: sLabeled.label ? sLabeled.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 oLabeled = t.o as LabeledTerm;\n const n: Node = {\n id: targetId,\n label: oLabeled.label ? oLabeled.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 pLabeled = t.p as LabeledTerm;\n const l: Link = {\n source: sourceId,\n target: targetId,\n id: linkId,\n label: pLabeled.label ? pLabeled.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 { t: \"i\", i: selectedNodeId }, // s = selectedNode\n { t: \"i\", i: relationshipUri }, // 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 { t: \"i\", i: relationshipUri }, // p = relationship\n { t: \"i\", i: selectedNodeId }, // 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\";\nimport { useSessionStore } from \"./session\";\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 flow - Optional flow ID to use for the query (defaults to session state)\n * @param collection - The collection to query\n * @returns {Object} Graph state and operations\n */\nexport const useGraphSubgraph = ({\n entityUri,\n flow,\n collection,\n}: {\n entityUri: string | undefined;\n flow?: string;\n collection: string;\n}) => {\n // WebSocket connection for communicating with the graph service\n const socket = useSocket();\n\n // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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, flow: effectiveFlow, 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(effectiveFlow);\n return updateSubgraph(\n api,\n entityUri,\n sg,\n addActivity,\n removeActivity,\n collection\n );\n },\n enabled: !!entityUri && !!effectiveFlow, // Only run query if both entityUri and effectiveFlow 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(effectiveFlow);\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, flow: effectiveFlow, 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(effectiveFlow);\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, flow: effectiveFlow, 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\";\nimport { useSessionStore } from \"./session\";\n\n/**\n * Custom hook for querying graph embeddings\n * Finds graph entities similar to the provided embedding vector\n */\nexport const useGraphEmbeddings = ({ flow, vec, limit = 10, collection }: {\n flow?: string;\n vec?: 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 const socket = useSocket();\n const notify = useNotification();\n const { settings } = useSettings();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n const effectiveFlow = flow ?? sessionFlowId;\n const effectiveCollection = collection ?? settings.collection;\n\n const query = useQuery({\n queryKey: [\"graph-embeddings\", { flow: effectiveFlow, vec, limit, collection: effectiveCollection }],\n enabled: !!vec && vec.length > 0 && !!effectiveFlow,\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\n .graphEmbeddingsQuery(vec!, limit, effectiveCollection)\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(message);\n throw err;\n });\n },\n });\n\n useActivity(query.isLoading, \"Loading graph embeddings\");\n\n return {\n graphEmbeddings: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n","import { Term, IriTerm, LiteralTerm, FlowApi, EntityMatch } 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 embedding vector, 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 embedding, and lookup entities using graph\n // embeddings, add embedding to each entity row\n return (vec: number[]): Promise<Row[]> => {\n const act = \"Graph embedding search\";\n add(act);\n\n return socket\n .graphEmbeddingsQuery(vec, limit ? limit : 10, collection)\n .then((matches: EntityMatch[]): Row[] => {\n remove(act);\n return matches\n .filter((m): m is EntityMatch & { entity: IriTerm } =>\n m.entity !== null && m.entity.t === \"i\")\n .map((m) => {\n return { uri: m.entity.i, target: vec };\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 { t: \"i\", i: ent.uri },\n { t: \"i\", i: RDFS_LABEL },\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 const obj = t[0].o as LiteralTerm;\n return {\n uri: ent.uri,\n label: obj.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 { t: \"i\", i: ent.uri },\n { t: \"i\", i: SKOS_DEFINITION },\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 const obj = t[0].o as LiteralTerm;\n return {\n ...ent,\n description: obj.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((vecs) => vecs[0])\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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\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 ?? sessionFlowId,\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 ?? sessionFlowId,\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\";\nimport { useSessionStore } from \"./session\";\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 flow - Optional flow ID to use for the query (defaults to session state)\n * @param collection - The collection to query\n * @returns {Object} Entity detail state and operations\n */\nexport const useEntityDetail = ({\n entityUri,\n flow,\n collection,\n}: {\n entityUri: string | undefined;\n flow?: 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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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, flow: effectiveFlow, 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(effectiveFlow);\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 effectiveFlow are available\n enabled: !!entityUri && !!effectiveFlow,\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 { EntityMatch, ExplainEvent } 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: EntityMatch[];\n explainEvents?: ExplainEvent[];\n}\n\nexport interface GraphRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onExplain?: (event: ExplainEvent) => 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, messageId?: string) => void;\n onObserve?: (observation: string, complete: boolean, messageId?: string) => void;\n onAnswer?: (answer: string, complete: boolean, messageId?: string) => void;\n onExplain?: (event: ExplainEvent) => void;\n onError?: (error: string) => void;\n}\n\nexport interface DocumentRagCallbacks {\n onChunk?: (chunk: string, complete: boolean) => void;\n onExplain?: (event: ExplainEvent) => void;\n onError?: (error: string) => void;\n}\n\nexport interface DocumentRagResult {\n response: string;\n explainEvents?: ExplainEvent[];\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 = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\n\n /**\n * Graph RAG inference with entity discovery and optional explainability\n * Explainability events are only tracked if callbacks.onExplain is provided\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 // Only collect explain events if caller provided onExplain callback\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\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 // Only wire up onExplain if caller wants explainability\n const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .graphRagStreaming(input, onChunk, onError, options, collection, onExplain);\n })\n : await socket.flow(effectiveFlow).graphRag(input, options || {}, collection);\n\n // Get embeddings for entity discovery\n const allEmbeddings = await socket.flow(effectiveFlow).embeddings([input]);\n const embeddings = allEmbeddings[0];\n\n // Query graph embeddings to find entities\n const entities = await socket\n .flow(effectiveFlow)\n .graphEmbeddingsQuery(\n embeddings,\n options?.entityLimit || 10,\n collection\n );\n\n return { response, entities, explainEvents };\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(effectiveFlow)\n .textCompletionStreaming(systemPrompt, input, onChunk, onError);\n })\n : await socket.flow(effectiveFlow).textCompletion(systemPrompt, input);\n },\n });\n\n /**\n * Document RAG inference with optional explainability\n */\n const documentRagMutation = useMutation({\n mutationFn: async ({\n input,\n collection,\n docLimit,\n callbacks,\n }: {\n input: string;\n collection: string;\n docLimit?: number;\n callbacks?: DocumentRagCallbacks;\n }): Promise<DocumentRagResult> => {\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\n const response = 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 const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .documentRagStreaming(input, onChunk, onError, docLimit, collection, onExplain);\n });\n\n return { response, explainEvents };\n },\n });\n\n /**\n * Agent inference with streaming callbacks and optional explainability\n */\n const agentMutation = useMutation({\n mutationFn: async ({\n input,\n collection,\n callbacks,\n }: {\n input: string;\n collection?: string;\n callbacks?: AgentCallbacks;\n }): Promise<string> => {\n const wantsExplainability = !!callbacks?.onExplain;\n const explainEvents: ExplainEvent[] | undefined = wantsExplainability ? [] : undefined;\n\n return new Promise<string>((resolve, reject) => {\n let fullAnswer = \"\";\n\n const onThink = (thought: string, complete: boolean, messageId?: string) => {\n callbacks?.onThink?.(thought, complete, messageId);\n };\n\n const onObserve = (observation: string, complete: boolean, messageId?: string) => {\n callbacks?.onObserve?.(observation, complete, messageId);\n };\n\n const onAnswer = (answer: string, complete: boolean, messageId?: string) => {\n fullAnswer += answer;\n callbacks?.onAnswer?.(answer, complete, messageId);\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 const onExplain = wantsExplainability\n ? (event: ExplainEvent) => {\n explainEvents!.push(event);\n callbacks.onExplain!(event);\n }\n : undefined;\n\n socket\n .flow(effectiveFlow)\n .agent(input, onThink, onObserve, onAnswer, onError, onExplain, collection);\n });\n },\n });\n\n return {\n graphRag: graphRagMutation.mutateAsync,\n documentRag: documentRagMutation.mutateAsync,\n textCompletion: textCompletionMutation.mutateAsync,\n agent: agentMutation.mutateAsync,\n isLoading:\n graphRagMutation.isPending ||\n documentRagMutation.isPending ||\n textCompletionMutation.isPending ||\n agentMutation.isPending,\n };\n};\n","/**\n * Zustand store for managing explainability sessions\n * Sessions are keyed by ID and linked to messages via explainSessionId\n */\n\nimport { create } from \"zustand\";\nimport type { ExplainabilitySession } from \"../utils/explainability\";\n\nexport interface ExplainabilityStoreState {\n /** Map of session ID to session data */\n sessions: Record<string, ExplainabilitySession>;\n\n /** Add or update a session */\n addSession: (id: string, session: ExplainabilitySession) => void;\n\n /** Update an existing session (merges with existing data) */\n updateSession: (id: string, partial: Partial<ExplainabilitySession>) => void;\n\n /** Get a session by ID */\n getSession: (id: string) => ExplainabilitySession | undefined;\n\n /** Remove a session */\n removeSession: (id: string) => void;\n\n /** Clear all sessions */\n clearSessions: () => void;\n}\n\nexport const useExplainabilityStore = create<ExplainabilityStoreState>()(\n (set, get) => ({\n sessions: {},\n\n addSession: (id, session) =>\n set((state) => ({\n sessions: {\n ...state.sessions,\n [id]: session,\n },\n })),\n\n updateSession: (id, partial) =>\n set((state) => ({\n sessions: {\n ...state.sessions,\n [id]: {\n ...state.sessions[id],\n ...partial,\n },\n },\n })),\n\n getSession: (id) => get().sessions[id],\n\n removeSession: (id) =>\n set((state) => {\n const { [id]: _, ...rest } = state.sessions;\n return { sessions: rest };\n }),\n\n clearSessions: () => set({ sessions: {} }),\n })\n);\n","/**\n * Explainability utilities for parsing and structuring explain events\n */\n\nimport type { Triple, Term } from \"@trustgraph/client\";\nimport {\n TG,\n TG_QUERY,\n TG_EDGE_COUNT,\n TG_SELECTED_EDGE,\n TG_EDGE,\n TG_REASONING,\n TG_CONTENT,\n PROV_STARTED_AT_TIME,\n PROV_WAS_DERIVED_FROM,\n RDF_TYPE,\n RDFS_LABEL,\n} from \"@trustgraph/client\";\n\n// Predicates not yet in client library\nconst TG_ACTION = TG + \"action\";\nconst TG_ARGUMENTS = TG + \"arguments\";\nconst TG_SUBAGENT_GOAL = TG + \"subagentGoal\";\nconst TG_CONCEPT = TG + \"concept\";\nconst TG_ENTITY = TG + \"entity\";\n\n// RDF type URIs\nconst TG_AGENT_QUESTION = TG + \"AgentQuestion\";\nconst TG_ANALYSIS = TG + \"Analysis\";\nconst TG_TOOL_USE = TG + \"ToolUse\";\nconst TG_OBSERVATION = TG + \"Observation\";\nconst TG_THOUGHT_TYPE = TG + \"Thought\";\nconst TG_REFLECTION_TYPE = TG + \"Reflection\";\nconst TG_CONCLUSION = TG + \"Conclusion\";\nconst TG_ANSWER = TG + \"Answer\";\nconst TG_FINDING = TG + \"Finding\";\nconst TG_SYNTHESIS_TYPE = TG + \"Synthesis\";\nconst TG_DECOMPOSITION = TG + \"Decomposition\";\nconst TG_GROUNDING = TG + \"Grounding\";\nconst TG_EXPLORATION_TYPE = TG + \"Exploration\";\nconst TG_FOCUS_TYPE = TG + \"Focus\";\n\n// ── Event types ─────────────────────────────────────────────────────\n\nexport type ExplainEventType =\n | \"question\" | \"exploration\" | \"focus\" | \"synthesis\"\n | \"agent-question\" | \"decomposition\" | \"analysis\" | \"reflection\" | \"conclusion\"\n | \"grounding\"\n | \"unknown\";\n\n// ── Structured events ───────────────────────────────────────────────\n\nexport interface QuestionEvent {\n type: \"question\";\n explainId: string;\n explainGraph: string;\n query?: string;\n timestamp?: string;\n}\n\nexport interface ExplorationEvent {\n type: \"exploration\";\n explainId: string;\n explainGraph: string;\n edgeCount?: number;\n /** Entity URIs discovered during exploration */\n entities?: string[];\n}\n\nexport interface SelectedEdge {\n edge: { s: string; p: string; o: string };\n labels?: { s: string; p: string; o: string };\n reasoning?: string;\n sources?: ProvenanceChainItem[];\n}\n\nexport interface FocusEvent {\n type: \"focus\";\n explainId: string;\n explainGraph: string;\n /** URIs of edge selection entities (old format) */\n edgeSelectionUris: string[];\n /** Fully resolved selected edges */\n selectedEdges?: SelectedEdge[];\n}\n\nexport interface SynthesisEvent {\n type: \"synthesis\";\n explainId: string;\n explainGraph: string;\n contentLength?: number;\n}\n\nexport interface GroundingEvent {\n type: \"grounding\";\n explainId: string;\n explainGraph: string;\n label?: string;\n /** Concepts extracted from the query for graph traversal */\n concepts: string[];\n derivedFrom?: string[];\n}\n\nexport interface AgentQuestionEvent {\n type: \"agent-question\";\n explainId: string;\n explainGraph: string;\n query?: string;\n label?: string;\n timestamp?: string;\n derivedFrom?: string[];\n}\n\nexport interface DecompositionEvent {\n type: \"decomposition\";\n explainId: string;\n explainGraph: string;\n label?: string;\n goals: string[];\n derivedFrom?: string[];\n}\n\nexport interface AnalysisEvent {\n type: \"analysis\";\n explainId: string;\n explainGraph: string;\n label?: string;\n action?: string;\n arguments?: string;\n derivedFrom?: string[];\n}\n\nexport interface ReflectionEvent {\n type: \"reflection\";\n explainId: string;\n explainGraph: string;\n label?: string;\n derivedFrom?: string[];\n}\n\nexport interface ConclusionEvent {\n type: \"conclusion\";\n explainId: string;\n explainGraph: string;\n label?: string;\n derivedFrom?: string[];\n}\n\n// ── Union types ─────────────────────────────────────────────────────\n\nexport type StructuredExplainEvent =\n | QuestionEvent\n | ExplorationEvent\n | FocusEvent\n | SynthesisEvent\n | GroundingEvent\n | AgentQuestionEvent\n | DecompositionEvent\n | AnalysisEvent\n | ReflectionEvent\n | ConclusionEvent;\n\n// Provenance chain types\n\nexport interface ProvenanceChainItem {\n uri: string;\n label: string;\n}\n\nexport interface ProvenanceChain {\n chain: ProvenanceChainItem[];\n documentUri?: string;\n documentLabel?: string;\n}\n\n// Session data\n\nexport interface ExplainabilitySession {\n // Graph-RAG fields\n question?: QuestionEvent;\n exploration?: ExplorationEvent;\n focus?: FocusEvent;\n synthesis?: SynthesisEvent;\n // Agent fields — ordered timeline of events\n agentSteps?: StructuredExplainEvent[];\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────\n\n/**\n * Extract event type from explainId URI (graph-rag fallback)\n */\nexport function getEventType(explainId: string): ExplainEventType {\n if (explainId.includes(\"question\")) return \"question\";\n if (explainId.includes(\"exploration\")) return \"exploration\";\n if (explainId.includes(\"focus\")) return \"focus\";\n if (explainId.includes(\"synthesis\")) return \"synthesis\";\n return \"unknown\";\n}\n\nexport function getTermValue(term: Term): string {\n if (!term) return \"\";\n if (term.t === \"i\") return term.i || \"\";\n if (term.t === \"l\") return term.v || \"\";\n if (term.t === \"t\" && term.tr) {\n const s = getTermValue(term.tr.s);\n const p = getTermValue(term.tr.p);\n const o = getTermValue(term.tr.o);\n return `<<${s} ${p} ${o}>>`;\n }\n return \"\";\n}\n\nexport function extractQuotedTriple(term: Term): { s: string; p: string; o: string } | null {\n if (term.t === \"t\" && term.tr) {\n return {\n s: getTermValue(term.tr.s),\n p: getTermValue(term.tr.p),\n o: getTermValue(term.tr.o),\n };\n }\n return null;\n}\n\n// ── RDF type detection ──────────────────────────────────────────────\n\n/**\n * Map RDF type URI → event type (first match wins).\n * Agent-specific types only — shared types like tg:Synthesis and\n * tg:Answer are excluded to avoid catching graph-rag events.\n * Grounding, Exploration, Focus are included since they now carry\n * embedded triples with their RDF type.\n */\nconst RDF_TYPE_CHECKS: [string, ExplainEventType][] = [\n [TG_AGENT_QUESTION, \"agent-question\"],\n [TG_DECOMPOSITION, \"decomposition\"],\n [TG_ANALYSIS, \"analysis\"],\n [TG_TOOL_USE, \"analysis\"],\n [TG_OBSERVATION, \"reflection\"],\n [TG_THOUGHT_TYPE, \"reflection\"],\n [TG_REFLECTION_TYPE, \"reflection\"],\n [TG_CONCLUSION, \"conclusion\"],\n [TG_FINDING, \"conclusion\"],\n [TG_GROUNDING, \"grounding\"],\n [TG_EXPLORATION_TYPE, \"exploration\"],\n [TG_FOCUS_TYPE, \"focus\"],\n];\n\n/**\n * Detect event type from RDF types in embedded triples.\n */\nexport function getEventTypeFromTriples(triples: Triple[]): ExplainEventType {\n const types = new Set<string>();\n for (const t of triples) {\n if (getTermValue(t.p) === RDF_TYPE) {\n types.add(getTermValue(t.o));\n }\n }\n\n for (const [typeUri, eventType] of RDF_TYPE_CHECKS) {\n if (types.has(typeUri)) return eventType;\n }\n\n return \"unknown\";\n}\n\n/** Extract common fields (label, derivedFrom) from triples */\nfunction extractCommonFields(triples: Triple[]): {\n label?: string;\n derivedFrom: string[];\n} {\n const derivedFrom: string[] = [];\n let label: string | undefined;\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === RDFS_LABEL && o) label = o;\n if (p === PROV_WAS_DERIVED_FROM && o) derivedFrom.push(o);\n }\n\n return { label, derivedFrom };\n}\n\n/**\n * Extract inline edges from triples (tg:edge quoted triples).\n * Returns SelectedEdge objects with URIs — labels resolved later.\n */\nfunction extractInlineEdges(triples: Triple[]): SelectedEdge[] {\n const edges: SelectedEdge[] = [];\n\n for (const t of triples) {\n if (getTermValue(t.p) === TG_EDGE && t.o.t === \"t\" && t.o.tr) {\n const edge = extractQuotedTriple(t.o);\n if (edge) {\n edges.push({ edge });\n }\n }\n }\n\n return edges;\n}\n\n// ── Parsers ─────────────────────────────────────────────────────────\n\nexport function parseQuestionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): QuestionEvent {\n const event: QuestionEvent = { type: \"question\", explainId, explainGraph };\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_QUERY) event.query = o;\n else if (p === PROV_STARTED_AT_TIME) event.timestamp = o;\n }\n\n return event;\n}\n\nexport function parseExplorationTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): ExplorationEvent {\n const event: ExplorationEvent = { type: \"exploration\", explainId, explainGraph };\n const entities: string[] = [];\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_EDGE_COUNT) event.edgeCount = parseInt(o, 10);\n if (p === TG_ENTITY && o) entities.push(o);\n }\n\n if (entities.length > 0) event.entities = entities;\n\n return event;\n}\n\nexport function parseFocusTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): FocusEvent {\n const event: FocusEvent = {\n type: \"focus\",\n explainId,\n explainGraph,\n edgeSelectionUris: [],\n };\n\n // Collect edge selection URIs (old format)\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_SELECTED_EDGE && typeof o === \"string\") {\n event.edgeSelectionUris.push(o);\n }\n }\n\n // Extract inline edges (new format: tg:edge with quoted triples)\n const inlineEdges = extractInlineEdges(triples);\n if (inlineEdges.length > 0) {\n event.selectedEdges = inlineEdges;\n }\n\n return event;\n}\n\nexport function parseSynthesisTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): SynthesisEvent {\n const event: SynthesisEvent = { type: \"synthesis\", explainId, explainGraph };\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_CONTENT) event.contentLength = o.length;\n }\n\n return event;\n}\n\nexport function parseEdgeSelectionTriples(triples: Triple[]): {\n edge: { s: string; p: string; o: string } | null;\n reasoning: string | null;\n} {\n let edge: { s: string; p: string; o: string } | null = null;\n let reasoning: string | null = null;\n\n for (const triple of triples) {\n const p = getTermValue(triple.p);\n if (p === TG_EDGE) edge = extractQuotedTriple(triple.o);\n else if (p === TG_REASONING) reasoning = getTermValue(triple.o);\n }\n\n return { edge, reasoning };\n}\n\nfunction parseGroundingTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): GroundingEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n const concepts: string[] = [];\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_CONCEPT && o) concepts.push(o);\n }\n\n return { type: \"grounding\", explainId, explainGraph, label, concepts, derivedFrom };\n}\n\nfunction parseAgentQuestionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): AgentQuestionEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n const event: AgentQuestionEvent = {\n type: \"agent-question\", explainId, explainGraph, label, derivedFrom,\n };\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_QUERY) event.query = o;\n if (p === PROV_STARTED_AT_TIME) event.timestamp = o;\n }\n\n return event;\n}\n\nfunction parseDecompositionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): DecompositionEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n const goals: string[] = [];\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_SUBAGENT_GOAL && o) goals.push(o);\n }\n\n return { type: \"decomposition\", explainId, explainGraph, label, goals, derivedFrom };\n}\n\nfunction parseAnalysisTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): AnalysisEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n const event: AnalysisEvent = {\n type: \"analysis\", explainId, explainGraph, label, derivedFrom,\n };\n\n for (const t of triples) {\n const p = getTermValue(t.p);\n const o = getTermValue(t.o);\n if (p === TG_ACTION) event.action = o;\n if (p === TG_ARGUMENTS) event.arguments = o;\n }\n\n return event;\n}\n\nfunction parseReflectionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): ReflectionEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n return { type: \"reflection\", explainId, explainGraph, label, derivedFrom };\n}\n\nfunction parseConclusionTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): ConclusionEvent {\n const { label, derivedFrom } = extractCommonFields(triples);\n return { type: \"conclusion\", explainId, explainGraph, label, derivedFrom };\n}\n\n// ── Unified parser ──────────────────────────────────────────────────\n\n/**\n * Parse triples into a structured event.\n * Tries RDF type detection first, then URI patterns as fallback.\n * Returns null for events with no triples.\n */\nexport function parseExplainTriples(\n explainId: string,\n explainGraph: string,\n triples: Triple[]\n): StructuredExplainEvent | null {\n if (triples.length === 0) return null;\n\n // Try RDF type detection first\n const rdfEventType = getEventTypeFromTriples(triples);\n if (rdfEventType !== \"unknown\") {\n switch (rdfEventType) {\n case \"agent-question\":\n return parseAgentQuestionTriples(explainId, explainGraph, triples);\n case \"decomposition\":\n return parseDecompositionTriples(explainId, explainGraph, triples);\n case \"analysis\":\n return parseAnalysisTriples(explainId, explainGraph, triples);\n case \"reflection\":\n return parseReflectionTriples(explainId, explainGraph, triples);\n case \"conclusion\":\n return parseConclusionTriples(explainId, explainGraph, triples);\n case \"grounding\":\n return parseGroundingTriples(explainId, explainGraph, triples);\n case \"exploration\":\n return parseExplorationTriples(explainId, explainGraph, triples);\n case \"focus\":\n return parseFocusTriples(explainId, explainGraph, triples);\n }\n }\n\n // Fall back to URI pattern detection (graph-rag events)\n const eventType = getEventType(explainId);\n switch (eventType) {\n case \"question\":\n return parseQuestionTriples(explainId, explainGraph, triples);\n case \"exploration\":\n return parseExplorationTriples(explainId, explainGraph, triples);\n case \"focus\":\n return parseFocusTriples(explainId, explainGraph, triples);\n case \"synthesis\":\n return parseSynthesisTriples(explainId, explainGraph, triples);\n default:\n return null;\n }\n}\n","/**\n * Hook for tracing provenance chains in the knowledge graph\n * Follows tg:contains to find subgraphs, then prov:wasDerivedFrom\n * to trace chunk → page → document chains\n */\n\nimport { useState, useCallback, useRef } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport type { Triple, Term } from \"@trustgraph/client\";\nimport {\n TG,\n PROV_WAS_DERIVED_FROM,\n RDFS_LABEL,\n} from \"@trustgraph/client\";\nimport type { ProvenanceChain, ProvenanceChainItem } from \"../utils/explainability\";\nimport { getTermValue } from \"../utils/explainability\";\n\nconst TG_CONTAINS = TG + \"contains\";\n\nexport interface UseProvenanceOptions {\n flow?: string;\n collection?: string;\n /** Maximum depth to trace (default: 10) */\n maxDepth?: number;\n}\n\nexport interface UseProvenanceResult {\n /** Trace provenance chain from a URI to root */\n traceChain: (uri: string) => Promise<ProvenanceChain>;\n /** Trace provenance for an edge (s, p, o) - finds containing subgraph first */\n traceEdgeProvenance: (s: string, p: string, o: string) => Promise<ProvenanceChain[]>;\n /** Resolve label for a URI (uses cache) */\n resolveLabel: (uri: string) => Promise<string>;\n /** Clear the label cache */\n clearCache: () => void;\n /** Whether any trace operation is in progress */\n isTracing: boolean;\n}\n\n/**\n * Hook for tracing provenance chains\n */\nexport const useProvenance = (options: UseProvenanceOptions = {}): UseProvenanceResult => {\n const { flow, collection = \"default\", maxDepth = 10 } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const effectiveFlow = flow ?? sessionFlowId;\n\n const [isTracing, setIsTracing] = useState(false);\n\n // Label cache to avoid repeated queries\n const labelCacheRef = useRef<Map<string, string>>(new Map());\n\n /**\n * Check if connected\n */\n const isConnected = useCallback(() => {\n return (\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\"\n );\n }, [connectionState]);\n\n /**\n * Query for rdfs:label of a URI\n */\n const resolveLabel = useCallback(\n async (uri: string): Promise<string> => {\n // Check cache\n if (labelCacheRef.current.has(uri)) {\n return labelCacheRef.current.get(uri)!;\n }\n\n // Not an IRI - return as-is\n if (!uri.startsWith(\"http\") && !uri.startsWith(\"urn:\")) {\n return uri;\n }\n\n if (!isConnected()) {\n return uri;\n }\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n { t: \"i\", i: uri },\n { t: \"i\", i: RDFS_LABEL },\n undefined,\n 1,\n collection\n );\n\n const label =\n triples.length > 0 ? getTermValue(triples[0].o) : uri;\n\n // Cache the result\n labelCacheRef.current.set(uri, label);\n return label;\n } catch {\n return uri;\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Query for prov:wasDerivedFrom parent of a URI\n */\n const queryDerivedFrom = useCallback(\n async (uri: string): Promise<string | null> => {\n if (!isConnected()) return null;\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n { t: \"i\", i: uri },\n { t: \"i\", i: PROV_WAS_DERIVED_FROM },\n undefined,\n 1,\n collection\n );\n\n if (triples.length > 0) {\n return getTermValue(triples[0].o);\n }\n return null;\n } catch {\n return null;\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Trace the full provenance chain from a URI to root\n */\n const traceChain = useCallback(\n async (uri: string): Promise<ProvenanceChain> => {\n setIsTracing(true);\n\n try {\n const chain: ProvenanceChainItem[] = [];\n let current: string | null = uri;\n\n for (let depth = 0; depth < maxDepth && current; depth++) {\n const label = await resolveLabel(current);\n chain.push({ uri: current, label });\n\n const parent = await queryDerivedFrom(current);\n if (!parent || parent === current) {\n break;\n }\n current = parent;\n }\n\n // The last item in the chain is the root document\n const rootItem = chain.length > 0 ? chain[chain.length - 1] : undefined;\n\n return {\n chain,\n documentUri: rootItem?.uri,\n documentLabel: rootItem?.label,\n };\n } finally {\n setIsTracing(false);\n }\n },\n [maxDepth, resolveLabel, queryDerivedFrom]\n );\n\n /**\n * Find subgraphs that contain an edge via tg:contains with a quoted triple\n */\n const queryContainingSubgraphs = useCallback(\n async (s: string, p: string, o: string): Promise<string[]> => {\n if (!isConnected()) return [];\n\n try {\n // Build the quoted triple term for the edge\n const quotedTriple: Term = {\n t: \"t\",\n tr: {\n s: { t: \"i\", i: s },\n p: { t: \"i\", i: p },\n o: o.startsWith(\"http\") || o.startsWith(\"urn:\")\n ? { t: \"i\", i: o }\n : { t: \"l\", v: o },\n },\n };\n\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n undefined,\n { t: \"i\", i: TG_CONTAINS },\n quotedTriple,\n 10,\n collection\n );\n\n return triples.map((t) => getTermValue(t.s));\n } catch {\n return [];\n }\n },\n [socket, effectiveFlow, collection, isConnected]\n );\n\n /**\n * Trace provenance for an edge — find containing subgraph, then follow\n * wasDerivedFrom chain: subgraph → chunk → page → document\n */\n const traceEdgeProvenance = useCallback(\n async (s: string, p: string, o: string): Promise<ProvenanceChain[]> => {\n setIsTracing(true);\n\n try {\n // Find subgraphs containing this edge\n const subgraphUris = await queryContainingSubgraphs(s, p, o);\n\n const chains: ProvenanceChain[] = [];\n\n for (const subgraphUri of subgraphUris) {\n // Follow wasDerivedFrom from the subgraph to the chunk\n const chunkUri = await queryDerivedFrom(subgraphUri);\n if (chunkUri) {\n // Trace the full chain from chunk upward\n const chain = await traceChain(chunkUri);\n chains.push(chain);\n }\n }\n\n return chains;\n } finally {\n setIsTracing(false);\n }\n },\n [queryContainingSubgraphs, queryDerivedFrom, traceChain]\n );\n\n /**\n * Clear the label cache\n */\n const clearCache = useCallback(() => {\n labelCacheRef.current.clear();\n }, []);\n\n return {\n traceChain,\n traceEdgeProvenance,\n resolveLabel,\n clearCache,\n isTracing,\n };\n};\n","/**\n * Hook for managing explainability state during GraphRAG queries\n * Unpacks explain events into structured data with provenance chains\n *\n * Processing strategy:\n * - Events are processed immediately as they arrive\n * - Explain triples are embedded directly in events (no store lookups)\n * - Edge labels are resolved via triple store queries\n * - Edge label resolution + provenance runs in parallel\n * - onUpdate callback fires on every session state change, allowing\n * callers to sync to external stores (e.g. Zustand)\n */\n\nimport { useState, useCallback, useRef } from \"react\";\nimport { useSessionStore } from \"./session\";\nimport { useProvenance } from \"./provenance\";\nimport type { ExplainEvent, Triple } from \"@trustgraph/client\";\nimport {\n parseExplainTriples,\n parseEdgeSelectionTriples,\n getTermValue,\n type ExplainabilitySession,\n type QuestionEvent,\n type ExplorationEvent,\n type FocusEvent,\n type SynthesisEvent,\n type SelectedEdge,\n type ProvenanceChainItem,\n} from \"../utils/explainability\";\n\nexport interface UseExplainabilityOptions {\n flow?: string;\n collection?: string;\n /** Trace provenance for selected edges (default: true) */\n traceProvenance?: boolean;\n /** Called on every session state change with the latest session */\n onUpdate?: (session: ExplainabilitySession) => void;\n}\n\nexport interface UseExplainabilityResult {\n /** Add an explain event (wire this to graphRag callbacks.onExplain) */\n addEvent: (event: ExplainEvent) => void;\n /** Current session data (React state - may lag behind ref) */\n session: ExplainabilitySession;\n /** Ref-backed session that's always immediately up-to-date (no render delay) */\n sessionRef: React.RefObject<ExplainabilitySession>;\n /** Raw events received */\n events: ExplainEvent[];\n /** Whether unpacking is in progress (React state) */\n isUnpacking: boolean;\n /** Ref-backed processing flag - always immediately up-to-date */\n isProcessingRef: React.RefObject<boolean>;\n /** Any error during unpacking */\n error: string | null;\n /** Reset the session */\n reset: () => void;\n}\n\n/**\n * Hook for managing explainability during inference\n */\nexport const useExplainability = (\n options: UseExplainabilityOptions = {}\n): UseExplainabilityResult => {\n const {\n flow,\n collection = \"default\",\n traceProvenance = true,\n } = options;\n\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const effectiveFlow = flow ?? sessionFlowId;\n\n const { traceEdgeProvenance, resolveLabel } = useProvenance({\n flow: effectiveFlow,\n collection,\n });\n\n // Keep onUpdate in a ref so it doesn't break memoisation\n const onUpdateRef = useRef(options.onUpdate);\n onUpdateRef.current = options.onUpdate;\n\n const [events, setEvents] = useState<ExplainEvent[]>([]);\n const [session, setSession] = useState<ExplainabilitySession>({});\n const [isUnpacking, setIsUnpacking] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Mirror session in a ref so it's always immediately readable (no render delay)\n const sessionRef = useRef<ExplainabilitySession>({});\n\n // Track pending unpack operations\n const unpackQueueRef = useRef<ExplainEvent[]>([]);\n const isProcessingRef = useRef(false);\n\n /**\n * Resolve a single edge: extract from embedded triples, resolve labels\n */\n const resolveEdge = useCallback(\n async (edgeSelUri: string, allTriples: Triple[]): Promise<SelectedEdge | null> => {\n // Filter embedded triples for this edge selection URI\n const edgeTriples = allTriples.filter(\n (t) => getTermValue(t.s) === edgeSelUri\n );\n const { edge, reasoning } = parseEdgeSelectionTriples(edgeTriples);\n\n if (!edge) return null;\n\n const selectedEdge: SelectedEdge = {\n edge,\n reasoning: reasoning || undefined,\n };\n\n // Kick off label resolution and provenance in parallel\n const [labels, provenanceChains] = await Promise.all([\n // Labels — all 3 in parallel\n Promise.all([\n resolveLabel(edge.s),\n resolveLabel(edge.p),\n resolveLabel(edge.o),\n ]),\n // Provenance\n traceProvenance\n ? traceEdgeProvenance(edge.s, edge.p, edge.o)\n : Promise.resolve([]),\n ]);\n\n selectedEdge.labels = { s: labels[0], p: labels[1], o: labels[2] };\n\n if (provenanceChains.length > 0) {\n selectedEdge.sources = provenanceChains.map((c) => c.chain).flat();\n }\n\n return selectedEdge;\n },\n [resolveLabel, traceProvenance, traceEdgeProvenance]\n );\n\n /**\n * Unpack a focus event — resolve ALL edges in parallel\n */\n const unpackFocusEvent = useCallback(\n async (focusEvent: FocusEvent, allTriples: Triple[]): Promise<FocusEvent> => {\n // Fire off all edge resolutions concurrently\n const edgePromises = focusEvent.edgeSelectionUris.map(\n (uri) => resolveEdge(uri, allTriples)\n );\n\n const results = await Promise.all(edgePromises);\n const selectedEdges = results.filter((e): e is SelectedEdge => e !== null);\n\n return {\n ...focusEvent,\n selectedEdges,\n };\n },\n [resolveEdge]\n );\n\n /** Helper to update state, ref, and notify caller together */\n const updateSession = useCallback(\n (updater: (prev: ExplainabilitySession) => ExplainabilitySession) => {\n sessionRef.current = updater(sessionRef.current);\n setSession(updater);\n onUpdateRef.current?.(sessionRef.current);\n },\n []\n );\n\n const AGENT_STEP_TYPES = new Set([\n \"agent-question\", \"decomposition\", \"analysis\", \"reflection\", \"conclusion\",\n \"grounding\",\n ]);\n\n /**\n * Resolve labels for inline edges (edges already extracted, just need labels)\n */\n const resolveEdgeLabels = useCallback(\n async (focusEvent: FocusEvent): Promise<FocusEvent> => {\n if (!focusEvent.selectedEdges || focusEvent.selectedEdges.length === 0) {\n return focusEvent;\n }\n\n const resolved = await Promise.all(\n focusEvent.selectedEdges.map(async (se) => {\n const [sLabel, pLabel, oLabel] = await Promise.all([\n resolveLabel(se.edge.s),\n resolveLabel(se.edge.p),\n resolveLabel(se.edge.o),\n ]);\n\n let sources: ProvenanceChainItem[] | undefined;\n if (traceProvenance) {\n const chains = await traceEdgeProvenance(se.edge.s, se.edge.p, se.edge.o);\n if (chains.length > 0) {\n sources = chains.map((c) => c.chain).flat();\n }\n }\n\n return {\n ...se,\n labels: { s: sLabel, p: pLabel, o: oLabel },\n sources,\n };\n })\n );\n\n return { ...focusEvent, selectedEdges: resolved };\n },\n [resolveLabel, traceProvenance, traceEdgeProvenance]\n );\n\n /**\n * Process a single explain event\n */\n const processEvent = useCallback(\n async (event: ExplainEvent): Promise<void> => {\n const triples = event.explainTriples ?? [];\n\n const parsed = parseExplainTriples(event.explainId, event.explainGraph, triples);\n if (!parsed) return;\n\n if (AGENT_STEP_TYPES.has(parsed.type)) {\n // Agent step — append to timeline\n updateSession((prev) => ({\n ...prev,\n agentSteps: [...(prev.agentSteps || []), parsed],\n }));\n }\n\n // Graph-RAG fields — populate regardless (agent produces these too)\n switch (parsed.type) {\n case \"question\":\n updateSession((prev) => ({ ...prev, question: parsed as QuestionEvent }));\n break;\n case \"exploration\":\n updateSession((prev) => ({ ...prev, exploration: parsed as ExplorationEvent }));\n break;\n case \"focus\": {\n updateSession((prev) => ({ ...prev, focus: parsed as FocusEvent }));\n // Resolve labels for inline edges, or unpack old-format edges\n const focusEvent = parsed as FocusEvent;\n if (focusEvent.selectedEdges && focusEvent.selectedEdges.length > 0) {\n // New format: edges already extracted, resolve labels\n const resolved = await resolveEdgeLabels(focusEvent);\n updateSession((prev) => ({ ...prev, focus: resolved }));\n } else if (focusEvent.edgeSelectionUris.length > 0) {\n // Old format: unpack edge selection URIs\n const unpacked = await unpackFocusEvent(focusEvent, triples);\n updateSession((prev) => ({ ...prev, focus: unpacked }));\n }\n break;\n }\n case \"synthesis\":\n updateSession((prev) => ({ ...prev, synthesis: parsed as SynthesisEvent }));\n break;\n }\n },\n [unpackFocusEvent, resolveEdgeLabels, updateSession]\n );\n\n /**\n * Process the unpack queue\n */\n const processQueue = useCallback(async () => {\n if (isProcessingRef.current) return;\n if (unpackQueueRef.current.length === 0) return;\n\n isProcessingRef.current = true;\n setIsUnpacking(true);\n\n try {\n while (unpackQueueRef.current.length > 0) {\n const event = unpackQueueRef.current.shift()!;\n await processEvent(event);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n setError(msg);\n }\n\n isProcessingRef.current = false;\n setIsUnpacking(false);\n\n // Check if more events were queued during processing (e.g., after a reset)\n if (unpackQueueRef.current.length > 0) {\n processQueue();\n }\n }, [processEvent]);\n\n /**\n * Add an explain event — immediately queues and starts processing\n */\n const addEvent = useCallback(\n (event: ExplainEvent) => {\n setEvents((prev) => [...prev, event]);\n unpackQueueRef.current.push(event);\n processQueue();\n },\n [processQueue]\n );\n\n /**\n * Reset the session\n */\n const reset = useCallback(() => {\n setEvents([]);\n setSession({});\n sessionRef.current = {};\n setError(null);\n unpackQueueRef.current = [];\n }, []);\n\n return {\n addEvent,\n session,\n sessionRef,\n events,\n isUnpacking,\n isProcessingRef,\n error,\n reset,\n };\n};\n\n// Re-export types for convenience\nexport type {\n ExplainabilitySession,\n ExplainEventType,\n StructuredExplainEvent,\n QuestionEvent,\n ExplorationEvent,\n FocusEvent,\n SynthesisEvent,\n SelectedEdge,\n ProvenanceChain,\n ProvenanceChainItem,\n AgentQuestionEvent,\n DecompositionEvent,\n AnalysisEvent,\n ReflectionEvent,\n ConclusionEvent,\n GroundingEvent,\n} from \"../utils/explainability\";\n","import { useMutation } from \"@tanstack/react-query\";\nimport { useRef, useCallback } from \"react\";\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, getTermValue } from \"../utils/knowledge-graph\";\nimport { Entity } from \"../model/entity\";\nimport { useSocket } from \"@trustgraph/react-provider\";\nimport { useSessionStore } from \"./session\";\nimport { useExplainabilityStore } from \"./explainability-store\";\nimport { useExplainability } from \"./explainability\";\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 = ({ flow }: { flow?: string } = {}) => {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n const setEntities = useWorkbenchStateStore((state) => state.setEntities);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\n\n // Settings for GraphRAG configuration\n const { settings } = useSettings();\n\n // Explainability store for persisting sessions\n const addExplainSession = useExplainabilityStore((state) => state.addSession);\n\n // Track the current explain session ID so onUpdate can target the right store key\n const explainSessionIdRef = useRef<string | undefined>(undefined);\n\n // Explainability hook — onUpdate syncs every state change to the Zustand store\n const explainability = useExplainability({\n flow: effectiveFlow,\n collection: settings.collection,\n onUpdate: (session) => {\n const id = explainSessionIdRef.current;\n if (id) {\n addExplainSession(id, session);\n }\n },\n });\n const explainabilityRef = useRef(explainability);\n explainabilityRef.current = explainability;\n\n // Generate unique session IDs\n const generateSessionId = useCallback(() => {\n return `explain-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }, []);\n\n // Inference services\n const inference = useInference({ flow });\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 const sessionId = generateSessionId();\n explainabilityRef.current.reset();\n explainSessionIdRef.current = sessionId;\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 addMessage(\"ai\", accumulated, undefined, sessionId);\n messageAdded = true;\n } else {\n updateLastMessage(accumulated);\n }\n },\n onExplain: (event) => {\n console.log(\"[explain] event received:\", event.explainId);\n explainabilityRef.current.addEvent(event);\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\n .filter((match) => match.entity !== null)\n .map(async (match) => {\n const entity = match.entity!;\n const labelActivity = \"Label \" + getTermValue(entity);\n addActivity(labelActivity);\n\n try {\n const triples = await socket\n .flow(effectiveFlow)\n .triplesQuery(\n entity,\n { t: \"i\", i: RDFS_LABEL },\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: getTermValue(resp[0].o),\n uri: getTermValue(resp[0].s),\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 const sessionId = generateSessionId();\n explainabilityRef.current.reset();\n explainSessionIdRef.current = sessionId;\n\n try {\n const response = await inference.agent({\n input,\n collection: settings.collection,\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\", sessionId);\n answerMessageAdded = true;\n } else {\n updateLastMessage(answerAccumulated);\n }\n },\n onExplain: (event) => {\n console.log(\"[explain] agent event received:\", event.explainId);\n explainabilityRef.current.addEvent(event);\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: () => {\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","// @ts-nocheck\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSessionStore } from \"./session\";\nimport { useSettings } from \"./settings\";\nimport { RowEmbeddingsMatch } from \"@trustgraph/client\";\n\n/**\n * Custom hook for querying row embeddings using vectors.\n * Searches for similar records in structured data indexes.\n */\nexport const useRowEmbeddingsQuery = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const { settings } = useSettings();\n\n const effectiveFlow = flow ?? sessionFlowId;\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const mutation = useMutation({\n mutationFn: async ({\n vectors,\n schemaName,\n collection,\n indexName,\n limit = 10,\n }: {\n vectors: number[];\n schemaName: string;\n collection?: string;\n indexName?: string;\n limit?: number;\n }): Promise<RowEmbeddingsMatch[]> => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(effectiveFlow).rowEmbeddingsQuery(\n vectors,\n schemaName,\n collection ?? settings.collection,\n indexName,\n limit\n );\n },\n onError: (err) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(`Row embeddings query failed: ${message}`);\n },\n onSuccess: () => {\n },\n });\n\n useActivity(mutation.isPending, \"Querying row embeddings\");\n\n return {\n executeQuery: mutation.mutate,\n executeQueryAsync: mutation.mutateAsync,\n isExecuting: mutation.isPending,\n error: mutation.error,\n matches: mutation.data ?? [],\n hasResults: (mutation.data?.length ?? 0) > 0,\n reset: mutation.reset,\n isReady: isSocketReady,\n };\n};\n","// @ts-nocheck\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useSessionStore } from \"./session\";\nimport { useSettings } from \"./settings\";\n\n/**\n * Custom hook for querying document chunks using vectors.\n * Searches for document chunks with similar embeddings.\n */\nexport const useDocumentEmbeddingsQuery = ({ flow }: { flow?: string } = {}) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n const sessionFlowId = useSessionStore((state) => state.flowId);\n const { settings } = useSettings();\n\n const effectiveFlow = flow ?? sessionFlowId;\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const mutation = useMutation({\n mutationFn: async ({\n vectors,\n user,\n collection,\n limit = 10,\n }: {\n vectors: number[][];\n user?: string;\n collection?: string;\n limit?: number;\n }) => {\n if (!isSocketReady) {\n throw new Error(\"Socket connection not ready\");\n }\n\n return socket.flow(effectiveFlow).documentEmbeddingsQuery(\n vectors,\n user ?? settings.user,\n collection ?? settings.collection,\n limit\n );\n },\n onError: (err) => {\n const message = err instanceof Error ? err.message : String(err);\n notify.error(`Document embeddings query failed: ${message}`);\n },\n onSuccess: () => {\n },\n });\n\n useActivity(mutation.isPending, \"Searching document chunks\");\n\n return {\n executeQuery: mutation.mutate,\n executeQueryAsync: mutation.mutateAsync,\n isExecuting: mutation.isPending,\n error: mutation.error,\n results: mutation.data ?? [],\n hasResults: Array.isArray(mutation.data) && mutation.data.length > 0,\n reset: mutation.reset,\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 rows queries\n * Provides functionality for executing GraphQL queries against structured row data\n */\nexport const useRowsQuery = ({ flow }: { flow?: string } = {}) => {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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 rows queries\n const rowsQueryMutation = 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(effectiveFlow)\n .rowsQuery(\n query,\n collection || settings.collection,\n variables,\n operationName\n );\n },\n onError: (err: unknown) => {\n console.log(\"Rows query error:\", err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n notify.error(`GraphQL query failed: ${errorMessage}`);\n },\n onSuccess: () => {\n },\n });\n\n // Show loading indicator for query operations\n useActivity(rowsQueryMutation.isPending, \"Executing GraphQL query\");\n\n // Return the public API for the hook\n return {\n // Query execution\n executeQuery: rowsQueryMutation.mutate,\n executeQueryAsync: rowsQueryMutation.mutateAsync,\n\n // Query state\n isExecuting: rowsQueryMutation.isPending,\n error: rowsQueryMutation.error,\n data: rowsQueryMutation.data,\n\n // Reset function to clear previous results\n reset: rowsQueryMutation.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\";\nimport { useSessionStore } from \"./session\";\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 // Session state for default flow ID\n const sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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: effectiveFlow, term }],\n enabled: isSocketReady && !!term && !!effectiveFlow,\n queryFn: () => {\n return socket\n .flow(effectiveFlow)\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","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 * 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\ninterface UpdateCollectionParams {\n collection: string;\n name: string;\n description: string;\n tags: string[];\n onSuccess?: () => void;\n}\n\ninterface DeleteCollectionsParams {\n collections: string[];\n onSuccess?: () => void;\n}\n\n/**\n * Custom hook for managing collection operations\n * Provides functionality for fetching, creating, updating, and deleting collections\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 }: UpdateCollectionParams) => {\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: Error) => {\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 }: DeleteCollectionsParams) => {\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: Error) => {\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 = ({ flow }: { flow?: string } = {}): {\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 sessionFlowId = useSessionStore((state) => state.flowId);\n\n // Use explicit param if provided, otherwise fall back to session state\n const effectiveFlow = flow ?? sessionFlowId;\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(effectiveFlow).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: () => {\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 and collection\n */\n const loadKnowledgeCoresMutation = useMutation({\n mutationFn: ({ ids, flow, collection, onSuccess }) => {\n // Execute load requests in parallel for all knowledge cores\n return Promise.all(\n ids.map((id) => socket.knowledge().loadKgCore(id, flow, collection))\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 },\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 { Term, IriTerm, LiteralTerm } from \"@trustgraph/client\";\n\n// Helper to get the string value from a Term (IRI or Literal)\nconst getTermValue = (term: Term): string => {\n if (term.t === \"i\") return (term as IriTerm).i;\n if (term.t === \"l\") return (term as LiteralTerm).v;\n if (term.t === \"b\") return term.d;\n return \"\";\n};\n\n// Helper to check if a Term is an IRI\nconst isIri = (term: Term): term is IriTerm => term.t === \"i\";\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 subjectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\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 objectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n undefined,\n undefined,\n objectTerm,\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 subjectTerm: IriTerm = { t: \"i\", i: nodeId };\n\n return socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\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 is not an IRI, i.e., literals)\n return triples.filter((triple) => triple.o && !isIri(triple.o));\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 (where o is an IRI) 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 IRI (entity)\n if (triple.o && isIri(triple.o) && triple.p && isIri(triple.p)) {\n uniqueRelationships.add(triple.p.i);\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 (where s is an IRI) 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 IRI (entity)\n if (triple.s && isIri(triple.s) && triple.p && isIri(triple.p)) {\n uniqueRelationships.add(triple.p.i);\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 is a literal (not an IRI)\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 && isIri(triple.p)) {\n uniqueProperties.add(triple.p.i);\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 subjectTerm: IriTerm = { t: \"i\", i: relationshipURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 subjectTerm: IriTerm = { t: \"i\", i: relationshipURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 subjectTerm: IriTerm = { t: \"i\", i: propertyURI };\n const predicateTerm: IriTerm = { t: \"i\", i: RDFS_LABEL };\n\n const labelTriples = await socket\n .flow(flowId)\n .triplesQuery(\n subjectTerm,\n predicateTerm,\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] = getTermValue(labelTriples[0].o);\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 const pUri = triple.p && isIri(triple.p) ? triple.p.i : \"\";\n return pUri !== RDFS_LABEL;\n })\n .map((triple) => {\n const pUri = triple.p && isIri(triple.p) ? triple.p.i : \"\";\n const oValue = triple.o ? getTermValue(triple.o) : \"\";\n return {\n predicate: {\n uri: pUri,\n label: propertyLabelsQuery.data?.[pUri] || pUri,\n },\n value: oValue,\n };\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","import { useState, useCallback, useRef } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport type { ChunkedUploadDocumentMetadata } from \"@trustgraph/client\";\nimport { useNotification } from \"../hooks/useNotification\";\nimport { createDocId } from \"../model/document-metadata\";\n\n// Default chunk size: 5MB (matches backend default)\nconst DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024;\n\n// Maximum parallel chunk uploads\nconst DEFAULT_PARALLEL_UPLOADS = 3;\n\nexport type UploadStatus =\n | \"idle\"\n | \"preparing\"\n | \"uploading\"\n | \"paused\"\n | \"completing\"\n | \"completed\"\n | \"error\"\n | \"cancelled\";\n\nexport interface UploadProgress {\n /** Total bytes to upload */\n totalBytes: number;\n /** Bytes uploaded so far */\n bytesUploaded: number;\n /** Upload percentage (0-100) */\n percentage: number;\n /** Total number of chunks */\n totalChunks: number;\n /** Number of chunks uploaded */\n chunksUploaded: number;\n /** Indices of chunks still pending */\n pendingChunks: number[];\n /** Current upload status */\n status: UploadStatus;\n /** Error message if status is 'error' */\n error?: string;\n /** Upload ID from server (for resume) */\n uploadId?: string;\n /** Document ID after completion */\n documentId?: string;\n}\n\nexport interface ChunkedUploadOptions {\n /** Chunk size in bytes (default: 5MB) */\n chunkSize?: number;\n /** Number of parallel chunk uploads (default: 3) */\n parallelUploads?: number;\n /** Progress callback for real-time updates */\n onProgress?: (progress: UploadProgress) => void;\n /** Called when upload completes successfully */\n onComplete?: (documentId: string) => void;\n /** Called on error */\n onError?: (error: string) => void;\n}\n\nexport interface ChunkedUploadParams {\n /** File to upload */\n file: File;\n /** Document title */\n title: string;\n /** Optional comments/description */\n comments?: string;\n /** Optional tags for categorization */\n tags?: string[];\n /** Optional collection name */\n collection?: string;\n /** Optional document ID (auto-generated if not provided) */\n documentId?: string;\n}\n\nexport interface ResumeUploadParams {\n /** Upload ID from a previous session */\n uploadId: string;\n /** File to resume uploading (must match original) */\n file: File;\n}\n\n/**\n * Hook for managing chunked document uploads with progress tracking\n *\n * Features:\n * - Automatic chunking of large files\n * - Parallel chunk uploads for performance\n * - Progress tracking (bytes, percentage, chunks)\n * - Pause/resume support\n * - Cancel support\n * - Resumability after interruption\n *\n * @param options - Configuration options for the upload\n * @returns Upload state and control methods\n */\nexport const useChunkedUpload = (options: ChunkedUploadOptions = {}) => {\n const {\n chunkSize = DEFAULT_CHUNK_SIZE,\n parallelUploads = DEFAULT_PARALLEL_UPLOADS,\n onProgress,\n onComplete,\n onError,\n } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n const notify = useNotification();\n\n // Upload state\n const [progress, setProgress] = useState<UploadProgress>({\n totalBytes: 0,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks: 0,\n chunksUploaded: 0,\n pendingChunks: [],\n status: \"idle\",\n });\n\n // Refs for managing upload lifecycle\n const abortControllerRef = useRef<AbortController | null>(null);\n const isPausedRef = useRef(false);\n const currentFileRef = useRef<File | null>(null);\n const uploadIdRef = useRef<string | null>(null);\n\n // Update progress and notify callback\n const updateProgress = useCallback(\n (updates: Partial<UploadProgress>) => {\n setProgress((prev) => {\n const next = { ...prev, ...updates };\n onProgress?.(next);\n return next;\n });\n },\n [onProgress]\n );\n\n // Read a chunk from the file as base64\n const readChunkAsBase64 = useCallback(\n async (file: File, chunkIndex: number, chunkSz: number): Promise<string> => {\n const start = chunkIndex * chunkSz;\n const end = Math.min(start + chunkSz, file.size);\n const blob = file.slice(start, end);\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const dataUrl = reader.result as string;\n // Extract base64 from data URL\n const base64 = dataUrl.replace(/^data:[^;]+;base64,/, \"\");\n resolve(base64);\n };\n reader.onerror = () => reject(new Error(\"Failed to read file chunk\"));\n reader.readAsDataURL(blob);\n });\n },\n []\n );\n\n // Upload chunks in parallel with concurrency limit\n const uploadChunks = useCallback(\n async (\n file: File,\n uploadId: string,\n pendingChunks: number[],\n chunkSz: number,\n totalChunks: number\n ): Promise<void> => {\n const remaining = [...pendingChunks];\n let completedCount = totalChunks - remaining.length;\n let bytesUploaded = completedCount * chunkSz;\n\n // Process chunks with limited parallelism\n const uploadNextBatch = async (): Promise<void> => {\n while (remaining.length > 0 && !abortControllerRef.current?.signal.aborted) {\n // Wait if paused\n if (isPausedRef.current) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n continue;\n }\n\n // Take up to parallelUploads chunks\n const batch = remaining.splice(0, parallelUploads);\n\n // Upload batch in parallel\n const results = await Promise.allSettled(\n batch.map(async (chunkIndex) => {\n const content = await readChunkAsBase64(file, chunkIndex, chunkSz);\n await socket.librarian().uploadChunk(uploadId, chunkIndex, content);\n return chunkIndex;\n })\n );\n\n // Process results\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n completedCount++;\n // Calculate actual bytes for this chunk\n const chunkIdx = result.value;\n const chunkStart = chunkIdx * chunkSz;\n const chunkEnd = Math.min(chunkStart + chunkSz, file.size);\n bytesUploaded += chunkEnd - chunkStart;\n\n updateProgress({\n chunksUploaded: completedCount,\n bytesUploaded,\n percentage: Math.round((bytesUploaded / file.size) * 100),\n pendingChunks: [...remaining],\n });\n } else {\n // Re-add failed chunk to retry\n const failedIndex = batch[results.indexOf(result)];\n remaining.push(failedIndex);\n console.warn(`Chunk ${failedIndex} failed, will retry:`, result.reason);\n }\n }\n }\n };\n\n await uploadNextBatch();\n },\n [socket, parallelUploads, readChunkAsBase64, updateProgress]\n );\n\n /**\n * Start a new chunked upload\n */\n const upload = useCallback(\n async (params: ChunkedUploadParams): Promise<string | null> => {\n const { file, title, comments = \"\", tags = [], collection, documentId } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return null;\n }\n\n // Reset state\n abortControllerRef.current = new AbortController();\n isPausedRef.current = false;\n currentFileRef.current = file;\n\n const docId = documentId || createDocId();\n const totalChunks = Math.ceil(file.size / chunkSize);\n const pendingChunks = Array.from({ length: totalChunks }, (_, i) => i);\n\n updateProgress({\n totalBytes: file.size,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks,\n chunksUploaded: 0,\n pendingChunks,\n status: \"preparing\",\n error: undefined,\n uploadId: undefined,\n documentId: undefined,\n });\n\n try {\n // Initialize upload session\n const metadata: ChunkedUploadDocumentMetadata = {\n id: docId,\n time: Math.floor(Date.now() / 1000),\n kind: file.type || \"application/octet-stream\",\n title,\n comments,\n user: \"trustgraph\", // Will be set by server based on auth\n collection: collection || \"default\",\n tags,\n };\n\n const beginResponse = await socket\n .librarian()\n .beginUpload(metadata, file.size, chunkSize);\n\n const uploadId = beginResponse[\"upload-id\"];\n uploadIdRef.current = uploadId;\n\n updateProgress({\n status: \"uploading\",\n uploadId,\n });\n\n // Upload all chunks\n await uploadChunks(file, uploadId, pendingChunks, chunkSize, totalChunks);\n\n // Check if cancelled\n if (abortControllerRef.current?.signal.aborted) {\n return null;\n }\n\n // Complete the upload\n updateProgress({ status: \"completing\" });\n const completeResponse = await socket.librarian().completeUpload(uploadId);\n\n const finalDocId = completeResponse[\"document-id\"];\n\n updateProgress({\n status: \"completed\",\n documentId: finalDocId,\n percentage: 100,\n });\n\n // Invalidate documents cache\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n\n notify.success(`Upload complete: ${title}`);\n onComplete?.(finalDocId);\n\n return finalDocId;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n updateProgress({ status: \"error\", error: errorMsg });\n notify.error(`Upload failed: ${errorMsg}`);\n onError?.(errorMsg);\n return null;\n }\n },\n [\n socket,\n connectionState,\n chunkSize,\n queryClient,\n notify,\n updateProgress,\n uploadChunks,\n onComplete,\n onError,\n ]\n );\n\n /**\n * Resume an interrupted upload\n */\n const resume = useCallback(\n async (params: ResumeUploadParams): Promise<string | null> => {\n const { uploadId, file } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return null;\n }\n\n abortControllerRef.current = new AbortController();\n isPausedRef.current = false;\n currentFileRef.current = file;\n uploadIdRef.current = uploadId;\n\n updateProgress({\n status: \"preparing\",\n uploadId,\n });\n\n try {\n // Get current upload status\n const status = await socket.librarian().getUploadStatus(uploadId);\n\n if (status[\"upload-state\"] === \"completed\") {\n updateProgress({ status: \"completed\" });\n return null;\n }\n\n if (status[\"upload-state\"] === \"expired\") {\n throw new Error(\"Upload session has expired\");\n }\n\n const totalChunks = status[\"total-chunks\"];\n const missingChunks = status[\"missing-chunks\"];\n const bytesReceived = status[\"bytes-received\"];\n const totalBytes = status[\"total-bytes\"];\n\n updateProgress({\n totalBytes,\n bytesUploaded: bytesReceived,\n percentage: Math.round((bytesReceived / totalBytes) * 100),\n totalChunks,\n chunksUploaded: totalChunks - missingChunks.length,\n pendingChunks: missingChunks,\n status: \"uploading\",\n });\n\n // Upload missing chunks\n const effectiveChunkSize = status[\"chunk-size\"] || chunkSize;\n await uploadChunks(file, uploadId, missingChunks, effectiveChunkSize, totalChunks);\n\n // Check if cancelled\n if (abortControllerRef.current?.signal.aborted) {\n return null;\n }\n\n // Complete the upload\n updateProgress({ status: \"completing\" });\n const completeResponse = await socket.librarian().completeUpload(uploadId);\n\n const finalDocId = completeResponse[\"document-id\"];\n\n updateProgress({\n status: \"completed\",\n documentId: finalDocId,\n percentage: 100,\n });\n\n // Invalidate documents cache\n queryClient.invalidateQueries({ queryKey: [\"documents\"] });\n\n notify.success(\"Upload resumed and completed\");\n onComplete?.(finalDocId);\n\n return finalDocId;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n updateProgress({ status: \"error\", error: errorMsg });\n notify.error(`Resume failed: ${errorMsg}`);\n onError?.(errorMsg);\n return null;\n }\n },\n [\n socket,\n connectionState,\n chunkSize,\n queryClient,\n notify,\n updateProgress,\n uploadChunks,\n onComplete,\n onError,\n ]\n );\n\n /**\n * Pause the current upload\n */\n const pause = useCallback(() => {\n if (progress.status === \"uploading\") {\n isPausedRef.current = true;\n updateProgress({ status: \"paused\" });\n }\n }, [progress.status, updateProgress]);\n\n /**\n * Resume a paused upload (not to be confused with resuming an interrupted upload)\n */\n const unpause = useCallback(() => {\n if (progress.status === \"paused\") {\n isPausedRef.current = false;\n updateProgress({ status: \"uploading\" });\n }\n }, [progress.status, updateProgress]);\n\n /**\n * Cancel the current upload\n */\n const cancel = useCallback(async () => {\n abortControllerRef.current?.abort();\n\n if (uploadIdRef.current) {\n try {\n await socket.librarian().abortUpload(uploadIdRef.current);\n } catch (err) {\n console.warn(\"Failed to abort upload on server:\", err);\n }\n }\n\n updateProgress({\n status: \"cancelled\",\n pendingChunks: [],\n });\n\n uploadIdRef.current = null;\n currentFileRef.current = null;\n }, [socket, updateProgress]);\n\n /**\n * Reset the upload state to idle\n */\n const reset = useCallback(() => {\n abortControllerRef.current?.abort();\n uploadIdRef.current = null;\n currentFileRef.current = null;\n isPausedRef.current = false;\n\n setProgress({\n totalBytes: 0,\n bytesUploaded: 0,\n percentage: 0,\n totalChunks: 0,\n chunksUploaded: 0,\n pendingChunks: [],\n status: \"idle\",\n });\n }, []);\n\n return {\n // Current progress state\n progress,\n\n // Control methods\n upload,\n resume,\n pause,\n unpause,\n cancel,\n reset,\n\n // Convenience flags\n isIdle: progress.status === \"idle\",\n isUploading: progress.status === \"uploading\",\n isPaused: progress.status === \"paused\",\n isCompleted: progress.status === \"completed\",\n isError: progress.status === \"error\",\n };\n};\n","import { useState, useCallback, useRef } from \"react\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport { useNotification } from \"../hooks/useNotification\";\n\n// Default chunk size for downloads: 1MB\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024;\n\nexport type DownloadStatus =\n | \"idle\"\n | \"downloading\"\n | \"completed\"\n | \"error\"\n | \"cancelled\";\n\nexport interface DownloadProgress {\n /** Total number of chunks (known after first chunk arrives) */\n totalChunks: number;\n /** Number of chunks received */\n chunksReceived: number;\n /** Download percentage (0-100) */\n percentage: number;\n /** Current download status */\n status: DownloadStatus;\n /** Error message if status is 'error' */\n error?: string;\n /** Document ID being downloaded */\n documentId?: string;\n}\n\nexport interface ChunkedDownloadOptions {\n /** Chunk size in bytes (default: 1MB) */\n chunkSize?: number;\n /** Progress callback for real-time updates */\n onProgress?: (progress: DownloadProgress) => void;\n /** Called when download completes with the Blob */\n onComplete?: (blob: Blob, documentId: string) => void;\n /** Called on error */\n onError?: (error: string) => void;\n}\n\nexport interface DownloadParams {\n /** Document ID to download */\n documentId: string;\n /** Optional MIME type for the resulting Blob (default: application/octet-stream) */\n mimeType?: string;\n /** Optional filename for browser download (if not provided, returns Blob only) */\n filename?: string;\n}\n\n/**\n * Decode base64 string to Uint8Array\n */\nconst base64ToUint8Array = (base64: string): Uint8Array => {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n};\n\n/**\n * Trigger browser download of a Blob\n */\nconst triggerBrowserDownload = (blob: Blob, filename: string): void => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n};\n\n/**\n * Hook for managing streamed document downloads with progress tracking\n *\n * Features:\n * - Streams large documents via WebSocket streaming response\n * - Progress tracking (chunks received, percentage)\n * - Cancel support\n * - Returns Blob or triggers browser download\n *\n * @param options - Configuration options for the download\n * @returns Download state and control methods\n */\nexport const useChunkedDownload = (options: ChunkedDownloadOptions = {}) => {\n const {\n chunkSize = DEFAULT_CHUNK_SIZE,\n onProgress,\n onComplete,\n onError,\n } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n const notify = useNotification();\n\n // Download state\n const [progress, setProgress] = useState<DownloadProgress>({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"idle\",\n });\n\n // Refs for managing download lifecycle\n const cancelledRef = useRef(false);\n const chunksRef = useRef<Map<number, Uint8Array>>(new Map());\n\n // Update progress and notify callback\n const updateProgress = useCallback(\n (updates: Partial<DownloadProgress>) => {\n setProgress((prev) => {\n const next = { ...prev, ...updates };\n onProgress?.(next);\n return next;\n });\n },\n [onProgress]\n );\n\n /**\n * Download a document via streaming and return as Blob\n */\n const download = useCallback(\n (params: DownloadParams): Promise<Blob | null> => {\n const { documentId, mimeType = \"application/octet-stream\", filename } = params;\n\n // Validate connection\n if (\n connectionState?.status !== \"authenticated\" &&\n connectionState?.status !== \"unauthenticated\"\n ) {\n const error = \"Not connected to server\";\n updateProgress({ status: \"error\", error });\n onError?.(error);\n return Promise.resolve(null);\n }\n\n // Reset state\n cancelledRef.current = false;\n chunksRef.current = new Map();\n\n updateProgress({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"downloading\",\n error: undefined,\n documentId,\n });\n\n return new Promise<Blob | null>((resolve) => {\n const onChunk = (\n content: string,\n chunkIndex: number,\n totalChunks: number,\n complete: boolean\n ) => {\n // Check for cancellation\n if (cancelledRef.current) {\n return;\n }\n\n // Store chunk\n const chunkData = base64ToUint8Array(content);\n chunksRef.current.set(chunkIndex, chunkData);\n\n const chunksReceived = chunksRef.current.size;\n const percentage = totalChunks > 0\n ? Math.round((chunksReceived / totalChunks) * 100)\n : 0;\n\n updateProgress({\n totalChunks,\n chunksReceived,\n percentage,\n });\n\n // If complete, reassemble and return\n if (complete) {\n if (cancelledRef.current) {\n resolve(null);\n return;\n }\n\n // Reassemble chunks in order\n const orderedChunks: Uint8Array[] = [];\n for (let i = 0; i < totalChunks; i++) {\n const chunk = chunksRef.current.get(i);\n if (chunk) {\n orderedChunks.push(chunk);\n }\n }\n\n const blob = new Blob(orderedChunks as BlobPart[], { type: mimeType });\n\n updateProgress({\n status: \"completed\",\n percentage: 100,\n chunksReceived: totalChunks,\n });\n\n // Trigger browser download if filename provided\n if (filename) {\n triggerBrowserDownload(blob, filename);\n }\n\n notify.success(\"Download complete\");\n onComplete?.(blob, documentId);\n\n resolve(blob);\n }\n };\n\n const onStreamError = (error: string) => {\n if (cancelledRef.current) {\n return;\n }\n\n updateProgress({ status: \"error\", error });\n notify.error(`Download failed: ${error}`);\n onError?.(error);\n resolve(null);\n };\n\n // Start streaming download\n socket.librarian().streamDocument(\n documentId,\n onChunk,\n onStreamError,\n chunkSize\n );\n });\n },\n [socket, connectionState, chunkSize, notify, updateProgress, onComplete, onError]\n );\n\n /**\n * Cancel the current download\n */\n const cancel = useCallback(() => {\n cancelledRef.current = true;\n chunksRef.current = new Map();\n\n updateProgress({\n status: \"cancelled\",\n });\n }, [updateProgress]);\n\n /**\n * Reset the download state to idle\n */\n const reset = useCallback(() => {\n cancelledRef.current = true;\n chunksRef.current = new Map();\n\n setProgress({\n totalChunks: 0,\n chunksReceived: 0,\n percentage: 0,\n status: \"idle\",\n });\n }, []);\n\n return {\n // Current progress state\n progress,\n\n // Control methods\n download,\n cancel,\n reset,\n\n // Convenience flags\n isIdle: progress.status === \"idle\",\n isDownloading: progress.status === \"downloading\",\n isCompleted: progress.status === \"completed\",\n isError: progress.status === \"error\",\n };\n};\n","/**\n * Hook for fetching document metadata from the librarian service\n */\n\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useSocket, useConnectionState } from \"@trustgraph/react-provider\";\nimport type { DocumentMetadata } from \"@trustgraph/client\";\n\nexport interface UseDocumentMetadataOptions {\n /** Document ID to fetch */\n documentId?: string;\n /** Whether to enable the query (default: true if documentId is provided) */\n enabled?: boolean;\n}\n\nexport interface UseDocumentMetadataResult {\n /** Document metadata if loaded */\n metadata: DocumentMetadata | null;\n /** Whether the query is loading */\n isLoading: boolean;\n /** Whether there was an error */\n isError: boolean;\n /** Error object if any */\n error: Error | null;\n /** Refetch the metadata */\n refetch: () => void;\n}\n\n/**\n * Hook for fetching a single document's metadata\n */\nexport const useDocumentMetadata = (\n options: UseDocumentMetadataOptions = {}\n): UseDocumentMetadataResult => {\n const { documentId, enabled } = options;\n\n const socket = useSocket();\n const connectionState = useConnectionState();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const query = useQuery({\n queryKey: [\"document-metadata\", documentId],\n enabled: isSocketReady && !!documentId && (enabled !== false),\n queryFn: async () => {\n if (!documentId) return null;\n return socket.librarian().getDocumentMetadata(documentId);\n },\n });\n\n return {\n metadata: query.data ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n\n/**\n * Hook for fetching multiple documents' metadata\n */\nexport const useDocumentsMetadata = (documentIds: string[] = []) => {\n const socket = useSocket();\n const connectionState = useConnectionState();\n const queryClient = useQueryClient();\n\n const isSocketReady =\n connectionState?.status === \"authenticated\" ||\n connectionState?.status === \"unauthenticated\";\n\n const query = useQuery({\n queryKey: [\"documents-metadata\", documentIds],\n enabled: isSocketReady && documentIds.length > 0,\n queryFn: async () => {\n const results = await Promise.all(\n documentIds.map(async (id) => {\n // Check cache first\n const cached = queryClient.getQueryData<DocumentMetadata | null>([\n \"document-metadata\",\n id,\n ]);\n if (cached !== undefined) {\n return { id, metadata: cached };\n }\n\n // Fetch and cache\n const metadata = await socket.librarian().getDocumentMetadata(id);\n queryClient.setQueryData([\"document-metadata\", id], metadata);\n return { id, metadata };\n })\n );\n\n return results.reduce(\n (acc, { id, metadata }) => {\n acc[id] = metadata;\n return acc;\n },\n {} as Record<string, DocumentMetadata | null>\n );\n },\n });\n\n return {\n metadataMap: query.data ?? {},\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n};\n"],"names":["_jsx","RDFS_LABEL","uuidv4","getTermValue","isIri","RDF_TYPE","DEFAULT_CHUNK_SIZE"],"mappings":"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"}