import { PrimaryPublication, PublicationSearchRequest, PublicationSearchWhere } from '@lens-protocol/api-bindings';
import { PaginatedArgs, PaginatedReadResult } from "../helpers/reads.js";
import { SuspenseEnabled, SuspensePaginatedResult } from "../helpers/suspense.js";
/**
 * {@link useSearchPublications} hook arguments
 */
export type UseSearchPublicationsArgs = PaginatedArgs<PublicationSearchRequest>;
export type { PublicationSearchRequest, PublicationSearchWhere };
/**
 * {@link useSearchPublications} hook arguments with Suspense support
 *
 * @experimental This API can change without notice
 */
export type UseSuspenseSearchPublicationsArgs = SuspenseEnabled<UseSearchPublicationsArgs>;
/**
 * Search for publications based on a defined criteria.
 *
 * Search for publications with content that contains "foo"
 * ```tsx
 * const { data, error, loading } = useSearchPublications({ query: 'foo' });
 *
 * if (loading) return <Loader />;
 *
 * if (error) return <Error message={error.message} />;
 *
 * return (
 *   <>
 *     {data.map((publication) => (
 *       <PublicationCard key={publication.id} publication={publication} />
 *     ))}
 *   </>
 * );
 * ```
 *
 * Search for audio post publications with content that matches a query
 * ```tsx
 * const { data, error, loading } = useSearchPublications({
 *   query: '...',
 *   where: {
 *     publicationTypes: [SearchPublicationType.Post],
 *     metadata: {
 *       mainContentFocus: [PublicationMetadataMainFocusType.Audio],
 *     },
 *   },
 * });
 *
 * if (loading) return <Loader />;
 *
 * if (error) return <Error message={error.message} />;
 *
 * return (
 *   <>
 *     {data.map((publication) => (
 *       <PublicationCard key={publication.id} publication={publication} />
 *     ))}
 *   </>
 * );
 * ```
 *
 * @category Discovery
 * @group Hooks
 */
export declare function useSearchPublications(args: UseSearchPublicationsArgs): PaginatedReadResult<PrimaryPublication[]>;
/**
 * Search for publications based on a defined criteria.
 *
 * This signature supports [React Suspense](https://react.dev/reference/react/Suspense).
 *
 * ```tsx
 * const { data } = useSearchPublications({
 *   query: 'foo',
 *   suspense: true,
 * });
 *
 * console.log(data);
 * ```
 *
 * Use [startTransition](https://react.dev/reference/react/startTransition) to avoid to re-suspend the component.
 *
 * ```tsx
 * const [query, setQuery] = useState('foo');
 *
 * const { data } = useSearchPublications({
 *   query,
 *   suspense: true,
 * });
 *
 * const search = () => {
 *   startTransition(() => {
 *     setQuery('bar');
 *   });
 * };
 * ```
 *
 * @experimental This API can change without notice
 * @category Discovery
 * @group Hooks
 */
export declare function useSearchPublications(args: UseSuspenseSearchPublicationsArgs): SuspensePaginatedResult<PrimaryPublication[]>;
