atmx-react 0.147.2 → 0.147.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.
- package/README.md +23 -0
- package/dist/index.js +6 -2
- package/dist/index.mjs +6 -2
- package/package.json +2 -2
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ATMX React startup
|
|
2
|
+
|
|
3
|
+
Mount contract-dependent components inside `AxiomProvider`. The provider mounts
|
|
4
|
+
its children only after the Wasm runtime accepts every configured contract.
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
import { AxiomProvider } from "atmx-react";
|
|
8
|
+
import { AxiomDefaultConfig } from "./generated/sdk";
|
|
9
|
+
|
|
10
|
+
export function App() {
|
|
11
|
+
return (
|
|
12
|
+
<AxiomProvider config={AxiomDefaultConfig} fallback={<p>Starting…</p>}>
|
|
13
|
+
<Application />
|
|
14
|
+
</AxiomProvider>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Failed initialization displays an error and leaves contract-dependent children
|
|
20
|
+
unmounted. A returned `{ ok: false }` is a failure even if initialization did not
|
|
21
|
+
throw. Signed contracts need a complete, nonblank `signature` and `publicKey`
|
|
22
|
+
pair; invalid or partial proof cannot fall back to unsigned startup. Omit both
|
|
23
|
+
only when explicitly loading a local unsigned contract.
|
package/dist/index.js
CHANGED
|
@@ -85,7 +85,12 @@ var AxiomProvider = ({
|
|
|
85
85
|
if (!finalConfig.contracts || Object.keys(finalConfig.contracts).length === 0) {
|
|
86
86
|
throw new Error("No contracts defined in ATMX config.");
|
|
87
87
|
}
|
|
88
|
-
await (0, import_atmx_web.initWasm)(finalConfig);
|
|
88
|
+
const result = await (0, import_atmx_web.initWasm)(finalConfig);
|
|
89
|
+
if (!result.ok) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
result.error?.message || "ATMX runtime rejected contract initialization."
|
|
92
|
+
);
|
|
93
|
+
}
|
|
89
94
|
console.log(`\u269B\uFE0F ATMX-React: Provider ready.`);
|
|
90
95
|
setState({ isReady: true, error: null, config: finalConfig });
|
|
91
96
|
} catch (err) {
|
|
@@ -688,4 +693,3 @@ function useAxiomMutation(mutationFn) {
|
|
|
688
693
|
useAxiomMutation,
|
|
689
694
|
useAxiomQuery
|
|
690
695
|
});
|
|
691
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -61,7 +61,12 @@ var AxiomProvider = ({
|
|
|
61
61
|
if (!finalConfig.contracts || Object.keys(finalConfig.contracts).length === 0) {
|
|
62
62
|
throw new Error("No contracts defined in ATMX config.");
|
|
63
63
|
}
|
|
64
|
-
await initWasm(finalConfig);
|
|
64
|
+
const result = await initWasm(finalConfig);
|
|
65
|
+
if (!result.ok) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
result.error?.message || "ATMX runtime rejected contract initialization."
|
|
68
|
+
);
|
|
69
|
+
}
|
|
65
70
|
console.log(`\u269B\uFE0F ATMX-React: Provider ready.`);
|
|
66
71
|
setState({ isReady: true, error: null, config: finalConfig });
|
|
67
72
|
} catch (err) {
|
|
@@ -663,4 +668,3 @@ export {
|
|
|
663
668
|
useAxiomMutation,
|
|
664
669
|
useAxiomQuery
|
|
665
670
|
};
|
|
666
|
-
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"files": [
|
|
4
4
|
"dist"
|
|
5
5
|
],
|
|
6
|
-
"version": "0.147.
|
|
6
|
+
"version": "0.147.3",
|
|
7
7
|
"description": "React bindings for ATMX and Axiom Core WASM runtime",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"atmx-web": "^0.147.
|
|
26
|
+
"atmx-web": "^0.147.4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/react": "^19.0.0",
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["// FILE: src/index.ts\nexport { setAuthToken, clearAuthToken } from \"./utils/core-bridge\";\n// 1. Context & Provider (Global Lifecycle)\nexport { AxiomProvider, AxiomContext } from \"./context/AxiomProvider\";\n\n// 2. The Context Stack (InheritedWidget Pattern)\n// This allows nested components to reach up and grab parent $data\nexport {\n AxiomDataContext,\n useAxiomContext,\n useAxiomData,\n} from \"./context/AxiomDataContext\";\n\n// 3. High-Level Declarative Components\n// These wrap the hooks to give a \"Zero-JS\" feel to React\nexport { AxQuery } from \"./components/AxQuery\";\nexport { AxWhen } from \"./components/AxWhen\";\nexport { AxTrigger } from \"./components/AxTrigger\";\n\n// 4. Core Hooks\n// Used primarily by the generated SDK, but available for custom logic\nexport { useAxiom } from \"./hooks/useAxiom\";\nexport { useAxiomQuery } from \"./hooks/useAxiomQuery\";\nexport { useAxiomMutation } from \"./hooks/useAxiomMutation\";\n\n// 5. Shared State & Registry\n// Manages deduplication and syncing across components\nexport { axiomQueryManager } from \"./core/QueryManager\";\n\n// 6. Core Types\n// Essential for type-safe development and generated SDKs\nexport type {\n AtmxConfig,\n AxiomError,\n AxiomResponse,\n AxiomQueryDef,\n AxiomState,\n AxiomStatus,\n} from \"./utils/core-bridge\";\n","import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n sendStreamMessage as wasmSendStreamMessage,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n wasmSendStreamMessage,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n public currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n // Active queries have no generated query-parameter metadata yet. GET\n // routes preserve their historical remaining-args-as-query behaviour.\n queryParams: [],\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport {\n AxiomQueryDef,\n wasmSendStreamMessage,\n pendingRequests,\n} from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n\n public connect(def: AxiomQueryDef<any>) {\n const query = this.getQuery(def);\n query.fetch();\n }\n\n // ✨ FIX: Properly severe the WASM stream binding!\n public disconnect(def: AxiomQueryDef<any>) {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n const query = this.queries.get(key);\n if (query) {\n if (query.currentReqId) {\n // This stops the WASM engine from routing incoming messages to React\n pendingRequests.delete(query.currentReqId);\n }\n this.queries.delete(key);\n console.log(`🔌 ATMX-React: Disconnected Stream [${def.name}]`);\n }\n }\n\n public send(def: AxiomQueryDef<any>, payload: any) {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n const query = this.queries.get(key);\n if (query && query.currentReqId) {\n wasmSendStreamMessage(query.currentReqId, payload);\n } else {\n console.warn(\n `ATMX-React: Cannot send message, stream not active for ${def.name}`,\n );\n }\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: atmx-react/src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nfunction extractFieldError(error: any, fieldName: string): string | null {\n if (error?.code !== \"ValidationError\" || !error?.details) return null;\n const lines = error.details.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(fieldName + \":\"))\n return line.substring(fieldName.length + 1).trim();\n }\n return null;\n}\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n (args: A, options?: { headers?: Record<string, string> }): Promise<T> => {\n return new Promise((resolve, reject) => {\n if (!isReady || !config) return reject(new Error(\"ATMX not ready\"));\n\n const rawDef = mutationFn(args);\n const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\n\n const reqId = getNextReqId();\n\n if (isMounted.current) {\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n }\n\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n // Hooks construct this route from generated metadata rather than\n // the router registry. Mutations currently do not expose declared\n // query fields, so use an explicit empty set instead of leaving the\n // shared Route contract partially constructed.\n queryParams: [],\n };\n\n // ✨ FIX: Extract remainingArgs which strips out path parameters (like item_id)!\n const { path, remainingArgs } = buildRequestPath(\n syntheticRoute,\n rawDef.args,\n );\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0,\n payloadObj: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(remainingArgs).length > 0) {\n // ✨ FIX: Use remainingArgs instead of rawDef.args so we don't send path/query params in the body!\n payloadObj = remainingArgs;\n }\n\n if (payloadObj !== null) {\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj)) {\n if (v !== undefined && v !== null) params.append(k, String(v));\n }\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n if (config.debug) {\n console.groupCollapsed(\n `%c➔ WASM MUTATE [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", rawDef.namespace);\n console.log(\"Endpoint ID:\", rawDef.endpointId);\n console.log(\"Path:\", path);\n console.log(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (config.debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n if (isMounted.current)\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(response.error);\n return;\n }\n\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n const decoded = rawDef.decoder(response.data);\n\n if (isMounted.current)\n setState({\n status: \"success\",\n data: decoded,\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n resolve(decoded);\n } catch (e) {\n const err = {\n message: \"Decoding failed\",\n details: String(e),\n } as any;\n if (isMounted.current)\n setState({\n status: \"error\",\n error: err,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(err);\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\n });\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n // Preserve the render-prop component's established loading API while\n // exposing the more precise `isMutating` name to hook consumers.\n isLoading: state.isMutating,\n isMutating: state.isMutating,\n error: state.error,\n getFieldError: (fieldName: string) =>\n extractFieldError(state.error, fieldName),\n };\n}\n"],"mappings":"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","names":["import_atmx_web","import_react","import_react","import_react","wasmSendStreamMessage","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/core-bridge.ts","../src/context/AxiomProvider.tsx","../src/context/AxiomDataContext.tsx","../src/hooks/useAxiomQuery.ts","../src/hooks/useAxiom.ts","../src/core/ActiveQuery.ts","../src/core/QueryManager.ts","../src/components/AxQuery.tsx","../src/components/AxWhen.tsx","../src/components/AxTrigger.tsx","../src/hooks/useAxiomMutation.ts"],"sourcesContent":["import {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n setAuthToken,\n clearAuthToken,\n sendStreamMessage as wasmSendStreamMessage,\n} from \"atmx-web\";\nimport { resolveRoute, Route, buildRequestPath } from \"atmx-web\";\nimport { pendingRequests } from \"atmx-web\";\nimport { AtmxConfig, AxiomResponse, AxiomError, EventType } from \"atmx-web\";\n\nlet globalReqCounter = 0;\nexport const getNextReqId = () => ++globalReqCounter;\nexport interface AxiomQueryDef<T> {\n namespace: string;\n name: string;\n endpointId: number;\n method: string;\n path: string;\n payload?: any;\n decoder: (json: any) => T;\n serializer?: (payload: any) => any;\n args: Record<string, any>;\n isStream?: boolean;\n headers?: Record<string, string>; // ✨ NEW\n}\n\nexport type AxiomStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\nexport interface AxiomState<T> {\n status: AxiomStatus;\n data: T | null;\n error: AxiomError | null;\n isFetching: boolean;\n isMutating: boolean;\n source: \"cache\" | \"network\" | null;\n}\n\nexport {\n initWasm,\n wasmEngine,\n allocBytes,\n allocString,\n resolveRoute,\n buildRequestPath,\n pendingRequests,\n setAuthToken,\n clearAuthToken,\n wasmSendStreamMessage,\n};\n\nexport type { AtmxConfig, AxiomResponse, AxiomError, EventType, Route };\n","// FILE: src/context/AxiomProvider.tsx\nimport React, {\n createContext,\n useEffect,\n useState,\n useRef,\n ReactNode,\n} from \"react\";\nimport { initWasm, AtmxConfig } from \"../utils/core-bridge\";\n\nexport interface AxiomContextState {\n isReady: boolean;\n error: Error | null;\n config: AtmxConfig | null;\n}\n\nexport const AxiomContext = createContext<AxiomContextState | undefined>(\n undefined,\n);\n\nexport interface AxiomProviderProps {\n configUrl?: string;\n config?: AtmxConfig;\n children: ReactNode;\n fallback?: ReactNode;\n}\n\nexport const AxiomProvider: React.FC<AxiomProviderProps> = ({\n configUrl,\n config,\n children,\n fallback,\n}) => {\n const [state, setState] = useState<AxiomContextState>({\n isReady: false,\n error: null,\n config: null,\n });\n\n const initStarted = useRef(false);\n\n useEffect(() => {\n if (initStarted.current) return;\n initStarted.current = true;\n\n const bootSequence = async () => {\n try {\n let finalConfig: AtmxConfig;\n if (configUrl) {\n const res = await fetch(configUrl);\n if (!res.ok)\n throw new Error(`Failed to load config from ${configUrl}`);\n finalConfig = await res.json();\n } else if (config) {\n finalConfig = config;\n } else {\n throw new Error(\n \"AxiomProvider requires either 'configUrl' or 'config' prop.\",\n );\n }\n\n if (\n !finalConfig.contracts ||\n Object.keys(finalConfig.contracts).length === 0\n ) {\n throw new Error(\"No contracts defined in ATMX config.\");\n }\n\n // 1. Initialize Wasm Engine (Handles ALL contracts natively!)\n await initWasm(finalConfig);\n\n console.log(`⚛️ ATMX-React: Provider ready.`);\n setState({ isReady: true, error: null, config: finalConfig });\n } catch (err: any) {\n console.error(\"ATMX Provider Boot Error:\", err);\n setState({ isReady: false, error: err, config: null });\n }\n };\n\n bootSequence();\n }, [configUrl, config]);\n\n if (state.error)\n return (\n <div style={{ color: \"red\", padding: \"20px\", fontFamily: \"monospace\" }}>\n <strong>ATMX Initialization Failed:</strong>\n <br />\n {state.error.message}\n </div>\n );\n\n if (!state.isReady) return <>{fallback || null}</>;\n\n return (\n <AxiomContext.Provider value={state}>{children}</AxiomContext.Provider>\n );\n};\n","// FILE: src/context/AxiomDataContext.tsx\nimport { createContext, useContext } from \"react\";\nimport { AxiomState } from \"../utils/core-bridge\";\n\nexport const AxiomDataContext = createContext<AxiomState<any> | null>(null);\n\n/**\n * Throwing version: Use this when you absolutely expect to be inside a scope.\n */\nexport function useAxiomContext<T>(): AxiomState<T> {\n const context = useContext(AxiomDataContext);\n if (!context) {\n throw new Error(\n \"useAxiomContext must be used within an <AxQuery> or <AxMutate> scope.\",\n );\n }\n return context as AxiomState<T>;\n}\n\n/**\n * Safe version: Returns T or an empty object.\n * Used for Context Inheritance ($data access).\n */\nexport function useAxiomData<T>(): T {\n const context = useContext(AxiomDataContext);\n return (context?.data || {}) as T;\n}\n","// FILE: src/hooks/useAxiomQuery.ts\nimport { useEffect, useSyncExternalStore, useCallback } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport { AxiomQueryDef } from \"../utils/core-bridge\";\nimport { axiomQueryManager } from \"../core/QueryManager\";\n\nexport function useAxiomQuery<T>(\n queryDef: AxiomQueryDef<T>,\n options: { enabled?: boolean } = {},\n) {\n const { isReady, config } = useAxiom();\n const { enabled = true } = options;\n\n const activeQuery = axiomQueryManager.getQuery(queryDef);\n\n const state = useSyncExternalStore(\n useCallback(\n (onStoreChange) => activeQuery.subscribe(onStoreChange),\n [activeQuery],\n ),\n () => activeQuery.getState(),\n () => activeQuery.getState(),\n );\n\n useEffect(() => {\n if (!isReady || !enabled) return;\n if (state.status === \"idle\") {\n activeQuery.fetch(false, config?.debug);\n }\n }, [isReady, enabled, activeQuery, state.status, config?.debug]);\n\n return {\n data: state.data,\n isLoading: state.status === \"loading\",\n isFetching: state.isFetching,\n source: state.source,\n error: state.error,\n state: state, // Export raw state for <AxWhen>\n refetch: () => activeQuery.fetch(true, config?.debug),\n };\n}\n","// src/hooks/useAxiom.ts\nimport { useContext } from 'react';\nimport { AxiomContext } from '../context/AxiomProvider';\n\nexport const useAxiom = () => {\n const context = useContext(AxiomContext);\n\n if (context === undefined) {\n throw new Error(\"useAxiom must be used within an <AxiomProvider>. Did you forget to wrap your app?\");\n }\n\n return context;\n};","// FILE: src/core/ActiveQuery.ts\nimport {\n AxiomState,\n AxiomQueryDef,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n getNextReqId,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\ntype Listener<T> = (state: AxiomState<T>) => void;\n\nexport class ActiveQuery<T> {\n public queryKey: string;\n public def: AxiomQueryDef<T>;\n private state: AxiomState<T>;\n private listeners: Set<Listener<T>> = new Set();\n public currentReqId: number | null = null;\n\n constructor(queryKey: string, def: AxiomQueryDef<T>) {\n this.queryKey = queryKey;\n this.def = def;\n this.state = {\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n };\n }\n\n public getState(): AxiomState<T> {\n return this.state;\n }\n\n public subscribe(listener: Listener<T>): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private updateState(partial: Partial<AxiomState<T>>) {\n this.state = { ...this.state, ...partial };\n this.listeners.forEach((l) => l(this.state));\n }\n\n public fetch(force: boolean = false, debug: boolean = false) {\n if (this.state.isFetching && !force) return;\n\n this.updateState({\n isFetching: true,\n status: this.state.data ? \"success\" : \"loading\",\n });\n\n const reqId = getNextReqId();\n this.currentReqId = reqId;\n\n // FIX: Bypass the dictionary lookup. We already have the metadata from the generated SDK!\n const syntheticRoute: Route = {\n id: this.def.endpointId,\n namespace: this.def.namespace,\n name: this.def.name || \"unknown\",\n method: this.def.method,\n pathTemplate: this.def.path,\n isStream: !!this.def.isStream,\n // Active queries have no generated query-parameter metadata yet. GET\n // routes preserve their historical remaining-args-as-query behaviour.\n queryParams: [],\n };\n\n // Auto-interpolate {path_params} and ?query_params\n const { path } = buildRequestPath(syntheticRoute, this.def.args);\n\n if (debug) {\n console.groupCollapsed(\n `%c➔ WASM QUERY [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", this.def.namespace);\n console.log(\"Endpoint ID:\", this.def.endpointId);\n console.log(\"Path:\", path);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!this.def.isStream,\n onResponse: (response) => {\n if (this.currentReqId !== reqId) return;\n\n if (debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n this.updateState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n });\n return;\n }\n\n if (response.data) {\n try {\n const decodedData = this.def.decoder(response.data);\n let source: \"cache\" | \"network\" = \"network\";\n let isFetching = false;\n\n if (response.eventType === 2) {\n source = \"cache\";\n isFetching = false;\n } else if (response.eventType === 3) {\n source = \"cache\";\n isFetching = true;\n } else if (response.eventType === 1) {\n source = \"network\";\n isFetching = false;\n }\n\n this.updateState({\n status: \"success\",\n data: decodedData,\n error: null,\n isFetching,\n source,\n });\n } catch (e) {\n this.updateState({\n status: \"error\",\n error: { message: \"Decoding failed\", details: String(e) } as any,\n isFetching: false,\n });\n }\n }\n },\n onComplete: () => {\n if (this.currentReqId !== reqId) return;\n this.updateState({ isFetching: false });\n },\n });\n\n const isFormUrlEncoded = Object.entries(this.def.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0;\n if (this.def.payload !== undefined && this.def.payload !== null) {\n const safePayload = this.def.serializer\n ? this.def.serializer(this.def.payload)\n : this.def.payload;\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof safePayload === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(safePayload))\n params.append(k, String(v));\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(safePayload));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n const nsStr = allocString(this.def.namespace);\n const mStr = allocString(this.def.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n this.def.headers ? JSON.stringify(this.def.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n this.def.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n }\n}\n","// FILE: src/core/QueryManager.ts\nimport { ActiveQuery } from \"./ActiveQuery\";\nimport {\n AxiomQueryDef,\n wasmSendStreamMessage,\n pendingRequests,\n} from \"../utils/core-bridge\";\n\nclass QueryManager {\n private queries = new Map<string, ActiveQuery<any>>();\n\n private buildKey(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ): string {\n return `${namespace}:${endpointId}:${JSON.stringify(args)}`;\n }\n\n public getQuery<T>(def: AxiomQueryDef<T>): ActiveQuery<T> {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n\n if (this.queries.has(key)) {\n return this.queries.get(key) as ActiveQuery<T>;\n }\n\n const newQuery = new ActiveQuery<T>(key, def);\n this.queries.set(key, newQuery);\n return newQuery;\n }\n\n public invalidate(\n namespace: string,\n endpointId: number,\n args: Record<string, any>,\n ) {\n const key = this.buildKey(namespace, endpointId, args);\n const query = this.queries.get(key);\n if (query) query.fetch(true);\n }\n\n public connect(def: AxiomQueryDef<any>) {\n const query = this.getQuery(def);\n query.fetch();\n }\n\n // ✨ FIX: Properly severe the WASM stream binding!\n public disconnect(def: AxiomQueryDef<any>) {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n const query = this.queries.get(key);\n if (query) {\n if (query.currentReqId) {\n // This stops the WASM engine from routing incoming messages to React\n pendingRequests.delete(query.currentReqId);\n }\n this.queries.delete(key);\n console.log(`🔌 ATMX-React: Disconnected Stream [${def.name}]`);\n }\n }\n\n public send(def: AxiomQueryDef<any>, payload: any) {\n const key = this.buildKey(def.namespace, def.endpointId, def.args);\n const query = this.queries.get(key);\n if (query && query.currentReqId) {\n wasmSendStreamMessage(query.currentReqId, payload);\n } else {\n console.warn(\n `ATMX-React: Cannot send message, stream not active for ${def.name}`,\n );\n }\n }\n}\n\nexport const axiomQueryManager = new QueryManager();\n","// FILE: src/components/AxQuery.tsx\nimport { ReactNode } from \"react\";\nimport { AxiomQueryDef, AxiomState } from \"../utils/core-bridge\";\nimport { useAxiomQuery } from \"../hooks/useAxiomQuery\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\nexport interface AxQueryProps<T> {\n call: AxiomQueryDef<T>;\n children:\n | ReactNode\n | ((props: {\n data: T | null;\n state: AxiomState<T>;\n refetch: () => void;\n }) => ReactNode);\n enabled?: boolean;\n}\n\nexport function AxQuery<T>({\n call,\n children,\n enabled = true,\n}: AxQueryProps<T>) {\n const result = useAxiomQuery<T>(call, { enabled });\n\n const content =\n typeof children === \"function\"\n ? children({\n data: result.data,\n state: result.state,\n refetch: result.refetch,\n })\n : children;\n\n // Provide the state downwards so nested components (or AxWhen) can inherit it!\n return (\n <AxiomDataContext.Provider value={result.state}>\n {content}\n </AxiomDataContext.Provider>\n );\n}\n","// FILE: src/components/AxWhen.tsx\nimport { ReactNode, useContext } from \"react\";\nimport { AxiomDataContext } from \"../context/AxiomDataContext\";\n\ninterface AxWhenProps {\n /** Explicit state object from a hook (e.g. sdk.users.useGetUser) */\n value?: {\n status: string;\n data?: any;\n isFetching?: boolean;\n isMutating?: boolean;\n };\n /** Comma-separated states: \"idle, loading, mutating, data, success, error\" */\n is: string;\n children: ReactNode;\n}\n\nexport function AxWhen({ value, is, children }: AxWhenProps) {\n // Use useContext directly instead of the throwing hook useAxiomContext\n const context = useContext(AxiomDataContext);\n const stateObj = value || context;\n\n // If no value is provided and we aren't inside a scope, render nothing\n if (!stateObj) return null;\n\n const expectedStates = is.split(\",\").map((s) => s.trim().toLowerCase());\n\n let currentState = \"idle\";\n\n if (stateObj.isMutating) {\n currentState = \"mutating\";\n } else if (stateObj.status === \"loading\") {\n currentState = \"loading\";\n } else if (stateObj.status === \"error\") {\n currentState = \"error\";\n } else if (stateObj.status === \"success\" || stateObj.data) {\n currentState = \"data\";\n }\n\n // Handle 'success' as a distinct semantic state for Mutations\n if (\n expectedStates.includes(\"success\") &&\n stateObj.status === \"success\" &&\n !stateObj.isMutating\n ) {\n currentState = \"success\";\n }\n\n if (expectedStates.includes(currentState)) {\n return <>{children}</>;\n }\n\n return null;\n}\n","// src/components/AxTrigger.tsx\nimport { useEffect, useRef, ReactNode } from 'react';\n\ninterface AxTriggerProps {\n onTrigger: () => void;\n once?: boolean;\n children?: ReactNode;\n}\n\nexport const AxTrigger: React.FC<AxTriggerProps> = ({ onTrigger, once = true, children }) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n if (once && hasTriggered.current) return;\n\n onTrigger();\n hasTriggered.current = true;\n\n if (once) observer.unobserve(entry.target);\n }\n });\n }, { threshold: 0.1 });\n\n if (elementRef.current) {\n observer.observe(elementRef.current);\n }\n\n return () => observer.disconnect();\n }, [onTrigger, once]);\n\n return <div ref={elementRef}>{children}</div>;\n};","// FILE: atmx-react/src/hooks/useAxiomMutation.ts\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useAxiom } from \"./useAxiom\";\nimport {\n AxiomQueryDef,\n AxiomState,\n getNextReqId,\n wasmEngine,\n allocString,\n allocBytes,\n pendingRequests,\n buildRequestPath,\n Route,\n} from \"../utils/core-bridge\";\n\nfunction extractFieldError(error: any, fieldName: string): string | null {\n if (error?.code !== \"ValidationError\" || !error?.details) return null;\n const lines = error.details.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(fieldName + \":\"))\n return line.substring(fieldName.length + 1).trim();\n }\n return null;\n}\n\nexport function useAxiomMutation<T, A>(\n mutationFn: (args: A) => AxiomQueryDef<T>,\n) {\n const { isReady, config } = useAxiom();\n const [state, setState] = useState<AxiomState<T>>({\n status: \"idle\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: false,\n source: null,\n });\n const isMounted = useRef(true);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const execute = useCallback(\n (args: A, options?: { headers?: Record<string, string> }): Promise<T> => {\n return new Promise((resolve, reject) => {\n if (!isReady || !config) return reject(new Error(\"ATMX not ready\"));\n\n const rawDef = mutationFn(args);\n const mergedHeaders = {\n ...(rawDef.headers || {}),\n ...(options?.headers || {}),\n };\n rawDef.headers =\n Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;\n\n const reqId = getNextReqId();\n\n if (isMounted.current) {\n setState({\n status: \"loading\",\n data: null,\n error: null,\n isFetching: false,\n isMutating: true,\n source: null,\n });\n }\n\n const syntheticRoute: Route = {\n id: rawDef.endpointId,\n namespace: rawDef.namespace,\n name: rawDef.name || \"unknown\",\n method: rawDef.method,\n pathTemplate: rawDef.path,\n isStream: !!rawDef.isStream,\n // Hooks construct this route from generated metadata rather than\n // the router registry. Mutations currently do not expose declared\n // query fields, so use an explicit empty set instead of leaving the\n // shared Route contract partially constructed.\n queryParams: [],\n };\n\n // ✨ FIX: Extract remainingArgs which strips out path parameters (like item_id)!\n const { path, remainingArgs } = buildRequestPath(\n syntheticRoute,\n rawDef.args,\n );\n\n const isFormUrlEncoded = Object.entries(rawDef.headers || {}).some(\n ([k, v]) =>\n k.toLowerCase() === \"content-type\" &&\n v.includes(\"application/x-www-form-urlencoded\"),\n );\n\n let payloadPtr = 0,\n payloadLen = 0,\n payloadObj: any = null;\n\n if (rawDef.payload !== undefined && rawDef.payload !== null) {\n payloadObj = rawDef.serializer\n ? rawDef.serializer(rawDef.payload)\n : rawDef.payload;\n } else if (Object.keys(remainingArgs).length > 0) {\n // ✨ FIX: Use remainingArgs instead of rawDef.args so we don't send path/query params in the body!\n payloadObj = remainingArgs;\n }\n\n if (payloadObj !== null) {\n let payloadBytes: Uint8Array;\n\n if (isFormUrlEncoded && typeof payloadObj === \"object\") {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(payloadObj)) {\n if (v !== undefined && v !== null) params.append(k, String(v));\n }\n payloadBytes = new TextEncoder().encode(params.toString());\n } else {\n payloadBytes = new TextEncoder().encode(JSON.stringify(payloadObj));\n }\n\n payloadPtr = allocBytes(payloadBytes);\n payloadLen = payloadBytes.length;\n }\n\n if (config.debug) {\n console.groupCollapsed(\n `%c➔ WASM MUTATE [#${reqId}]`,\n `color: #7c3aed; font-weight: bold;`,\n );\n console.log(\"Namespace:\", rawDef.namespace);\n console.log(\"Endpoint ID:\", rawDef.endpointId);\n console.log(\"Path:\", path);\n console.log(\"Headers:\", rawDef.headers);\n console.log(\"Payload:\", payloadObj);\n console.groupEnd();\n }\n\n pendingRequests.set(reqId, {\n isStream: !!rawDef.isStream,\n onResponse: (response) => {\n if (config.debug) {\n const evtName =\n response.eventType === 1\n ? \"NetworkSuccess\"\n : response.eventType === 2\n ? \"CacheHit\"\n : response.eventType === 3\n ? \"CacheHitAndFetching\"\n : response.eventType === 4\n ? \"Error\"\n : \"Complete\";\n console.groupCollapsed(\n `%c← WASM RESP [#${reqId}]`,\n `color: #059669; font-weight: bold;`,\n );\n console.log(\"Event Type:\", evtName);\n if (response.data) console.log(\"Data:\", response.data);\n if (response.error) console.log(\"Error:\", response.error);\n console.groupEnd();\n }\n\n if (response.eventType === 4) {\n if (isMounted.current)\n setState({\n status: \"error\",\n error: response.error || null,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(response.error);\n return;\n }\n\n if (response.data) {\n try {\n let source: \"cache\" | \"network\" = \"network\";\n if (response.eventType === 2 || response.eventType === 3)\n source = \"cache\";\n const decoded = rawDef.decoder(response.data);\n\n if (isMounted.current)\n setState({\n status: \"success\",\n data: decoded,\n error: null,\n isFetching: false,\n isMutating: false,\n source,\n });\n resolve(decoded);\n } catch (e) {\n const err = {\n message: \"Decoding failed\",\n details: String(e),\n } as any;\n if (isMounted.current)\n setState({\n status: \"error\",\n error: err,\n isFetching: false,\n isMutating: false,\n data: null,\n source: null,\n });\n reject(err);\n }\n }\n },\n onComplete: () => {\n if (isMounted.current)\n setState((prev) => ({\n ...prev,\n isMutating: false,\n isFetching: false,\n }));\n },\n });\n\n const nsStr = allocString(rawDef.namespace);\n const mStr = allocString(rawDef.method);\n const pStr = allocString(path);\n const tpStr = allocString(\"\");\n const hStr = allocString(\n rawDef.headers ? JSON.stringify(rawDef.headers) : \"\",\n );\n\n wasmEngine.axiom_wasm_call(\n reqId,\n nsStr.ptr,\n nsStr.len,\n rawDef.endpointId,\n mStr.ptr,\n mStr.len,\n pStr.ptr,\n pStr.len,\n tpStr.ptr,\n tpStr.len,\n hStr.ptr,\n hStr.len,\n payloadPtr,\n payloadLen,\n );\n\n wasmEngine.axiom_free_memory(nsStr.ptr, nsStr.len);\n wasmEngine.axiom_free_memory(mStr.ptr, mStr.len);\n wasmEngine.axiom_free_memory(pStr.ptr, pStr.len);\n wasmEngine.axiom_free_memory(tpStr.ptr, tpStr.len);\n wasmEngine.axiom_free_memory(hStr.ptr, hStr.len);\n if (payloadPtr !== 0)\n wasmEngine.axiom_free_memory(payloadPtr, payloadLen);\n });\n },\n [isReady, config, mutationFn],\n );\n\n return {\n execute,\n state,\n data: state.data,\n // Preserve the render-prop component's established loading API while\n // exposing the more precise `isMutating` name to hook consumers.\n isLoading: state.isMutating,\n isMutating: state.isMutating,\n error: state.error,\n getFieldError: (fieldName: string) =>\n extractFieldError(state.error, fieldName),\n };\n}\n"],"mappings":";;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,OAChB;AACP,SAAS,cAAqB,wBAAwB;AACtD,SAAS,uBAAuB;AAGhC,IAAI,mBAAmB;AAChB,IAAM,eAAe,MAAM,EAAE;;;ACbpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AA6ED,SAOuB,UANrB,KADF;AApEC,IAAM,eAAe;AAAA,EAC1B;AACF;AASO,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA4B;AAAA,IACpD,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,cAAc,OAAO,KAAK;AAEhC,YAAU,MAAM;AACd,QAAI,YAAY,QAAS;AACzB,gBAAY,UAAU;AAEtB,UAAM,eAAe,YAAY;AAC/B,UAAI;AACF,YAAI;AACJ,YAAI,WAAW;AACb,gBAAM,MAAM,MAAM,MAAM,SAAS;AACjC,cAAI,CAAC,IAAI;AACP,kBAAM,IAAI,MAAM,8BAA8B,SAAS,EAAE;AAC3D,wBAAc,MAAM,IAAI,KAAK;AAAA,QAC/B,WAAW,QAAQ;AACjB,wBAAc;AAAA,QAChB,OAAO;AACL,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YACE,CAAC,YAAY,aACb,OAAO,KAAK,YAAY,SAAS,EAAE,WAAW,GAC9C;AACA,gBAAM,IAAI,MAAM,sCAAsC;AAAA,QACxD;AAGA,cAAM,SAAS,WAAW;AAE1B,gBAAQ,IAAI,0CAAgC;AAC5C,iBAAS,EAAE,SAAS,MAAM,OAAO,MAAM,QAAQ,YAAY,CAAC;AAAA,MAC9D,SAAS,KAAU;AACjB,gBAAQ,MAAM,6BAA6B,GAAG;AAC9C,iBAAS,EAAE,SAAS,OAAO,OAAO,KAAK,QAAQ,KAAK,CAAC;AAAA,MACvD;AAAA,IACF;AAEA,iBAAa;AAAA,EACf,GAAG,CAAC,WAAW,MAAM,CAAC;AAEtB,MAAI,MAAM;AACR,WACE,qBAAC,SAAI,OAAO,EAAE,OAAO,OAAO,SAAS,QAAQ,YAAY,YAAY,GACnE;AAAA,0BAAC,YAAO,yCAA2B;AAAA,MACnC,oBAAC,QAAG;AAAA,MACH,MAAM,MAAM;AAAA,OACf;AAGJ,MAAI,CAAC,MAAM,QAAS,QAAO,gCAAG,sBAAY,MAAK;AAE/C,SACE,oBAAC,aAAa,UAAb,EAAsB,OAAO,OAAQ,UAAS;AAEnD;;;AC/FA,SAAS,iBAAAA,gBAAe,kBAAkB;AAGnC,IAAM,mBAAmBA,eAAsC,IAAI;AAKnE,SAAS,kBAAoC;AAClD,QAAM,UAAU,WAAW,gBAAgB;AAC3C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,eAAqB;AACnC,QAAM,UAAU,WAAW,gBAAgB;AAC3C,SAAQ,SAAS,QAAQ,CAAC;AAC5B;;;ACzBA,SAAS,aAAAC,YAAW,sBAAsB,mBAAmB;;;ACA7D,SAAS,cAAAC,mBAAkB;AAGpB,IAAM,WAAW,MAAM;AAC1B,QAAM,UAAUC,YAAW,YAAY;AAEvC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,mFAAmF;AAAA,EACvG;AAEA,SAAO;AACX;;;ACGO,IAAM,cAAN,MAAqB;AAAA,EAO1B,YAAY,UAAkB,KAAuB;AANrD,wBAAO;AACP,wBAAO;AACP,wBAAQ;AACR,wBAAQ,aAA8B,oBAAI,IAAI;AAC9C,wBAAO,gBAA8B;AAGnC,SAAK,WAAW;AAChB,SAAK,MAAM;AACX,SAAK,QAAQ;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEO,WAA0B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,UAAU,UAAmC;AAClD,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA,EAEQ,YAAY,SAAiC;AACnD,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,QAAQ;AACzC,SAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEO,MAAM,QAAiB,OAAO,QAAiB,OAAO;AAC3D,QAAI,KAAK,MAAM,cAAc,CAAC,MAAO;AAErC,SAAK,YAAY;AAAA,MACf,YAAY;AAAA,MACZ,QAAQ,KAAK,MAAM,OAAO,YAAY;AAAA,IACxC,CAAC;AAED,UAAM,QAAQ,aAAa;AAC3B,SAAK,eAAe;AAGpB,UAAM,iBAAwB;AAAA,MAC5B,IAAI,KAAK,IAAI;AAAA,MACb,WAAW,KAAK,IAAI;AAAA,MACpB,MAAM,KAAK,IAAI,QAAQ;AAAA,MACvB,QAAQ,KAAK,IAAI;AAAA,MACjB,cAAc,KAAK,IAAI;AAAA,MACvB,UAAU,CAAC,CAAC,KAAK,IAAI;AAAA;AAAA;AAAA,MAGrB,aAAa,CAAC;AAAA,IAChB;AAGA,UAAM,EAAE,KAAK,IAAI,iBAAiB,gBAAgB,KAAK,IAAI,IAAI;AAE/D,QAAI,OAAO;AACT,cAAQ;AAAA,QACN,yBAAoB,KAAK;AAAA,QACzB;AAAA,MACF;AACA,cAAQ,IAAI,cAAc,KAAK,IAAI,SAAS;AAC5C,cAAQ,IAAI,gBAAgB,KAAK,IAAI,UAAU;AAC/C,cAAQ,IAAI,SAAS,IAAI;AACzB,cAAQ,SAAS;AAAA,IACnB;AAEA,oBAAgB,IAAI,OAAO;AAAA,MACzB,UAAU,CAAC,CAAC,KAAK,IAAI;AAAA,MACrB,YAAY,CAAC,aAAa;AACxB,YAAI,KAAK,iBAAiB,MAAO;AAEjC,YAAI,OAAO;AACT,gBAAM,UACJ,SAAS,cAAc,IACnB,mBACA,SAAS,cAAc,IACrB,aACA,SAAS,cAAc,IACrB,wBACA,SAAS,cAAc,IACrB,UACA;AACZ,kBAAQ;AAAA,YACN,wBAAmB,KAAK;AAAA,YACxB;AAAA,UACF;AACA,kBAAQ,IAAI,eAAe,OAAO;AAClC,cAAI,SAAS,KAAM,SAAQ,IAAI,SAAS,SAAS,IAAI;AACrD,cAAI,SAAS,MAAO,SAAQ,IAAI,UAAU,SAAS,KAAK;AACxD,kBAAQ,SAAS;AAAA,QACnB;AAEA,YAAI,SAAS,cAAc,GAAG;AAC5B,eAAK,YAAY;AAAA,YACf,QAAQ;AAAA,YACR,OAAO,SAAS,SAAS;AAAA,YACzB,YAAY;AAAA,UACd,CAAC;AACD;AAAA,QACF;AAEA,YAAI,SAAS,MAAM;AACjB,cAAI;AACF,kBAAM,cAAc,KAAK,IAAI,QAAQ,SAAS,IAAI;AAClD,gBAAI,SAA8B;AAClC,gBAAI,aAAa;AAEjB,gBAAI,SAAS,cAAc,GAAG;AAC5B,uBAAS;AACT,2BAAa;AAAA,YACf,WAAW,SAAS,cAAc,GAAG;AACnC,uBAAS;AACT,2BAAa;AAAA,YACf,WAAW,SAAS,cAAc,GAAG;AACnC,uBAAS;AACT,2BAAa;AAAA,YACf;AAEA,iBAAK,YAAY;AAAA,cACf,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH,SAAS,GAAG;AACV,iBAAK,YAAY;AAAA,cACf,QAAQ;AAAA,cACR,OAAO,EAAE,SAAS,mBAAmB,SAAS,OAAO,CAAC,EAAE;AAAA,cACxD,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,KAAK,iBAAiB,MAAO;AACjC,aAAK,YAAY,EAAE,YAAY,MAAM,CAAC;AAAA,MACxC;AAAA,IACF,CAAC;AAED,UAAM,mBAAmB,OAAO,QAAQ,KAAK,IAAI,WAAW,CAAC,CAAC,EAAE;AAAA,MAC9D,CAAC,CAAC,GAAG,CAAC,MACJ,EAAE,YAAY,MAAM,kBACpB,EAAE,SAAS,mCAAmC;AAAA,IAClD;AAEA,QAAI,aAAa,GACf,aAAa;AACf,QAAI,KAAK,IAAI,YAAY,UAAa,KAAK,IAAI,YAAY,MAAM;AAC/D,YAAM,cAAc,KAAK,IAAI,aACzB,KAAK,IAAI,WAAW,KAAK,IAAI,OAAO,IACpC,KAAK,IAAI;AACb,UAAI;AAEJ,UAAI,oBAAoB,OAAO,gBAAgB,UAAU;AACvD,cAAM,SAAS,IAAI,gBAAgB;AACnC,mBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,WAAW;AAC7C,iBAAO,OAAO,GAAG,OAAO,CAAC,CAAC;AAC5B,uBAAe,IAAI,YAAY,EAAE,OAAO,OAAO,SAAS,CAAC;AAAA,MAC3D,OAAO;AACL,uBAAe,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,WAAW,CAAC;AAAA,MACrE;AAEA,mBAAa,WAAW,YAAY;AACpC,mBAAa,aAAa;AAAA,IAC5B;AAEA,UAAM,QAAQ,YAAY,KAAK,IAAI,SAAS;AAC5C,UAAM,OAAO,YAAY,KAAK,IAAI,MAAM;AACxC,UAAM,OAAO,YAAY,IAAI;AAC7B,UAAM,QAAQ,YAAY,EAAE;AAC5B,UAAM,OAAO;AAAA,MACX,KAAK,IAAI,UAAU,KAAK,UAAU,KAAK,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,eAAW;AAAA,MACT;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK,IAAI;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAEA,eAAW,kBAAkB,MAAM,KAAK,MAAM,GAAG;AACjD,eAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAC/C,eAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAC/C,eAAW,kBAAkB,MAAM,KAAK,MAAM,GAAG;AACjD,eAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD;AACF;;;ACnNA,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACE,wBAAQ,WAAU,oBAAI,IAA8B;AAAA;AAAA,EAE5C,SACN,WACA,YACA,MACQ;AACR,WAAO,GAAG,SAAS,IAAI,UAAU,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEO,SAAY,KAAuC;AACxD,UAAM,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,YAAY,IAAI,IAAI;AAEjE,QAAI,KAAK,QAAQ,IAAI,GAAG,GAAG;AACzB,aAAO,KAAK,QAAQ,IAAI,GAAG;AAAA,IAC7B;AAEA,UAAM,WAAW,IAAI,YAAe,KAAK,GAAG;AAC5C,SAAK,QAAQ,IAAI,KAAK,QAAQ;AAC9B,WAAO;AAAA,EACT;AAAA,EAEO,WACL,WACA,YACA,MACA;AACA,UAAM,MAAM,KAAK,SAAS,WAAW,YAAY,IAAI;AACrD,UAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,QAAI,MAAO,OAAM,MAAM,IAAI;AAAA,EAC7B;AAAA,EAEO,QAAQ,KAAyB;AACtC,UAAM,QAAQ,KAAK,SAAS,GAAG;AAC/B,UAAM,MAAM;AAAA,EACd;AAAA;AAAA,EAGO,WAAW,KAAyB;AACzC,UAAM,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,YAAY,IAAI,IAAI;AACjE,UAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,QAAI,OAAO;AACT,UAAI,MAAM,cAAc;AAEtB,wBAAgB,OAAO,MAAM,YAAY;AAAA,MAC3C;AACA,WAAK,QAAQ,OAAO,GAAG;AACvB,cAAQ,IAAI,8CAAuC,IAAI,IAAI,GAAG;AAAA,IAChE;AAAA,EACF;AAAA,EAEO,KAAK,KAAyB,SAAc;AACjD,UAAM,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,YAAY,IAAI,IAAI;AACjE,UAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,QAAI,SAAS,MAAM,cAAc;AAC/B,4BAAsB,MAAM,cAAc,OAAO;AAAA,IACnD,OAAO;AACL,cAAQ;AAAA,QACN,0DAA0D,IAAI,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,IAAI,aAAa;;;AHnE3C,SAAS,cACd,UACA,UAAiC,CAAC,GAClC;AACA,QAAM,EAAE,SAAS,OAAO,IAAI,SAAS;AACrC,QAAM,EAAE,UAAU,KAAK,IAAI;AAE3B,QAAM,cAAc,kBAAkB,SAAS,QAAQ;AAEvD,QAAM,QAAQ;AAAA,IACZ;AAAA,MACE,CAAC,kBAAkB,YAAY,UAAU,aAAa;AAAA,MACtD,CAAC,WAAW;AAAA,IACd;AAAA,IACA,MAAM,YAAY,SAAS;AAAA,IAC3B,MAAM,YAAY,SAAS;AAAA,EAC7B;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,QAAS;AAC1B,QAAI,MAAM,WAAW,QAAQ;AAC3B,kBAAY,MAAM,OAAO,QAAQ,KAAK;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,aAAa,MAAM,QAAQ,QAAQ,KAAK,CAAC;AAE/D,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM,WAAW;AAAA,IAC5B,YAAY,MAAM;AAAA,IAClB,QAAQ,MAAM;AAAA,IACd,OAAO,MAAM;AAAA,IACb;AAAA;AAAA,IACA,SAAS,MAAM,YAAY,MAAM,MAAM,QAAQ,KAAK;AAAA,EACtD;AACF;;;AIJI,gBAAAC,YAAA;AAlBG,SAAS,QAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAAoB;AAClB,QAAM,SAAS,cAAiB,MAAM,EAAE,QAAQ,CAAC;AAEjD,QAAM,UACJ,OAAO,aAAa,aAChB,SAAS;AAAA,IACP,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,SAAS,OAAO;AAAA,EAClB,CAAC,IACD;AAGN,SACE,gBAAAA,KAAC,iBAAiB,UAAjB,EAA0B,OAAO,OAAO,OACtC,mBACH;AAEJ;;;ACvCA,SAAoB,cAAAC,mBAAkB;AAgD3B,qBAAAC,WAAA,OAAAC,YAAA;AAhCJ,SAAS,OAAO,EAAE,OAAO,IAAI,SAAS,GAAgB;AAE3D,QAAM,UAAUC,YAAW,gBAAgB;AAC3C,QAAM,WAAW,SAAS;AAG1B,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,iBAAiB,GAAG,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;AAEtE,MAAI,eAAe;AAEnB,MAAI,SAAS,YAAY;AACvB,mBAAe;AAAA,EACjB,WAAW,SAAS,WAAW,WAAW;AACxC,mBAAe;AAAA,EACjB,WAAW,SAAS,WAAW,SAAS;AACtC,mBAAe;AAAA,EACjB,WAAW,SAAS,WAAW,aAAa,SAAS,MAAM;AACzD,mBAAe;AAAA,EACjB;AAGA,MACE,eAAe,SAAS,SAAS,KACjC,SAAS,WAAW,aACpB,CAAC,SAAS,YACV;AACA,mBAAe;AAAA,EACjB;AAEA,MAAI,eAAe,SAAS,YAAY,GAAG;AACzC,WAAO,gBAAAD,KAAAD,WAAA,EAAG,UAAS;AAAA,EACrB;AAEA,SAAO;AACT;;;ACpDA,SAAS,aAAAG,YAAW,UAAAC,eAAyB;AAiClC,gBAAAC,YAAA;AAzBJ,IAAM,YAAsC,CAAC,EAAE,WAAW,OAAO,MAAM,SAAS,MAAM;AACzF,QAAM,aAAaD,QAAuB,IAAI;AAC9C,QAAM,eAAeA,QAAO,KAAK;AAEjC,EAAAD,WAAU,MAAM;AACZ,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACnD,cAAQ,QAAQ,WAAS;AACrB,YAAI,MAAM,gBAAgB;AACtB,cAAI,QAAQ,aAAa,QAAS;AAElC,oBAAU;AACV,uBAAa,UAAU;AAEvB,cAAI,KAAM,UAAS,UAAU,MAAM,MAAM;AAAA,QAC7C;AAAA,MACJ,CAAC;AAAA,IACL,GAAG,EAAE,WAAW,IAAI,CAAC;AAErB,QAAI,WAAW,SAAS;AACpB,eAAS,QAAQ,WAAW,OAAO;AAAA,IACvC;AAEA,WAAO,MAAM,SAAS,WAAW;AAAA,EACrC,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,SAAO,gBAAAE,KAAC,SAAI,KAAK,YAAa,UAAS;AAC3C;;;AClCA,SAAS,YAAAC,WAAU,eAAAC,cAAa,UAAAC,SAAQ,aAAAC,kBAAiB;AAczD,SAAS,kBAAkB,OAAY,WAAkC;AACvE,MAAI,OAAO,SAAS,qBAAqB,CAAC,OAAO,QAAS,QAAO;AACjE,QAAM,QAAQ,MAAM,QAAQ,MAAM,IAAI;AACtC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,YAAY,GAAG;AACjC,aAAO,KAAK,UAAU,UAAU,SAAS,CAAC,EAAE,KAAK;AAAA,EACrD;AACA,SAAO;AACT;AAEO,SAAS,iBACd,YACA;AACA,QAAM,EAAE,SAAS,OAAO,IAAI,SAAS;AACrC,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAwB;AAAA,IAChD,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,YAAYC,QAAO,IAAI;AAE7B,EAAAC,WAAU,MAAM;AACd,cAAU,UAAU;AACpB,WAAO,MAAM;AACX,gBAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,UAAUC;AAAA,IACd,CAAC,MAAS,YAA+D;AACvE,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAI,CAAC,WAAW,CAAC,OAAQ,QAAO,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAElE,cAAM,SAAS,WAAW,IAAI;AAC9B,cAAM,gBAAgB;AAAA,UACpB,GAAI,OAAO,WAAW,CAAC;AAAA,UACvB,GAAI,SAAS,WAAW,CAAC;AAAA,QAC3B;AACA,eAAO,UACL,OAAO,KAAK,aAAa,EAAE,SAAS,IAAI,gBAAgB;AAE1D,cAAM,QAAQ,aAAa;AAE3B,YAAI,UAAU,SAAS;AACrB,mBAAS;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAEA,cAAM,iBAAwB;AAAA,UAC5B,IAAI,OAAO;AAAA,UACX,WAAW,OAAO;AAAA,UAClB,MAAM,OAAO,QAAQ;AAAA,UACrB,QAAQ,OAAO;AAAA,UACf,cAAc,OAAO;AAAA,UACrB,UAAU,CAAC,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,UAKnB,aAAa,CAAC;AAAA,QAChB;AAGA,cAAM,EAAE,MAAM,cAAc,IAAI;AAAA,UAC9B;AAAA,UACA,OAAO;AAAA,QACT;AAEA,cAAM,mBAAmB,OAAO,QAAQ,OAAO,WAAW,CAAC,CAAC,EAAE;AAAA,UAC5D,CAAC,CAAC,GAAG,CAAC,MACJ,EAAE,YAAY,MAAM,kBACpB,EAAE,SAAS,mCAAmC;AAAA,QAClD;AAEA,YAAI,aAAa,GACf,aAAa,GACb,aAAkB;AAEpB,YAAI,OAAO,YAAY,UAAa,OAAO,YAAY,MAAM;AAC3D,uBAAa,OAAO,aAChB,OAAO,WAAW,OAAO,OAAO,IAChC,OAAO;AAAA,QACb,WAAW,OAAO,KAAK,aAAa,EAAE,SAAS,GAAG;AAEhD,uBAAa;AAAA,QACf;AAEA,YAAI,eAAe,MAAM;AACvB,cAAI;AAEJ,cAAI,oBAAoB,OAAO,eAAe,UAAU;AACtD,kBAAM,SAAS,IAAI,gBAAgB;AACnC,uBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/C,kBAAI,MAAM,UAAa,MAAM,KAAM,QAAO,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,YAC/D;AACA,2BAAe,IAAI,YAAY,EAAE,OAAO,OAAO,SAAS,CAAC;AAAA,UAC3D,OAAO;AACL,2BAAe,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,UAAU,CAAC;AAAA,UACpE;AAEA,uBAAa,WAAW,YAAY;AACpC,uBAAa,aAAa;AAAA,QAC5B;AAEA,YAAI,OAAO,OAAO;AAChB,kBAAQ;AAAA,YACN,0BAAqB,KAAK;AAAA,YAC1B;AAAA,UACF;AACA,kBAAQ,IAAI,cAAc,OAAO,SAAS;AAC1C,kBAAQ,IAAI,gBAAgB,OAAO,UAAU;AAC7C,kBAAQ,IAAI,SAAS,IAAI;AACzB,kBAAQ,IAAI,YAAY,OAAO,OAAO;AACtC,kBAAQ,IAAI,YAAY,UAAU;AAClC,kBAAQ,SAAS;AAAA,QACnB;AAEA,wBAAgB,IAAI,OAAO;AAAA,UACzB,UAAU,CAAC,CAAC,OAAO;AAAA,UACnB,YAAY,CAAC,aAAa;AACxB,gBAAI,OAAO,OAAO;AAChB,oBAAM,UACJ,SAAS,cAAc,IACnB,mBACA,SAAS,cAAc,IACrB,aACA,SAAS,cAAc,IACrB,wBACA,SAAS,cAAc,IACrB,UACA;AACZ,sBAAQ;AAAA,gBACN,wBAAmB,KAAK;AAAA,gBACxB;AAAA,cACF;AACA,sBAAQ,IAAI,eAAe,OAAO;AAClC,kBAAI,SAAS,KAAM,SAAQ,IAAI,SAAS,SAAS,IAAI;AACrD,kBAAI,SAAS,MAAO,SAAQ,IAAI,UAAU,SAAS,KAAK;AACxD,sBAAQ,SAAS;AAAA,YACnB;AAEA,gBAAI,SAAS,cAAc,GAAG;AAC5B,kBAAI,UAAU;AACZ,yBAAS;AAAA,kBACP,QAAQ;AAAA,kBACR,OAAO,SAAS,SAAS;AAAA,kBACzB,YAAY;AAAA,kBACZ,YAAY;AAAA,kBACZ,MAAM;AAAA,kBACN,QAAQ;AAAA,gBACV,CAAC;AACH,qBAAO,SAAS,KAAK;AACrB;AAAA,YACF;AAEA,gBAAI,SAAS,MAAM;AACjB,kBAAI;AACF,oBAAI,SAA8B;AAClC,oBAAI,SAAS,cAAc,KAAK,SAAS,cAAc;AACrD,2BAAS;AACX,sBAAM,UAAU,OAAO,QAAQ,SAAS,IAAI;AAE5C,oBAAI,UAAU;AACZ,2BAAS;AAAA,oBACP,QAAQ;AAAA,oBACR,MAAM;AAAA,oBACN,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,YAAY;AAAA,oBACZ;AAAA,kBACF,CAAC;AACH,wBAAQ,OAAO;AAAA,cACjB,SAAS,GAAG;AACV,sBAAM,MAAM;AAAA,kBACV,SAAS;AAAA,kBACT,SAAS,OAAO,CAAC;AAAA,gBACnB;AACA,oBAAI,UAAU;AACZ,2BAAS;AAAA,oBACP,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,YAAY;AAAA,oBACZ,MAAM;AAAA,oBACN,QAAQ;AAAA,kBACV,CAAC;AACH,uBAAO,GAAG;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY,MAAM;AAChB,gBAAI,UAAU;AACZ,uBAAS,CAAC,UAAU;AAAA,gBAClB,GAAG;AAAA,gBACH,YAAY;AAAA,gBACZ,YAAY;AAAA,cACd,EAAE;AAAA,UACN;AAAA,QACF,CAAC;AAED,cAAM,QAAQ,YAAY,OAAO,SAAS;AAC1C,cAAM,OAAO,YAAY,OAAO,MAAM;AACtC,cAAM,OAAO,YAAY,IAAI;AAC7B,cAAM,QAAQ,YAAY,EAAE;AAC5B,cAAM,OAAO;AAAA,UACX,OAAO,UAAU,KAAK,UAAU,OAAO,OAAO,IAAI;AAAA,QACpD;AAEA,mBAAW;AAAA,UACT;AAAA,UACA,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAEA,mBAAW,kBAAkB,MAAM,KAAK,MAAM,GAAG;AACjD,mBAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAC/C,mBAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAC/C,mBAAW,kBAAkB,MAAM,KAAK,MAAM,GAAG;AACjD,mBAAW,kBAAkB,KAAK,KAAK,KAAK,GAAG;AAC/C,YAAI,eAAe;AACjB,qBAAW,kBAAkB,YAAY,UAAU;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,IACA,CAAC,SAAS,QAAQ,UAAU;AAAA,EAC9B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA;AAAA;AAAA,IAGZ,WAAW,MAAM;AAAA,IACjB,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,eAAe,CAAC,cACd,kBAAkB,MAAM,OAAO,SAAS;AAAA,EAC5C;AACF;","names":["createContext","useEffect","useContext","useContext","useEffect","jsx","useContext","Fragment","jsx","useContext","useEffect","useRef","jsx","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback"]}
|