Skip to main content
Module

std/types/react.d.ts

Deno standard library
Go to Latest
File
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844
// These types are adapted from// https://github.com/DefinitelyTyped/DefinitelyTyped to work under Deno.//// Type definitions for React 16.9// Project: http://facebook.github.io/react/// Definitions by: Asana <https://asana.com>// AssureSign <http://www.assuresign.com>// Microsoft <https://microsoft.com>// John Reilly <https://github.com/johnnyreilly>// Benoit Benezech <https://github.com/bbenezech>// Patricio Zavolinsky <https://github.com/pzavolinsky>// Digiguru <https://github.com/digiguru>// Eric Anderson <https://github.com/ericanderson>// Dovydas Navickas <https://github.com/DovydasNavickas>// Josh Rutherford <https://github.com/theruther4d>// Guilherme Hübner <https://github.com/guilhermehubner>// Ferdy Budhidharma <https://github.com/ferdaber>// Johann Rakotoharisoa <https://github.com/jrakotoharisoa>// Olivier Pascal <https://github.com/pascaloliv>// Martin Hochel <https://github.com/hotell>// Frank Li <https://github.com/franklixuefei>// Jessica Franco <https://github.com/Jessidhia>// Saransh Kataria <https://github.com/saranshkataria>// Kanitkorn Sujautra <https://github.com/lukyth>// Sebastian Silbermann <https://github.com/eps1lon>// Kyle Scully <https://github.com/zieka>// Cong Zhang <https://github.com/dancerphil>// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/* eslint-disable */
import "./react/react_global.d.ts";
import * as CSS from "./react/csstype.d.ts";import * as PropTypes from "./react/prop-types.d.ts";
type NativeAnimationEvent = AnimationEvent;type NativeClipboardEvent = ClipboardEvent;type NativeCompositionEvent = CompositionEvent;type NativeDragEvent = DragEvent;type NativeFocusEvent = FocusEvent;type NativeKeyboardEvent = KeyboardEvent;type NativeMouseEvent = MouseEvent;type NativeTouchEvent = TouchEvent;type NativePointerEvent = PointerEvent;type NativeTransitionEvent = TransitionEvent;type NativeUIEvent = UIEvent;type NativeWheelEvent = WheelEvent;type Booleanish = boolean | "true" | "false";
/** * defined in scheduler/tracing */interface SchedulerInteraction { id: number; name: string; timestamp: number;}
// tslint:disable-next-line:export-just-namespaceexport = React;export as namespace React;
declare namespace React { // // React Elements // ---------------------------------------------------------------------- type ElementType<P = any> = | { [K in keyof JSX.IntrinsicElements]: P extends JSX.IntrinsicElements[K] ? K : never; }[keyof JSX.IntrinsicElements] | ComponentType<P>; /** * @deprecated Please use `ElementType` */ type ReactType<P = any> = ElementType<P>; type ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P>; type JSXElementConstructor<P> = | ((props: P) => ReactElement | null) | (new (props: P) => Component<P, any>); type Key = string | number; interface RefObject<T> { readonly current: T | null; } type Ref<T> = | { bivarianceHack(instance: T | null): void }["bivarianceHack"] | RefObject<T> | null; type LegacyRef<T> = string | Ref<T>; type ComponentState = any; /** * @internal You shouldn't need to use this type since you never see these attributes * inside your component or have to validate them. */ interface Attributes { key?: Key; } interface RefAttributes<T> extends Attributes { ref?: Ref<T>; } interface ClassAttributes<T> extends Attributes { ref?: LegacyRef<T>; } interface ReactElement< P = any, T extends string | JSXElementConstructor<any> = | string | JSXElementConstructor<any> > { type: T; props: P; key: Key | null; } interface ReactComponentElement< T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>, P = Pick<ComponentProps<T>, Exclude<keyof ComponentProps<T>, "key" | "ref">> > extends ReactElement<P, T> {} /** * @deprecated Please use `FunctionComponentElement` */ type SFCElement<P> = FunctionComponentElement<P>; interface FunctionComponentElement<P> extends ReactElement<P, FunctionComponent<P>> { ref?: "ref" extends keyof P ? P extends { ref?: infer R } ? R : never : never; } type CElement<P, T extends Component<P, ComponentState>> = ComponentElement< P, T >; interface ComponentElement<P, T extends Component<P, ComponentState>> extends ReactElement<P, ComponentClass<P>> { ref?: LegacyRef<T>; } type ClassicElement<P> = CElement<P, ClassicComponent<P, ComponentState>>; // string fallback for custom web-components interface DOMElement< P extends HTMLAttributes<T> | SVGAttributes<T>, T extends Element > extends ReactElement<P, string> { ref: LegacyRef<T>; } // ReactHTML for ReactHTMLElement // tslint:disable-next-line:no-empty-interface interface ReactHTMLElement<T extends HTMLElement> extends DetailedReactHTMLElement<AllHTMLAttributes<T>, T> {} interface DetailedReactHTMLElement< P extends HTMLAttributes<T>, T extends HTMLElement > extends DOMElement<P, T> { type: keyof ReactHTML; } // ReactSVG for ReactSVGElement interface ReactSVGElement extends DOMElement<SVGAttributes<SVGElement>, SVGElement> { type: keyof ReactSVG; } interface ReactPortal extends ReactElement { key: Key | null; children: ReactNode; } // // Factories // ---------------------------------------------------------------------- type Factory<P> = ( props?: Attributes & P, ...children: ReactNode[] ) => ReactElement<P>; /** * @deprecated Please use `FunctionComponentFactory` */ type SFCFactory<P> = FunctionComponentFactory<P>; type FunctionComponentFactory<P> = ( props?: Attributes & P, ...children: ReactNode[] ) => FunctionComponentElement<P>; type ComponentFactory<P, T extends Component<P, ComponentState>> = ( props?: ClassAttributes<T> & P, ...children: ReactNode[] ) => CElement<P, T>; type CFactory<P, T extends Component<P, ComponentState>> = ComponentFactory< P, T >; type ClassicFactory<P> = CFactory<P, ClassicComponent<P, ComponentState>>; type DOMFactory<P extends DOMAttributes<T>, T extends Element> = ( props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ) => DOMElement<P, T>; // tslint:disable-next-line:no-empty-interface interface HTMLFactory<T extends HTMLElement> extends DetailedHTMLFactory<AllHTMLAttributes<T>, T> {} interface DetailedHTMLFactory< P extends HTMLAttributes<T>, T extends HTMLElement > extends DOMFactory<P, T> { ( props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ): DetailedReactHTMLElement<P, T>; } interface SVGFactory extends DOMFactory<SVGAttributes<SVGElement>, SVGElement> { ( props?: (ClassAttributes<SVGElement> & SVGAttributes<SVGElement>) | null, ...children: ReactNode[] ): ReactSVGElement; } // // React Nodes // http://facebook.github.io/react/docs/glossary.html // ---------------------------------------------------------------------- type ReactText = string | number; type ReactChild = ReactElement | ReactText; interface ReactNodeArray extends Array<ReactNode> {} type ReactFragment = {} | ReactNodeArray; type ReactNode = | ReactChild | ReactFragment | ReactPortal | boolean | null | undefined; // // Top Level API // ---------------------------------------------------------------------- // DOM Elements function createFactory<T extends HTMLElement>( type: keyof ReactHTML ): HTMLFactory<T>; function createFactory(type: keyof ReactSVG): SVGFactory; function createFactory<P extends DOMAttributes<T>, T extends Element>( type: string ): DOMFactory<P, T>; // Custom components function createFactory<P>( type: FunctionComponent<P> ): FunctionComponentFactory<P>; function createFactory<P>( type: ClassType< P, ClassicComponent<P, ComponentState>, ClassicComponentClass<P> > ): CFactory<P, ClassicComponent<P, ComponentState>>; function createFactory< P, T extends Component<P, ComponentState>, C extends ComponentClass<P> >(type: ClassType<P, T, C>): CFactory<P, T>; function createFactory<P>(type: ComponentClass<P>): Factory<P>; // DOM Elements // TODO: generalize this to everything in `keyof ReactHTML`, not just "input" function createElement( type: "input", props?: | (InputHTMLAttributes<HTMLInputElement> & ClassAttributes<HTMLInputElement>) | null, ...children: ReactNode[] ): DetailedReactHTMLElement< InputHTMLAttributes<HTMLInputElement>, HTMLInputElement >; function createElement<P extends HTMLAttributes<T>, T extends HTMLElement>( type: keyof ReactHTML, props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ): DetailedReactHTMLElement<P, T>; function createElement<P extends SVGAttributes<T>, T extends SVGElement>( type: keyof ReactSVG, props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ): ReactSVGElement; function createElement<P extends DOMAttributes<T>, T extends Element>( type: string, props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ): DOMElement<P, T>; // Custom components function createElement<P extends {}>( type: FunctionComponent<P>, props?: (Attributes & P) | null, ...children: ReactNode[] ): FunctionComponentElement<P>; function createElement<P extends {}>( type: ClassType< P, ClassicComponent<P, ComponentState>, ClassicComponentClass<P> >, props?: (ClassAttributes<ClassicComponent<P, ComponentState>> & P) | null, ...children: ReactNode[] ): CElement<P, ClassicComponent<P, ComponentState>>; function createElement< P extends {}, T extends Component<P, ComponentState>, C extends ComponentClass<P> >( type: ClassType<P, T, C>, props?: (ClassAttributes<T> & P) | null, ...children: ReactNode[] ): CElement<P, T>; function createElement<P extends {}>( type: FunctionComponent<P> | ComponentClass<P> | string, props?: (Attributes & P) | null, ...children: ReactNode[] ): ReactElement<P>; // DOM Elements // ReactHTMLElement function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>( element: DetailedReactHTMLElement<P, T>, props?: P, ...children: ReactNode[] ): DetailedReactHTMLElement<P, T>; // ReactHTMLElement, less specific function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>( element: ReactHTMLElement<T>, props?: P, ...children: ReactNode[] ): ReactHTMLElement<T>; // SVGElement function cloneElement<P extends SVGAttributes<T>, T extends SVGElement>( element: ReactSVGElement, props?: P, ...children: ReactNode[] ): ReactSVGElement; // DOM Element (has to be the last, because type checking stops at first overload that fits) function cloneElement<P extends DOMAttributes<T>, T extends Element>( element: DOMElement<P, T>, props?: DOMAttributes<T> & P, ...children: ReactNode[] ): DOMElement<P, T>; // Custom components function cloneElement<P>( element: FunctionComponentElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[] ): FunctionComponentElement<P>; function cloneElement<P, T extends Component<P, ComponentState>>( element: CElement<P, T>, props?: Partial<P> & ClassAttributes<T>, ...children: ReactNode[] ): CElement<P, T>; function cloneElement<P>( element: ReactElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[] ): ReactElement<P>; // Context via RenderProps interface ProviderProps<T> { value: T; children?: ReactNode; } interface ConsumerProps<T> { children: (value: T) => ReactNode; unstable_observedBits?: number; } // TODO: similar to how Fragment is actually a symbol, the values returned from createContext, // forwardRef and memo are actually objects that are treated specially by the renderer; see: // https://github.com/facebook/react/blob/v16.6.0/packages/react/src/ReactContext.js#L35-L48 // https://github.com/facebook/react/blob/v16.6.0/packages/react/src/forwardRef.js#L42-L45 // https://github.com/facebook/react/blob/v16.6.0/packages/react/src/memo.js#L27-L31 // However, we have no way of telling the JSX parser that it's a JSX element type or its props other than // by pretending to be a normal component. // // We don't just use ComponentType or SFC types because you are not supposed to attach statics to this // object, but rather to the original function. interface ExoticComponent<P = {}> { /** * **NOTE**: Exotic components are not callable. */ (props: P): ReactElement | null; readonly $$typeof: symbol; } interface NamedExoticComponent<P = {}> extends ExoticComponent<P> { displayName?: string; } interface ProviderExoticComponent<P> extends ExoticComponent<P> { propTypes?: WeakValidationMap<P>; } type ContextType<C extends Context<any>> = C extends Context<infer T> ? T : never; // NOTE: only the Context object itself can get a displayName // https://github.com/facebook/react-devtools/blob/e0b854e4c/backend/attachRendererFiber.js#L310-L325 type Provider<T> = ProviderExoticComponent<ProviderProps<T>>; type Consumer<T> = ExoticComponent<ConsumerProps<T>>; interface Context<T> { Provider: Provider<T>; Consumer: Consumer<T>; displayName?: string; } function createContext<T>( // If you thought this should be optional, see // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/24509#issuecomment-382213106 defaultValue: T, calculateChangedBits?: (prev: T, next: T) => number ): Context<T>; function isValidElement<P>( object: {} | null | undefined ): object is ReactElement<P>; const Children: ReactChildren; const Fragment: ExoticComponent<{ children?: ReactNode }>; const StrictMode: ExoticComponent<{ children?: ReactNode }>; interface SuspenseProps { children?: ReactNode; /** A fallback react tree to show when a Suspense child (like React.lazy) suspends */ fallback: NonNullable<ReactNode> | null; /** * Tells React whether to “skip” revealing this boundary during the initial load. * This API will likely be removed in a future release. */ // NOTE: this is unflagged and is respected even in stable builds unstable_avoidThisFallback?: boolean; } /** * This feature is not yet available for server-side rendering. * Suspense support will be added in a later release. */ const Suspense: ExoticComponent<SuspenseProps>; const version: string; /** * {@link https://github.com/bvaughn/rfcs/blob/profiler/text/0000-profiler.md#detailed-design | API} */ type ProfilerOnRenderCallback = ( id: string, phase: "mount" | "update", actualDuration: number, baseDuration: number, startTime: number, commitTime: number, interactions: Set<SchedulerInteraction> ) => void; interface ProfilerProps { children?: ReactNode; id: string; onRender: ProfilerOnRenderCallback; } const Profiler: ExoticComponent<ProfilerProps>; // // Component API // ---------------------------------------------------------------------- type ReactInstance = Component<any> | Element; // Base component for plain JS classes // tslint:disable-next-line:no-empty-interface interface Component<P = {}, S = {}, SS = any> extends ComponentLifecycle<P, S, SS> {} class Component<P, S> { // tslint won't let me format the sample code in a way that vscode likes it :( /** * If set, `this.context` will be set at runtime to the current value of the given Context. * * Usage: * * ```ts * type MyContext = number * const Ctx = React.createContext<MyContext>(0) * * class Foo extends React.Component { * static contextType = Ctx * context!: React.ContextType<typeof Ctx> * render () { * return <>My context's value: {this.context}</>; * } * } * ``` * * @see https://reactjs.org/docs/context.html#classcontexttype */ static contextType?: Context<any>; /** * If using the new style context, re-declare this in your class to be the * `React.ContextType` of your `static contextType`. * Should be used with type annotation or static contextType. * * ```ts * static contextType = MyContext * // For TS pre-3.7: * context!: React.ContextType<typeof MyContext> * // For TS 3.7 and above: * declare context: React.ContextType<typeof MyContext> * ``` * * @see https://reactjs.org/docs/context.html */ // TODO (TypeScript 3.0): unknown context: any; constructor(props: Readonly<P>); /** * @deprecated * @see https://reactjs.org/docs/legacy-context.html */ constructor(props: P, context?: any); // We MUST keep setState() as a unified signature because it allows proper checking of the method return type. // See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18365#issuecomment-351013257 // Also, the ` | S` allows intellisense to not be dumbisense setState<K extends keyof S>( state: | (( prevState: Readonly<S>, props: Readonly<P> ) => Pick<S, K> | S | null) | (Pick<S, K> | S | null), callback?: () => void ): void; forceUpdate(callback?: () => void): void; render(): ReactNode; // React.Props<T> is now deprecated, which means that the `children` // property is not available on `P` by default, even though you can // always pass children as variadic arguments to `createElement`. // In the future, if we can define its call signature conditionally // on the existence of `children` in `P`, then we should remove this. readonly props: Readonly<P> & Readonly<{ children?: ReactNode }>; state: Readonly<S>; /** * @deprecated * https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs */ refs: { [key: string]: ReactInstance; }; } class PureComponent<P = {}, S = {}, SS = any> extends Component<P, S, SS> {} interface ClassicComponent<P = {}, S = {}> extends Component<P, S> { replaceState(nextState: S, callback?: () => void): void; isMounted(): boolean; getInitialState?(): S; } interface ChildContextProvider<CC> { getChildContext(): CC; } // // Class Interfaces // ---------------------------------------------------------------------- /** * @deprecated as of recent React versions, function components can no * longer be considered 'stateless'. Please use `FunctionComponent` instead. * * @see [React Hooks](https://reactjs.org/docs/hooks-intro.html) */ type SFC<P = {}> = FunctionComponent<P>; /** * @deprecated as of recent React versions, function components can no * longer be considered 'stateless'. Please use `FunctionComponent` instead. * * @see [React Hooks](https://reactjs.org/docs/hooks-intro.html) */ type StatelessComponent<P = {}> = FunctionComponent<P>; type FC<P = {}> = FunctionComponent<P>; interface FunctionComponent<P = {}> { (props: PropsWithChildren<P>, context?: any): ReactElement | null; propTypes?: WeakValidationMap<P>; contextTypes?: ValidationMap<any>; defaultProps?: Partial<P>; displayName?: string; } interface RefForwardingComponent<T, P = {}> { (props: PropsWithChildren<P>, ref: Ref<T>): ReactElement | null; propTypes?: WeakValidationMap<P>; contextTypes?: ValidationMap<any>; defaultProps?: Partial<P>; displayName?: string; } interface ComponentClass<P = {}, S = ComponentState> extends StaticLifecycle<P, S> { new (props: P, context?: any): Component<P, S>; propTypes?: WeakValidationMap<P>; contextType?: Context<any>; contextTypes?: ValidationMap<any>; childContextTypes?: ValidationMap<any>; defaultProps?: Partial<P>; displayName?: string; } interface ClassicComponentClass<P = {}> extends ComponentClass<P> { new (props: P, context?: any): ClassicComponent<P, ComponentState>; getDefaultProps?(): P; } /** * We use an intersection type to infer multiple type parameters from * a single argument, which is useful for many top-level API defs. * See https://github.com/Microsoft/TypeScript/issues/7234 for more info. */ type ClassType< P, T extends Component<P, ComponentState>, C extends ComponentClass<P> > = C & (new (props: P, context?: any) => T); // // Component Specs and Lifecycle // ---------------------------------------------------------------------- // This should actually be something like `Lifecycle<P, S> | DeprecatedLifecycle<P, S>`, // as React will _not_ call the deprecated lifecycle methods if any of the new lifecycle // methods are present. interface ComponentLifecycle<P, S, SS = any> extends NewLifecycle<P, S, SS>, DeprecatedLifecycle<P, S> { /** * Called immediately after a component is mounted. Setting state here will trigger re-rendering. */ componentDidMount?(): void; /** * Called to determine whether the change in props and state should trigger a re-render. * * `Component` always returns true. * `PureComponent` implements a shallow comparison on props and state and returns true if any * props or states have changed. * * If false is returned, `Component#render`, `componentWillUpdate` * and `componentDidUpdate` will not be called. */ shouldComponentUpdate?( nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any ): boolean; /** * Called immediately before a component is destroyed. Perform any necessary cleanup in this method, such as * cancelled network requests, or cleaning up any DOM elements created in `componentDidMount`. */ componentWillUnmount?(): void; /** * Catches exceptions generated in descendant components. Unhandled exceptions will cause * the entire component tree to unmount. */ componentDidCatch?(error: Error, errorInfo: ErrorInfo): void; } // Unfortunately, we have no way of declaring that the component constructor must implement this interface StaticLifecycle<P, S> { getDerivedStateFromProps?: GetDerivedStateFromProps<P, S>; getDerivedStateFromError?: GetDerivedStateFromError<P, S>; } type GetDerivedStateFromProps<P, S> = /** * Returns an update to a component's state based on its new props and old state. * * Note: its presence prevents any of the deprecated lifecycle methods from being invoked */ (nextProps: Readonly<P>, prevState: S) => Partial<S> | null; type GetDerivedStateFromError<P, S> = /** * This lifecycle is invoked after an error has been thrown by a descendant component. * It receives the error that was thrown as a parameter and should return a value to update state. * * Note: its presence prevents any of the deprecated lifecycle methods from being invoked */ (error: any) => Partial<S> | null; // This should be "infer SS" but can't use it yet interface NewLifecycle<P, S, SS> { /** * Runs before React applies the result of `render` to the document, and * returns an object to be given to componentDidUpdate. Useful for saving * things such as scroll position before `render` causes changes to it. * * Note: the presence of getSnapshotBeforeUpdate prevents any of the deprecated * lifecycle events from running. */ getSnapshotBeforeUpdate?( prevProps: Readonly<P>, prevState: Readonly<S> ): SS | null; /** * Called immediately after updating occurs. Not called for the initial render. * * The snapshot is only present if getSnapshotBeforeUpdate is present and returns non-null. */ componentDidUpdate?( prevProps: Readonly<P>, prevState: Readonly<S>, snapshot?: SS ): void; } interface DeprecatedLifecycle<P, S> { /** * Called immediately before mounting occurs, and before `Component#render`. * Avoid introducing any side-effects or subscriptions in this method. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use componentDidMount or the constructor instead; will stop working in React 17 * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ componentWillMount?(): void; /** * Called immediately before mounting occurs, and before `Component#render`. * Avoid introducing any side-effects or subscriptions in this method. * * This method will not stop working in React 17. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use componentDidMount or the constructor instead * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ UNSAFE_componentWillMount?(): void; /** * Called when the component may be receiving new props. * React may call this even if props have not changed, so be sure to compare new and existing * props if you only want to handle changes. * * Calling `Component#setState` generally does not trigger this method. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use static getDerivedStateFromProps instead; will stop working in React 17 * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void; /** * Called when the component may be receiving new props. * React may call this even if props have not changed, so be sure to compare new and existing * props if you only want to handle changes. * * Calling `Component#setState` generally does not trigger this method. * * This method will not stop working in React 17. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use static getDerivedStateFromProps instead * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ UNSAFE_componentWillReceiveProps?( nextProps: Readonly<P>, nextContext: any ): void; /** * Called immediately before rendering when new props or state is received. Not called for the initial render. * * Note: You cannot call `Component#setState` here. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use getSnapshotBeforeUpdate instead; will stop working in React 17 * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ componentWillUpdate?( nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any ): void; /** * Called immediately before rendering when new props or state is received. Not called for the initial render. * * Note: You cannot call `Component#setState` here. * * This method will not stop working in React 17. * * Note: the presence of getSnapshotBeforeUpdate or getDerivedStateFromProps * prevents this from being invoked. * * @deprecated 16.3, use getSnapshotBeforeUpdate instead * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update * @see https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path */ UNSAFE_componentWillUpdate?( nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any ): void; } interface Mixin<P, S> extends ComponentLifecycle<P, S> { mixins?: Array<Mixin<P, S>>; statics?: { [key: string]: any; }; displayName?: string; propTypes?: ValidationMap<any>; contextTypes?: ValidationMap<any>; childContextTypes?: ValidationMap<any>; getDefaultProps?(): P; getInitialState?(): S; } interface ComponentSpec<P, S> extends Mixin<P, S> { render(): ReactNode; [propertyName: string]: any; } function createRef<T>(): RefObject<T>; // will show `ForwardRef(${Component.displayName || Component.name})` in devtools by default, // but can be given its own specific name interface ForwardRefExoticComponent<P> extends NamedExoticComponent<P> { defaultProps?: Partial<P>; propTypes?: WeakValidationMap<P>; } function forwardRef<T, P = {}>( Component: RefForwardingComponent<T, P> ): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>; /** Ensures that the props do not include ref at all */ type PropsWithoutRef<P> = // Just Pick would be sufficient for this, but I'm trying to avoid unnecessary mapping over union types // https://github.com/Microsoft/TypeScript/issues/28339 "ref" extends keyof P ? Pick<P, Exclude<keyof P, "ref">> : P; /** Ensures that the props do not include string ref, which cannot be forwarded */ type PropsWithRef<P> = // Just "P extends { ref?: infer R }" looks sufficient, but R will infer as {} if P is {}. "ref" extends keyof P ? P extends { ref?: infer R } ? string extends R ? PropsWithoutRef<P> & { ref?: Exclude<R, string> } : P : P : P; type PropsWithChildren<P> = P & { children?: ReactNode }; /** * NOTE: prefer ComponentPropsWithRef, if the ref is forwarded, * or ComponentPropsWithoutRef when refs are not supported. */ type ComponentProps< T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any> > = T extends JSXElementConstructor<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : {}; type ComponentPropsWithRef<T extends ElementType> = T extends ComponentClass< infer P > ? PropsWithoutRef<P> & RefAttributes<InstanceType<T>> : PropsWithRef<ComponentProps<T>>; type ComponentPropsWithoutRef<T extends ElementType> = PropsWithoutRef< ComponentProps<T> >; // will show `Memo(${Component.displayName || Component.name})` in devtools by default, // but can be given its own specific name type MemoExoticComponent<T extends ComponentType<any>> = NamedExoticComponent< ComponentPropsWithRef<T> > & { readonly type: T; }; function memo<P extends object>( Component: SFC<P>, propsAreEqual?: ( prevProps: Readonly<PropsWithChildren<P>>, nextProps: Readonly<PropsWithChildren<P>> ) => boolean ): NamedExoticComponent<P>; function memo<T extends ComponentType<any>>( Component: T, propsAreEqual?: ( prevProps: Readonly<ComponentProps<T>>, nextProps: Readonly<ComponentProps<T>> ) => boolean ): MemoExoticComponent<T>; type LazyExoticComponent<T extends ComponentType<any>> = ExoticComponent< ComponentPropsWithRef<T> > & { readonly _result: T; }; function lazy<T extends ComponentType<any>>( factory: () => Promise<{ default: T }> ): LazyExoticComponent<T>; // // React Hooks // ---------------------------------------------------------------------- // based on the code in https://github.com/facebook/react/pull/13968 // Unlike the class component setState, the updates are not allowed to be partial type SetStateAction<S> = S | ((prevState: S) => S); // this technically does accept a second argument, but it's already under a deprecation warning // and it's not even released so probably better to not define it. type Dispatch<A> = (value: A) => void; // Since action _can_ be undefined, dispatch may be called without any parameters. type DispatchWithoutAction = () => void; // Unlike redux, the actions _can_ be anything type Reducer<S, A> = (prevState: S, action: A) => S; // If useReducer accepts a reducer without action, dispatch may be called without any parameters. type ReducerWithoutAction<S> = (prevState: S) => S; // types used to try and prevent the compiler from reducing S // to a supertype common with the second argument to useReducer() type ReducerState<R extends Reducer<any, any>> = R extends Reducer< infer S, any > ? S : never; type ReducerAction<R extends Reducer<any, any>> = R extends Reducer< any, infer A > ? A : never; // The identity check is done with the SameValue algorithm (Object.is), which is stricter than === type ReducerStateWithoutAction< R extends ReducerWithoutAction<any> > = R extends ReducerWithoutAction<infer S> ? S : never; // TODO (TypeScript 3.0): ReadonlyArray<unknown> type DependencyList = ReadonlyArray<any>; // NOTE: callbacks are _only_ allowed to return either void, or a destructor. // The destructor is itself only allowed to return void. type EffectCallback = () => void | (() => void | undefined); interface MutableRefObject<T> { current: T; } // This will technically work if you give a Consumer<T> or Provider<T> but it's deprecated and warns /** * Accepts a context object (the value returned from `React.createContext`) and returns the current * context value, as given by the nearest context provider for the given context. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usecontext */ function useContext<T>( context: Context<T> /*, (not public API) observedBits?: number|boolean */ ): T; /** * Returns a stateful value, and a function to update it. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usestate */ function useState<S>( initialState: S | (() => S) ): [S, Dispatch<SetStateAction<S>>]; // convenience overload when first argument is ommitted /** * Returns a stateful value, and a function to update it. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usestate */ function useState<S = undefined>(): [ S | undefined, Dispatch<SetStateAction<S | undefined>> ]; /** * An alternative to `useState`. * * `useReducer` is usually preferable to `useState` when you have complex state logic that involves * multiple sub-values. It also lets you optimize performance for components that trigger deep * updates because you can pass `dispatch` down instead of callbacks. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ // overload where dispatch could accept 0 arguments. function useReducer<R extends ReducerWithoutAction<any>, I>( reducer: R, initializerArg: I, initializer: (arg: I) => ReducerStateWithoutAction<R> ): [ReducerStateWithoutAction<R>, DispatchWithoutAction]; /** * An alternative to `useState`. * * `useReducer` is usually preferable to `useState` when you have complex state logic that involves * multiple sub-values. It also lets you optimize performance for components that trigger deep * updates because you can pass `dispatch` down instead of callbacks. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ // overload where dispatch could accept 0 arguments. function useReducer<R extends ReducerWithoutAction<any>>( reducer: R, initializerArg: ReducerStateWithoutAction<R>, initializer?: undefined ): [ReducerStateWithoutAction<R>, DispatchWithoutAction]; /** * An alternative to `useState`. * * `useReducer` is usually preferable to `useState` when you have complex state logic that involves * multiple sub-values. It also lets you optimize performance for components that trigger deep * updates because you can pass `dispatch` down instead of callbacks. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ // overload where "I" may be a subset of ReducerState<R>; used to provide autocompletion. // If "I" matches ReducerState<R> exactly then the last overload will allow initializer to be ommitted. // the last overload effectively behaves as if the identity function (x => x) is the initializer. function useReducer<R extends Reducer<any, any>, I>( reducer: R, initializerArg: I & ReducerState<R>, initializer: (arg: I & ReducerState<R>) => ReducerState<R> ): [ReducerState<R>, Dispatch<ReducerAction<R>>]; /** * An alternative to `useState`. * * `useReducer` is usually preferable to `useState` when you have complex state logic that involves * multiple sub-values. It also lets you optimize performance for components that trigger deep * updates because you can pass `dispatch` down instead of callbacks. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ // overload for free "I"; all goes as long as initializer converts it into "ReducerState<R>". function useReducer<R extends Reducer<any, any>, I>( reducer: R, initializerArg: I, initializer: (arg: I) => ReducerState<R> ): [ReducerState<R>, Dispatch<ReducerAction<R>>]; /** * An alternative to `useState`. * * `useReducer` is usually preferable to `useState` when you have complex state logic that involves * multiple sub-values. It also lets you optimize performance for components that trigger deep * updates because you can pass `dispatch` down instead of callbacks. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ // I'm not sure if I keep this 2-ary or if I make it (2,3)-ary; it's currently (2,3)-ary. // The Flow types do have an overload for 3-ary invocation with undefined initializer. // NOTE: without the ReducerState indirection, TypeScript would reduce S to be the most common // supertype between the reducer's return type and the initialState (or the initializer's return type), // which would prevent autocompletion from ever working. // TODO: double-check if this weird overload logic is necessary. It is possible it's either a bug // in older versions, or a regression in newer versions of the typescript completion service. function useReducer<R extends Reducer<any, any>>( reducer: R, initialState: ReducerState<R>, initializer?: undefined ): [ReducerState<R>, Dispatch<ReducerAction<R>>]; /** * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument * (`initialValue`). The returned object will persist for the full lifetime of the component. * * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable * value around similar to how you’d use instance fields in classes. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#useref */ // TODO (TypeScript 3.0): <T extends unknown> function useRef<T>(initialValue: T): MutableRefObject<T>; // convenience overload for refs given as a ref prop as they typically start with a null value /** * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument * (`initialValue`). The returned object will persist for the full lifetime of the component. * * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable * value around similar to how you’d use instance fields in classes. * * Usage note: if you need the result of useRef to be directly mutable, include `| null` in the type * of the generic argument. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#useref */ // TODO (TypeScript 3.0): <T extends unknown> function useRef<T>(initialValue: T | null): RefObject<T>; // convenience overload for potentially undefined initialValue / call with 0 arguments // has a default to stop it from defaulting to {} instead /** * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument * (`initialValue`). The returned object will persist for the full lifetime of the component. * * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable * value around similar to how you’d use instance fields in classes. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#useref */ // TODO (TypeScript 3.0): <T extends unknown> function useRef<T = undefined>(): MutableRefObject<T | undefined>; /** * The signature is identical to `useEffect`, but it fires synchronously after all DOM mutations. * Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside * `useLayoutEffect` will be flushed synchronously, before the browser has a chance to paint. * * Prefer the standard `useEffect` when possible to avoid blocking visual updates. * * If you’re migrating code from a class component, `useLayoutEffect` fires in the same phase as * `componentDidMount` and `componentDidUpdate`. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#uselayouteffect */ function useLayoutEffect(effect: EffectCallback, deps?: DependencyList): void; /** * Accepts a function that contains imperative, possibly effectful code. * * @param effect Imperative function that can return a cleanup function * @param deps If present, effect will only activate if the values in the list change. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#useeffect */ function useEffect(effect: EffectCallback, deps?: DependencyList): void; // NOTE: this does not accept strings, but this will have to be fixed by removing strings from type Ref<T> /** * `useImperativeHandle` customizes the instance value that is exposed to parent components when using * `ref`. As always, imperative code using refs should be avoided in most cases. * * `useImperativeHandle` should be used with `React.forwardRef`. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#useimperativehandle */ function useImperativeHandle<T, R extends T>( ref: Ref<T> | undefined, init: () => R, deps?: DependencyList ): void; // I made 'inputs' required here and in useMemo as there's no point to memoizing without the memoization key // useCallback(X) is identical to just using X, useMemo(() => Y) is identical to just using Y. /** * `useCallback` will return a memoized version of the callback that only changes if one of the `inputs` * has changed. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usecallback */ // TODO (TypeScript 3.0): <T extends (...args: never[]) => unknown> function useCallback<T extends (...args: any[]) => any>( callback: T, deps: DependencyList ): T; /** * `useMemo` will only recompute the memoized value when one of the `deps` has changed. * * Usage note: if calling `useMemo` with a referentially stable function, also give it as the input in * the second argument. * * ```ts * function expensive () { ... } * * function Component () { * const expensiveResult = useMemo(expensive, [expensive]) * return ... * } * ``` * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usememo */ // allow undefined, but don't make it optional as that is very likely a mistake function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T; /** * `useDebugValue` can be used to display a label for custom hooks in React DevTools. * * NOTE: We don’t recommend adding debug values to every custom hook. * It’s most valuable for custom hooks that are part of shared libraries. * * @version 16.8.0 * @see https://reactjs.org/docs/hooks-reference.html#usedebugvalue */ // the name of the custom hook is itself derived from the function name at runtime: // it's just the function name without the "use" prefix. function useDebugValue<T>(value: T, format?: (value: T) => any): void; // // Event System // ---------------------------------------------------------------------- // TODO: change any to unknown when moving to TS v3 interface BaseSyntheticEvent<E = object, C = any, T = any> { nativeEvent: E; currentTarget: C; target: T; bubbles: boolean; cancelable: boolean; defaultPrevented: boolean; eventPhase: number; isTrusted: boolean; preventDefault(): void; isDefaultPrevented(): boolean; stopPropagation(): void; isPropagationStopped(): boolean; persist(): void; timeStamp: number; type: string; } /** * currentTarget - a reference to the element on which the event listener is registered. * * target - a reference to the element from which the event was originally dispatched. * This might be a child element to the element on which the event listener is registered. * If you thought this should be `EventTarget & T`, see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/12239 */ interface SyntheticEvent<T = Element, E = Event> extends BaseSyntheticEvent<E, EventTarget & T, EventTarget> {} interface ClipboardEvent<T = Element> extends SyntheticEvent<T, NativeClipboardEvent> { clipboardData: DataTransfer; } interface CompositionEvent<T = Element> extends SyntheticEvent<T, NativeCompositionEvent> { data: string; } interface DragEvent<T = Element> extends MouseEvent<T, NativeDragEvent> { dataTransfer: DataTransfer; } interface PointerEvent<T = Element> extends MouseEvent<T, NativePointerEvent> { pointerId: number; pressure: number; tiltX: number; tiltY: number; width: number; height: number; pointerType: "mouse" | "pen" | "touch"; isPrimary: boolean; } interface FocusEvent<T = Element> extends SyntheticEvent<T, NativeFocusEvent> { relatedTarget: EventTarget | null; target: EventTarget & T; } // tslint:disable-next-line:no-empty-interface interface FormEvent<T = Element> extends SyntheticEvent<T> {} interface InvalidEvent<T = Element> extends SyntheticEvent<T> { target: EventTarget & T; } interface ChangeEvent<T = Element> extends SyntheticEvent<T> { target: EventTarget & T; } interface KeyboardEvent<T = Element> extends SyntheticEvent<T, NativeKeyboardEvent> { altKey: boolean; charCode: number; ctrlKey: boolean; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: string): boolean; /** * See the [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#named-key-attribute-values). for possible values */ key: string; keyCode: number; locale: string; location: number; metaKey: boolean; repeat: boolean; shiftKey: boolean; which: number; } interface MouseEvent<T = Element, E = NativeMouseEvent> extends SyntheticEvent<T, E> { altKey: boolean; button: number; buttons: number; clientX: number; clientY: number; ctrlKey: boolean; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: string): boolean; metaKey: boolean; movementX: number; movementY: number; pageX: number; pageY: number; relatedTarget: EventTarget | null; screenX: number; screenY: number; shiftKey: boolean; } interface TouchEvent<T = Element> extends SyntheticEvent<T, NativeTouchEvent> { altKey: boolean; changedTouches: TouchList; ctrlKey: boolean; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: string): boolean; metaKey: boolean; shiftKey: boolean; targetTouches: TouchList; touches: TouchList; } interface UIEvent<T = Element> extends SyntheticEvent<T, NativeUIEvent> { detail: number; view: AbstractView; } interface WheelEvent<T = Element> extends MouseEvent<T, NativeWheelEvent> { deltaMode: number; deltaX: number; deltaY: number; deltaZ: number; } interface AnimationEvent<T = Element> extends SyntheticEvent<T, NativeAnimationEvent> { animationName: string; elapsedTime: number; pseudoElement: string; } interface TransitionEvent<T = Element> extends SyntheticEvent<T, NativeTransitionEvent> { elapsedTime: number; propertyName: string; pseudoElement: string; } // // Event Handler Types // ---------------------------------------------------------------------- type EventHandler<E extends SyntheticEvent<any>> = { bivarianceHack(event: E): void; }["bivarianceHack"]; type ReactEventHandler<T = Element> = EventHandler<SyntheticEvent<T>>; type ClipboardEventHandler<T = Element> = EventHandler<ClipboardEvent<T>>; type CompositionEventHandler<T = Element> = EventHandler<CompositionEvent<T>>; type DragEventHandler<T = Element> = EventHandler<DragEvent<T>>; type FocusEventHandler<T = Element> = EventHandler<FocusEvent<T>>; type FormEventHandler<T = Element> = EventHandler<FormEvent<T>>; type ChangeEventHandler<T = Element> = EventHandler<ChangeEvent<T>>; type KeyboardEventHandler<T = Element> = EventHandler<KeyboardEvent<T>>; type MouseEventHandler<T = Element> = EventHandler<MouseEvent<T>>; type TouchEventHandler<T = Element> = EventHandler<TouchEvent<T>>; type PointerEventHandler<T = Element> = EventHandler<PointerEvent<T>>; type UIEventHandler<T = Element> = EventHandler<UIEvent<T>>; type WheelEventHandler<T = Element> = EventHandler<WheelEvent<T>>; type AnimationEventHandler<T = Element> = EventHandler<AnimationEvent<T>>; type TransitionEventHandler<T = Element> = EventHandler<TransitionEvent<T>>; // // Props / DOM Attributes // ---------------------------------------------------------------------- /** * @deprecated. This was used to allow clients to pass `ref` and `key` * to `createElement`, which is no longer necessary due to intersection * types. If you need to declare a props object before passing it to * `createElement` or a factory, use `ClassAttributes<T>`: * * ```ts * var b: Button | null; * var props: ButtonProps & ClassAttributes<Button> = { * ref: b => button = b, // ok! * label: "I'm a Button" * }; * ``` */ interface Props<T> { children?: ReactNode; key?: Key; ref?: LegacyRef<T>; } interface HTMLProps<T> extends AllHTMLAttributes<T>, ClassAttributes<T> {} type DetailedHTMLProps<E extends HTMLAttributes<T>, T> = ClassAttributes<T> & E; interface SVGProps<T> extends SVGAttributes<T>, ClassAttributes<T> {} interface DOMAttributes<T> { children?: ReactNode; dangerouslySetInnerHTML?: { __html: string; }; // Clipboard Events onCopy?: ClipboardEventHandler<T>; onCopyCapture?: ClipboardEventHandler<T>; onCut?: ClipboardEventHandler<T>; onCutCapture?: ClipboardEventHandler<T>; onPaste?: ClipboardEventHandler<T>; onPasteCapture?: ClipboardEventHandler<T>; // Composition Events onCompositionEnd?: CompositionEventHandler<T>; onCompositionEndCapture?: CompositionEventHandler<T>; onCompositionStart?: CompositionEventHandler<T>; onCompositionStartCapture?: CompositionEventHandler<T>; onCompositionUpdate?: CompositionEventHandler<T>; onCompositionUpdateCapture?: CompositionEventHandler<T>; // Focus Events onFocus?: FocusEventHandler<T>; onFocusCapture?: FocusEventHandler<T>; onBlur?: FocusEventHandler<T>; onBlurCapture?: FocusEventHandler<T>; // Form Events onChange?: FormEventHandler<T>; onChangeCapture?: FormEventHandler<T>; onBeforeInput?: FormEventHandler<T>; onBeforeInputCapture?: FormEventHandler<T>; onInput?: FormEventHandler<T>; onInputCapture?: FormEventHandler<T>; onReset?: FormEventHandler<T>; onResetCapture?: FormEventHandler<T>; onSubmit?: FormEventHandler<T>; onSubmitCapture?: FormEventHandler<T>; onInvalid?: FormEventHandler<T>; onInvalidCapture?: FormEventHandler<T>; // Image Events onLoad?: ReactEventHandler<T>; onLoadCapture?: ReactEventHandler<T>; onError?: ReactEventHandler<T>; // also a Media Event onErrorCapture?: ReactEventHandler<T>; // also a Media Event // Keyboard Events onKeyDown?: KeyboardEventHandler<T>; onKeyDownCapture?: KeyboardEventHandler<T>; onKeyPress?: KeyboardEventHandler<T>; onKeyPressCapture?: KeyboardEventHandler<T>; onKeyUp?: KeyboardEventHandler<T>; onKeyUpCapture?: KeyboardEventHandler<T>; // Media Events onAbort?: ReactEventHandler<T>; onAbortCapture?: ReactEventHandler<T>; onCanPlay?: ReactEventHandler<T>; onCanPlayCapture?: ReactEventHandler<T>; onCanPlayThrough?: ReactEventHandler<T>; onCanPlayThroughCapture?: ReactEventHandler<T>; onDurationChange?: ReactEventHandler<T>; onDurationChangeCapture?: ReactEventHandler<T>; onEmptied?: ReactEventHandler<T>; onEmptiedCapture?: ReactEventHandler<T>; onEncrypted?: ReactEventHandler<T>; onEncryptedCapture?: ReactEventHandler<T>; onEnded?: ReactEventHandler<T>; onEndedCapture?: ReactEventHandler<T>; onLoadedData?: ReactEventHandler<T>; onLoadedDataCapture?: ReactEventHandler<T>; onLoadedMetadata?: ReactEventHandler<T>; onLoadedMetadataCapture?: ReactEventHandler<T>; onLoadStart?: ReactEventHandler<T>; onLoadStartCapture?: ReactEventHandler<T>; onPause?: ReactEventHandler<T>; onPauseCapture?: ReactEventHandler<T>; onPlay?: ReactEventHandler<T>; onPlayCapture?: ReactEventHandler<T>; onPlaying?: ReactEventHandler<T>; onPlayingCapture?: ReactEventHandler<T>; onProgress?: ReactEventHandler<T>; onProgressCapture?: ReactEventHandler<T>; onRateChange?: ReactEventHandler<T>; onRateChangeCapture?: ReactEventHandler<T>; onSeeked?: ReactEventHandler<T>; onSeekedCapture?: ReactEventHandler<T>; onSeeking?: ReactEventHandler<T>; onSeekingCapture?: ReactEventHandler<T>; onStalled?: ReactEventHandler<T>; onStalledCapture?: ReactEventHandler<T>; onSuspend?: ReactEventHandler<T>; onSuspendCapture?: ReactEventHandler<T>; onTimeUpdate?: ReactEventHandler<T>; onTimeUpdateCapture?: ReactEventHandler<T>; onVolumeChange?: ReactEventHandler<T>; onVolumeChangeCapture?: ReactEventHandler<T>; onWaiting?: ReactEventHandler<T>; onWaitingCapture?: ReactEventHandler<T>; // MouseEvents onAuxClick?: MouseEventHandler<T>; onAuxClickCapture?: MouseEventHandler<T>; onClick?: MouseEventHandler<T>; onClickCapture?: MouseEventHandler<T>; onContextMenu?: MouseEventHandler<T>; onContextMenuCapture?: MouseEventHandler<T>; onDoubleClick?: MouseEventHandler<T>; onDoubleClickCapture?: MouseEventHandler<T>; onDrag?: DragEventHandler<T>; onDragCapture?: DragEventHandler<T>; onDragEnd?: DragEventHandler<T>; onDragEndCapture?: DragEventHandler<T>; onDragEnter?: DragEventHandler<T>; onDragEnterCapture?: DragEventHandler<T>; onDragExit?: DragEventHandler<T>; onDragExitCapture?: DragEventHandler<T>; onDragLeave?: DragEventHandler<T>; onDragLeaveCapture?: DragEventHandler<T>; onDragOver?: DragEventHandler<T>; onDragOverCapture?: DragEventHandler<T>; onDragStart?: DragEventHandler<T>; onDragStartCapture?: DragEventHandler<T>; onDrop?: DragEventHandler<T>; onDropCapture?: DragEventHandler<T>; onMouseDown?: MouseEventHandler<T>; onMouseDownCapture?: MouseEventHandler<T>; onMouseEnter?: MouseEventHandler<T>; onMouseLeave?: MouseEventHandler<T>; onMouseMove?: MouseEventHandler<T>; onMouseMoveCapture?: MouseEventHandler<T>; onMouseOut?: MouseEventHandler<T>; onMouseOutCapture?: MouseEventHandler<T>; onMouseOver?: MouseEventHandler<T>; onMouseOverCapture?: MouseEventHandler<T>; onMouseUp?: MouseEventHandler<T>; onMouseUpCapture?: MouseEventHandler<T>; // Selection Events onSelect?: ReactEventHandler<T>; onSelectCapture?: ReactEventHandler<T>; // Touch Events onTouchCancel?: TouchEventHandler<T>; onTouchCancelCapture?: TouchEventHandler<T>; onTouchEnd?: TouchEventHandler<T>; onTouchEndCapture?: TouchEventHandler<T>; onTouchMove?: TouchEventHandler<T>; onTouchMoveCapture?: TouchEventHandler<T>; onTouchStart?: TouchEventHandler<T>; onTouchStartCapture?: TouchEventHandler<T>; // Pointer Events onPointerDown?: PointerEventHandler<T>; onPointerDownCapture?: PointerEventHandler<T>; onPointerMove?: PointerEventHandler<T>; onPointerMoveCapture?: PointerEventHandler<T>; onPointerUp?: PointerEventHandler<T>; onPointerUpCapture?: PointerEventHandler<T>; onPointerCancel?: PointerEventHandler<T>; onPointerCancelCapture?: PointerEventHandler<T>; onPointerEnter?: PointerEventHandler<T>; onPointerEnterCapture?: PointerEventHandler<T>; onPointerLeave?: PointerEventHandler<T>; onPointerLeaveCapture?: PointerEventHandler<T>; onPointerOver?: PointerEventHandler<T>; onPointerOverCapture?: PointerEventHandler<T>; onPointerOut?: PointerEventHandler<T>; onPointerOutCapture?: PointerEventHandler<T>; onGotPointerCapture?: PointerEventHandler<T>; onGotPointerCaptureCapture?: PointerEventHandler<T>; onLostPointerCapture?: PointerEventHandler<T>; onLostPointerCaptureCapture?: PointerEventHandler<T>; // UI Events onScroll?: UIEventHandler<T>; onScrollCapture?: UIEventHandler<T>; // Wheel Events onWheel?: WheelEventHandler<T>; onWheelCapture?: WheelEventHandler<T>; // Animation Events onAnimationStart?: AnimationEventHandler<T>; onAnimationStartCapture?: AnimationEventHandler<T>; onAnimationEnd?: AnimationEventHandler<T>; onAnimationEndCapture?: AnimationEventHandler<T>; onAnimationIteration?: AnimationEventHandler<T>; onAnimationIterationCapture?: AnimationEventHandler<T>; // Transition Events onTransitionEnd?: TransitionEventHandler<T>; onTransitionEndCapture?: TransitionEventHandler<T>; } export interface CSSProperties extends CSS.Properties<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 */ } // All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ interface AriaAttributes { /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ "aria-activedescendant"?: string; /** 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"?: boolean | "false" | "true"; /** * 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"; /** 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"?: boolean | "false" | "true"; /** * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. * @see aria-pressed @see aria-selected. */ "aria-checked"?: boolean | "false" | "mixed" | "true"; /** * Defines the total number of columns in a table, grid, or treegrid. * @see aria-colindex. */ "aria-colcount"?: number; /** * 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; /** * 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; /** * Identifies the element (or elements) whose contents or presence are controlled by the current element. * @see aria-owns. */ "aria-controls"?: string; /** 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"; /** * Identifies the element (or elements) that describes the object. * @see aria-labelledby */ "aria-describedby"?: string; /** * Identifies the element that provides a detailed, extended description for the object. * @see aria-describedby. */ "aria-details"?: string; /** * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. * @see aria-hidden @see aria-readonly. */ "aria-disabled"?: boolean | "false" | "true"; /** * 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"; /** * Identifies the element that provides an error message for the object. * @see aria-invalid @see aria-describedby. */ "aria-errormessage"?: string; /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ "aria-expanded"?: boolean | "false" | "true"; /** * 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; /** * Indicates an element's "grabbed" state in a drag-and-drop operation. * @deprecated in ARIA 1.1 */ "aria-grabbed"?: boolean | "false" | "true"; /** 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"; /** * Indicates whether the element is exposed to an accessibility API. * @see aria-disabled. */ "aria-hidden"?: boolean | "false" | "true"; /** * Indicates the entered value does not conform to the format expected by the application. * @see aria-errormessage. */ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling"; /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ "aria-keyshortcuts"?: string; /** * Defines a string value that labels the current element. * @see aria-labelledby. */ "aria-label"?: string; /** * Identifies the element (or elements) that labels the current element. * @see aria-describedby. */ "aria-labelledby"?: string; /** Defines the hierarchical level of an element within a structure. */ "aria-level"?: number; /** 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"; /** Indicates whether an element is modal when displayed. */ "aria-modal"?: boolean | "false" | "true"; /** Indicates whether a text box accepts multiple lines of input or only a single line. */ "aria-multiline"?: boolean | "false" | "true"; /** Indicates that the user may select more than one item from the current selectable descendants. */ "aria-multiselectable"?: boolean | "false" | "true"; /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ "aria-orientation"?: "horizontal" | "vertical"; /** * 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; /** * 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; /** * 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; /** * Indicates the current "pressed" state of toggle buttons. * @see aria-checked @see aria-selected. */ "aria-pressed"?: boolean | "false" | "mixed" | "true"; /** * Indicates that the element is not editable, but is otherwise operable. * @see aria-disabled. */ "aria-readonly"?: boolean | "false" | "true"; /** * 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 text" | "all" | "removals" | "text"; /** Indicates that user input is required on the element before a form may be submitted. */ "aria-required"?: boolean | "false" | "true"; /** Defines a human-readable, author-localized description for the role of an element. */ "aria-roledescription"?: string; /** * Defines the total number of rows in a table, grid, or treegrid. * @see aria-rowindex. */ "aria-rowcount"?: number; /** * 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; /** * 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; /** * Indicates the current "selected" state of various widgets. * @see aria-checked @see aria-pressed. */ "aria-selected"?: boolean | "false" | "true"; /** * 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; /** Indicates if items in a table or grid are sorted in ascending or descending order. */ "aria-sort"?: "none" | "ascending" | "descending" | "other"; /** Defines the maximum allowed value for a range widget. */ "aria-valuemax"?: number; /** Defines the minimum allowed value for a range widget. */ "aria-valuemin"?: number; /** * Defines the current value for a range widget. * @see aria-valuetext. */ "aria-valuenow"?: number; /** Defines the human readable text alternative of aria-valuenow for a range widget. */ "aria-valuetext"?: string; } interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> { // React-specific Attributes defaultChecked?: boolean; defaultValue?: string | number | string[]; suppressContentEditableWarning?: boolean; suppressHydrationWarning?: boolean; // Standard HTML Attributes accessKey?: string; className?: string; contentEditable?: Booleanish | "inherit"; contextMenu?: string; dir?: string; draggable?: Booleanish; hidden?: boolean; id?: string; lang?: string; placeholder?: string; slot?: string; spellCheck?: Booleanish; style?: CSSProperties; tabIndex?: number; title?: string; translate?: "yes" | "no"; // Unknown radioGroup?: string; // <command>, <menuitem> // WAI-ARIA role?: string; // RDFa Attributes about?: string; datatype?: string; inlist?: any; prefix?: string; property?: string; resource?: string; typeof?: string; vocab?: string; // Non-standard Attributes autoCapitalize?: string; autoCorrect?: string; autoSave?: string; color?: string; itemProp?: string; itemScope?: boolean; itemType?: string; itemID?: string; itemRef?: string; results?: number; security?: string; unselectable?: "on" | "off"; // Living Standard /** * 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"; /** * 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; } interface AllHTMLAttributes<T> extends HTMLAttributes<T> { // Standard HTML Attributes accept?: string; acceptCharset?: string; action?: string; allowFullScreen?: boolean; allowTransparency?: boolean; alt?: string; as?: string; async?: boolean; autoComplete?: string; autoFocus?: boolean; autoPlay?: boolean; capture?: boolean | string; cellPadding?: number | string; cellSpacing?: number | string; charSet?: string; challenge?: string; checked?: boolean; cite?: string; classID?: string; cols?: number; colSpan?: number; content?: string; controls?: boolean; coords?: string; crossOrigin?: string; data?: string; dateTime?: string; default?: boolean; defer?: boolean; disabled?: boolean; download?: any; encType?: string; form?: string; formAction?: string; formEncType?: string; formMethod?: string; formNoValidate?: boolean; formTarget?: string; frameBorder?: number | string; headers?: string; height?: number | string; high?: number; href?: string; hrefLang?: string; htmlFor?: string; httpEquiv?: string; integrity?: string; keyParams?: string; keyType?: string; kind?: string; label?: string; list?: string; loop?: boolean; low?: number; manifest?: string; marginHeight?: number; marginWidth?: number; max?: number | string; maxLength?: number; media?: string; mediaGroup?: string; method?: string; min?: number | string; minLength?: number; multiple?: boolean; muted?: boolean; name?: string; nonce?: string; noValidate?: boolean; open?: boolean; optimum?: number; pattern?: string; placeholder?: string; playsInline?: boolean; poster?: string; preload?: string; readOnly?: boolean; rel?: string; required?: boolean; reversed?: boolean; rows?: number; rowSpan?: number; sandbox?: string; scope?: string; scoped?: boolean; scrolling?: string; seamless?: boolean; selected?: boolean; shape?: string; size?: number; sizes?: string; span?: number; src?: string; srcDoc?: string; srcLang?: string; srcSet?: string; start?: number; step?: number | string; summary?: string; target?: string; type?: string; useMap?: string; value?: string | string[] | number; width?: number | string; wmode?: string; wrap?: string; } interface AnchorHTMLAttributes<T> extends HTMLAttributes<T> { download?: any; href?: string; hrefLang?: string; media?: string; ping?: string; rel?: string; target?: string; type?: string; referrerPolicy?: string; } // tslint:disable-next-line:no-empty-interface interface AudioHTMLAttributes<T> extends MediaHTMLAttributes<T> {} interface AreaHTMLAttributes<T> extends HTMLAttributes<T> { alt?: string; coords?: string; download?: any; href?: string; hrefLang?: string; media?: string; rel?: string; shape?: string; target?: string; } interface BaseHTMLAttributes<T> extends HTMLAttributes<T> { href?: string; target?: string; } interface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> { cite?: string; } interface ButtonHTMLAttributes<T> extends HTMLAttributes<T> { autoFocus?: boolean; disabled?: boolean; form?: string; formAction?: string; formEncType?: string; formMethod?: string; formNoValidate?: boolean; formTarget?: string; name?: string; type?: "submit" | "reset" | "button"; value?: string | string[] | number; } interface CanvasHTMLAttributes<T> extends HTMLAttributes<T> { height?: number | string; width?: number | string; } interface ColHTMLAttributes<T> extends HTMLAttributes<T> { span?: number; width?: number | string; } interface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> { span?: number; } interface DataHTMLAttributes<T> extends HTMLAttributes<T> { value?: string | string[] | number; } interface DetailsHTMLAttributes<T> extends HTMLAttributes<T> { open?: boolean; } interface DelHTMLAttributes<T> extends HTMLAttributes<T> { cite?: string; dateTime?: string; } interface DialogHTMLAttributes<T> extends HTMLAttributes<T> { open?: boolean; } interface EmbedHTMLAttributes<T> extends HTMLAttributes<T> { height?: number | string; src?: string; type?: string; width?: number | string; } interface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> { disabled?: boolean; form?: string; name?: string; } interface FormHTMLAttributes<T> extends HTMLAttributes<T> { acceptCharset?: string; action?: string; autoComplete?: string; encType?: string; method?: string; name?: string; noValidate?: boolean; target?: string; } interface HtmlHTMLAttributes<T> extends HTMLAttributes<T> { manifest?: string; } interface IframeHTMLAttributes<T> extends HTMLAttributes<T> { allow?: string; allowFullScreen?: boolean; allowTransparency?: boolean; frameBorder?: number | string; height?: number | string; marginHeight?: number; marginWidth?: number; name?: string; referrerPolicy?: string; sandbox?: string; scrolling?: string; seamless?: boolean; src?: string; srcDoc?: string; width?: number | string; } interface ImgHTMLAttributes<T> extends HTMLAttributes<T> { alt?: string; crossOrigin?: "anonymous" | "use-credentials" | ""; decoding?: "async" | "auto" | "sync"; height?: number | string; sizes?: string; src?: string; srcSet?: string; useMap?: string; width?: number | string; } interface InsHTMLAttributes<T> extends HTMLAttributes<T> { cite?: string; dateTime?: string; } interface InputHTMLAttributes<T> extends HTMLAttributes<T> { accept?: string; alt?: string; autoComplete?: string; autoFocus?: boolean; capture?: boolean | string; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute checked?: boolean; crossOrigin?: string; disabled?: boolean; form?: string; formAction?: string; formEncType?: string; formMethod?: string; formNoValidate?: boolean; formTarget?: string; height?: number | string; list?: string; max?: number | string; maxLength?: number; min?: number | string; minLength?: number; multiple?: boolean; name?: string; pattern?: string; placeholder?: string; readOnly?: boolean; required?: boolean; size?: number; src?: string; step?: number | string; type?: string; value?: string | string[] | number; width?: number | string; onChange?: ChangeEventHandler<T>; } interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> { autoFocus?: boolean; challenge?: string; disabled?: boolean; form?: string; keyType?: string; keyParams?: string; name?: string; } interface LabelHTMLAttributes<T> extends HTMLAttributes<T> { form?: string; htmlFor?: string; } interface LiHTMLAttributes<T> extends HTMLAttributes<T> { value?: string | string[] | number; } interface LinkHTMLAttributes<T> extends HTMLAttributes<T> { as?: string; crossOrigin?: string; href?: string; hrefLang?: string; integrity?: string; media?: string; rel?: string; sizes?: string; type?: string; } interface MapHTMLAttributes<T> extends HTMLAttributes<T> { name?: string; } interface MenuHTMLAttributes<T> extends HTMLAttributes<T> { type?: string; } interface MediaHTMLAttributes<T> extends HTMLAttributes<T> { autoPlay?: boolean; controls?: boolean; controlsList?: string; crossOrigin?: string; loop?: boolean; mediaGroup?: string; muted?: boolean; playsinline?: boolean; preload?: string; src?: string; } interface MetaHTMLAttributes<T> extends HTMLAttributes<T> { charSet?: string; content?: string; httpEquiv?: string; name?: string; } interface MeterHTMLAttributes<T> extends HTMLAttributes<T> { form?: string; high?: number; low?: number; max?: number | string; min?: number | string; optimum?: number; value?: string | string[] | number; } interface QuoteHTMLAttributes<T> extends HTMLAttributes<T> { cite?: string; } interface ObjectHTMLAttributes<T> extends HTMLAttributes<T> { classID?: string; data?: string; form?: string; height?: number | string; name?: string; type?: string; useMap?: string; width?: number | string; wmode?: string; } interface OlHTMLAttributes<T> extends HTMLAttributes<T> { reversed?: boolean; start?: number; type?: "1" | "a" | "A" | "i" | "I"; } interface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> { disabled?: boolean; label?: string; } interface OptionHTMLAttributes<T> extends HTMLAttributes<T> { disabled?: boolean; label?: string; selected?: boolean; value?: string | string[] | number; } interface OutputHTMLAttributes<T> extends HTMLAttributes<T> { form?: string; htmlFor?: string; name?: string; } interface ParamHTMLAttributes<T> extends HTMLAttributes<T> { name?: string; value?: string | string[] | number; } interface ProgressHTMLAttributes<T> extends HTMLAttributes<T> { max?: number | string; value?: string | string[] | number; } interface ScriptHTMLAttributes<T> extends HTMLAttributes<T> { async?: boolean; charSet?: string; crossOrigin?: string; defer?: boolean; integrity?: string; noModule?: boolean; nonce?: string; src?: string; type?: string; } interface SelectHTMLAttributes<T> extends HTMLAttributes<T> { autoComplete?: string; autoFocus?: boolean; disabled?: boolean; form?: string; multiple?: boolean; name?: string; required?: boolean; size?: number; value?: string | string[] | number; onChange?: ChangeEventHandler<T>; } interface SourceHTMLAttributes<T> extends HTMLAttributes<T> { media?: string; sizes?: string; src?: string; srcSet?: string; type?: string; } interface StyleHTMLAttributes<T> extends HTMLAttributes<T> { media?: string; nonce?: string; scoped?: boolean; type?: string; } interface TableHTMLAttributes<T> extends HTMLAttributes<T> { cellPadding?: number | string; cellSpacing?: number | string; summary?: string; } interface TextareaHTMLAttributes<T> extends HTMLAttributes<T> { autoComplete?: string; autoFocus?: boolean; cols?: number; dirName?: string; disabled?: boolean; form?: string; maxLength?: number; minLength?: number; name?: string; placeholder?: string; readOnly?: boolean; required?: boolean; rows?: number; value?: string | string[] | number; wrap?: string; onChange?: ChangeEventHandler<T>; } interface TdHTMLAttributes<T> extends HTMLAttributes<T> { align?: "left" | "center" | "right" | "justify" | "char"; colSpan?: number; headers?: string; rowSpan?: number; scope?: string; abbr?: string; valign?: "top" | "middle" | "bottom" | "baseline"; } interface ThHTMLAttributes<T> extends HTMLAttributes<T> { align?: "left" | "center" | "right" | "justify" | "char"; colSpan?: number; headers?: string; rowSpan?: number; scope?: string; abbr?: string; } interface TimeHTMLAttributes<T> extends HTMLAttributes<T> { dateTime?: string; } interface TrackHTMLAttributes<T> extends HTMLAttributes<T> { default?: boolean; kind?: string; label?: string; src?: string; srcLang?: string; } interface VideoHTMLAttributes<T> extends MediaHTMLAttributes<T> { height?: number | string; playsInline?: boolean; poster?: string; width?: number | string; disablePictureInPicture?: boolean; } // this list is "complete" in that it contains every SVG attribute // that React supports, but the types can be improved. // Full list here: https://facebook.github.io/react/docs/dom-elements.html // // The three broad type categories are (in order of restrictiveness): // - "number | string" // - "string" // - union of string literals interface SVGAttributes<T> extends AriaAttributes, DOMAttributes<T> { // Attributes which also defined in HTMLAttributes // See comment in SVGDOMPropertyConfig.js className?: string; color?: string; height?: number | string; id?: string; lang?: string; max?: number | string; media?: string; method?: string; min?: number | string; name?: string; style?: CSSProperties; target?: string; type?: string; width?: number | string; // Other HTML properties supported by SVG elements in browsers role?: string; tabIndex?: number; crossOrigin?: "anonymous" | "use-credentials" | ""; // SVG Specific attributes accentHeight?: number | string; accumulate?: "none" | "sum"; additive?: "replace" | "sum"; alignmentBaseline?: | "auto" | "baseline" | "before-edge" | "text-before-edge" | "middle" | "central" | "after-edge" | "text-after-edge" | "ideographic" | "alphabetic" | "hanging" | "mathematical" | "inherit"; allowReorder?: "no" | "yes"; alphabetic?: number | string; amplitude?: number | string; arabicForm?: "initial" | "medial" | "terminal" | "isolated"; ascent?: number | string; attributeName?: string; attributeType?: string; autoReverse?: Booleanish; azimuth?: number | string; baseFrequency?: number | string; baselineShift?: number | string; baseProfile?: number | string; bbox?: number | string; begin?: number | string; bias?: number | string; by?: number | string; calcMode?: number | string; capHeight?: number | string; clip?: number | string; clipPath?: string; clipPathUnits?: number | string; clipRule?: number | string; colorInterpolation?: number | string; colorInterpolationFilters?: "auto" | "sRGB" | "linearRGB" | "inherit"; colorProfile?: number | string; colorRendering?: number | string; contentScriptType?: number | string; contentStyleType?: number | string; cursor?: number | string; cx?: number | string; cy?: number | string; d?: string; decelerate?: number | string; descent?: number | string; diffuseConstant?: number | string; direction?: number | string; display?: number | string; divisor?: number | string; dominantBaseline?: number | string; dur?: number | string; dx?: number | string; dy?: number | string; edgeMode?: number | string; elevation?: number | string; enableBackground?: number | string; end?: number | string; exponent?: number | string; externalResourcesRequired?: Booleanish; fill?: string; fillOpacity?: number | string; fillRule?: "nonzero" | "evenodd" | "inherit"; filter?: string; filterRes?: number | string; filterUnits?: number | string; floodColor?: number | string; floodOpacity?: number | string; focusable?: Booleanish | "auto"; fontFamily?: string; fontSize?: number | string; fontSizeAdjust?: number | string; fontStretch?: number | string; fontStyle?: number | string; fontVariant?: number | string; fontWeight?: number | string; format?: number | string; from?: number | string; fx?: number | string; fy?: number | string; g1?: number | string; g2?: number | string; glyphName?: number | string; glyphOrientationHorizontal?: number | string; glyphOrientationVertical?: number | string; glyphRef?: number | string; gradientTransform?: string; gradientUnits?: string; hanging?: number | string; horizAdvX?: number | string; horizOriginX?: number | string; href?: string; ideographic?: number | string; imageRendering?: number | string; in2?: number | string; in?: string; intercept?: number | string; k1?: number | string; k2?: number | string; k3?: number | string; k4?: number | string; k?: number | string; kernelMatrix?: number | string; kernelUnitLength?: number | string; kerning?: number | string; keyPoints?: number | string; keySplines?: number | string; keyTimes?: number | string; lengthAdjust?: number | string; letterSpacing?: number | string; lightingColor?: number | string; limitingConeAngle?: number | string; local?: number | string; markerEnd?: string; markerHeight?: number | string; markerMid?: string; markerStart?: string; markerUnits?: number | string; markerWidth?: number | string; mask?: string; maskContentUnits?: number | string; maskUnits?: number | string; mathematical?: number | string; mode?: number | string; numOctaves?: number | string; offset?: number | string; opacity?: number | string; operator?: number | string; order?: number | string; orient?: number | string; orientation?: number | string; origin?: number | string; overflow?: number | string; overlinePosition?: number | string; overlineThickness?: number | string; paintOrder?: number | string; panose1?: number | string; pathLength?: number | string; patternContentUnits?: string; patternTransform?: number | string; patternUnits?: string; pointerEvents?: number | string; points?: string; pointsAtX?: number | string; pointsAtY?: number | string; pointsAtZ?: number | string; preserveAlpha?: Booleanish; preserveAspectRatio?: string; primitiveUnits?: number | string; r?: number | string; radius?: number | string; refX?: number | string; refY?: number | string; renderingIntent?: number | string; repeatCount?: number | string; repeatDur?: number | string; requiredExtensions?: number | string; requiredFeatures?: number | string; restart?: number | string; result?: string; rotate?: number | string; rx?: number | string; ry?: number | string; scale?: number | string; seed?: number | string; shapeRendering?: number | string; slope?: number | string; spacing?: number | string; specularConstant?: number | string; specularExponent?: number | string; speed?: number | string; spreadMethod?: string; startOffset?: number | string; stdDeviation?: number | string; stemh?: number | string; stemv?: number | string; stitchTiles?: number | string; stopColor?: string; stopOpacity?: number | string; strikethroughPosition?: number | string; strikethroughThickness?: number | string; string?: number | string; stroke?: string; strokeDasharray?: string | number; strokeDashoffset?: string | number; strokeLinecap?: "butt" | "round" | "square" | "inherit"; strokeLinejoin?: "miter" | "round" | "bevel" | "inherit"; strokeMiterlimit?: number | string; strokeOpacity?: number | string; strokeWidth?: number | string; surfaceScale?: number | string; systemLanguage?: number | string; tableValues?: number | string; targetX?: number | string; targetY?: number | string; textAnchor?: string; textDecoration?: number | string; textLength?: number | string; textRendering?: number | string; to?: number | string; transform?: string; u1?: number | string; u2?: number | string; underlinePosition?: number | string; underlineThickness?: number | string; unicode?: number | string; unicodeBidi?: number | string; unicodeRange?: number | string; unitsPerEm?: number | string; vAlphabetic?: number | string; values?: string; vectorEffect?: number | string; version?: string; vertAdvY?: number | string; vertOriginX?: number | string; vertOriginY?: number | string; vHanging?: number | string; vIdeographic?: number | string; viewBox?: string; viewTarget?: number | string; visibility?: number | string; vMathematical?: number | string; widths?: number | string; wordSpacing?: number | string; writingMode?: number | string; x1?: number | string; x2?: number | string; x?: number | string; xChannelSelector?: string; xHeight?: number | string; xlinkActuate?: string; xlinkArcrole?: string; xlinkHref?: string; xlinkRole?: string; xlinkShow?: string; xlinkTitle?: string; xlinkType?: string; xmlBase?: string; xmlLang?: string; xmlns?: string; xmlnsXlink?: string; xmlSpace?: string; y1?: number | string; y2?: number | string; y?: number | string; yChannelSelector?: string; z?: number | string; zoomAndPan?: string; } interface WebViewHTMLAttributes<T> extends HTMLAttributes<T> { allowFullScreen?: boolean; allowpopups?: boolean; autoFocus?: boolean; autosize?: boolean; blinkfeatures?: string; disableblinkfeatures?: string; disableguestresize?: boolean; disablewebsecurity?: boolean; guestinstance?: string; httpreferrer?: string; nodeintegration?: boolean; partition?: string; plugins?: boolean; preload?: string; src?: string; useragent?: string; webpreferences?: string; } // // React.DOM // ---------------------------------------------------------------------- interface ReactHTML { a: DetailedHTMLFactory< AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement >; abbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; address: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; area: DetailedHTMLFactory< AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement >; article: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; aside: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; audio: DetailedHTMLFactory< AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement >; b: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; base: DetailedHTMLFactory< BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement >; bdi: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; bdo: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; big: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; blockquote: DetailedHTMLFactory< BlockquoteHTMLAttributes<HTMLElement>, HTMLElement >; body: DetailedHTMLFactory<HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>; br: DetailedHTMLFactory<HTMLAttributes<HTMLBRElement>, HTMLBRElement>; button: DetailedHTMLFactory< ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement >; canvas: DetailedHTMLFactory< CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement >; caption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; cite: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; code: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; col: DetailedHTMLFactory< ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement >; colgroup: DetailedHTMLFactory< ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement >; data: DetailedHTMLFactory< DataHTMLAttributes<HTMLDataElement>, HTMLDataElement >; datalist: DetailedHTMLFactory< HTMLAttributes<HTMLDataListElement>, HTMLDataListElement >; dd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; del: DetailedHTMLFactory<DelHTMLAttributes<HTMLElement>, HTMLElement>; details: DetailedHTMLFactory< DetailsHTMLAttributes<HTMLElement>, HTMLElement >; dfn: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; dialog: DetailedHTMLFactory< DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement >; div: DetailedHTMLFactory<HTMLAttributes<HTMLDivElement>, HTMLDivElement>; dl: DetailedHTMLFactory<HTMLAttributes<HTMLDListElement>, HTMLDListElement>; dt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; em: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; embed: DetailedHTMLFactory< EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement >; fieldset: DetailedHTMLFactory< FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement >; figcaption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; figure: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; footer: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; form: DetailedHTMLFactory< FormHTMLAttributes<HTMLFormElement>, HTMLFormElement >; h1: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h2: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h3: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h4: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h5: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h6: DetailedHTMLFactory< HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; head: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLHeadElement>; header: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; hgroup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; hr: DetailedHTMLFactory<HTMLAttributes<HTMLHRElement>, HTMLHRElement>; html: DetailedHTMLFactory< HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement >; i: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; iframe: DetailedHTMLFactory< IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement >; img: DetailedHTMLFactory< ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement >; input: DetailedHTMLFactory< InputHTMLAttributes<HTMLInputElement>, HTMLInputElement >; ins: DetailedHTMLFactory<InsHTMLAttributes<HTMLModElement>, HTMLModElement>; kbd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; keygen: DetailedHTMLFactory<KeygenHTMLAttributes<HTMLElement>, HTMLElement>; label: DetailedHTMLFactory< LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement >; legend: DetailedHTMLFactory< HTMLAttributes<HTMLLegendElement>, HTMLLegendElement >; li: DetailedHTMLFactory<LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>; link: DetailedHTMLFactory< LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement >; main: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; map: DetailedHTMLFactory<MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>; mark: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; menu: DetailedHTMLFactory<MenuHTMLAttributes<HTMLElement>, HTMLElement>; menuitem: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; meta: DetailedHTMLFactory< MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement >; meter: DetailedHTMLFactory<MeterHTMLAttributes<HTMLElement>, HTMLElement>; nav: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; noscript: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; object: DetailedHTMLFactory< ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement >; ol: DetailedHTMLFactory< OlHTMLAttributes<HTMLOListElement>, HTMLOListElement >; optgroup: DetailedHTMLFactory< OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement >; option: DetailedHTMLFactory< OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement >; output: DetailedHTMLFactory<OutputHTMLAttributes<HTMLElement>, HTMLElement>; p: DetailedHTMLFactory< HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement >; param: DetailedHTMLFactory< ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement >; picture: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; pre: DetailedHTMLFactory<HTMLAttributes<HTMLPreElement>, HTMLPreElement>; progress: DetailedHTMLFactory< ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement >; q: DetailedHTMLFactory< QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement >; rp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; rt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; ruby: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; s: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; samp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; script: DetailedHTMLFactory< ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement >; section: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; select: DetailedHTMLFactory< SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement >; small: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; source: DetailedHTMLFactory< SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement >; span: DetailedHTMLFactory<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>; strong: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; style: DetailedHTMLFactory< StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement >; sub: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; summary: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; sup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; table: DetailedHTMLFactory< TableHTMLAttributes<HTMLTableElement>, HTMLTableElement >; template: DetailedHTMLFactory< HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement >; tbody: DetailedHTMLFactory< HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; td: DetailedHTMLFactory< TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement >; textarea: DetailedHTMLFactory< TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement >; tfoot: DetailedHTMLFactory< HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; th: DetailedHTMLFactory< ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement >; thead: DetailedHTMLFactory< HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; time: DetailedHTMLFactory<TimeHTMLAttributes<HTMLElement>, HTMLElement>; title: DetailedHTMLFactory< HTMLAttributes<HTMLTitleElement>, HTMLTitleElement >; tr: DetailedHTMLFactory< HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement >; track: DetailedHTMLFactory< TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement >; u: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; ul: DetailedHTMLFactory<HTMLAttributes<HTMLUListElement>, HTMLUListElement>; var: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; video: DetailedHTMLFactory< VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement >; wbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>; webview: DetailedHTMLFactory< WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement >; } interface ReactSVG { animate: SVGFactory; circle: SVGFactory; clipPath: SVGFactory; defs: SVGFactory; desc: SVGFactory; ellipse: SVGFactory; feBlend: SVGFactory; feColorMatrix: SVGFactory; feComponentTransfer: SVGFactory; feComposite: SVGFactory; feConvolveMatrix: SVGFactory; feDiffuseLighting: SVGFactory; feDisplacementMap: SVGFactory; feDistantLight: SVGFactory; feDropShadow: SVGFactory; feFlood: SVGFactory; feFuncA: SVGFactory; feFuncB: SVGFactory; feFuncG: SVGFactory; feFuncR: SVGFactory; feGaussianBlur: SVGFactory; feImage: SVGFactory; feMerge: SVGFactory; feMergeNode: SVGFactory; feMorphology: SVGFactory; feOffset: SVGFactory; fePointLight: SVGFactory; feSpecularLighting: SVGFactory; feSpotLight: SVGFactory; feTile: SVGFactory; feTurbulence: SVGFactory; filter: SVGFactory; foreignObject: SVGFactory; g: SVGFactory; image: SVGFactory; line: SVGFactory; linearGradient: SVGFactory; marker: SVGFactory; mask: SVGFactory; metadata: SVGFactory; path: SVGFactory; pattern: SVGFactory; polygon: SVGFactory; polyline: SVGFactory; radialGradient: SVGFactory; rect: SVGFactory; stop: SVGFactory; svg: SVGFactory; switch: SVGFactory; symbol: SVGFactory; text: SVGFactory; textPath: SVGFactory; tspan: SVGFactory; use: SVGFactory; view: SVGFactory; } interface ReactDOM extends ReactHTML, ReactSVG {} // // React.PropTypes // ---------------------------------------------------------------------- type Validator<T> = PropTypes.Validator<T>; type Requireable<T> = PropTypes.Requireable<T>; type ValidationMap<T> = PropTypes.ValidationMap<T>; type WeakValidationMap<T> = { [K in keyof T]?: null extends T[K] ? Validator<T[K] | null | undefined> : undefined extends T[K] ? Validator<T[K] | null | undefined> : Validator<T[K]>; }; interface ReactPropTypes { any: typeof PropTypes.any; array: typeof PropTypes.array; bool: typeof PropTypes.bool; func: typeof PropTypes.func; number: typeof PropTypes.number; object: typeof PropTypes.object; string: typeof PropTypes.string; node: typeof PropTypes.node; element: typeof PropTypes.element; instanceOf: typeof PropTypes.instanceOf; oneOf: typeof PropTypes.oneOf; oneOfType: typeof PropTypes.oneOfType; arrayOf: typeof PropTypes.arrayOf; objectOf: typeof PropTypes.objectOf; shape: typeof PropTypes.shape; exact: typeof PropTypes.exact; } // // React.Children // ---------------------------------------------------------------------- interface ReactChildren { map<T, C>( children: C | C[], fn: (child: C, index: number) => T ): C extends null | undefined ? C : Array<Exclude<T, boolean | null | undefined>>; forEach<C>(children: C | C[], fn: (child: C, index: number) => void): void; count(children: any): number; only<C>(children: C): C extends any[] ? never : C; toArray( children: ReactNode | ReactNode[] ): Array<Exclude<ReactNode, boolean | null | undefined>>; } // // Browser Interfaces // https://github.com/nikeee/2048-typescript/blob/master/2048/js/touch.d.ts // ---------------------------------------------------------------------- interface AbstractView { styleMedia: StyleMedia; document: Document; } interface Touch { identifier: number; target: EventTarget; screenX: number; screenY: number; clientX: number; clientY: number; pageX: number; pageY: number; } interface TouchList { [index: number]: Touch; length: number; item(index: number): Touch; identifiedTouch(identifier: number): Touch; } // // Error Interfaces // ---------------------------------------------------------------------- interface ErrorInfo { /** * Captures which component contained the exception, and its ancestors. */ componentStack: string; }}
// naked 'any' type in a conditional type will short circuit and union both the then/else branches// so boolean is only resolved for T = anytype IsExactlyAny<T> = boolean extends (T extends never? true: false) ? true : false;type ExactlyAnyPropertyKeys<T> = { [K in keyof T]: IsExactlyAny<T[K]> extends true ? K : never;}[keyof T];type NotExactlyAnyPropertyKeys<T> = Exclude<keyof T, ExactlyAnyPropertyKeys<T>>;
// Try to resolve ill-defined props like for JS users: props can be any, or sometimes objects with properties of type anytype MergePropTypes<P, T> = // Distribute over P in case it is a union type P extends any // If props is type any, use propTypes definitions ? IsExactlyAny<P> extends true ? T // If declared props have indexed properties, ignore inferred props entirely as keyof gets widened : string extends keyof P ? P // Prefer declared types which are not exactly any : Pick<P, NotExactlyAnyPropertyKeys<P>> & // For props which are exactly any, use the type inferred from propTypes if present Pick<T, Exclude<keyof T, NotExactlyAnyPropertyKeys<P>>> & // Keep leftover props not specified in propTypes Pick<P, Exclude<keyof P, keyof T>> : never;// Any prop that has a default prop becomes optional, but its type is unchanged// Undeclared default props are augmented into the resulting allowable attributes// If declared props have indexed properties, ignore default props entirely as keyof gets widened// Wrap in an outer-level conditional type to allow distribution over props that are unionstype Defaultize<P, D> = P extends any ? string extends keyof P ? P : Pick<P, Exclude<keyof P, keyof D>> & Partial<Pick<P, Extract<keyof P, keyof D>>> & Partial<Pick<D, Exclude<keyof D, keyof P>>> : never;type ReactManagedAttributes<C, P> = C extends { propTypes: infer T; defaultProps: infer D;} ? Defaultize<MergePropTypes<P, PropTypes.InferProps<T>>, D> : C extends { propTypes: infer T } ? MergePropTypes<P, PropTypes.InferProps<T>> : C extends { defaultProps: infer D } ? Defaultize<P, D> : P;declare global { namespace JSX { // tslint:disable-next-line:no-empty-interface interface Element extends React.ReactElement<any, any> {} interface ElementClass extends React.Component<any> { render(): React.ReactNode; } interface ElementAttributesProperty { props: {}; } interface ElementChildrenAttribute { children: {}; } // We can't recurse forever because `type` can't be self-referential; // let's assume it's reasonable to do a single React.lazy() around a single React.memo() / vice-versa type LibraryManagedAttributes<C, P> = C extends | React.MemoExoticComponent<infer T> | React.LazyExoticComponent<infer T> ? T extends | React.MemoExoticComponent<infer U> | React.LazyExoticComponent<infer U> ? ReactManagedAttributes<U, P> : ReactManagedAttributes<T, P> : ReactManagedAttributes<C, P>; // tslint:disable-next-line:no-empty-interface interface IntrinsicAttributes extends React.Attributes {} // tslint:disable-next-line:no-empty-interface interface IntrinsicClassAttributes<T> extends React.ClassAttributes<T> {} interface IntrinsicElements { // HTML a: React.DetailedHTMLProps< React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement >; abbr: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; address: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; area: React.DetailedHTMLProps< React.AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement >; article: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; aside: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; audio: React.DetailedHTMLProps< React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement >; b: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; base: React.DetailedHTMLProps< React.BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement >; bdi: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; bdo: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; big: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; blockquote: React.DetailedHTMLProps< React.BlockquoteHTMLAttributes<HTMLElement>, HTMLElement >; body: React.DetailedHTMLProps< React.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement >; br: React.DetailedHTMLProps< React.HTMLAttributes<HTMLBRElement>, HTMLBRElement >; button: React.DetailedHTMLProps< React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement >; canvas: React.DetailedHTMLProps< React.CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement >; caption: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; cite: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; code: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; col: React.DetailedHTMLProps< React.ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement >; colgroup: React.DetailedHTMLProps< React.ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement >; data: React.DetailedHTMLProps< React.DataHTMLAttributes<HTMLDataElement>, HTMLDataElement >; datalist: React.DetailedHTMLProps< React.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement >; dd: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; del: React.DetailedHTMLProps< React.DelHTMLAttributes<HTMLElement>, HTMLElement >; details: React.DetailedHTMLProps< React.DetailsHTMLAttributes<HTMLElement>, HTMLElement >; dfn: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; dialog: React.DetailedHTMLProps< React.DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement >; div: React.DetailedHTMLProps< React.HTMLAttributes<HTMLDivElement>, HTMLDivElement >; dl: React.DetailedHTMLProps< React.HTMLAttributes<HTMLDListElement>, HTMLDListElement >; dt: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; em: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; embed: React.DetailedHTMLProps< React.EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement >; fieldset: React.DetailedHTMLProps< React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement >; figcaption: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; figure: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; footer: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; form: React.DetailedHTMLProps< React.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement >; h1: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h2: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h3: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h4: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h5: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; h6: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement >; head: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement >; header: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; hgroup: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; hr: React.DetailedHTMLProps< React.HTMLAttributes<HTMLHRElement>, HTMLHRElement >; html: React.DetailedHTMLProps< React.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement >; i: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; iframe: React.DetailedHTMLProps< React.IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement >; img: React.DetailedHTMLProps< React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement >; input: React.DetailedHTMLProps< React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement >; ins: React.DetailedHTMLProps< React.InsHTMLAttributes<HTMLModElement>, HTMLModElement >; kbd: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; keygen: React.DetailedHTMLProps< React.KeygenHTMLAttributes<HTMLElement>, HTMLElement >; label: React.DetailedHTMLProps< React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement >; legend: React.DetailedHTMLProps< React.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement >; li: React.DetailedHTMLProps< React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement >; link: React.DetailedHTMLProps< React.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement >; main: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; map: React.DetailedHTMLProps< React.MapHTMLAttributes<HTMLMapElement>, HTMLMapElement >; mark: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; menu: React.DetailedHTMLProps< React.MenuHTMLAttributes<HTMLElement>, HTMLElement >; menuitem: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; meta: React.DetailedHTMLProps< React.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement >; meter: React.DetailedHTMLProps< React.MeterHTMLAttributes<HTMLElement>, HTMLElement >; nav: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; noindex: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; noscript: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; object: React.DetailedHTMLProps< React.ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement >; ol: React.DetailedHTMLProps< React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement >; optgroup: React.DetailedHTMLProps< React.OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement >; option: React.DetailedHTMLProps< React.OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement >; output: React.DetailedHTMLProps< React.OutputHTMLAttributes<HTMLElement>, HTMLElement >; p: React.DetailedHTMLProps< React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement >; param: React.DetailedHTMLProps< React.ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement >; picture: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; pre: React.DetailedHTMLProps< React.HTMLAttributes<HTMLPreElement>, HTMLPreElement >; progress: React.DetailedHTMLProps< React.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement >; q: React.DetailedHTMLProps< React.QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement >; rp: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; rt: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; ruby: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; s: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; samp: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; script: React.DetailedHTMLProps< React.ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement >; section: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; select: React.DetailedHTMLProps< React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement >; small: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; source: React.DetailedHTMLProps< React.SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement >; span: React.DetailedHTMLProps< React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement >; strong: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; style: React.DetailedHTMLProps< React.StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement >; sub: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; summary: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; sup: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; table: React.DetailedHTMLProps< React.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement >; template: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement >; tbody: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; td: React.DetailedHTMLProps< React.TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement >; textarea: React.DetailedHTMLProps< React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement >; tfoot: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; th: React.DetailedHTMLProps< React.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement >; thead: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement >; time: React.DetailedHTMLProps< React.TimeHTMLAttributes<HTMLElement>, HTMLElement >; title: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement >; tr: React.DetailedHTMLProps< React.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement >; track: React.DetailedHTMLProps< React.TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement >; u: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; ul: React.DetailedHTMLProps< React.HTMLAttributes<HTMLUListElement>, HTMLUListElement >; var: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; video: React.DetailedHTMLProps< React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement >; wbr: React.DetailedHTMLProps< React.HTMLAttributes<HTMLElement>, HTMLElement >; webview: React.DetailedHTMLProps< React.WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement >; // SVG svg: React.SVGProps<SVGSVGElement>; animate: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateElement but is not in TypeScript's lib.dom.d.ts for now. animateMotion: React.SVGProps<SVGElement>; animateTransform: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateTransformElement but is not in TypeScript's lib.dom.d.ts for now. circle: React.SVGProps<SVGCircleElement>; clipPath: React.SVGProps<SVGClipPathElement>; defs: React.SVGProps<SVGDefsElement>; desc: React.SVGProps<SVGDescElement>; ellipse: React.SVGProps<SVGEllipseElement>; feBlend: React.SVGProps<SVGFEBlendElement>; feColorMatrix: React.SVGProps<SVGFEColorMatrixElement>; feComponentTransfer: React.SVGProps<SVGFEComponentTransferElement>; feComposite: React.SVGProps<SVGFECompositeElement>; feConvolveMatrix: React.SVGProps<SVGFEConvolveMatrixElement>; feDiffuseLighting: React.SVGProps<SVGFEDiffuseLightingElement>; feDisplacementMap: React.SVGProps<SVGFEDisplacementMapElement>; feDistantLight: React.SVGProps<SVGFEDistantLightElement>; feDropShadow: React.SVGProps<SVGFEDropShadowElement>; feFlood: React.SVGProps<SVGFEFloodElement>; feFuncA: React.SVGProps<SVGFEFuncAElement>; feFuncB: React.SVGProps<SVGFEFuncBElement>; feFuncG: React.SVGProps<SVGFEFuncGElement>; feFuncR: React.SVGProps<SVGFEFuncRElement>; feGaussianBlur: React.SVGProps<SVGFEGaussianBlurElement>; feImage: React.SVGProps<SVGFEImageElement>; feMerge: React.SVGProps<SVGFEMergeElement>; feMergeNode: React.SVGProps<SVGFEMergeNodeElement>; feMorphology: React.SVGProps<SVGFEMorphologyElement>; feOffset: React.SVGProps<SVGFEOffsetElement>; fePointLight: React.SVGProps<SVGFEPointLightElement>; feSpecularLighting: React.SVGProps<SVGFESpecularLightingElement>; feSpotLight: React.SVGProps<SVGFESpotLightElement>; feTile: React.SVGProps<SVGFETileElement>; feTurbulence: React.SVGProps<SVGFETurbulenceElement>; filter: React.SVGProps<SVGFilterElement>; foreignObject: React.SVGProps<SVGForeignObjectElement>; g: React.SVGProps<SVGGElement>; image: React.SVGProps<SVGImageElement>; line: React.SVGProps<SVGLineElement>; linearGradient: React.SVGProps<SVGLinearGradientElement>; marker: React.SVGProps<SVGMarkerElement>; mask: React.SVGProps<SVGMaskElement>; metadata: React.SVGProps<SVGMetadataElement>; mpath: React.SVGProps<SVGElement>; path: React.SVGProps<SVGPathElement>; pattern: React.SVGProps<SVGPatternElement>; polygon: React.SVGProps<SVGPolygonElement>; polyline: React.SVGProps<SVGPolylineElement>; radialGradient: React.SVGProps<SVGRadialGradientElement>; rect: React.SVGProps<SVGRectElement>; stop: React.SVGProps<SVGStopElement>; switch: React.SVGProps<SVGSwitchElement>; symbol: React.SVGProps<SVGSymbolElement>; text: React.SVGProps<SVGTextElement>; textPath: React.SVGProps<SVGTextPathElement>; tspan: React.SVGProps<SVGTSpanElement>; use: React.SVGProps<SVGUseElement>; view: React.SVGProps<SVGViewElement>; } }}