@@ -9,9 +9,12 @@ module Yoga.Block.Internal
99 , DivPropsF
1010 , InputProps
1111 , InputPropsF
12+ , ButtonProps
13+ , ButtonPropsF
1214 , NodeRef
1315 , emotionDiv
1416 , emotionInput
17+ , emotionButton
1518 , module Yoga.Block.Internal.OptionalProp
1619 , module Yoga.Block.Internal.CSS
1720 , unsafeUnionDroppingUndefined
@@ -35,13 +38,14 @@ import Foreign.Object (Object)
3538import Prim.Row (class Lacks, class Union)
3639import Prim.Row as Row
3740import Prim.RowList as RL
38−import React.Basic.DOM (CSS, unsafeCreateDOMComponent)
41+import React.Basic.DOM (CSS, Props_input, Props_button, unsafeCreateDOMComponent)
3942import React.Basic.Emotion (Style)
4043import React.Basic.Emotion as E
4144import React.Basic.Events (EventHandler)
4245import React.Basic.Hooks (JSX, ReactComponent, Ref, Render, readRefMaybe)
4346import Record.Extra (class Keys, keys)
4447import Type.Data.Row (RProxy(..))
48+import Type.Row (type (+))
4549import Unsafe.Coerce (unsafeCoerce)
4650import Untagged.Union (UndefinedOr, uorToMaybe)
4751import Web.DOM (Node)
@@ -136,30 +140,31 @@ pickDefined ref = runFn3 pickDefinedFn ref ks
136140 where
137141 ks = Array.fromFoldable $ keys (RProxy ∷ RProxy b)
138142
139−emotionInput_ ∷
143+-- [TODO] Delete?
144+emotionInputKeyed_ ∷
140145 ∀ props props_.
141146 Lacks "ref" props =>
142− Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node) | InputProps ) =>
147+ Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node), key ∷ String | InputProps ) =>
143148 { | InputProps } ->
144149 { className ∷ String
145150 , css ∷ Style
151+ , key ∷ String
146152 | props
147153 } ->
148154 JSX
149−emotionInput_ = unsafeEmotion unsafeInput
155+emotionInputKeyed_ = unsafeEmotionKeyed unsafeInput
150156
151−emotionInputKeyed_ ∷
157+emotionInput_ ∷
152158 ∀ props props_.
153159 Lacks "ref" props =>
154− Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node), key ∷ String | InputProps ) =>
160+ Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node) | InputProps ) =>
155161 { | InputProps } ->
156162 { className ∷ String
157163 , css ∷ Style
158− , key ∷ String
159164 | props
160165 } ->
161166 JSX
162−emotionInputKeyed_ = unsafeEmotionKeyed unsafeInput
167+emotionInput_ = unsafeEmotion unsafeInput
163168
164169emotionInput ∷
165170 ∀ props props_ more.
@@ -177,6 +182,34 @@ emotionInput ref = emotionInput_ <<< pickDefined ref
177182unsafeInput ∷ ∀ r. ReactComponent (Record r)
178183unsafeInput = dangerous "input"
179184
185+emotionButton_ ∷
186+ ∀ props props_.
187+ Lacks "ref" props =>
188+ Union props props_ ( className ∷ String, css ∷ Style | ButtonProps ) =>
189+ { | ButtonProps } ->
190+ { className ∷ String
191+ , css ∷ Style
192+ | props
193+ } ->
194+ JSX
195+emotionButton_ = unsafeEmotion unsafeButton
196+
197+emotionButton ∷
198+ ∀ props props_ more.
199+ Lacks "ref" props =>
200+ Union props props_ ( className ∷ String, css ∷ Style | ButtonProps ) =>
201+ Ref (Nullable Node) ->
202+ { | ButtonPropsF Id more } ->
203+ { className ∷ String
204+ , css ∷ Style
205+ | props
206+ } ->
207+ JSX
208+emotionButton ref = emotionButton_ <<< pickDefined ref
209+
210+unsafeButton ∷ ∀ r. ReactComponent (Record r)
211+unsafeButton = dangerous "button"
212+
180213dangerous ∷ ∀ props. String -> ReactComponent (Record props)
181214dangerous = unsafePerformEffect <<< unsafeCreateDOMComponent
182215
@@ -479,3 +512,146 @@ type InputPropsF f more
479512 , max ∷ f (String)
480513 | more
481514 )
515+
516+type ButtonProps
517+ = ButtonPropsF Id ()
518+
519+type ButtonPropsF f more
520+ = ( _aria :: f (Object String)
521+ , _data :: f (Object String)
522+ , about :: f String
523+ , acceptCharset :: f String
524+ , accessKey :: f String
525+ , allowFullScreen :: f Boolean
526+ , allowTransparency :: f Boolean
527+ , autoFocus :: f Boolean
528+ , autoPlay :: f Boolean
529+ , capture :: f Boolean
530+ , cellPadding :: f String
531+ , cellSpacing :: f String
532+ , charSet :: f String
533+ , children :: f (Array JSX)
534+ , classID :: f String
535+ , className :: f String
536+ , colSpan :: f Int
537+ , contentEditable :: f Boolean
538+ , contextMenu :: f String
539+ , crossOrigin :: f String
540+ , dangerouslySetInnerHTML :: f { __html :: String }
541+ , datatype :: f String
542+ , dateTime :: f String
543+ , dir :: f String
544+ , disabled :: f Boolean
545+ , draggable :: f Boolean
546+ , encType :: f String
547+ , form :: f String
548+ , formAction :: f String
549+ , formEncType :: f String
550+ , formMethod :: f String
551+ , formNoValidate :: f Boolean
552+ , formTarget :: f String
553+ , frameBorder :: f String
554+ , hidden :: f Boolean
555+ , hrefLang :: f String
556+ , htmlFor :: f String
557+ , httpEquiv :: f String
558+ , icon :: f String
559+ , id :: f String
560+ , inlist :: f String
561+ , inputMode :: f String
562+ , is :: f String
563+ , itemID :: f String
564+ , itemProp :: f String
565+ , itemRef :: f String
566+ , itemScope :: f Boolean
567+ , itemType :: f String
568+ , key :: f String
569+ , keyParams :: f String
570+ , keyType :: f String
571+ , lang :: f String
572+ , marginHeight :: f String
573+ , marginWidth :: f String
574+ , maxLength :: f Int
575+ , mediaGroup :: f String
576+ , minLength :: f Int
577+ , name :: f String
578+ , noValidate :: f Boolean
579+ , onAnimationEnd :: f EventHandler
580+ , onAnimationIteration :: f EventHandler
581+ , onAnimationStart :: f EventHandler
582+ , onBlur :: f EventHandler
583+ , onClick :: f EventHandler
584+ , onCompositionEnd :: f EventHandler
585+ , onCompositionStart :: f EventHandler
586+ , onCompositionUpdate :: f EventHandler
587+ , onContextMenu :: f EventHandler
588+ , onCopy :: f EventHandler
589+ , onCut :: f EventHandler
590+ , onDoubleClick :: f EventHandler
591+ , onDrag :: f EventHandler
592+ , onDragEnd :: f EventHandler
593+ , onDragEnter :: f EventHandler
594+ , onDragExit :: f EventHandler
595+ , onDragLeave :: f EventHandler
596+ , onDragOver :: f EventHandler
597+ , onDragStart :: f EventHandler
598+ , onDrop :: f EventHandler
599+ , onFocus :: f EventHandler
600+ , onGotPointerCapture :: f EventHandler
601+ , onInvalid :: f EventHandler
602+ , onKeyDown :: f EventHandler
603+ , onKeyPress :: f EventHandler
604+ , onKeyUp :: f EventHandler
605+ , onLostPointerCapture :: f EventHandler
606+ , onMouseDown :: f EventHandler
607+ , onMouseEnter :: f EventHandler
608+ , onMouseLeave :: f EventHandler
609+ , onMouseMove :: f EventHandler
610+ , onMouseOut :: f EventHandler
611+ , onMouseOver :: f EventHandler
612+ , onMouseUp :: f EventHandler
613+ , onPaste :: f EventHandler
614+ , onPointerCancel :: f EventHandler
615+ , onPointerDown :: f EventHandler
616+ , onPointerEnter :: f EventHandler
617+ , onPointerLeave :: f EventHandler
618+ , onPointerMove :: f EventHandler
619+ , onPointerOut :: f EventHandler
620+ , onPointerOver :: f EventHandler
621+ , onPointerUp :: f EventHandler
622+ , onSelect :: f EventHandler
623+ , onSubmit :: f EventHandler
624+ , onTouchCancel :: f EventHandler
625+ , onTouchEnd :: f EventHandler
626+ , onTouchMove :: f EventHandler
627+ , onTouchStart :: f EventHandler
628+ , onTransitionEnd :: f EventHandler
629+ , onWheel :: f EventHandler
630+ , prefix :: f String
631+ , property :: f String
632+ , radioGroup :: f String
633+ , readOnly :: f Boolean
634+ , ref :: f (Ref (Nullable Node))
635+ , resource :: f String
636+ , role :: f String
637+ , rowSpan :: f Int
638+ , scoped :: f Boolean
639+ , seamless :: f Boolean
640+ , security :: f String
641+ , spellCheck :: f Boolean
642+ , srcDoc :: f JSX
643+ , srcLang :: f String
644+ , srcSet :: f String
645+ , style :: f CSS
646+ , suppressContentEditableWarning :: f Boolean
647+ , tabIndex :: f Int
648+ , title :: f String
649+ , type :: f String
650+ , typeof :: f String
651+ , unselectable :: f Boolean
652+ , useMap :: f String
653+ , value :: f String
654+ , vocab :: f String
655+ , wmode :: f String
656+ | more
657+ )