'use client' import { type Config, type GetPublicClientParameters, type GetPublicClientReturnType, getPublicClient, type ResolvedRegister, watchPublicClient, } from '@wagmi/core' import type { Compute, ConfigParameter } from '@wagmi/core/internal' import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector.js' import { useConfig } from './useConfig.js' export type UsePublicClientParameters< config extends Config = Config, chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, > = Compute< GetPublicClientParameters & ConfigParameter > export type UsePublicClientReturnType< config extends Config = Config, chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, > = GetPublicClientReturnType /** https://wagmi.sh/react/api/hooks/usePublicClient */ export function usePublicClient< config extends Config = ResolvedRegister['config'], chainId extends config['chains'][number]['id'] | number | undefined = | config['chains'][number]['id'] | undefined, >( parameters: UsePublicClientParameters = {}, ): UsePublicClientReturnType { const config = useConfig(parameters) return useSyncExternalStoreWithSelector( (onChange) => watchPublicClient(config, { onChange }), () => getPublicClient(config, parameters), () => getPublicClient(config, parameters), (x) => x, (a, b) => a?.uid === b?.uid, ) as any }