@stacksjs/stx
Version:
A performant UI Framework. Powered by Bun.
229 lines • 5.28 kB
TypeScript
import type { CompiledTemplate } from './craft-ssr';
/**
* Compile stx template to native Craft code
*/
export declare function compileToNative(template: string | CompiledTemplate, config?: Partial<CompilerConfig>): Promise<CompiledNativeCode>;
/**
* Create hot reload server
*/
export declare function createHotReloadServer(_config: HotReloadConfig): {
start: () => Promise<void>
stop: () => Promise<void>
notifyChange: (path: string) => void
};
/**
* Compiler configuration
*/
export declare interface CompilerConfig {
target: CompilationTarget
format: CompilationFormat
optimize: boolean
treeShake: boolean
hotReload: boolean
debug: boolean
sourceMaps: boolean
bundle: boolean
minify: boolean
components?: Map<string, NativeComponentDefinition>
}
/**
* Native component definition
*/
export declare interface NativeComponentDefinition {
name: string
zigType: string
props: NativePropDefinition[]
children?: 'single' | 'multiple' | 'none'
platform?: CompilationTarget[]
fallback?: string
}
/**
* Property definition for native components
*/
export declare interface NativePropDefinition {
name: string
type: 'string' | 'number' | 'boolean' | 'color' | 'callback' | 'object' | 'array'
required: boolean
default?: unknown
zigType?: string
}
/**
* Compiled native code output
*/
export declare interface CompiledNativeCode {
code: string
platformCode: Map<CompilationTarget, string>
dependencies: CompilerDependencyNode[]
manifest: ComponentManifest
sourceMaps?: string
stats: CompilationStats
}
/**
* Dependency node in the graph
*/
export declare interface CompilerDependencyNode {
id: string
type: 'component' | 'style' | 'script' | 'asset'
path: string
dependencies: string[]
size: number
isStatic: boolean
}
/**
* Component manifest
*/
export declare interface ComponentManifest {
version: string
components: ManifestComponent[]
entry: string
assets: ManifestAsset[]
styles: string[]
}
/**
* Component entry in manifest
*/
export declare interface ManifestComponent {
name: string
hash: string
props: string[]
events: string[]
slots: string[]
isNative: boolean
}
/**
* Asset entry in manifest
*/
export declare interface ManifestAsset {
path: string
type: 'image' | 'font' | 'icon' | 'other'
hash: string
size: number
}
/**
* Compilation statistics
*/
export declare interface CompilationStats {
compilationTime: number
totalComponents: number
nativeComponents: number
webComponents: number
bundleSize: number
treeShakenSize: number
warnings: CompilationWarning[]
errors: CompilationError[]
}
/**
* Compilation warning
*/
export declare interface CompilationWarning {
code: string
message: string
file?: string
line?: number
column?: number
}
/**
* Compilation error
*/
export declare interface CompilationError extends CompilationWarning {
fatal: boolean
}
/**
* Native IR (Intermediate Representation) node
*/
export declare interface NativeIRNode {
type: 'view' | 'text' | 'image' | 'button' | 'input' | 'scroll' | 'list' | 'custom'
zigType: string
props: Record<string, IRValue>
children: NativeIRNode[]
events: Map<string, string>
styles: IRStyle
id?: string
key?: string
}
/**
* IR style definition
*/
export declare interface IRStyle {
layout: LayoutStyle
appearance: AppearanceStyle
text?: TextStyle
}
/**
* Layout style properties
*/
export declare interface LayoutStyle {
display?: 'flex' | 'grid' | 'block' | 'none'
flexDirection?: 'row' | 'column'
justifyContent?: 'start' | 'center' | 'end' | 'between' | 'around'
alignItems?: 'start' | 'center' | 'end' | 'stretch'
gap?: number
padding?: number | [number, number, number, number]
margin?: number | [number, number, number, number]
width?: number | 'auto' | string
height?: number | 'auto' | string
minWidth?: number
maxWidth?: number
minHeight?: number
maxHeight?: number
}
/**
* Appearance style properties
*/
export declare interface AppearanceStyle {
backgroundColor?: string
borderColor?: string
borderWidth?: number
borderRadius?: number
opacity?: number
shadow?: ShadowStyle
}
/**
* Shadow style
*/
export declare interface ShadowStyle {
color: string
offsetX: number
offsetY: number
blur: number
spread: number
}
/**
* Text style properties
*/
export declare interface TextStyle {
fontFamily?: string
fontSize?: number
fontWeight?: 'normal' | 'bold' | 'light' | number
color?: string
textAlign?: 'left' | 'center' | 'right'
lineHeight?: number
letterSpacing?: number
}
/**
* Hot reload configuration
*/
export declare interface HotReloadConfig {
port: number
watchPaths: string[]
debounceMs: number
}
/**
* Target platform for compilation
*/
export type CompilationTarget = 'macos' | 'windows' | 'linux' | 'ios' | 'android' | 'universal'
/**
* Output format for compiled code
*/
export type CompilationFormat = 'zig' | 'typescript' | 'json' | 'binary'
/**
* IR value types
*/
export type IRValue = | { type: 'literal'; value: string | number | boolean }
| { type: 'binding'; path: string }
| { type: 'expression'; code: string }
| { type: 'callback'; handler: string }
export {
NATIVE_COMPONENTS,
};
export default craftCompiler;