jsx-view
Version:
Minimal JSX for HTML DOM tightly integrated with RxJS. TypeScript definitions, and attributes can be assigned to observables.
348 lines (340 loc) • 11.1 kB
text/typescript
import type { Observable } from "rxjs"
import "./declare-values"
declare global {
namespace JSX {
/**
* Default children type for intrinsic elements.
* Ensure your elements can accept all children by declaring their `children` property as such:
* @example
* function MyComponent(props: { children: JSX.Children }) {
* return <div class="my-component">{props.children}</div>
* }
*/
type Children = JSX.Child | JSX.Children[]
type ComponentFunction<P extends Record<string, any>> = (props: P) => JSX.Child
/** Get the Props from the component function */
type Props<T extends ComponentFunction<any>> = Parameters<T>[0]
type StyleValueObject = {
[P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P] | Observable<CSSStyleDeclaration[P]> | undefined
}
type AnyHtmlPropValue = AnyValue | StyleValueObject
interface HtmlProps<T extends HTMLElement = HTMLElement> {
accesskey?: StringValue
class?: StringValue
/** "inherit" (default) | "true" | "false" */
contenteditable?: Value<"inherit" | "true" | "false">
dir?: StringValue
hidden?: BooleanValue
id?: StringValue
role?: StringValue
lang?: StringValue
draggable?: BooleanValue
spellcheck?: BooleanValue
style?: StringValue | StyleValueObject
tabindex?: StringValue
title?: StringValue
translate?: Value<"yes" | "no">
}
interface HtmlAnchorProps extends HtmlProps<HTMLAnchorElement> {
href?: StringValue
target?: StringValue
download?: StringValue
ping?: StringValue
rel?: StringValue
media?: StringValue
hreflang?: StringValue
type?: StringValue
}
interface HtmlAreaProps extends HtmlProps<HTMLAreaElement> {
alt?: StringValue
coords?: StringValue
shape?: StringValue
href?: StringValue
target?: StringValue
ping?: StringValue
rel?: StringValue
media?: StringValue
hreflang?: StringValue
type?: StringValue
}
interface HtmlAudioProps extends HtmlProps<HTMLAudioElement> {
src?: StringValue
autobuffer?: StringValue
autoplay?: BooleanValue
loop?: BooleanValue
controls?: BooleanValue
}
interface HtmlBaseProps extends HtmlProps {
href?: StringValue
target?: StringValue
}
interface HtmlQuoteProps extends HtmlProps<HTMLQuoteElement> {
cite?: StringValue
}
interface HtmlBodyProps extends HtmlProps<HTMLBodyElement> {}
interface HtmlButtonProps extends HtmlProps<HTMLButtonElement> {
action?: StringValue
autofocus?: BooleanValue
disabled?: BooleanValue
enctype?: StringValue
form?: StringValue
method?: StringValue
name?: StringValue
novalidate?: BooleanValue
target?: StringValue
type?: StringValue
value?: StringValue
}
interface HtmlDataListProps extends HtmlProps<HTMLDataListElement> {}
interface HtmlCanvasProps extends HtmlProps<HTMLCanvasElement> {
width?: NumberValue
height?: NumberValue
}
interface HtmlTableColProps extends HtmlProps<HTMLTableColElement> {
span?: StringValue
}
interface HtmlTableSectionProps extends HtmlProps<HTMLTableSectionElement> {}
interface HtmlTableRowProps extends HtmlProps<HTMLTableRowElement> {}
interface HtmlDataProps extends HtmlProps {
value?: StringValue
}
interface HtmlEmbedProps extends HtmlProps<HTMLEmbedElement> {
src?: StringValue
type?: StringValue
width?: NumberValue
height?: NumberValue
[anything: string]: AnyHtmlPropValue
}
interface HtmlFieldSetProps extends HtmlProps<HTMLFieldSetElement> {
disabled?: BooleanValue
form?: StringValue
name?: StringValue
}
interface HtmlFormProps extends HtmlProps<HTMLFormElement> {
acceptCharset?: StringValue
action?: StringValue
autocomplete?: StringValue
enctype?: StringValue
method?: StringValue
name?: StringValue
novalidate?: BooleanValue
target?: StringValue
}
interface HtmlHtmlProps extends HtmlProps<HTMLHtmlElement> {
manifest?: StringValue
}
interface HtmlIFrameProps extends HtmlProps<HTMLIFrameElement> {
src?: StringValue
srcdoc?: StringValue
name?: StringValue
sandbox?: StringValue
seamless?: StringValue
width?: NumberValue
height?: NumberValue
}
interface HtmlImageProps extends HtmlProps<HTMLImageElement> {
alt?: StringValue
src?: StringValue
crossorigin?: StringValue
usemap?: StringValue
ismap?: StringValue
width?: NumberValue
height?: NumberValue
}
interface HtmlInputProps extends HtmlProps<HTMLInputElement> {
accept?: StringValue
action?: StringValue
alt?: StringValue
autocomplete?: StringValue
autofocus?: BooleanValue
checked?: BooleanValue
disabled?: BooleanValue
enctype?: StringValue
form?: StringValue
height?: NumberValue
list?: StringValue
max?: NumberValue
maxlength?: NumberValue
method?: StringValue
min?: NumberValue
multiple?: BooleanValue
name?: StringValue
novalidate?: BooleanValue
pattern?: StringValue
placeholder?: StringValue
readonly?: BooleanValue
required?: BooleanValue
size?: NumberValue
src?: StringValue
step?: NumberValue
target?: StringValue
type?: StringValue
value?: StringValue | NumberValue
width?: NumberValue
}
interface HtmlModProps extends HtmlProps<HTMLModElement> {
cite?: StringValue
datetime?: StringValue | DateValue
}
interface HtmlLabelProps extends HtmlProps<HTMLLabelElement> {
form?: StringValue
for?: StringValue
}
interface HtmlLIProps extends HtmlProps<HTMLLIElement> {
value?: StringValue | NumberValue
}
interface HtmlLinkProps extends HtmlProps<HTMLLinkElement> {
href?: StringValue
crossorigin?: StringValue
rel?: StringValue
media?: StringValue
hreflang?: StringValue
type?: StringValue
sizes?: StringValue
integrity?: StringValue
}
interface HtmlMapProps extends HtmlProps<HTMLMapElement> {
name?: StringValue
}
interface HtmlMetaProps extends HtmlProps<HTMLMetaElement> {
name?: StringValue
httpEquiv?: StringValue
content?: StringValue
charset?: StringValue
}
interface HtmlMeterProps extends HtmlProps<HTMLMeterElement> {
value?: StringValue | NumberValue
min?: StringValue | NumberValue
max?: StringValue | NumberValue
low?: StringValue | NumberValue
high?: StringValue | NumberValue
optimum?: StringValue | NumberValue
}
interface HtmlObjectProps extends HtmlProps<HTMLObjectElement> {
data?: StringValue
type?: StringValue
name?: StringValue
usemap?: StringValue
form?: StringValue
width?: NumberValue
height?: NumberValue
}
interface HtmlOListProps extends HtmlProps<HTMLOListElement> {
reversed?: BooleanValue
start?: StringValue | NumberValue
}
interface HtmlOptGroupProps extends HtmlProps<HTMLOptGroupElement> {
disabled?: BooleanValue
label?: StringValue
}
interface HtmlOptionProps extends HtmlProps<HTMLOptionElement> {
disabled?: BooleanValue
label?: StringValue
selected?: BooleanValue
value?: StringValue
}
interface HtmlOutputProps extends HtmlProps<HTMLOutputElement> {
for?: StringValue
form?: StringValue
name?: StringValue
}
interface HtmlParamProps extends HtmlProps<HTMLParamElement> {
name?: StringValue
value?: StringValue
}
interface HtmlProgressProps extends HtmlProps<HTMLProgressElement> {
value?: StringValue | NumberValue
max?: StringValue | NumberValue
}
interface HtmlLegendProps extends HtmlProps<HTMLLegendElement> {}
interface HtmlMenuProps extends HtmlProps<HTMLMenuElement> {
type?: StringValue
label?: StringValue
}
interface HtmlScriptProps extends HtmlProps<HTMLScriptElement> {
src?: StringValue
type?: StringValue
charset?: StringValue
async?: BooleanValue
defer?: BooleanValue
crossorigin?: StringValue
integrity?: StringValue
text?: StringValue
}
interface HtmlDetailsProps extends HtmlProps<HTMLDetailsElement> {
open?: BooleanValue
}
interface HtmlSelectProps extends HtmlProps<HTMLSelectElement> {
autofocus?: BooleanValue
disabled?: BooleanValue
form?: StringValue
multiple?: BooleanValue
name?: StringValue
required?: BooleanValue
size?: NumberValue
}
interface HtmlSourceProps extends HtmlProps<HTMLSourceElement> {
src?: StringValue
type?: StringValue
media?: StringValue
}
interface HtmlStyleProps extends HtmlProps<HTMLStyleElement> {
media?: StringValue
type?: StringValue
disabled?: BooleanValue
/** @deprecated https://www.w3schools.com/tags/att_scoped.asp */
scoped?: BooleanValue
}
interface HtmlTableProps extends HtmlProps<HTMLTableElement> {}
interface HtmlTableDataCellProps extends HtmlProps<HTMLTableDataCellElement> {
colspan?: StringValue | NumberValue
rowspan?: StringValue | NumberValue
headers?: StringValue
}
interface HtmlTextAreaProps extends HtmlProps<HTMLTextAreaElement> {
autofocus?: BooleanValue
cols?: NumberValue
dirname?: StringValue
disabled?: BooleanValue
form?: StringValue
maxlength?: NumberValue
minlength?: NumberValue
name?: StringValue
placeholder?: StringValue
readonly?: BooleanValue
required?: BooleanValue
rows?: NumberValue
wrap?: BooleanValue
}
interface HtmlTableHeaderCellProps extends HtmlProps<HTMLTableHeaderCellElement> {
colspan?: StringValue | NumberValue
rowspan?: StringValue | NumberValue
headers?: StringValue
scope?: StringValue
}
interface HtmlTimeProps extends HtmlProps<HTMLTimeElement> {
datetime?: StringValue | DateValue
}
interface HtmlTrackProps extends HtmlProps<HTMLTrackElement> {
default?: BooleanValue
kind?: StringValue
label?: StringValue
src?: StringValue
srclang?: StringValue
}
interface HtmlVideoProps extends HtmlProps<HTMLVideoElement> {
src?: StringValue
poster?: StringValue
autobuffer?: StringValue
autoplay?: BooleanValue
loop?: BooleanValue
controls?: BooleanValue
width?: NumberValue
height?: NumberValue
}
/** AnyProps is a general props definition for intrinsic elements (<a>, <div>, <iframe>, etc.) */
interface AnyProps extends ElementProps {
[attrName: string]: AnyValue
}
}
}