/**
 * Reusable field bundles for common content patterns.
 *
 * Each preset returns a `Record<string, FieldDefinition>` you can spread into
 * a collection's `fields` map:
 *
 * ```ts
 * import { titleField, slugField, richContentField, seoFields } from
 *   '@actuate-media/cms-core'
 *
 * defineConfig({
 *   collections: {
 *     pages: {
 *       slug: 'pages',
 *       labels: { singular: 'Page', plural: 'Pages' },
 *       fields: {
 *         ...titleField(),
 *         ...slugField(),
 *         ...richContentField(),
 *         ...seoFields(),
 *       },
 *     },
 *   },
 * })
 * ```
 *
 * Presets are intentionally additive — call sites can override any single
 * field by re-declaring it after the spread.
 */
import type { FieldDefinition } from '../config/types.js';
/** Page/post title field — usually the column shown in admin lists. */
export declare function titleField(opts?: {
    label?: string;
    required?: boolean;
    placeholder?: string;
}): Record<string, FieldDefinition>;
/** URL slug. Defaults to deriving from `title`. */
export declare function slugField(opts?: {
    from?: string;
    required?: boolean;
}): Record<string, FieldDefinition>;
/**
 * Explicit URL path for a page. Distinct from `slug`: a `slug` is the
 * URL-friendly identifier auto-derived from the title, while `path` is the full
 * route the page renders at (e.g. `/`, `/about`, `/services/seo`), so a site can
 * model nested or custom routes the slug alone can't express. Optional — the
 * renderer falls back to `/${slug}` when it's blank.
 */
export declare function pagePathField(opts?: {
    label?: string;
    required?: boolean;
}): Record<string, FieldDefinition>;
/** Short excerpt / dek shown in listings and OG cards. */
export declare function excerptField(opts?: {
    label?: string;
    maxLength?: number;
}): Record<string, FieldDefinition>;
/** Long-form rich text content. */
export declare function richContentField(opts?: {
    name?: string;
    label?: string;
    required?: boolean;
}): Record<string, FieldDefinition>;
/** Featured/hero image. */
export declare function featuredImageField(opts?: {
    label?: string;
    required?: boolean;
}): Record<string, FieldDefinition>;
/** Tags (array of plain strings). */
export declare function tagsField(opts?: {
    label?: string;
    maxRows?: number;
}): Record<string, FieldDefinition>;
/** Published-at datetime. */
export declare function publishedDateField(): Record<string, FieldDefinition>;
/** Author byline — text + optional relationship to a `team` collection. */
export declare function authorField(opts?: {
    relationTo?: string;
    label?: string;
}): Record<string, FieldDefinition>;
/** Pull-quote / featured quote, used by case studies and testimonials. */
export declare function quoteField(opts?: {
    label?: string;
    name?: string;
}): Record<string, FieldDefinition>;
/** Call-to-action label + URL pair. */
export declare function ctaField(opts?: {
    name?: string;
    label?: string;
}): Record<string, FieldDefinition>;
/** SEO meta fields — meta title, description, OG image, canonical, robots. */
export declare function seoFields(): Record<string, FieldDefinition>;
/** Address + phone + hours fields for location-style records. */
export declare function locationFields(): Record<string, FieldDefinition>;
/** Geo coordinates pair — useful for Schema.org Place / LocalBusiness. */
export declare function geoFields(): Record<string, FieldDefinition>;
/** Price + currency pair — used by service / product types. */
export declare function priceFields(opts?: {
    currency?: string;
}): Record<string, FieldDefinition>;
/**
 * Single-reference relation preset. Use when a document points at exactly
 * one other document — e.g. `post → primaryService`, `caseStudy → client`,
 * `page → location`. The admin renders this with the {@link RelationshipField}
 * picker.
 *
 * @example
 *   ...relationField('primaryService', { relationTo: 'services', label: 'Primary service' })
 */
export declare function relationField(name: string, opts: {
    relationTo: string | string[];
    label?: string;
    required?: boolean;
    description?: string;
}): Record<string, FieldDefinition>;
/**
 * Many-relation preset. Use when a document can point at zero-or-more
 * peers — e.g. `post.relatedPosts`, `service.relatedCaseStudies`,
 * `caseStudy.featuredTeamMembers`. Always renders as a multi-select picker.
 *
 * @example
 *   ...relatedDocsField('relatedPosts', { relationTo: 'posts' })
 */
export declare function relatedDocsField(name: string, opts: {
    relationTo: string | string[];
    label?: string;
    description?: string;
}): Record<string, FieldDefinition>;
//# sourceMappingURL=presets.d.ts.map