import type { Component } from '../../../../../shared/contracts/components';
import type { ComponentsDictionary, Schema } from '../../../hooks/useDocument';
export interface DraftRelationCounts {
    unpublishedRelations: number;
    draftM2mLinks: number;
}
export declare const EMPTY_DRAFT_RELATION_COUNTS: DraftRelationCounts;
export declare const isBidirectionalManyToMany: (attribute: Schema["attributes"][string]) => boolean;
export declare const mergeDraftRelationCounts: (left: DraftRelationCounts, right: DraftRelationCounts) => DraftRelationCounts;
export declare const normalizeDraftRelationCounts: (payload: unknown) => DraftRelationCounts;
export declare const resolveDraftRelationCounts: (documentId: string | undefined, modified: boolean, localCounts: DraftRelationCounts, serverCounts: DraftRelationCounts) => DraftRelationCounts;
export interface DraftRelationsPublishState {
    hasUnpublishedRelations: boolean;
    hasDraftM2mLinks: boolean;
    hasDraftRelations: boolean;
    isM2mOnlyDraftRelations: boolean;
    dialogVariant: 'default' | 'danger';
    bodyIcon: 'default' | 'danger';
    confirmLabel: 'publish' | 'publish-without-relations';
}
export declare const getDraftRelationsPublishState: (counts: DraftRelationCounts) => DraftRelationsPublishState;
/**
 * Counts draft relations in unsaved form values, excluding self-referential relations
 * (preserved on publish via document-service self-referential-relations).
 */
export declare const countLocalDraftRelations: (data: Record<string, unknown>, schema: Schema | Component | undefined, components: ComponentsDictionary, contentTypeUid: string) => DraftRelationCounts;
