UNPKG

@builder.io/qwik

Version:

An Open-Source sub-framework designed with a focus on server-side-rendering, lazy-loading, and styling/animation.

1,386 lines (1,251 loc) 137 kB
import * as CSS_2 from 'csstype'; import { isBrowser } from './build'; import { isDev } from './build'; import { isServer } from './build'; import type { JSXNode as JSXNode_2 } from './jsx-runtime'; /** * Qwik Optimizer marker function. * * Use `$(...)` to tell Qwik Optimizer to extract the expression in `$(...)` into a lazy-loadable * resource referenced by `QRL`. * * @param expression - Expression which should be lazy loaded * @public * @see `implicit$FirstArg` for additional `____$(...)` rules. * * In this example, `$(...)` is used to capture the callback function of `onmousemove` into a * lazy-loadable reference. This allows the code to refer to the function without actually * loading the function. In this example, the callback function does not get loaded until * `mousemove` event fires. * * ```tsx * useOnDocument( * 'mousemove', * $((event) => console.log('mousemove', event)) * ); * ``` * * In this code, the Qwik Optimizer detects `$(...)` and transforms the code into: * * ```tsx * // FILE: <current file> * useOnDocument('mousemove', qrl('./chunk-abc.js', 'onMousemove')); * * // FILE: chunk-abc.js * export const onMousemove = () => console.log('mousemove'); * ``` * * ## Special Rules * * The Qwik Optimizer places special rules on functions that can be lazy-loaded. * * 1. The expression of the `$(expression)` function must be importable by the system. * (expression shows up in `import` or has `export`) * 2. If inlined function, then all lexically captured values must be: * - importable (vars show up in `import`s or `export`s) * - const (The capturing process differs from JS capturing in that writing to captured * variables does not update them, and therefore writes are forbidden. The best practice is that * all captured variables are constants.) * - Must be runtime serializable. * * ```tsx * * import { createContextId, useContext, useContextProvider } from './use/use-context'; * import { Resource, useResource$ } from './use/use-resource'; * import { useSignal } from './use/use-signal'; * * export const greet = () => console.log('greet'); * function topLevelFn() {} * * function myCode() { * const store = useStore({}); * function localFn() {} * // Valid Examples * $(greet); // greet is importable * $(() => greet()); // greet is importable; * $(() => console.log(store)); // store is serializable. * * // Compile time errors * $(topLevelFn); // ERROR: `topLevelFn` not importable * $(() => topLevelFn()); // ERROR: `topLevelFn` not importable * * // Runtime errors * $(localFn); // ERROR: `localFn` fails serialization * $(() => localFn()); // ERROR: `localFn` fails serialization * } * * ``` */ export declare const $: <T>(expression: T) => QRL<T>; declare type A = [type: 0, host: SubscriberEffect | SubscriberHost, key: string | undefined]; declare type AllEventKeys = keyof AllEventsMap; declare type AllEventMapRaw = HTMLElementEventMap & DocumentEventMap & WindowEventHandlersEventMap & { qidle: QwikIdleEvent; qinit: QwikInitEvent; qsymbol: QwikSymbolEvent; qvisible: QwikVisibleEvent; qviewTransition: QwikViewTransitionEvent; }; declare type AllEventsMap = Omit<AllEventMapRaw, keyof EventCorrectionMap> & EventCorrectionMap; /** @internal */ export declare type _AllowPlainQrl<Q> = QRLEventHandlerMulti<any, any> extends Q ? Q extends QRLEventHandlerMulti<infer EV, infer EL> ? Q | (EL extends Element ? EventHandler<EV, EL> : never) : Q : Q extends QRL<infer U> ? Q | U : NonNullable<Q> extends never ? Q : QRL<Q> | Q; declare type AllPascalEventMaps = PascalMap<AllEventsMap>; /** @public */ export declare interface AnchorHTMLAttributes<T extends Element> extends Attrs<'a', T> { } /** @public */ export declare interface AreaHTMLAttributes<T extends Element> extends Attrs<'area', T> { } /** * TS defines these with the React syntax which is not compatible with Qwik. E.g. `ariaAtomic` * instead of `aria-atomic`. * * @public */ export declare interface AriaAttributes { /** * Identifies the currently active element when DOM focus is on a composite widget, textbox, * group, or application. */ 'aria-activedescendant'?: string | undefined; /** * Indicates whether assistive technologies will present all, or only parts of, the changed region * based on the change notifications defined by the aria-relevant attribute. */ 'aria-atomic'?: Booleanish | undefined; /** * Indicates whether inputting text could trigger display of one or more predictions of the user's * intended value for an input and specifies how predictions would be presented if they are made. */ 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both' | undefined; /** * Indicates an element is being modified and that assistive technologies MAY want to wait until * the modifications are complete before exposing them to the user. */ 'aria-busy'?: Booleanish | undefined; /** * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. * * @see aria-pressed @see aria-selected. */ 'aria-checked'?: boolean | 'false' | 'mixed' | 'true' | undefined; /** * Defines the total number of columns in a table, grid, or treegrid. * * @see aria-colindex. */ 'aria-colcount'?: number | undefined; /** * Defines an element's column index or position with respect to the total number of columns * within a table, grid, or treegrid. * * @see aria-colcount @see aria-colspan. */ 'aria-colindex'?: number | undefined; /** * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. * * @see aria-colindex @see aria-rowspan. */ 'aria-colspan'?: number | undefined; /** * Identifies the element (or elements) whose contents or presence are controlled by the current * element. * * @see aria-owns. */ 'aria-controls'?: string | undefined; /** * Indicates the element that represents the current item within a container or set of related * elements. */ 'aria-current'?: boolean | 'false' | 'true' | 'page' | 'step' | 'location' | 'date' | 'time' | undefined; /** * Identifies the element (or elements) that describes the object. * * @see aria-labelledby */ 'aria-describedby'?: string | undefined; /** * Identifies the element that provides a detailed, extended description for the object. * * @see aria-describedby. */ 'aria-details'?: string | undefined; /** * Indicates that the element is perceivable but disabled, so it is not editable or otherwise * operable. * * @see aria-hidden @see aria-readonly. */ 'aria-disabled'?: Booleanish | undefined; /** * Indicates what functions can be performed when a dragged object is released on the drop target. * * @deprecated In ARIA 1.1 */ 'aria-dropeffect'?: 'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup' | undefined; /** * Identifies the element that provides an error message for the object. * * @see aria-invalid @see aria-describedby. */ 'aria-errormessage'?: string | undefined; /** * Indicates whether the element, or another grouping element it controls, is currently expanded * or collapsed. */ 'aria-expanded'?: Booleanish | undefined; /** * Identifies the next element (or elements) in an alternate reading order of content which, at * the user's discretion, allows assistive technology to override the general default of reading * in document source order. */ 'aria-flowto'?: string | undefined; /** * Indicates an element's "grabbed" state in a drag-and-drop operation. * * @deprecated In ARIA 1.1 */ 'aria-grabbed'?: Booleanish | undefined; /** * Indicates the availability and type of interactive popup element, such as menu or dialog, that * can be triggered by an element. */ 'aria-haspopup'?: boolean | 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | undefined; /** * Indicates whether the element is exposed to an accessibility API. * * @see aria-disabled. */ 'aria-hidden'?: Booleanish | undefined; /** * Indicates the entered value does not conform to the format expected by the application. * * @see aria-errormessage. */ 'aria-invalid'?: boolean | 'false' | 'true' | 'grammar' | 'spelling' | undefined; /** * Indicates keyboard shortcuts that an author has implemented to activate or give focus to an * element. */ 'aria-keyshortcuts'?: string | undefined; /** * Defines a string value that labels the current element. * * @see aria-labelledby. */ 'aria-label'?: string | undefined; /** * Identifies the element (or elements) that labels the current element. * * @see aria-describedby. */ 'aria-labelledby'?: string | undefined; /** Defines the hierarchical level of an element within a structure. */ 'aria-level'?: number | undefined; /** * Indicates that an element will be updated, and describes the types of updates the user agents, * assistive technologies, and user can expect from the live region. */ 'aria-live'?: 'off' | 'assertive' | 'polite' | undefined; /** Indicates whether an element is modal when displayed. */ 'aria-modal'?: Booleanish | undefined; /** Indicates whether a text box accepts multiple lines of input or only a single line. */ 'aria-multiline'?: Booleanish | undefined; /** Indicates that the user may select more than one item from the current selectable descendants. */ 'aria-multiselectable'?: Booleanish | undefined; /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ 'aria-orientation'?: 'horizontal' | 'vertical' | undefined; /** * Identifies an element (or elements) in order to define a visual, functional, or contextual * parent/child relationship between DOM elements where the DOM hierarchy cannot be used to * represent the relationship. * * @see aria-controls. */ 'aria-owns'?: string | undefined; /** * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the * control has no value. A hint could be a sample value or a brief description of the expected * format. */ 'aria-placeholder'?: string | undefined; /** * Defines an element's number or position in the current set of listitems or treeitems. Not * required if all elements in the set are present in the DOM. * * @see aria-setsize. */ 'aria-posinset'?: number | undefined; /** * Indicates the current "pressed" state of toggle buttons. * * @see aria-checked @see aria-selected. */ 'aria-pressed'?: boolean | 'false' | 'mixed' | 'true' | undefined; /** * Indicates that the element is not editable, but is otherwise operable. * * @see aria-disabled. */ 'aria-readonly'?: Booleanish | undefined; /** * Indicates what notifications the user agent will trigger when the accessibility tree within a * live region is modified. * * @see aria-atomic. */ 'aria-relevant'?: 'additions' | 'additions removals' | 'additions text' | 'all' | 'removals' | 'removals additions' | 'removals text' | 'text' | 'text additions' | 'text removals' | undefined; /** Indicates that user input is required on the element before a form may be submitted. */ 'aria-required'?: Booleanish | undefined; /** Defines a human-readable, author-localized description for the role of an element. */ 'aria-roledescription'?: string | undefined; /** * Defines the total number of rows in a table, grid, or treegrid. * * @see aria-rowindex. */ 'aria-rowcount'?: number | undefined; /** * Defines an element's row index or position with respect to the total number of rows within a * table, grid, or treegrid. * * @see aria-rowcount @see aria-rowspan. */ 'aria-rowindex'?: number | undefined; /** * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. * * @see aria-rowindex @see aria-colspan. */ 'aria-rowspan'?: number | undefined; /** * Indicates the current "selected" state of various widgets. * * @see aria-checked @see aria-pressed. */ 'aria-selected'?: Booleanish | undefined; /** * Defines the number of items in the current set of listitems or treeitems. Not required if all * elements in the set are present in the DOM. * * @see aria-posinset. */ 'aria-setsize'?: number | undefined; /** Indicates if items in a table or grid are sorted in ascending or descending order. */ 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' | undefined; /** Defines the maximum allowed value for a range widget. */ 'aria-valuemax'?: number | undefined; /** Defines the minimum allowed value for a range widget. */ 'aria-valuemin'?: number | undefined; /** * Defines the current value for a range widget. * * @see aria-valuetext. */ 'aria-valuenow'?: number | undefined; /** Defines the human readable text alternative of aria-valuenow for a range widget. */ 'aria-valuetext'?: string | undefined; } /** @public */ export declare type AriaRole = 'alert' | 'alertdialog' | 'application' | 'article' | 'banner' | 'button' | 'cell' | 'checkbox' | 'columnheader' | 'combobox' | 'complementary' | 'contentinfo' | 'definition' | 'dialog' | 'directory' | 'document' | 'feed' | 'figure' | 'form' | 'grid' | 'gridcell' | 'group' | 'heading' | 'img' | 'link' | 'list' | 'listbox' | 'listitem' | 'log' | 'main' | 'marquee' | 'math' | 'menu' | 'menubar' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'navigation' | 'none' | 'note' | 'option' | 'presentation' | 'progressbar' | 'radio' | 'radiogroup' | 'region' | 'row' | 'rowgroup' | 'rowheader' | 'scrollbar' | 'search' | 'searchbox' | 'separator' | 'slider' | 'spinbutton' | 'status' | 'switch' | 'tab' | 'table' | 'tablist' | 'tabpanel' | 'term' | 'textbox' | 'timer' | 'toolbar' | 'tooltip' | 'tree' | 'treegrid' | 'treeitem' | (string & {}); declare type Attrs<Name extends keyof HTMLElementTagNameMap, EL extends Element = HTMLElementTagNameMap[Name], AttrEl = HTMLElementTagNameMap[Name]> = HTMLAttributes<EL> & Augmented<AttrEl, SpecialAttrs[Name]>; /** @public */ export declare interface AudioHTMLAttributes<T extends Element> extends Attrs<'audio', T> { } /** * Replace given element's props with custom types and return all props specific to the element. Use * this for known props that are incorrect or missing. * * Uses Prettify so we see the special props for each element in editor hover */ declare type Augmented<E, A = {}> = Prettify<Filtered<E, A> & A>; declare type B = [ type: 1 | 2, host: SubscriberHost, signal: Signal, elm: QwikElement, prop: string, key: string | undefined ]; /** @public */ export declare interface BaseHTMLAttributes<T extends Element> extends Attrs<'base', T> { } declare type BivariantQrlFn<ARGS extends any[], RETURN> = { /** * Resolve the QRL of closure and invoke it. * * @param args - Closure arguments. * @returns A promise of the return value of the closure. */ bivarianceHack(...args: ARGS): Promise<RETURN>; }['bivarianceHack']; /** @public */ export declare interface BlockquoteHTMLAttributes<T extends Element> extends Attrs<'blockquote', T> { } /** @public */ export declare type Booleanish = boolean | `${boolean}`; /** @public */ export declare interface ButtonHTMLAttributes<T extends Element> extends Attrs<'button', T> { } declare type C = [ type: 3 | 4, host: SubscriberHost | Text, signal: Signal, elm: Node | QwikElement, key: string | undefined ]; /** @public */ export declare interface CanvasHTMLAttributes<T extends Element> extends Attrs<'canvas', T> { } /** * A class list can be a string, a boolean, an array, or an object. * * If it's an array, each item is a class list and they are all added. * * If it's an object, then the keys are class name strings, and the values are booleans that * determine if the class name string should be added or not. * * @public */ export declare type ClassList = string | undefined | null | false | Record<string, boolean | string | number | null | undefined> | ClassList[]; /** @public */ export declare interface ColgroupHTMLAttributes<T extends Element> extends Attrs<'colgroup', T> { } /** @public */ export declare interface ColHTMLAttributes<T extends Element> extends Attrs<'col', T> { } /** * Declare a Qwik component that can be used to create UI. * * Use `component$` to declare a Qwik component. A Qwik component is a special kind of component * that allows the Qwik framework to lazy load and execute the component independently of other Qwik * components as well as lazy load the component's life-cycle hooks and event handlers. * * Side note: You can also declare regular (standard JSX) components that will have standard * synchronous behavior. * * Qwik component is a facade that describes how the component should be used without forcing the * implementation of the component to be eagerly loaded. A minimum Qwik definition consists of: * * ### Example * * An example showing how to create a counter component: * * ```tsx * export interface CounterProps { * initialValue?: number; * step?: number; * } * export const Counter = component$((props: CounterProps) => { * const state = useStore({ count: props.initialValue || 0 }); * return ( * <div> * <span>{state.count}</span> * <button onClick$={() => (state.count += props.step || 1)}>+</button> * </div> * ); * }); * ``` * * - `component$` is how a component gets declared. * - `{ value?: number; step?: number }` declares the public (props) interface of the component. * - `{ count: number }` declares the private (state) interface of the component. * * The above can then be used like so: * * ```tsx * export const OtherComponent = component$(() => { * return <Counter initialValue={100} />; * }); * ``` * * See also: `component`, `useCleanup`, `onResume`, `onPause`, `useOn`, `useOnDocument`, * `useOnWindow`, `useStyles` * * @public */ export declare const component$: <PROPS = unknown>(onMount: OnRenderFn<PROPS>) => Component<PROPS>; /** * Type representing the Qwik component. * * `Component` is the type returned by invoking `component$`. * * ```tsx * interface MyComponentProps { * someProp: string; * } * const MyComponent: Component<MyComponentProps> = component$((props: MyComponentProps) => { * return <span>{props.someProp}</span>; * }); * ``` * * @public */ export declare type Component<PROPS = unknown> = FunctionComponent<PublicProps<PROPS>>; /** @public */ export declare interface ComponentBaseProps { key?: string | number | null | undefined; 'q:slot'?: string; } declare type ComponentChildren<PROPS> = PROPS extends { children: any; } ? never : { children?: JSXChildren; }; /** * Declare a Qwik component that can be used to create UI. * * Use `component$` to declare a Qwik component. A Qwik component is a special kind of component * that allows the Qwik framework to lazy load and execute the component independently of other Qwik * components as well as lazy load the component's life-cycle hooks and event handlers. * * Side note: You can also declare regular (standard JSX) components that will have standard * synchronous behavior. * * Qwik component is a facade that describes how the component should be used without forcing the * implementation of the component to be eagerly loaded. A minimum Qwik definition consists of: * * ### Example * * An example showing how to create a counter component: * * ```tsx * export interface CounterProps { * initialValue?: number; * step?: number; * } * export const Counter = component$((props: CounterProps) => { * const state = useStore({ count: props.initialValue || 0 }); * return ( * <div> * <span>{state.count}</span> * <button onClick$={() => (state.count += props.step || 1)}>+</button> * </div> * ); * }); * ``` * * - `component$` is how a component gets declared. * - `{ value?: number; step?: number }` declares the public (props) interface of the component. * - `{ count: number }` declares the private (state) interface of the component. * * The above can then be used like so: * * ```tsx * export const OtherComponent = component$(() => { * return <Counter initialValue={100} />; * }); * ``` * * See also: `component`, `useCleanup`, `onResume`, `onPause`, `useOn`, `useOnDocument`, * `useOnWindow`, `useStyles` * * @public */ export declare const componentQrl: <PROPS extends Record<any, any>>(componentQrl: QRL<OnRenderFn<PROPS>>) => Component<PROPS>; declare interface ComputedDescriptor<T> extends DescriptorBase<ComputedFn<T>, Signal<T>> { } declare const ComputedEvent = "qComputed"; /** @public */ export declare type ComputedFn<T> = () => T; /** @public */ declare interface ContainerState { readonly $containerEl$: Element; readonly $proxyMap$: ObjToProxyMap; $subsManager$: SubscriptionManager; readonly $taskNext$: Set<SubscriberEffect>; readonly $taskStaging$: Set<SubscriberEffect>; readonly $opsNext$: Set<SubscriberSignal>; readonly $hostsNext$: Set<QContext>; readonly $hostsStaging$: Set<QContext>; readonly $base$: string; $hostsRendering$: Set<QContext> | undefined; $renderPromise$: Promise<void> | undefined; $serverData$: Record<string, any>; $elementIndex$: number; $pauseCtx$: PauseContext | undefined; $styleMoved$: boolean; readonly $styleIds$: Set<string>; readonly $events$: Set<string>; readonly $inlineFns$: Map<string, number>; } /** * ContextId is a typesafe ID for your context. * * Context is a way to pass stores to the child components without prop-drilling. * * Use `createContextId()` to create a `ContextId`. A `ContextId` is just a serializable identifier * for the context. It is not the context value itself. See `useContextProvider()` and * `useContext()` for the values. Qwik needs a serializable ID for the context so that the it can * track context providers and consumers in a way that survives resumability. * * ### Example * * ```tsx * // Declare the Context type. * interface TodosStore { * items: string[]; * } * // Create a Context ID (no data is saved here.) * // You will use this ID to both create and retrieve the Context. * export const TodosContext = createContextId<TodosStore>('Todos'); * * // Example of providing context to child components. * export const App = component$(() => { * useContextProvider( * TodosContext, * useStore<TodosStore>({ * items: ['Learn Qwik', 'Build Qwik app', 'Profit'], * }) * ); * * return <Items />; * }); * * // Example of retrieving the context provided by a parent component. * export const Items = component$(() => { * const todos = useContext(TodosContext); * return ( * <ul> * {todos.items.map((item) => ( * <li>{item}</li> * ))} * </ul> * ); * }); * * ``` * * @public */ export declare interface ContextId<STATE> { /** Design-time property to store type information for the context. */ readonly __brand_context_type__: STATE; /** A unique ID for the context. */ readonly id: string; } /** * Low-level API for platform abstraction. * * Different platforms (browser, node, service workers) may have different ways of handling things * such as `requestAnimationFrame` and imports. To make Qwik platform-independent Qwik uses the * `CorePlatform` API to access the platform API. * * `CorePlatform` also is responsible for importing symbols. The import map is different on the * client (browser) then on the server. For this reason, the server has a manifest that is used to * map symbols to javascript chunks. The manifest is encapsulated in `CorePlatform`, for this * reason, the `CorePlatform` can't be global as there may be multiple applications running at * server concurrently. * * This is a low-level API and there should not be a need for you to access this. * * @public */ export declare interface CorePlatform { /** * True of running on the server platform. * * @returns True if we are running on the server (not the browser.) */ isServer: boolean; /** * Retrieve a symbol value from QRL. * * Qwik needs to lazy load data and closures. For this Qwik uses QRLs that are serializable * references of resources that are needed. The QRLs contain all the information necessary to * retrieve the reference using `importSymbol`. * * Why not use `import()`? Because `import()` is relative to the current file, and the current * file is always the Qwik framework. So QRLs have additional information that allows them to * serialize imports relative to application base rather than the Qwik framework file. * * @param element - The element against which the `url` is resolved. Used to locate the container * root and `q:base` attribute. * @param url - Relative URL retrieved from the attribute that needs to be resolved against the * container `q:base` attribute. * @param symbol - The name of the symbol to import. * @returns A promise that resolves to the imported symbol. */ importSymbol: (containerEl: Element | undefined, url: string | URL | undefined | null, symbol: string) => ValueOrPromise<any>; /** * Perform operation on next request-animation-frame. * * @param fn - The function to call when the next animation frame is ready. */ raf: (fn: () => any) => Promise<any>; /** * Perform operation on next tick. * * @param fn - The function to call when the tick is ready. */ nextTick: (fn: () => any) => Promise<any>; /** * Retrieve chunk name for the symbol. * * When the application is running on the server the symbols may be imported from different files * (as server build is typically a single javascript chunk.) For this reason, it is necessary to * convert the chunks from server format to client (browser) format. This is done by looking up * symbols (which are globally unique) in the manifest. (Manifest is the mapping of symbols to the * client chunk names.) * * @param symbolName - Resolve `symbolName` against the manifest and return the chunk that * contains the symbol. */ chunkForSymbol: (symbolName: string, chunk: string | null, parent?: string) => readonly [symbol: string, chunk: string] | undefined; } /** This corrects the TS definition for ToggleEvent @public */ export declare interface CorrectedToggleEvent extends Event { readonly newState: 'open' | 'closed'; readonly prevState: 'open' | 'closed'; } /** * Returns read-only signal that updates when signals used in the `ComputedFn` change. Unlike * useComputed$, this is not a hook and it always creates a new signal. * * @deprecated This is a technology preview * @public */ export declare const createComputed$: <T>(qrl: ComputedFn<T>) => Signal<Awaited<T>>; /** @public */ export declare const createComputedQrl: <T>(qrl: QRL<ComputedFn<T>>) => Signal<Awaited<T>>; /** * Create a context ID to be used in your application. The name should be written with no spaces. * * Context is a way to pass stores to the child components without prop-drilling. * * Use `createContextId()` to create a `ContextId`. A `ContextId` is just a serializable identifier * for the context. It is not the context value itself. See `useContextProvider()` and * `useContext()` for the values. Qwik needs a serializable ID for the context so that the it can * track context providers and consumers in a way that survives resumability. * * ### Example * * ```tsx * // Declare the Context type. * interface TodosStore { * items: string[]; * } * // Create a Context ID (no data is saved here.) * // You will use this ID to both create and retrieve the Context. * export const TodosContext = createContextId<TodosStore>('Todos'); * * // Example of providing context to child components. * export const App = component$(() => { * useContextProvider( * TodosContext, * useStore<TodosStore>({ * items: ['Learn Qwik', 'Build Qwik app', 'Profit'], * }) * ); * * return <Items />; * }); * * // Example of retrieving the context provided by a parent component. * export const Items = component$(() => { * const todos = useContext(TodosContext); * return ( * <ul> * {todos.items.map((item) => ( * <li>{item}</li> * ))} * </ul> * ); * }); * * ``` * * @param name - The name of the context. * @public */ export declare const createContextId: <STATE = unknown>(name: string) => ContextId<STATE>; /** * Creates a signal. * * If the initial state is a function, the function is invoked to calculate the actual initial * state. * * @deprecated This is a technology preview * @public */ export declare const createSignal: UseSignal; /** @public */ export declare interface CSSProperties extends CSS_2.Properties<string | number>, CSS_2.PropertiesHyphen<string | number> { /** * The index signature was removed to enable closed typing for style using CSSType. You're able to * use type assertion or module augmentation to add properties or an index signature of your own. * * For examples and more information, visit: * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors */ [v: `--${string}`]: string | number | undefined; } /** @public */ export declare interface DataHTMLAttributes<T extends Element> extends Attrs<'data', T> { } /** @public */ export declare interface DelHTMLAttributes<T extends Element> extends Attrs<'del', T> { } /** @public */ declare interface DescriptorBase<T = unknown, B = unknown> { $qrl$: QRLInternal<T>; $el$: QwikElement; $flags$: number; $index$: number; $destroy$?: NoSerialize<() => void>; $state$: B | undefined; } /** @internal */ export declare const _deserializeData: (data: string, element?: unknown) => any; /** @public */ export declare interface DetailsHTMLAttributes<T extends Element> extends Attrs<'details', T> { } /** @public */ export declare interface DevJSX { fileName: string; lineNumber: number; columnNumber: number; stack?: string; } /** @public */ export declare interface DialogHTMLAttributes<T extends Element> extends Attrs<'dialog', T> { } /** The Qwik-specific attributes that DOM elements accept @public */ export declare interface DOMAttributes<EL extends Element> extends DOMAttributesBase<EL>, QwikEvents<EL> { class?: ClassList | Signal<ClassList> | undefined; } declare interface DOMAttributesBase<EL extends Element> extends QwikIntrinsicAttributes, PreventDefault, StopPropagation, RefAttr<EL> { dangerouslySetInnerHTML?: string | undefined; } /** @public @deprecated use useVisibleTask$ or useResource$, useTask$ is for running tasks as part of the initial SSR render */ export declare type EagernessOptions = 'visible' | 'load' | 'idle'; /** @public */ export declare interface EmbedHTMLAttributes<T extends Element> extends Attrs<'embed', T> { } /** @public */ export declare interface ErrorBoundaryStore { error: any | undefined; } /** @public */ export declare const event$: <T>(qrl: T) => QRL<T>; declare type EventCorrectionMap = { auxclick: PointerEvent; beforetoggle: CorrectedToggleEvent; click: PointerEvent; dblclick: PointerEvent; input: InputEvent; toggle: CorrectedToggleEvent; }; declare type EventFromName<T extends string> = LcEvent<T>; /** * A DOM event handler * * @public */ export declare type EventHandler<EV = Event, EL = Element> = { bivarianceHack(event: EV, element: EL): any; }['bivarianceHack']; declare type EventQRL<T extends string = AllEventKeys> = QRL<EventHandler<EventFromName<T>, Element>> | undefined; /** @public */ export declare const eventQrl: <T>(qrl: QRL<T>) => QRL<T>; /** @public */ export declare interface FieldsetHTMLAttributes<T extends Element> extends Attrs<'fieldset', T> { } declare type FilterBase<T> = { [K in keyof T as K extends string ? K extends Uppercase<K> ? never : any extends T[K] ? never : false extends IsAcceptableDOMValue<T[K]> ? never : IsReadOnlyKey<T, K> extends true ? never : K extends UnwantedKeys ? never : K : never]?: T[K]; }; /** Only keep props that are specific to the element and make partial */ declare type Filtered<T, A = {}> = { [K in keyof Omit<FilterBase<T>, keyof HTMLAttributes<any> | keyof A>]?: T[K]; }; /** @internal */ export declare const _fnSignal: <T extends (...args: any) => any>(fn: T, args: Parameters<T>, fnStr?: string) => SignalDerived<ReturnType<T>, Parameters<T>>; /** @public */ export declare interface FormHTMLAttributes<T extends Element> extends Attrs<'form', T> { } /** @public */ export declare const Fragment: FunctionComponent<{ children?: any; key?: string | number | null; }>; /** * Any function taking a props object that returns JSXOutput. * * The `key`, `flags` and `dev` parameters are for internal use. * * @public */ export declare type FunctionComponent<P = unknown> = { renderFn(props: P, key: string | null, flags: number, dev?: DevJSX): JSXOutput; }['renderFn']; /** @internal */ export declare const _getContextElement: () => unknown; /** @internal */ export declare const _getContextEvent: () => unknown; /** * Retrieve the current locale. * * If no current locale and there is no `defaultLocale` the function throws an error. * * @returns The locale. * @internal */ export declare function getLocale(defaultLocale?: string): string; declare type GetObject = (id: string) => any; declare type GetObjID = (obj: any) => string | null; /** * Retrieve the `CorePlatform`. * * The `CorePlatform` is also responsible for retrieving the Manifest, that contains mappings from * symbols to javascript import chunks. For this reason, `CorePlatform` can't be global, but is * specific to the application currently running. On server it is possible that many different * applications are running in a single server instance, and for this reason the `CorePlatform` is * associated with the application document. * * @param docOrNode - The document (or node) of the application for which the platform is needed. * @public */ export declare const getPlatform: () => CorePlatform; declare type Group = SubscriberEffect | SubscriberHost | Node; declare type GroupToManagersMap = Map<Group, LocalSubscriptionManager[]>; /** @public */ declare function h<TYPE extends string | FunctionComponent<PROPS>, PROPS extends {} = {}>(type: TYPE, props: PROPS | null, ...children: any[]): JSXNode<TYPE>; /** @public */ declare namespace h { function h(type: any): JSXNode<any>; function h(type: Node, data: any): JSXNode<any>; function h(type: any, text: string): JSXNode<any>; function h(type: any, children: Array<any>): JSXNode<any>; function h(type: any, data: any, text: string): JSXNode<any>; function h(type: any, data: any, children: Array<JSXNode<any> | undefined | null>): JSXNode<any>; function h(sel: any, data: any | null, children: JSXNode<any>): JSXNode<any>; { JSX }; } export { h as createElement } export { h } /** @public */ export declare interface HrHTMLAttributes<T extends Element> extends Attrs<'hr', T> { } /** @public */ export declare type HTMLAttributeAnchorTarget = '_self' | '_blank' | '_parent' | '_top' | (string & {}); /** @public */ export declare type HTMLAttributeReferrerPolicy = ReferrerPolicy; /** @public */ export declare interface HTMLAttributes<E extends Element> extends HTMLElementAttrs, DOMAttributes<E> { } declare interface HTMLAttributesBase extends AriaAttributes { /** @deprecated Use `class` instead */ className?: ClassList | undefined; contentEditable?: 'true' | 'false' | 'inherit' | undefined; style?: CSSProperties | string | undefined; role?: AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: 'none' | 'off' | 'sentences' | 'on' | 'words' | 'characters' | undefined; autoCorrect?: string | undefined; autoFocus?: boolean | undefined; autoSave?: string | undefined; hidden?: boolean | 'hidden' | 'until-found' | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; translate?: 'yes' | 'no' | undefined; security?: string | undefined; unselectable?: 'on' | 'off' | undefined; /** * Hints at the type of data that might be entered by the user while editing the element or its * contents * * @see https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute */ inputMode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search' | undefined; /** * Specify that a standard HTML element should behave like a defined custom built-in element * * @see https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is */ is?: string | undefined; popover?: 'manual' | 'auto' | undefined; } /** @public */ export declare type HTMLCrossOriginAttribute = 'anonymous' | 'use-credentials' | '' | undefined; /** @public */ export declare interface HTMLElementAttrs extends HTMLAttributesBase, FilterBase<HTMLElement> { } /** @public */ export declare const HTMLFragment: FunctionComponent<{ dangerouslySetInnerHTML: string; }>; /** @public */ export declare interface HtmlHTMLAttributes<T extends Element> extends Attrs<'html', T> { } /** @public */ export declare type HTMLInputAutocompleteAttribute = 'on' | 'off' | 'billing' | 'shipping' | 'name' | 'honorific-prefix' | 'given-name' | 'additional-name' | 'family-name' | 'honorific-suffix' | 'nickname' | 'username' | 'new-password' | 'current-password' | 'one-time-code' | 'organization-title' | 'organization' | 'street-address' | 'address-line1' | 'address-line2' | 'address-line3' | 'address-level4' | 'address-level3' | 'address-level2' | 'address-level1' | 'country' | 'country-name' | 'postal-code' | 'cc-name' | 'cc-given-name' | 'cc-additional-name' | 'cc-family-name' | 'cc-number' | 'cc-exp' | 'cc-exp-month' | 'cc-exp-year' | 'cc-csc' | 'cc-type' | 'transaction-currency' | 'transaction-amount' | 'language' | 'bday' | 'bday-day' | 'bday-month' | 'bday-year' | 'sex' | 'url' | 'photo'; /** @public */ export declare type HTMLInputTypeAttribute = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week' | (string & {}); /** * Low-level API used by the Optimizer to process `useTask$()` API. This method is not intended to * be used by developers. * * @internal */ export declare const _hW: () => void; declare type IfEquals<X, Y, A, B> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? A : B; /** @public */ export declare interface IframeHTMLAttributes<T extends Element> extends Attrs<'iframe', T> { } /** @public */ export declare interface ImgHTMLAttributes<T extends Element> extends Attrs<'img', T> { } /** @internal */ export declare const _IMMUTABLE: unique symbol; /** * Create a `____$(...)` convenience method from `___(...)`. * * It is very common for functions to take a lazy-loadable resource as a first argument. For this * reason, the Qwik Optimizer automatically extracts the first argument from any function which ends * in `$`. * * This means that `foo$(arg0)` and `foo($(arg0))` are equivalent with respect to Qwik Optimizer. * The former is just a shorthand for the latter. * * For example, these function calls are equivalent: * * - `component$(() => {...})` is same as `component($(() => {...}))` * * ```tsx * export function myApi(callback: QRL<() => void>): void { * // ... * } * * export const myApi$ = implicit$FirstArg(myApi); * // type of myApi$: (callback: () => void): void * * // can be used as: * myApi$(() => console.log('callback')); * * // will be transpiled to: * // FILE: <current file> * myApi(qrl('./chunk-abc.js', 'callback')); * * // FILE: chunk-abc.js * export const callback = () => console.log('callback'); * ``` * * @param fn - A function that should have its first argument automatically `$`. * @public */ export declare const implicit$FirstArg: <FIRST, REST extends any[], RET>(fn: (qrl: QRL<FIRST>, ...rest: REST) => RET) => ((qrl: FIRST, ...rest: REST) => RET); /** @internal */ export declare const inlinedQrl: <T>(symbol: T, symbolName: string, lexicalScopeCapture?: any[]) => QRL<T>; /** @internal */ export declare const inlinedQrlDEV: <T = any>(symbol: T, symbolName: string, opts: QRLDev, lexicalScopeCapture?: any[]) => QRL<T>; /** @public */ export declare type InputHTMLAttributes<T extends Element> = Attrs<'input', T, HTMLInputElement>; /** @public */ export declare interface InsHTMLAttributes<T extends Element> extends Attrs<'ins', T> { } /** @public */ export declare interface IntrinsicElements extends IntrinsicHTMLElements, IntrinsicSVGElements { } /** * These are the HTML tags with handlers allowing plain callbacks, to be used for the JSX interface * * @internal */ export declare type IntrinsicHTMLElements = { [key in keyof HTMLElementTagNameMap]: Augmented<HTMLElementTagNameMap[key], SpecialAttrs[key]> & HTMLAttributes<HTMLElementTagNameMap[key]>; } & { /** For unknown tags we allow all props */ [unknownTag: string]: { [prop: string]: any; } & HTMLElementAttrs & HTMLAttributes<any>; }; /** * These are the SVG tags with handlers allowing plain callbacks, to be used for the JSX interface * * @internal */ export declare type IntrinsicSVGElements = { [K in keyof Omit<SVGElementTagNameMap, keyof HTMLElementTagNameMap>]: LenientSVGProps<SVGElementTagNameMap[K]>; }; /** The shared state during an invoke() call */ declare interface InvokeContext { $url$: URL | undefined; /** The next available index for the sequentialScope array */ $i$: number; /** The Virtual parent component for the current component code */ $hostElement$: QwikElement | undefined; /** The current DOM element */ $element$: Element | undefined; /** The event we're currently handling */ $event$: PossibleEvents | undefined; /** The QRL function we're currently executing */ $qrl$: QRL | undefined; /** Promises that need awaiting before the current invocation is done */ $waitOn$: Promise<unknown>[] | undefined; /** The current subscriber for registering signal reads */ $subscriber$: Subscriber | null | undefined; $renderCtx$: RenderContext | undefined; $locale$: string | undefined; } declare type InvokeTuple = [Element, Event, URL?]; declare type IsAcceptableDOMValue<T> = T extends boolean | number | string | null | undefined ? ((...args: any[]) => any) extends T ? false : true : false; declare type IsAny<T> = 0 extends T & 1 ? true : false; export { isBrowser } export { isDev } declare type IsReadOnlyKey<T, K extends keyof T> = IfEquals<{ [Q in K]: T[K]; }, { -readonly [Q in K]: T[K]; }, false, true>; export { isServer } /** * Checks if a given object is a `Signal`. * * @param obj - The object to check if `Signal`. * @returns Boolean - True if the object is a `Signal`. * @public */ export declare const isSignal: <T = unknown>(obj: any) => obj is Signal<T>; /** * @public * Used by the JSX transpilers to create a JSXNode. * Note that the optimizer will not use this, instead using _jsxQ, _jsxS, and _jsxC directly. */ declare const jsx: <T extends string | FunctionComponent<any>>(type: T, props: T extends FunctionComponent<infer PROPS> ? PROPS : Record<any, unknown>, key?: string | number | null) => JSXNode<T>; export { jsx } export { jsx as jsxs } /** @internal */ export declare const _jsxBranch: <T>(input?: T) => T | undefined; /** * @internal * * Create a JSXNode for any tag, with possibly immutable props embedded in props */ export declare const _jsxC: <T extends string | FunctionComponent<Record<any, unknown>>>(type: T, mutableProps: (T extends FunctionComponent<infer PROPS> ? PROPS : Record<any, unknown>) | null, flags: number, key: string | number | null, dev?: JsxDevOpts) => JSXNodeInternal<T>; /** @public */ export declare type JSXChildren = string | number | boolean | null | undefined | Function | RegExp | JSXChildren[] | Promise<JSXChildren> | Signal<JSXChildren> | JSXNode; /** @public */ export declare const jsxDEV: <T extends string | FunctionComponent<Record<any, unknown>>>(type: T, props: T extends FunctionComponent<infer PROPS> ? PROPS : Record<any, unknown>, key: string | number | null | undefined, _isStatic: boolean, opts: JsxDevOpts, _ctx: unknown) => JSXNode<T>; declare interface JsxDevOpts { fileName: string; lineNumber: number; columnNumber: number; } /** * A JSX Node, an internal structure. You probably want to use `JSXOutput` instead. * * @public */ export declare interface JSXNode<T extends string | FunctionComponent | unknown = unknown> { type: T; props: T extends FunctionComponent<infer P> ? P : Record<any, unknown>; children: JSXChildren | null; key: string | null; dev?: DevJSX; } /** * The internal representation of a JSX node. * * @internal */ declare interface JSXNodeInternal<T extends string | FunctionComponent | unknown = unknown> extends JSXNode<T> { immutableProps: Record<any, unknown> | null; flags: number; } /** * Any valid output for a component * * @public */ export declare type JSXOutput = JSXNode | string | number | boolean | null | undefined | JSXOutput[]; /** * @internal * * Create a JSXNode for a string tag */ export declare const _jsxQ: <T extends string>(type: T, mutableProps: Record<any, unknown> | null, immutableProps: Record<any, unknown> | null, children: JSXChildren | null, flags: number, key: string | number | null, dev?: DevJSX) => JSXNodeInternal<T>; /** * @internal * * A string tag with dynamic props, possibly containing children */ export declare const _jsxS: <T extends string>(type: T, mutableProps: Record<any, unknown> | null, immutableProps: Record<any, unknown> | null, flags: number, key: string | number | null, dev?: DevJSX) => JSXNodeInternal<T>; /** @public */ export declare type JSXTagName = keyof HTMLElementTagNameMap | Omit<string, keyof HTMLElementTagNameMap>; /** @public @deprecated in html5 */ export declare interface KeygenHTMLAttributes<T extends Element> extends Attrs<'base', T> { } /** * The names of events that Qwik knows about. They are all lowercase, but on the JSX side, they are * PascalCase for nicer DX. (`onAuxClick$` vs `onauxclick$`) * * @public */ export declare type KnownEventNames = LiteralUnion<AllEventKeys, string>; /** @public */ export declare interface LabelHTMLAttributes<T extends Element> extends Attrs<'label', T> { } declare type LcEvent<T extends string, C extends string = Lowercase<T>> = C extends keyof AllEventsMap ? AllEventsMap[C] : Event; declare type LcEventNameMap = { [name in PascalCaseNames as Lowercase<name>]: name; }; /** * These definitions are for the JSX namespace, they allow passing plain event handlers instead of * QRLs */ declare interface LenientQwikElements extends IntrinsicHTMLElements, IntrinsicSVGElements { } /** @internal */ export declare interface LenientSVGProps<T extends Element> extends SVGAttributes, DOMAttributes<T> { } /** @public */ export declare interface LiHTMLAttributes<T extends Element> extends Attrs<'li', T> { } /** @public */ export declare interface LinkHTMLAttributes<T extends Element> extends Attrs<'link', T> { } /** A QRL that will be called when the event occurs */ declare type Listener = [ eventName: string, qrl: QRLInternal<(event: PossibleEvents, elem?: Element) => any> ]; /** * Allows creating a union type by combining primitive types and literal types without sacrificing * auto-completion in IDEs for the literal type part of the union. * * This type is a workaround for Microsoft/TypeScript#29729. It will be removed as soon as it's not * needed anymore. * * Example: * * ```ts * // Before * type Pet = 'dog' | 'cat' | string; * * const pet: Pet = ''; * // Start typing in your TypeScript-enabled IDE. * // You **will not** get auto-completion for `dog` and `cat` literals. * * // After * type Pet2 = LiteralUnion<'dog' | 'cat', string>; * * const pet: Pet2 = ''; * // You **will** get auto-completion for `dog` and `cat` literals. * ``` */ declare type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>); declare class LocalSubscriptionManager { private $groupToManagers$; private $containerState$;