import { type TemplateResult } from 'lit';
import { type Clip, type VoiceOption } from '../../core/models';
import { LitDomRenderer } from '../../core/renderers/domRenderer';
import type { ClipConfigPanelTheme } from './ClipConfigPanel';
export type ClipConfigPanelTabKey = 'visual' | 'audio' | 'text' | 'voice';
export interface ClipConfigPanelCallbacks {
    onTabChange: (tab: ClipConfigPanelTabKey) => void;
    onTransformChange: (property: 'x' | 'y' | 'scale', value: number) => void;
    onPresetSelect: (x: number, y: number) => void;
    onVolumeChange: (value: number) => void;
    onTextContentInput: (value: string) => void;
    onTextContentCommit: () => void;
    onTextStyleChange: (property: 'fontSize' | 'color' | 'rotation' | 'x' | 'y', value: number | string) => void;
    onVoiceFilterChange: (tag: string) => void;
    onVoiceSelect: (voiceId: string) => void;
    onVoiceFollowTextUpdatesChange: (value: boolean) => void;
    onGenerateVoice: () => Promise<void>;
}
export interface ClipConfigPanelViewModel {
    clip: Clip | null;
    activeTab: ClipConfigPanelTabKey;
    theme: ClipConfigPanelTheme;
    emptyStateIconSvg: string;
    loadingIconSvg: string;
    selectedIconSvg: string;
    textDraftContent: string;
    voiceCatalog: VoiceOption[];
    selectedVoiceId: string | null;
    previewingVoiceId: string | null;
    activeVoiceFilterTag: string | null;
    followTextUpdates: boolean;
    isVoiceLoadingOverlayVisible: boolean;
    isVoiceLoadingOverlayExiting: boolean;
    voiceErrorMessage: string | null;
    callbacks: ClipConfigPanelCallbacks;
}
export declare const CLIP_CONFIG_CSS_CLASSES: {
    readonly container: "clip-config-panel";
    readonly tabBar: "clip-config-tab-bar";
    readonly tabButton: "clip-config-tab-button";
    readonly content: "clip-config-content";
    readonly visualPanel: "clip-config-visual-panel";
    readonly audioPanel: "clip-config-audio-panel";
    readonly textPanel: "clip-config-text-panel";
    readonly voicePanel: "clip-config-voice-panel";
    readonly actionBar: "clip-config-action-bar";
    readonly section: "clip-config-section";
    readonly sectionTitle: "clip-config-section-title";
    readonly row: "clip-config-row";
    readonly label: "clip-config-label";
    readonly slider: "clip-config-slider";
    readonly input: "clip-config-input";
    readonly textarea: "clip-config-textarea";
    readonly colorInput: "clip-config-color-input";
    readonly presetGrid: "clip-config-preset-grid";
    readonly presetButton: "clip-config-preset-button";
    readonly resetButton: "clip-config-reset-button";
    readonly emptyState: "clip-config-empty-state";
    readonly filterGroup: "clip-config-filter-group";
    readonly filterButton: "clip-config-filter-button";
    readonly voiceCardGrid: "clip-config-voice-grid";
    readonly voiceCard: "clip-config-voice-card";
    readonly voiceCardAvatar: "clip-config-voice-avatar";
    readonly voiceCardMeta: "clip-config-voice-meta";
    readonly voiceCardTitle: "clip-config-voice-title";
    readonly voiceCardSubtitle: "clip-config-voice-subtitle";
    readonly voiceCardCheck: "clip-config-voice-check";
    readonly voiceCardPreviewBadge: "clip-config-voice-preview-badge";
    readonly voiceCardAvatarWrap: "clip-config-voice-avatar-wrap";
    readonly voiceCardAvatarWrapFirstRow: "clip-config-voice-avatar-wrap--first-row";
    readonly voiceCardAvatarTooltip: "clip-config-voice-avatar-tooltip";
    readonly voiceCardAvatarMask: "clip-config-voice-avatar-mask";
    readonly voiceCardAvatarSpeaker: "clip-config-voice-avatar-speaker";
    readonly voiceCheckbox: "clip-config-voice-checkbox";
    readonly primaryButton: "clip-config-primary-button";
    readonly errorText: "clip-config-error-text";
    readonly voiceLoadingOverlay: "clip-config-voice-loading-overlay";
    readonly voiceLoadingCard: "clip-config-voice-loading-card";
    readonly voiceLoadingIcon: "clip-config-voice-loading-icon";
    readonly voiceLoadingText: "clip-config-voice-loading-text";
};
export declare class ClipConfigPanelRenderer extends LitDomRenderer<ClipConfigPanelViewModel> {
    protected renderTemplate(viewModel: ClipConfigPanelViewModel): TemplateResult;
    private renderVoiceLoadingOverlay;
    private renderEmptyState;
    private renderPanel;
    /** 音色 Tab 下由列表区域单独滚动，筛选条保持在外层固定不动 */
    private shouldUseVoiceInnerScroll;
    private renderTabPanel;
    private renderTabBar;
    private renderActionBar;
    private renderVoiceActionBar;
    private renderVisualPanel;
    private renderPositionSection;
    private renderScaleSection;
    private renderAudioPanel;
    private renderTextPanel;
    private renderVoicePanel;
    private renderFilterButton;
    private renderVoiceCard;
    private renderPositionControl;
    private renderPresetGrid;
    private renderSectionTitle;
    private renderRangeInput;
    private renderNumberInput;
    private renderLabeledNumberInput;
    private getContainerStyle;
    private getSliderStyle;
    private getAvailableTabs;
    private supportsVoicePanel;
    private getTransform;
    private calculatePresetPosition;
    private resizeSvg;
}
