/**
 * Creates a raw accessor for a single channel definition branch and attaches
 * metadata used by scale resolution and equality checks.
 *
 * @param {import("../spec/channel.js").Channel} channel
 * @param {import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>} channelDef
 * @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
 * @returns {import("../types/encoder.js").Accessor}
 */
export function createAccessor(channel: import("../spec/channel.js").Channel, channelDef: import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>, paramRuntime: {
    createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction;
}): import("../types/encoder.js").Accessor;
/**
 * @param {import("../types/encoder.js").Accessor} accessor
 * @returns {accessor is import("../types/encoder.js").ScaleAccessor}
 */
export function isScaleAccessor(accessor: import("../types/encoder.js").Accessor): accessor is import("../types/encoder.js").ScaleAccessor;
/**
 * Builds domain key strings in the format:
 * - domainKeyBase: <scaleChannel>|<kind>|<value>
 * - domainKey: <type>|<domainKeyBase>
 *
 * @param {object} options
 * @param {import("../spec/channel.js").ChannelWithScale} options.scaleChannel
 * @param {DomainKeySource} options.source
 * @param {import("../spec/channel.js").Type} [options.type]
 * @returns {{ domainKeyBase: string, domainKey?: string }}
 */
export function buildDomainKey({ scaleChannel, source, type }: {
    scaleChannel: import("../spec/channel.js").ChannelWithScale;
    source: DomainKeySource;
    type?: import("../spec/channel.js").Type;
}): {
    domainKeyBase: string;
    domainKey?: string;
};
/**
 * @param {import("../types/encoder.js").ScaleAccessor} accessor
 * @param {import("../spec/channel.js").Type} type
 * @returns {string}
 */
export function getAccessorDomainKey(accessor: import("../types/encoder.js").ScaleAccessor, type: import("../spec/channel.js").Type): string;
export type DomainKeySource = {
    kind: "field";
    value: string;
} | {
    kind: "expr";
    value: string;
} | {
    kind: "datum";
    value: import("../spec/channel.js").Scalar | import("../spec/parameter.js").ExprRef;
} | {
    kind: "value";
    value: import("../spec/channel.js").Scalar | import("../spec/parameter.js").ExprRef;
};
//# sourceMappingURL=accessor.d.ts.map