yao-app-ts-types
Version:
typescript types for yao application
509 lines (431 loc) • 9.07 kB
TypeScript
// TypeScript Declarations for YAO Pure JavaScript SDK
// Author: Max <max@iqka.com>
// Maintainer: https://yaoapps.com
/**
* The data fetched from the server.
*/
export declare const __sui_data: Record<string, any>;
/**
* The localized messages and settings.
*/
export declare function __m(message: string): string;
// @ts-ignore: Ignore the specific error
export declare const arguments: any[] = [];
/**
* Headers object for requests.
*/
export type Headers =
| Record<string, string>
| Record<string, string | string[]>;
/**
* Localized messages and settings interface.
*/
export declare interface Locale {
/**
* Locale name, e.g., "en-US".
*/
name?: string;
/**
* Key-value pairs for translations.
*/
keys?: Record<string, string>;
/**
* Message templates or labels.
*/
messages?: Record<string, string>;
/**
* Text direction (left-to-right or right-to-left).
*/
direction?: "ltr" | "rtl";
/**
* Timezone, formatted as UTC offsets (e.g., "+05:30").
*/
timezone?:
| "-12:00"
| "-11:00"
| "-10:00"
| "-09:30"
| "-09:00"
| "-08:00"
| "-07:00"
| "-06:00"
| "-05:00"
| "-04:30"
| "-04:00"
| "-03:30"
| "-03:00"
| "-02:00"
| "-01:00"
| "+00:00"
| "+01:00"
| "+02:00"
| "+03:00"
| "+03:30"
| "+04:00"
| "+04:30"
| "+05:00"
| "+05:30"
| "+05:45"
| "+06:00"
| "+06:30"
| "+07:00"
| "+08:00"
| "+08:45"
| "+09:00"
| "+09:30"
| "+10:00"
| "+10:30"
| "+11:00"
| "+12:00"
| "+12:45"
| "+13:00"
| "+14:00";
}
/**
* Component type definition for modular UI components.
*/
export declare type Component = {
/**
* The root HTML element of the component.
*/
root: HTMLElement;
/**
* Component state management interface.
*/
state: ComponentState;
/**
* Component store for state persistence.
*/
store: ComponentStore;
/**
* Query object for DOM traversal and manipulation.
*/
$root: SUIQuery;
/**
* Find an element inside the component.
*/
find: (selector: string | HTMLElement) => SUIQuery | null;
/**
* Query a single matching element.
*/
query: (selector: string) => HTMLElement | null;
/**
* Query all matching elements.
*/
queryAll: (selector: string) => NodeListOf<Element> | null;
/**
* Emit an event.
*/
emit: (name: string, detail?: EventData) => void;
/**
* Render a partial view with data.
*/
render: (
name: string,
data: Record<string, any>,
option?: RenderOption
) => Promise<string>;
/**
* Optional lifecycle method called once.
*/
once?: () => void;
/**
* State watchers for reactive updates.
*/
watch?: Record<string, (value?: any) => void>;
/**
* Optional constants for the component.
*/
Constants?: Record<string, any>;
[]: any;
};
/**
* Options for rendering components.
*/
export declare type RenderOption = {
/**
* Target container for rendering.
*/
target?: HTMLElement;
/**
* Show loader during rendering.
*/
showLoader?: HTMLElement | string | boolean;
/**
* Whether to replace the existing content.
*/
replace?: boolean;
/**
* Whether to include page data in rendering.
*/
withPageData?: boolean;
};
/**
* Interface for managing component state.
*/
export declare type ComponentState = {
/**
* Set a state property.
*/
Set: (key: string, value?: any) => void;
};
/**
* Interface for managing component store data.
*/
export declare type ComponentStore = {
/**
* Get a value by key.
*/
Get: (key: string) => string;
/**
* Set a value by key.
*/
Set: (key: string, value: string) => void;
/**
* Get JSON data by key.
*/
GetJSON: (key: string) => any;
/**
* Set JSON data by key.
*/
SetJSON: (key: string, value: any) => void;
/**
* Retrieve all data.
*/
GetData: () => Record<string, any>;
};
/**
* Helper function to retrieve a component by root element or selector.
*/
export declare const $$: (selector: HTMLElement | string) => Component;
/**
* Data structure for event details.
*/
export declare type EventDetail<T = HTMLElement> = {
/**
* Root element of the component.
*/
rootElement: HTMLElement;
/**
* Event target element.
*/
targetElement: T;
};
/**
* Generic type for event data.
*/
export declare type EventData = Record<string, any>;
/**
* State object for event propagation.
*/
export declare type State = {
/**
* Target element.
*/
target: HTMLElement;
/**
* Stop event propagation.
*/
stopPropagation(): void;
};
/**
* Create a rendering instance for a component.
*/
export declare function $Render(
component: Component | string,
option?: RenderOption
): SUIRender;
/**
* Class representing a rendering operation for components.
*/
export declare class SUIRender {
/**
* Create a rendering instance.
*/
constructor(comp: Component | string, option?: RenderOption);
/**
* Execute a partial view render with provided data.
*/
Exec(name: string, data: Record<string, any>): Promise<string>;
}
/**
* Get the store associated with an element or selector.
*/
export declare function $Store(
selector: HTMLElement | string
): ComponentStore | null;
/**
* Query the DOM for an element or elements.
*/
export declare function $Query(selector: string | HTMLElement): SUIQuery;
/**
* Class for DOM manipulation and traversal.
*/
export declare class SUIQuery {
/**
* The selector or element used for querying.
*/
selector: string | Element;
/**
* The current element or null.
*/
element: Element | null;
/**
* All matched elements or null.
*/
elements: NodeListOf<Element> | null;
/**
* Create a query instance.
*/
constructor(selector: string | Element);
/**
* Iterate over elements.
*/
each(callback: (element: SUIQuery, index: number) => void): void;
/**
* Get the current element.
*/
elm(): Element | null;
/**
* Get all matched elements.
*/
elms(): NodeListOf<Element> | null;
/**
* Find child elements by selector.
*/
find(selector: string): SUIQuery | null;
/**
* Find all child elements by selector. only return the first child Query Object;
*/
findAll(selector: string): SUIQuery | null;
/**
* Find the closest matching ancestor.
*/
closest(selector: string): SUIQuery | null;
/**
* Add event listener.
*/
on(event: string, callback: (event: Event) => void): SUIQuery;
/**
* Get the associated component.
*/
$$(): Component | null;
/**
* Get the associated store.
*/
store(): ComponentStore | null;
/**
* Get an attribute value.
*/
attr(name: string): string | null;
/**
* Get data-attribute value.
*/
data(name: string): string | null;
/**
* Get JSON data.
*/
json(name: string): any | null;
/**
* Check if the element has a class.
*/
hasClass(className: string): boolean;
/**
* Get a property value.
*/
prop(name: string): any | null;
/**
* Remove classes.
*/
removeClass(className: string | string[]): SUIQuery;
/**
* Toggle classes.
*/
toggleClass(className: string | string[]): SUIQuery;
/**
* Add classes.
*/
addClass(className: string | string[]): SUIQuery;
/**
* Get or set inner HTML.
*/
html(html?: string): SUIQuery | string;
}
/**
* Create a backend request handler for calling APIs.
*/
export declare function $Backend<T = any>(
route?: string,
headers?: Headers
): SUIBackend<T>;
/**
* Class for backend API calls.
*/
export declare class SUIBackend<T = any> {
/**
* Create a backend instance.
*/
constructor(route?: string, headers?: Headers);
/**
* Call a backend API method with arguments.
*/
Call(method: string, ...args: any): Promise<T>;
}
/**
* Class for handling YAO API interactions.
*/
export declare class Yao {
/**
* Initialize Yao API client.
*/
constructor(host?: string);
/**
* Perform a GET request.
*/
Get(path: string, params?: object, headers?: Headers): Promise<any>;
/**
* Perform a POST request.
*/
Post(
path: string,
data?: object,
params?: object,
headers?: Headers
): Promise<any>;
/**
* Download a file from the API.
*/
Download(
path: string,
params: object,
savefile: string,
headers?: Headers
): Promise<void>;
/**
* Perform a fetch request to the API.
*/
Fetch(
method: string,
path: string,
params?: object,
data?: object,
headers?: Headers,
isblob?: boolean
): Promise<any>;
/**
* Get the stored token.
*/
Token(): string;
/**
* Get a cookie value.
*/
Cookie(cookieName: string): string | null;
/**
* Set a cookie.
*/
SetCookie(cookieName: string, cookieValue: string, expireDays?: number): void;
/**
* Delete a cookie.
*/
DeleteCookie(cookieName: string): void;
}