12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565(** List of HTML attributes that bring type-safety and validation based on their tag *)openPpx_attributes(* TODO:
- Add description + url in attributes
- Ensure html names are correct (take a look at server-reason-react-ppx and mdn)
*)[@@@ocamlformat"disable"](* This file is more like a spreadsheet, prefer to keep it with margin=300.
Since @@@ocamlformat "margin=300" isn't possible, we disable it entirely. *)letattributeReferrerPolicy=String(* | Empty | NoReferrer | NoReferrerWhenDowngrade | Origin |
OriginWhenCrossOrigin | SameOrigin | StrictOrigin |
StrictOriginWhenCrossOrigin | UnsafeUrl *)letattributeAnchorTarget=String(* | Self | Blank | Parent | Top | Custom of String *)letglobalEventHandlers=(* https://developer.mozilla.org/en-US/docs/Web/Events/Event_handlers *)[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="ondoubleclick";type_=Mouse};Event{jsxName="ondoubleclickcapture";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};](* All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ *)letariaAttributes=[Attribute{name="hx-boost";jsxName="hx_boost";type_=BooleanishString;(* description =
Some "add or remove progressive enhancement for links and forms"; *)(* url = Some "https://htmx.org/attributes/hx-boost" *)};(* Identifies the currently active element when DOM focus is on a composite
widget, textbox, group, or application. *)Attribute{name="aria-activedescendant";jsxName="ariaActivedescendant";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="ariaAtomic";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="ariaAutocomplete";type_=String(* 'none' | 'inline' | 'list' | 'both' *)};(* Indicates an element is being modified and that assistive technologies
MAY want to wait until the modifications are complete before exposing
them to the user. *)Attribute{name="aria-busy";jsxName="ariaBusy";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="ariaChecked";type_=String(* Bool | 'false' | 'mixed' | 'true' *)};(* Defines the total number of columns in a table, grid, or treegrid.
* @see aria-colindex.
*)Attribute{name="aria-colcount";jsxName="ariaColcount";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="ariaColindex";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="ariaColspan";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="ariaControls";type_=String};(* Indicates the element that represents the current item within a container
or set of related elements. *)Attribute{name="aria-current";jsxName="ariaCurrent";type_=String(* Bool | 'false' | 'true' | 'page' | 'step' | 'location' | 'date' | 'time' *)};(* Identifies the element (or elements) that describes the object.
* @see aria-labelledby
*)Attribute{name="aria-describedby";jsxName="ariaDescribedby";type_=String};(* Identifies the element that provides a detailed, extended description for
the object. * @see aria-describedby. *)Attribute{name="aria-details";jsxName="ariaDetails";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="ariaDisabled";type_=BooleanishString};(* Identifies the element that provides an error message for the object.
* @see aria-invalid @see aria-describedby.
*)Attribute{name="aria-errormessage";jsxName="ariaErrormessage";type_=String};(* Indicates whether the element, or another grouping element it controls,
is currently expanded or collapsed. *)Attribute{name="aria-expanded";jsxName="ariaExpanded";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="ariaFlowto";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="ariaHaspopup";type_=String(* Bool | 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'; *)};(* Indicates whether the element is exposed to an accessibility API.
* @see aria-disabled.
*)Attribute{name="aria-hidden";jsxName="ariaHidden";type_=BooleanishString};(* Indicates the entered value does not conform to the format expected by the
application.
* @see aria-errormessage.
*)Attribute{name="aria-invalid";jsxName="ariaInvalid";type_=String(* Bool | 'false' | 'true' | 'grammar' | 'spelling'; *)};(* Indicates keyboard shortcuts that an author has implemented to activate
or give focus to an element. *)Attribute{name="aria-keyshortcuts";jsxName="ariaKeyshortcuts";type_=String};(* Defines a String value that labels the current element.
* @see aria-labelledby.
*)Attribute{name="aria-label";jsxName="ariaLabel";type_=String};(* Identifies the element (or elements) that labels the current element.
* @see aria-describedby.
*)Attribute{name="aria-labelledby";jsxName="ariaLabelledby";type_=String};(* Defines the hierarchical level of an element within a structure. *)Attribute{name="aria-level";jsxName="ariaLevel";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="ariaLive";type_=String(* 'off' | 'assertive' | 'polite' *)};(* Indicates whether an element is modal when displayed. *)Attribute{name="aria-modal";jsxName="ariaModal";type_=BooleanishString};(* Indicates whether a text box accepts multiple lines of input or only a
single line. *)Attribute{name="aria-multiline";jsxName="ariaMultiline";type_=BooleanishString};(* Indicates that the user may select more than one item from the current
selectable descendants. *)Attribute{name="aria-multiselectable";jsxName="ariaMultiselectable";type_=BooleanishString};(* Indicates whether the element's orientation is horizontal, vertical, or
unknown/ambiguous. *)Attribute{name="aria-orientation";jsxName="ariaOrientation";type_=String(* 'horizontal' | 'vertical' *)};(* Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship
* between DOM elements where the DOM hierarchy cannot be used to represent the relationship.
* @see aria-controls.
*)Attribute{name="aria-owns";jsxName="ariaOwns";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="ariaPlaceholder";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="ariaPosinset";type_=Int};(* Indicates the current "pressed" state of toggle buttons.
* @see aria-checked @see aria-selected.
*)Attribute{name="aria-pressed";jsxName="ariaPressed";type_=String(* Bool | 'false' | 'mixed' | 'true' *)};(* Indicates that the element is not editable, but is otherwise
operable.
* @see aria-disabled.
*)Attribute{name="aria-readonly";jsxName="ariaReadonly";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="ariaRelevant";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="ariaRequired";type_=BooleanishString};(* Defines a human-readable, author-localized description for the role of an
element. *)Attribute{name="aria-roledescription";jsxName="ariaRoledescription";type_=String};(* Defines the total number of rows in a table, grid, or treegrid.
* @see aria-rowindex.
*)Attribute{name="aria-rowcount";jsxName="ariaRowcount";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="ariaRowindex";type_=Int};(* *)Attribute{name="aria-rowindextext";jsxName="ariaRowindextext";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="ariaRowspan";type_=Int};(* Indicates the current "selected" state of various widgets.
* @see aria-checked @see aria-pressed.
*)Attribute{name="aria-selected";jsxName="ariaSelected";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="ariaSetsize";type_=Int};(* Indicates if items in a table or grid are sorted in ascending or
descending order. *)Attribute{name="aria-sort";jsxName="ariaSort";type_=String(* 'none' | 'ascending' | 'descending' | 'other' *)};(* Defines the maximum allowed value for a range widget. *)Attribute{name="aria-valuemax";jsxName="ariaValuemax";type_=Int};(* Defines the minimum allowed value for a range widget. *)Attribute{name="aria-valuemin";jsxName="ariaValuemin";type_=Int};(* Defines the current value for a range widget.
* @see aria-valuetext.
*)Attribute{name="aria-valuenow";jsxName="ariaValuenow";type_=Int};(* Defines the human readable text alternative of aria-valuenow for a range
widget. *)Attribute{name="aria-valuetext";jsxName="ariaValuetext";type_=String};](* All the WAI-ARIA 1.1 role attribute values from
https://www.w3.org/TR/wai-aria-1.1/#role_definitions *)letariaRole=String(* | Alert | Alertdialog | Application | Article | Banner | Button | Cell |
Checkbox | Columnheader | Combobox | Complementary | Contentinfo | Definition
| Dialog | Directory | Document | Feed | Figure | Form | Grid | Gridcell |
Group | Heading | Img | Link | List | Listbox | Listitem | Log | Main |
Marquee | Math | Menu | Menubar | Menuitem | Menuitemcheckbox | Menuitemradio
| Navigation | None | Note | Option | Presentation | Progressbar | Radio |
Radiogroup | Region | Row | Rowgroup | Rowheader | Scrollbar | Search |
Searchbox | Separator | Slider | Spinbutton | Status | Switch | Tab | Table |
Tablist | Tabpanel | Term | Textbox | Timer | Toolbar | Tooltip | Tree |
Treegrid | Treeitem | Custom of String *)letglobalAttributes=[(* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes *)(* Standard HTML Attributes *)Attribute{name="accessKey";jsxName="accessKey";type_=String};Attribute{name="autoCapitalize";jsxName="autoCapitalize";type_=String};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_=String};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_=Style};Attribute{name="tabIndex";jsxName="tabIndex";type_=Int};Attribute{name="enterKeyHint";jsxName="enterKeyHint";type_=Int};(* 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_=String(* 'yes' | '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_=String(* 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search' *)};(* Specify that a standard HTML element should behave like a defined custom
built-in element * @see
https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is *)Attribute{name="is";jsxName="is";type_=String};]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};]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_=attributeAnchorTarget};Attribute{name="type";jsxName="type_";type_=String};Attribute{name="referrerPolicy";jsxName="referrerPolicy";type_=attributeReferrerPolicy};]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_=attributeReferrerPolicy};Attribute{name="rel";jsxName="rel";type_=String};Attribute{name="shape";jsxName="shape";type_=String};Attribute{name="target";jsxName="target";type_=String};]letbaseHTMLAttributes=[Attribute{name="href";jsxName="href";type_=String};Attribute{name="target";jsxName="target";type_=String};]letblockquoteHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};]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_=String(* 'submit' | 'reset' | 'button' *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};]letcanvasHTMLAttributes=[Attribute{name="height";jsxName="height";type_=String(* number | *)};Attribute{name="width";jsxName="width";type_=String(* number | *)}]letcolHTMLAttributes=[Attribute{name="span";jsxName="span";type_=Int(* number *)};Attribute{name="width";jsxName="width";type_=String(* number | *)}]letcolgroupHTMLAttributes=[Attribute{name="span";jsxName="span";type_=Int(* number *)}]letdataHTMLAttributes=[Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)}]letdetailsHTMLAttributes=[Attribute{name="open";jsxName="open";type_=Bool};Event{jsxName="ontoggle";type_=Media}]letdelHTMLAttributes=[Attribute{name="cite";type_=String;jsxName="cite"};Attribute{name="dateTime";type_=String;jsxName="dateTime"}]letdialogHTMLAttributes=[Attribute{name="open";jsxName="open";type_=Bool}]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"};]letfieldsetHTMLAttributes=[Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="form";jsxName="form";type_=String};Attribute{name="name";jsxName="name";type_=String};]letformHTMLAttributes=[Attribute{name="acceptCharset";jsxName="acceptCharset";type_=String};Attribute{name="action";jsxName="action";type_=String};Attribute{name="autoComplete";jsxName="autoComplete";type_=String};Attribute{name="encType";jsxName="encType";type_=String};Attribute{name="method";jsxName="method_";type_=String};Attribute{name="name";jsxName="name";type_=String};Attribute{name="noValidate";jsxName="noValidate";type_=Bool};Attribute{name="target";jsxName="target";type_=String};]lethtmlHTMLAttributes=[Attribute{name="manifest";jsxName="manifest";type_=String};]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 | *)};(* 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="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 | *)};]letimgHTMLAttributes=[Attribute{name="alt";jsxName="alt";type_=String};Attribute{name="crossOrigin";jsxName="crossOrigin";type_=String(* "anonymous" | "use-credentials" | "" *)};Attribute{name="decoding";jsxName="decoding";type_=String(* "async" | "auto" | "sync" *)};Attribute{name="height";jsxName="height";type_=String(* number | *)};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 | *)};]letinsHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};Attribute{name="dateTime";jsxName="datetime";type_=String};]letinputTypeAttribute=String(* | 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' |
'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' |
'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' |
'week' | (String @ {}); *)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="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="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_=inputTypeAttribute};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};Attribute{name="width";jsxName="width";type_=String(* number | *)};]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};]letlabelHTMLAttributes=[Attribute{name="form";jsxName="form";type_=String};Attribute{name="for";jsxName="htmlFor";type_=String};]letliHTMLAttributes=[Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)}]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};]letmapHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};]letmenuHTMLAttributes=[Attribute{name="type";jsxName="type_";type_=String};]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_=String};Attribute{name="src";jsxName="src";type_=String};]letmetaHTMLAttributes=[Attribute{name="charSet";jsxName="charSet";type_=String};Attribute{name="content";jsxName="content";type_=String};Attribute{name="httpEquiv";jsxName="httpEquiv";type_=String};Attribute{name="name";jsxName="name";type_=String};Attribute{name="media";jsxName="media";type_=String};]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 *)};]letquoteHTMLAttributes=[Attribute{name="cite";jsxName="cite";type_=String};]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};]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' *)};]letoptgroupHTMLAttributes=[Attribute{name="disabled";jsxName="disabled";type_=Bool};Attribute{name="label";jsxName="label";type_=String};]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 *)};]letoutputHTMLAttributes=[Attribute{name="form";jsxName="form";type_=String};Attribute{name="for";jsxName="htmlFor";type_=String};Attribute{name="name";jsxName="name";type_=String};]letparamHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};]letprogressHTMLAttributes=[Attribute{name="max";jsxName="max";type_=String(* number | *)};Attribute{name="value";jsxName="value";type_=String(* | ReadonlyArray<String> | number *)};]letslotHTMLAttributes=[Attribute{name="name";jsxName="name";type_=String};]letscriptHTMLAttributes=[(* deprecated *)Attribute{name="async";jsxName="async";type_=Bool};Attribute{name="charSet";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="type";jsxName="type_";type_=String};]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};]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 | *)};]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}]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 | *)};]lettextareaHTMLAttributes=[Attribute{name="autoComplete";jsxName="autoComplete";type_=String};Attribute{name="autoFocus";jsxName="autoFocus";type_=String};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_=String};Event{jsxName="onchange";type_=Form};]lettdHTMLAttributes=[Attribute{name="align";jsxName="align";type_=String(* type_= "left" | "center" | "right" | "justify" | "char" *)};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_=String};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_=String(* "top" | "middle" | "bottom" | "baseline" *)};]letthHTMLAttributes=[Attribute{name="align";jsxName="align";type_=String(* "left" | "center" | "right" | "justify" | "char" *)};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_=String};Attribute{name="abbr";jsxName="abbr";type_=String};]lettimeHTMLAttributes=[Attribute{name="dateTime";jsxName="datetime";type_=String};]lettrackHTMLAttributes=[Attribute{name="default";jsxName="default";type_=Bool};Attribute{name="kind";jsxName="kind";type_=String};Attribute{name="label";jsxName="label";type_=String};Attribute{name="src";jsxName="src";type_=String};Attribute{name="srcLang";jsxName="srclang";type_=String};]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/" *)letcoreAttributes=(* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core *)[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};]letstylingAttributes=(* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Styling *)[Attribute{name="class";jsxName="class_";type_=String};Attribute{name="style";jsxName="style";type_=Style}]letpresentationAttributes=(* Presentation attributes *)[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_=String(* "auto" | "baseline" | "before-edge" | "text-before-edge" | "middle" | "central" | "after-edge" "text-after-edge" | "ideographic" | "alphabetic" | "hanging" | "mathematical" | "inherit" *)};Attribute{name="clip-rule";jsxName="clipRule";type_=(* number | "linearRGB" | "inherit" *)String};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_=String(* type_= "nonzero" | "evenodd" | "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_=String(* type_= "butt" | "round" | "square" | "inherit" *)};Attribute{name="stroke-linejoin";jsxName="strokeLinejoin";type_=String(* type_= "arcs" | "bevel" | "miter" | "miter-clip" | "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 | *)};]letfiltersAttributes=(* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute#filters_attributes *)[(* 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_=String(* type_= "none" | "sum" *)};Attribute{name="additive";jsxName="additive";type_=String(* type_= "replace" | "sum" *)};]lethtmlAttributes=(* These are valid SVG attributes, that are HTML Attributes as well *)[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_=Style};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_=String(* type_= "no" | "yes" *)};Attribute{name="alphabetic";jsxName="alphabetic";type_=String(* number | *)};Attribute{name="arabicForm";jsxName="arabicForm";type_=String(* type_= "initial" | "medial" | "terminal" | "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@coreAttributesendletwebViewHTMLAttributes=[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};]letcommonHtmlAttributes=elementAttributes@globalAttributes@globalEventHandlers@ariaAttributes@(Lazy.force(Ppx_extra_attributes.load_attributes()))lethtmlElements=[{tag="a";attributes=commonHtmlAttributes@anchorHTMLAttributes};{tag="abbr";attributes=commonHtmlAttributes};{tag="address";attributes=commonHtmlAttributes};{tag="area";attributes=commonHtmlAttributes@areaHTMLAttributes};{tag="article";attributes=commonHtmlAttributes};{tag="aside";attributes=commonHtmlAttributes};{tag="audio";attributes=commonHtmlAttributes@mediaHTMLAttributes};{tag="b";attributes=commonHtmlAttributes};{tag="base";attributes=commonHtmlAttributes@baseHTMLAttributes};{tag="bdi";attributes=commonHtmlAttributes};{tag="bdo";attributes=commonHtmlAttributes};{tag="big";attributes=commonHtmlAttributes};{tag="blockquote";attributes=commonHtmlAttributes@blockquoteHTMLAttributes};{tag="body";attributes=commonHtmlAttributes};{tag="br";attributes=commonHtmlAttributes};{tag="button";attributes=commonHtmlAttributes@buttonHTMLAttributes};{tag="canvas";attributes=commonHtmlAttributes@canvasHTMLAttributes};{tag="caption";attributes=commonHtmlAttributes};{tag="cite";attributes=commonHtmlAttributes};{tag="code";attributes=commonHtmlAttributes};{tag="col";attributes=commonHtmlAttributes@colHTMLAttributes};{tag="colgroup";attributes=commonHtmlAttributes@colgroupHTMLAttributes};{tag="data";attributes=commonHtmlAttributes@dataHTMLAttributes};{tag="datalist";attributes=commonHtmlAttributes};{tag="dd";attributes=commonHtmlAttributes};{tag="del";attributes=commonHtmlAttributes@delHTMLAttributes};{tag="details";attributes=commonHtmlAttributes@detailsHTMLAttributes};{tag="dfn";attributes=commonHtmlAttributes};{tag="dialog";attributes=commonHtmlAttributes@dialogHTMLAttributes};{tag="div";attributes=commonHtmlAttributes};{tag="dl";attributes=commonHtmlAttributes};{tag="dt";attributes=commonHtmlAttributes};{tag="em";attributes=commonHtmlAttributes};{tag="embed";attributes=commonHtmlAttributes@embedHTMLAttributes};{tag="fieldset";attributes=commonHtmlAttributes@fieldsetHTMLAttributes};{tag="figcaption";attributes=commonHtmlAttributes};{tag="figure";attributes=commonHtmlAttributes};{tag="footer";attributes=commonHtmlAttributes};{tag="form";attributes=commonHtmlAttributes@formHTMLAttributes};{tag="h1";attributes=commonHtmlAttributes};{tag="h2";attributes=commonHtmlAttributes};{tag="h3";attributes=commonHtmlAttributes};{tag="h4";attributes=commonHtmlAttributes};{tag="h5";attributes=commonHtmlAttributes};{tag="h6";attributes=commonHtmlAttributes};{tag="head";attributes=commonHtmlAttributes};{tag="header";attributes=commonHtmlAttributes};{tag="hgroup";attributes=commonHtmlAttributes};{tag="hr";attributes=commonHtmlAttributes};{tag="html";attributes=commonHtmlAttributes@htmlHTMLAttributes};{tag="i";attributes=commonHtmlAttributes};{tag="iframe";attributes=commonHtmlAttributes@iframeHTMLAttributes};{tag="img";attributes=commonHtmlAttributes@imgHTMLAttributes};{tag="input";attributes=commonHtmlAttributes@inputHTMLAttributes};{tag="ins";attributes=commonHtmlAttributes@insHTMLAttributes};{tag="kbd";attributes=commonHtmlAttributes};{tag="keygen";attributes=commonHtmlAttributes@keygenHTMLAttributes};{tag="label";attributes=commonHtmlAttributes@labelHTMLAttributes};{tag="legend";attributes=commonHtmlAttributes};{tag="li";attributes=commonHtmlAttributes@liHTMLAttributes};{tag="link";attributes=commonHtmlAttributes@linkHTMLAttributes};{tag="main";attributes=commonHtmlAttributes};{tag="map";attributes=commonHtmlAttributes@mapHTMLAttributes};{tag="mark";attributes=commonHtmlAttributes};{tag="menu";attributes=commonHtmlAttributes@menuHTMLAttributes};{tag="menuitem";attributes=commonHtmlAttributes};{tag="meta";attributes=commonHtmlAttributes@metaHTMLAttributes};{tag="meter";attributes=commonHtmlAttributes@meterHTMLAttributes};{tag="nav";attributes=commonHtmlAttributes};{tag="noindex";attributes=commonHtmlAttributes};{tag="noscript";attributes=commonHtmlAttributes};{tag="object";attributes=commonHtmlAttributes@objectHTMLAttributes};{tag="ol";attributes=commonHtmlAttributes@olHTMLAttributes};{tag="optgroup";attributes=commonHtmlAttributes@optgroupHTMLAttributes};{tag="option";attributes=commonHtmlAttributes@optionHTMLAttributes};{tag="output";attributes=commonHtmlAttributes@outputHTMLAttributes};{tag="p";attributes=commonHtmlAttributes};{tag="param";attributes=commonHtmlAttributes@paramHTMLAttributes};{tag="picture";attributes=commonHtmlAttributes};{tag="pre";attributes=commonHtmlAttributes};{tag="progress";attributes=commonHtmlAttributes@progressHTMLAttributes};{tag="q";attributes=commonHtmlAttributes@quoteHTMLAttributes};{tag="rp";attributes=commonHtmlAttributes};{tag="rt";attributes=commonHtmlAttributes};{tag="ruby";attributes=commonHtmlAttributes};{tag="s";attributes=commonHtmlAttributes};{tag="samp";attributes=commonHtmlAttributes};{tag="script";attributes=commonHtmlAttributes@scriptHTMLAttributes};{tag="section";attributes=commonHtmlAttributes};{tag="select";attributes=commonHtmlAttributes@selectHTMLAttributes};{tag="slot";attributes=commonHtmlAttributes@slotHTMLAttributes};{tag="small";attributes=commonHtmlAttributes};{tag="source";attributes=commonHtmlAttributes@sourceHTMLAttributes};{tag="span";attributes=commonHtmlAttributes};{tag="strong";attributes=commonHtmlAttributes};{tag="style";attributes=commonHtmlAttributes@styleHTMLAttributes};{tag="sub";attributes=commonHtmlAttributes};{tag="summary";attributes=commonHtmlAttributes};{tag="sup";attributes=commonHtmlAttributes};{tag="table";attributes=commonHtmlAttributes@tableHTMLAttributes};{tag="tbody";attributes=commonHtmlAttributes};{tag="td";attributes=commonHtmlAttributes@tdHTMLAttributes};{tag="template";attributes=commonHtmlAttributes};{tag="textarea";attributes=commonHtmlAttributes@textareaHTMLAttributes};{tag="tfoot";attributes=commonHtmlAttributes};{tag="th";attributes=commonHtmlAttributes@thHTMLAttributes};{tag="thead";attributes=commonHtmlAttributes};{tag="time";attributes=commonHtmlAttributes@timeHTMLAttributes};{tag="title";attributes=commonHtmlAttributes};{tag="tr";attributes=commonHtmlAttributes};{tag="track";attributes=commonHtmlAttributes@trackHTMLAttributes};{tag="u";attributes=commonHtmlAttributes};{tag="ul";attributes=commonHtmlAttributes};{tag="var";attributes=commonHtmlAttributes};{tag="video";attributes=commonHtmlAttributes@videoHTMLAttributes};{tag="wbr";attributes=commonHtmlAttributes};{tag="webview";attributes=commonHtmlAttributes@webViewHTMLAttributes};]letcommonSvgAttributes=SVG.attributes@globalEventHandlers@ariaAttributes@(Lazy.force(Ppx_extra_attributes.load_attributes()))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"]letelements=svgElements@htmlElementsletgetName=function|Rich_attribute{name;_}->name|Attribute{name;_}->name|Event{jsxName;_}->jsxNameletgetJSXName=function|Rich_attribute{jsxName;_}->jsxName|Attribute{jsxName;_}->jsxName|Event{jsxName;_}->jsxNameletdomPropNames=commonSvgAttributes@commonHtmlAttributes|>List.mapgetJSXNametypeerrors=[`ElementNotFound|`AttributeNotFound]letgetAttributestag=List.find_opt(funelement->element.tag=tag)elements|>Option.to_result~none:`ElementNotFoundletisDataAttribute=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->ifChar.uppercase_asciiy==ythenloop('-'::x::acc)(Char.lowercase_asciiy::xs)elseloop(x::acc)(y::xs)instr|>chars_of_string|>loop[]|>List.rev|>string_of_charsletfindByNametagjsxName=letbyNamep=getJSXNamep=jsxNameinifisDataAttributejsxNamethenletname=camelcaseToKebabcasejsxNameinOk(Attribute{name;jsxName;type_=String})elsematchgetAttributestagwith|Ok{attributes;_}->List.find_optbyNameattributes|>Option.to_result~none:`AttributeNotFound|Errorerr->ErrorerrmoduleLevenshtein=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_nameinvalid=letaccumulate_distancenamebestMatch=letdistance=Levenshtein.distanceinvalidnameinmatchdistance<bestMatch.distancewith|true->{name;distance}|false->bestMatchinlet{name;distance}=List.fold_rightaccumulate_distancedomPropNames{name="";distance=max_int}inifdistance>2thenNoneelseSomename