import Dimension from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/Dimension";
import DimensionOptions from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/DimensionOptions";
import type Question from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/Question";
import type Metadata from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/metadata/Metadata";
import type TemplateTagVariable from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/variables/TemplateTagVariable";
import type Variable from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/variables/Variable";
import type { DatasetQuery } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-types/api";
/**
 * An abstract class for all query types (StructuredQuery & NativeQuery)
 */
declare class Query {
    _metadata: Metadata;
    /**
     * Note that Question is not always in sync with _datasetQuery,
     * calling question() will always merge the latest _datasetQuery to the question object
     */
    _originalQuestion: Question;
    _datasetQuery: DatasetQuery;
    constructor(question: Question, datasetQuery: DatasetQuery);
    /**
     * Returns a question updated with the current dataset query.
     * Can only be applied to query that is a direct child of the question.
     */
    question: () => Question;
    /**
     * Convenience method for accessing the global metadata
     */
    metadata(): Metadata;
    /**
     * Returns the dataset_query object underlying this Query
     */
    datasetQuery(): DatasetQuery;
    setDatasetQuery(_datasetQuery: DatasetQuery): Query;
    /**
     *
     * Query is considered empty, i.e. it is in a plain state with no properties / query clauses set
     */
    isEmpty(): boolean;
    /**
     * Query is valid (as far as we know) and can be executed
     */
    canRun(): boolean;
    /**
     * Dimensions exposed by this query
     * NOTE: Ideally we'd also have `dimensions()` that returns a flat list, but currently StructuredQuery has it's own `dimensions()` for another purpose.
     */
    dimensionOptions(_filter?: (dimension: Dimension) => boolean): DimensionOptions;
    /**
     * Variables exposed by this query
     */
    variables(_filter?: (variable: Variable) => boolean): TemplateTagVariable[];
    parseFieldReference(fieldRef: any, query?: this): Dimension | null | undefined;
}
export default Query;
