123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055(* List of attributes that bring type-safety and attribute validation based on the tag. Used at compile-time by the ppx *)openHtml_attributes[@@@ocamlformat"disable"](* This file is more like a spreadsheet, prefer to keep it with margin=300.
Since @@@ocamlformat "margin=300" is not possible, we disable it entirely. *)(* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#referrerpolicy *)letreferrerPolicy=Polyvariant[{type_="no_referrer";jsxName="no-referrer"};{type_="no_referrer_when_downgrade";jsxName="no-referrer-when-downgrade"};{type_="origin";jsxName="origin"};{type_="origin_when_cross_origin";jsxName="origin-when-cross-origin"};{type_="same_origin";jsxName="same-origin"};{type_="strict_origin";jsxName="strict-origin"};{type_="strict_origin_when_cross_origin";jsxName="strict-origin-when-cross-origin"};{type_="unsafe_url";jsxName="unsafe-url"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#loading *)letloading=Polyvariant[{type_="lazy_";jsxName="lazy"};{type_="eager";jsxName="eager"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#fetchpriority *)letfetchpriority=Polyvariant[{type_="high";jsxName="high"};{type_="low";jsxName="low"};{type_="auto";jsxName="auto"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#popovertargetaction *)letpopovertargetaction=Polyvariant[{type_="hide";jsxName="hide"};{type_="show";jsxName="show"};{type_="toggle";jsxName="toggle"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#align *)letalign=Polyvariant[{type_="left";jsxName="left"};{type_="center";jsxName="center"};{type_="right";jsxName="right"};{type_="justify";jsxName="justify"};{type_="char";jsxName="char"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#scope *)letscope=Polyvariant[{type_="row";jsxName="row"};{type_="col";jsxName="col"};{type_="rowgroup";jsxName="rowgroup"};{type_="colgroup";jsxName="colgroup"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#blocking *)letblocking=Polyvariant[{type_="render";jsxName="render"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/type *)letinputType=Polyvariant[{type_="button";jsxName="button"};{type_="checkbox";jsxName="checkbox"};{type_="color";jsxName="color"};{type_="date";jsxName="date"};{type_="datetime_local";jsxName="datetime-local"};{type_="email";jsxName="email"};{type_="file";jsxName="file"};{type_="hidden";jsxName="hidden"};{type_="image";jsxName="image"};{type_="month";jsxName="month"};{type_="number";jsxName="number"};{type_="password";jsxName="password"};{type_="radio";jsxName="radio"};{type_="range";jsxName="range"};{type_="reset";jsxName="reset"};{type_="search";jsxName="search"};{type_="submit";jsxName="submit"};{type_="tel";jsxName="tel"};{type_="text";jsxName="text"};{type_="time";jsxName="time"};{type_="url";jsxName="url"};{type_="week";jsxName="week"};](* https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles *)letariaRole=Polyvariant[{type_="alert";jsxName="alert"};{type_="alertdialog";jsxName="alertdialog"};{type_="application";jsxName="application"};{type_="article";jsxName="article"};{type_="banner";jsxName="banner"};{type_="button";jsxName="button"};{type_="cell";jsxName="cell"};{type_="checkbox";jsxName="checkbox"};{type_="columnheader";jsxName="columnheader"};{type_="combobox";jsxName="combobox"};{type_="complementary";jsxName="complementary"};{type_="contentinfo";jsxName="contentinfo"};{type_="definition";jsxName="definition"};{type_="dialog";jsxName="dialog"};{type_="directory";jsxName="directory"};{type_="document";jsxName="document"};{type_="feed";jsxName="feed"};{type_="figure";jsxName="figure"};{type_="form";jsxName="form"};{type_="grid";jsxName="grid"};{type_="gridcell";jsxName="gridcell"};{type_="group";jsxName="group"};{type_="heading";jsxName="heading"};{type_="img";jsxName="img"};{type_="link";jsxName="link"};{type_="list";jsxName="list"};{type_="listbox";jsxName="listbox"};{type_="listitem";jsxName="listitem"};{type_="log";jsxName="log"};{type_="main";jsxName="main"};{type_="marquee";jsxName="marquee"};{type_="math";jsxName="math"};{type_="menu";jsxName="menu"};{type_="menubar";jsxName="menubar"};{type_="menuitem";jsxName="menuitem"};{type_="menuitemcheckbox";jsxName="menuitemcheckbox"};{type_="menuitemradio";jsxName="menuitemradio"};{type_="navigation";jsxName="navigation"};{type_="none";jsxName="none"};{type_="note";jsxName="note"};{type_="option";jsxName="option"};{type_="presentation";jsxName="presentation"};{type_="progressbar";jsxName="progressbar"};{type_="radio";jsxName="radio"};{type_="radiogroup";jsxName="radiogroup"};{type_="region";jsxName="region"};{type_="row";jsxName="row"};{type_="rowgroup";jsxName="rowgroup"};{type_="rowheader";jsxName="rowheader"};{type_="scrollbar";jsxName="scrollbar"};{type_="search";jsxName="search"};{type_="searchbox";jsxName="searchbox"};{type_="separator";jsxName="separator"};{type_="slider";jsxName="slider"};{type_="spinbutton";jsxName="spinbutton"};{type_="status";jsxName="status"};{type_="switch";jsxName="switch"};{type_="tab";jsxName="tab"};{type_="table";jsxName="table"};{type_="tablist";jsxName="tablist"};{type_="tabpanel";jsxName="tabpanel"};{type_="term";jsxName="term"};{type_="textbox";jsxName="textbox"};{type_="timer";jsxName="timer"};{type_="toolbar";jsxName="toolbar"};{type_="tooltip";jsxName="tooltip"};{type_="tree";jsxName="tree"};{type_="treegrid";jsxName="treegrid"};{type_="treeitem";jsxName="treeitem"};](* https://developer.mozilla.org/en-US/docs/Web/Events/Event_handlers *)letglobalEventHandlers=[Event{jsxName="oncopy";type_=Clipboard};Event{jsxName="oncopycapture";type_=Clipboard};Event{jsxName="oncut";type_=Clipboard};Event{jsxName="oncutcapture";type_=Clipboard};Event{jsxName="onpaste";type_=Clipboard};Event{jsxName="onpastecapture";type_=Clipboard};Event{jsxName="oncompositionend";type_=Composition};Event{jsxName="oncompositionendcapture";type_=Composition};Event{jsxName="oncompositionstart";type_=Composition};Event{jsxName="oncompositionstartcapture";type_=Composition};Event{jsxName="oncompositionupdate";type_=Composition};Event{jsxName="oncompositionupdatecapture";type_=Composition};Event{jsxName="onfocus";type_=Focus};Event{jsxName="onfocuscapture";type_=Focus};Event{jsxName="onblur";type_=Focus};Event{jsxName="onblurcapture";type_=Focus};Event{jsxName="onchange";type_=Form};Event{jsxName="onchangecapture";type_=Form};Event{jsxName="onbeforeinput";type_=Form};Event{jsxName="onbeforeinputcapture";type_=Form};Event{jsxName="oninput";type_=Form};Event{jsxName="oninputcapture";type_=Form};Event{jsxName="onreset";type_=Form};Event{jsxName="onresetcapture";type_=Form};Event{jsxName="onsubmit";type_=Form};Event{jsxName="onsubmitcapture";type_=Form};Event{jsxName="oninvalid";type_=Form};Event{jsxName="oninvalidcapture";type_=Form};Event{jsxName="onload";type_=Media};Event{jsxName="onloadcapture";type_=Media};Event{jsxName="onerror";type_=Media};Event{jsxName="onerrorcapture";type_=Media};Event{jsxName="onkeydown";type_=Keyboard};Event{jsxName="onkeydowncapture";type_=Keyboard};Event{jsxName="onkeypress";type_=Keyboard};Event{jsxName="onkeypresscapture";type_=Keyboard};Event{jsxName="onkeyup";type_=Keyboard};Event{jsxName="onkeyupcapture";type_=Keyboard};Event{jsxName="onabort";type_=Media};Event{jsxName="onabortcapture";type_=Media};Event{jsxName="oncanplay";type_=Media};Event{jsxName="oncanplaycapture";type_=Media};Event{jsxName="oncanplaythrough";type_=Media};Event{jsxName="oncanplaythroughcapture";type_=Media};Event{jsxName="ondurationchange";type_=Media};Event{jsxName="ondurationchangecapture";type_=Media};Event{jsxName="onemptied";type_=Media};Event{jsxName="onemptiedcapture";type_=Media};Event{jsxName="onencrypted";type_=Media};Event{jsxName="onencryptedcapture";type_=Media};Event{jsxName="onended";type_=Media};Event{jsxName="onendedcapture";type_=Media};Event{jsxName="onloadeddata";type_=Media};Event{jsxName="onloadeddatacapture";type_=Media};Event{jsxName="onloadedmetadata";type_=Media};Event{jsxName="onloadedmetadatacapture";type_=Media};Event{jsxName="onloadstart";type_=Media};Event{jsxName="onloadstartcapture";type_=Media};Event{jsxName="onpause";type_=Media};Event{jsxName="onpausecapture";type_=Media};Event{jsxName="onplay";type_=Media};Event{jsxName="onplaycapture";type_=Media};Event{jsxName="onplaying";type_=Media};Event{jsxName="onplayingcapture";type_=Media};Event{jsxName="onprogress";type_=Media};Event{jsxName="onprogresscapture";type_=Media};Event{jsxName="onratechange";type_=Media};Event{jsxName="onratechangecapture";type_=Media};Event{jsxName="onseeked";type_=Media};Event{jsxName="onseekedcapture";type_=Media};Event{jsxName="onseeking";type_=Media};Event{jsxName="onseekingcapture";type_=Media};Event{jsxName="onstalled";type_=Media};Event{jsxName="onstalledcapture";type_=Media};Event{jsxName="onsuspend";type_=Media};Event{jsxName="onsuspendcapture";type_=Media};Event{jsxName="ontimeupdate";type_=Media};Event{jsxName="ontimeupdatecapture";type_=Media};Event{jsxName="onvolumechange";type_=Media};Event{jsxName="onvolumechangecapture";type_=Media};Event{jsxName="onwaiting";type_=Media};Event{jsxName="onwaitingcapture";type_=Media};Event{jsxName="onauxclick";type_=Mouse};Event{jsxName="onauxclickcapture";type_=Mouse};Event{jsxName="onclick";type_=Mouse};Event{jsxName="onclickcapture";type_=Mouse};Event{jsxName="oncontextmenu";type_=Mouse};Event{jsxName="oncontextmenucapture";type_=Mouse};Event{jsxName="ondblclick";type_=Mouse};Event{jsxName="ondblclickcapture";type_=Mouse};Event{jsxName="ondrag";type_=Drag};Event{jsxName="ondragcapture";type_=Drag};Event{jsxName="ondragend";type_=Drag};Event{jsxName="ondragendcapture";type_=Drag};Event{jsxName="ondragenter";type_=Drag};Event{jsxName="ondragentercapture";type_=Drag};Event{jsxName="ondragexit";type_=Drag};Event{jsxName="ondragexitcapture";type_=Drag};Event{jsxName="ondragleave";type_=Drag};Event{jsxName="ondragleavecapture";type_=Drag};Event{jsxName="ondragover";type_=Drag};Event{jsxName="ondragovercapture";type_=Drag};Event{jsxName="ondragstart";type_=Drag};Event{jsxName="ondragstartcapture";type_=Drag};Event{jsxName="ondrop";type_=Drag};Event{jsxName="ondropcapture";type_=Drag};Event{jsxName="onmousedown";type_=Mouse};Event{jsxName="onmousedowncapture";type_=Mouse};Event{jsxName="onmouseenter";type_=Mouse};Event{jsxName="onmouseleave";type_=Mouse};Event{jsxName="onmousemove";type_=Mouse};Event{jsxName="onmousemovecapture";type_=Mouse};Event{jsxName="onmouseout";type_=Mouse};Event{jsxName="onmouseoutcapture";type_=Mouse};Event{jsxName="onmouseover";type_=Mouse};Event{jsxName="onmouseovercapture";type_=Mouse};Event{jsxName="onmouseup";type_=Mouse};Event{jsxName="onmouseupcapture";type_=Mouse};Event{jsxName="onselect";type_=Selection};Event{jsxName="onselectcapture";type_=Selection};Event{jsxName="ontouchcancel";type_=Touch};Event{jsxName="ontouchcancelcapture";type_=Touch};Event{jsxName="ontouchend";type_=Touch};Event{jsxName="ontouchendcapture";type_=Touch};Event{jsxName="ontouchmove";type_=Touch};Event{jsxName="ontouchmovecapture";type_=Touch};Event{jsxName="ontouchstart";type_=Touch};Event{jsxName="ontouchstartcapture";type_=Touch};Event{jsxName="onpointerdown";type_=Pointer};Event{jsxName="onpointerdowncapture";type_=Pointer};Event{jsxName="onpointermove";type_=Pointer};Event{jsxName="onpointermovecapture";type_=Pointer};Event{jsxName="onpointerup";type_=Pointer};Event{jsxName="onpointerupcapture";type_=Pointer};Event{jsxName="onpointercancel";type_=Pointer};Event{jsxName="onpointercancelcapture";type_=Pointer};Event{jsxName="onpointerenter";type_=Pointer};Event{jsxName="onpointerentercapture";type_=Pointer};Event{jsxName="onpointerleave";type_=Pointer};Event{jsxName="onpointerleavecapture";type_=Pointer};Event{jsxName="onpointerover";type_=Pointer};Event{jsxName="onpointerovercapture";type_=Pointer};Event{jsxName="onpointerout";type_=Pointer};Event{jsxName="onpointeroutcapture";type_=Pointer};Event{jsxName="ongotpointercapture";type_=Pointer};Event{jsxName="ongotpointercapturecapture";type_=Pointer};Event{jsxName="onlostpointercapture";type_=Pointer};Event{jsxName="onlostpointercapturecapture";type_=Pointer};Event{jsxName="onscroll";type_=UI};Event{jsxName="onscrollcapture";type_=UI};Event{jsxName="onwheel";type_=Wheel};Event{jsxName="onwheelcapture";type_=Wheel};Event{jsxName="onanimationstart";type_=Animation};Event{jsxName="onanimationstartcapture";type_=Animation};Event{jsxName="onanimationend";type_=Animation};Event{jsxName="onanimationendcapture";type_=Animation};Event{jsxName="onanimationiteration";type_=Animation};Event{jsxName="onanimationiterationcapture";type_=Animation};Event{jsxName="ontransitionend";type_=Transition};Event{jsxName="ontransitionendcapture";type_=Transition};Event{jsxName="ontransitioncancel";type_=Transition};Event{jsxName="ontransitioncancelcapture";type_=Transition};Event{jsxName="ontransitionrun";type_=Transition};Event{jsxName="ontransitionruncapture";type_=Transition};Event{jsxName="ontransitionstart";type_=Transition};Event{jsxName="ontransitionstartcapture";type_=Transition};Event{jsxName="onanimationcancel";type_=Animation};Event{jsxName="onanimationcancelcapture";type_=Animation};Event{jsxName="onresize";type_=UI};Event{jsxName="onresizecapture";type_=UI};Event{jsxName="onscrollend";type_=UI};Event{jsxName="onscrollendcapture";type_=UI};Event{jsxName="onbeforematch";type_=UI};Event{jsxName="onbeforematchcapture";type_=UI};Event{jsxName="onbeforetoggle";type_=UI};Event{jsxName="onbeforetogglecapture";type_=UI};Event{jsxName="oncancel";type_=UI};Event{jsxName="oncancelcapture";type_=UI};Event{jsxName="onclose";type_=UI};Event{jsxName="onclosecapture";type_=UI};Event{jsxName="oncuechange";type_=Media};Event{jsxName="oncuechangecapture";type_=Media};Event{jsxName="onfocusin";type_=Focus};Event{jsxName="onfocusincapture";type_=Focus};Event{jsxName="onfocusout";type_=Focus};Event{jsxName="onfocusoutcapture";type_=Focus};Event{jsxName="onformdata";type_=Form};Event{jsxName="onformdatacapture";type_=Form};Event{jsxName="onfullscreenchange";type_=UI};Event{jsxName="onfullscreenchangecapture";type_=UI};Event{jsxName="onfullscreenerror";type_=UI};Event{jsxName="onfullscreenerrorcapture";type_=UI};Event{jsxName="onsecuritypolicyviolation";type_=UI};Event{jsxName="onsecuritypolicyviolationcapture";type_=UI};Event{jsxName="onselectionchange";type_=Selection};Event{jsxName="onselectionchangecapture";type_=Selection};Event{jsxName="onselectstart";type_=Selection};Event{jsxName="onselectstartcapture";type_=Selection};Event{jsxName="onslotchange";type_=UI};Event{jsxName="onslotchangecapture";type_=UI};](* https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes *)(* All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ *)letariaAttributes=[(* Identifies the currently active element when DOM focus is on a composite
widget, textbox, group, or application. *)Attribute{name="aria-activedescendant";jsxName="aria_activedescendant";type_=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. *)Attribute{name="aria-atomic";jsxName="aria_atomic";type_=BooleanishString};(* 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.
*)Attribute{name="aria-autocomplete";jsxName="aria_autocomplete";type_=Polyvariant[{type_="none";jsxName="none"};{type_="inline";jsxName="inline"};{type_="list";jsxName="list"};{type_="both";jsxName="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. *)Attribute{name="aria-busy";jsxName="aria_busy";type_=BooleanishString};(* Indicates the current "checked" state of checkboxes, radio buttons, and other
widgets.
* @see aria-pressed @see aria-selected.
*)Attribute{name="aria-checked";jsxName="aria_checked";type_=Polyvariant[{type_="false_";jsxName="false"};{type_="mixed";jsxName="mixed"};{type_="true_";jsxName="true"}]};(* Defines the total number of columns in a table, grid, or treegrid.
* @see aria-colindex.
*)Attribute{name="aria-colcount";jsxName="aria_colcount";type_=Int};(* 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.
*)Attribute{name="aria-colindex";jsxName="aria_colindex";type_=Int};(* Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.
* @see aria-colindex @see aria-rowspan.
*)Attribute{name="aria-colspan";jsxName="aria_colspan";type_=Int};(* Identifies the element (or elements) whose contents or presence are controlled by the current element.
* @see aria-owns.
*)Attribute{name="aria-controls";jsxName="aria_controls";type_=String};(* Indicates the element that represents the current item within a container
or set of related elements. *)Attribute{name="aria-current";jsxName="aria_current";type_=Polyvariant[{type_="false_";jsxName="false"};{type_="true_";jsxName="true"};{type_="page";jsxName="page"};{type_="step";jsxName="step"};{type_="location";jsxName="location"};{type_="date";jsxName="date"};{type_="time";jsxName="time"}]};(* Identifies the element (or elements) that describes the object.
* @see aria-labelledby
*)Attribute{name="aria-describedby";jsxName="aria_describedby";type_=String};(* Identifies the element that provides a detailed, extended description for
the object. * @see aria-describedby. *)Attribute{name="aria-details";jsxName="aria_details";type_=String};(* Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.
* @see aria-hidden @see aria-readonly.
*)Attribute{name="aria-disabled";jsxName="aria_disabled";type_=BooleanishString};(* Identifies the element that provides an error message for the object.
* @see aria-invalid @see aria-describedby.
*)Attribute{name="aria-errormessage";jsxName="aria_errormessage";type_=String};(* Indicates whether the element, or another grouping element it controls,
is currently expanded or collapsed. *)Attribute{name="aria-expanded";jsxName="aria_expanded";type_=BooleanishString};(* 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.
*)Attribute{name="aria-flowto";jsxName="aria_flowto";type_=String};(* Indicates the availability and type of interactive popup element, such as
menu or dialog, that can be triggered by an element. *)Attribute{name="aria-haspopup";jsxName="aria_haspopup";type_=Polyvariant[{type_="false_";jsxName="false"};{type_="true_";jsxName="true"};{type_="menu";jsxName="menu"};{type_="listbox";jsxName="listbox"};{type_="tree";jsxName="tree"};{type_="grid";jsxName="grid"};{type_="dialog";jsxName="dialog"}]};(* Indicates whether the element is exposed to an accessibility API.
* @see aria-disabled.
*)Attribute{name="aria-hidden";jsxName="aria_hidden";type_=BooleanishString};(* Indicates the entered value does not conform to the format expected by the
application.
* @see aria-errormessage.
*)Attribute{name="aria-invalid";jsxName="aria_invalid";type_=Polyvariant[{type_="false_";jsxName="false"};{type_="true_";jsxName="true"};{type_="grammar";jsxName="grammar"};{type_="spelling";jsxName="spelling"}]};(* Indicates keyboard shortcuts that an author has implemented to activate
or give focus to an element. *)Attribute{name="aria-keyshortcuts";jsxName="aria_keyshortcuts";type_=String};(* Defines a String value that labels the current element.
* @see aria-labelledby.
*)Attribute{name="aria-label";jsxName="aria_label";type_=String};(* Identifies the element (or elements) that labels the current element.
* @see aria-describedby.
*)Attribute{name="aria-labelledby";jsxName="aria_labelledby";type_=String};(* Defines the hierarchical level of an element within a structure. *)Attribute{name="aria-level";jsxName="aria_level";type_=Int};(* Indicates that an element will be updated, and describes the types of
updates the user agents, assistive technologies, and user can expect ;rom
the live region. *)Attribute{name="aria-live";jsxName="aria_live";type_=Polyvariant[{type_="off";jsxName="off"};{type_="assertive";jsxName="assertive"};{type_="polite";jsxName="polite"}]};(* Indicates whether an element is modal when displayed. *)Attribute{name="aria-modal";jsxName="aria_modal";type_=BooleanishString};(* Indicates whether a text box accepts multiple lines of input or only a
single line. *)Attribute{name="aria-multiline";jsxName="aria_multiline";type_=BooleanishString};(* Indicates that the user may select more than one item from the current
selectable descendants. *)Attribute{name="aria-multiselectable";jsxName="aria_multiselectable";type_=BooleanishString};(* Indicates whether the element's orientation is horizontal, vertical, or
unknown/ambiguous. *)Attribute{name="aria-orientation";jsxName="aria_orientation";type_=Polyvariant[{type_="horizontal";jsxName="horizontal"};{type_="vertical";jsxName="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.
*)Attribute{name="aria-owns";jsxName="aria_owns";type_=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.
*)Attribute{name="aria-placeholder";jsxName="aria_placeholder";type_=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. *)Attribute{name="aria-posinset";jsxName="aria_posinset";type_=Int};(* Indicates the current "pressed" state of toggle buttons.
* @see aria-checked @see aria-selected.
*)Attribute{name="aria-pressed";jsxName="aria_pressed";type_=Polyvariant[{type_="false_";jsxName="false"};{type_="mixed";jsxName="mixed"};{type_="true_";jsxName="true"}]};(* Indicates that the element is not editable, but is otherwise
operable.
* @see aria-disabled.
*)Attribute{name="aria-readonly";jsxName="aria_readonly";type_=BooleanishString};(* Indicates what notifications the user agent will trigger when the
accessibility tree within a live region is modified.
* @see aria-atomic.
*)Attribute{name="aria-relevant";jsxName="aria_relevant";type_=String(* 'additions' | 'additions removals' | 'additions text' | 'all' | 'removals' | 'removals additions' | 'removals text' | 'text' | 'text additions' | 'text removals' *)};(* Indicates that user input is required on the element before a form may be
submitted. *)Attribute{name="aria-required";jsxName="aria_required";type_=BooleanishString};(* Defines a human-readable, author-localized description for the role of an
element. *)Attribute{name="aria-roledescription";jsxName="aria_roledescription";type_=String};(* Defines the total number of rows in a table, grid, or treegrid.
* @see aria-rowindex.
*)Attribute{name="aria-rowcount";jsxName="aria_rowcount";type_=Int};(* 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.
*)Attribute{name="aria-rowindex";jsxName="aria_rowindex";type_=Int};(* *)Attribute{name="aria-rowindextext";jsxName="aria_rowindextext";type_=String};(* Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.
* @see aria-rowindex @see aria-colspan.
*)Attribute{name="aria-rowspan";jsxName="aria_rowspan";type_=Int};(* Indicates the current "selected" state of various widgets.
* @see aria-checked @see aria-pressed.
*)Attribute{name="aria-selected";jsxName="aria_selected";type_=BooleanishString};(* 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.
*)Attribute{name="aria-setsize";jsxName="aria_setsize";type_=Int};(* Indicates if items in a table or grid are sorted in ascending or
descending order. *)Attribute{name="aria-sort";jsxName="aria_sort";type_=Polyvariant[{type_="none";jsxName="none"};{type_="ascending";jsxName="ascending"};{type_="descending";jsxName="descending"};{type_="other";jsxName="other"}]};(* Defines the maximum allowed value for a range widget. *)Attribute{name="aria-valuemax";jsxName="aria_valuemax";type_=Int};(* Defines the minimum allowed value for a range widget. *)Attribute{name="aria-valuemin";jsxName="aria_valuemin";type_=Int};(* Defines the current value for a range widget.
* @see aria-valuetext.
*)Attribute{name="aria-valuenow";jsxName="aria_valuenow";type_=Int};(* Defines the human readable text alternative of aria-valuenow for a range
widget. *)Attribute{name="aria-valuetext";jsxName="aria_valuetext";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes *)letglobalAttributes=[(* Standard HTML Attributes *)Attribute{name="accesskey";jsxName="accesskey";type_=String};Attribute{name="autocapitalize";jsxName="autocapitalize";type_=Polyvariant[{type_="off";jsxName="off"};{type_="none";jsxName="none"};{type_="on";jsxName="on"};{type_="sentences";jsxName="sentences"};{type_="words";jsxName="words"};{type_="characters";jsxName="characters"}]};(* Attribute { name = "contextMenu"; jsxName = "contextMenu"; type_ = String }; *)Attribute{name="class";jsxName="class_";type_=String};Attribute{name="contenteditable";jsxName="contenteditable";type_=BooleanishString};Attribute{name="dir";jsxName="dir";type_=Polyvariant[{type_="ltr";jsxName="ltr"};{type_="rtl";jsxName="rtl"};{type_="auto";jsxName="auto"}]};Attribute{name="draggable";jsxName="draggable";type_=BooleanishString};Attribute{name="hidden";jsxName="hidden";type_=Bool};Attribute{name="id";jsxName="id";type_=String};Attribute{name="itemprop";jsxName="itemprop";type_=String};Attribute{name="itemscope";jsxName="itemscope";type_=Bool};Attribute{name="itemtype";jsxName="itemtype";type_=String};Attribute{name="itemid";jsxName="itemid";type_=String};Attribute{name="itemref";jsxName="itemref";type_=String};Attribute{name="lang";jsxName="lang";type_=String};Attribute{name="placeholder";jsxName="placeholder";type_=String};Attribute{name="part";jsxName="part";type_=String};Attribute{name="nonce";jsxName="nonce";type_=String};Attribute{name="slot";jsxName="slot";type_=String};Attribute{name="spellcheck";jsxName="spellcheck";type_=BooleanishString};Attribute{name="style";jsxName="style";type_=String};Attribute{name="tabindex";jsxName="tabindex";type_=Int};Attribute{name="enterkeyhint";jsxName="enterkeyhint";type_=Polyvariant[{type_="enter";jsxName="enter"};{type_="done_";jsxName="done"};{type_="go";jsxName="go"};{type_="next";jsxName="next"};{type_="previous";jsxName="previous"};{type_="search";jsxName="search"};{type_="send";jsxName="send"}]};(* data-* attributes are globaly available *)(* Experimental ; Attribute {name= "exportParts"; jsxName= "exportParts";
type_= Int} *)Attribute{name="title";jsxName="title";type_=String};Attribute{name="translate";jsxName="translate";type_=Polyvariant[{type_="yes";jsxName="yes"};{type_="no";jsxName="no"}]};(* 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 *)Attribute{name="inputmode";jsxName="inputmode";type_=Polyvariant[{type_="none";jsxName="none"};{type_="text";jsxName="text"};{type_="tel";jsxName="tel"};{type_="url";jsxName="url"};{type_="email";jsxName="email"};{type_="numeric";jsxName="numeric"};{type_="decimal";jsxName="decimal"};{type_="search";jsxName="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 *)Attribute{name="is";jsxName="is";type_=String};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inert *)Attribute{name="inert";jsxName="inert";type_=Bool};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover *)Attribute{name="popover";jsxName="popover";type_=Polyvariant[{type_="auto";jsxName="auto"};{type_="manual";jsxName="manual"};{type_="hint";jsxName="hint"}]};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus *)Attribute{name="autofocus";jsxName="autofocus";type_=Bool};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/exportparts *)Attribute{name="exportparts";jsxName="exportparts";type_=String};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/anchor *)Attribute{name="anchor";jsxName="anchor";type_=String};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/virtualkeyboardpolicy *)Attribute{name="virtualkeyboardpolicy";jsxName="virtualkeyboardpolicy";type_=Polyvariant[{type_="auto";jsxName="auto"};{type_="manual";jsxName="manual"}]};(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/writingsuggestions *)Attribute{name="writingsuggestions";jsxName="writingsuggestions";type_=Polyvariant[{type_="true_";jsxName="true"};{type_="false_";jsxName="false"}]};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes *)letelementAttributes=[(* Attribute { name = "radioGroup"; jsxName = "radioGroup"; type_ = String }; *)(* WAI-ARIA *)Attribute{name="role";jsxName="role";type_=ariaRole};(* RDFa Attributes *)Attribute{name="about";jsxName="about";type_=String};Attribute{name="dataType";jsxName="dataType";type_=String};Attribute{name="inlist";jsxName="inlist";type_=String(* any *)};Attribute{name="prefix";jsxName="prefix";type_=String};Attribute{name="property";jsxName="property";type_=String};Attribute{name="resource";jsxName="resource";type_=String};Attribute{name="typeof";jsxName="typeof";type_=String};Attribute{name="vocab";jsxName="vocab";type_=String};(* Non-standard Attributes *)Attribute{name="autocorrect";jsxName="autocorrect";type_=String};Attribute{name="autosave";jsxName="autosave";type_=String};Attribute{name="color";jsxName="color";type_=String};Attribute{name="results";jsxName="results";type_=Int};Attribute{name="security";jsxName="security";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a *)letanchorHTMLAttributes=[Attribute{name="download";jsxName="download";type_=String(* any *)};Attribute{name="href";jsxName="href";type_=String};Attribute{name="hreflang";jsxName="hreflang";type_=String};Attribute{name="media";jsxName="media";type_=String};Attribute{name="ping";jsxName="ping";type_=String};Attribute{name="rel";jsxName="rel";type_=String};Attribute{name="target";jsxName="target";type_=Polyvariant[{type_="_blank";jsxName="_blank"};{type_="_self";jsxName="_self"};{type_="_parent";jsxName="_parent"};{type_="_top";jsxName="_top"}]};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="referrerpolicy";jsxName="referrerpolicy";type_=referrerPolicy};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area *)letareaHTMLAttributes=[Attribute{name="alt";jsxName="alt";type_=String};Attribute{name="coords";jsxName="coords";type_=String};Attribute{name="download";jsxName="download";type_=String(* any *)};Attribute{name="href";jsxName="href";type_=String};Attribute{name="hreflang";jsxName="hreflang";type_=String};Attribute{name="media";jsxName="media";type_=String};Attribute{name="referrerpolicy";jsxName="referrerpolicy";type_=referrerPolicy};Attribute{name="rel";jsxName="rel";type_=String};Attribute{name="shape";jsxName="shape";type_=String};Attribute{name="target";jsxName="target";type_=Polyvariant[{type_="_blank";jsxName="_blank"};{type_="_self";jsxName="_self"};{type_="_parent";jsxName="_parent"};{type_="_top";jsxName="_top"}]};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base *)letbaseHTMLAttributes=[Attribute{name="href";jsxName="href";type_=String};Attribute{name="target";jsxName="target";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote *)letblockquoteHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button *)letbuttonHTMLAttributes=[Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="formaction";jsxName="formaction";type_=String};Attribute{name="formenctype";jsxName="formenctype";type_=String};Attribute{name="formmethod";jsxName="formmethod";type_=String};Attribute{name="formnovalidate";jsxName="formnovalidate";type_=Bool};Attribute{name="formtarget";jsxName="formtarget";type_=String};Attribute{name="name";jsxName="name";type_=String};Attribute{name="type";jsxName="type_";type_=Polyvariant[{type_="submit";jsxName="submit"};{type_="reset";jsxName="reset"};{type_="button";jsxName="button"}]};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};Attribute{name="popovertarget";jsxName="popovertarget";type_=String};Attribute{name="popovertargetaction";jsxName="popovertargetaction";type_=popovertargetaction};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas *)letcanvasHTMLAttributes=[Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="width";jsxName="width";type_=String(* number | *)}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col *)letcolHTMLAttributes=[Attribute{name="span";jsxName="span";type_=Int(* number *)};Attribute{name="width";jsxName="width";type_=String(* number | *)}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup *)letcolgroupHTMLAttributes=[Attribute{name="span";jsxName="span";type_=Int(* number *)}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data *)letdataHTMLAttributes=[Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details *)letdetailsHTMLAttributes=[Attribute{name="open";jsxName="open";type_=Bool};Event{jsxName="ontoggle";type_=Media}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del *)letdelHTMLAttributes=[Attribute{name="cite";type_=String;jsxName="cite"};Attribute{name="datetime";type_=String;jsxName="datetime"}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog *)letdialogHTMLAttributes=[Attribute{name="open";jsxName="open";type_=Bool}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed *)letembedHTMLAttributes=[Attribute{name="height";jsxName="height";type_=String(* number | *);};Attribute{name="src";jsxName="src";type_=String;};Attribute{name="type";jsxName="type";type_=String;};Attribute{name="width";type_=String(* number | *);jsxName="width"};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset *)letfieldsetHTMLAttributes=[Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="name";jsxName="name";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form *)letformHTMLAttributes=[Attribute{name="accept-charset";jsxName="acceptCharset";type_=String};Attribute{name="action";jsxName="action";type_=String};Attribute{name="autocomplete";jsxName="autocomplete";type_=String};Attribute{name="enctype";jsxName="enctype";type_=Polyvariant[{type_="application_x_www_form_urlencoded";jsxName="application/x-www-form-urlencoded"};{type_="multipart_form_data";jsxName="multipart/form-data"};{type_="text_plain";jsxName="text/plain"}]};Attribute{name="method";jsxName="method_";type_=Polyvariant[{type_="get";jsxName="get"};{type_="post";jsxName="post"};{type_="dialog";jsxName="dialog"}]};Attribute{name="name";jsxName="name";type_=String};Attribute{name="novalidate";jsxName="novalidate";type_=Bool};Attribute{name="target";jsxName="target";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html *)lethtmlHTMLAttributes=[Attribute{name="manifest";jsxName="manifest";type_=String};Attribute{name="version";jsxName="version";type_=String};Attribute{name="xmlns";jsxName="xmlns";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe *)letiframeHTMLAttributes=[Attribute{name="allow";jsxName="allow";type_=String};Attribute{name="allowfullscreen";jsxName="allowfullscreen";type_=Bool};(* Attribute { name = "allowTransparency"; jsxName = "allowTransparency"; type_ = Bool }; *)(* deprecated *)Attribute{name="frameborder";jsxName="frameborder";type_=String(* number | *)};Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="loading";jsxName="loading";type_=loading};(* deprecated *)Attribute{name="marginheight";jsxName="marginheight";type_=Int(* number *)};(* deprecated *)Attribute{name="marginwidth";jsxName="marginwidth";type_=Int(* number *)};Attribute{name="name";jsxName="name";type_=String};Attribute{name="referrerpolicy";jsxName="referrerpolicy";type_=referrerPolicy};Attribute{name="sandbox";jsxName="sandbox";type_=String};(* deprecated *)Attribute{name="scrolling";jsxName="scrolling";type_=String};Attribute{name="seamless";jsxName="seamless";type_=Bool};Attribute{name="src";jsxName="src";type_=String};Attribute{name="srcdoc";jsxName="srcdoc";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img *)letimgHTMLAttributes=[Attribute{name="alt";jsxName="alt";type_=String};Attribute{name="crossorigin";jsxName="crossorigin";type_=String(* "anonymous" | "use-credentials" | "" *)};Attribute{name="decoding";jsxName="decoding";type_=Polyvariant[{type_="async";jsxName="async"};{type_="auto";jsxName="auto"};{type_="sync";jsxName="sync"}]};Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="loading";jsxName="loading";type_=loading};Attribute{name="referrerpolicy";jsxName="referrerpolicy";type_=referrerPolicy};Attribute{name="fetchpriority";jsxName="fetchpriority";type_=fetchpriority};Attribute{name="ismap";jsxName="ismap";type_=Bool};Attribute{name="sizes";jsxName="sizes";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="srcset";jsxName="srcset";type_=String};Attribute{name="usemap";jsxName="usemap";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins *)letinsHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};Attribute{name="datetime";jsxName="datetime";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input *)letinputHTMLAttributes=[Attribute{name="accept";jsxName="accept";type_=String};Attribute{name="alt";jsxName="alt";type_=String};Attribute{name="autocomplete";jsxName="autocomplete";type_=String};Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="capture";jsxName="capture";type_=String(* Bool | *)(* https://www.w3.org/TR/html-media-capture/ *)};Attribute{name="checked";jsxName="checked";type_=Bool};Attribute{name="crossorigin";jsxName="crossorigin";type_=String};Attribute{name="dirname";jsxName="dirname";type_=String};Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="formaction";jsxName="formaction";type_=String};Attribute{name="formenctype";jsxName="formenctype";type_=String};Attribute{name="formmethod";jsxName="formmethod";type_=String};Attribute{name="formnovalidate";jsxName="formnovalidate";type_=Bool};Attribute{name="formtarget";jsxName="formtarget";type_=String};Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="list";jsxName="list";type_=String};Attribute{name="max";jsxName="max";type_=String(* number | *)};Attribute{name="maxlength";jsxName="maxlength";type_=Int(* number *)};Attribute{name="min";jsxName="min";type_=String(* number | *)};Attribute{name="minlength";jsxName="minlength";type_=Int(* number *)};Attribute{name="multiple";jsxName="multiple";type_=Bool};Attribute{name="name";jsxName="name";type_=String};Attribute{name="pattern";jsxName="pattern";type_=String};Attribute{name="placeholder";jsxName="placeholder";type_=String};Attribute{name="popovertarget";jsxName="popovertarget";type_=String};Attribute{name="popovertargetaction";jsxName="popovertargetaction";type_=popovertargetaction};Attribute{name="readonly";jsxName="readonly";type_=Bool};Attribute{name="required";jsxName="required";type_=Bool};Attribute{name="size";jsxName="size";type_=Int(* number *)};Attribute{name="src";jsxName="src";type_=String};Attribute{name="step";jsxName="step";type_=String(* number | *)};Attribute{name="type";jsxName="type_";type_=inputType};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};Attribute{name="width";jsxName="width";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen *)letkeygenHTMLAttributes=[Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="challenge";jsxName="challenge";type_=String};Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="keyType";jsxName="keyType";type_=String};Attribute{name="keyParams";jsxName="keyParams";type_=String};Attribute{name="name";jsxName="name";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label *)letlabelHTMLAttributes=[Attribute{name="form";jsxName="form";type_=String};Attribute{name="for";jsxName="for_";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li *)letliHTMLAttributes=[Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link *)letlinkHTMLAttributes=[Attribute{name="as";jsxName="as_";type_=String};Attribute{name="crossorigin";jsxName="crossorigin";type_=String};Attribute{name="href";jsxName="href";type_=String};Attribute{name="hreflang";jsxName="hreflang";type_=String};Attribute{name="integrity";jsxName="integrity";type_=String};Attribute{name="imagesrcset";jsxName="imagesrcset";type_=String};Attribute{name="media";jsxName="media";type_=String};Attribute{name="rel";jsxName="rel";type_=String};Attribute{name="sizes";jsxName="sizes";type_=String};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="charset";jsxName="charset";type_=String};Attribute{name="fetchpriority";jsxName="fetchpriority";type_=fetchpriority};Attribute{name="blocking";jsxName="blocking";type_=blocking};Attribute{name="disabled";jsxName="disabled";type_=Bool};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map *)letmapHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu *)letmenuHTMLAttributes=[Attribute{name="type";jsxName="type_";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video *)(* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio *)letmediaHTMLAttributes=[Attribute{name="autoplay";jsxName="autoplay";type_=Bool};Attribute{name="controls";jsxName="controls";type_=Bool};(* Attribute { name = "controlsList"; jsxName = "controlsList"; type_ = String }; *)Attribute{name="crossorigin";jsxName="crossorigin";type_=String};Attribute{name="loop";jsxName="loop";type_=Bool};(* deprecated *)(* Attribute { name = "mediaGroup"; jsxName = "mediaGroup"; type_ = String }; *)Attribute{name="muted";jsxName="muted";type_=Bool};Attribute{name="playsinline";jsxName="playsinline";type_=Bool};Attribute{name="preload";jsxName="preload";type_=Polyvariant[{type_="none";jsxName="none"};{type_="metadata";jsxName="metadata"};{type_="auto";jsxName="auto"}]};Attribute{name="src";jsxName="src";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta *)letmetaHTMLAttributes=[Attribute{name="charset";jsxName="charset";type_=String};Attribute{name="content";jsxName="content";type_=String};Attribute{name="http-equiv";jsxName="httpEquiv";type_=String};Attribute{name="name";jsxName="name";type_=String};Attribute{name="media";jsxName="media";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter *)letmeterHTMLAttributes=[Attribute{name="form";jsxName="form";type_=String};Attribute{name="high";jsxName="high";type_=Int(* number *)};Attribute{name="low";jsxName="low";type_=Int(* number *)};Attribute{name="max";jsxName="max";type_=String(* number | *)};Attribute{name="min";jsxName="min";type_=String(* number | *)};Attribute{name="optimum";jsxName="optimum";type_=Int(* number *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q *)letquoteHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object *)letobjectHTMLAttributes=[Attribute{name="classid";jsxName="classid";type_=String};Attribute{name="data";jsxName="data";type_=String};Attribute{name="form";jsxName="form";type_=String};Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="name";jsxName="name";type_=String};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="usemap";jsxName="usemap";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};Attribute{name="wmode";jsxName="wmode";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol *)letolHTMLAttributes=[Attribute{name="reversed";jsxName="reversed";type_=Bool};Attribute{name="start";jsxName="start";type_=Int(* number *)};Attribute{name="type";jsxName="type_";type_=String(* '1' | 'a' | 'A' | 'i' | 'I' *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup *)letoptgroupHTMLAttributes=[Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="label";jsxName="label";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option *)letoptionHTMLAttributes=[Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="label";jsxName="label";type_=String};Attribute{name="selected";jsxName="selected";type_=Bool};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output *)letoutputHTMLAttributes=[Attribute{name="form";jsxName="form";type_=String};Attribute{name="for";jsxName="for_";type_=String};Attribute{name="name";jsxName="name";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param *)letparamHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress *)letprogressHTMLAttributes=[Attribute{name="max";jsxName="max";type_=String(* number | *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot *)letslotHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script *)letscriptHTMLAttributes=[(* deprecated *)Attribute{name="async";jsxName="async";type_=Bool};(* deprecated *)Attribute{name="charset";jsxName="charset";type_=String};(* deprecated *)Attribute{name="language";jsxName="charset";type_=String};Attribute{name="crossorigin";jsxName="crossorigin";type_=String};Attribute{name="defer";jsxName="defer";type_=Bool};Attribute{name="integrity";jsxName="integrity";type_=String};Attribute{name="nomodule";jsxName="nomodule";type_=Bool};Attribute{name="nonce";jsxName="nonce";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="referrerpolicy";jsxName="referrerpolicy";type_=referrerPolicy};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="blocking";jsxName="blocking";type_=blocking};Attribute{name="fetchpriority";jsxName="fetchpriority";type_=fetchpriority};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select *)letselectHTMLAttributes=[Attribute{name="autocomplete";jsxName="autocomplete";type_=String};Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="multiple";jsxName="multiple";type_=Bool};Attribute{name="name";jsxName="name";type_=String};Attribute{name="required";jsxName="required";type_=Bool};Attribute{name="size";jsxName="size";type_=Int(* number *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};Event{jsxName="onchange";type_=Form};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source *)letsourceHTMLAttributes=[Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="media";jsxName="media";type_=String};Attribute{name="sizes";jsxName="sizes";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="srcset";jsxName="srcset";type_=String};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style *)letstyleHTMLAttributes=[Attribute{name="media";jsxName="media";type_=String};Attribute{name="nonce";jsxName="nonce";type_=String};Attribute{name="scoped";jsxName="scoped";type_=Bool};Attribute{name="type";jsxName="type_";type_=String}](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table *)lettableHTMLAttributes=[Attribute{name="cellpadding";jsxName="cellpadding";type_=String(* number | *)};Attribute{name="cellspacing";jsxName="cellspacing";type_=String(* number | *)};Attribute{name="summary";jsxName="summary";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea *)lettextareaHTMLAttributes=[Attribute{name="autocomplete";jsxName="autocomplete";type_=String};Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="cols";jsxName="cols";type_=Int(* number *)};Attribute{name="dirname";jsxName="dirname";type_=String};Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="maxlength";jsxName="maxlength";type_=Int(* number *)};Attribute{name="minlength";jsxName="minlength";type_=Int(* number *)};Attribute{name="name";jsxName="name";type_=String};Attribute{name="placeholder";jsxName="placeholder";type_=String};Attribute{name="readonly";jsxName="readonly";type_=Bool};Attribute{name="required";jsxName="required";type_=Bool};Attribute{name="rows";jsxName="rows";type_=Int(* number *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};Attribute{name="wrap";jsxName="wrap";type_=Polyvariant[{type_="hard";jsxName="hard"};{type_="soft";jsxName="soft"}]};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td *)lettdHTMLAttributes=[Attribute{name="align";jsxName="align";type_=align};Attribute{name="colspan";jsxName="colspan";type_=Int(* number *)};Attribute{name="headers";jsxName="headers";type_=String};Attribute{name="rowspan";jsxName="rowspan";type_=Int(* number *)};Attribute{name="scope";jsxName="scope";type_=scope};Attribute{name="abbr";jsxName="abbr";type_=String};Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="width";jsxName="width";type_=String(* number | *)};Attribute{name="valign";jsxName="valign";type_=Polyvariant[{type_="top";jsxName="top"};{type_="middle";jsxName="middle"};{type_="bottom";jsxName="bottom"};{type_="baseline";jsxName="baseline"}]};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th *)letthHTMLAttributes=[Attribute{name="align";jsxName="align";type_=align};Attribute{name="colspan";jsxName="colspan";type_=Int(* number *)};Attribute{name="headers";jsxName="headers";type_=String};Attribute{name="rowspan";jsxName="rowspan";type_=Int(* number *)};Attribute{name="scope";jsxName="scope";type_=scope};Attribute{name="abbr";jsxName="abbr";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time *)lettimeHTMLAttributes=[Attribute{name="datetime";jsxName="datetime";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track *)lettrackHTMLAttributes=[Attribute{name="default";jsxName="default";type_=Bool};Attribute{name="kind";jsxName="kind";type_=Polyvariant[{type_="subtitles";jsxName="subtitles"};{type_="captions";jsxName="captions"};{type_="descriptions";jsxName="descriptions"};{type_="chapters";jsxName="chapters"};{type_="metadata";jsxName="metadata"}]};Attribute{name="label";jsxName="label";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="srclang";jsxName="srclang";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video *)letvideoHTMLAttributes=[Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="playsinline";jsxName="playsinline";type_=Bool};Attribute{name="poster";jsxName="poster";type_=String};Attribute{name="width";jsxName="width";type_=String(* number | *)};Attribute{name="disablepictureinpicture";jsxName="disablepictureinpicture";type_=Bool};]moduleSVG=struct(* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute *)(* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core *)letcoreAttributes=[Attribute{name="id";jsxName="id";type_=String};Attribute{name="lang";jsxName="lang";type_=String};Attribute{name="tabindex";jsxName="tabindex";type_=String};Attribute{name="xmlBase";jsxName="xmlBase";type_=String};Attribute{name="xmlLang";jsxName="xmlLang";type_=String};Attribute{name="xmlSpace";jsxName="xmlSpace";type_=String};](* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Styling *)letstylingAttributes=[Attribute{name="class";jsxName="class_";type_=String};Attribute{name="style";jsxName="style";type_=String}](* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation *)letpresentationAttributes=[Attribute{name="clip";jsxName="clip";type_=String(* number | *)};Attribute{name="clipPath";jsxName="clipPath";type_=String};Attribute{name="cursor";jsxName="cursor";type_=String(* number | *)};Attribute{name="fill";jsxName="fill";type_=String};Attribute{name="filter";jsxName="filter";type_=String};Attribute{name="fontFamily";jsxName="fontFamily";type_=String};Attribute{name="letterSpacing";jsxName="letterSpacing";type_=String};Attribute{name="lightingColor";jsxName="lightingColor";type_=String};Attribute{name="markerEnd";jsxName="markerEnd";type_=String};Attribute{name="mask";jsxName="mask";type_=String};Attribute{name="pointerEvents";jsxName="pointerEvents";type_=String};Attribute{name="stopColor";jsxName="stopColor";type_=String};Attribute{name="stroke";jsxName="stroke";type_=String};Attribute{name="textAnchor";jsxName="textAnchor";type_=String};Attribute{name="transform";jsxName="transform";type_=String};Attribute{name="transformOrigin";jsxName="transformOrigin";type_=String};Attribute{name="alignmentBaseline";jsxName="alignmentBaseline";type_=Polyvariant[{type_="auto";jsxName="auto"};{type_="baseline";jsxName="baseline"};{type_="before_edge";jsxName="before-edge"};{type_="text_before_edge";jsxName="text-before-edge"};{type_="middle";jsxName="middle"};{type_="central";jsxName="central"};{type_="after_edge";jsxName="after-edge"};{type_="text_after_edge";jsxName="text-after-edge"};{type_="ideographic";jsxName="ideographic"};{type_="alphabetic";jsxName="alphabetic"};{type_="hanging";jsxName="hanging"};{type_="mathematical";jsxName="mathematical"};{type_="inherit_";jsxName="inherit"}]};Attribute{name="clip-rule";jsxName="clipRule";type_=Polyvariant[{type_="nonzero";jsxName="nonzero"};{type_="evenodd";jsxName="evenodd"};{type_="inherit_";jsxName="inherit"}]};Attribute{name="colorProfile";jsxName="colorProfile";type_=String(* number | *)};Attribute{name="direction";jsxName="direction";type_=String(* number | *)};Attribute{name="display";jsxName="display";type_=String(* number | *)};Attribute{name="divisor";jsxName="divisor";type_=String(* number | *)};Attribute{name="fillOpacity";jsxName="fillOpacity";type_=String(* number | *)};Attribute{name="fill-rule";jsxName="fillRule";type_=Polyvariant[{type_="nonzero";jsxName="nonzero"};{type_="evenodd";jsxName="evenodd"};{type_="inherit_";jsxName="inherit"}]};Attribute{name="floodColor";jsxName="floodColor";type_=String(* number | *)};Attribute{name="floodOpacity";jsxName="floodOpacity";type_=String(* number | *)};Attribute{name="fontSize";jsxName="fontSize";type_=String(* number | *)};Attribute{name="fontStretch";jsxName="fontStretch";type_=String(* number | *)};Attribute{name="fontStyle";jsxName="fontStyle";type_=String(* number | *)};Attribute{name="fontVariant";jsxName="fontVariant";type_=String(* number | *)};Attribute{name="fontWeight";jsxName="fontWeight";type_=String(* number | *)};Attribute{name="glyphOrientationHorizontal";jsxName="glyphOrientationHorizontal";type_=String(* number | *)};Attribute{name="glyphOrientationVertical";jsxName="glyphOrientationVertical";type_=String(* number | *)};Attribute{name="kerning";jsxName="kerning";type_=String(* number | *)};Attribute{name="keyPoints";jsxName="keyPoints";type_=String(* number | *)};Attribute{name="opacity";jsxName="opacity";type_=String(* number | *)};Attribute{name="operator";jsxName="operator";type_=String(* number | *)};Attribute{name="overflow";jsxName="overflow";type_=String(* number | *)};Attribute{name="stop-opacity";jsxName="stopOpacity";type_=String(* number | *)};Attribute{name="stroke-linecap";jsxName="strokeLinecap";type_=Polyvariant[{type_="butt";jsxName="butt"};{type_="round";jsxName="round"};{type_="square";jsxName="square"};{type_="inherit_";jsxName="inherit"}]};Attribute{name="stroke-linejoin";jsxName="strokeLinejoin";type_=Polyvariant[{type_="arcs";jsxName="arcs"};{type_="bevel";jsxName="bevel"};{type_="miter";jsxName="miter"};{type_="miter_clip";jsxName="miter-clip"};{type_="round";jsxName="round"}]};Attribute{name="unicodeBidi";jsxName="unicodeBidi";type_=String(* number | *)};Attribute{name="vectorEffect";jsxName="vectorEffect";type_=String(* number | *)};Attribute{name="wordSpacing";jsxName="wordSpacing";type_=String(* number | *)};Attribute{name="writingMode";jsxName="writingMode";type_=String(* number | *)};](* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute#filters_attributes *)letfiltersAttributes=[(* Filter primitive attributes *)Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="width";jsxName="width";type_=String(* number | *)};Attribute{name="result";jsxName="result";type_=String};Attribute{name="x";jsxName="x";type_=String(* number | *)};Attribute{name="y";jsxName="y";type_=String(* number | *)};(* Transfer function attributes type, tableValues, slope, intercept,
amplitude, exponent, offset *)Attribute{name="type";jsxName="type_";type_=String};Attribute{name="exponent";jsxName="exponent";type_=String(* number | *)};Attribute{name="slope";jsxName="slope";type_=String(* number | *)};Attribute{name="amplitude";jsxName="amplitude";type_=String(* number | *)};Attribute{name="intercept";jsxName="intercept";type_=String(* number | *)};Attribute{name="tableValues";jsxName="tableValues";type_=String(* number | *)};(* Animation target element attributes *)Attribute{name="href";jsxName="href";type_=String};(* Animation attribute target attributes*)Attribute{name="attributeName";jsxName="attributeName";type_=String};Attribute{name="attributeType";jsxName="attributeType";type_=String};(* Animation timing attributes begin, dur, end, min, max, restart,
repeatCount, repeatDur, fill *)Attribute{name="begin";jsxName="begin";type_=String(* number | *)};Attribute{name="dur";jsxName="dur";type_=String(* number | *)};Attribute{name="end";jsxName="end";type_=String(* number | *)};Attribute{name="max";jsxName="max";type_=String(* number | *)};Attribute{name="min";jsxName="min";type_=String(* number | *)};Attribute{name="repeatCount";jsxName="repeatCount";type_=String(* number | *)};Attribute{name="restart";jsxName="restart";type_=String(* number | *)};Attribute{name="repeatDur";jsxName="repeatDur";type_=String(* number | *)};Attribute{name="fill";jsxName="fill";type_=String};(* Animation value attributes *)Attribute{name="calcMode";jsxName="calcMode";type_=String(* number | *)};Attribute{name="values";jsxName="values";type_=String};Attribute{name="keySplines";jsxName="keySplines";type_=String(* number | *)};Attribute{name="keyTimes";jsxName="keyTimes";type_=String(* number | *)};Attribute{name="from";jsxName="from";type_=String(* number | *)};Attribute{name="to";jsxName="to";type_=String(* number | *)};Attribute{name="by";jsxName="by";type_=String(* number | *)};(* Animation addition attributes *)Attribute{name="accumulate";jsxName="accumulate";type_=Polyvariant[{type_="none";jsxName="none"};{type_="sum";jsxName="sum"}]};Attribute{name="additive";jsxName="additive";type_=Polyvariant[{type_="replace";jsxName="replace"};{type_="sum";jsxName="sum"}]};](* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute *)lethtmlAttributes=[Attribute{name="color";jsxName="color";type_=String};Attribute{name="id";jsxName="id";type_=String};Attribute{name="lang";jsxName="lang";type_=String};Attribute{name="media";jsxName="media";type_=String};Attribute{name="method";jsxName="method_";type_=String};Attribute{name="name";jsxName="name";type_=String};Attribute{name="style";jsxName="style";type_=String};Attribute{name="target";jsxName="target";type_=String};(* Other HTML properties supported by SVG elements in browsers *)Attribute{name="role";jsxName="role";type_=ariaRole};Attribute{name="tabindex";jsxName="tabindex";type_=Int(* number *)};Attribute{name="crossorigin";jsxName="crossorigin";type_=String(* "anonymous" | "use-credentials" | "" *)};(* SVG Specific attributes *)Attribute{name="accentHeight";jsxName="accentHeight";type_=String(* number | *)};Attribute{name="allowReorder";jsxName="allowReorder";type_=Polyvariant[{type_="no";jsxName="no"};{type_="yes";jsxName="yes"}]};Attribute{name="alphabetic";jsxName="alphabetic";type_=String(* number | *)};Attribute{name="arabicForm";jsxName="arabicForm";type_=Polyvariant[{type_="initial";jsxName="initial"};{type_="medial";jsxName="medial"};{type_="terminal";jsxName="terminal"};{type_="isolated";jsxName="isolated"}]};Attribute{name="ascent";jsxName="ascent";type_=String(* number | *)};Attribute{name="autoReverse";jsxName="autoReverse";type_=BooleanishString};Attribute{name="azimuth";jsxName="azimuth";type_=String(* number | *)};Attribute{name="baseProfile";jsxName="baseProfile";type_=String(* number | *)};Attribute{name="bbox";jsxName="bbox";type_=String(* number | *)};Attribute{name="bias";jsxName="bias";type_=String(* number | *)};Attribute{name="cap-height";jsxName="capHeight";type_=String(* number | *)};Attribute{name="cx";jsxName="cx";type_=String(* number | *)};Attribute{name="cy";jsxName="cy";type_=String(* number | *)};Attribute{name="d";jsxName="d";type_=String};Attribute{name="decelerate";jsxName="decelerate";type_=String(* number | *)};Attribute{name="descent";jsxName="descent";type_=String(* number | *)};Attribute{name="dx";jsxName="dx";type_=String(* number | *)};Attribute{name="dy";jsxName="dy";type_=String(* number | *)};Attribute{name="edgeMode";jsxName="edgeMode";type_=String(* number | *)};Attribute{name="elevation";jsxName="elevation";type_=String(* number | *)};Attribute{name="externalResourcesRequired";jsxName="externalResourcesRequired";type_=BooleanishString};Attribute{name="filterRes";jsxName="filterRes";type_=String(* number | *)};Attribute{name="filterUnits";jsxName="filterUnits";type_=String(* number | *)};Attribute{name="format";jsxName="format";type_=String(* number | *)};Attribute{name="fr";jsxName="fr";type_=String(* number | *)};Attribute{name="fx";jsxName="fx";type_=String(* number | *)};Attribute{name="fy";jsxName="fy";type_=String(* number | *)};Attribute{name="g1";jsxName="g1";type_=String(* number | *)};Attribute{name="g2";jsxName="g2";type_=String(* number | *)};Attribute{name="glyphName";jsxName="glyphName";type_=String(* number | *)};Attribute{name="glyphRef";jsxName="glyphRef";type_=String(* number | *)};Attribute{name="gradientTransform";jsxName="gradientTransform";type_=String};Attribute{name="gradientUnits";jsxName="gradientUnits";type_=String};Attribute{name="hanging";jsxName="hanging";type_=String(* number | *)};Attribute{name="horizAdvX";jsxName="horizAdvX";type_=String(* number | *)};Attribute{name="horizOriginX";jsxName="horizOriginX";type_=String(* number | *)};Attribute{name="ideographic";jsxName="ideographic";type_=String(* number | *)};Attribute{name="in2";jsxName="in2";type_=String(* number | *)};Attribute{name="in";jsxName="in";type_=String};Attribute{name="k1";jsxName="k1";type_=String(* number | *)};Attribute{name="k2";jsxName="k2";type_=String(* number | *)};Attribute{name="k3";jsxName="k3";type_=String(* number | *)};Attribute{name="k4";jsxName="k4";type_=String(* number | *)};Attribute{name="k";jsxName="k";type_=String(* number | *)};Attribute{name="kernelMatrix";jsxName="kernelMatrix";type_=String(* number | *)};Attribute{name="limitingConeAngle";jsxName="limitingConeAngle";type_=String};Attribute{name="lengthAdjust";jsxName="lengthAdjust";type_=String(* number | *)};Attribute{name="local";jsxName="local";type_=String(* number | *)};Attribute{name="markerHeight";jsxName="markerHeight";type_=String(* number | *)};Attribute{name="markerMid";jsxName="markerMid";type_=String};Attribute{name="markerStart";jsxName="markerStart";type_=String};Attribute{name="markerUnits";jsxName="markerUnits";type_=String(* number | *)};Attribute{name="markerWidth";jsxName="markerWidth";type_=String(* number | *)};Attribute{name="maskUnits";jsxName="maskUnits";type_=String(* number | *)};Attribute{name="mathematical";jsxName="mathematical";type_=String(* number | *)};Attribute{name="mode";jsxName="mode";type_=String(* number | *)};Attribute{name="numOctaves";jsxName="numOctaves";type_=String(* number | *)};Attribute{name="offset";jsxName="offset";type_=String(* number | *)};Attribute{name="order";jsxName="order";type_=String(* number | *)};Attribute{name="orient";jsxName="orient";type_=String(* number | *)};Attribute{name="orientation";jsxName="orientation";type_=String(* number | *)};Attribute{name="origin";jsxName="origin";type_=String(* number | *)};Attribute{name="overline-thickness";jsxName="overlineThickness";type_=Int};Attribute{name="paintOrder";jsxName="paintOrder";type_=String(* number | *)};Attribute{name="panose1";jsxName="panose1";type_=String(* number | *)};Attribute{name="path";jsxName="path";type_=String};Attribute{name="pathLength";jsxName="pathLength";type_=String(* number | *)};Attribute{name="patternContentUnits";jsxName="patternContentUnits";type_=String};Attribute{name="patternUnits";jsxName="patternUnits";type_=String};Attribute{name="points";jsxName="points";type_=String};Attribute{name="pointsAtX";jsxName="pointsAtX";type_=String(* number | *)};Attribute{name="pointsAtY";jsxName="pointsAtY";type_=String(* number | *)};Attribute{name="pointsAtZ";jsxName="pointsAtZ";type_=String(* number | *)};Attribute{name="preserveAspectRatio";jsxName="preserveAspectRatio";type_=String};Attribute{name="r";jsxName="r";type_=String(* number | *)};Attribute{name="radius";jsxName="radius";type_=String(* number | *)};Attribute{name="refX";jsxName="refX";type_=String(* number | *)};Attribute{name="refY";jsxName="refY";type_=String(* number | *)};Attribute{name="rotate";jsxName="rotate";type_=String(* number | *)};Attribute{name="rx";jsxName="rx";type_=String(* number | *)};Attribute{name="ry";jsxName="ry";type_=String(* number | *)};Attribute{name="scale";jsxName="scale";type_=String(* number | *)};Attribute{name="seed";jsxName="seed";type_=String(* number | *)};Attribute{name="spacing";jsxName="spacing";type_=String(* number | *)};Attribute{name="speed";jsxName="speed";type_=String(* number | *)};Attribute{name="spreadMethod";jsxName="spreadMethod";type_=String};Attribute{name="startOffset";jsxName="startOffset";type_=String(* number | *)};Attribute{name="stdDeviation";jsxName="stdDeviation";type_=String(* number | *)};Attribute{name="stemh";jsxName="stemh";type_=String(* number | *)};Attribute{name="stemv";jsxName="stemv";type_=String(* number | *)};Attribute{name="stitchTiles";jsxName="stitchTiles";type_=String(* number | *)};Attribute{name="strikethrough-position";jsxName="strikethroughPosition";type_=String(* number | *)};Attribute{name="strikethrough-thickness";jsxName="strikethroughThickness";type_=String(* number | *)};Attribute{name="stroke-width";jsxName="strokeWidth";type_=String(* number | *)};Attribute{name="surfaceScale";jsxName="surfaceScale";type_=String(* number | *)};Attribute{name="targetX";jsxName="targetX";type_=String(* number | *)};Attribute{name="targetY";jsxName="targetY";type_=String(* number | *)};Attribute{name="textLength";jsxName="textLength";type_=String(* number | *)};Attribute{name="u1";jsxName="u1";type_=String(* number | *)};Attribute{name="u2";jsxName="u2";type_=String(* number | *)};Attribute{name="unicode";jsxName="unicode";type_=String(* number | *)};Attribute{name="unicodeRange";jsxName="unicodeRange";type_=String(* number | *)};Attribute{name="unitsPerEm";jsxName="unitsPerEm";type_=String(* number | *)};Attribute{name="vAlphabetic";jsxName="vAlphabetic";type_=String(* number | *)};Attribute{name="version";jsxName="version";type_=String};Attribute{name="vertAdvY";jsxName="vertAdvY";type_=String(* number | *)};Attribute{name="vertOriginX";jsxName="vertOriginX";type_=String(* number | *)};Attribute{name="vertOriginY";jsxName="vertOriginY";type_=String(* number | *)};Attribute{name="vHanging";jsxName="vHanging";type_=String(* number | *)};Attribute{name="vIdeographic";jsxName="vIdeographic";type_=String(* number | *)};Attribute{name="viewBox";jsxName="viewBox";type_=String};Attribute{name="viewTarget";jsxName="viewTarget";type_=String(* number | *)};Attribute{name="visibility";jsxName="visibility";type_=String(* number | *)};Attribute{name="widths";jsxName="widths";type_=String(* number | *)};Attribute{name="x1";jsxName="x1";type_=String(* number | *)};Attribute{name="x2";jsxName="x2";type_=String(* number | *)};Attribute{name="xChannelSelector";jsxName="xChannelSelector";type_=String};Attribute{name="xHeight";jsxName="xHeight";type_=String(* number | *)};Attribute{name="xlinkActuate";jsxName="xlinkActuate";type_=String};Attribute{name="xlinkArcrole";jsxName="xlinkArcrole";type_=String};Attribute{name="xlinkHref";jsxName="xlinkHref";type_=String};Attribute{name="xlinkRole";jsxName="xlinkRole";type_=String};Attribute{name="xlinkShow";jsxName="xlinkShow";type_=String};Attribute{name="xlinkTitle";jsxName="xlinkTitle";type_=String};Attribute{name="xlinkType";jsxName="xlinkType";type_=String};Attribute{name="xmlBase";jsxName="xmlBase";type_=String};Attribute{name="xmlLang";jsxName="xmlLang";type_=String};Attribute{name="xmlns";jsxName="xmlns";type_=String};Attribute{name="xmlnsXlink";jsxName="xmlnsXlink";type_=String};Attribute{name="xmlSpace";jsxName="xmlSpace";type_=String};Attribute{name="y1";jsxName="y1";type_=String(* number | *)};Attribute{name="y2";jsxName="y2";type_=String(* number | *)};Attribute{name="yChannelSelector";jsxName="yChannelSelector";type_=String};Attribute{name="z";jsxName="z";type_=String(* number | *)};Attribute{name="zoomAndPan";jsxName="zoomAndPan";type_=String};]letattributes=htmlAttributes@filtersAttributes@presentationAttributes@stylingAttributes@coreAttributesend(* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/webview *)letwebViewHTMLAttributes=[Attribute{name="allowfullscreen";jsxName="allowfullcreen";type_=Bool};Attribute{name="allowPopups";jsxName="allowPopups";type_=Bool};Attribute{name="autofocus";jsxName="autofocus";type_=Bool};Attribute{name="autoSize";jsxName="autoSize";type_=Bool};Attribute{name="blinkFeatures";jsxName="blinkFeatures";type_=String};Attribute{name="disableBlinkFeatures";jsxName="disableBlinkFeatures";type_=String};Attribute{name="disableGuestResize";jsxName="disableGuestResize";type_=Bool};Attribute{name="disableWebSecurity";jsxName="disableWebSecurity";type_=Bool};Attribute{name="guestInstance";jsxName="guestInstance";type_=String};Attribute{name="httpReferrer";jsxName="httpReferrer";type_=String};Attribute{name="nodeIntegration";jsxName="nodeIntegration";type_=Bool};Attribute{name="partition";jsxName="partition";type_=String};Attribute{name="plugins";jsxName="plugins";type_=Bool};Attribute{name="preload";jsxName="preload";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="userAgent";jsxName="userAgent";type_=String};Attribute{name="webPreferences";jsxName="webPreferences";type_=String};]letgetCommonHtmlAttributes()=elementAttributes@globalAttributes@globalEventHandlers@ariaAttributes@Extra_attributes.get_attributes()lethtmlElements()=[{tag="a";attributes=getCommonHtmlAttributes()@anchorHTMLAttributes};{tag="abbr";attributes=getCommonHtmlAttributes()};{tag="address";attributes=getCommonHtmlAttributes()};{tag="area";attributes=getCommonHtmlAttributes()@areaHTMLAttributes};{tag="article";attributes=getCommonHtmlAttributes()};{tag="aside";attributes=getCommonHtmlAttributes()};{tag="audio";attributes=getCommonHtmlAttributes()@mediaHTMLAttributes};{tag="b";attributes=getCommonHtmlAttributes()};{tag="base";attributes=getCommonHtmlAttributes()@baseHTMLAttributes};{tag="bdi";attributes=getCommonHtmlAttributes()};{tag="bdo";attributes=getCommonHtmlAttributes()};{tag="big";attributes=getCommonHtmlAttributes()};{tag="blockquote";attributes=getCommonHtmlAttributes()@blockquoteHTMLAttributes};{tag="body";attributes=getCommonHtmlAttributes()};{tag="br";attributes=getCommonHtmlAttributes()};{tag="button";attributes=getCommonHtmlAttributes()@buttonHTMLAttributes};{tag="canvas";attributes=getCommonHtmlAttributes()@canvasHTMLAttributes};{tag="caption";attributes=getCommonHtmlAttributes()};{tag="cite";attributes=getCommonHtmlAttributes()};{tag="code";attributes=getCommonHtmlAttributes()};{tag="col";attributes=getCommonHtmlAttributes()@colHTMLAttributes};{tag="colgroup";attributes=getCommonHtmlAttributes()@colgroupHTMLAttributes};{tag="data";attributes=getCommonHtmlAttributes()@dataHTMLAttributes};{tag="datalist";attributes=getCommonHtmlAttributes()};{tag="dd";attributes=getCommonHtmlAttributes()};{tag="del";attributes=getCommonHtmlAttributes()@delHTMLAttributes};{tag="details";attributes=getCommonHtmlAttributes()@detailsHTMLAttributes};{tag="dfn";attributes=getCommonHtmlAttributes()};{tag="dialog";attributes=getCommonHtmlAttributes()@dialogHTMLAttributes};{tag="div";attributes=getCommonHtmlAttributes()};{tag="dl";attributes=getCommonHtmlAttributes()};{tag="dt";attributes=getCommonHtmlAttributes()};{tag="em";attributes=getCommonHtmlAttributes()};{tag="embed";attributes=getCommonHtmlAttributes()@embedHTMLAttributes};{tag="fieldset";attributes=getCommonHtmlAttributes()@fieldsetHTMLAttributes};{tag="figcaption";attributes=getCommonHtmlAttributes()};{tag="figure";attributes=getCommonHtmlAttributes()};{tag="footer";attributes=getCommonHtmlAttributes()};{tag="form";attributes=getCommonHtmlAttributes()@formHTMLAttributes};{tag="h1";attributes=getCommonHtmlAttributes()};{tag="h2";attributes=getCommonHtmlAttributes()};{tag="h3";attributes=getCommonHtmlAttributes()};{tag="h4";attributes=getCommonHtmlAttributes()};{tag="h5";attributes=getCommonHtmlAttributes()};{tag="h6";attributes=getCommonHtmlAttributes()};{tag="head";attributes=getCommonHtmlAttributes()};{tag="header";attributes=getCommonHtmlAttributes()};{tag="hgroup";attributes=getCommonHtmlAttributes()};{tag="hr";attributes=getCommonHtmlAttributes()};{tag="html";attributes=getCommonHtmlAttributes()@htmlHTMLAttributes};{tag="i";attributes=getCommonHtmlAttributes()};{tag="iframe";attributes=getCommonHtmlAttributes()@iframeHTMLAttributes};{tag="img";attributes=getCommonHtmlAttributes()@imgHTMLAttributes};{tag="input";attributes=getCommonHtmlAttributes()@inputHTMLAttributes};{tag="ins";attributes=getCommonHtmlAttributes()@insHTMLAttributes};{tag="kbd";attributes=getCommonHtmlAttributes()};{tag="keygen";attributes=getCommonHtmlAttributes()@keygenHTMLAttributes};{tag="label";attributes=getCommonHtmlAttributes()@labelHTMLAttributes};{tag="legend";attributes=getCommonHtmlAttributes()};{tag="li";attributes=getCommonHtmlAttributes()@liHTMLAttributes};{tag="link";attributes=getCommonHtmlAttributes()@linkHTMLAttributes};{tag="main";attributes=getCommonHtmlAttributes()};{tag="map";attributes=getCommonHtmlAttributes()@mapHTMLAttributes};{tag="mark";attributes=getCommonHtmlAttributes()};{tag="menu";attributes=getCommonHtmlAttributes()@menuHTMLAttributes};{tag="menuitem";attributes=getCommonHtmlAttributes()};{tag="meta";attributes=getCommonHtmlAttributes()@metaHTMLAttributes};{tag="meter";attributes=getCommonHtmlAttributes()@meterHTMLAttributes};{tag="nav";attributes=getCommonHtmlAttributes()};{tag="noindex";attributes=getCommonHtmlAttributes()};{tag="noscript";attributes=getCommonHtmlAttributes()};{tag="object";attributes=getCommonHtmlAttributes()@objectHTMLAttributes};{tag="ol";attributes=getCommonHtmlAttributes()@olHTMLAttributes};{tag="optgroup";attributes=getCommonHtmlAttributes()@optgroupHTMLAttributes};{tag="option";attributes=getCommonHtmlAttributes()@optionHTMLAttributes};{tag="output";attributes=getCommonHtmlAttributes()@outputHTMLAttributes};{tag="p";attributes=getCommonHtmlAttributes()};{tag="param";attributes=getCommonHtmlAttributes()@paramHTMLAttributes};{tag="picture";attributes=getCommonHtmlAttributes()};{tag="pre";attributes=getCommonHtmlAttributes()};{tag="progress";attributes=getCommonHtmlAttributes()@progressHTMLAttributes};{tag="q";attributes=getCommonHtmlAttributes()@quoteHTMLAttributes};{tag="rp";attributes=getCommonHtmlAttributes()};{tag="rt";attributes=getCommonHtmlAttributes()};{tag="ruby";attributes=getCommonHtmlAttributes()};{tag="s";attributes=getCommonHtmlAttributes()};{tag="samp";attributes=getCommonHtmlAttributes()};{tag="script";attributes=getCommonHtmlAttributes()@scriptHTMLAttributes};{tag="section";attributes=getCommonHtmlAttributes()};{tag="select";attributes=getCommonHtmlAttributes()@selectHTMLAttributes};{tag="slot";attributes=getCommonHtmlAttributes()@slotHTMLAttributes};{tag="small";attributes=getCommonHtmlAttributes()};{tag="source";attributes=getCommonHtmlAttributes()@sourceHTMLAttributes};{tag="span";attributes=getCommonHtmlAttributes()};{tag="strong";attributes=getCommonHtmlAttributes()};{tag="style";attributes=getCommonHtmlAttributes()@styleHTMLAttributes};{tag="sub";attributes=getCommonHtmlAttributes()};{tag="summary";attributes=getCommonHtmlAttributes()};{tag="sup";attributes=getCommonHtmlAttributes()};{tag="table";attributes=getCommonHtmlAttributes()@tableHTMLAttributes};{tag="tbody";attributes=getCommonHtmlAttributes()};{tag="td";attributes=getCommonHtmlAttributes()@tdHTMLAttributes};{tag="template";attributes=getCommonHtmlAttributes()};{tag="textarea";attributes=getCommonHtmlAttributes()@textareaHTMLAttributes};{tag="tfoot";attributes=getCommonHtmlAttributes()};{tag="th";attributes=getCommonHtmlAttributes()@thHTMLAttributes};{tag="thead";attributes=getCommonHtmlAttributes()};{tag="time";attributes=getCommonHtmlAttributes()@timeHTMLAttributes};{tag="title";attributes=getCommonHtmlAttributes()};{tag="tr";attributes=getCommonHtmlAttributes()};{tag="track";attributes=getCommonHtmlAttributes()@trackHTMLAttributes};{tag="u";attributes=getCommonHtmlAttributes()};{tag="ul";attributes=getCommonHtmlAttributes()};{tag="var";attributes=getCommonHtmlAttributes()};{tag="video";attributes=getCommonHtmlAttributes()@videoHTMLAttributes};{tag="wbr";attributes=getCommonHtmlAttributes()};{tag="webview";attributes=getCommonHtmlAttributes()@webViewHTMLAttributes};]letcommonSvgAttributes()=SVG.attributes@globalEventHandlers@ariaAttributes@Extra_attributes.get_attributes()(* https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feConvolveMatrix *)letfeConvolveMatrixAttributes=[Attribute{name="preserveAlpha";jsxName="preserveAlpha";type_=BooleanishString}]letsvgElements=[{tag="svg";attributes=commonSvgAttributes()};{tag="animate";attributes=commonSvgAttributes()};{tag="animateMotion";attributes=commonSvgAttributes()};{tag="animateTransform";attributes=commonSvgAttributes()};{tag="circle";attributes=commonSvgAttributes()};{tag="clipPath";attributes=commonSvgAttributes()};{tag="defs";attributes=commonSvgAttributes()};{tag="desc";attributes=commonSvgAttributes()};{tag="ellipse";attributes=commonSvgAttributes()};{tag="feBlend";attributes=commonSvgAttributes()};{tag="feColorMatrix";attributes=commonSvgAttributes()};{tag="feComponentTransfer";attributes=commonSvgAttributes()};{tag="feComposite";attributes=commonSvgAttributes()};{tag="feConvolveMatrix";attributes=commonSvgAttributes()@feConvolveMatrixAttributes};{tag="feDiffuseLighting";attributes=commonSvgAttributes()};{tag="feDisplacementMap";attributes=commonSvgAttributes()};{tag="feDistantLight";attributes=commonSvgAttributes()};{tag="feDropShadow";attributes=commonSvgAttributes()};{tag="feFlood";attributes=commonSvgAttributes()};{tag="feFuncA";attributes=commonSvgAttributes()};{tag="feFuncB";attributes=commonSvgAttributes()};{tag="feFuncG";attributes=commonSvgAttributes()};{tag="feFuncR";attributes=commonSvgAttributes()};{tag="feGaussianBlur";attributes=commonSvgAttributes()};{tag="feImage";attributes=commonSvgAttributes()};{tag="feMerge";attributes=commonSvgAttributes()};{tag="feMergeNode";attributes=commonSvgAttributes()};{tag="feMorphology";attributes=commonSvgAttributes()};{tag="feOffset";attributes=commonSvgAttributes()};{tag="fePointLight";attributes=commonSvgAttributes()};{tag="feSpecularLighting";attributes=commonSvgAttributes()};{tag="feSpotLight";attributes=commonSvgAttributes()};{tag="feTile";attributes=commonSvgAttributes()};{tag="feTurbulence";attributes=commonSvgAttributes()};{tag="filter";attributes=commonSvgAttributes()};{tag="foreignObject";attributes=commonSvgAttributes()};{tag="g";attributes=commonSvgAttributes()};{tag="image";attributes=commonSvgAttributes()};{tag="line";attributes=commonSvgAttributes()};{tag="linearGradient";attributes=commonSvgAttributes()};{tag="marker";attributes=commonSvgAttributes()};{tag="mask";attributes=commonSvgAttributes()};{tag="metadata";attributes=commonSvgAttributes()};{tag="mpath";attributes=commonSvgAttributes()};{tag="path";attributes=commonSvgAttributes()};{tag="pattern";attributes=commonSvgAttributes()};{tag="polygon";attributes=commonSvgAttributes()};{tag="polyline";attributes=commonSvgAttributes()};{tag="radialGradient";attributes=commonSvgAttributes()};{tag="rect";attributes=commonSvgAttributes()};{tag="stop";attributes=commonSvgAttributes()};{tag="switch";attributes=commonSvgAttributes()};{tag="symbol";attributes=commonSvgAttributes()};{tag="text";attributes=commonSvgAttributes()};{tag="textPath";attributes=commonSvgAttributes()};{tag="tspan";attributes=commonSvgAttributes()};{tag="use";attributes=commonSvgAttributes()};{tag="view";attributes=commonSvgAttributes()};][@@@ocamlformat"enable"]letgetName=function|Rich_attribute{name;_}->name|Attribute{name;_}->name|Event{jsxName;_}->jsxNameletgetJSXName=function|Rich_attribute{jsxName;_}->jsxName|Attribute{jsxName;_}->jsxName|Event{jsxName;_}->jsxNametypeerrors=[`ElementNotFound|`AttributeNotFoundofstringoption](* Index of tag -> (element, jsxName -> prop), built lazily on first lookup.
It must be lazy (not computed at module init) because
[Extra_attributes.get_attributes] depends on driver flags such as [-htmx]
and [-react], which are parsed after this module is loaded but before any
rewriting happens.
The first occurrence wins for both tags and attribute names, matching the
[List.find_opt] semantics this index replaces. *)letelement_index=lazy(letelements=svgElements@htmlElements()inletindex=Hashtbl.create256inList.iter(funelement->ifnot(Hashtbl.memindexelement.tag)then(letattribute_index=Hashtbl.create512inList.iter(funprop->letjsxName=getJSXNamepropinifnot(Hashtbl.memattribute_indexjsxName)thenHashtbl.addattribute_indexjsxNameprop)element.attributes;Hashtbl.addindexelement.tag(element,attribute_index)))elements;index)letisDataAttribute=String.starts_with~prefix:"data"letstring_of_charschars=letbuf=Buffer.create16inList.iter(Buffer.add_charbuf)chars;Buffer.contentsbufletchars_of_stringstr=List.init(String.lengthstr)(String.getstr)letcamelcaseToKebabcasestr=letrecloopacc=function|[]->acc|[x]->x::acc|x::y::xs->ify='_'thenloop(x::acc)('-'::xs)elseify>='A'&&y<='Z'thenloop('-'::x::acc)(Char.lowercase_asciiy::xs)elseloop(x::acc)(y::xs)instr|>chars_of_string|>loop[]|>List.rev|>string_of_charsmoduleLevenshtein=struct(* Levenshtein distance from
https://rosettacode.org/wiki/Levenshtein_distance *)letminimumabc=mina(minbc)letdistancest=letfirst=String.lengthsandsecond=String.lengthtinletmatrix=Array.make_matrix(first+1)(second+1)0infori=0tofirstdomatrix.(i).(0)<-idone;forj=0toseconddomatrix.(0).(j)<-jdone;forj=1toseconddofori=1tofirstdoifs.[i-1]=t.[j-1]thenmatrix.(i).(j)<-matrix.(i-1).(j-1)elsematrix.(i).(j)<-minimum(matrix.(i-1).(j)+1)(matrix.(i).(j-1)+1)(matrix.(i-1).(j-1)+1)donedone;matrix.(first).(second)endtypeclosest={name:string;distance:int}letfind_closest_nameinvaliddomPropNames=letaccumulate_distancenamebestMatch=letdistance=Levenshtein.distanceinvalidnameinmatchdistance<bestMatch.distancewith|true->{name;distance}|false->bestMatchinlet{name;distance}=List.fold_rightaccumulate_distancedomPropNames{name="";distance=max_int}inifdistance>2thenNoneelseSomenameletfindByNametagjsxName=matchHashtbl.find_opt(Lazy.forceelement_index)tagwith|None->Error`ElementNotFound|Some(element,attribute_index)->(matchHashtbl.find_optattribute_indexjsxNamewith|Someprop->Okprop|None->(ifisDataAttributejsxNamethenletname=camelcaseToKebabcasejsxNameinOk(Attribute{name;jsxName;type_=String})else(* Error path only: linear scan for a suggestion is fine here *)letjsxNames=List.mapgetJSXNameelement.attributesinmatchfind_closest_namejsxNamejsxNameswith|Someclosest->Error(`AttributeNotFound(Someclosest))|None->Error(`AttributeNotFoundNone)))letis_html_elementtag=matchtagwith|"a"|"abbr"|"address"|"area"|"article"|"aside"|"audio"|"b"|"base"|"bdi"|"bdo"|"blockquote"|"body"|"br"|"button"|"canvas"|"caption"|"cite"|"code"|"col"|"colgroup"|"data"|"datalist"|"dd"|"del"|"details"|"dfn"|"dialog"|"div"|"dl"|"dt"|"em"|"embed"|"fieldset"|"figcaption"|"figure"|"footer"|"form"|"h1"|"h2"|"h3"|"h4"|"h5"|"h6"|"head"|"header"|"hgroup"|"hr"|"html"|"i"|"iframe"|"img"|"input"|"ins"|"kbd"|"label"|"legend"|"li"|"link"|"main"|"map"|"mark"|"math"|"menu"|"menuitem"|"meta"|"meter"|"nav"|"noscript"|"object"|"ol"|"optgroup"|"option"|"output"|"p"|"param"|"picture"|"pre"|"progress"|"q"|"rb"|"rp"|"rt"|"rtc"|"ruby"|"s"|"samp"|"script"|"search"|"section"|"select"|"slot"|"small"|"source"|"span"|"strong"|"style"|"sub"|"summary"|"sup"|"svg"|"table"|"tbody"|"td"|"template"|"textarea"|"tfoot"|"th"|"thead"|"time"|"title"|"tr"|"track"|"u"|"ul"|"var"|"video"|"wbr"->true|_->falseletis_svg_elementtag=matchtagwith|"animate"|"animateMotion"|"animateTransform"|"circle"|"clipPath"|"defs"|"desc"|"ellipse"|"feBlend"|"feColorMatrix"|"feComponentTransfer"|"feComposite"|"feConvolveMatrix"|"feDiffuseLighting"|"feDisplacementMap"|"feDistantLight"|"feDropShadow"|"feFlood"|"feFuncA"|"feFuncB"|"feFuncG"|"feFuncR"|"feGaussianBlur"|"feImage"|"feMerge"|"feMergeNode"|"feMorphology"|"feOffset"|"fePointLight"|"feSpecularLighting"|"feSpotLight"|"feTile"|"feTurbulence"|"filter"|"foreignObject"|"g"|"image"|"line"|"linearGradient"|"marker"|"mask"|"metadata"|"mpath"|"path"|"pattern"|"polygon"|"polyline"|"radialGradient"|"rect"|"stop"|"switch"|"symbol"|"text"|"textPath"|"tspan"|"use"|"view"->true|_->false