From 668ccb327a90930338fd89361ba557059dae76c0 Mon Sep 17 00:00:00 2001 From: aspeddro Date: Tue, 25 Mar 2025 10:01:09 -0300 Subject: [PATCH 1/3] group `Jsx` modules --- lib/es6/Jsx.js | 16 +- lib/js/Jsx.js | 14 +- runtime/Jsx.res | 614 ++++++++++++++++++ runtime/JsxDOM.res | 1 + runtime/JsxDOMStyle.res | 1 + runtime/JsxEvent.res | 1 + .../tests/src/expected/Completion.res.txt | 2 +- .../@rescript/react/src/ReactDOM.res | 16 +- 8 files changed, 654 insertions(+), 11 deletions(-) diff --git a/lib/es6/Jsx.js b/lib/es6/Jsx.js index ae1b9f17e6..96f99da84f 100644 --- a/lib/es6/Jsx.js +++ b/lib/es6/Jsx.js @@ -1 +1,15 @@ -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ + + + +let DOM = {}; + +let DOMStyle; + +let Event; + +export { + DOMStyle, + Event, + DOM, +} +/* No side effect */ diff --git a/lib/js/Jsx.js b/lib/js/Jsx.js index ae1b9f17e6..75431e15cb 100644 --- a/lib/js/Jsx.js +++ b/lib/js/Jsx.js @@ -1 +1,13 @@ -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ +'use strict'; + + +let DOM = {}; + +let DOMStyle; + +let Event; + +exports.DOMStyle = DOMStyle; +exports.Event = Event; +exports.DOM = DOM; +/* No side effect */ diff --git a/runtime/Jsx.res b/runtime/Jsx.res index fd9735b9c1..84f139d3e6 100644 --- a/runtime/Jsx.res +++ b/runtime/Jsx.res @@ -38,3 +38,617 @@ type component<'props> = componentLike<'props, element> /* this function exists to prepare for making `component` abstract */ external component: componentLike<'props, element> => component<'props> = "%identity" + +module DOMStyle = JsxDOMStyle +module Event = JsxEvent +module DOM = { + type style = DOMStyle.t + type domRef + /** + [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover) + */ + type popover = | @as("auto") Auto | @as("manual") Manual | @as("hint") Hint + /** + [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#popovertargetaction) + */ + type popoverTargetAction = | @as("toggle") Toggle | @as("show") Show | @as("hide") Hide + + /* + This list isn't exhaustive. We'll add more as we go. + */ + type domProps = { + key?: string, + children?: element, + ref?: domRef, + /* accessibility */ + /* https://www.w3.org/TR/wai-aria-1.1/ */ + /* https://accessibilityresources.org/ is a great resource for these */ + @as("aria-current") + ariaCurrent?: [#page | #step | #location | #date | #time | #"true" | #"false"], + @as("aria-details") + ariaDetails?: string, + @as("aria-disabled") + ariaDisabled?: bool, + @as("aria-hidden") + ariaHidden?: bool, + @as("aria-invalid") ariaInvalid?: [#grammar | #"false" | #spelling | #"true"], + @as("aria-keyshortcuts") + ariaKeyshortcuts?: string, + @as("aria-label") + ariaLabel?: string, + @as("aria-roledescription") + ariaRoledescription?: string, + /* Widget Attributes */ + @as("aria-autocomplete") ariaAutocomplete?: [#inline | #list | #both | #none], + /* https://www.w3.org/TR/wai-aria-1.1/#valuetype_tristate */ + @as("aria-checked") + ariaChecked?: [#"true" | #"false" | #mixed], + @as("aria-expanded") + ariaExpanded?: bool, + @as("aria-haspopup") + ariaHaspopup?: [#menu | #listbox | #tree | #grid | #dialog | #"true" | #"false"], + @as("aria-level") + ariaLevel?: int, + @as("aria-modal") + ariaModal?: bool, + @as("aria-multiline") + ariaMultiline?: bool, + @as("aria-multiselectable") + ariaMultiselectable?: bool, + @as("aria-orientation") ariaOrientation?: [#horizontal | #vertical | #undefined], + @as("aria-placeholder") + ariaPlaceholder?: string, + /* https://www.w3.org/TR/wai-aria-1.1/#valuetype_tristate */ + @as("aria-pressed") ariaPressed?: [#"true" | #"false" | #mixed], + @as("aria-readonly") + ariaReadonly?: bool, + @as("aria-required") + ariaRequired?: bool, + @as("aria-selected") + ariaSelected?: bool, + @as("aria-sort") + ariaSort?: string, + @as("aria-valuemax") + ariaValuemax?: float, + @as("aria-valuemin") + ariaValuemin?: float, + @as("aria-valuenow") + ariaValuenow?: float, + @as("aria-valuetext") + ariaValuetext?: string, + /* Live Region Attributes */ + @as("aria-atomic") + ariaAtomic?: bool, + @as("aria-busy") + ariaBusy?: bool, + @as("aria-live") ariaLive?: [#off | #polite | #assertive | #rude], + @as("aria-relevant") + ariaRelevant?: string, + /* Drag-and-Drop Attributes */ + @as("aria-dropeffect") ariaDropeffect?: [#copy | #move | #link | #execute | #popup | #none], + @as("aria-grabbed") + ariaGrabbed?: bool, + /* Relationship Attributes */ + @as("aria-activedescendant") + ariaActivedescendant?: string, + @as("aria-colcount") + ariaColcount?: int, + @as("aria-colindex") + ariaColindex?: int, + @as("aria-colspan") + ariaColspan?: int, + @as("aria-controls") + ariaControls?: string, + @as("aria-describedby") + ariaDescribedby?: string, + @as("aria-errormessage") + ariaErrormessage?: string, + @as("aria-flowto") + ariaFlowto?: string, + @as("aria-labelledby") + ariaLabelledby?: string, + @as("aria-owns") + ariaOwns?: string, + @as("aria-posinset") + ariaPosinset?: int, + @as("aria-rowcount") + ariaRowcount?: int, + @as("aria-rowindex") + ariaRowindex?: int, + @as("aria-rowspan") + ariaRowspan?: int, + @as("aria-setsize") + ariaSetsize?: int, + /* react textarea/input */ + defaultChecked?: bool, + defaultValue?: string, + /* global html attributes */ + accessKey?: string, + capture?: [#user | #environment], + className?: string /* substitute for "class" */, + contentEditable?: bool, + contextMenu?: string, + @as("data-testid") dataTestId?: string, + dir?: string /* "ltr", "rtl" or "auto" */, + draggable?: bool, + hidden?: bool, + id?: string, + inert?: bool, + lang?: string, + popover?: popover, + popoverTarget?: string, + popoverTargetAction?: popoverTargetAction, + role?: string /* ARIA role */, + style?: style, + spellCheck?: bool, + tabIndex?: int, + title?: string, + /* html5 microdata */ + itemID?: string, + itemProp?: string, + itemRef?: string, + itemScope?: bool, + itemType?: string /* uri */, + /* tag-specific html attributes */ + accept?: string, + acceptCharset?: string, + action?: string /* uri */, + allowFullScreen?: bool, + alt?: string, + @as("as") + as_?: string, + async?: bool, + autoComplete?: string /* has a fixed, but large-ish, set of possible values */, + autoCapitalize?: string /* Mobile Safari specific */, + autoFocus?: bool, + autoPlay?: bool, + challenge?: string, + charSet?: string, + checked?: bool, + cite?: string /* uri */, + crossOrigin?: string /* anonymous, use-credentials */, + cols?: int, + colSpan?: int, + content?: string, + controls?: bool, + coords?: string /* set of values specifying the coordinates of a region */, + data?: string /* uri */, + dateTime?: string /* "valid date string with optional time" */, + default?: bool, + defer?: bool, + disabled?: bool, + download?: string /* should really be either a boolean, signifying presence, or a string */, + encType?: string /* "application/x-www-form-urlencoded", "multipart/form-data" or "text/plain" */, + form?: string, + formAction?: string /* uri */, + formTarget?: string /* "_blank", "_self", etc. */, + formMethod?: string /* "post", "get", "put" */, + headers?: string, + height?: string /* in html5 this can only be a number, but in html4 it can ba a percentage as well */, + high?: int, + href?: string /* uri */, + hrefLang?: string, + htmlFor?: string /* substitute for "for" */, + httpEquiv?: string /* has a fixed set of possible values */, + icon?: string /* uri? */, + inputMode?: string /* "verbatim", "latin", "numeric", etc. */, + integrity?: string, + keyType?: string, + kind?: string /* has a fixed set of possible values */, + label?: string, + list?: string, + loading?: [#lazy | #eager], + loop?: bool, + low?: int, + manifest?: string /* uri */, + max?: string /* should be int or Date.t */, + maxLength?: int, + media?: string /* a valid media query */, + mediaGroup?: string, + method?: string /* "post" or "get" */, + min?: string, + minLength?: int, + multiple?: bool, + muted?: bool, + name?: string, + nonce?: string, + noValidate?: bool, + @as("open") + open_?: bool /* use this one. Previous one is deprecated */, + optimum?: int, + pattern?: string /* valid Js RegExp */, + placeholder?: string, + playsInline?: bool, + poster?: string /* uri */, + preload?: string /* "none", "metadata" or "auto" (and "" as a synonym for "auto") */, + radioGroup?: string, + readOnly?: bool, + rel?: string /* a space- or comma-separated (depending on the element) list of a fixed set of "link types" */, + required?: bool, + reversed?: bool, + rows?: int, + rowSpan?: int, + sandbox?: string /* has a fixed set of possible values */, + scope?: string /* has a fixed set of possible values */, + scoped?: bool, + scrolling?: string /* html4 only, "auto", "yes" or "no" */, + /* seamless - supported by React, but removed from the html5 spec */ + selected?: bool, + shape?: string, + size?: int, + sizes?: string, + span?: int, + src?: string /* uri */, + srcDoc?: string, + srcLang?: string, + srcSet?: string, + start?: int, + step?: float, + summary?: string /* deprecated */, + target?: string, + @as("type") + type_?: string /* has a fixed but large-ish set of possible values */ /* use this one. Previous one is deprecated */, + useMap?: string, + value?: string, + width?: string /* in html5 this can only be a number, but in html4 it can ba a percentage as well */, + wrap?: string /* "hard" or "soft" */, + /* Clipboard events */ + onCopy?: JsxEvent.Clipboard.t => unit, + onCut?: JsxEvent.Clipboard.t => unit, + onPaste?: JsxEvent.Clipboard.t => unit, + /* Composition events */ + onCompositionEnd?: JsxEvent.Composition.t => unit, + onCompositionStart?: JsxEvent.Composition.t => unit, + onCompositionUpdate?: JsxEvent.Composition.t => unit, + /* Keyboard events */ + onKeyDown?: JsxEvent.Keyboard.t => unit, + onKeyPress?: JsxEvent.Keyboard.t => unit, + onKeyUp?: JsxEvent.Keyboard.t => unit, + /* Focus events */ + onFocus?: JsxEvent.Focus.t => unit, + onBlur?: JsxEvent.Focus.t => unit, + /* Form events */ + onBeforeInput?: JsxEvent.Form.t => unit, + onChange?: JsxEvent.Form.t => unit, + onInput?: JsxEvent.Form.t => unit, + onReset?: JsxEvent.Form.t => unit, + onSubmit?: JsxEvent.Form.t => unit, + onInvalid?: JsxEvent.Form.t => unit, + /* Mouse events */ + onClick?: JsxEvent.Mouse.t => unit, + onContextMenu?: JsxEvent.Mouse.t => unit, + onDoubleClick?: JsxEvent.Mouse.t => unit, + onDrag?: JsxEvent.Mouse.t => unit, + onDragEnd?: JsxEvent.Mouse.t => unit, + onDragEnter?: JsxEvent.Mouse.t => unit, + onDragExit?: JsxEvent.Mouse.t => unit, + onDragLeave?: JsxEvent.Mouse.t => unit, + onDragOver?: JsxEvent.Mouse.t => unit, + onDragStart?: JsxEvent.Mouse.t => unit, + onDrop?: JsxEvent.Mouse.t => unit, + onMouseDown?: JsxEvent.Mouse.t => unit, + onMouseEnter?: JsxEvent.Mouse.t => unit, + onMouseLeave?: JsxEvent.Mouse.t => unit, + onMouseMove?: JsxEvent.Mouse.t => unit, + onMouseOut?: JsxEvent.Mouse.t => unit, + onMouseOver?: JsxEvent.Mouse.t => unit, + onMouseUp?: JsxEvent.Mouse.t => unit, + /* Selection events */ + onSelect?: JsxEvent.Selection.t => unit, + /* Touch events */ + onTouchCancel?: JsxEvent.Touch.t => unit, + onTouchEnd?: JsxEvent.Touch.t => unit, + onTouchMove?: JsxEvent.Touch.t => unit, + onTouchStart?: JsxEvent.Touch.t => unit, + // Pointer events + onPointerOver?: JsxEvent.Pointer.t => unit, + onPointerEnter?: JsxEvent.Pointer.t => unit, + onPointerDown?: JsxEvent.Pointer.t => unit, + onPointerMove?: JsxEvent.Pointer.t => unit, + onPointerUp?: JsxEvent.Pointer.t => unit, + onPointerCancel?: JsxEvent.Pointer.t => unit, + onPointerOut?: JsxEvent.Pointer.t => unit, + onPointerLeave?: JsxEvent.Pointer.t => unit, + onGotPointerCapture?: JsxEvent.Pointer.t => unit, + onLostPointerCapture?: JsxEvent.Pointer.t => unit, + /* UI events */ + onScroll?: JsxEvent.UI.t => unit, + /* Wheel events */ + onWheel?: JsxEvent.Wheel.t => unit, + /* Media events */ + onAbort?: JsxEvent.Media.t => unit, + onCanPlay?: JsxEvent.Media.t => unit, + onCanPlayThrough?: JsxEvent.Media.t => unit, + onDurationChange?: JsxEvent.Media.t => unit, + onEmptied?: JsxEvent.Media.t => unit, + onEncrypted?: JsxEvent.Media.t => unit, + onEnded?: JsxEvent.Media.t => unit, + onError?: JsxEvent.Media.t => unit, + onLoadedData?: JsxEvent.Media.t => unit, + onLoadedMetadata?: JsxEvent.Media.t => unit, + onLoadStart?: JsxEvent.Media.t => unit, + onPause?: JsxEvent.Media.t => unit, + onPlay?: JsxEvent.Media.t => unit, + onPlaying?: JsxEvent.Media.t => unit, + onProgress?: JsxEvent.Media.t => unit, + onRateChange?: JsxEvent.Media.t => unit, + onSeeked?: JsxEvent.Media.t => unit, + onSeeking?: JsxEvent.Media.t => unit, + onStalled?: JsxEvent.Media.t => unit, + onSuspend?: JsxEvent.Media.t => unit, + onTimeUpdate?: JsxEvent.Media.t => unit, + onVolumeChange?: JsxEvent.Media.t => unit, + onWaiting?: JsxEvent.Media.t => unit, + /* Image events */ + onLoad?: JsxEvent.Image.t => unit /* duplicate */ /* ~onError: ReactEvent.Image.t => unit=?, */, + /* Animation events */ + onAnimationStart?: JsxEvent.Animation.t => unit, + onAnimationEnd?: JsxEvent.Animation.t => unit, + onAnimationIteration?: JsxEvent.Animation.t => unit, + /* Transition events */ + onTransitionEnd?: JsxEvent.Transition.t => unit, + /* svg */ + accentHeight?: string, + accumulate?: string, + additive?: string, + alignmentBaseline?: string, + allowReorder?: string, + alphabetic?: string, + amplitude?: string, + arabicForm?: string, + ascent?: string, + attributeName?: string, + attributeType?: string, + autoReverse?: string, + azimuth?: string, + baseFrequency?: string, + baseProfile?: string, + baselineShift?: string, + bbox?: string, + begin?: string, + @deprecated("Please use begin") + begin_?: string, + bias?: string, + by?: string, + calcMode?: string, + capHeight?: string, + clip?: string, + clipPath?: string, + clipPathUnits?: string, + clipRule?: string, + colorInterpolation?: string, + colorInterpolationFilters?: string, + colorProfile?: string, + colorRendering?: string, + contentScriptType?: string, + contentStyleType?: string, + cursor?: string, + cx?: string, + cy?: string, + d?: string, + decelerate?: string, + descent?: string, + diffuseConstant?: string, + direction?: string, + display?: string, + divisor?: string, + dominantBaseline?: string, + dur?: string, + dx?: string, + dy?: string, + edgeMode?: string, + elevation?: string, + enableBackground?: string, + end?: string, + @deprecated("Please use end") + end_?: string, + exponent?: string, + externalResourcesRequired?: string, + fill?: string, + fillOpacity?: string, + fillRule?: string, + filter?: string, + filterRes?: string, + filterUnits?: string, + floodColor?: string, + floodOpacity?: string, + focusable?: string, + fontFamily?: string, + fontSize?: string, + fontSizeAdjust?: string, + fontStretch?: string, + fontStyle?: string, + fontVariant?: string, + fontWeight?: string, + fomat?: string, + from?: string, + fx?: string, + fy?: string, + g1?: string, + g2?: string, + glyphName?: string, + glyphOrientationHorizontal?: string, + glyphOrientationVertical?: string, + glyphRef?: string, + gradientTransform?: string, + gradientUnits?: string, + hanging?: string, + horizAdvX?: string, + horizOriginX?: string, + ideographic?: string, + imageRendering?: string, + @as("in") + in_?: string /* use this one. Previous one is deprecated */, + in2?: string, + intercept?: string, + k?: string, + k1?: string, + k2?: string, + k3?: string, + k4?: string, + kernelMatrix?: string, + kernelUnitLength?: string, + kerning?: string, + keyPoints?: string, + keySplines?: string, + keyTimes?: string, + lengthAdjust?: string, + letterSpacing?: string, + lightingColor?: string, + limitingConeAngle?: string, + local?: string, + markerEnd?: string, + markerHeight?: string, + markerMid?: string, + markerStart?: string, + markerUnits?: string, + markerWidth?: string, + mask?: string, + maskContentUnits?: string, + maskUnits?: string, + mathematical?: string, + mode?: string, + numOctaves?: string, + offset?: string, + opacity?: string, + operator?: string, + order?: string, + orient?: string, + orientation?: string, + origin?: string, + overflow?: string, + overflowX?: string, + overflowY?: string, + overlinePosition?: string, + overlineThickness?: string, + paintOrder?: string, + panose1?: string, + pathLength?: string, + patternContentUnits?: string, + patternTransform?: string, + patternUnits?: string, + pointerEvents?: string, + points?: string, + pointsAtX?: string, + pointsAtY?: string, + pointsAtZ?: string, + preserveAlpha?: string, + preserveAspectRatio?: string, + primitiveUnits?: string, + r?: string, + radius?: string, + refX?: string, + refY?: string, + renderingIntent?: string, + repeatCount?: string, + repeatDur?: string, + requiredExtensions?: string, + requiredFeatures?: string, + restart?: string, + result?: string, + rotate?: string, + rx?: string, + ry?: string, + scale?: string, + seed?: string, + shapeRendering?: string, + slope?: string, + spacing?: string, + specularConstant?: string, + specularExponent?: string, + speed?: string, + spreadMethod?: string, + startOffset?: string, + stdDeviation?: string, + stemh?: string, + stemv?: string, + stitchTiles?: string, + stopColor?: string, + stopOpacity?: string, + strikethroughPosition?: string, + strikethroughThickness?: string, + string?: string, + stroke?: string, + strokeDasharray?: string, + strokeDashoffset?: string, + strokeLinecap?: string, + strokeLinejoin?: string, + strokeMiterlimit?: string, + strokeOpacity?: string, + strokeWidth?: string, + surfaceScale?: string, + systemLanguage?: string, + tableValues?: string, + targetX?: string, + targetY?: string, + textAnchor?: string, + textDecoration?: string, + textLength?: string, + textRendering?: string, + to?: string, + @deprecated("Please use to") + to_?: string, + transform?: string, + u1?: string, + u2?: string, + underlinePosition?: string, + underlineThickness?: string, + unicode?: string, + unicodeBidi?: string, + unicodeRange?: string, + unitsPerEm?: string, + vAlphabetic?: string, + vHanging?: string, + vIdeographic?: string, + vMathematical?: string, + values?: string, + vectorEffect?: string, + version?: string, + vertAdvX?: string, + vertAdvY?: string, + vertOriginX?: string, + vertOriginY?: string, + viewBox?: string, + viewTarget?: string, + visibility?: string, + /* width::string? => */ + widths?: string, + wordSpacing?: string, + writingMode?: string, + x?: string, + x1?: string, + x2?: string, + xChannelSelector?: string, + xHeight?: string, + xlinkActuate?: string, + xlinkArcrole?: string, + xlinkHref?: string, + xlinkRole?: string, + xlinkShow?: string, + xlinkTitle?: string, + xlinkType?: string, + xmlns?: string, + xmlnsXlink?: string, + xmlBase?: string, + xmlLang?: string, + xmlSpace?: string, + y?: string, + y1?: string, + y2?: string, + yChannelSelector?: string, + z?: string, + zoomAndPan?: string, + /* RDFa */ + about?: string, + datatype?: string, + inlist?: string, + prefix?: string, + property?: string, + resource?: string, + typeof?: string, + vocab?: string, + /* react-specific */ + dangerouslySetInnerHTML?: {"__html": string}, + suppressContentEditableWarning?: bool, + } +} diff --git a/runtime/JsxDOM.res b/runtime/JsxDOM.res index fed523b074..2fe359abe5 100644 --- a/runtime/JsxDOM.res +++ b/runtime/JsxDOM.res @@ -22,6 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +@@deprecated("Use `Jsx.DOM` instead.") type style = JsxDOMStyle.t type domRef /** diff --git a/runtime/JsxDOMStyle.res b/runtime/JsxDOMStyle.res index 388b4f3b47..e88a72c591 100644 --- a/runtime/JsxDOMStyle.res +++ b/runtime/JsxDOMStyle.res @@ -22,6 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +@@deprecated("Use `Jsx.DOMStyle` instead.") type t = { /** See [`accent-color`](https://developer.mozilla.org/docs/Web/CSS/accent-color) on MDN. diff --git a/runtime/JsxEvent.res b/runtime/JsxEvent.res index d8de1b5c44..0bc29b1435 100644 --- a/runtime/JsxEvent.res +++ b/runtime/JsxEvent.res @@ -22,6 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +@@deprecated("Use `Jsx.Event` instead.") type synthetic<'a> module MakeEventWithType = ( diff --git a/tests/analysis_tests/tests/src/expected/Completion.res.txt b/tests/analysis_tests/tests/src/expected/Completion.res.txt index 1b3f68e11c..8b5ea58de6 100644 --- a/tests/analysis_tests/tests/src/expected/Completion.res.txt +++ b/tests/analysis_tests/tests/src/expected/Completion.res.txt @@ -1953,7 +1953,7 @@ Path this }] Hover src/Completion.res 349:14 -{"contents": {"kind": "markdown", "value": "```rescript\nJsxDOM.domProps\n```\n\n---\n\n```\n \n```\n```rescript\ntype JsxDOM.domProps = {\n key?: string,\n children?: Jsx.element,\n ref?: domRef,\n ariaCurrent?: [\n | #date\n | #\"false\"\n | #location\n | #page\n | #step\n | #time\n | #\"true\"\n ],\n ariaDetails?: string,\n ariaDisabled?: bool,\n ariaHidden?: bool,\n ariaInvalid?: [#\"false\" | #grammar | #spelling | #\"true\"],\n ariaKeyshortcuts?: string,\n ariaLabel?: string,\n ariaRoledescription?: string,\n ariaAutocomplete?: [#both | #inline | #list | #none],\n ariaChecked?: [#\"false\" | #mixed | #\"true\"],\n ariaExpanded?: bool,\n ariaHaspopup?: [\n | #dialog\n | #\"false\"\n | #grid\n | #listbox\n | #menu\n | #tree\n | #\"true\"\n ],\n ariaLevel?: int,\n ariaModal?: bool,\n ariaMultiline?: bool,\n ariaMultiselectable?: bool,\n ariaOrientation?: [#horizontal | #undefined | #vertical],\n ariaPlaceholder?: string,\n ariaPressed?: [#\"false\" | #mixed | #\"true\"],\n ariaReadonly?: bool,\n ariaRequired?: bool,\n ariaSelected?: bool,\n ariaSort?: string,\n ariaValuemax?: float,\n ariaValuemin?: float,\n ariaValuenow?: float,\n ariaValuetext?: string,\n ariaAtomic?: bool,\n ariaBusy?: bool,\n ariaLive?: [#assertive | #off | #polite | #rude],\n ariaRelevant?: string,\n ariaDropeffect?: [\n | #copy\n | #execute\n | #link\n | #move\n | #none\n | #popup\n ],\n ariaGrabbed?: bool,\n ariaActivedescendant?: string,\n ariaColcount?: int,\n ariaColindex?: int,\n ariaColspan?: int,\n ariaControls?: string,\n ariaDescribedby?: string,\n ariaErrormessage?: string,\n ariaFlowto?: string,\n ariaLabelledby?: string,\n ariaOwns?: string,\n ariaPosinset?: int,\n ariaRowcount?: int,\n ariaRowindex?: int,\n ariaRowspan?: int,\n ariaSetsize?: int,\n defaultChecked?: bool,\n defaultValue?: string,\n accessKey?: string,\n capture?: [#environment | #user],\n className?: string,\n contentEditable?: bool,\n contextMenu?: string,\n dataTestId?: string,\n dir?: string,\n draggable?: bool,\n hidden?: bool,\n id?: string,\n inert?: bool,\n lang?: string,\n popover?: popover,\n popoverTarget?: string,\n popoverTargetAction?: popoverTargetAction,\n role?: string,\n style?: style,\n spellCheck?: bool,\n tabIndex?: int,\n title?: string,\n itemID?: string,\n itemProp?: string,\n itemRef?: string,\n itemScope?: bool,\n itemType?: string,\n accept?: string,\n acceptCharset?: string,\n action?: string,\n allowFullScreen?: bool,\n alt?: string,\n as_?: string,\n async?: bool,\n autoComplete?: string,\n autoCapitalize?: string,\n autoFocus?: bool,\n autoPlay?: bool,\n challenge?: string,\n charSet?: string,\n checked?: bool,\n cite?: string,\n crossOrigin?: string,\n cols?: int,\n colSpan?: int,\n content?: string,\n controls?: bool,\n coords?: string,\n data?: string,\n dateTime?: string,\n default?: bool,\n defer?: bool,\n disabled?: bool,\n download?: string,\n encType?: string,\n form?: string,\n formAction?: string,\n formTarget?: string,\n formMethod?: string,\n headers?: string,\n height?: string,\n high?: int,\n href?: string,\n hrefLang?: string,\n htmlFor?: string,\n httpEquiv?: string,\n icon?: string,\n inputMode?: string,\n integrity?: string,\n keyType?: string,\n kind?: string,\n label?: string,\n list?: string,\n loading?: [#eager | #lazy],\n loop?: bool,\n low?: int,\n manifest?: string,\n max?: string,\n maxLength?: int,\n media?: string,\n mediaGroup?: string,\n method?: string,\n min?: string,\n minLength?: int,\n multiple?: bool,\n muted?: bool,\n name?: string,\n nonce?: string,\n noValidate?: bool,\n open_?: bool,\n optimum?: int,\n pattern?: string,\n placeholder?: string,\n playsInline?: bool,\n poster?: string,\n preload?: string,\n radioGroup?: string,\n readOnly?: bool,\n rel?: string,\n required?: bool,\n reversed?: bool,\n rows?: int,\n rowSpan?: int,\n sandbox?: string,\n scope?: string,\n scoped?: bool,\n scrolling?: string,\n selected?: bool,\n shape?: string,\n size?: int,\n sizes?: string,\n span?: int,\n src?: string,\n srcDoc?: string,\n srcLang?: string,\n srcSet?: string,\n start?: int,\n step?: float,\n summary?: string,\n target?: string,\n type_?: string,\n useMap?: string,\n value?: string,\n width?: string,\n wrap?: string,\n onCopy?: JsxEvent.Clipboard.t => unit,\n onCut?: JsxEvent.Clipboard.t => unit,\n onPaste?: JsxEvent.Clipboard.t => unit,\n onCompositionEnd?: JsxEvent.Composition.t => unit,\n onCompositionStart?: JsxEvent.Composition.t => unit,\n onCompositionUpdate?: JsxEvent.Composition.t => unit,\n onKeyDown?: JsxEvent.Keyboard.t => unit,\n onKeyPress?: JsxEvent.Keyboard.t => unit,\n onKeyUp?: JsxEvent.Keyboard.t => unit,\n onFocus?: JsxEvent.Focus.t => unit,\n onBlur?: JsxEvent.Focus.t => unit,\n onBeforeInput?: JsxEvent.Form.t => unit,\n onChange?: JsxEvent.Form.t => unit,\n onInput?: JsxEvent.Form.t => unit,\n onReset?: JsxEvent.Form.t => unit,\n onSubmit?: JsxEvent.Form.t => unit,\n onInvalid?: JsxEvent.Form.t => unit,\n onClick?: JsxEvent.Mouse.t => unit,\n onContextMenu?: JsxEvent.Mouse.t => unit,\n onDoubleClick?: JsxEvent.Mouse.t => unit,\n onDrag?: JsxEvent.Mouse.t => unit,\n onDragEnd?: JsxEvent.Mouse.t => unit,\n onDragEnter?: JsxEvent.Mouse.t => unit,\n onDragExit?: JsxEvent.Mouse.t => unit,\n onDragLeave?: JsxEvent.Mouse.t => unit,\n onDragOver?: JsxEvent.Mouse.t => unit,\n onDragStart?: JsxEvent.Mouse.t => unit,\n onDrop?: JsxEvent.Mouse.t => unit,\n onMouseDown?: JsxEvent.Mouse.t => unit,\n onMouseEnter?: JsxEvent.Mouse.t => unit,\n onMouseLeave?: JsxEvent.Mouse.t => unit,\n onMouseMove?: JsxEvent.Mouse.t => unit,\n onMouseOut?: JsxEvent.Mouse.t => unit,\n onMouseOver?: JsxEvent.Mouse.t => unit,\n onMouseUp?: JsxEvent.Mouse.t => unit,\n onSelect?: JsxEvent.Selection.t => unit,\n onTouchCancel?: JsxEvent.Touch.t => unit,\n onTouchEnd?: JsxEvent.Touch.t => unit,\n onTouchMove?: JsxEvent.Touch.t => unit,\n onTouchStart?: JsxEvent.Touch.t => unit,\n onPointerOver?: JsxEvent.Pointer.t => unit,\n onPointerEnter?: JsxEvent.Pointer.t => unit,\n onPointerDown?: JsxEvent.Pointer.t => unit,\n onPointerMove?: JsxEvent.Pointer.t => unit,\n onPointerUp?: JsxEvent.Pointer.t => unit,\n onPointerCancel?: JsxEvent.Pointer.t => unit,\n onPointerOut?: JsxEvent.Pointer.t => unit,\n onPointerLeave?: JsxEvent.Pointer.t => unit,\n onGotPointerCapture?: JsxEvent.Pointer.t => unit,\n onLostPointerCapture?: JsxEvent.Pointer.t => unit,\n onScroll?: JsxEvent.UI.t => unit,\n onWheel?: JsxEvent.Wheel.t => unit,\n onAbort?: JsxEvent.Media.t => unit,\n onCanPlay?: JsxEvent.Media.t => unit,\n onCanPlayThrough?: JsxEvent.Media.t => unit,\n onDurationChange?: JsxEvent.Media.t => unit,\n onEmptied?: JsxEvent.Media.t => unit,\n onEncrypted?: JsxEvent.Media.t => unit,\n onEnded?: JsxEvent.Media.t => unit,\n onError?: JsxEvent.Media.t => unit,\n onLoadedData?: JsxEvent.Media.t => unit,\n onLoadedMetadata?: JsxEvent.Media.t => unit,\n onLoadStart?: JsxEvent.Media.t => unit,\n onPause?: JsxEvent.Media.t => unit,\n onPlay?: JsxEvent.Media.t => unit,\n onPlaying?: JsxEvent.Media.t => unit,\n onProgress?: JsxEvent.Media.t => unit,\n onRateChange?: JsxEvent.Media.t => unit,\n onSeeked?: JsxEvent.Media.t => unit,\n onSeeking?: JsxEvent.Media.t => unit,\n onStalled?: JsxEvent.Media.t => unit,\n onSuspend?: JsxEvent.Media.t => unit,\n onTimeUpdate?: JsxEvent.Media.t => unit,\n onVolumeChange?: JsxEvent.Media.t => unit,\n onWaiting?: JsxEvent.Media.t => unit,\n onLoad?: JsxEvent.Image.t => unit,\n onAnimationStart?: JsxEvent.Animation.t => unit,\n onAnimationEnd?: JsxEvent.Animation.t => unit,\n onAnimationIteration?: JsxEvent.Animation.t => unit,\n onTransitionEnd?: JsxEvent.Transition.t => unit,\n accentHeight?: string,\n accumulate?: string,\n additive?: string,\n alignmentBaseline?: string,\n allowReorder?: string,\n alphabetic?: string,\n amplitude?: string,\n arabicForm?: string,\n ascent?: string,\n attributeName?: string,\n attributeType?: string,\n autoReverse?: string,\n azimuth?: string,\n baseFrequency?: string,\n baseProfile?: string,\n baselineShift?: string,\n bbox?: string,\n begin?: string,\n begin_?: string,\n bias?: string,\n by?: string,\n calcMode?: string,\n capHeight?: string,\n clip?: string,\n clipPath?: string,\n clipPathUnits?: string,\n clipRule?: string,\n colorInterpolation?: string,\n colorInterpolationFilters?: string,\n colorProfile?: string,\n colorRendering?: string,\n contentScriptType?: string,\n contentStyleType?: string,\n cursor?: string,\n cx?: string,\n cy?: string,\n d?: string,\n decelerate?: string,\n descent?: string,\n diffuseConstant?: string,\n direction?: string,\n display?: string,\n divisor?: string,\n dominantBaseline?: string,\n dur?: string,\n dx?: string,\n dy?: string,\n edgeMode?: string,\n elevation?: string,\n enableBackground?: string,\n end?: string,\n end_?: string,\n exponent?: string,\n externalResourcesRequired?: string,\n fill?: string,\n fillOpacity?: string,\n fillRule?: string,\n filter?: string,\n filterRes?: string,\n filterUnits?: string,\n floodColor?: string,\n floodOpacity?: string,\n focusable?: string,\n fontFamily?: string,\n fontSize?: string,\n fontSizeAdjust?: string,\n fontStretch?: string,\n fontStyle?: string,\n fontVariant?: string,\n fontWeight?: string,\n fomat?: string,\n from?: string,\n fx?: string,\n fy?: string,\n g1?: string,\n g2?: string,\n glyphName?: string,\n glyphOrientationHorizontal?: string,\n glyphOrientationVertical?: string,\n glyphRef?: string,\n gradientTransform?: string,\n gradientUnits?: string,\n hanging?: string,\n horizAdvX?: string,\n horizOriginX?: string,\n ideographic?: string,\n imageRendering?: string,\n in_?: string,\n in2?: string,\n intercept?: string,\n k?: string,\n k1?: string,\n k2?: string,\n k3?: string,\n k4?: string,\n kernelMatrix?: string,\n kernelUnitLength?: string,\n kerning?: string,\n keyPoints?: string,\n keySplines?: string,\n keyTimes?: string,\n lengthAdjust?: string,\n letterSpacing?: string,\n lightingColor?: string,\n limitingConeAngle?: string,\n local?: string,\n markerEnd?: string,\n markerHeight?: string,\n markerMid?: string,\n markerStart?: string,\n markerUnits?: string,\n markerWidth?: string,\n mask?: string,\n maskContentUnits?: string,\n maskUnits?: string,\n mathematical?: string,\n mode?: string,\n numOctaves?: string,\n offset?: string,\n opacity?: string,\n operator?: string,\n order?: string,\n orient?: string,\n orientation?: string,\n origin?: string,\n overflow?: string,\n overflowX?: string,\n overflowY?: string,\n overlinePosition?: string,\n overlineThickness?: string,\n paintOrder?: string,\n panose1?: string,\n pathLength?: string,\n patternContentUnits?: string,\n patternTransform?: string,\n patternUnits?: string,\n pointerEvents?: string,\n points?: string,\n pointsAtX?: string,\n pointsAtY?: string,\n pointsAtZ?: string,\n preserveAlpha?: string,\n preserveAspectRatio?: string,\n primitiveUnits?: string,\n r?: string,\n radius?: string,\n refX?: string,\n refY?: string,\n renderingIntent?: string,\n repeatCount?: string,\n repeatDur?: string,\n requiredExtensions?: string,\n requiredFeatures?: string,\n restart?: string,\n result?: string,\n rotate?: string,\n rx?: string,\n ry?: string,\n scale?: string,\n seed?: string,\n shapeRendering?: string,\n slope?: string,\n spacing?: string,\n specularConstant?: string,\n specularExponent?: string,\n speed?: string,\n spreadMethod?: string,\n startOffset?: string,\n stdDeviation?: string,\n stemh?: string,\n stemv?: string,\n stitchTiles?: string,\n stopColor?: string,\n stopOpacity?: string,\n strikethroughPosition?: string,\n strikethroughThickness?: string,\n string?: string,\n stroke?: string,\n strokeDasharray?: string,\n strokeDashoffset?: string,\n strokeLinecap?: string,\n strokeLinejoin?: string,\n strokeMiterlimit?: string,\n strokeOpacity?: string,\n strokeWidth?: string,\n surfaceScale?: string,\n systemLanguage?: string,\n tableValues?: string,\n targetX?: string,\n targetY?: string,\n textAnchor?: string,\n textDecoration?: string,\n textLength?: string,\n textRendering?: string,\n to?: string,\n to_?: string,\n transform?: string,\n u1?: string,\n u2?: string,\n underlinePosition?: string,\n underlineThickness?: string,\n unicode?: string,\n unicodeBidi?: string,\n unicodeRange?: string,\n unitsPerEm?: string,\n vAlphabetic?: string,\n vHanging?: string,\n vIdeographic?: string,\n vMathematical?: string,\n values?: string,\n vectorEffect?: string,\n version?: string,\n vertAdvX?: string,\n vertAdvY?: string,\n vertOriginX?: string,\n vertOriginY?: string,\n viewBox?: string,\n viewTarget?: string,\n visibility?: string,\n widths?: string,\n wordSpacing?: string,\n writingMode?: string,\n x?: string,\n x1?: string,\n x2?: string,\n xChannelSelector?: string,\n xHeight?: string,\n xlinkActuate?: string,\n xlinkArcrole?: string,\n xlinkHref?: string,\n xlinkRole?: string,\n xlinkShow?: string,\n xlinkTitle?: string,\n xlinkType?: string,\n xmlns?: string,\n xmlnsXlink?: string,\n xmlBase?: string,\n xmlLang?: string,\n xmlSpace?: string,\n y?: string,\n y1?: string,\n y2?: string,\n yChannelSelector?: string,\n z?: string,\n zoomAndPan?: string,\n about?: string,\n datatype?: string,\n inlist?: string,\n prefix?: string,\n property?: string,\n resource?: string,\n typeof?: string,\n vocab?: string,\n dangerouslySetInnerHTML?: {\"__html\": string},\n suppressContentEditableWarning?: bool,\n}\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C38%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype Jsx.element\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22Jsx.res%22%2C24%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype domRef\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C25%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype popover =\n | @as(\"auto\") Auto\n | @as(\"manual\") Manual\n | @as(\"hint\") Hint\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C29%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype popoverTargetAction =\n | @as(\"toggle\") Toggle\n | @as(\"show\") Show\n | @as(\"hide\") Hide\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C33%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype style = JsxDOMStyle.t\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C24%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Clipboard.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C95%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Composition.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C107%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Keyboard.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C118%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Focus.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C142%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Form.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C154%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Mouse.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C163%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Selection.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C244%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Touch.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C253%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Pointer.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C194%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.UI.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C278%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Wheel.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C291%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Media.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C305%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Image.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C314%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Animation.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C323%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Transition.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C336%2C2%5D)\n"}} +{"contents": {"kind": "markdown", "value": "```rescript\nJsxDOM.domProps\n```\n\n---\n\n```\n \n```\n```rescript\ntype JsxDOM.domProps = {\n key?: string,\n children?: Jsx.element,\n ref?: domRef,\n ariaCurrent?: [\n | #date\n | #\"false\"\n | #location\n | #page\n | #step\n | #time\n | #\"true\"\n ],\n ariaDetails?: string,\n ariaDisabled?: bool,\n ariaHidden?: bool,\n ariaInvalid?: [#\"false\" | #grammar | #spelling | #\"true\"],\n ariaKeyshortcuts?: string,\n ariaLabel?: string,\n ariaRoledescription?: string,\n ariaAutocomplete?: [#both | #inline | #list | #none],\n ariaChecked?: [#\"false\" | #mixed | #\"true\"],\n ariaExpanded?: bool,\n ariaHaspopup?: [\n | #dialog\n | #\"false\"\n | #grid\n | #listbox\n | #menu\n | #tree\n | #\"true\"\n ],\n ariaLevel?: int,\n ariaModal?: bool,\n ariaMultiline?: bool,\n ariaMultiselectable?: bool,\n ariaOrientation?: [#horizontal | #undefined | #vertical],\n ariaPlaceholder?: string,\n ariaPressed?: [#\"false\" | #mixed | #\"true\"],\n ariaReadonly?: bool,\n ariaRequired?: bool,\n ariaSelected?: bool,\n ariaSort?: string,\n ariaValuemax?: float,\n ariaValuemin?: float,\n ariaValuenow?: float,\n ariaValuetext?: string,\n ariaAtomic?: bool,\n ariaBusy?: bool,\n ariaLive?: [#assertive | #off | #polite | #rude],\n ariaRelevant?: string,\n ariaDropeffect?: [\n | #copy\n | #execute\n | #link\n | #move\n | #none\n | #popup\n ],\n ariaGrabbed?: bool,\n ariaActivedescendant?: string,\n ariaColcount?: int,\n ariaColindex?: int,\n ariaColspan?: int,\n ariaControls?: string,\n ariaDescribedby?: string,\n ariaErrormessage?: string,\n ariaFlowto?: string,\n ariaLabelledby?: string,\n ariaOwns?: string,\n ariaPosinset?: int,\n ariaRowcount?: int,\n ariaRowindex?: int,\n ariaRowspan?: int,\n ariaSetsize?: int,\n defaultChecked?: bool,\n defaultValue?: string,\n accessKey?: string,\n capture?: [#environment | #user],\n className?: string,\n contentEditable?: bool,\n contextMenu?: string,\n dataTestId?: string,\n dir?: string,\n draggable?: bool,\n hidden?: bool,\n id?: string,\n inert?: bool,\n lang?: string,\n popover?: popover,\n popoverTarget?: string,\n popoverTargetAction?: popoverTargetAction,\n role?: string,\n style?: style,\n spellCheck?: bool,\n tabIndex?: int,\n title?: string,\n itemID?: string,\n itemProp?: string,\n itemRef?: string,\n itemScope?: bool,\n itemType?: string,\n accept?: string,\n acceptCharset?: string,\n action?: string,\n allowFullScreen?: bool,\n alt?: string,\n as_?: string,\n async?: bool,\n autoComplete?: string,\n autoCapitalize?: string,\n autoFocus?: bool,\n autoPlay?: bool,\n challenge?: string,\n charSet?: string,\n checked?: bool,\n cite?: string,\n crossOrigin?: string,\n cols?: int,\n colSpan?: int,\n content?: string,\n controls?: bool,\n coords?: string,\n data?: string,\n dateTime?: string,\n default?: bool,\n defer?: bool,\n disabled?: bool,\n download?: string,\n encType?: string,\n form?: string,\n formAction?: string,\n formTarget?: string,\n formMethod?: string,\n headers?: string,\n height?: string,\n high?: int,\n href?: string,\n hrefLang?: string,\n htmlFor?: string,\n httpEquiv?: string,\n icon?: string,\n inputMode?: string,\n integrity?: string,\n keyType?: string,\n kind?: string,\n label?: string,\n list?: string,\n loading?: [#eager | #lazy],\n loop?: bool,\n low?: int,\n manifest?: string,\n max?: string,\n maxLength?: int,\n media?: string,\n mediaGroup?: string,\n method?: string,\n min?: string,\n minLength?: int,\n multiple?: bool,\n muted?: bool,\n name?: string,\n nonce?: string,\n noValidate?: bool,\n open_?: bool,\n optimum?: int,\n pattern?: string,\n placeholder?: string,\n playsInline?: bool,\n poster?: string,\n preload?: string,\n radioGroup?: string,\n readOnly?: bool,\n rel?: string,\n required?: bool,\n reversed?: bool,\n rows?: int,\n rowSpan?: int,\n sandbox?: string,\n scope?: string,\n scoped?: bool,\n scrolling?: string,\n selected?: bool,\n shape?: string,\n size?: int,\n sizes?: string,\n span?: int,\n src?: string,\n srcDoc?: string,\n srcLang?: string,\n srcSet?: string,\n start?: int,\n step?: float,\n summary?: string,\n target?: string,\n type_?: string,\n useMap?: string,\n value?: string,\n width?: string,\n wrap?: string,\n onCopy?: JsxEvent.Clipboard.t => unit,\n onCut?: JsxEvent.Clipboard.t => unit,\n onPaste?: JsxEvent.Clipboard.t => unit,\n onCompositionEnd?: JsxEvent.Composition.t => unit,\n onCompositionStart?: JsxEvent.Composition.t => unit,\n onCompositionUpdate?: JsxEvent.Composition.t => unit,\n onKeyDown?: JsxEvent.Keyboard.t => unit,\n onKeyPress?: JsxEvent.Keyboard.t => unit,\n onKeyUp?: JsxEvent.Keyboard.t => unit,\n onFocus?: JsxEvent.Focus.t => unit,\n onBlur?: JsxEvent.Focus.t => unit,\n onBeforeInput?: JsxEvent.Form.t => unit,\n onChange?: JsxEvent.Form.t => unit,\n onInput?: JsxEvent.Form.t => unit,\n onReset?: JsxEvent.Form.t => unit,\n onSubmit?: JsxEvent.Form.t => unit,\n onInvalid?: JsxEvent.Form.t => unit,\n onClick?: JsxEvent.Mouse.t => unit,\n onContextMenu?: JsxEvent.Mouse.t => unit,\n onDoubleClick?: JsxEvent.Mouse.t => unit,\n onDrag?: JsxEvent.Mouse.t => unit,\n onDragEnd?: JsxEvent.Mouse.t => unit,\n onDragEnter?: JsxEvent.Mouse.t => unit,\n onDragExit?: JsxEvent.Mouse.t => unit,\n onDragLeave?: JsxEvent.Mouse.t => unit,\n onDragOver?: JsxEvent.Mouse.t => unit,\n onDragStart?: JsxEvent.Mouse.t => unit,\n onDrop?: JsxEvent.Mouse.t => unit,\n onMouseDown?: JsxEvent.Mouse.t => unit,\n onMouseEnter?: JsxEvent.Mouse.t => unit,\n onMouseLeave?: JsxEvent.Mouse.t => unit,\n onMouseMove?: JsxEvent.Mouse.t => unit,\n onMouseOut?: JsxEvent.Mouse.t => unit,\n onMouseOver?: JsxEvent.Mouse.t => unit,\n onMouseUp?: JsxEvent.Mouse.t => unit,\n onSelect?: JsxEvent.Selection.t => unit,\n onTouchCancel?: JsxEvent.Touch.t => unit,\n onTouchEnd?: JsxEvent.Touch.t => unit,\n onTouchMove?: JsxEvent.Touch.t => unit,\n onTouchStart?: JsxEvent.Touch.t => unit,\n onPointerOver?: JsxEvent.Pointer.t => unit,\n onPointerEnter?: JsxEvent.Pointer.t => unit,\n onPointerDown?: JsxEvent.Pointer.t => unit,\n onPointerMove?: JsxEvent.Pointer.t => unit,\n onPointerUp?: JsxEvent.Pointer.t => unit,\n onPointerCancel?: JsxEvent.Pointer.t => unit,\n onPointerOut?: JsxEvent.Pointer.t => unit,\n onPointerLeave?: JsxEvent.Pointer.t => unit,\n onGotPointerCapture?: JsxEvent.Pointer.t => unit,\n onLostPointerCapture?: JsxEvent.Pointer.t => unit,\n onScroll?: JsxEvent.UI.t => unit,\n onWheel?: JsxEvent.Wheel.t => unit,\n onAbort?: JsxEvent.Media.t => unit,\n onCanPlay?: JsxEvent.Media.t => unit,\n onCanPlayThrough?: JsxEvent.Media.t => unit,\n onDurationChange?: JsxEvent.Media.t => unit,\n onEmptied?: JsxEvent.Media.t => unit,\n onEncrypted?: JsxEvent.Media.t => unit,\n onEnded?: JsxEvent.Media.t => unit,\n onError?: JsxEvent.Media.t => unit,\n onLoadedData?: JsxEvent.Media.t => unit,\n onLoadedMetadata?: JsxEvent.Media.t => unit,\n onLoadStart?: JsxEvent.Media.t => unit,\n onPause?: JsxEvent.Media.t => unit,\n onPlay?: JsxEvent.Media.t => unit,\n onPlaying?: JsxEvent.Media.t => unit,\n onProgress?: JsxEvent.Media.t => unit,\n onRateChange?: JsxEvent.Media.t => unit,\n onSeeked?: JsxEvent.Media.t => unit,\n onSeeking?: JsxEvent.Media.t => unit,\n onStalled?: JsxEvent.Media.t => unit,\n onSuspend?: JsxEvent.Media.t => unit,\n onTimeUpdate?: JsxEvent.Media.t => unit,\n onVolumeChange?: JsxEvent.Media.t => unit,\n onWaiting?: JsxEvent.Media.t => unit,\n onLoad?: JsxEvent.Image.t => unit,\n onAnimationStart?: JsxEvent.Animation.t => unit,\n onAnimationEnd?: JsxEvent.Animation.t => unit,\n onAnimationIteration?: JsxEvent.Animation.t => unit,\n onTransitionEnd?: JsxEvent.Transition.t => unit,\n accentHeight?: string,\n accumulate?: string,\n additive?: string,\n alignmentBaseline?: string,\n allowReorder?: string,\n alphabetic?: string,\n amplitude?: string,\n arabicForm?: string,\n ascent?: string,\n attributeName?: string,\n attributeType?: string,\n autoReverse?: string,\n azimuth?: string,\n baseFrequency?: string,\n baseProfile?: string,\n baselineShift?: string,\n bbox?: string,\n begin?: string,\n begin_?: string,\n bias?: string,\n by?: string,\n calcMode?: string,\n capHeight?: string,\n clip?: string,\n clipPath?: string,\n clipPathUnits?: string,\n clipRule?: string,\n colorInterpolation?: string,\n colorInterpolationFilters?: string,\n colorProfile?: string,\n colorRendering?: string,\n contentScriptType?: string,\n contentStyleType?: string,\n cursor?: string,\n cx?: string,\n cy?: string,\n d?: string,\n decelerate?: string,\n descent?: string,\n diffuseConstant?: string,\n direction?: string,\n display?: string,\n divisor?: string,\n dominantBaseline?: string,\n dur?: string,\n dx?: string,\n dy?: string,\n edgeMode?: string,\n elevation?: string,\n enableBackground?: string,\n end?: string,\n end_?: string,\n exponent?: string,\n externalResourcesRequired?: string,\n fill?: string,\n fillOpacity?: string,\n fillRule?: string,\n filter?: string,\n filterRes?: string,\n filterUnits?: string,\n floodColor?: string,\n floodOpacity?: string,\n focusable?: string,\n fontFamily?: string,\n fontSize?: string,\n fontSizeAdjust?: string,\n fontStretch?: string,\n fontStyle?: string,\n fontVariant?: string,\n fontWeight?: string,\n fomat?: string,\n from?: string,\n fx?: string,\n fy?: string,\n g1?: string,\n g2?: string,\n glyphName?: string,\n glyphOrientationHorizontal?: string,\n glyphOrientationVertical?: string,\n glyphRef?: string,\n gradientTransform?: string,\n gradientUnits?: string,\n hanging?: string,\n horizAdvX?: string,\n horizOriginX?: string,\n ideographic?: string,\n imageRendering?: string,\n in_?: string,\n in2?: string,\n intercept?: string,\n k?: string,\n k1?: string,\n k2?: string,\n k3?: string,\n k4?: string,\n kernelMatrix?: string,\n kernelUnitLength?: string,\n kerning?: string,\n keyPoints?: string,\n keySplines?: string,\n keyTimes?: string,\n lengthAdjust?: string,\n letterSpacing?: string,\n lightingColor?: string,\n limitingConeAngle?: string,\n local?: string,\n markerEnd?: string,\n markerHeight?: string,\n markerMid?: string,\n markerStart?: string,\n markerUnits?: string,\n markerWidth?: string,\n mask?: string,\n maskContentUnits?: string,\n maskUnits?: string,\n mathematical?: string,\n mode?: string,\n numOctaves?: string,\n offset?: string,\n opacity?: string,\n operator?: string,\n order?: string,\n orient?: string,\n orientation?: string,\n origin?: string,\n overflow?: string,\n overflowX?: string,\n overflowY?: string,\n overlinePosition?: string,\n overlineThickness?: string,\n paintOrder?: string,\n panose1?: string,\n pathLength?: string,\n patternContentUnits?: string,\n patternTransform?: string,\n patternUnits?: string,\n pointerEvents?: string,\n points?: string,\n pointsAtX?: string,\n pointsAtY?: string,\n pointsAtZ?: string,\n preserveAlpha?: string,\n preserveAspectRatio?: string,\n primitiveUnits?: string,\n r?: string,\n radius?: string,\n refX?: string,\n refY?: string,\n renderingIntent?: string,\n repeatCount?: string,\n repeatDur?: string,\n requiredExtensions?: string,\n requiredFeatures?: string,\n restart?: string,\n result?: string,\n rotate?: string,\n rx?: string,\n ry?: string,\n scale?: string,\n seed?: string,\n shapeRendering?: string,\n slope?: string,\n spacing?: string,\n specularConstant?: string,\n specularExponent?: string,\n speed?: string,\n spreadMethod?: string,\n startOffset?: string,\n stdDeviation?: string,\n stemh?: string,\n stemv?: string,\n stitchTiles?: string,\n stopColor?: string,\n stopOpacity?: string,\n strikethroughPosition?: string,\n strikethroughThickness?: string,\n string?: string,\n stroke?: string,\n strokeDasharray?: string,\n strokeDashoffset?: string,\n strokeLinecap?: string,\n strokeLinejoin?: string,\n strokeMiterlimit?: string,\n strokeOpacity?: string,\n strokeWidth?: string,\n surfaceScale?: string,\n systemLanguage?: string,\n tableValues?: string,\n targetX?: string,\n targetY?: string,\n textAnchor?: string,\n textDecoration?: string,\n textLength?: string,\n textRendering?: string,\n to?: string,\n to_?: string,\n transform?: string,\n u1?: string,\n u2?: string,\n underlinePosition?: string,\n underlineThickness?: string,\n unicode?: string,\n unicodeBidi?: string,\n unicodeRange?: string,\n unitsPerEm?: string,\n vAlphabetic?: string,\n vHanging?: string,\n vIdeographic?: string,\n vMathematical?: string,\n values?: string,\n vectorEffect?: string,\n version?: string,\n vertAdvX?: string,\n vertAdvY?: string,\n vertOriginX?: string,\n vertOriginY?: string,\n viewBox?: string,\n viewTarget?: string,\n visibility?: string,\n widths?: string,\n wordSpacing?: string,\n writingMode?: string,\n x?: string,\n x1?: string,\n x2?: string,\n xChannelSelector?: string,\n xHeight?: string,\n xlinkActuate?: string,\n xlinkArcrole?: string,\n xlinkHref?: string,\n xlinkRole?: string,\n xlinkShow?: string,\n xlinkTitle?: string,\n xlinkType?: string,\n xmlns?: string,\n xmlnsXlink?: string,\n xmlBase?: string,\n xmlLang?: string,\n xmlSpace?: string,\n y?: string,\n y1?: string,\n y2?: string,\n yChannelSelector?: string,\n z?: string,\n zoomAndPan?: string,\n about?: string,\n datatype?: string,\n inlist?: string,\n prefix?: string,\n property?: string,\n resource?: string,\n typeof?: string,\n vocab?: string,\n dangerouslySetInnerHTML?: {\"__html\": string},\n suppressContentEditableWarning?: bool,\n}\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C39%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype Jsx.element\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22Jsx.res%22%2C24%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype domRef\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C26%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype popover =\n | @as(\"auto\") Auto\n | @as(\"manual\") Manual\n | @as(\"hint\") Hint\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C30%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype popoverTargetAction =\n | @as(\"toggle\") Toggle\n | @as(\"show\") Show\n | @as(\"hide\") Hide\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C34%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype style = JsxDOMStyle.t\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxDOM.res%22%2C25%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Clipboard.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C96%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Composition.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C108%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Keyboard.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C119%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Focus.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C143%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Form.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C155%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Mouse.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C164%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Selection.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C245%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Touch.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C254%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Pointer.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C195%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.UI.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C279%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Wheel.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C292%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Media.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C306%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Image.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C315%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Animation.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C324%2C2%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype JsxEvent.Transition.t = synthetic\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxEvent.res%22%2C337%2C2%5D)\n"}} Hover src/Completion.res 352:17 Nothing at that position. Now trying to use completion. diff --git a/tests/build_tests/jsx_settings_inheritance/node_modules/@rescript/react/src/ReactDOM.res b/tests/build_tests/jsx_settings_inheritance/node_modules/@rescript/react/src/ReactDOM.res index c406b220e9..5ffd5907b0 100644 --- a/tests/build_tests/jsx_settings_inheritance/node_modules/@rescript/react/src/ReactDOM.res +++ b/tests/build_tests/jsx_settings_inheritance/node_modules/@rescript/react/src/ReactDOM.res @@ -48,7 +48,7 @@ external unmountComponentAtNode: Dom.element => unit = "unmountComponentAtNode" external domElementToObj: Dom.element => {..} = "%identity" -type domRef = JsxDOM.domRef +type domRef = Jsx.DOM.domRef module Ref = { type t = domRef @@ -59,14 +59,14 @@ module Ref = { external callbackDomRef: callbackDomRef => domRef = "%identity" } -type domProps = JsxDOM.domProps +type domProps = Jsx.DOM.domProps @deprecated("Please use type ReactDOM.domProps") -type props = JsxDOM.domProps +type props = Jsx.DOM.domProps module Props = { @deprecated("Please use type ReactDOM.domProps") - type domProps = JsxDOM.domProps + type domProps = Jsx.DOM.domProps /** DEPRECATED */ @deriving(abstract) @@ -934,16 +934,16 @@ external createDOMElementVariadic: ( external someElement: React.element => option = "%identity" @module("react/jsx-runtime") -external jsx: (string, JsxDOM.domProps) => Jsx.element = "jsx" +external jsx: (string, Jsx.DOM.domProps) => Jsx.element = "jsx" @module("react/jsx-runtime") -external jsxKeyed: (string, JsxDOM.domProps, ~key: string=?, @ignore unit) => Jsx.element = "jsx" +external jsxKeyed: (string, Jsx.DOM.domProps, ~key: string=?, @ignore unit) => Jsx.element = "jsx" @module("react/jsx-runtime") -external jsxs: (string, JsxDOM.domProps) => Jsx.element = "jsxs" +external jsxs: (string, Jsx.DOM.domProps) => Jsx.element = "jsxs" @module("react/jsx-runtime") -external jsxsKeyed: (string, JsxDOM.domProps, ~key: string=?, @ignore unit) => Jsx.element = "jsxs" +external jsxsKeyed: (string, Jsx.DOM.domProps, ~key: string=?, @ignore unit) => Jsx.element = "jsxs" // Currently, not used by JSX ppx @deprecated("Please use ReactDOM.createElement instead.") From aaa17541d23046173e7afa4050af48b9a455b6b4 Mon Sep 17 00:00:00 2001 From: aspeddro Date: Sat, 19 Apr 2025 13:10:58 -0300 Subject: [PATCH 2/3] add Jsx_common.res --- lib/es6/Jsx.js | 4 +- lib/js/Jsx.js | 4 +- runtime/Jsx.res | 630 +-------------------------------------------- runtime/JsxDOM.res | 2 +- 4 files changed, 7 insertions(+), 633 deletions(-) diff --git a/lib/es6/Jsx.js b/lib/es6/Jsx.js index 96f99da84f..1c27d103bc 100644 --- a/lib/es6/Jsx.js +++ b/lib/es6/Jsx.js @@ -1,12 +1,12 @@ -let DOM = {}; - let DOMStyle; let Event; +let DOM; + export { DOMStyle, Event, diff --git a/lib/js/Jsx.js b/lib/js/Jsx.js index 75431e15cb..24b9a9b870 100644 --- a/lib/js/Jsx.js +++ b/lib/js/Jsx.js @@ -1,12 +1,12 @@ 'use strict'; -let DOM = {}; - let DOMStyle; let Event; +let DOM; + exports.DOMStyle = DOMStyle; exports.Event = Event; exports.DOM = DOM; diff --git a/runtime/Jsx.res b/runtime/Jsx.res index 84f139d3e6..caa3ede27a 100644 --- a/runtime/Jsx.res +++ b/runtime/Jsx.res @@ -22,633 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -type element -type ref - -@val external null: element = "null" - -external float: float => element = "%identity" -external int: int => element = "%identity" -external string: string => element = "%identity" - -external array: array => element = "%identity" - -type componentLike<'props, 'return> = 'props => 'return -type component<'props> = componentLike<'props, element> - -/* this function exists to prepare for making `component` abstract */ -external component: componentLike<'props, element> => component<'props> = "%identity" - +include Jsx_common module DOMStyle = JsxDOMStyle module Event = JsxEvent -module DOM = { - type style = DOMStyle.t - type domRef - /** - [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover) - */ - type popover = | @as("auto") Auto | @as("manual") Manual | @as("hint") Hint - /** - [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#popovertargetaction) - */ - type popoverTargetAction = | @as("toggle") Toggle | @as("show") Show | @as("hide") Hide - - /* - This list isn't exhaustive. We'll add more as we go. - */ - type domProps = { - key?: string, - children?: element, - ref?: domRef, - /* accessibility */ - /* https://www.w3.org/TR/wai-aria-1.1/ */ - /* https://accessibilityresources.org/ is a great resource for these */ - @as("aria-current") - ariaCurrent?: [#page | #step | #location | #date | #time | #"true" | #"false"], - @as("aria-details") - ariaDetails?: string, - @as("aria-disabled") - ariaDisabled?: bool, - @as("aria-hidden") - ariaHidden?: bool, - @as("aria-invalid") ariaInvalid?: [#grammar | #"false" | #spelling | #"true"], - @as("aria-keyshortcuts") - ariaKeyshortcuts?: string, - @as("aria-label") - ariaLabel?: string, - @as("aria-roledescription") - ariaRoledescription?: string, - /* Widget Attributes */ - @as("aria-autocomplete") ariaAutocomplete?: [#inline | #list | #both | #none], - /* https://www.w3.org/TR/wai-aria-1.1/#valuetype_tristate */ - @as("aria-checked") - ariaChecked?: [#"true" | #"false" | #mixed], - @as("aria-expanded") - ariaExpanded?: bool, - @as("aria-haspopup") - ariaHaspopup?: [#menu | #listbox | #tree | #grid | #dialog | #"true" | #"false"], - @as("aria-level") - ariaLevel?: int, - @as("aria-modal") - ariaModal?: bool, - @as("aria-multiline") - ariaMultiline?: bool, - @as("aria-multiselectable") - ariaMultiselectable?: bool, - @as("aria-orientation") ariaOrientation?: [#horizontal | #vertical | #undefined], - @as("aria-placeholder") - ariaPlaceholder?: string, - /* https://www.w3.org/TR/wai-aria-1.1/#valuetype_tristate */ - @as("aria-pressed") ariaPressed?: [#"true" | #"false" | #mixed], - @as("aria-readonly") - ariaReadonly?: bool, - @as("aria-required") - ariaRequired?: bool, - @as("aria-selected") - ariaSelected?: bool, - @as("aria-sort") - ariaSort?: string, - @as("aria-valuemax") - ariaValuemax?: float, - @as("aria-valuemin") - ariaValuemin?: float, - @as("aria-valuenow") - ariaValuenow?: float, - @as("aria-valuetext") - ariaValuetext?: string, - /* Live Region Attributes */ - @as("aria-atomic") - ariaAtomic?: bool, - @as("aria-busy") - ariaBusy?: bool, - @as("aria-live") ariaLive?: [#off | #polite | #assertive | #rude], - @as("aria-relevant") - ariaRelevant?: string, - /* Drag-and-Drop Attributes */ - @as("aria-dropeffect") ariaDropeffect?: [#copy | #move | #link | #execute | #popup | #none], - @as("aria-grabbed") - ariaGrabbed?: bool, - /* Relationship Attributes */ - @as("aria-activedescendant") - ariaActivedescendant?: string, - @as("aria-colcount") - ariaColcount?: int, - @as("aria-colindex") - ariaColindex?: int, - @as("aria-colspan") - ariaColspan?: int, - @as("aria-controls") - ariaControls?: string, - @as("aria-describedby") - ariaDescribedby?: string, - @as("aria-errormessage") - ariaErrormessage?: string, - @as("aria-flowto") - ariaFlowto?: string, - @as("aria-labelledby") - ariaLabelledby?: string, - @as("aria-owns") - ariaOwns?: string, - @as("aria-posinset") - ariaPosinset?: int, - @as("aria-rowcount") - ariaRowcount?: int, - @as("aria-rowindex") - ariaRowindex?: int, - @as("aria-rowspan") - ariaRowspan?: int, - @as("aria-setsize") - ariaSetsize?: int, - /* react textarea/input */ - defaultChecked?: bool, - defaultValue?: string, - /* global html attributes */ - accessKey?: string, - capture?: [#user | #environment], - className?: string /* substitute for "class" */, - contentEditable?: bool, - contextMenu?: string, - @as("data-testid") dataTestId?: string, - dir?: string /* "ltr", "rtl" or "auto" */, - draggable?: bool, - hidden?: bool, - id?: string, - inert?: bool, - lang?: string, - popover?: popover, - popoverTarget?: string, - popoverTargetAction?: popoverTargetAction, - role?: string /* ARIA role */, - style?: style, - spellCheck?: bool, - tabIndex?: int, - title?: string, - /* html5 microdata */ - itemID?: string, - itemProp?: string, - itemRef?: string, - itemScope?: bool, - itemType?: string /* uri */, - /* tag-specific html attributes */ - accept?: string, - acceptCharset?: string, - action?: string /* uri */, - allowFullScreen?: bool, - alt?: string, - @as("as") - as_?: string, - async?: bool, - autoComplete?: string /* has a fixed, but large-ish, set of possible values */, - autoCapitalize?: string /* Mobile Safari specific */, - autoFocus?: bool, - autoPlay?: bool, - challenge?: string, - charSet?: string, - checked?: bool, - cite?: string /* uri */, - crossOrigin?: string /* anonymous, use-credentials */, - cols?: int, - colSpan?: int, - content?: string, - controls?: bool, - coords?: string /* set of values specifying the coordinates of a region */, - data?: string /* uri */, - dateTime?: string /* "valid date string with optional time" */, - default?: bool, - defer?: bool, - disabled?: bool, - download?: string /* should really be either a boolean, signifying presence, or a string */, - encType?: string /* "application/x-www-form-urlencoded", "multipart/form-data" or "text/plain" */, - form?: string, - formAction?: string /* uri */, - formTarget?: string /* "_blank", "_self", etc. */, - formMethod?: string /* "post", "get", "put" */, - headers?: string, - height?: string /* in html5 this can only be a number, but in html4 it can ba a percentage as well */, - high?: int, - href?: string /* uri */, - hrefLang?: string, - htmlFor?: string /* substitute for "for" */, - httpEquiv?: string /* has a fixed set of possible values */, - icon?: string /* uri? */, - inputMode?: string /* "verbatim", "latin", "numeric", etc. */, - integrity?: string, - keyType?: string, - kind?: string /* has a fixed set of possible values */, - label?: string, - list?: string, - loading?: [#lazy | #eager], - loop?: bool, - low?: int, - manifest?: string /* uri */, - max?: string /* should be int or Date.t */, - maxLength?: int, - media?: string /* a valid media query */, - mediaGroup?: string, - method?: string /* "post" or "get" */, - min?: string, - minLength?: int, - multiple?: bool, - muted?: bool, - name?: string, - nonce?: string, - noValidate?: bool, - @as("open") - open_?: bool /* use this one. Previous one is deprecated */, - optimum?: int, - pattern?: string /* valid Js RegExp */, - placeholder?: string, - playsInline?: bool, - poster?: string /* uri */, - preload?: string /* "none", "metadata" or "auto" (and "" as a synonym for "auto") */, - radioGroup?: string, - readOnly?: bool, - rel?: string /* a space- or comma-separated (depending on the element) list of a fixed set of "link types" */, - required?: bool, - reversed?: bool, - rows?: int, - rowSpan?: int, - sandbox?: string /* has a fixed set of possible values */, - scope?: string /* has a fixed set of possible values */, - scoped?: bool, - scrolling?: string /* html4 only, "auto", "yes" or "no" */, - /* seamless - supported by React, but removed from the html5 spec */ - selected?: bool, - shape?: string, - size?: int, - sizes?: string, - span?: int, - src?: string /* uri */, - srcDoc?: string, - srcLang?: string, - srcSet?: string, - start?: int, - step?: float, - summary?: string /* deprecated */, - target?: string, - @as("type") - type_?: string /* has a fixed but large-ish set of possible values */ /* use this one. Previous one is deprecated */, - useMap?: string, - value?: string, - width?: string /* in html5 this can only be a number, but in html4 it can ba a percentage as well */, - wrap?: string /* "hard" or "soft" */, - /* Clipboard events */ - onCopy?: JsxEvent.Clipboard.t => unit, - onCut?: JsxEvent.Clipboard.t => unit, - onPaste?: JsxEvent.Clipboard.t => unit, - /* Composition events */ - onCompositionEnd?: JsxEvent.Composition.t => unit, - onCompositionStart?: JsxEvent.Composition.t => unit, - onCompositionUpdate?: JsxEvent.Composition.t => unit, - /* Keyboard events */ - onKeyDown?: JsxEvent.Keyboard.t => unit, - onKeyPress?: JsxEvent.Keyboard.t => unit, - onKeyUp?: JsxEvent.Keyboard.t => unit, - /* Focus events */ - onFocus?: JsxEvent.Focus.t => unit, - onBlur?: JsxEvent.Focus.t => unit, - /* Form events */ - onBeforeInput?: JsxEvent.Form.t => unit, - onChange?: JsxEvent.Form.t => unit, - onInput?: JsxEvent.Form.t => unit, - onReset?: JsxEvent.Form.t => unit, - onSubmit?: JsxEvent.Form.t => unit, - onInvalid?: JsxEvent.Form.t => unit, - /* Mouse events */ - onClick?: JsxEvent.Mouse.t => unit, - onContextMenu?: JsxEvent.Mouse.t => unit, - onDoubleClick?: JsxEvent.Mouse.t => unit, - onDrag?: JsxEvent.Mouse.t => unit, - onDragEnd?: JsxEvent.Mouse.t => unit, - onDragEnter?: JsxEvent.Mouse.t => unit, - onDragExit?: JsxEvent.Mouse.t => unit, - onDragLeave?: JsxEvent.Mouse.t => unit, - onDragOver?: JsxEvent.Mouse.t => unit, - onDragStart?: JsxEvent.Mouse.t => unit, - onDrop?: JsxEvent.Mouse.t => unit, - onMouseDown?: JsxEvent.Mouse.t => unit, - onMouseEnter?: JsxEvent.Mouse.t => unit, - onMouseLeave?: JsxEvent.Mouse.t => unit, - onMouseMove?: JsxEvent.Mouse.t => unit, - onMouseOut?: JsxEvent.Mouse.t => unit, - onMouseOver?: JsxEvent.Mouse.t => unit, - onMouseUp?: JsxEvent.Mouse.t => unit, - /* Selection events */ - onSelect?: JsxEvent.Selection.t => unit, - /* Touch events */ - onTouchCancel?: JsxEvent.Touch.t => unit, - onTouchEnd?: JsxEvent.Touch.t => unit, - onTouchMove?: JsxEvent.Touch.t => unit, - onTouchStart?: JsxEvent.Touch.t => unit, - // Pointer events - onPointerOver?: JsxEvent.Pointer.t => unit, - onPointerEnter?: JsxEvent.Pointer.t => unit, - onPointerDown?: JsxEvent.Pointer.t => unit, - onPointerMove?: JsxEvent.Pointer.t => unit, - onPointerUp?: JsxEvent.Pointer.t => unit, - onPointerCancel?: JsxEvent.Pointer.t => unit, - onPointerOut?: JsxEvent.Pointer.t => unit, - onPointerLeave?: JsxEvent.Pointer.t => unit, - onGotPointerCapture?: JsxEvent.Pointer.t => unit, - onLostPointerCapture?: JsxEvent.Pointer.t => unit, - /* UI events */ - onScroll?: JsxEvent.UI.t => unit, - /* Wheel events */ - onWheel?: JsxEvent.Wheel.t => unit, - /* Media events */ - onAbort?: JsxEvent.Media.t => unit, - onCanPlay?: JsxEvent.Media.t => unit, - onCanPlayThrough?: JsxEvent.Media.t => unit, - onDurationChange?: JsxEvent.Media.t => unit, - onEmptied?: JsxEvent.Media.t => unit, - onEncrypted?: JsxEvent.Media.t => unit, - onEnded?: JsxEvent.Media.t => unit, - onError?: JsxEvent.Media.t => unit, - onLoadedData?: JsxEvent.Media.t => unit, - onLoadedMetadata?: JsxEvent.Media.t => unit, - onLoadStart?: JsxEvent.Media.t => unit, - onPause?: JsxEvent.Media.t => unit, - onPlay?: JsxEvent.Media.t => unit, - onPlaying?: JsxEvent.Media.t => unit, - onProgress?: JsxEvent.Media.t => unit, - onRateChange?: JsxEvent.Media.t => unit, - onSeeked?: JsxEvent.Media.t => unit, - onSeeking?: JsxEvent.Media.t => unit, - onStalled?: JsxEvent.Media.t => unit, - onSuspend?: JsxEvent.Media.t => unit, - onTimeUpdate?: JsxEvent.Media.t => unit, - onVolumeChange?: JsxEvent.Media.t => unit, - onWaiting?: JsxEvent.Media.t => unit, - /* Image events */ - onLoad?: JsxEvent.Image.t => unit /* duplicate */ /* ~onError: ReactEvent.Image.t => unit=?, */, - /* Animation events */ - onAnimationStart?: JsxEvent.Animation.t => unit, - onAnimationEnd?: JsxEvent.Animation.t => unit, - onAnimationIteration?: JsxEvent.Animation.t => unit, - /* Transition events */ - onTransitionEnd?: JsxEvent.Transition.t => unit, - /* svg */ - accentHeight?: string, - accumulate?: string, - additive?: string, - alignmentBaseline?: string, - allowReorder?: string, - alphabetic?: string, - amplitude?: string, - arabicForm?: string, - ascent?: string, - attributeName?: string, - attributeType?: string, - autoReverse?: string, - azimuth?: string, - baseFrequency?: string, - baseProfile?: string, - baselineShift?: string, - bbox?: string, - begin?: string, - @deprecated("Please use begin") - begin_?: string, - bias?: string, - by?: string, - calcMode?: string, - capHeight?: string, - clip?: string, - clipPath?: string, - clipPathUnits?: string, - clipRule?: string, - colorInterpolation?: string, - colorInterpolationFilters?: string, - colorProfile?: string, - colorRendering?: string, - contentScriptType?: string, - contentStyleType?: string, - cursor?: string, - cx?: string, - cy?: string, - d?: string, - decelerate?: string, - descent?: string, - diffuseConstant?: string, - direction?: string, - display?: string, - divisor?: string, - dominantBaseline?: string, - dur?: string, - dx?: string, - dy?: string, - edgeMode?: string, - elevation?: string, - enableBackground?: string, - end?: string, - @deprecated("Please use end") - end_?: string, - exponent?: string, - externalResourcesRequired?: string, - fill?: string, - fillOpacity?: string, - fillRule?: string, - filter?: string, - filterRes?: string, - filterUnits?: string, - floodColor?: string, - floodOpacity?: string, - focusable?: string, - fontFamily?: string, - fontSize?: string, - fontSizeAdjust?: string, - fontStretch?: string, - fontStyle?: string, - fontVariant?: string, - fontWeight?: string, - fomat?: string, - from?: string, - fx?: string, - fy?: string, - g1?: string, - g2?: string, - glyphName?: string, - glyphOrientationHorizontal?: string, - glyphOrientationVertical?: string, - glyphRef?: string, - gradientTransform?: string, - gradientUnits?: string, - hanging?: string, - horizAdvX?: string, - horizOriginX?: string, - ideographic?: string, - imageRendering?: string, - @as("in") - in_?: string /* use this one. Previous one is deprecated */, - in2?: string, - intercept?: string, - k?: string, - k1?: string, - k2?: string, - k3?: string, - k4?: string, - kernelMatrix?: string, - kernelUnitLength?: string, - kerning?: string, - keyPoints?: string, - keySplines?: string, - keyTimes?: string, - lengthAdjust?: string, - letterSpacing?: string, - lightingColor?: string, - limitingConeAngle?: string, - local?: string, - markerEnd?: string, - markerHeight?: string, - markerMid?: string, - markerStart?: string, - markerUnits?: string, - markerWidth?: string, - mask?: string, - maskContentUnits?: string, - maskUnits?: string, - mathematical?: string, - mode?: string, - numOctaves?: string, - offset?: string, - opacity?: string, - operator?: string, - order?: string, - orient?: string, - orientation?: string, - origin?: string, - overflow?: string, - overflowX?: string, - overflowY?: string, - overlinePosition?: string, - overlineThickness?: string, - paintOrder?: string, - panose1?: string, - pathLength?: string, - patternContentUnits?: string, - patternTransform?: string, - patternUnits?: string, - pointerEvents?: string, - points?: string, - pointsAtX?: string, - pointsAtY?: string, - pointsAtZ?: string, - preserveAlpha?: string, - preserveAspectRatio?: string, - primitiveUnits?: string, - r?: string, - radius?: string, - refX?: string, - refY?: string, - renderingIntent?: string, - repeatCount?: string, - repeatDur?: string, - requiredExtensions?: string, - requiredFeatures?: string, - restart?: string, - result?: string, - rotate?: string, - rx?: string, - ry?: string, - scale?: string, - seed?: string, - shapeRendering?: string, - slope?: string, - spacing?: string, - specularConstant?: string, - specularExponent?: string, - speed?: string, - spreadMethod?: string, - startOffset?: string, - stdDeviation?: string, - stemh?: string, - stemv?: string, - stitchTiles?: string, - stopColor?: string, - stopOpacity?: string, - strikethroughPosition?: string, - strikethroughThickness?: string, - string?: string, - stroke?: string, - strokeDasharray?: string, - strokeDashoffset?: string, - strokeLinecap?: string, - strokeLinejoin?: string, - strokeMiterlimit?: string, - strokeOpacity?: string, - strokeWidth?: string, - surfaceScale?: string, - systemLanguage?: string, - tableValues?: string, - targetX?: string, - targetY?: string, - textAnchor?: string, - textDecoration?: string, - textLength?: string, - textRendering?: string, - to?: string, - @deprecated("Please use to") - to_?: string, - transform?: string, - u1?: string, - u2?: string, - underlinePosition?: string, - underlineThickness?: string, - unicode?: string, - unicodeBidi?: string, - unicodeRange?: string, - unitsPerEm?: string, - vAlphabetic?: string, - vHanging?: string, - vIdeographic?: string, - vMathematical?: string, - values?: string, - vectorEffect?: string, - version?: string, - vertAdvX?: string, - vertAdvY?: string, - vertOriginX?: string, - vertOriginY?: string, - viewBox?: string, - viewTarget?: string, - visibility?: string, - /* width::string? => */ - widths?: string, - wordSpacing?: string, - writingMode?: string, - x?: string, - x1?: string, - x2?: string, - xChannelSelector?: string, - xHeight?: string, - xlinkActuate?: string, - xlinkArcrole?: string, - xlinkHref?: string, - xlinkRole?: string, - xlinkShow?: string, - xlinkTitle?: string, - xlinkType?: string, - xmlns?: string, - xmlnsXlink?: string, - xmlBase?: string, - xmlLang?: string, - xmlSpace?: string, - y?: string, - y1?: string, - y2?: string, - yChannelSelector?: string, - z?: string, - zoomAndPan?: string, - /* RDFa */ - about?: string, - datatype?: string, - inlist?: string, - prefix?: string, - property?: string, - resource?: string, - typeof?: string, - vocab?: string, - /* react-specific */ - dangerouslySetInnerHTML?: {"__html": string}, - suppressContentEditableWarning?: bool, - } -} +module DOM = JsxDOM diff --git a/runtime/JsxDOM.res b/runtime/JsxDOM.res index 2fe359abe5..e287a6b10e 100644 --- a/runtime/JsxDOM.res +++ b/runtime/JsxDOM.res @@ -39,7 +39,7 @@ type popoverTargetAction = | @as("toggle") Toggle | @as("show") Show | @as("hide */ type domProps = { key?: string, - children?: Jsx.element, + children?: Jsx_common.element, ref?: domRef, /* accessibility */ /* https://www.w3.org/TR/wai-aria-1.1/ */ From 62c24a13ad95a7f7bbddfa0e455ebf0f171542f6 Mon Sep 17 00:00:00 2001 From: aspeddro Date: Sat, 19 Apr 2025 13:11:27 -0300 Subject: [PATCH 3/3] update lib/ --- lib/es6/Jsx_common.js | 1 + lib/js/Jsx_common.js | 1 + runtime/Jsx_common.res | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 lib/es6/Jsx_common.js create mode 100644 lib/js/Jsx_common.js create mode 100644 runtime/Jsx_common.res diff --git a/lib/es6/Jsx_common.js b/lib/es6/Jsx_common.js new file mode 100644 index 0000000000..ae1b9f17e6 --- /dev/null +++ b/lib/es6/Jsx_common.js @@ -0,0 +1 @@ +/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/lib/js/Jsx_common.js b/lib/js/Jsx_common.js new file mode 100644 index 0000000000..ae1b9f17e6 --- /dev/null +++ b/lib/js/Jsx_common.js @@ -0,0 +1 @@ +/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/runtime/Jsx_common.res b/runtime/Jsx_common.res new file mode 100644 index 0000000000..fd9735b9c1 --- /dev/null +++ b/runtime/Jsx_common.res @@ -0,0 +1,40 @@ +/* Copyright (C) 2022- Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +type element +type ref + +@val external null: element = "null" + +external float: float => element = "%identity" +external int: int => element = "%identity" +external string: string => element = "%identity" + +external array: array => element = "%identity" + +type componentLike<'props, 'return> = 'props => 'return +type component<'props> = componentLike<'props, element> + +/* this function exists to prepare for making `component` abstract */ +external component: componentLike<'props, element> => component<'props> = "%identity"