{"version":3,"sources":["../../src/constants.ts","../../src/utils.ts","../../src/validators.ts","../../src/react/useMlink.ts","../../src/react/useExecuteMlink.ts","../../src/react/themes.ts","../../src/react/MlinkProvider.tsx","../../src/builders.ts","../../src/react/Mlink.tsx","../../src/react/adapters.ts"],"names":["useState","useCallback","useMemo","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ChainConfig } from './types';\n\nexport const MANTLE_MAINNET: ChainConfig = {\n  chainId: 5000,\n  name: 'Mantle',\n  rpcUrl: 'https://rpc.mantle.xyz',\n  explorerUrl: 'https://mantlescan.xyz',\n  nativeCurrency: {\n    name: 'MNT',\n    symbol: 'MNT',\n    decimals: 18,\n  },\n};\n\nexport const MANTLE_SEPOLIA: ChainConfig = {\n  chainId: 5003,\n  name: 'Mantle Sepolia',\n  rpcUrl: 'https://rpc.sepolia.mantle.xyz',\n  explorerUrl: 'https://sepolia.mantlescan.xyz',\n  nativeCurrency: {\n    name: 'MNT',\n    symbol: 'MNT',\n    decimals: 18,\n  },\n};\n\nexport const SUPPORTED_CHAINS: ChainConfig[] = [MANTLE_MAINNET, MANTLE_SEPOLIA];\n\nexport const DEFAULT_CHAIN = MANTLE_SEPOLIA;\n\nexport const MLINK_BASE_URL = 'https://www.m-links.xyz';\n\nexport const ACTION_QUERY_PARAM = 'action';\n\n// Registry URL for validation\nexport const REGISTRY_URL = 'https://mlink-client.vercel.app';\nexport const REGISTRY_VALIDATE_ENDPOINT = '/api/registry/validate';\n","import {\n  MLINK_BASE_URL,\n  ACTION_QUERY_PARAM,\n  SUPPORTED_CHAINS,\n} from './constants';\nimport type { ChainConfig } from './types';\n\n// Create Mlink URL from Action URL\nexport function createMlinkUrl(\n  actionUrl: string,\n  baseUrl: string = MLINK_BASE_URL\n): string {\n  // Validate actionUrl is a valid URL\n  try {\n    new URL(actionUrl);\n  } catch {\n    throw new Error('Invalid action URL');\n  }\n\n  const encodedAction = encodeURIComponent(actionUrl);\n  return `${baseUrl}/mlink?${ACTION_QUERY_PARAM}=${encodedAction}`;\n}\n\n// Parse Mlink URL to extract Action URL\nexport function parseMlinkUrl(mlinkUrl: string): string | null {\n  try {\n    const url = new URL(mlinkUrl);\n    const actionParam = url.searchParams.get(ACTION_QUERY_PARAM);\n\n    if (!actionParam) return null;\n\n    const actionUrl = decodeURIComponent(actionParam);\n\n    // Validate it's a valid URL\n    new URL(actionUrl);\n\n    return actionUrl;\n  } catch {\n    return null;\n  }\n}\n\n// Check if URL is a valid Mlink URL\nexport function isMlinkUrl(url: string): boolean {\n  return parseMlinkUrl(url) !== null;\n}\n\n// Convert human readable amount to wei string\nexport function parseEther(amount: string | number): string {\n  const value = typeof amount === 'string' ? parseFloat(amount) : amount;\n  if (isNaN(value) || value < 0) {\n    throw new Error('Invalid amount');\n  }\n  const wei = BigInt(Math.floor(value * 1e18));\n  return wei.toString();\n}\n\n// Convert wei to human readable amount\nexport function formatEther(wei: string | bigint): string {\n  const value = typeof wei === 'string' ? BigInt(wei) : wei;\n  const ether = Number(value) / 1e18;\n  return ether.toFixed(6).replace(/\\.?0+$/, '');\n}\n\n// Shorten address for display\nexport function shortenAddress(address: string): string {\n  if (!address || address.length < 10) return address;\n  return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\n// Get explorer URL for transaction\nexport function getExplorerUrl(chainId: number, txHash: string): string {\n  const chain = getChainById(chainId);\n  if (!chain) return '';\n  return `${chain.explorerUrl}/tx/${txHash}`;\n}\n\n// Get chain config by ID\nexport function getChainById(chainId: number): ChainConfig | undefined {\n  return SUPPORTED_CHAINS.find((c) => c.chainId === chainId);\n}\n\n// Get explorer URL for address\nexport function getAddressExplorerUrl(\n  chainId: number,\n  address: string\n): string {\n  const chain = getChainById(chainId);\n  if (!chain) return '';\n  return `${chain.explorerUrl}/address/${address}`;\n}\n","import { z } from 'zod';\nimport type {\n  ActionMetadata,\n  TransactionRequest,\n  TransactionResponse,\n  LinkedAction,\n  TypedActionParameter,\n  ValidationResult,\n} from './types';\n\n// Ethereum address regex\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/;\n\n// Hex string regex\nconst hexRegex = /^0x[a-fA-F0-9]*$/;\n\n// =============================================================================\n// LEGACY SCHEMAS (Backwards compatible)\n// =============================================================================\n\nexport const ActionButtonSchema = z.object({\n  label: z.string().min(1).max(50),\n  value: z.string().min(1),\n  type: z.enum(['button', 'input']),\n  placeholder: z.string().optional(),\n  disabled: z.boolean().optional(),\n});\n\n// =============================================================================\n// SOLANA-STYLE PARAMETER SCHEMAS\n// =============================================================================\n\n/**\n * Parameter types enum\n */\nexport const ActionParameterTypeSchema = z.enum([\n  'text',\n  'number',\n  'email',\n  'url',\n  'date',\n  'datetime-local',\n  'textarea',\n  'select',\n  'radio',\n  'checkbox',\n  'address',\n  'token',\n  'amount',\n]);\n\n/**\n * Option for select/radio/checkbox\n */\nexport const ActionParameterOptionSchema = z.object({\n  label: z.string().min(1),\n  value: z.string(),\n  selected: z.boolean().optional(),\n});\n\n/**\n * Base parameter fields\n */\nconst ActionParameterBaseSchema = z.object({\n  name: z.string().min(1).max(50),\n  label: z.string().max(100).optional(),\n  required: z.boolean().optional(),\n  pattern: z.string().optional(),\n  patternDescription: z.string().optional(),\n  min: z.union([z.string(), z.number()]).optional(),\n  max: z.union([z.string(), z.number()]).optional(),\n});\n\n/**\n * Non-selectable parameter (text, number, etc.)\n */\nexport const ActionParameterSchema = ActionParameterBaseSchema.extend({\n  type: z.enum([\n    'text', 'number', 'email', 'url', 'date', 'datetime-local',\n    'textarea', 'address', 'token', 'amount'\n  ]).optional(),\n});\n\n/**\n * Selectable parameter (select, radio, checkbox)\n */\nexport const ActionParameterSelectableSchema = ActionParameterBaseSchema.extend({\n  type: z.enum(['select', 'radio', 'checkbox']),\n  options: z.array(ActionParameterOptionSchema).min(1),\n});\n\n/**\n * Union of all parameter types\n */\nexport const TypedActionParameterSchema = z.union([\n  ActionParameterSelectableSchema,\n  ActionParameterSchema,\n]);\n\n// =============================================================================\n// LINKED ACTION SCHEMAS\n// =============================================================================\n\n/**\n * Linked action type enum\n */\nexport const LinkedActionTypeSchema = z.enum(['transaction', 'post', 'external-link']);\n\n/**\n * Linked action with href template and parameters\n */\nexport const LinkedActionSchema = z.object({\n  type: LinkedActionTypeSchema.optional(),\n  href: z.string().min(1),\n  label: z.string().min(1).max(50),\n  disabled: z.boolean().optional(),\n  parameters: z.array(TypedActionParameterSchema).optional(),\n});\n\n/**\n * Links section containing linked actions\n */\nexport const ActionLinksSchema = z.object({\n  actions: z.array(LinkedActionSchema).min(1),\n});\n\n// =============================================================================\n// ACTION CHAINING SCHEMAS\n// =============================================================================\n\nexport const PostNextActionLinkSchema = z.object({\n  type: z.literal('post'),\n  href: z.string().min(1),\n});\n\nexport const InlineNextActionLinkSchema: z.ZodType<{ type: 'inline'; action: ActionMetadata }> = z.object({\n  type: z.literal('inline'),\n  action: z.lazy(() => ActionMetadataSchema),\n});\n\nexport const NextActionLinkSchema = z.union([\n  PostNextActionLinkSchema,\n  InlineNextActionLinkSchema,\n]);\n\n// =============================================================================\n// MAIN SCHEMAS (Enhanced)\n// =============================================================================\n\n/**\n * Icon can be URL or base64 data URI\n */\nconst iconSchema = z.string().refine(\n  (val) => {\n    // Allow URLs\n    if (val.startsWith('http://') || val.startsWith('https://')) return true;\n    // Allow base64 data URIs\n    if (val.startsWith('data:image/')) return true;\n    // Allow relative paths\n    if (val.startsWith('/')) return true;\n    return false;\n  },\n  { message: 'Icon must be a valid URL, base64 data URI, or relative path' }\n);\n\n/**\n * Enhanced ActionMetadata schema with links support\n */\nexport const ActionMetadataSchema = z.object({\n  type: z.enum(['action', 'completed']).optional(),\n  title: z.string().min(1).max(200),\n  icon: iconSchema,\n  description: z.string().min(1).max(1000),\n  label: z.string().max(50).optional(),\n  // Legacy actions (optional)\n  actions: z.array(ActionButtonSchema).optional(),\n  // Solana-style linked actions (optional)\n  links: ActionLinksSchema.optional(),\n  disabled: z.boolean().optional(),\n  error: z.object({ message: z.string() }).optional(),\n}).refine(\n  (data) => {\n    // Must have either actions or links (or both)\n    return (data.actions && data.actions.length > 0) ||\n           (data.links?.actions && data.links.actions.length > 0);\n  },\n  { message: 'Must have at least one action or linked action' }\n);\n\n/**\n * Enhanced TransactionRequest with data support\n */\nexport const TransactionRequestSchema = z.object({\n  account: z.string().regex(addressRegex, 'Invalid Ethereum address'),\n  action: z.string().min(1),\n  input: z.string().optional(),\n  // Solana-style parameter data\n  data: z.record(z.union([z.string(), z.array(z.string())])).optional(),\n});\n\nexport const EVMTransactionSchema = z.object({\n  to: z.string().regex(addressRegex, 'Invalid to address'),\n  value: z.string(),\n  data: z.string().regex(hexRegex, 'Invalid hex data'),\n  chainId: z.number().positive(),\n});\n\n/**\n * Enhanced TransactionResponse with multi-tx and chaining support\n */\nexport const TransactionResponseSchema = z.object({\n  // Single transaction (legacy)\n  transaction: EVMTransactionSchema.optional(),\n  // Multiple transactions (batch)\n  transactions: z.array(EVMTransactionSchema).optional(),\n  message: z.string().optional(),\n  // Action chaining\n  links: z.object({\n    next: NextActionLinkSchema.optional(),\n  }).optional(),\n}).refine(\n  (data) => {\n    // Must have either transaction or transactions\n    return data.transaction !== undefined || (data.transactions && data.transactions.length > 0);\n  },\n  { message: 'Must have either transaction or transactions' }\n);\n\n// Validation functions\nexport function validateActionMetadata(\n  data: unknown\n): ValidationResult<ActionMetadata> {\n  const result = ActionMetadataSchema.safeParse(data);\n  if (result.success) {\n    return { success: true, data: result.data as ActionMetadata };\n  }\n  return { success: false, error: result.error.message };\n}\n\nexport function validateTransactionRequest(\n  data: unknown\n): ValidationResult<TransactionRequest> {\n  const result = TransactionRequestSchema.safeParse(data);\n  if (result.success) {\n    return { success: true, data: result.data };\n  }\n  return { success: false, error: result.error.message };\n}\n\nexport function validateTransactionResponse(\n  data: unknown\n): ValidationResult<TransactionResponse> {\n  const result = TransactionResponseSchema.safeParse(data);\n  if (result.success) {\n    return { success: true, data: result.data as TransactionResponse };\n  }\n  return { success: false, error: result.error.message };\n}\n\nexport function isValidAddress(address: string): boolean {\n  return addressRegex.test(address);\n}\n\nexport function isValidHex(hex: string): boolean {\n  return hexRegex.test(hex);\n}\n\n// =============================================================================\n// NEW VALIDATION FUNCTIONS\n// =============================================================================\n\n/**\n * Validate a linked action\n */\nexport function validateLinkedAction(\n  data: unknown\n): ValidationResult<LinkedAction> {\n  const result = LinkedActionSchema.safeParse(data);\n  if (result.success) {\n    return { success: true, data: result.data as LinkedAction };\n  }\n  return { success: false, error: result.error.message };\n}\n\n/**\n * Validate a parameter\n */\nexport function validateParameter(\n  data: unknown\n): ValidationResult<TypedActionParameter> {\n  const result = TypedActionParameterSchema.safeParse(data);\n  if (result.success) {\n    return { success: true, data: result.data as TypedActionParameter };\n  }\n  return { success: false, error: result.error.message };\n}\n\n/**\n * Validate parameter values against their definitions\n */\nexport function validateParameterValues(\n  parameters: TypedActionParameter[],\n  values: Record<string, string | string[]>\n): ValidationResult<Record<string, string | string[]>> {\n  const errors: string[] = [];\n\n  for (const param of parameters) {\n    const value = values[param.name];\n\n    // Check required\n    if (param.required && (value === undefined || value === '' || (Array.isArray(value) && value.length === 0))) {\n      errors.push(`${param.label || param.name} is required`);\n      continue;\n    }\n\n    // Skip validation if no value and not required\n    if (value === undefined || value === '') continue;\n\n    const strValue = Array.isArray(value) ? value[0] : value;\n\n    // Validate pattern\n    if (param.pattern && strValue) {\n      const regex = new RegExp(param.pattern);\n      if (!regex.test(strValue)) {\n        errors.push(param.patternDescription || `${param.label || param.name} has invalid format`);\n      }\n    }\n\n    // Validate min/max for number types\n    if ((param.type === 'number' || param.type === 'amount') && strValue) {\n      const numValue = parseFloat(strValue);\n      if (isNaN(numValue)) {\n        errors.push(`${param.label || param.name} must be a number`);\n      } else {\n        if (param.min !== undefined && numValue < Number(param.min)) {\n          errors.push(`${param.label || param.name} must be at least ${param.min}`);\n        }\n        if (param.max !== undefined && numValue > Number(param.max)) {\n          errors.push(`${param.label || param.name} must be at most ${param.max}`);\n        }\n      }\n    }\n\n    // Validate address type\n    if (param.type === 'address' && strValue && !isValidAddress(strValue)) {\n      errors.push(`${param.label || param.name} must be a valid Ethereum address`);\n    }\n  }\n\n  if (errors.length > 0) {\n    return { success: false, error: errors.join(', ') };\n  }\n\n  return { success: true, data: values };\n}\n","'use client';\r\n\r\nimport { useState, useEffect, useCallback, useRef } from 'react';\r\nimport type { ActionMetadata } from '../types';\r\nimport type { MlinkInstance, MlinkStatus, UseMlinkOptions, RegistrationResult } from './types';\r\nimport { parseMlinkUrl } from '../utils';\r\nimport { validateActionMetadata } from '../validators';\r\nimport { REGISTRY_URL, REGISTRY_VALIDATE_ENDPOINT } from '../constants';\r\n\r\nconst DEFAULT_REFRESH_INTERVAL = 10 * 60 * 1000; // 10 minutes\r\n\r\nexport function useMlink(\r\n  url: string,\r\n  options: UseMlinkOptions = {}\r\n): MlinkInstance {\r\n  const {\r\n    refreshInterval = DEFAULT_REFRESH_INTERVAL,\r\n    enabled = true,\r\n    registryUrl = REGISTRY_URL,\r\n    requireRegistration = true,\r\n    allowPending = true,\r\n    allowBlocked = false,\r\n  } = options;\r\n\r\n  const [status, setStatus] = useState<MlinkStatus>('idle');\r\n  const [metadata, setMetadata] = useState<ActionMetadata | null>(null);\r\n  const [error, setError] = useState<string | null>(null);\r\n  const [registration, setRegistration] = useState<RegistrationResult | null>(null);\r\n\r\n  const abortControllerRef = useRef<AbortController | null>(null);\r\n  const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\r\n  // Extract action URL from mlink URL if needed\r\n  const actionUrl = parseMlinkUrl(url) || url;\r\n\r\n  // Validate against registry\r\n  const validateRegistration = useCallback(async (): Promise<RegistrationResult | null> => {\r\n    if (!actionUrl || !requireRegistration) return null;\r\n\r\n    try {\r\n      const validateUrl = `${registryUrl}${REGISTRY_VALIDATE_ENDPOINT}?url=${encodeURIComponent(actionUrl)}`;\r\n      const response = await fetch(validateUrl, {\r\n        method: 'GET',\r\n        headers: {\r\n          Accept: 'application/json',\r\n        },\r\n      });\r\n\r\n      const data = await response.json();\r\n      return data as RegistrationResult;\r\n    } catch (err) {\r\n      console.error('Registry validation error:', err);\r\n      // If registry is unreachable, we can either fail or allow\r\n      // For now, we'll return a failure result\r\n      return {\r\n        isRegistered: false,\r\n        status: null,\r\n        error: 'Unable to validate against registry. Please try again later.',\r\n      };\r\n    }\r\n  }, [actionUrl, registryUrl, requireRegistration]);\r\n\r\n  const fetchMetadata = useCallback(async () => {\r\n    if (!actionUrl || !enabled) return;\r\n\r\n    // Abort previous request if still pending\r\n    if (abortControllerRef.current) {\r\n      abortControllerRef.current.abort();\r\n    }\r\n\r\n    abortControllerRef.current = new AbortController();\r\n\r\n    setStatus('validating');\r\n    setError(null);\r\n\r\n    try {\r\n      // Step 1: Validate against registry (if required)\r\n      if (requireRegistration) {\r\n        const registrationResult = await validateRegistration();\r\n        setRegistration(registrationResult);\r\n\r\n        if (registrationResult) {\r\n          // Check if mlink is registered\r\n          if (!registrationResult.isRegistered) {\r\n            setError(registrationResult.error || 'This MLink is not registered.');\r\n            setStatus('unregistered');\r\n            return;\r\n          }\r\n\r\n          // Check if mlink is blocked\r\n          if (registrationResult.status === 'blocked' && !allowBlocked) {\r\n            setError('This MLink has been blocked for policy violations.');\r\n            setStatus('blocked');\r\n            return;\r\n          }\r\n\r\n          // Check if mlink is pending (and if we allow pending)\r\n          if (registrationResult.status === 'pending' && !allowPending) {\r\n            setError('This MLink is pending review and not yet available.');\r\n            setStatus('error');\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Step 2: Fetch action metadata\r\n      setStatus('loading');\r\n\r\n      const response = await fetch(actionUrl, {\r\n        method: 'GET',\r\n        headers: {\r\n          Accept: 'application/json',\r\n        },\r\n        signal: abortControllerRef.current.signal,\r\n      });\r\n\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n      }\r\n\r\n      const data = await response.json();\r\n\r\n      // Validate the response\r\n      const validation = validateActionMetadata(data);\r\n      if (!validation.success) {\r\n        throw new Error(`Invalid metadata: ${validation.error}`);\r\n      }\r\n\r\n      setMetadata(validation.data);\r\n      setStatus('ready');\r\n    } catch (err) {\r\n      if (err instanceof Error && err.name === 'AbortError') {\r\n        return; // Ignore abort errors\r\n      }\r\n\r\n      const errorMessage =\r\n        err instanceof Error ? err.message : 'Failed to fetch mlink data';\r\n      setError(errorMessage);\r\n      setStatus('error');\r\n    }\r\n  }, [actionUrl, enabled, requireRegistration, validateRegistration, allowBlocked, allowPending]);\r\n\r\n  // Initial fetch\r\n  useEffect(() => {\r\n    if (enabled) {\r\n      fetchMetadata();\r\n    }\r\n\r\n    return () => {\r\n      if (abortControllerRef.current) {\r\n        abortControllerRef.current.abort();\r\n      }\r\n    };\r\n  }, [fetchMetadata, enabled]);\r\n\r\n  // Set up refresh interval\r\n  useEffect(() => {\r\n    if (!enabled || !refreshInterval) return;\r\n\r\n    intervalRef.current = setInterval(() => {\r\n      fetchMetadata();\r\n    }, refreshInterval);\r\n\r\n    return () => {\r\n      if (intervalRef.current) {\r\n        clearInterval(intervalRef.current);\r\n      }\r\n    };\r\n  }, [fetchMetadata, refreshInterval, enabled]);\r\n\r\n  return {\r\n    status,\r\n    metadata,\r\n    error,\r\n    url: actionUrl,\r\n    refresh: fetchMetadata,\r\n    registration,\r\n    isRegistered: registration?.isRegistered ?? false,\r\n  };\r\n}\r\n","'use client';\r\n\r\nimport { useState, useCallback } from 'react';\r\nimport type {\r\n  MlinkAdapter,\r\n  MlinkStatus,\r\n  ExecutionResult,\r\n  UseExecuteMlinkReturn,\r\n} from './types';\r\nimport type { TransactionResponse, EVMTransaction } from '../types';\r\nimport { validateTransactionResponse } from '../validators';\r\n\r\ninterface UseExecuteMlinkOptions {\r\n  adapter: MlinkAdapter;\r\n  actionUrl: string;\r\n  onSuccess?: (txHash: string, action: string) => void;\r\n  onError?: (error: string) => void;\r\n}\r\n\r\n/**\r\n * Enhanced UseExecuteMlinkReturn with data parameter support\r\n */\r\nexport interface UseExecuteMlinkReturnEnhanced extends Omit<UseExecuteMlinkReturn, 'execute'> {\r\n  execute: (\r\n    action: string,\r\n    input?: string,\r\n    data?: Record<string, string | string[]>\r\n  ) => Promise<ExecutionResult>;\r\n}\r\n\r\nexport function useExecuteMlink(\r\n  options: UseExecuteMlinkOptions\r\n): UseExecuteMlinkReturnEnhanced {\r\n  const { adapter, actionUrl, onSuccess, onError } = options;\r\n\r\n  const [status, setStatus] = useState<MlinkStatus>('ready');\r\n  const [txHash, setTxHash] = useState<string | null>(null);\r\n  const [error, setError] = useState<string | null>(null);\r\n\r\n  const reset = useCallback(() => {\r\n    setStatus('ready');\r\n    setTxHash(null);\r\n    setError(null);\r\n  }, []);\r\n\r\n  const execute = useCallback(\r\n    async (\r\n      action: string,\r\n      input?: string,\r\n      data?: Record<string, string | string[]>\r\n    ): Promise<ExecutionResult> => {\r\n      setStatus('executing');\r\n      setError(null);\r\n      setTxHash(null);\r\n\r\n      try {\r\n        // Ensure wallet is connected\r\n        let account = adapter.getAddress();\r\n        if (!adapter.isConnected() || !account) {\r\n          account = await adapter.connect();\r\n        }\r\n\r\n        // Make POST request to get transaction\r\n        const response = await fetch(actionUrl, {\r\n          method: 'POST',\r\n          headers: {\r\n            'Content-Type': 'application/json',\r\n          },\r\n          body: JSON.stringify({\r\n            account,\r\n            action,\r\n            input,\r\n            data, // Include parameter data\r\n          }),\r\n        });\r\n\r\n        if (!response.ok) {\r\n          const errorData = await response.json().catch(() => ({}));\r\n          throw new Error(\r\n            errorData.error?.message || errorData.message || `HTTP ${response.status}: ${response.statusText}`\r\n          );\r\n        }\r\n\r\n        const responseData: TransactionResponse = await response.json();\r\n\r\n        // Get transactions (support both single and multiple)\r\n        const transactions: EVMTransaction[] = responseData.transactions\r\n          ? responseData.transactions\r\n          : responseData.transaction\r\n          ? [responseData.transaction]\r\n          : [];\r\n\r\n        if (transactions.length === 0) {\r\n          throw new Error('No transaction returned from action');\r\n        }\r\n\r\n        // Execute all transactions sequentially\r\n        let lastHash = '';\r\n        for (const tx of transactions) {\r\n          lastHash = await adapter.signAndSendTransaction(tx);\r\n        }\r\n\r\n        setTxHash(lastHash);\r\n        setStatus('success');\r\n        onSuccess?.(lastHash, action);\r\n\r\n        return {\r\n          success: true,\r\n          txHash: lastHash,\r\n          message: responseData.message,\r\n        };\r\n      } catch (err) {\r\n        const errorMessage =\r\n          err instanceof Error ? err.message : 'Transaction failed';\r\n        setError(errorMessage);\r\n        setStatus('error');\r\n        onError?.(errorMessage);\r\n\r\n        return {\r\n          success: false,\r\n          error: errorMessage,\r\n        };\r\n      }\r\n    },\r\n    [adapter, actionUrl, onSuccess, onError]\r\n  );\r\n\r\n  return {\r\n    execute,\r\n    status,\r\n    txHash,\r\n    error,\r\n    reset,\r\n  };\r\n}\r\n","import type { MlinkTheme, MlinkThemePreset } from './types';\r\n\r\nexport const lightTheme: MlinkTheme = {\r\n  // Colors\r\n  '--mlink-bg-primary': '#ffffff',\r\n  '--mlink-bg-secondary': '#f8f9fa',\r\n  '--mlink-border-color': '#e9ecef',\r\n  '--mlink-text-primary': '#212529',\r\n  '--mlink-text-secondary': '#6c757d',\r\n  '--mlink-text-link': '#0d6efd',\r\n  '--mlink-button-bg': '#212529',\r\n  '--mlink-button-text': '#ffffff',\r\n  '--mlink-button-hover': '#343a40',\r\n  '--mlink-button-disabled': '#adb5bd',\r\n  '--mlink-input-bg': '#ffffff',\r\n  '--mlink-input-border': '#ced4da',\r\n  '--mlink-input-text': '#212529',\r\n  '--mlink-input-placeholder': '#adb5bd',\r\n  '--mlink-success': '#198754',\r\n  '--mlink-error': '#dc3545',\r\n  '--mlink-warning': '#ffc107',\r\n  // Sizing\r\n  '--mlink-border-radius': '12px',\r\n  '--mlink-button-radius': '8px',\r\n  '--mlink-input-radius': '8px',\r\n  // Shadows\r\n  '--mlink-shadow': '0 2px 8px rgba(0, 0, 0, 0.08)',\r\n};\r\n\r\nexport const darkTheme: MlinkTheme = {\r\n  // Colors\r\n  '--mlink-bg-primary': '#1a1a1a',\r\n  '--mlink-bg-secondary': '#2d2d2d',\r\n  '--mlink-border-color': '#404040',\r\n  '--mlink-text-primary': '#ffffff',\r\n  '--mlink-text-secondary': '#a0a0a0',\r\n  '--mlink-text-link': '#60a5fa',\r\n  '--mlink-button-bg': '#ffffff',\r\n  '--mlink-button-text': '#1a1a1a',\r\n  '--mlink-button-hover': '#e5e5e5',\r\n  '--mlink-button-disabled': '#525252',\r\n  '--mlink-input-bg': '#2d2d2d',\r\n  '--mlink-input-border': '#404040',\r\n  '--mlink-input-text': '#ffffff',\r\n  '--mlink-input-placeholder': '#6b7280',\r\n  '--mlink-success': '#22c55e',\r\n  '--mlink-error': '#ef4444',\r\n  '--mlink-warning': '#f59e0b',\r\n  // Sizing\r\n  '--mlink-border-radius': '12px',\r\n  '--mlink-button-radius': '8px',\r\n  '--mlink-input-radius': '8px',\r\n  // Shadows\r\n  '--mlink-shadow': '0 2px 8px rgba(0, 0, 0, 0.3)',\r\n};\r\n\r\nexport const mantleTheme: MlinkTheme = {\r\n  // Colors - Mantle brand colors\r\n  '--mlink-bg-primary': '#0a0a0a',\r\n  '--mlink-bg-secondary': '#141414',\r\n  '--mlink-border-color': '#2a2a2a',\r\n  '--mlink-text-primary': '#ffffff',\r\n  '--mlink-text-secondary': '#9ca3af',\r\n  '--mlink-text-link': '#65d9e4',\r\n  '--mlink-button-bg': '#65d9e4',\r\n  '--mlink-button-text': '#000000',\r\n  '--mlink-button-hover': '#85e3ec',\r\n  '--mlink-button-disabled': '#374151',\r\n  '--mlink-input-bg': '#1f1f1f',\r\n  '--mlink-input-border': '#374151',\r\n  '--mlink-input-text': '#ffffff',\r\n  '--mlink-input-placeholder': '#6b7280',\r\n  '--mlink-success': '#34d399',\r\n  '--mlink-error': '#f87171',\r\n  '--mlink-warning': '#fbbf24',\r\n  // Sizing\r\n  '--mlink-border-radius': '16px',\r\n  '--mlink-button-radius': '10px',\r\n  '--mlink-input-radius': '10px',\r\n  // Shadows\r\n  '--mlink-shadow': '0 4px 16px rgba(101, 217, 228, 0.1)',\r\n};\r\n\r\nexport const themePresets: Record<MlinkThemePreset, MlinkTheme> = {\r\n  light: lightTheme,\r\n  dark: darkTheme,\r\n  mantle: mantleTheme,\r\n};\r\n\r\nexport function resolveTheme(\r\n  theme?: Partial<MlinkTheme> | MlinkThemePreset\r\n): MlinkTheme {\r\n  if (!theme) {\r\n    return darkTheme;\r\n  }\r\n\r\n  if (typeof theme === 'string') {\r\n    return themePresets[theme] || darkTheme;\r\n  }\r\n\r\n  // Merge custom theme with dark theme as base\r\n  return { ...darkTheme, ...theme };\r\n}\r\n\r\nexport function themeToCSS(theme: MlinkTheme): React.CSSProperties {\r\n  return theme as unknown as React.CSSProperties;\r\n}\r\n","'use client';\r\n\r\nimport React, { createContext, useContext, useMemo } from 'react';\r\nimport type { MlinkProviderConfig, MlinkTheme } from './types';\r\nimport type { ChainConfig } from '../types';\r\nimport { resolveTheme } from './themes';\r\nimport { DEFAULT_CHAIN } from '../constants';\r\n\r\ninterface MlinkContextValue {\r\n  theme: MlinkTheme;\r\n  defaultChain: ChainConfig;\r\n}\r\n\r\nconst MlinkContext = createContext<MlinkContextValue | null>(null);\r\n\r\nexport interface MlinkProviderProps extends MlinkProviderConfig {\r\n  children: React.ReactNode;\r\n}\r\n\r\nexport function MlinkProvider({\r\n  children,\r\n  theme,\r\n  defaultChain = DEFAULT_CHAIN,\r\n}: MlinkProviderProps) {\r\n  const resolvedTheme = useMemo(() => resolveTheme(theme), [theme]);\r\n\r\n  const value = useMemo(\r\n    () => ({\r\n      theme: resolvedTheme,\r\n      defaultChain,\r\n    }),\r\n    [resolvedTheme, defaultChain]\r\n  );\r\n\r\n  return (\r\n    <MlinkContext.Provider value={value}>{children}</MlinkContext.Provider>\r\n  );\r\n}\r\n\r\nexport function useMlinkContext(): MlinkContextValue {\r\n  const context = useContext(MlinkContext);\r\n  if (!context) {\r\n    // Return defaults if not wrapped in provider\r\n    return {\r\n      theme: resolveTheme('dark'),\r\n      defaultChain: DEFAULT_CHAIN,\r\n    };\r\n  }\r\n  return context;\r\n}\r\n","import type {\n  ActionButton,\n  ActionDefinition,\n  ActionMetadata,\n  TransactionRequest,\n  TransactionResponse,\n  LinkedAction,\n  TypedActionParameter,\n  ActionParameter,\n  ActionParameterSelectable,\n  ActionParameterOption,\n  ActionParameterType,\n  SelectableParameterType,\n  ActionLinks,\n} from './types';\nimport { validateTransactionRequest } from './validators';\n\n// Create a button action\nexport function button(config: {\n  label: string;\n  value: string;\n  disabled?: boolean;\n}): ActionButton {\n  return {\n    label: config.label,\n    value: config.value,\n    type: 'button',\n    disabled: config.disabled,\n  };\n}\n\n// Create an input action\nexport function input(config: {\n  label: string;\n  placeholder?: string;\n  disabled?: boolean;\n}): ActionButton {\n  return {\n    label: config.label,\n    value: '__input__',\n    type: 'input',\n    placeholder: config.placeholder,\n    disabled: config.disabled,\n  };\n}\n\n// =============================================================================\n// SOLANA-STYLE LINKED ACTIONS & PARAMETERS BUILDERS\n// =============================================================================\n\n/**\n * Create a linked action with optional parameters\n * Uses Solana-style href templates with {parameter} placeholders\n *\n * @example\n * ```ts\n * linkedAction({\n *   href: '/api/swap?amount={amount}&token={token}',\n *   label: 'Swap Tokens',\n *   parameters: [\n *     textParam({ name: 'amount', label: 'Amount', required: true }),\n *     selectParam({\n *       name: 'token',\n *       label: 'Token',\n *       options: [\n *         { label: 'USDC', value: '0x...' },\n *         { label: 'USDT', value: '0x...' }\n *       ]\n *     })\n *   ]\n * })\n * ```\n */\nexport function linkedAction(config: {\n  href: string;\n  label: string;\n  disabled?: boolean;\n  parameters?: TypedActionParameter[];\n}): LinkedAction {\n  return {\n    type: 'transaction',\n    href: config.href,\n    label: config.label,\n    disabled: config.disabled,\n    parameters: config.parameters,\n  };\n}\n\n/**\n * Create a simple linked action button (no parameters, just a static href)\n *\n * @example\n * ```ts\n * actionButton({\n *   href: '/api/tip?amount=1',\n *   label: 'Tip 1 MNT'\n * })\n * ```\n */\nexport function actionButton(config: {\n  href: string;\n  label: string;\n  disabled?: boolean;\n}): LinkedAction {\n  return {\n    type: 'transaction',\n    href: config.href,\n    label: config.label,\n    disabled: config.disabled,\n  };\n}\n\n/**\n * Create a text parameter\n */\nexport function textParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  pattern?: string;\n  patternDescription?: string;\n}): ActionParameter {\n  return {\n    type: 'text',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    pattern: config.pattern,\n    patternDescription: config.patternDescription,\n  };\n}\n\n/**\n * Create a number parameter\n */\nexport function numberParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  min?: number | string;\n  max?: number | string;\n}): ActionParameter {\n  return {\n    type: 'number',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    min: config.min,\n    max: config.max,\n  };\n}\n\n/**\n * Create an amount parameter (for token/ETH amounts)\n */\nexport function amountParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  min?: number | string;\n  max?: number | string;\n}): ActionParameter {\n  return {\n    type: 'amount',\n    name: config.name,\n    label: config.label || 'Amount',\n    required: config.required,\n    min: config.min,\n    max: config.max,\n  };\n}\n\n/**\n * Create an address parameter (for wallet addresses)\n */\nexport function addressParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n}): ActionParameter {\n  return {\n    type: 'address',\n    name: config.name,\n    label: config.label || 'Address',\n    required: config.required,\n    pattern: '^0x[a-fA-F0-9]{40}$',\n    patternDescription: 'Valid Ethereum address (0x...)',\n  };\n}\n\n/**\n * Create a select dropdown parameter\n */\nexport function selectParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  options: ActionParameterOption[];\n}): ActionParameterSelectable {\n  return {\n    type: 'select',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    options: config.options,\n  };\n}\n\n/**\n * Create a radio button group parameter\n */\nexport function radioParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  options: ActionParameterOption[];\n}): ActionParameterSelectable {\n  return {\n    type: 'radio',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    options: config.options,\n  };\n}\n\n/**\n * Create a checkbox parameter (multiple selection)\n */\nexport function checkboxParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  options: ActionParameterOption[];\n}): ActionParameterSelectable {\n  return {\n    type: 'checkbox',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    options: config.options,\n  };\n}\n\n/**\n * Create a date parameter\n */\nexport function dateParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n  min?: string;\n  max?: string;\n}): ActionParameter {\n  return {\n    type: 'date',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n    min: config.min,\n    max: config.max,\n  };\n}\n\n/**\n * Create a textarea parameter (multi-line text)\n */\nexport function textareaParam(config: {\n  name: string;\n  label?: string;\n  required?: boolean;\n}): ActionParameter {\n  return {\n    type: 'textarea',\n    name: config.name,\n    label: config.label,\n    required: config.required,\n  };\n}\n\n/**\n * Create an option for select/radio/checkbox parameters\n */\nexport function option(\n  label: string,\n  value: string,\n  selected?: boolean\n): ActionParameterOption {\n  return { label, value, selected };\n}\n\n/**\n * Create a links object with actions array\n *\n * @example\n * ```ts\n * createLinks([\n *   actionButton({ href: '/api/tip?amount=1', label: 'Tip 1 MNT' }),\n *   actionButton({ href: '/api/tip?amount=5', label: 'Tip 5 MNT' }),\n *   linkedAction({\n *     href: '/api/tip?amount={amount}',\n *     label: 'Custom Amount',\n *     parameters: [amountParam({ name: 'amount', required: true })]\n *   })\n * ])\n * ```\n */\nexport function createLinks(actions: LinkedAction[]): ActionLinks {\n  return { actions };\n}\n\n/**\n * Replace placeholders in href template with parameter values\n *\n * @example\n * ```ts\n * buildHref('/api/swap?amount={amount}&token={token}', { amount: '100', token: '0x...' })\n * // Returns: '/api/swap?amount=100&token=0x...'\n * ```\n */\nexport function buildHref(\n  template: string,\n  params: Record<string, string | string[]>\n): string {\n  let result = template;\n  for (const [key, value] of Object.entries(params)) {\n    const placeholder = `{${key}}`;\n    const replacement = Array.isArray(value) ? value.join(',') : value;\n    result = result.replace(new RegExp(placeholder, 'g'), encodeURIComponent(replacement));\n  }\n  return result;\n}\n\n/**\n * Extract parameter names from href template\n *\n * @example\n * ```ts\n * extractParams('/api/swap?amount={amount}&token={token}')\n * // Returns: ['amount', 'token']\n * ```\n */\nexport function extractParams(template: string): string[] {\n  const matches = template.match(/\\{([^}]+)\\}/g);\n  if (!matches) return [];\n  return matches.map((m) => m.slice(1, -1));\n}\n\n/**\n * Check if a linked action has parameters that need to be collected\n */\nexport function hasParameters(action: LinkedAction): boolean {\n  return Boolean(action.parameters && action.parameters.length > 0);\n}\n\n/**\n * Check if a parameter is selectable (select/radio/checkbox)\n */\nexport function isSelectableParam(\n  param: TypedActionParameter\n): param is ActionParameterSelectable {\n  return param.type === 'select' || param.type === 'radio' || param.type === 'checkbox';\n}\n\n// Action object returned by createAction\nexport interface Action {\n  getMetadata(): ActionMetadata;\n  handleRequest(request: TransactionRequest): Promise<TransactionResponse>;\n}\n\n/**\n * Extended action definition that supports both legacy actions and linked actions\n */\nexport interface ExtendedActionDefinition extends Omit<ActionDefinition, 'actions'> {\n  /** Primary button label */\n  label?: string;\n  /** Legacy actions array (backwards compatible) */\n  actions?: ActionButton[];\n  /** Solana-style linked actions */\n  links?: ActionLinks;\n}\n\n/**\n * Create a complete action with support for both legacy and Solana-style linked actions\n *\n * @example Legacy style (backwards compatible):\n * ```ts\n * createAction({\n *   title: 'Tip',\n *   icon: 'https://...',\n *   description: 'Send a tip',\n *   actions: [\n *     button({ label: '1 MNT', value: '1' }),\n *     input({ label: 'Custom' })\n *   ],\n *   handler: async (ctx) => ({ transaction: {...} })\n * })\n * ```\n *\n * @example Solana-style linked actions:\n * ```ts\n * createAction({\n *   title: 'Swap Tokens',\n *   icon: 'https://...',\n *   description: 'Swap tokens on DEX',\n *   links: createLinks([\n *     actionButton({ href: '/api/swap?amount=10', label: 'Swap 10' }),\n *     linkedAction({\n *       href: '/api/swap?amount={amount}&token={token}',\n *       label: 'Custom Swap',\n *       parameters: [\n *         amountParam({ name: 'amount', required: true }),\n *         selectParam({ name: 'token', options: [...] })\n *       ]\n *     })\n *   ]),\n *   handler: async (ctx) => ({ transaction: {...} })\n * })\n * ```\n */\nexport function createAction(definition: ExtendedActionDefinition): Action {\n  // Validate definition\n  if (!definition.title) throw new Error('Action title is required');\n  if (!definition.icon) throw new Error('Action icon is required');\n  if (!definition.description) throw new Error('Action description is required');\n\n  // Must have either actions or links\n  const hasLegacyActions = definition.actions && definition.actions.length > 0;\n  const hasLinkedActions = definition.links?.actions && definition.links.actions.length > 0;\n\n  if (!hasLegacyActions && !hasLinkedActions) {\n    throw new Error('At least one action or linked action is required');\n  }\n\n  if (typeof definition.handler !== 'function') {\n    throw new Error('Handler must be a function');\n  }\n\n  return {\n    getMetadata(): ActionMetadata {\n      return {\n        type: 'action',\n        title: definition.title,\n        icon: definition.icon,\n        description: definition.description,\n        label: definition.label,\n        actions: definition.actions,\n        links: definition.links,\n        disabled: definition.disabled,\n      };\n    },\n\n    async handleRequest(\n      request: TransactionRequest\n    ): Promise<TransactionResponse> {\n      // Validate request\n      const validation = validateTransactionRequest(request);\n      if (!validation.success) {\n        throw new Error(validation.error);\n      }\n\n      // Handle legacy actions\n      if (definition.actions) {\n        const selectedAction = definition.actions.find(\n          (a) => a.value === request.action || (a.type === 'input' && request.action === '__input__')\n        );\n\n        if (selectedAction) {\n          // If input type, require input value\n          if (selectedAction.type === 'input' && !request.input) {\n            throw new Error('Input value is required');\n          }\n        }\n      }\n\n      // Call handler with full context including data\n      const response = await definition.handler({\n        account: request.account,\n        action: request.action,\n        input: request.input,\n        data: request.data,\n      });\n\n      return response;\n    },\n  };\n}\n","'use client';\r\n\r\nimport React, { useState, useCallback, useMemo } from 'react';\r\nimport type { MlinkProps, MlinkTheme } from './types';\r\nimport type {\r\n  ActionButton,\r\n  LinkedAction,\r\n  TypedActionParameter,\r\n  ActionParameterSelectable,\r\n} from '../types';\r\nimport { useMlink } from './useMlink';\r\nimport { useExecuteMlink } from './useExecuteMlink';\r\nimport { useMlinkContext } from './MlinkProvider';\r\nimport { resolveTheme, themeToCSS } from './themes';\r\nimport { buildHref, hasParameters, isSelectableParam } from '../builders';\r\n\r\nexport function Mlink({\r\n  url,\r\n  adapter,\r\n  theme: themeProp,\r\n  onSuccess,\r\n  onError,\r\n  className = '',\r\n  stylePreset = 'default',\r\n  registryUrl,\r\n  requireRegistration = true,\r\n  allowPending = true,\r\n  allowBlocked = false,\r\n}: MlinkProps) {\r\n  const context = useMlinkContext();\r\n  const resolvedTheme = themeProp ? resolveTheme(themeProp) : context.theme;\r\n\r\n  const { status: fetchStatus, metadata, error: fetchError, registration } = useMlink(url, {\r\n    registryUrl,\r\n    requireRegistration,\r\n    allowPending,\r\n    allowBlocked,\r\n  });\r\n\r\n  const {\r\n    execute,\r\n    status: execStatus,\r\n    txHash,\r\n    error: execError,\r\n    reset,\r\n  } = useExecuteMlink({\r\n    adapter,\r\n    actionUrl: url,\r\n    onSuccess,\r\n    onError,\r\n  });\r\n\r\n  // State for legacy inputs\r\n  const [inputValues, setInputValues] = useState<Record<string, string>>({});\r\n\r\n  // State for linked action parameters\r\n  const [paramValues, setParamValues] = useState<Record<string, string | string[]>>({});\r\n\r\n  // Currently selected linked action (if showing parameter form)\r\n  const [selectedLinkedAction, setSelectedLinkedAction] = useState<LinkedAction | null>(null);\r\n\r\n  const handleInputChange = useCallback((actionValue: string, value: string) => {\r\n    setInputValues((prev) => ({ ...prev, [actionValue]: value }));\r\n  }, []);\r\n\r\n  const handleParamChange = useCallback((name: string, value: string | string[]) => {\r\n    setParamValues((prev) => ({ ...prev, [name]: value }));\r\n  }, []);\r\n\r\n  // Handle legacy action execution\r\n  const handleAction = useCallback(\r\n    async (action: ActionButton) => {\r\n      const input = action.type === 'input' ? inputValues[action.value] : undefined;\r\n      await execute(action.value, input);\r\n    },\r\n    [execute, inputValues]\r\n  );\r\n\r\n  // Handle linked action click\r\n  const handleLinkedAction = useCallback(\r\n    async (action: LinkedAction) => {\r\n      if (hasParameters(action)) {\r\n        // Show parameter form\r\n        setSelectedLinkedAction(action);\r\n        // Initialize param values with defaults\r\n        const defaults: Record<string, string | string[]> = {};\r\n        action.parameters?.forEach((param) => {\r\n          if (isSelectableParam(param)) {\r\n            const selectedOption = param.options.find((o) => o.selected);\r\n            if (selectedOption) {\r\n              defaults[param.name] = param.type === 'checkbox' ? [selectedOption.value] : selectedOption.value;\r\n            }\r\n          }\r\n        });\r\n        setParamValues(defaults);\r\n      } else {\r\n        // Execute directly with href\r\n        await execute(action.href, undefined, {});\r\n      }\r\n    },\r\n    [execute]\r\n  );\r\n\r\n  // Execute linked action with parameters\r\n  const handleExecuteWithParams = useCallback(async () => {\r\n    if (!selectedLinkedAction) return;\r\n\r\n    // Build the final href with parameter values\r\n    const finalHref = buildHref(selectedLinkedAction.href, paramValues);\r\n\r\n    await execute(finalHref, undefined, paramValues);\r\n    setSelectedLinkedAction(null);\r\n    setParamValues({});\r\n  }, [selectedLinkedAction, paramValues, execute]);\r\n\r\n  // Cancel parameter form\r\n  const handleCancelParams = useCallback(() => {\r\n    setSelectedLinkedAction(null);\r\n    setParamValues({});\r\n  }, []);\r\n\r\n  // Check if we have linked actions\r\n  const hasLinkedActions = useMemo(() => {\r\n    return metadata?.links?.actions && metadata.links.actions.length > 0;\r\n  }, [metadata]);\r\n\r\n  // Loading/Validating state\r\n  if (fetchStatus === 'loading' || fetchStatus === 'validating') {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <MlinkSkeleton />\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  // Unregistered state\r\n  if (fetchStatus === 'unregistered') {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <MlinkUnregistered\r\n          message={fetchError || 'This MLink is not registered.'}\r\n          registryUrl={registryUrl}\r\n        />\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  // Blocked state\r\n  if (fetchStatus === 'blocked') {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <MlinkBlocked message={fetchError || 'This MLink has been blocked.'} />\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  // Error state\r\n  if (fetchStatus === 'error' || !metadata) {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <MlinkError message={fetchError || 'Failed to load action'} />\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  // Success state after transaction\r\n  if (execStatus === 'success' && txHash) {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <MlinkSuccess\r\n          message={metadata.title}\r\n          txHash={txHash}\r\n          onReset={reset}\r\n        />\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  // Parameter form for linked action\r\n  if (selectedLinkedAction && hasParameters(selectedLinkedAction)) {\r\n    return (\r\n      <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n        <div className=\"mlink-content\">\r\n          <h3 className=\"mlink-title\">{selectedLinkedAction.label}</h3>\r\n          <p className=\"mlink-description\">Fill in the details below</p>\r\n        </div>\r\n\r\n        {execError && (\r\n          <div className=\"mlink-error-banner\">{execError}</div>\r\n        )}\r\n\r\n        <div className=\"mlink-params\">\r\n          {selectedLinkedAction.parameters?.map((param) => (\r\n            <ParameterInput\r\n              key={param.name}\r\n              param={param}\r\n              value={paramValues[param.name] || ''}\r\n              onChange={(value) => handleParamChange(param.name, value)}\r\n              disabled={execStatus === 'executing'}\r\n            />\r\n          ))}\r\n        </div>\r\n\r\n        <div className=\"mlink-actions\">\r\n          <button\r\n            className=\"mlink-button\"\r\n            onClick={handleExecuteWithParams}\r\n            disabled={execStatus === 'executing'}\r\n          >\r\n            {execStatus === 'executing' ? <MlinkSpinner /> : selectedLinkedAction.label}\r\n          </button>\r\n          <button\r\n            className=\"mlink-button mlink-button-secondary\"\r\n            onClick={handleCancelParams}\r\n            disabled={execStatus === 'executing'}\r\n          >\r\n            Back\r\n          </button>\r\n        </div>\r\n      </MlinkContainer>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <MlinkContainer theme={resolvedTheme} className={className} preset={stylePreset}>\r\n      {/* Icon */}\r\n      <div className=\"mlink-icon\">\r\n        <img src={metadata.icon} alt={metadata.title} />\r\n      </div>\r\n\r\n      {/* Content */}\r\n      <div className=\"mlink-content\">\r\n        <h3 className=\"mlink-title\">{metadata.title}</h3>\r\n        <p className=\"mlink-description\">{metadata.description}</p>\r\n      </div>\r\n\r\n      {/* Error display */}\r\n      {execError && (\r\n        <div className=\"mlink-error-banner\">\r\n          {execError}\r\n        </div>\r\n      )}\r\n\r\n      {/* Linked Actions (Solana-style) */}\r\n      {hasLinkedActions && (\r\n        <div className=\"mlink-actions\">\r\n          {/* Quick action buttons (no parameters) */}\r\n          <div className=\"mlink-quick-actions\">\r\n            {metadata.links!.actions\r\n              .filter((a) => !hasParameters(a))\r\n              .map((action, index) => (\r\n                <button\r\n                  key={`${action.href}-${index}`}\r\n                  className=\"mlink-button mlink-button-quick\"\r\n                  onClick={() => handleLinkedAction(action)}\r\n                  disabled={metadata.disabled || action.disabled || execStatus === 'executing'}\r\n                >\r\n                  {execStatus === 'executing' ? <MlinkSpinner /> : action.label}\r\n                </button>\r\n              ))}\r\n          </div>\r\n\r\n          {/* Actions with parameters */}\r\n          {metadata.links!.actions\r\n            .filter((a) => hasParameters(a))\r\n            .map((action, index) => (\r\n              <button\r\n                key={`param-${action.href}-${index}`}\r\n                className=\"mlink-button mlink-button-custom\"\r\n                onClick={() => handleLinkedAction(action)}\r\n                disabled={metadata.disabled || action.disabled || execStatus === 'executing'}\r\n              >\r\n                {action.label}\r\n              </button>\r\n            ))}\r\n        </div>\r\n      )}\r\n\r\n      {/* Legacy Actions (backwards compatible) */}\r\n      {!hasLinkedActions && metadata.actions && (\r\n        <div className=\"mlink-actions\">\r\n          {metadata.actions.map((action, index) => (\r\n            <ActionButtonComponent\r\n              key={`${action.value}-${index}`}\r\n              action={action}\r\n              inputValue={inputValues[action.value] || ''}\r\n              onInputChange={(value) => handleInputChange(action.value, value)}\r\n              onExecute={() => handleAction(action)}\r\n              loading={execStatus === 'executing'}\r\n              disabled={metadata.disabled === true || action.disabled === true}\r\n            />\r\n          ))}\r\n        </div>\r\n      )}\r\n    </MlinkContainer>\r\n  );\r\n}\r\n\r\n// =============================================================================\r\n// PARAMETER INPUT COMPONENT\r\n// =============================================================================\r\n\r\ninterface ParameterInputProps {\r\n  param: TypedActionParameter;\r\n  value: string | string[];\r\n  onChange: (value: string | string[]) => void;\r\n  disabled: boolean;\r\n}\r\n\r\nfunction ParameterInput({ param, value, onChange, disabled }: ParameterInputProps) {\r\n  const strValue = Array.isArray(value) ? value.join(',') : value;\r\n\r\n  if (isSelectableParam(param)) {\r\n    return (\r\n      <SelectableParamInput\r\n        param={param}\r\n        value={value}\r\n        onChange={onChange}\r\n        disabled={disabled}\r\n      />\r\n    );\r\n  }\r\n\r\n  // Map parameter type to input type\r\n  const inputType = getInputType(param.type);\r\n\r\n  if (param.type === 'textarea') {\r\n    return (\r\n      <div className=\"mlink-param-group\">\r\n        {param.label && <label className=\"mlink-param-label\">{param.label}</label>}\r\n        <textarea\r\n          className=\"mlink-textarea\"\r\n          value={strValue}\r\n          onChange={(e) => onChange(e.target.value)}\r\n          disabled={disabled}\r\n          required={param.required}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"mlink-param-group\">\r\n      {param.label && (\r\n        <label className=\"mlink-param-label\">\r\n          {param.label}\r\n          {param.required && <span className=\"mlink-required\">*</span>}\r\n        </label>\r\n      )}\r\n      <input\r\n        type={inputType}\r\n        className=\"mlink-input\"\r\n        value={strValue}\r\n        onChange={(e) => onChange(e.target.value)}\r\n        disabled={disabled}\r\n        required={param.required}\r\n        pattern={param.pattern}\r\n        min={param.min?.toString()}\r\n        max={param.max?.toString()}\r\n        placeholder={param.label || param.name}\r\n      />\r\n      {param.patternDescription && (\r\n        <span className=\"mlink-param-hint\">{param.patternDescription}</span>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction SelectableParamInput({\r\n  param,\r\n  value,\r\n  onChange,\r\n  disabled,\r\n}: {\r\n  param: ActionParameterSelectable;\r\n  value: string | string[];\r\n  onChange: (value: string | string[]) => void;\r\n  disabled: boolean;\r\n}) {\r\n  const arrayValue = Array.isArray(value) ? value : value ? [value] : [];\r\n\r\n  if (param.type === 'select') {\r\n    return (\r\n      <div className=\"mlink-param-group\">\r\n        {param.label && (\r\n          <label className=\"mlink-param-label\">\r\n            {param.label}\r\n            {param.required && <span className=\"mlink-required\">*</span>}\r\n          </label>\r\n        )}\r\n        <select\r\n          className=\"mlink-select\"\r\n          value={arrayValue[0] || ''}\r\n          onChange={(e) => onChange(e.target.value)}\r\n          disabled={disabled}\r\n          required={param.required}\r\n        >\r\n          <option value=\"\">Select {param.label || param.name}</option>\r\n          {param.options.map((opt) => (\r\n            <option key={opt.value} value={opt.value}>\r\n              {opt.label}\r\n            </option>\r\n          ))}\r\n        </select>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  if (param.type === 'radio') {\r\n    return (\r\n      <div className=\"mlink-param-group\">\r\n        {param.label && (\r\n          <label className=\"mlink-param-label\">\r\n            {param.label}\r\n            {param.required && <span className=\"mlink-required\">*</span>}\r\n          </label>\r\n        )}\r\n        <div className=\"mlink-radio-group\">\r\n          {param.options.map((opt) => (\r\n            <label key={opt.value} className=\"mlink-radio-label\">\r\n              <input\r\n                type=\"radio\"\r\n                name={param.name}\r\n                value={opt.value}\r\n                checked={arrayValue[0] === opt.value}\r\n                onChange={(e) => onChange(e.target.value)}\r\n                disabled={disabled}\r\n              />\r\n              {opt.label}\r\n            </label>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  if (param.type === 'checkbox') {\r\n    return (\r\n      <div className=\"mlink-param-group\">\r\n        {param.label && (\r\n          <label className=\"mlink-param-label\">\r\n            {param.label}\r\n            {param.required && <span className=\"mlink-required\">*</span>}\r\n          </label>\r\n        )}\r\n        <div className=\"mlink-checkbox-group\">\r\n          {param.options.map((opt) => (\r\n            <label key={opt.value} className=\"mlink-checkbox-label\">\r\n              <input\r\n                type=\"checkbox\"\r\n                value={opt.value}\r\n                checked={arrayValue.includes(opt.value)}\r\n                onChange={(e) => {\r\n                  if (e.target.checked) {\r\n                    onChange([...arrayValue, opt.value]);\r\n                  } else {\r\n                    onChange(arrayValue.filter((v) => v !== opt.value));\r\n                  }\r\n                }}\r\n                disabled={disabled}\r\n              />\r\n              {opt.label}\r\n            </label>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nfunction getInputType(paramType?: string): string {\r\n  switch (paramType) {\r\n    case 'number':\r\n    case 'amount':\r\n      return 'number';\r\n    case 'email':\r\n      return 'email';\r\n    case 'url':\r\n      return 'url';\r\n    case 'date':\r\n      return 'date';\r\n    case 'datetime-local':\r\n      return 'datetime-local';\r\n    case 'address':\r\n    case 'token':\r\n    case 'text':\r\n    default:\r\n      return 'text';\r\n  }\r\n}\r\n\r\n// =============================================================================\r\n// HELPER COMPONENTS\r\n// =============================================================================\r\n\r\n// Container component\r\ninterface MlinkContainerProps {\r\n  theme: MlinkTheme;\r\n  className: string;\r\n  preset: 'default' | 'compact' | 'minimal';\r\n  children: React.ReactNode;\r\n}\r\n\r\nfunction MlinkContainer({ theme, className, preset, children }: MlinkContainerProps) {\r\n  return (\r\n    <div\r\n      className={`mlink-container mlink-${preset} ${className}`}\r\n      style={themeToCSS(theme)}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n\r\n// Skeleton loading component\r\nfunction MlinkSkeleton() {\r\n  return (\r\n    <div className=\"mlink-skeleton\">\r\n      <div className=\"mlink-skeleton-icon\" />\r\n      <div className=\"mlink-skeleton-content\">\r\n        <div className=\"mlink-skeleton-title\" />\r\n        <div className=\"mlink-skeleton-description\" />\r\n      </div>\r\n      <div className=\"mlink-skeleton-button\" />\r\n    </div>\r\n  );\r\n}\r\n\r\n// Error component\r\nfunction MlinkError({ message }: { message: string }) {\r\n  return (\r\n    <div className=\"mlink-error\">\r\n      <div className=\"mlink-error-icon\">!</div>\r\n      <p className=\"mlink-error-message\">{message}</p>\r\n    </div>\r\n  );\r\n}\r\n\r\n// Unregistered component\r\nfunction MlinkUnregistered({ message, registryUrl }: { message: string; registryUrl?: string }) {\r\n  const registerUrl = registryUrl\r\n    ? `${registryUrl}/dashboard/register`\r\n    : 'https://mlink-client.vercel.app/dashboard/register';\r\n\r\n  return (\r\n    <div className=\"mlink-unregistered\">\r\n      <div className=\"mlink-unregistered-icon\">\r\n        <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n          <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n          <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n        </svg>\r\n      </div>\r\n      <h3 className=\"mlink-unregistered-title\">Unregistered MLink</h3>\r\n      <p className=\"mlink-unregistered-message\">{message}</p>\r\n      <a\r\n        href={registerUrl}\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n        className=\"mlink-button\"\r\n      >\r\n        Register MLink\r\n      </a>\r\n    </div>\r\n  );\r\n}\r\n\r\n// Blocked component\r\nfunction MlinkBlocked({ message }: { message: string }) {\r\n  return (\r\n    <div className=\"mlink-blocked\">\r\n      <div className=\"mlink-blocked-icon\">\r\n        <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n          <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\r\n        </svg>\r\n      </div>\r\n      <h3 className=\"mlink-blocked-title\">Blocked MLink</h3>\r\n      <p className=\"mlink-blocked-message\">{message}</p>\r\n    </div>\r\n  );\r\n}\r\n\r\n// Success component\r\ninterface MlinkSuccessProps {\r\n  message: string;\r\n  txHash: string;\r\n  onReset: () => void;\r\n}\r\n\r\nfunction MlinkSuccess({ message, txHash, onReset }: MlinkSuccessProps) {\r\n  const shortHash = `${txHash.slice(0, 10)}...${txHash.slice(-8)}`;\r\n\r\n  return (\r\n    <div className=\"mlink-success\">\r\n      <div className=\"mlink-success-icon\">✓</div>\r\n      <h3 className=\"mlink-success-title\">Transaction Sent</h3>\r\n      <p className=\"mlink-success-message\">{message}</p>\r\n      <code className=\"mlink-success-hash\">{shortHash}</code>\r\n      <button className=\"mlink-button mlink-button-secondary\" onClick={onReset}>\r\n        Done\r\n      </button>\r\n    </div>\r\n  );\r\n}\r\n\r\n// Action button component (legacy)\r\ninterface ActionButtonComponentProps {\r\n  action: ActionButton;\r\n  inputValue: string;\r\n  onInputChange: (value: string) => void;\r\n  onExecute: () => void;\r\n  loading: boolean;\r\n  disabled: boolean;\r\n}\r\n\r\nfunction ActionButtonComponent({\r\n  action,\r\n  inputValue,\r\n  onInputChange,\r\n  onExecute,\r\n  loading,\r\n  disabled,\r\n}: ActionButtonComponentProps) {\r\n  if (action.type === 'input') {\r\n    return (\r\n      <div className=\"mlink-input-group\">\r\n        <input\r\n          type=\"text\"\r\n          className=\"mlink-input\"\r\n          placeholder={action.placeholder || action.label}\r\n          value={inputValue}\r\n          onChange={(e) => onInputChange(e.target.value)}\r\n          disabled={disabled || loading}\r\n        />\r\n        <button\r\n          className=\"mlink-button\"\r\n          onClick={onExecute}\r\n          disabled={disabled || loading || !inputValue.trim()}\r\n        >\r\n          {loading ? <MlinkSpinner /> : action.label}\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <button\r\n      className=\"mlink-button\"\r\n      onClick={onExecute}\r\n      disabled={disabled || loading}\r\n    >\r\n      {loading ? <MlinkSpinner /> : action.label}\r\n    </button>\r\n  );\r\n}\r\n\r\n// Spinner component\r\nfunction MlinkSpinner() {\r\n  return <span className=\"mlink-spinner\" />;\r\n}\r\n\r\nexport default Mlink;\r\n","'use client';\r\n\r\nimport { useMemo } from 'react';\r\nimport type {\r\n  MlinkAdapter,\r\n  WagmiAdapterConfig,\r\n  EthersAdapterConfig,\r\n} from './types';\r\nimport type { EVMTransaction } from '../types';\r\n\r\n/**\r\n * Create a Mlink adapter from wagmi hooks\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useAccount, useConnect, useSendTransaction } from 'wagmi';\r\n * import { useMlinkWagmiAdapter } from '@dipansrimany/mlink-sdk/react';\r\n *\r\n * function MyComponent() {\r\n *   const { address, isConnected } = useAccount();\r\n *   const { connectAsync, connectors } = useConnect();\r\n *   const { sendTransactionAsync } = useSendTransaction();\r\n *\r\n *   const adapter = useMlinkWagmiAdapter({\r\n *     address,\r\n *     isConnected,\r\n *     connect: async () => {\r\n *       await connectAsync({ connector: connectors[0] });\r\n *     },\r\n *     sendTransaction: sendTransactionAsync,\r\n *   });\r\n *\r\n *   return <Mlink url=\"...\" adapter={adapter} />;\r\n * }\r\n * ```\r\n */\r\nexport function useMlinkWagmiAdapter(config: WagmiAdapterConfig): MlinkAdapter {\r\n  const { address, isConnected, connect, sendTransaction } = config;\r\n\r\n  return useMemo(\r\n    () => ({\r\n      connect: async () => {\r\n        await connect();\r\n        if (!address) {\r\n          throw new Error('Failed to connect wallet');\r\n        }\r\n        return address;\r\n      },\r\n\r\n      signAndSendTransaction: async (transaction: EVMTransaction) => {\r\n        const txHash = await sendTransaction({\r\n          to: transaction.to as `0x${string}`,\r\n          value: BigInt(transaction.value),\r\n          data: transaction.data as `0x${string}`,\r\n          chainId: transaction.chainId,\r\n        });\r\n        return txHash;\r\n      },\r\n\r\n      isConnected: () => isConnected,\r\n\r\n      getAddress: () => address || null,\r\n    }),\r\n    [address, isConnected, connect, sendTransaction]\r\n  );\r\n}\r\n\r\n/**\r\n * Create a Mlink adapter from ethers.js signer\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useSigner } from 'some-ethers-provider';\r\n * import { useMlinkEthersAdapter } from '@dipansrimany/mlink-sdk/react';\r\n *\r\n * function MyComponent() {\r\n *   const { signer, connect } = useSigner();\r\n *\r\n *   const adapter = useMlinkEthersAdapter({\r\n *     signer,\r\n *     connect,\r\n *   });\r\n *\r\n *   return <Mlink url=\"...\" adapter={adapter} />;\r\n * }\r\n * ```\r\n */\r\nexport function useMlinkEthersAdapter(\r\n  config: EthersAdapterConfig\r\n): MlinkAdapter {\r\n  const { signer, connect } = config;\r\n\r\n  return useMemo(\r\n    () => ({\r\n      connect: async () => {\r\n        await connect();\r\n        if (!signer) {\r\n          throw new Error('Failed to connect wallet');\r\n        }\r\n        return await signer.getAddress();\r\n      },\r\n\r\n      signAndSendTransaction: async (transaction: EVMTransaction) => {\r\n        if (!signer) {\r\n          throw new Error('Wallet not connected');\r\n        }\r\n\r\n        const tx = await signer.sendTransaction({\r\n          to: transaction.to,\r\n          value: BigInt(transaction.value),\r\n          data: transaction.data,\r\n          chainId: transaction.chainId,\r\n        });\r\n\r\n        return tx.hash;\r\n      },\r\n\r\n      isConnected: () => signer !== null,\r\n\r\n      getAddress: () => null, // Ethers requires async call\r\n    }),\r\n    [signer, connect]\r\n  );\r\n}\r\n\r\n/**\r\n * Create a custom Mlink adapter\r\n *\r\n * @example\r\n * ```tsx\r\n * import { createMlinkAdapter } from '@dipansrimany/mlink-sdk/react';\r\n *\r\n * const adapter = createMlinkAdapter({\r\n *   connect: async () => {\r\n *     // Your connect logic\r\n *     return '0x...';\r\n *   },\r\n *   signAndSendTransaction: async (tx) => {\r\n *     // Your transaction logic\r\n *     return '0x...txHash';\r\n *   },\r\n *   isConnected: () => true,\r\n *   getAddress: () => '0x...',\r\n * });\r\n * ```\r\n */\r\nexport function createMlinkAdapter(adapter: MlinkAdapter): MlinkAdapter {\r\n  return adapter;\r\n}\r\n"]}