import type { WebComponent } from '../types';
/**
 * Generate the reactive mixin for web components
 *
 * @returns JavaScript code for the reactive mixin
 */
export declare function generateReactiveMixin(): string;
/**
 * Generate reactive component JavaScript code
 *
 * @param component - Web component configuration
 * @param template - Component template HTML
 * @param options - Reactive options
 * @returns JavaScript code for the reactive component
 */
export declare function generateReactiveComponentJS(component: WebComponent, template: string, options?: ReactiveComponentOptions): string;
/**
 * Generate reactive component TypeScript code
 *
 * @param component - Web component configuration
 * @param template - Component template HTML
 * @param options - Reactive options
 * @returns TypeScript code for the reactive component
 */
export declare function generateReactiveComponentTS(component: WebComponent, template: string, options?: ReactiveComponentOptions): string;
/**
 * Generate the reactive runtime script for browser inclusion
 *
 * @returns Minified runtime script
 */
export declare function generateReactiveRuntime(): string;
/**
 * Reactive property definition
 */
export declare interface ReactiveProperty {
  name: string
  type: 'string' | 'number' | 'boolean' | 'object' | 'array'
  default?: unknown
  reflect?: boolean
}
/**
 * Computed property definition
 */
export declare interface ComputedProperty {
  name: string
  dependencies: string[]
  getter: string
}
/**
 * Watch definition
 */
export declare interface WatchDefinition {
  property: string
  handler: string
  immediate?: boolean
  deep?: boolean
}
/**
 * Reactive component options
 */
export declare interface ReactiveComponentOptions {
  properties?: ReactiveProperty[]
  computed?: ComputedProperty[]
  watchers?: WatchDefinition[]
  methods?: Record<string, string>
  lifecycle?: {
    connected?: string
    disconnected?: string
    adopted?: string
    attributeChanged?: string
  }
}
