diff --git a/CHANGELOG.md b/CHANGELOG.md index b749d19..4b9e635 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,12 @@ > - :house: [Internal] > - :nail_care: [Polish] +## Unreleased + +#### :rocket: New Feature + +- Add `ReactEvent.Toggle` with typed `oldState`, `newState`, and optional `source` accessors and synthetic-event helpers. + ## 0.16.0-beta.1 #### :boom: Breaking Change diff --git a/src/ReactEvent.res b/src/ReactEvent.res index 54ac591..6c82589 100644 --- a/src/ReactEvent.res +++ b/src/ReactEvent.res @@ -241,3 +241,15 @@ module Transition = { @get external pseudoElement: t => string = "pseudoElement" @get external elapsedTime: t => float = "elapsedTime" } + +module Toggle = { + type tag = JsxEvent.Toggle.tag + type t = synthetic + + include MakeEventWithType({type t = t}) + + @get external oldState: t => [#closed | #"open"] = "oldState" + @get external newState: t => [#closed | #"open"] = "newState" + /** The element that triggered the toggle. Available in React 19.3 and later. */ + @get @return(nullable) external source: t => option = "source" +} diff --git a/src/ReactEvent.res.js b/src/ReactEvent.res.js index 5303ddd..ac17a6e 100644 --- a/src/ReactEvent.res.js +++ b/src/ReactEvent.res.js @@ -33,6 +33,8 @@ let Animation = {}; let Transition = {}; +let Toggle = {}; + export { Synthetic, Clipboard, @@ -50,5 +52,6 @@ export { Image, Animation, Transition, + Toggle, } /* No side effect */ diff --git a/src/ReactEvent.resi b/src/ReactEvent.resi index 61b5d4b..4b04da3 100644 --- a/src/ReactEvent.resi +++ b/src/ReactEvent.resi @@ -470,3 +470,27 @@ module Transition: { @get external pseudoElement: t => string = "pseudoElement" @get external elapsedTime: t => float = "elapsedTime" } + +module Toggle: { + type tag = JsxEvent.Toggle.tag + type t = synthetic + @get external bubbles: t => bool = "bubbles" + @get external cancelable: t => bool = "cancelable" + @get external currentTarget: t => {..} = "currentTarget" + @get external defaultPrevented: t => bool = "defaultPrevented" + @get external eventPhase: t => int = "eventPhase" + @get external isTrusted: t => bool = "isTrusted" + @get external nativeEvent: t => {..} = "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 timeStamp: t => float = "timeStamp" + @get external type_: t => string = "type" + @send external persist: t => unit = "persist" + @get external oldState: t => [#closed | #"open"] = "oldState" + @get external newState: t => [#closed | #"open"] = "newState" + /** The element that triggered the toggle. Available in React 19.3 and later. */ + @get @return(nullable) external source: t => option = "source" +}