diff --git a/package-lock.json b/package-lock.json index be0cbd5..5774e56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,16 @@ { "name": "@rescript/react", "version": "0.15.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@rescript/react", "version": "0.15.0", "license": "MIT", + "dependencies": { + "@rescript/webapi": "0.1.0-experimental-61b1074" + }, "devDependencies": { "react": "^19.2.0", "react-dom": "^19.2.0", @@ -26,7 +29,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "optional": true, "os": [ @@ -43,7 +45,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "optional": true, "os": [ @@ -60,7 +61,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "optional": true, "os": [ @@ -77,7 +77,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "optional": true, "os": [ @@ -94,6 +93,15 @@ "license": "MIT", "peer": true }, + "node_modules/@rescript/webapi": { + "version": "0.1.0-experimental-61b1074", + "resolved": "https://registry.npmjs.org/@rescript/webapi/-/webapi-0.1.0-experimental-61b1074.tgz", + "integrity": "sha512-m9dg8Hsly/h/pngaqZYSgr3FSR2F2gyKCvPH5y3Xt1Fnd6BYKSxwhdAQWDy93xMHGt/RSjRXS7az9ltLDoYtwA==", + "license": "MIT", + "peerDependencies": { + "rescript": ">=12.0.0 <13" + } + }, "node_modules/@rescript/win32-x64": { "version": "12.2.0", "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.2.0.tgz", @@ -101,7 +109,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "optional": true, "os": [ @@ -112,9 +119,9 @@ } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", "dev": true, "license": "MIT", "peer": true, @@ -123,24 +130,24 @@ } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", "dev": true, "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.5" } }, "node_modules/rescript": { "version": "12.2.0", "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.2.0.tgz", "integrity": "sha512-1Jf2cmNhyx5Mj2vwZ4XXPcXvNSjGj9D1jPBUcoqIOqRpLPo1ch2Ta/7eWh23xAHWHK5ow7BCDyYFjvZSjyjLzg==", - "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", + "peer": true, "workspaces": [ "packages/playground", "packages/@rescript/*", @@ -180,84 +187,5 @@ "dev": true, "license": "MIT" } - }, - "dependencies": { - "@rescript/darwin-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.2.0.tgz", - "integrity": "sha512-xc3K/J7Ujl1vPiFY2009mRf3kWRlUe/VZyJWprseKxlcEtUQv89ter7r6pY+YFbtYvA/fcaEncL9CVGEdattAg==", - "dev": true, - "optional": true - }, - "@rescript/darwin-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.2.0.tgz", - "integrity": "sha512-qqcTvnlSeoKkywLjG7cXfYvKZ1e4Gz2kUKcD6SiqDgCqm8TF+spwlFAiM6sloRUOFsc0bpC/0R0B3yr01FCB1A==", - "dev": true, - "optional": true - }, - "@rescript/linux-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.2.0.tgz", - "integrity": "sha512-ODmpG3ji+Nj/8d5yvXkeHlfKkmbw1Q4t1iIjVuNwtmFpz7TiEa7n/sQqoYdE+WzbDX3DoJfmJNbp3Ob7qCUoOg==", - "dev": true, - "optional": true - }, - "@rescript/linux-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.2.0.tgz", - "integrity": "sha512-2W9Y9/g19Y4F/subl8yV3T8QBG2oRaP+HciNRcBjptyEdw9LmCKH8+rhWO6sp3E+nZLwoE2IAkwH0WKV3wqlxQ==", - "dev": true, - "optional": true - }, - "@rescript/runtime": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.2.0.tgz", - "integrity": "sha512-NwfljDRq1rjFPHUaca1nzFz13xsa9ZGkBkLvMhvVgavJT5+A4rMcLu8XAaVTi/oAhO/tlHf9ZDoOTF1AfyAk9Q==", - "peer": true - }, - "@rescript/win32-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.2.0.tgz", - "integrity": "sha512-fhf8CBj3p1lkIXPeNko3mVTKQfXXm4BoxJtR1xAXxUn43wDpd8Lox4w8/EPBbbW6C/YFQW6H7rtpY+2AKuNaDA==", - "dev": true, - "optional": true - }, - "react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", - "dev": true, - "peer": true - }, - "react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", - "dev": true, - "requires": { - "scheduler": "^0.27.0" - } - }, - "rescript": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.2.0.tgz", - "integrity": "sha512-1Jf2cmNhyx5Mj2vwZ4XXPcXvNSjGj9D1jPBUcoqIOqRpLPo1ch2Ta/7eWh23xAHWHK5ow7BCDyYFjvZSjyjLzg==", - "dev": true, - "requires": { - "@rescript/darwin-arm64": "12.2.0", - "@rescript/darwin-x64": "12.2.0", - "@rescript/linux-arm64": "12.2.0", - "@rescript/linux-x64": "12.2.0", - "@rescript/runtime": "12.2.0", - "@rescript/win32-x64": "12.2.0" - } - }, - "scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 3762776..919e153 100644 --- a/package.json +++ b/package.json @@ -37,5 +37,8 @@ "@rescript/runtime": ">=12.0.0", "react": ">=19.2.0", "react-dom": ">=19.2.0" + }, + "dependencies": { + "@rescript/webapi": "0.1.0-experimental-61b1074" } } \ No newline at end of file diff --git a/rescript.json b/rescript.json index a0897f3..a180113 100644 --- a/rescript.json +++ b/rescript.json @@ -5,7 +5,8 @@ }, "sources": [ { - "dir": "src" + "dir": "src", + "subdirs": true } ], "package-specs": [ @@ -14,5 +15,10 @@ "in-source": true } ], - "suffix": ".res.js" + "suffix": ".res.js", + "dependencies": [ + "@rescript/webapi" + ], + "dev-dependencies": [], + "compiler-flags": [] } \ No newline at end of file diff --git a/src/ReactDOM.res b/src/ReactDOM.res index 7e094ef..324bffe 100644 --- a/src/ReactDOM.res +++ b/src/ReactDOM.res @@ -6,8 +6,11 @@ calls and add the appropriate `require("react-dom")` in the file calling this `render` */ // Helper so that ReactDOM itself doesn't bring any runtime + +open WebAPI + @val @return(nullable) -external querySelector: string => option = "document.querySelector" +external querySelector: string => option = "document.querySelector" module Client = { module Root = { @@ -19,10 +22,10 @@ module Client = { } @module("react-dom/client") - external createRoot: Dom.element => Root.t = "createRoot" + external createRoot: DOMAPI.element => Root.t = "createRoot" @module("react-dom/client") - external hydrateRoot: (Dom.element, React.element) => Root.t = "hydrateRoot" + external hydrateRoot: (DOMAPI.element, React.element) => Root.t = "hydrateRoot" } // Very rudimentary form data bindings @@ -72,9 +75,9 @@ module FormData = { } @module("react-dom") -external createPortal: (React.element, Dom.element) => React.element = "createPortal" +external createPortal: (React.element, DOMAPI.element) => React.element = "createPortal" -external domElementToObj: Dom.element => {..} = "%identity" +external domElementToObj: DOMAPI.element => {..} = "%identity" type style = ReactDOMStyle.t @@ -82,8 +85,8 @@ type domRef = JsxDOM.domRef module Ref = { type t = domRef - type currentDomRef = React.ref> - type callbackDomRef = nullable => option unit> + type currentDomRef = React.ref> + type callbackDomRef = nullable => option unit> external domRef: currentDomRef => domRef = "%identity" external callbackDomRef: callbackDomRef => domRef = "%identity" diff --git a/src/ReactEvent.res b/src/ReactEvent.res index 54ac591..1eba918 100644 --- a/src/ReactEvent.res +++ b/src/ReactEvent.res @@ -5,40 +5,43 @@ module MakeEventWithType = ( type t }, ) => { + open WebAPI + @get external bubbles: Type.t => bool = "bubbles" @get external cancelable: Type.t => bool = "cancelable" @get - external currentTarget: Type.t => {..} = "currentTarget" /* Should return Dom.eventTarget */ + external currentTarget: Type.t => DOMAPI.node = "currentTarget" @get external defaultPrevented: Type.t => bool = "defaultPrevented" @get external eventPhase: Type.t => int = "eventPhase" @get external isTrusted: Type.t => bool = "isTrusted" - @get external nativeEvent: Type.t => {..} = "nativeEvent" /* Should return Dom.event */ + @get external nativeEvent: Type.t => EventAPI.event = "nativeEvent" @send external preventDefault: Type.t => unit = "preventDefault" @send external isDefaultPrevented: Type.t => bool = "isDefaultPrevented" @send external stopPropagation: Type.t => unit = "stopPropagation" @send external isPropagationStopped: Type.t => bool = "isPropagationStopped" - @get external target: Type.t => {..} = "target" /* Should return Dom.eventTarget */ + @get external target: Type.t => DOMAPI.node = "target" @get external timeStamp: Type.t => float = "timeStamp" @get external type_: Type.t => string = "type" @send external persist: Type.t => unit = "persist" } +open WebAPI + module Synthetic = { type tag = JsxEvent.Synthetic.tag type t = synthetic @get external bubbles: synthetic<'a> => bool = "bubbles" @get external cancelable: synthetic<'a> => bool = "cancelable" @get - external currentTarget: synthetic<'a> => {..} = - "currentTarget" /* Should return Dom.eventTarget */ + external currentTarget: synthetic<'a> => DOMAPI.node = "currentTarget" @get external defaultPrevented: synthetic<'a> => bool = "defaultPrevented" @get external eventPhase: synthetic<'a> => int = "eventPhase" @get external isTrusted: synthetic<'a> => bool = "isTrusted" @get - external nativeEvent: synthetic<'a> => {..} = "nativeEvent" /* Should return Dom.event */ + external nativeEvent: synthetic<'a> => EventAPI.event = "nativeEvent" @send external preventDefault: synthetic<'a> => unit = "preventDefault" @send @@ -47,7 +50,7 @@ module Synthetic = { external stopPropagation: synthetic<'a> => unit = "stopPropagation" @send external isPropagationStopped: synthetic<'a> => bool = "isPropagationStopped" - @get external target: synthetic<'a> => {..} = "target" /* Should return Dom.eventTarget */ + @get external target: synthetic<'a> => DOMAPI.node = "target" @get external timeStamp: synthetic<'a> => float = "timeStamp" @get external type_: synthetic<'a> => string = "type" @send external persist: synthetic<'a> => unit = "persist" @@ -59,8 +62,9 @@ external toSyntheticEvent: synthetic<'a> => Synthetic.t = "%identity" module Clipboard = { type tag = JsxEvent.Clipboard.tag type t = synthetic + include MakeEventWithType({type t = t}) - @get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */ + @get external clipboardData: t => WebAPI.UIEventsAPI.dataTransfer = "clipboardData" } module Composition = { @@ -95,7 +99,7 @@ module Focus = { type t = synthetic include MakeEventWithType({type t = t}) @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" } module Form = { @@ -122,7 +126,7 @@ module Mouse = { @get external pageX: t => int = "pageX" @get external pageY: t => int = "pageY" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" @get external screenX: t => int = "screenX" @get external screenY: t => int = "screenY" @get external shiftKey: t => bool = "shiftKey" @@ -135,7 +139,7 @@ module Pointer = { // UIEvent @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => DOMAPI.window = "view" // MouseEvent @get external screenX: t => int = "screenX" @@ -158,7 +162,7 @@ module Pointer = { @get external buttons: t => int = "buttons" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" // PointerEvent @get external pointerId: t => Dom.eventPointerId = "pointerId" @@ -184,14 +188,14 @@ module Touch = { type t = synthetic include MakeEventWithType({type t = t}) @get external altKey: t => bool = "altKey" - @get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */ + @get external changedTouches: t => UIEventsAPI.touchList = "changedTouches" @get external ctrlKey: t => bool = "ctrlKey" @send external getModifierState: (t, string) => bool = "getModifierState" @get external metaKey: t => bool = "metaKey" @get external shiftKey: t => bool = "shiftKey" - @get external targetTouches: t => {..} = "targetTouches" /* Should return Dom.touchList */ - @get external touches: t => {..} = "touches" /* Should return Dom.touchList */ + @get external targetTouches: t => UIEventsAPI.touchList = "targetTouches" + @get external touches: t => UIEventsAPI.touchList = "touches" } module UI = { @@ -199,7 +203,7 @@ module UI = { type t = synthetic include MakeEventWithType({type t = t}) @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => DOMAPI.window = "view" } module Wheel = { diff --git a/src/ReactEvent.resi b/src/ReactEvent.resi index 61b5d4b..eb9132c 100644 --- a/src/ReactEvent.resi +++ b/src/ReactEvent.resi @@ -38,19 +38,21 @@ */ type synthetic<'a> = JsxEvent.synthetic<'a> +open WebAPI + module Synthetic: { type tag = JsxEvent.Synthetic.tag type t = synthetic @get external bubbles: synthetic<'a> => bool = "bubbles" @get external cancelable: synthetic<'a> => bool = "cancelable" @get - external currentTarget: synthetic<'a> => {..} = "currentTarget" + external currentTarget: synthetic<'a> => DOMAPI.node = "currentTarget" @get external defaultPrevented: synthetic<'a> => bool = "defaultPrevented" @get external eventPhase: synthetic<'a> => int = "eventPhase" @get external isTrusted: synthetic<'a> => bool = "isTrusted" @get - external nativeEvent: synthetic<'a> => {..} = "nativeEvent" + external nativeEvent: synthetic<'a> => EventAPI.event = "nativeEvent" @send external preventDefault: synthetic<'a> => unit = "preventDefault" @send @@ -59,7 +61,7 @@ module Synthetic: { external stopPropagation: synthetic<'a> => unit = "stopPropagation" @send external isPropagationStopped: synthetic<'a> => bool = "isPropagationStopped" - @get external target: synthetic<'a> => {..} = "target" + @get external target: synthetic<'a> => DOMAPI.node = "target" @get external timeStamp: synthetic<'a> => float = "timeStamp" @get external type_: synthetic<'a> => string = "type" @send external persist: synthetic<'a> => unit = "persist" @@ -73,20 +75,20 @@ module Clipboard: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" - @get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */ + @get external clipboardData: t => WebAPI.UIEventsAPI.dataTransfer = "clipboardData" } module Composition: { @@ -94,16 +96,16 @@ module Composition: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -115,16 +117,16 @@ module Keyboard: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -149,21 +151,21 @@ module Focus: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" } module Form: { @@ -171,16 +173,16 @@ module Form: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -191,16 +193,16 @@ module Mouse: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -218,7 +220,7 @@ module Mouse: { @get external pageX: t => int = "pageX" @get external pageY: t => int = "pageY" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" @get external screenX: t => int = "screenX" @get external screenY: t => int = "screenY" @get external shiftKey: t => bool = "shiftKey" @@ -230,8 +232,8 @@ module Pointer: { // Event @get external type_: t => string = "type" - @get external target: t => {..} = "target" - @get external currentTarget: t => {..} = "currentTarget" + @get external target: t => DOMAPI.node = "target" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external eventPhase: t => int = "eventPhase" @@ -245,14 +247,14 @@ module Pointer: { @get external timeStamp: t => float = "timeStamp" // SyntheticEvent - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external isPropagationStopped: t => bool = "isPropagationStopped" @send external persist: t => unit = "persist" // UIEvent @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => DOMAPI.window = "view" // MouseEvent @get external screenX: t => int = "screenX" @@ -275,7 +277,7 @@ module Pointer: { @get external buttons: t => int = "buttons" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" // PointerEvent @get external pointerId: t => Dom.eventPointerId = "pointerId" @@ -295,16 +297,16 @@ module Selection: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -315,28 +317,28 @@ module Touch: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get external altKey: t => bool = "altKey" - @get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */ + @get external changedTouches: t => UIEventsAPI.touchList = "changedTouches" @get external ctrlKey: t => bool = "ctrlKey" @send external getModifierState: (t, string) => bool = "getModifierState" @get external metaKey: t => bool = "metaKey" @get external shiftKey: t => bool = "shiftKey" - @get external targetTouches: t => {..} = "targetTouches" /* Should return Dom.touchList */ - @get external touches: t => {..} = "touches" /* Should return Dom.touchList */ + @get external targetTouches: t => UIEventsAPI.touchList = "targetTouches" + @get external touches: t => UIEventsAPI.touchList = "touches" } module UI: { @@ -344,21 +346,21 @@ module UI: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => DOMAPI.window = "view" } module Wheel: { @@ -366,16 +368,16 @@ module Wheel: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -390,16 +392,16 @@ module Media: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -410,16 +412,16 @@ module Image: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -430,16 +432,16 @@ module Animation: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -453,16 +455,16 @@ module Transition: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => DOMAPI.node = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => EventAPI.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => DOMAPI.node = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist"