@tachui/modifiers
Version:
Essential styling modifiers for tachUI framework
154 lines • 5.14 kB
TypeScript
/**
* Base Modifier System Implementation
*
* Core modifier classes and utilities for the SwiftUI-inspired modifier system.
*/
import type { DOMNode } from '@tachui/core/runtime/types';
import type { CSSStyleProperties, Modifier, ModifierContext, ReactiveModifierProps, StyleComputationContext } from './types';
import { ModifierPriority } from '@tachui/core/modifiers/types';
/**
* Abstract base modifier class
*/
export declare abstract class BaseModifier<TProps = {}> implements Modifier<TProps> {
readonly properties: TProps;
abstract readonly type: string;
abstract readonly priority: number;
constructor(properties: TProps);
/**
* Apply the modifier to a DOM node
*/
abstract apply(node: DOMNode, context: ModifierContext): DOMNode | undefined;
/**
* Helper to resolve reactive properties
*/
protected resolveReactiveProps<T extends Record<string, any>>(props: ReactiveModifierProps<T>, context: StyleComputationContext): T;
/**
* Apply a single style change to an element with reactive support
*/
protected applyStyleChange(element: Element, property: string, value: any): void;
/**
* Convert camelCase property to CSS kebab-case
*/
protected toCSSProperty(property: string): string;
/**
* Convert value to CSS value string
*/
protected toCSSValue(value: any): string;
/**
* Convert value to CSS value string with property-specific handling
*/
protected toCSSValueForProperty(property: string, value: any): string;
/**
* Apply multiple CSS properties to an element with reactive support
*/
protected applyStyles(element: Element, styles: CSSStyleProperties): void;
/**
* Add CSS classes to an element
*/
protected addClasses(element: Element, classes: string[]): void;
/**
* Remove CSS classes from an element
*/
protected removeClasses(element: Element, classes: string[]): void;
/**
* Create a style computation context
*/
protected createStyleContext(componentId: string, element: Element, modifiers: Modifier[]): StyleComputationContext;
}
/**
* Layout modifier for frame, padding, margin
*/
export declare class LayoutModifier extends BaseModifier {
readonly type = "layout";
readonly priority = ModifierPriority.LAYOUT;
apply(node: DOMNode, context: ModifierContext): DOMNode | undefined;
private applyOffsetTransform;
private applyAspectRatio;
private applyScaleTransform;
private applyAbsolutePosition;
private applyZIndex;
private getTransformOrigin;
private computeLayoutStyles;
}
/**
* Appearance modifier for colors, fonts, borders, shadows
*/
export declare class AppearanceModifier extends BaseModifier {
readonly type = "appearance";
readonly priority = ModifierPriority.APPEARANCE;
apply(node: DOMNode, context: ModifierContext): DOMNode | undefined;
/**
* Apply Asset-based styles with theme reactivity
*/
private applyAssetBasedStyles;
/**
* Check if a value is an Asset object (including Asset proxies)
*/
private isAsset;
private computeAppearanceStyles;
/**
* Apply HTML attributes (ARIA, role, data attributes, etc.)
*/
private applyAttributes;
private findComponentFromElement;
}
/**
* Interaction modifier for events and accessibility
*/
export declare class InteractionModifier extends BaseModifier {
readonly type = "interaction";
readonly priority = ModifierPriority.INTERACTION;
apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined;
/**
* Setup long press gesture with timing and distance constraints
*/
private setupLongPressGesture;
/**
* Setup keyboard shortcut handling
*/
private setupKeyboardShortcut;
/**
* Setup focus management with reactive binding
*/
private setupFocusManagement;
/**
* Setup focusable behavior
*/
private setupFocusable;
/**
* Setup continuous hover tracking with coordinates
*/
private setupContinuousHover;
/**
* Setup hit testing control
*/
private setupHitTesting;
}
/**
* Animation modifier for transitions and animations
*/
export declare class AnimationModifier extends BaseModifier {
readonly type = "animation";
readonly priority = ModifierPriority.ANIMATION;
apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined;
private applyOverlay;
private getOverlayAlignment;
private createKeyframeRule;
private addKeyframesToStylesheet;
}
/**
* Lifecycle modifier for component lifecycle events
*/
export declare class LifecycleModifier extends BaseModifier {
readonly type = "lifecycle";
readonly priority = ModifierPriority.CUSTOM;
private activeAbortController?;
apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined;
private setupLifecycleObserver;
private setupTask;
private setupRefreshable;
private cleanupFunctions;
protected addCleanup(fn: () => void): void;
cleanup(): void;
}
//# sourceMappingURL=base.d.ts.map