@web-atoms/core
Version:
96 lines • 4.34 kB
TypeScript
import { App } from "../App";
import { IAnyInstanceType, IDisposable, INotifyPropertyChanged, PathList } from "../core/types";
import type { AtomControl } from "../web/controls/AtomControl";
import { AtomDisposableList } from "./AtomDisposableList";
import { ObjectProperty } from "./AtomWatcher";
import { IValueConverter } from "./IValueConverter";
import XNode, { IElementAttributes, isControl, isFactorySymbol } from "./XNode";
export declare abstract class AtomComponent implements INotifyPropertyChanged {
readonly app: App;
static readonly [isControl] = true;
static readonly [isFactorySymbol] = true;
readonly disposables: AtomDisposableList;
readonly element: HTMLElement;
data: any;
viewModel: any;
localViewModel: any;
creator: any;
protected pendingInits: Array<() => void>;
private mInvalidated;
private mPendingPromises;
abstract get parent(): AtomControl;
/** Do not ever use, only available as intellisense feature for
* vs code editor.
*/
get vsProps(): {
[k in keyof this]?: this[k];
} | IElementAttributes;
private readonly eventHandlers;
private readonly bindings;
constructor(app: App, element?: HTMLElement);
abstract atomParent(e: HTMLElement): AtomControl;
bind(element: HTMLElement, name: string, path: PathList[], twoWays?: boolean | string[], valueFunc?: (...v: any[]) => any, source?: any): IDisposable;
/**
* Remove all bindings associated with given element and optional name
* @param element T
* @param name string
*/
unbind(element: HTMLElement, name?: string): void;
bindEvent(element: HTMLElement, name?: string, method?: EventListenerOrEventListenerObject, key?: string, capture?: boolean | AddEventListenerOptions): IDisposable;
unbindEvent(element: HTMLElement, name?: string, method?: EventListenerOrEventListenerObject, key?: string): void;
/**
* Control checks if property is declared on the control or not.
* Since TypeScript no longer creates enumerable properties, we have
* to inspect name and PropertyMap which is generated by `@BindableProperty`
* or the value is not set to undefined.
* @param name name of Property
*/
hasProperty(name: string): boolean;
/**
* Use this method if you want to set attribute on HTMLElement immediately but
* defer atom control property
* @param element HTMLElement
* @param name string
* @param value any
*/
setPrimitiveValue(element: HTMLElement, name: string, value: any): void;
setLocalValue(element: HTMLElement, name: string, value: any): void;
dispose(e?: HTMLElement): void;
abstract append(element: HTMLElement | AtomControl): AtomControl;
onPropertyChanged(name: string): void;
beginEdit(): IDisposable;
invalidate(): void;
onUpdateUI(): void;
runAfterInit(f: () => void): void;
registerDisposable(d: IDisposable): IDisposable;
protected render(node: XNode, e?: any, creator?: any): void;
protected extractControlProperties(x: XNode, name?: string | Function): {};
protected create(): void;
protected preCreate(): void;
protected setElementValue(element: HTMLElement, name: string, value: any): void;
protected resolve<TService>(c: TService, selfName?: string | (() => any)): IAnyInstanceType<TService>;
protected pushInit(): void;
protected abstract createNode(app: any, e: any, iterator: any, creator: any): any;
protected abstract toTemplate(app: any, iterator: any, creator: any): any;
protected abstract get factory(): any;
}
export declare class PropertyBinding implements IDisposable {
private target;
readonly element: HTMLElement;
readonly name: string;
private twoWays;
private source;
path: ObjectProperty[][];
private watcher;
private twoWaysDisposable;
private isTwoWaySetup;
private isRunning;
private fromSourceToTarget;
private fromTargetToSource;
private disposed;
constructor(target: AtomControl | any, element: HTMLElement, name: string, path: PathList[], twoWays: boolean | string[], valueFunc: ((...v: any[]) => any) | IValueConverter, source: any);
setupTwoWayBinding(): void;
setInverseValue(value: any): void;
dispose(): void;
}
//# sourceMappingURL=AtomComponent.d.ts.map