import type { StxOptions } from './types';
/**
 * Convert a kebab-case string to PascalCase.
 *
 * @example kebabToPascal("stx-link") // "StxLink"
 */
export declare function kebabToPascal(str: string): string;
/**
 * Convert a PascalCase string to kebab-case.
 *
 * @example pascalToKebab("StxLink") // "stx-link"
 */
export declare function pascalToKebab(str: string): string;
/** Singleton registry instance shared across the framework */
export declare const registry: ComponentRegistry;
/**
 * Context passed to builtin component render functions.
 */
export declare interface RenderContext {
  context: Record<string, any>
  filePath: string
  options: StxOptions
  dependencies: Set<string>
}
/**
 * Props resolved from component attributes, categorized by binding type.
 */
export declare interface ResolvedProps {
  static: Record<string, string | boolean>
  serverDynamic: Record<string, unknown>
  clientReactive: Record<string, string>
  events: Record<string, string>
}
/**
 * Definition for a builtin component that renders without a .stx file.
 */
export declare interface BuiltinComponentDef {
  name: string
  aliases: string[]
  render(props: ResolvedProps, slotContent: string, ctx: RenderContext): string
}
/**
 * Central registry for STX components.
 *
 * Manages builtin components (registered in-memory) and provides
 * file-based component resolution with multi-directory search.
 */
export declare class ComponentRegistry {
  builtins: Map<string, BuiltinComponentDef>;
  registerBuiltin(def: BuiltinComponentDef): void;
  isBuiltin(name: string): boolean;
  getBuiltin(name: string): BuiltinComponentDef | null;
  resolveFile(name: string, fromFile: string, options: StxOptions, parentContext?: Record<string, any>): Promise<string | null>;
}
