diff --git a/src/index.ts b/src/index.ts index fcea0ba..a5bb068 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,22 +4,22 @@ type ComponentConstructor = (...args: any[]) => object; export abstract class AlpineComponent { /** Retrieve the root component DOM node. */ - $el?: HTMLElement; + $el!: HTMLElement; /** Retrieve DOM elements marked with x-ref inside the component. */ - $refs?: { [name: string]: HTMLElement }; + $refs!: { [name: string]: HTMLElement }; /** Retrieve the native browser "Event" object within an event listener. */ - $event?: Event; + $event!: Event; /** Create a CustomEvent and dispatch it using .dispatchEvent() internally. */ - $dispatch?: (event: string, data: object) => void; + $dispatch!: (event: string, data: object) => void; /** Execute a given expression AFTER Alpine has made its reactive DOM updates. */ - $nextTick?: (callback: (_: any) => void) => void; + $nextTick!: (callback: (_: any) => void) => void; /** Will fire a provided callback when a component property you "watched" gets changed. */ - $watch?: (property: string, callback: (value: any) => void) => void; + $watch!: (property: string, callback: (value: any) => void) => void; [key: string]: any; } @@ -29,13 +29,13 @@ export interface Alpine { pauseMutationObserver: boolean; magicProperties: { [name: string]: (el: HTMLElement) => void }; ignoreFocusedForValueBinding: boolean; - onComponentInitializeds: Array<(component: AlpineComponent) => void>; - onBeforeComponentInitializeds: Array<(component: AlpineComponent) => void>; + onComponentInitializeds: Array<(component: ComponentController) => void>; + onBeforeComponentInitializeds: Array<(component: ComponentController) => void>; onComponentInitialized: ( - callback: (component: AlpineComponent) => void, + callback: (component: ComponentController) => void, ) => void; onBeforeComponentInitialized: ( - callback: (component: AlpineComponent) => void, + callback: (component: ComponentController) => void, ) => void; listenForNewUninitializedComponentsAtRunTime: () => undefined; discoverUninitializedComponents: ( @@ -48,10 +48,29 @@ export interface Alpine { name: string, callback: ($el: HTMLElement) => void, ) => void; - clone: (component: AlpineComponent, newEl: HTMLElement) => void; + clone: (component: ComponentCComponentControllerontroller, newEl: HTMLElement) => void; [key: string]: any; } + +export declare interface ComponentController { + $el: HTMLElement; + $data: ProxyConstructor; + $nextTickStack: CallableFunction[]; + $showDirectiveStack: any[]; + $watchers: { [name: string]: CallableFunction }; + unobservedData: AlpineComponentData; + getUnobservedData: () => AlpineComponentData; + updateElements: (rootEl: HTMLElement, extraVars?: () => {}) => void; + updateElement: (el: HTMLElement, extraVars?: () => {}) => void; + evaluateReturnExpression: ( + el: HTMLElement, + expression: string, + extraVars?: () => {} + ) => void; + [key: string]: any; +} + export function registerComponents(components: { [name: string]: Function }): { [name: string]: ComponentConstructor } { Object.entries(components).forEach(([name, file]) => { component(name, file);