UNPKG

domsubi

Version:

A Virtual-DOM Library for JavaScript

269 lines (243 loc) 12.2 kB
import { Cell,Stream, StreamSink } from "sodiumjs"; import { jsxml } from "./jsxml"; export declare abstract class DOMContext { abstract contains(o: DOMContext): boolean; abstract render(value: DOMSource, old_value: DOMSource): void; } export type EventStreamMap = { abort: StreamSink<UIEvent> animationcancel: StreamSink<AnimationEvent> animationend: StreamSink<AnimationEvent> animationiteration: StreamSink<AnimationEvent> animationstart: StreamSink<AnimationEvent> auxclick: StreamSink<MouseEvent> blur: StreamSink<FocusEvent> cancel: StreamSink<Event> canplay: StreamSink<Event> canplaythrough: StreamSink<Event> change: StreamSink<Event> click: StreamSink<MouseEvent> close: StreamSink<Event> contextmenu: StreamSink<MouseEvent> cuechange: StreamSink<Event> dblclick: StreamSink<MouseEvent> drag: StreamSink<DragEvent> dragend: StreamSink<DragEvent> dragenter: StreamSink<DragEvent> dragexit: StreamSink<Event> dragleave: StreamSink<DragEvent> dragover: StreamSink<DragEvent> dragstart: StreamSink<DragEvent> drop: StreamSink<DragEvent> durationchange: StreamSink<Event> emptied: StreamSink<Event> ended: StreamSink<Event> error: StreamSink<ErrorEvent> focus: StreamSink<FocusEvent> focusin: StreamSink<FocusEvent> focusout: StreamSink<FocusEvent> gotpointercapture: StreamSink<PointerEvent> input: StreamSink<Event> invalid: StreamSink<Event> keydown: StreamSink<KeyboardEvent> keypress: StreamSink<KeyboardEvent> keyup: StreamSink<KeyboardEvent> load: StreamSink<Event> loadeddata: StreamSink<Event> loadedmetadata: StreamSink<Event> loadstart: StreamSink<Event> lostpointercapture: StreamSink<PointerEvent> mousedown: StreamSink<MouseEvent> mouseenter: StreamSink<MouseEvent> mouseleave: StreamSink<MouseEvent> mousemove: StreamSink<MouseEvent> mouseout: StreamSink<MouseEvent> mouseover: StreamSink<MouseEvent> mouseup: StreamSink<MouseEvent> pause: StreamSink<Event> play: StreamSink<Event> playing: StreamSink<Event> pointercancel: StreamSink<PointerEvent> pointerdown: StreamSink<PointerEvent> pointerenter: StreamSink<PointerEvent> pointerleave: StreamSink<PointerEvent> pointermove: StreamSink<PointerEvent> pointerout: StreamSink<PointerEvent> pointerover: StreamSink<PointerEvent> pointerup: StreamSink<PointerEvent> progress: StreamSink<ProgressEvent> ratechange: StreamSink<Event> reset: StreamSink<Event> resize: StreamSink<UIEvent> scroll: StreamSink<Event> securitypolicyviolation: StreamSink<SecurityPolicyViolationEvent> seeked: StreamSink<Event> seeking: StreamSink<Event> select: StreamSink<Event> selectionchange: StreamSink<Event> selectstart: StreamSink<Event> stalled: StreamSink<Event> // lib.dom.d.tsに存在しないため追加 slotchange: StreamSink<Event> submit: StreamSink<Event> suspend: StreamSink<Event> timeupdate: StreamSink<Event> toggle: StreamSink<Event> touchcancel: StreamSink<TouchEvent> touchend: StreamSink<TouchEvent> touchmove: StreamSink<TouchEvent> touchstart: StreamSink<TouchEvent> transitioncancel: StreamSink<TransitionEvent> transitionend: StreamSink<TransitionEvent> transitionrun: StreamSink<TransitionEvent> transitionstart: StreamSink<TransitionEvent> volumechange: StreamSink<Event> waiting: StreamSink<Event> wheel: StreamSink<WheelEvent> } & { [key:string]: StreamSink<Event> }; export type DOMEventHandlerExpr<E extends Event> = { handleEvent(e: E): any } | ((e: E) => any) | string | null; export type DOMEventHandler = Partial<{ onabort: DOMEventHandlerExpr<UIEvent>; onanimationcancel: DOMEventHandlerExpr<AnimationEvent>; onanimationend: DOMEventHandlerExpr<AnimationEvent>; onanimationiteration: DOMEventHandlerExpr<AnimationEvent>; onanimationstart: DOMEventHandlerExpr<AnimationEvent>; onauxclick: DOMEventHandlerExpr<MouseEvent>; onblur: DOMEventHandlerExpr<FocusEvent>; oncancel: DOMEventHandlerExpr<Event>; oncanplay: DOMEventHandlerExpr<Event>; oncanplaythrough: DOMEventHandlerExpr<Event>; onchange: DOMEventHandlerExpr<Event>; onclick: DOMEventHandlerExpr<MouseEvent>; onclose: DOMEventHandlerExpr<Event>; oncontextmenu: DOMEventHandlerExpr<MouseEvent>; oncuechange: DOMEventHandlerExpr<Event>; ondblclick: DOMEventHandlerExpr<MouseEvent>; ondrag: DOMEventHandlerExpr<DragEvent>; ondragend: DOMEventHandlerExpr<DragEvent>; ondragenter: DOMEventHandlerExpr<DragEvent>; ondragexit: DOMEventHandlerExpr<Event>; ondragleave: DOMEventHandlerExpr<DragEvent>; ondragover: DOMEventHandlerExpr<DragEvent>; ondragstart: DOMEventHandlerExpr<DragEvent>; ondrop: DOMEventHandlerExpr<DragEvent>; ondurationchange: DOMEventHandlerExpr<Event>; onemptied: DOMEventHandlerExpr<Event>; onended: DOMEventHandlerExpr<Event>; onerror: DOMEventHandlerExpr<ErrorEvent>; onfocus: DOMEventHandlerExpr<FocusEvent>; onfocusin: DOMEventHandlerExpr<FocusEvent>; onfocusout: DOMEventHandlerExpr<FocusEvent>; // onformdata: DOMEventHandlerExpr<FormDataEvent>; onformdata: DOMEventHandlerExpr<Event & { formdata: FormData; }>; ongotpointercapture: DOMEventHandlerExpr<PointerEvent>; oninput: DOMEventHandlerExpr<Event>; oninvalid: DOMEventHandlerExpr<Event>; onkeydown: DOMEventHandlerExpr<KeyboardEvent>; onkeypress: DOMEventHandlerExpr<KeyboardEvent>; onkeyup: DOMEventHandlerExpr<KeyboardEvent>; onload: DOMEventHandlerExpr<Event>; onloadeddata: DOMEventHandlerExpr<Event>; onloadedmetadata: DOMEventHandlerExpr<Event>; onloadstart: DOMEventHandlerExpr<Event>; onlostpointercapture: DOMEventHandlerExpr<PointerEvent>; onmousedown: DOMEventHandlerExpr<MouseEvent>; onmouseenter: DOMEventHandlerExpr<MouseEvent>; onmouseleave: DOMEventHandlerExpr<MouseEvent>; onmousemove: DOMEventHandlerExpr<MouseEvent>; onmouseout: DOMEventHandlerExpr<MouseEvent>; onmouseover: DOMEventHandlerExpr<MouseEvent>; onmouseup: DOMEventHandlerExpr<MouseEvent>; onpause: DOMEventHandlerExpr<Event>; onplay: DOMEventHandlerExpr<Event>; onplaying: DOMEventHandlerExpr<Event>; onpointercancel: DOMEventHandlerExpr<PointerEvent>; onpointerdown: DOMEventHandlerExpr<PointerEvent>; onpointerenter: DOMEventHandlerExpr<PointerEvent>; onpointerleave: DOMEventHandlerExpr<PointerEvent>; onpointermove: DOMEventHandlerExpr<PointerEvent>; onpointerout: DOMEventHandlerExpr<PointerEvent>; onpointerover: DOMEventHandlerExpr<PointerEvent>; onpointerup: DOMEventHandlerExpr<PointerEvent>; onprogress: DOMEventHandlerExpr<ProgressEvent>; onratechange: DOMEventHandlerExpr<Event>; onreset: DOMEventHandlerExpr<Event>; onresize: DOMEventHandlerExpr<UIEvent>; onscroll: DOMEventHandlerExpr<Event>; onsecuritypolicyviolation: DOMEventHandlerExpr<SecurityPolicyViolationEvent>; onseeked: DOMEventHandlerExpr<Event>; onseeking: DOMEventHandlerExpr<Event>; onselect: DOMEventHandlerExpr<Event>; onselectionchange: DOMEventHandlerExpr<Event>; onselectstart: DOMEventHandlerExpr<Event>; // lib.dom.d.tsに存在しないため追加 onslotchange: DOMEventHandlerExpr<Event>; onstalled: DOMEventHandlerExpr<Event>; onsubmit: DOMEventHandlerExpr<Event>; onsuspend: DOMEventHandlerExpr<Event>; ontimeupdate: DOMEventHandlerExpr<Event>; ontoggle: DOMEventHandlerExpr<Event>; ontouchcancel: DOMEventHandlerExpr<TouchEvent>; ontouchend: DOMEventHandlerExpr<TouchEvent>; ontouchmove: DOMEventHandlerExpr<TouchEvent>; ontouchstart: DOMEventHandlerExpr<TouchEvent>; ontransitioncancel: DOMEventHandlerExpr<TransitionEvent>; ontransitionend: DOMEventHandlerExpr<TransitionEvent>; ontransitionrun: DOMEventHandlerExpr<TransitionEvent>; ontransitionstart: DOMEventHandlerExpr<TransitionEvent>; onvolumechange: DOMEventHandlerExpr<Event>; onwaiting: DOMEventHandlerExpr<Event>; onwheel: DOMEventHandlerExpr<WheelEvent>; }>; export interface WebComponentConstructor extends CustomElementConstructor { tag: string; shadowOpen: boolean; prefix?: string; observedAttributes?: string[]; observedMutation?: MutationObserverInit; } export interface WebComponentClass { attributeChangedCallback?(name: string, oldValue: string, newValue: string): void; connectedCallback?(): void; disconnectedCallback?(): void; adoptedCallback?(olddoc: Document, newdoc: Document): void; } export type HTMLAttrName = "abbr" | "accept" | "accept-charset" | "accesskey" | "action" | "allow" | "allowfullscreen" | "allowpaymentrequest" | "alt" | "as" | "async" | "autocapitalize" | "autocomplete" | "autofocus" | "autoplay" | "charset" | "checked" | "cite" | "class" | "color" | "cols" | "colspan" | "content" | "contenteditable" | "controls" | "coords" | "crossorigin" | "data" | "datetime" | "decoding" | "default" | "defer" | "dir" | "dir" | "dirname" | "disabled" | "download" | "draggable" | "enctype" | "enterkeyhint" | "for" | "form" | "formaction" | "formenctype" | "formmethod" | "formnovalidate" | "formtarget" | "headers" | "height" | "hidden" | "high" | "href" | "hreflang" | "http-equiv" | "id" | "imagesizes" | "imagesrcset" | "inputmode" | "integrity" | "is" | "ismap" | "itemid" | "itemprop" | "itemref" | "itemscope" | "itemtype" | "kind" | "label" | "lang" | "list" | "loop" | "low" | "manifest" | "max" | "maxlength" | "media" | "method" | "min" | "minlength" | "multiple" | "muted" | "name" | "nomodule" | "nonce" | "novalidate" | "open" | "optimum" | "pattern" | "ping" | "placeholder" | "playsinline" | "poster" | "preload" | "readonly" | "referrerpolicy" | "rel" | "required" | "reversed" | "rows" | "rowspan" | "sandbox" | "scope" | "selected" | "shape" | "size" | "sizes" | "slot" | "span" | "spellcheck" | "src" | "srcdoc" | "srclang" | "srcset" | "start" | "step" | "style" | "tabindex" | "target" | "title" | "translate" | "type" | "usemap" | "value"; export type CSSPropertyName = { [P in keyof CSSStyleDeclaration]: CSSStyleDeclaration[P] extends string ? P : never }[keyof CSSStyleDeclaration]; export type ElementSource = { $?: AttributesSource; } & { [P in keyof HTMLElementTagNameMap]?: NodeSource; } | { [key: string]: NodeSource | AttributesSource | Cell<AttributesSource>; }; export type DOMStringSource = string | number | boolean | null | undefined | { toString(): string }; export type TextNodeSource = DOMStringSource; export type DocumentFragmentSource = NodeSource[]; export type NodeSource = Node | TextNodeSource | DocumentFragmentSource | ElementSource | Stream<NodeSource> | Cell<NodeSource>; export type AttrValue = DOMStringSource | string[] | DOMEventHandler[keyof DOMEventHandler] | StyleSource | DatasetSource | Promise<AttrValue> | Cell<AttrValue>; export type StyleSource = { [P in CSSPropertyName]: Cell<DOMStringSource> | DOMStringSource; }; export type DatasetSource = { [key: string]: Cell<DOMStringSource> | DOMStringSource; }; export type AttributesSource = ({ [P in HTMLAttrName]?: AttrValue; } & DOMEventHandler & { [key: string]: AttrValue | DOMEventHandler[keyof DOMEventHandler] }) | Stream<AttributesSource> | Cell<AttributesSource>; export type AttrSource = AttributesSource | StyleSource | DatasetSource; export type PointReference = [Node] | [Node, Node]; export type FRPV<V> = Promise<V> | Cell<V> | Stream<V>; export type DOMSource = NodeSource | AttrSource | AttrValue | StyleSource | DatasetSource; export type CustomCSSVariables = { [key:string]: string | Cell<string> };