/// /// /// /// /// /// /// /// /// interface Node { /** * @custom * @summary Proxy to reference data on elements up the tree */ readonly Ψcontext: imba.Context; /** * @custom * @summary Reference to the parentNode even before element has been attached */ readonly Ψparent: Element; } interface Element { /** * @idl * @summary Default property for setting the data of an element */ data: any; /** * @private */ private route__: any; /** * Gives elements a stable identity inside lists * @idl * @deprecated Use key instead */ $key: any; /** * Gives elements a stable identity inside lists. * Any value (both objects and primitive values) may be used as a key. * @idl */ key: any; /** * Sets whether `@hotkey` events inside of this element * is enabled or not. If explicitly set to true, only * `@hotkey` events inside this group will be triggered * when this element or a child has focus. * @summary Sets whether `@hotkey` events inside of this element * is enabled or not * @idl */ hotkeys: boolean; /** * Enable transitions for when element is attached / detached * @see[Transitions](https://imba.io/css/transitions) * @idl */ ease: any; // itemid: any; // itemprop: any; // itemref: any; // itemscope: any; // itemtype: any; // enterkeyhint: any; // autofocus: any; // autocapitalize: any; // autocomplete: any; // accesskey: any; // inputmode: any; // spellcheck: any; // translate: any; // is: any; /** * @summary Allows for manipulation of element's class content attribute */ readonly flags: imba.Flags; /** * Emits event * @param event * @param params * @param options * @custom */ emit(event: string, params?: any, options?: any): Event; focus(options?: any): void; blur(): void; // [key: string]: any; setAttribute(name: string, value: boolean): void; setAttribute(name: string, value: number): void; addEventListener(event: string, listener: (event: Event) => void, options?: { passive?: boolean; once?: boolean; capture?: boolean; }); removeEventListener(event: string, listener: (event: Event) => void, options?: { passive?: boolean; once?: boolean; capture?: boolean; }); log(...arguments: any[]): void; } interface Document { readonly flags: imba.Flags; } interface HTMLMetaElement { property?: string; charset?: string; } interface EventListenerOptions { passive?: boolean; once?: boolean; } interface Storage { setItem(key: string, value: number): void; } interface HTMLStyleElement { /** * The supplied path will be run through the imba bundler */ src: ImbaAsset | string; } interface SVGSVGElement { /** * Reference to svg asset that will be inlined */ src: ImbaAsset | string; } declare class ΤObject { [key: string]: any; } declare class ImbaElement extends imba.Component { } /** Portal to declare window/document event handlers from * inside custom tags. */ declare class Γglobal extends HTMLElement { } declare class Γteleport extends HTMLElement { /** The element (or selector) you want to add listeners and content to */ to: string | Element; } declare class Γany extends HTMLElement { [key: string]: any; } interface HTMLElementTagNameMap { "global": Γglobal, "teleport": Γteleport } interface ImbaAsset { body: string; url: string; absPath: string; path: string; } interface Event { detail: any; originalEvent: Event | null; } // interface Object { // [key: string]: any; // } declare namespace imba { interface Globals { /** The global clearInterval() method cancels a timed, repeating action which was previously established by a call to setInterval(). */ clearInterval(handle?: number): void; /** The global clearTimeout() method cancels a timeout previously established by calling setTimeout(). */ clearTimeout(handle?: number): void; fetch(input: RequestInfo, init?: RequestInit): Promise; queueMicrotask(callback: VoidFunction): void; /** * The setInterval() method, offered on the Window and Worker interfaces, repeatedly calls a function or executes a code snippet, with a fixed time delay between each call. */ setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; /** The global setTimeout() method sets a timer which executes a function or specified piece of code once the timer expires. */ setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; /** * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). * @param number A numeric value. */ isNaN(number: number): boolean; /** * Determines whether a supplied number is finite. * @param number Any numeric value. */ isFinite(number: number): boolean; /** Reference to the current window */ readonly window: Window; /** Reference to the current document */ readonly document: Document; /** Reference to the current document */ readonly process: any; /** Dirname */ readonly __dirname: string; /** Filename */ readonly __filename: string; /** Real filename */ readonly __realname: string; /** Reference to the global object */ readonly global: typeof globalThis; /** * Converts a string to an integer. * @param string A string to convert into a number. * @param radix A value between 2 and 36 that specifies the base of the number in `string`. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ parseInt(string: string, radix?: number): number; /** * Converts a string to a floating-point number. * @param string A string that contains a floating-point number. */ parseFloat(string: string): number; /** Access to the global console object */ console: Console; } interface Context { [key: string]: any; } interface Flags { /** * * @summary Returns true if the list contains the given token, otherwise false. */ contains(flag: string): boolean; /** * * @summary Adds the specified token to the list. */ add(flag: string): void; /** * * @summary Removes the specified token from the list. */ remove(flag: string): void; /** * * @summary Toggles specified token in the list. */ toggle(flag: string, toggler?: any): void; /** * * @summary Adds the specified token to the list */ incr(flag: string): number; /** * * @summary Removes the specified token from the list if zero increments remain */ decr(flag: string): number; } interface units { /** * Milliseconds */ ms: number; /** * Seconds. Compiles to n * 1000 (milliseconds in one second) */ s: number; /** * Days. Compiles to n * 60000 (milliseconds in one minute) */ minutes: number; /** * Hours. Compiles to n * 3600000 (milliseconds in 1 hour) */ hours: number; /** * Days. Compiles to n * 86400000 (milliseconds in one day) */ days: number; /** * Frames per second. Compiles to 1000 / n * Ie 60fps => 1000 / 60. */ fps: number; /** * Pixels */ px: string; } namespace hotkeys { function trigger(combo: string): void; /** * Format combo as readable label */ function humanize(combo: string, platform?: string): string; /** * Format combo as html (readable keys wrapped in elements) */ function htmlify(combo: string, platform?: string): string; } /** * @custom */ class Component extends HTMLElement { /** * @summary Called to update the element and their children * @abstract * @lifecycle */ render(): any; /** * @summary Called on client to hydrate SSR element * @abstract * @lifecycle */ hydrate(): any; /** * @summary Called on server when stringifying a component * @abstract * @lifecycle */ dehydrate(): any; /** * @summary Suspend rendering of component * @lifecycle */ suspend(): this; /** * @summary Unsuspend rendering of component * @lifecycle */ unsuspend(): this; /** * @summary Called to update element via scheduler * @abstract * @lifecycle */ tick(): any; /** * @summary Tells whether the component should render * @abstract * @lifecycle */ get renderΦ(): boolean; /** * @readonly * @summary Tells whether the component is currently being mounted * @lifecycle */ get mountingΦ(): boolean; /** * @readonly * @summary Tells whether the component is currently mounted in document * @lifecycle */ get mountedΦ(): boolean; /** * @readonly * @summary Tells whether the component has been awakened * @lifecycle */ get awakenedΦ(): boolean; /** * @readonly * @summary Tells whether the component has been rendered * @lifecycle */ get renderedΦ(): boolean; /** * @readonly * @summary Tells whether the component has been suspended * @lifecycle */ get suspendedΦ(): boolean; /** * @readonly * @summary Tells whether the component is currently rendering * @lifecycle */ get renderingΦ(): boolean; /** * @readonly * @summary Tells whether the component is scheduled to automatically render * @lifecycle * */ get scheduledΦ(): boolean; /** * @readonly * @summary Tells whether the component has been hydrated on the client * @lifecycle */ get hydratedΦ(): boolean; /** * @readonly * @summary Tells whether the component was originally rendered on the server */ get ssrΦ(): boolean; /** * @summary Start rendering the component on every imba.commit */ schedule(): this; /** * @summary Stop rendering the component automatically on every imba.commit */ unschedule(): this; /** * @summary Called before any properties are set * @lifecycle * @abstract */ build(): any; /** * @summary Called before any properties are set * @lifecycle * @abstract */ setup(): any; /** * @summary Called when element is *first* attached to document * @lifecycle * @abstract */ awaken(): any; /** * @summary Called when element is attached to document * @lifecycle * @abstract */ mount(): any; /** * @summary Called when element is detached from document * @lifecycle * @abstract */ unmount(): any; /** * @summary Called after render * @lifecycle * @abstract */ rendered(): any; /** Schedule the element to update itself yes = render on events / imba.commit no = force manual render null / undefined = render via parent (n)s = render every n s (n)ms = render every n ms (n)fps = render n times per second @summary Specify how / when the component should re-render @idl */ autorender: boolean | number | null | `${number}ms` | `${number}s` | `${number}fps`; } function setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; function clearInterval(handle?: number): void; function clearTimeout(handle?: number): void; /** * Schedule re-render */ function commit(): Promise; /** * Render elements in custom context */ function render(func: Function, context?: any): any; /** * Attach an element to the dom * @param element * @param into */ function mount(element: T, into?: Element): T; function mount(func: Function, into?: Element): Element; /** * Detach element from document * @param element */ function unmount(element: T): T; /** * Mark field as observable */ function αobservable(): void; /** * Mark getter as computed */ function αcomputed(): void; /** * Runs the method immediately after instance is initialized * and re-runs whenever any of the referenced observables * change. Methods marked with autorun in tag declarations * will run immediately after mount, and automatically dispose * when element unmounts. */ function αautorun(options?: any): void; /** * Mark getter as lazy. It will only be evaluated once, * and then return the resulting value forever after. */ function αlazy(): void; let colors: string[]; interface ImbaProcess { on(event:string,callback:Function); } let process: ImbaProcess; namespace types { let events: GlobalEventHandlersEventMap; let eventHandlers: GlobalEventHandlers; namespace html { let tags: HTMLElementTagNameMap; let events: GlobalEventHandlersEventMap; } namespace svg { let tags: SVGElementTagNameMap; let events: SVGElementEventMap; } } let Element: Component; /** * Class for scheduling * @custom */ export interface Scheduler { add(target: any, force?: boolean): void; on(group: string, target: any): void; un(group: string, target: any): void; /** Milliseconds since previous tick */ dt: number; } /** * Reference to global scheduler */ let scheduler: Scheduler; function createIndexedFragment(...arguments: any[]): DocumentFragment; function createKeyedFragment(...arguments: any[]): DocumentFragment; function createLiveFragment(...arguments: any[]): DocumentFragment; function emit(source: any, event: string, params: any[]): void; function listen(target: any, event: string, listener: any, path?: any): void; function once(target: any, event: string, listener: any, path?: any): void; function unlisten(target: any, event: string, listener: any, path?: any): void; function indexOf(target: any, source: any): boolean; /** * Start an asset-aware server */ function serve(target: any, options?: any): any; /* Observability TODO Complete & document types */ interface Reaction { dispose(): this; } function observable(value: T): T; function run(callback: any): void; function autorun(callback: any): Reaction; // TODO check if T responds to accessor method - if so, return the result of that type function accessor(accessor: T,...rest:any[]): T extends {$accessor: (...args: any[]) => infer X} ? X : T; interface AccessorGenerator { $accessor(target: any, key: symbol, name: string | symbol, slot: symbol, context: any); } interface Accessor { $get(target: any, key: string | symbol, name: string | symbol): any; $set(value: any, target: any, key: string | symbol, name: string | symbol): void; } interface Storage { [key: string]: any; } /** * localStorage as a rich object */ let locals: Storage; /** * sessionStorage as a rich object */ let session: Storage; } declare module "data:text/asset;*" { const value: ImbaAsset; export default value; export const body: string; export const url: string; export const absPath: string; export const path: string; } declare module "imba/compiler" { export function compile(fileName: string, options: any): any; } declare module "imba" { }