git.iko.soy/rowtype-yoga/ry-blocks
on main help sign in
For a handful of typesafety
commit5d0b78100947517bb6516a4b33a9b91d1256658d authorMark Eibes <mark.eibes@gmail.com> dateWed 30 Dec 2020, 12:02 (6 years ago) parentd0bb8ba
11 files changed+564−544
src/Yoga/Block/Atom/Button/Story.purs+1−1 src/Yoga/Block/Atom/CodeInput/Style.purs+3−4 src/Yoga/Block/Atom/CodeInput/View.purs+10−3 src/Yoga/Block/Atom/Input/Story.purs+10−10 src/Yoga/Block/Atom/Input/Style.purs+5−8 src/Yoga/Block/Atom/Input/View.purs+39−26 src/Yoga/Block/Atom/Input/View/Label.purs+14−12 src/Yoga/Block/Atom/Popover/Story.purs−1 src/Yoga/Block/Atom/Range/View.purs+26−25 src/Yoga/Block/Internal.purs+447−445 src/Yoga/Block/Internal/OptionalProp.purs+9−9
src/Yoga/Block/Atom/Button/Story.purs+1−1
@@ -7,7 +7,7 @@ import React.Basic (JSX, element, fragment)
77import React.Basic.DOM as R
88import React.Basic.Emotion (str)
99import React.Basic.Emotion as E
10−import Yoga (div, (/>), (</), (</>))
10+import Yoga ((/>), (</), (</>))
1111import Yoga.Block as Block
1212import Yoga.Block.Atom.Button.Types as ButtonType
1313import Yoga.Block.Atom.Button.View as Button
src/Yoga/Block/Atom/CodeInput/Style.purs+3−4
@@ -2,7 +2,6 @@ module Yoga.Block.Atom.CodeInput.Style where
22
33import Yoga.Prelude.Style
44import Data.Interpolate (i)
5−import Untagged.Castable (cast)
65import Yoga.Block.Container.Style (colour)
76
87type Props f r =
@@ -10,8 +9,8 @@ type Props f r =
109 | r
1110 )
1211
13−codeInput ∷ ∀ p. { maxLength ∷ Int | Props Id p } -> Style
14−codeInput props = styles <>? cast props.css
12+codeInput ∷ ∀ p. { maxLength ∷ OptionalProp Int | Props OptionalProp p } -> Style
13+codeInput props = styles <>? props.css
1514 where
1615 styles =
1716 css
@@ -24,7 +23,7 @@ codeInput props = styles <>? cast props.css
2423 , fontFamily: str "var(--mono-font)"
2524 , fontSize: str "var(--s0)"
2625 , lineHeight: str "var(--s0)"
27− , width: str $ i "calc(" (cast props.maxLength ?|| 10) "ch + 4.3 * var(--s-5))"
26+ , width: str $ i "calc(" (props.maxLength ?|| 10) "ch + 4.3 * var(--s-5))"
2827 , padding: str "calc(var(--s-5) - 1px)"
2928 , color: str colour.text
3029 , "&:focus":
src/Yoga/Block/Atom/CodeInput/View.purs+10−3
@@ -1,6 +1,7 @@
11module Yoga.Block.Atom.CodeInput.View
22 ( component
33 , Props
4+ , PropsF
45 , EmotionProps
56 ) where
67
@@ -8,11 +9,17 @@ import Yoga.Prelude.View
89import React.Basic.Emotion (Style)
910import Yoga.Block.Atom.CodeInput.Style as Style
1011
11−type Props =
12+type PropsF f =
1213 (
13− | Style.Props Id (InputPropsF Id EmotionProps)
14+ | Style.Props f (InputPropsF f EmotionProps)
1415 )
1516
17+type Props =
18+ PropsF Id
19+
20+type PropsOptional =
21+ PropsF OptionalProp
22+
1623type EmotionProps =
1724 ( className ∷ String, css ∷ Style )
1825
@@ -22,7 +29,7 @@ component = rawComponent
2229rawComponent ∷ ∀ r. ReactComponent { | r }
2330rawComponent =
2431 mkForwardRefComponent "CodeInput" do
25− \(props ∷ { | Props }) ref -> React.do
32+ \(props ∷ { | PropsOptional }) ref -> React.do
2633 pure
2734 $ emotionInput ref
2835 props
src/Yoga/Block/Atom/Input/Story.purs+10−10
@@ -37,6 +37,16 @@ input = do
3737 $ fragment
3838 [ R.div_
3939 [ R.h1_ [ R.text "Input Examples" ]
40+ , R.h3_ [ R.text "With a label" ]
41+ , Block.cluster </ {}
42+ /> [ element Input.component { label: nes (SProxy ∷ _ "This has a label"), value: "And text", onChange: handler_ mempty }
43+ , element Input.component { label: nes (SProxy ∷ _ "This has a label"), value: "", onChange: handler_ mempty }
44+ , element Input.component { label: nes (SProxy ∷ _ "This has a label"), placeholder: "A very long placeholder, too..." }
45+ , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "🐽🤣" }
46+ , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), trailing: R.text "🤫" }
47+ , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "🌭" }
48+ , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "⭐", trailing: R.text "🔮" }
49+ ]
4050 , R.h2_ [ R.text "Generic Input" ]
4151 , Input.component </> { value: "A Generic Input", onChange: handler_ mempty }
4252 , R.h2_ [ R.text "Validation on text Input" ]
@@ -48,16 +58,6 @@ input = do
4858 , label: nes (SProxy ∷ _ "I am so important")
4959 , _aria: Object.singleton "required" "true"
5060 }
51− , R.h3_ [ R.text "With a label" ]
52− , Block.cluster </ {}
53− /> [ element Input.component { label: nes (SProxy ∷ _ "This has a label"), value: "And text", onChange: handler_ mempty }
54− , element Input.component { label: nes (SProxy ∷ _ "This has a label"), value: "", onChange: handler_ mempty }
55− , element Input.component { label: nes (SProxy ∷ _ "This has a label"), placeholder: "A very long placeholder, too..." }
56− , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "🐽🤣" }
57− , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), trailing: R.text "🤫" }
58− , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "🌭" }
59− , element Input.component { label: nes (SProxy ∷ _ "Pig nose"), leading: R.text "⭐", trailing: R.text "🔮" }
60− ]
6161 , R.h2_ [ R.text "Overflowing label" ]
6262 , element Input.component
6363 { type: HTMLInput.Text
src/Yoga/Block/Atom/Input/Style.purs+5−8
@@ -96,21 +96,18 @@ labelSmall =
9696 }
9797 }
9898
99−labelLarge ∷ { leftIconWidth ∷ Maybe Number, inputWidth ∷ Number } -> Style
100−labelLarge { leftIconWidth, inputWidth } =
99+labelLarge ∷ { left ∷ Number, width ∷ Number, top ∷ Number } -> Style
100+labelLarge { left, width, top } =
101101 css
102102 { fontSize: str "calc(var(--s0) * 0.85)"
103103 , padding: _0
104104 , whiteSpace: nowrap -- force on one line
105105 , overflow: str "hidden"
106− , maxWidth: str $ i "calc(" inputWidth "px)"
106+ , maxWidth: str $ i width "px"
107107 , textOverflow: str "ellipsis"
108108 , marginTop: str "calc(var(--s-1) + var(--s-5))"
109− , marginBottom: str "calc(var(--s-1) + var(--s-5))"
110− , marginLeft:
111− case leftIconWidth of
112− Nothing -> var "--input-side-padding"
113− Just size -> str $ i "calc(var(--input-side-padding) + " gapSize " + " size "px)"
109+ , marginBottom: str $ i "calc(" "var(--s-1)" "+" "var(--s-5)" " + " top "px" ")"
110+ , marginLeft: str $ i left "px"
114111 , marginRight: str "var(--input-side-padding)"
115112 , color: str colour.placeholderText
116113 , fontWeight: str "400"
src/Yoga/Block/Atom/Input/View.purs+39−26
@@ -8,6 +8,7 @@ import Framer.Motion as M
88import React.Basic.DOM (css)
99import React.Basic.DOM as R
1010import React.Basic.Hooks as React
11+import Unsafe.Coerce (unsafeCoerce)
1112import Web.HTML.HTMLInputElement as InputElement
1213import Yoga.Block.Atom.Icon as Icon
1314import Yoga.Block.Atom.Input.Style as Style
@@ -22,16 +23,19 @@ type PropsF f =
2223 , trailing ∷ f JSX
2324 , label ∷ f NonEmptyString
2425 , type ∷ f HTMLInput
25− | Style.Props f InputProps
26+ | Style.Props f (InputPropsF f ())
2627 )
2728
29+coerceProps ∷ { | PropsOptional } -> { | Props }
30+coerceProps = unsafeCoerce
31+
2832type Props =
2933 PropsF Id
3034
3135type PropsOptional =
3236 PropsF OptionalProp
3337
34−component ∷ ∀ p p_. Union p p_ Props => ReactComponent { | p }
38+component ∷ ∀ p q. Union p q Props => ReactComponent { | p }
3539component = rawComponent
3640
3741mkLeftIcon ∷ JSX -> JSX
@@ -46,6 +50,12 @@ mkLeftIcon icon =
4650 }
4751 ]
4852
53+inputComponent ∷ ∀ p q. Union p q Props => ReactComponent { | p }
54+inputComponent = rawInput
55+
56+inputComponentOptional ∷ ∀ p q. Union p q PropsOptional => ReactComponent { | p }
57+inputComponentOptional = rawInput
58+
4959rawInput ∷ ∀ p. ReactComponent { | p }
5060rawInput =
5161 mkForwardRefComponent "Input" do
@@ -54,7 +64,7 @@ rawInput =
5464 result = inputWrapper [ input ]
5565 inputWrapper = div </* { className: "ry-input-wrapper", css: Style.inputWrapper }
5666 input = emotionInput ref inputProps { className: "ry-input", css: Style.input }
57− inputProps = props { type = HTMLInput.toString <$> props.type # unsafeUnOptional }
67+ inputProps = props { type = HTMLInput.toString <$> props.type }
5868 pure result
5969
6070rawComponent ∷ ∀ p. ReactComponent (Record p)
@@ -62,22 +72,23 @@ rawComponent =
6272 mkForwardRefComponent "InputContainer" do
6373 \(props ∷ { | PropsOptional }) propsRef -> React.do
6474 hasFocus /\ setHasFocus <- useState' false
65− backupRef ∷ NodeRef <- useRef null -- [TODO] test this
75+ parentRef ∷ NodeRef <- useRef null
76+ backupRef ∷ NodeRef <- useRef null
6677 let ref = forwardedRefAsMaybe propsRef # fromMaybe backupRef
6778 let
6879 focusInput =
6980 unless hasFocus do
7081 maybeHTMLElement <- getHTMLElementFromRef ref
7182 for_ maybeHTMLElement focus
72− -- Left icon width to correctly place the label
73− leftIconRef ∷ NodeRef <- useRef null
74− let (maybeValue ∷ Maybe String) = cast props.value # opToMaybe
83+ let
84+ maybeValue ∷ Maybe String
85+ maybeValue = props.value # opToMaybe
7586 hasValue /\ setHasValue <- useState' ((maybeValue # isJust) && (maybeValue /= Just ""))
7687 let
7788 aria ∷ Object String
78− aria = props._aria # cast # opToMaybe # fold
89+ aria = props._aria # opToMaybe # fold
7990 labelId ∷ String
80− labelId = props.id # cast # opToMaybe # fold # (_ <> "-label")
91+ labelId = props.id # opToMaybe # fold # (_ <> "-label")
8192 renderLargeLabel ∷ Boolean
8293 renderLargeLabel = not hasFocus && not hasValue
8394 maybeLabelText ∷ Maybe NonEmptyString
@@ -90,10 +101,10 @@ rawComponent =
90101 , isRequired: aria # Object.lookup "required" # (_ == Just "true")
91102 , isInvalid: aria # Object.lookup "invalid" # (_ == Just "true")
92103 , renderLargeLabel
93− , leftIconRef
94104 , labelId
95− , inputId: props.id
105+ , inputId: props.id ?|| "no-id" -- [TODO] Enforce ID?
96106 , inputRef: ref
107+ , parentRef
97108 , labelText
98109 }
99110 leading ∷ Maybe JSX
@@ -107,7 +118,7 @@ rawComponent =
107118 trailing = opToMaybe props.trailing
108119 maybePlaceholder ∷ Maybe String
109120 maybePlaceholder = do
110− given <- props.placeholder # cast # opToMaybe
121+ given <- props.placeholder # opToMaybe
111122 if isJust maybeLabelText && hasFocus then Just given else Nothing
112123 onBlur =
113124 handler preventDefault
@@ -121,26 +132,28 @@ rawComponent =
121132 )
122133 onFocus = handler preventDefault (const $ unless hasFocus $ setHasFocus true)
123134 theInput =
124− rawInput
125− </> ( props
126− { onFocus = composeHandler props.onFocus onFocus
127− , onBlur = composeHandler props.onBlur onBlur
128− , ref = ref
129− , placeholder = maybePlaceholder # maybeToOp # unsafeUnOptional
130− , _aria =
131− if props.label # opToMaybe # isJust then
132− aria # Object.insert "labelledby" labelId
133− else
134− aria
135− }
135+ inputComponentOptional
136+ </> ( (cast ∷ _ -> { | PropsOptional })
137+ $ props
138+ { onFocus = composeHandler onFocus props.onFocus
139+ , onBlur = composeHandler onBlur props.onBlur
140+ , ref = ref
141+ , placeholder = maybePlaceholder # maybeToOp
142+ , _aria =
143+ if props.label # opToMaybe # isJust then
144+ aria # Object.insert "labelledby" labelId
145+ else
146+ aria
147+ }
136148 )
137149 inputContainer =
138150 rawContainer
139151 </ { hasFocus: hasFocus
140152 , isInvalid: aria # Object.lookup "invalid" <#> (_ == "true") # maybeToOp
141153 , css: props.css
154+ , ref: parentRef
142155 }
143− /> [ leading # foldMap \l -> div </ { ref: leftIconRef } /> [ l ]
156+ /> [ leading # foldMap \l -> div </ {} /> [ l ]
144157 , theInput
145158 , trailing # foldMap \t -> div </ {} /> [ t ]
146159 ]
@@ -208,7 +221,7 @@ password =
208221 , R.div' </ {}
209222 /> [ emotionInput
210223 ref
211− props { type = HTMLInput.toString <$> props.type # unsafeUnOptional }
224+ (props { type = HTMLInput.toString <$> props.type })
212225 { className: "ry-input"
213226 , css: Style.input
214227 , type: if hidePassword then "password" else "text"
src/Yoga/Block/Atom/Input/View/Label.purs+14−12
@@ -17,8 +17,8 @@ type Props =
1717 , isInvalid ∷ Boolean
1818 , isFocussed ∷ Boolean
1919 , renderLargeLabel ∷ Boolean
20− , leftIconRef ∷ NodeRef
2120 , inputRef ∷ NodeRef
21+ , parentRef ∷ NodeRef
2222 , labelId ∷ String
2323 , inputId ∷ String
2424 , labelText ∷ NonEmptyString
@@ -30,19 +30,18 @@ component =
3030 $ reactComponent "Input Label" \props -> React.do
3131 -- Track input bounding box
3232 inputBbox /\ setInputBbox <- useState' (zero ∷ DOMRect)
33+ parentBbox /\ setParentBbox <- useState' (zero ∷ DOMRect)
3334 useEffectOnce do
3435 maybeBBox <- getBoundingBoxFromRef props.inputRef
3536 for_ maybeBBox setInputBbox
3637 mempty
37− -- Left icon
38− leftIconBbox /\ setLeftIconBbox <- useState' Nothing
39− useEffectAlways do
40− when (leftIconBbox == Nothing) do
41− maybeBBox <- getBoundingBoxFromRef props.leftIconRef
42− for_ maybeBBox (setLeftIconBbox <<< Just)
38+ useEffectOnce do
39+ maybeBBox <- getBoundingBoxFromRef props.parentRef
40+ for_ maybeBBox setParentBbox
4341 mempty
4442 -- UI
4543 let
44+ text = R.text $ NonEmptyString.toString props.labelText
4645 result =
4746 container
4847 [ sharedLayout
@@ -52,20 +51,23 @@ component =
5251 ]
5352 ]
5453 ]
55− text = R.text $ NonEmptyString.toString props.labelText
56− sharedLayout = M.animateSharedLayout </ { type: M.switch }
5754 container = div </* { className: "ry-input-label-container", css: Style.labelContainer }
55+ sharedLayout = M.animateSharedLayout </ { type: M.switch }
5856 labelContainer =
59− guard (inputBbox /= zero)
57+ guard (inputBbox /= zero && parentBbox /= zero)
6058 $ M.div
6159 </* { className: if props.renderLargeLabel then "ry-input-label-large" else "ry-input-label-small"
60+ , layout: M.layout true
6261 , layoutId: M.layoutId "ry-input-label"
6362 , css:
6463 if props.renderLargeLabel then
65− Style.labelLarge { leftIconWidth: leftIconBbox <#> _.width, inputWidth: inputBbox.width }
64+ Style.labelLarge
65+ { left: inputBbox.left - parentBbox.left
66+ , width: inputBbox.width
67+ , top: inputBbox.top - parentBbox.top
68+ }
6669 else
6770 Style.labelSmall
68− , layout: M.layout true
6971 , transition: M.transition { duration: 0.18, ease: "easeOut" }
7072 , _data:
7173 Object.fromHomogeneous
src/Yoga/Block/Atom/Popover/Story.purs−1
@@ -37,7 +37,6 @@ import Yoga.Block.Container.Style (colour)
3737import Yoga.Block.Container.Style as Styles
3838import Yoga.Block.Icon.SVG as Icons
3939import Yoga.Block.Layout.Box as Box
40−import Yoga.Block.Layout.Cluster as Cluster
4140import Yoga.Block.Layout.Stack as Stack
4241
4342default ∷
src/Yoga/Block/Atom/Range/View.purs+26−25
@@ -8,19 +8,19 @@ import React.Basic.DOM.Events as Event
88import React.Basic.Hooks as React
99import Yoga.Block.Atom.Range.Style as Style
1010
11−type PropsF f
12− = ( className ∷ f String
13− , min ∷ f Int
14− , max ∷ f Int
15− , value ∷ f Int
16− | Style.Props f InputProps
17− )
11+type PropsF f =
12+ ( className ∷ f String
13+ , min ∷ f Int
14+ , max ∷ f Int
15+ , value ∷ f Int
16+ | Style.Props f (InputPropsF f ())
17+ )
1818
19−type Props
20− = PropsF Id
19+type Props =
20+ PropsF Id
2121
22−type PropsOptional
23− = PropsF OptionalProp
22+type PropsOptional =
23+ PropsF OptionalProp
2424
2525component ∷ ∀ p p_. Union p p_ Props => ReactComponent { | p }
2626component = rawComponent
@@ -29,34 +29,35 @@ rawComponent ∷ ∀ p. ReactComponent (Record p)
2929rawComponent =
3030 mkForwardRefComponent "Range" do
3131 \(props ∷ { | PropsOptional }) ref -> React.do
32− let
33− min = props.min ?|| 0
34− let
35− max = props.max ?|| 100
36− let
37− v = props.value ?|| ((max - min) / 2)
38− let
39− disabled = props.disabled
32+ let min = props.min ?|| 0
33+ let max = props.max ?|| 100
34+ let v = props.value ?|| ((max - min) / 2)
35+ let disabled = props.disabled ?|| false
4036 value /\ setValue <- useState' v
4137 hasFocus /\ setHasFocus <- useState' false
4238 pure
4339 $ div
4440 </* { className: "ry-range"
45− , css: Style.container <> guard props.disabled Style.inputDisabled
41+ , css: Style.container <> guard disabled Style.inputDisabled
4642 , onFocus: handler_ $ setHasFocus true
4743 , onBlur: handler_ $ setHasFocus false
48− , style: props.style <> css { "--val": value, "--max": max - min }
44+ , style: fold props.style <> css { "--val": value, "--max": max - min }
4945 , _data: Object.singleton "testid" "range-testid"
5046 }
51− /> [ div </*> { className: "ry-range-filled", css: Style.filled <> guard props.disabled Style.disabled }
52− , div </*> { className: "ry-range-not-filled", css: Style.notFilled <> guard props.disabled Style.disabled }
47+ /> [ div </*> { className: "ry-range-filled", css: Style.filled <> guard disabled Style.disabled }
48+ , div </*> { className: "ry-range-not-filled", css: Style.notFilled <> guard disabled Style.disabled }
5349 , guard hasFocus do
5450 div </*> { className: "ry-range-focus-circle", css: Style.focusCircle }
5551 , emotionInput
5652 ref
57− (props { max = show max, min = show min, value = show value })
53+ ( props
54+ { max = show max # asOptional
55+ , min = show min # asOptional
56+ , value = show value # asOptional
57+ }
58+ )
5859 { className: "ry-range-thumb " <>? props.className
59− , css: Style.range props <> guard props.disabled Style.inputDisabled <>? props.css
60+ , css: Style.range props <> guard disabled Style.inputDisabled <>? props.css
6061 , type: "range"
6162 , onChange: handler Event.targetValue ((_ >>= Int.fromString) >>> (foldMap setValue))
6263 }
src/Yoga/Block/Internal.purs+447−445
@@ -38,14 +38,13 @@ import Foreign.Object (Object)
3838import Prim.Row (class Lacks, class Union)
3939import Prim.Row as Row
4040import Prim.RowList as RL
41−import React.Basic.DOM (CSS, Props_input, Props_button, unsafeCreateDOMComponent)
41+import React.Basic.DOM (CSS, unsafeCreateDOMComponent)
4242import React.Basic.Emotion (Style)
4343import React.Basic.Emotion as E
4444import React.Basic.Events (EventHandler)
4545import React.Basic.Hooks (JSX, ReactComponent, Ref, Render, readRefMaybe)
4646import Record.Extra (class Keys, keys)
4747import Type.Data.Row (RProxy(..))
48−import Type.Row (type (+))
4948import Unsafe.Coerce (unsafeCoerce)
5049import Untagged.Union (UndefinedOr, uorToMaybe)
5150import Web.DOM (Node)
@@ -68,8 +67,8 @@ foreign import mkForwardRefComponentEffect ∷
6867
6968foreign import createRef ∷ ∀ a. Effect (Ref a)
7069
71−type NodeRef
72− = Ref (Nullable Node)
70+type NodeRef =
71+ Ref (Nullable Node)
7372
7473getBoundingBoxFromRef ∷ Ref (Nullable Node) -> Effect (Maybe DOMRect)
7574getBoundingBoxFromRef itemRef = do
@@ -85,8 +84,8 @@ getHTMLElementFromRef itemRef =
8584forwardedRefAsMaybe ∷ ∀ a. Ref a -> Maybe (Ref a)
8685forwardedRefAsMaybe r = safelyWrapped # uorToMaybe >>= Nullable.toMaybe
8786 where
88− safelyWrapped ∷ UndefinedOr (Nullable (Ref a))
89− safelyWrapped = unsafeCoerce r
87+ safelyWrapped ∷ UndefinedOr (Nullable (Ref a))
88+ safelyWrapped = unsafeCoerce r
9089
9190foreign import unsafeUnionDroppingUndefined ∷ ∀ r1 r2 r3. Record r1 -> Record r2 -> Record r3
9291
@@ -138,7 +137,7 @@ pickDefined ∷
138137 { ref ∷ Ref (Nullable Node) | b }
139138pickDefined ref = runFn3 pickDefinedFn ref ks
140139 where
141− ks = Array.fromFoldable $ keys (RProxy ∷ RProxy b)
140+ ks = Array.fromFoldable $ keys (RProxy ∷ RProxy b)
142141
143142-- [TODO] Delete?
144143emotionInputKeyed_ ∷
@@ -157,7 +156,7 @@ emotionInputKeyed_ = unsafeEmotionKeyed unsafeInput
157156emotionInput_ ∷
158157 ∀ props props_.
159158 Lacks "ref" props =>
160− Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node) | InputProps ) =>
159+ Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node) | InputPropsF Id () ) =>
161160 { | InputProps } ->
162161 { className ∷ String
163162 , css ∷ Style
@@ -171,13 +170,16 @@ emotionInput ∷
171170 Lacks "ref" props =>
172171 Union props props_ ( className ∷ String, css ∷ Style, ref ∷ Ref (Nullable Node) | InputProps ) =>
173172 Ref (Nullable Node) ->
174− { | InputPropsF Id more } ->
173+ { | InputPropsF OptionalProp more } ->
175174 { className ∷ String
176175 , css ∷ Style
177176 | props
178177 } ->
179178 JSX
180−emotionInput ref = emotionInput_ <<< pickDefined ref
179+emotionInput ref = emotionInput_ <<< pickDefined ref <<< coerceUnOptional
180+ where
181+ coerceUnOptional ∷ { | InputPropsF OptionalProp more } -> { | InputPropsF Id more }
182+ coerceUnOptional = unsafeCoerce
181183
182184unsafeInput ∷ ∀ r. ReactComponent (Record r)
183185unsafeInput = dangerous "input"
@@ -215,443 +217,443 @@ dangerous = unsafePerformEffect <<< unsafeCreateDOMComponent
215217
216218-- type DivProps =
217219-- Props_div
218−type DivProps
219− = DivPropsF Id ()
220+type DivProps =
221+ DivPropsF Id ()
220222
221−type DivPropsF f more
222− = ( _aria ∷ f (Object String)
223− , _data ∷ f (Object String)
224− , about ∷ f String
225− , acceptCharset ∷ f String
226− , accessKey ∷ f String
227− , allowFullScreen ∷ f Boolean
228− , autoFocus ∷ f Boolean
229− , autoPlay ∷ f Boolean
230− , capture ∷ f Boolean
231− , cellPadding ∷ f String
232− , cellSpacing ∷ f String
233− , charSet ∷ f String
234− , children ∷ f (Array JSX)
235− , classID ∷ f String
236− , colSpan ∷ f Int
237− , contentEditable ∷ f Boolean
238− , contextMenu ∷ f String
239− , crossOrigin ∷ f String
240− , dangerouslySetInnerHTML ∷ f { __html ∷ f String }
241− , datatype ∷ f String
242− , dateTime ∷ f String
243− , dir ∷ f String
244− , draggable ∷ f Boolean
245− , encType ∷ f String
246− , formAction ∷ f String
247− , formEncType ∷ f String
248− , formMethod ∷ f String
249− , formNoValidate ∷ f Boolean
250− , formTarget ∷ f String
251− , frameBorder ∷ f String
252− , hidden ∷ f Boolean
253− , hrefLang ∷ f String
254− , htmlFor ∷ f String
255− , httpEquiv ∷ f String
256− , icon ∷ f String
257− , id ∷ f String
258− , inlist ∷ f String
259− , inputMode ∷ f String
260− , is ∷ f String
261− , itemID ∷ f String
262− , itemProp ∷ f String
263− , itemRef ∷ f String
264− , itemScope ∷ f Boolean
265− , itemType ∷ f String
266− , keyParams ∷ f String
267− , keyType ∷ f String
268− , lang ∷ f String
269− , marginHeight ∷ f String
270− , marginWidth ∷ f String
271− , maxLength ∷ f Int
272− , mediaGroup ∷ f String
273− , minLength ∷ f Int
274− , noValidate ∷ f Boolean
275− , onAnimationEnd ∷ f EventHandler
276− , onAnimationIteration ∷ f EventHandler
277− , onAnimationStart ∷ f EventHandler
278− , onBlur ∷ f EventHandler
279− , onClick ∷ f EventHandler
280− , onCompositionEnd ∷ f EventHandler
281− , onCompositionStart ∷ f EventHandler
282− , onCompositionUpdate ∷ f EventHandler
283− , onContextMenu ∷ f EventHandler
284− , onCopy ∷ f EventHandler
285− , onCut ∷ f EventHandler
286− , onDoubleClick ∷ f EventHandler
287− , onDrag ∷ f EventHandler
288− , onDragEnd ∷ f EventHandler
289− , onDragEnter ∷ f EventHandler
290− , onDragExit ∷ f EventHandler
291− , onDragLeave ∷ f EventHandler
292− , onDragOver ∷ f EventHandler
293− , onDragStart ∷ f EventHandler
294− , onDrop ∷ f EventHandler
295− , onFocus ∷ f EventHandler
296− , onGotPointerCapture ∷ f EventHandler
297− , onInvalid ∷ f EventHandler
298− , onKeyDown ∷ f EventHandler
299− , onKeyPress ∷ f EventHandler
300− , onKeyUp ∷ f EventHandler
301− , onLostPointerCapture ∷ f EventHandler
302− , onMouseDown ∷ f EventHandler
303− , onMouseEnter ∷ f EventHandler
304− , onMouseLeave ∷ f EventHandler
305− , onMouseMove ∷ f EventHandler
306− , onMouseOut ∷ f EventHandler
307− , onMouseOver ∷ f EventHandler
308− , onMouseUp ∷ f EventHandler
309− , onPaste ∷ f EventHandler
310− , onPointerCancel ∷ f EventHandler
311− , onPointerDown ∷ f EventHandler
312− , onPointerEnter ∷ f EventHandler
313− , onPointerLeave ∷ f EventHandler
314− , onPointerMove ∷ f EventHandler
315− , onPointerOut ∷ f EventHandler
316− , onPointerOver ∷ f EventHandler
317− , onPointerUp ∷ f EventHandler
318− , onSelect ∷ f EventHandler
319− , onSubmit ∷ f EventHandler
320− , onTouchCancel ∷ f EventHandler
321− , onTouchEnd ∷ f EventHandler
322− , onTouchMove ∷ f EventHandler
323− , onTouchStart ∷ f EventHandler
324− , onTransitionEnd ∷ f EventHandler
325− , onWheel ∷ f EventHandler
326− , prefix ∷ f String
327− , property ∷ f String
328− , radioGroup ∷ f String
329− , readOnly ∷ f Boolean
330− , ref ∷ f (Ref (Nullable Node))
331− , resource ∷ f String
332− , role ∷ f String
333− , rowSpan ∷ f Int
334− , scoped ∷ f Boolean
335− , seamless ∷ f Boolean
336− , security ∷ f String
337− , spellCheck ∷ f Boolean
338− , srcDoc ∷ f JSX
339− , srcLang ∷ f String
340− , srcSet ∷ f String
341− , style ∷ f CSS
342− , suppressContentEditableWarning ∷ f Boolean
343− , tabIndex ∷ f Int
344− , title ∷ f String
345− , typeof ∷ f String
346− , unselectable ∷ f Boolean
347− , useMap ∷ f String
348− , vocab ∷ f String
349− , wmode ∷ f String
350− | more
351− )
223+type DivPropsF f more =
224+ ( _aria ∷ f (Object String)
225+ , _data ∷ f (Object String)
226+ , about ∷ f String
227+ , acceptCharset ∷ f String
228+ , accessKey ∷ f String
229+ , allowFullScreen ∷ f Boolean
230+ , autoFocus ∷ f Boolean
231+ , autoPlay ∷ f Boolean
232+ , capture ∷ f Boolean
233+ , cellPadding ∷ f String
234+ , cellSpacing ∷ f String
235+ , charSet ∷ f String
236+ , children ∷ f (Array JSX)
237+ , classID ∷ f String
238+ , colSpan ∷ f Int
239+ , contentEditable ∷ f Boolean
240+ , contextMenu ∷ f String
241+ , crossOrigin ∷ f String
242+ , dangerouslySetInnerHTML ∷ f { __html ∷ f String }
243+ , datatype ∷ f String
244+ , dateTime ∷ f String
245+ , dir ∷ f String
246+ , draggable ∷ f Boolean
247+ , encType ∷ f String
248+ , formAction ∷ f String
249+ , formEncType ∷ f String
250+ , formMethod ∷ f String
251+ , formNoValidate ∷ f Boolean
252+ , formTarget ∷ f String
253+ , frameBorder ∷ f String
254+ , hidden ∷ f Boolean
255+ , hrefLang ∷ f String
256+ , htmlFor ∷ f String
257+ , httpEquiv ∷ f String
258+ , icon ∷ f String
259+ , id ∷ f String
260+ , inlist ∷ f String
261+ , inputMode ∷ f String
262+ , is ∷ f String
263+ , itemID ∷ f String
264+ , itemProp ∷ f String
265+ , itemRef ∷ f String
266+ , itemScope ∷ f Boolean
267+ , itemType ∷ f String
268+ , keyParams ∷ f String
269+ , keyType ∷ f String
270+ , lang ∷ f String
271+ , marginHeight ∷ f String
272+ , marginWidth ∷ f String
273+ , maxLength ∷ f Int
274+ , mediaGroup ∷ f String
275+ , minLength ∷ f Int
276+ , noValidate ∷ f Boolean
277+ , onAnimationEnd ∷ f EventHandler
278+ , onAnimationIteration ∷ f EventHandler
279+ , onAnimationStart ∷ f EventHandler
280+ , onBlur ∷ f EventHandler
281+ , onClick ∷ f EventHandler
282+ , onCompositionEnd ∷ f EventHandler
283+ , onCompositionStart ∷ f EventHandler
284+ , onCompositionUpdate ∷ f EventHandler
285+ , onContextMenu ∷ f EventHandler
286+ , onCopy ∷ f EventHandler
287+ , onCut ∷ f EventHandler
288+ , onDoubleClick ∷ f EventHandler
289+ , onDrag ∷ f EventHandler
290+ , onDragEnd ∷ f EventHandler
291+ , onDragEnter ∷ f EventHandler
292+ , onDragExit ∷ f EventHandler
293+ , onDragLeave ∷ f EventHandler
294+ , onDragOver ∷ f EventHandler
295+ , onDragStart ∷ f EventHandler
296+ , onDrop ∷ f EventHandler
297+ , onFocus ∷ f EventHandler
298+ , onGotPointerCapture ∷ f EventHandler
299+ , onInvalid ∷ f EventHandler
300+ , onKeyDown ∷ f EventHandler
301+ , onKeyPress ∷ f EventHandler
302+ , onKeyUp ∷ f EventHandler
303+ , onLostPointerCapture ∷ f EventHandler
304+ , onMouseDown ∷ f EventHandler
305+ , onMouseEnter ∷ f EventHandler
306+ , onMouseLeave ∷ f EventHandler
307+ , onMouseMove ∷ f EventHandler
308+ , onMouseOut ∷ f EventHandler
309+ , onMouseOver ∷ f EventHandler
310+ , onMouseUp ∷ f EventHandler
311+ , onPaste ∷ f EventHandler
312+ , onPointerCancel ∷ f EventHandler
313+ , onPointerDown ∷ f EventHandler
314+ , onPointerEnter ∷ f EventHandler
315+ , onPointerLeave ∷ f EventHandler
316+ , onPointerMove ∷ f EventHandler
317+ , onPointerOut ∷ f EventHandler
318+ , onPointerOver ∷ f EventHandler
319+ , onPointerUp ∷ f EventHandler
320+ , onSelect ∷ f EventHandler
321+ , onSubmit ∷ f EventHandler
322+ , onTouchCancel ∷ f EventHandler
323+ , onTouchEnd ∷ f EventHandler
324+ , onTouchMove ∷ f EventHandler
325+ , onTouchStart ∷ f EventHandler
326+ , onTransitionEnd ∷ f EventHandler
327+ , onWheel ∷ f EventHandler
328+ , prefix ∷ f String
329+ , property ∷ f String
330+ , radioGroup ∷ f String
331+ , readOnly ∷ f Boolean
332+ , ref ∷ f (Ref (Nullable Node))
333+ , resource ∷ f String
334+ , role ∷ f String
335+ , rowSpan ∷ f Int
336+ , scoped ∷ f Boolean
337+ , seamless ∷ f Boolean
338+ , security ∷ f String
339+ , spellCheck ∷ f Boolean
340+ , srcDoc ∷ f JSX
341+ , srcLang ∷ f String
342+ , srcSet ∷ f String
343+ , style ∷ f CSS
344+ , suppressContentEditableWarning ∷ f Boolean
345+ , tabIndex ∷ f Int
346+ , title ∷ f String
347+ , typeof ∷ f String
348+ , unselectable ∷ f Boolean
349+ , useMap ∷ f String
350+ , vocab ∷ f String
351+ , wmode ∷ f String
352+ | more
353+ )
352354
353−type InputProps
354− = InputPropsF Id ()
355+type InputProps =
356+ InputPropsF Id ()
355357
356−type InputPropsF f more
357− = ( _aria ∷ f (Object String)
358− , _data ∷ f (Object String)
359− , about ∷ f String
360− , accept ∷ f String
361− , acceptCharset ∷ f String
362− , accessKey ∷ f String
363− , allowFullScreen ∷ f Boolean
364− , alt ∷ f String
365− , autoCapitalize ∷ f String
366− , autoComplete ∷ f String
367− , autoCorrect ∷ f String
368− , autoFocus ∷ f Boolean
369− , autoPlay ∷ f Boolean
370− , autoSave ∷ f String
371− , capture ∷ f Boolean
372− , cellPadding ∷ f String
373− , cellSpacing ∷ f String
374− , charSet ∷ f String
375− , checked ∷ f Boolean
376− , classID ∷ f String
377− , colSpan ∷ f Int
378− , contentEditable ∷ f Boolean
379− , contextMenu ∷ f String
380− , crossOrigin ∷ f String
381− , dangerouslySetInnerHTML ∷ f { __html ∷ f String }
382− , datatype ∷ f String
383− , dateTime ∷ f String
384− , defaultChecked ∷ f String
385− , defaultValue ∷ f String
386− , dir ∷ f String
387− , disabled ∷ f Boolean
388− , draggable ∷ f Boolean
389− , encType ∷ f String
390− , form ∷ f String
391− , formAction ∷ f String
392− , formEncType ∷ f String
393− , formMethod ∷ f String
394− , formNoValidate ∷ f Boolean
395− , formTarget ∷ f String
396− , frameBorder ∷ f String
397− , height ∷ f String
398− , hidden ∷ f Boolean
399− , hrefLang ∷ f String
400− , htmlFor ∷ f String
401− , httpEquiv ∷ f String
402− , icon ∷ f String
403− , id ∷ f String
404− , inlist ∷ f String
405− , inputMode ∷ f String
406− , is ∷ f String
407− , itemID ∷ f String
408− , itemProp ∷ f String
409− , itemRef ∷ f String
410− , itemScope ∷ f Boolean
411− , itemType ∷ f String
412− , keyParams ∷ f String
413− , keyType ∷ f String
414− , lang ∷ f String
415− , list ∷ f String
416− , marginHeight ∷ f String
417− , marginWidth ∷ f String
418− , maxLength ∷ f Int
419− , mediaGroup ∷ f String
420− , minLength ∷ f Int
421− , multiple ∷ f Boolean
422− , name ∷ f String
423− , noValidate ∷ f Boolean
424− , onAnimationEnd ∷ f EventHandler
425− , onAnimationIteration ∷ f EventHandler
426− , onAnimationStart ∷ f EventHandler
427− , onBlur ∷ f EventHandler
428− , onChange ∷ f EventHandler
429− , onClick ∷ f EventHandler
430− , onCompositionEnd ∷ f EventHandler
431− , onCompositionStart ∷ f EventHandler
432− , onCompositionUpdate ∷ f EventHandler
433− , onContextMenu ∷ f EventHandler
434− , onCopy ∷ f EventHandler
435− , onCut ∷ f EventHandler
436− , onDoubleClick ∷ f EventHandler
437− , onDrag ∷ f EventHandler
438− , onDragEnd ∷ f EventHandler
439− , onDragEnter ∷ f EventHandler
440− , onDragExit ∷ f EventHandler
441− , onDragLeave ∷ f EventHandler
442− , onDragOver ∷ f EventHandler
443− , onDragStart ∷ f EventHandler
444− , onDrop ∷ f EventHandler
445− , onFocus ∷ f EventHandler
446− , onGotPointerCapture ∷ f EventHandler
447− , onInvalid ∷ f EventHandler
448− , onKeyDown ∷ f EventHandler
449− , onKeyPress ∷ f EventHandler
450− , onKeyUp ∷ f EventHandler
451− , onLostPointerCapture ∷ f EventHandler
452− , onMouseDown ∷ f EventHandler
453− , onMouseEnter ∷ f EventHandler
454− , onMouseLeave ∷ f EventHandler
455− , onMouseMove ∷ f EventHandler
456− , onMouseOut ∷ f EventHandler
457− , onMouseOver ∷ f EventHandler
458− , onMouseUp ∷ f EventHandler
459− , onPaste ∷ f EventHandler
460− , onPointerCancel ∷ f EventHandler
461− , onPointerDown ∷ f EventHandler
462− , onPointerEnter ∷ f EventHandler
463− , onPointerLeave ∷ f EventHandler
464− , onPointerMove ∷ f EventHandler
465− , onPointerOut ∷ f EventHandler
466− , onPointerOver ∷ f EventHandler
467− , onPointerUp ∷ f EventHandler
468− , onSelect ∷ f EventHandler
469− , onSubmit ∷ f EventHandler
470− , onTouchCancel ∷ f EventHandler
471− , onTouchEnd ∷ f EventHandler
472− , onTouchMove ∷ f EventHandler
473− , onTouchStart ∷ f EventHandler
474− , onTransitionEnd ∷ f EventHandler
475− , onWheel ∷ f EventHandler
476− , pattern ∷ f String
477− , placeholder ∷ f String
478− , prefix ∷ f String
479− , property ∷ f String
480− , radioGroup ∷ f String
481− , ref ∷ f (Ref (Nullable Node))
482− , readOnly ∷ f Boolean
483− , required ∷ f Boolean
484− , resource ∷ f String
485− , results ∷ f String
486− , role ∷ f String
487− , rowSpan ∷ f Int
488− , scoped ∷ f Boolean
489− , seamless ∷ f Boolean
490− , security ∷ f String
491− , size ∷ f Int
492− , spellCheck ∷ f Boolean
493− , src ∷ f String
494− , srcDoc ∷ f JSX
495− , srcLang ∷ f String
496− , srcSet ∷ f String
497− , step ∷ f String
498− , style ∷ f CSS
499− , suppressContentEditableWarning ∷ f Boolean
500− , tabIndex ∷ f Int
501− , title ∷ f String
502− , title ∷ f String
503− , type ∷ f String
504− , typeof ∷ f String
505− , unselectable ∷ f Boolean
506− , useMap ∷ f String
507− , value ∷ f String
508− , vocab ∷ f String
509− , width ∷ f String
510− , wmode ∷ f String
511− , min ∷ f (String)
512− , max ∷ f (String)
513− | more
514− )
358+type InputPropsF f more =
359+ ( _aria ∷ f (Object String)
360+ , _data ∷ f (Object String)
361+ , about ∷ f String
362+ , accept ∷ f String
363+ , acceptCharset ∷ f String
364+ , accessKey ∷ f String
365+ , allowFullScreen ∷ f Boolean
366+ , alt ∷ f String
367+ , autoCapitalize ∷ f String
368+ , autoComplete ∷ f String
369+ , autoCorrect ∷ f String
370+ , autoFocus ∷ f Boolean
371+ , autoPlay ∷ f Boolean
372+ , autoSave ∷ f String
373+ , capture ∷ f Boolean
374+ , cellPadding ∷ f String
375+ , cellSpacing ∷ f String
376+ , charSet ∷ f String
377+ , checked ∷ f Boolean
378+ , classID ∷ f String
379+ , colSpan ∷ f Int
380+ , contentEditable ∷ f Boolean
381+ , contextMenu ∷ f String
382+ , crossOrigin ∷ f String
383+ , dangerouslySetInnerHTML ∷ f { __html ∷ f String }
384+ , datatype ∷ f String
385+ , dateTime ∷ f String
386+ , defaultChecked ∷ f String
387+ , defaultValue ∷ f String
388+ , dir ∷ f String
389+ , disabled ∷ f Boolean
390+ , draggable ∷ f Boolean
391+ , encType ∷ f String
392+ , form ∷ f String
393+ , formAction ∷ f String
394+ , formEncType ∷ f String
395+ , formMethod ∷ f String
396+ , formNoValidate ∷ f Boolean
397+ , formTarget ∷ f String
398+ , frameBorder ∷ f String
399+ , height ∷ f String
400+ , hidden ∷ f Boolean
401+ , hrefLang ∷ f String
402+ , htmlFor ∷ f String
403+ , httpEquiv ∷ f String
404+ , icon ∷ f String
405+ , id ∷ f String
406+ , inlist ∷ f String
407+ , inputMode ∷ f String
408+ , is ∷ f String
409+ , itemID ∷ f String
410+ , itemProp ∷ f String
411+ , itemRef ∷ f String
412+ , itemScope ∷ f Boolean
413+ , itemType ∷ f String
414+ , keyParams ∷ f String
415+ , keyType ∷ f String
416+ , lang ∷ f String
417+ , list ∷ f String
418+ , marginHeight ∷ f String
419+ , marginWidth ∷ f String
420+ , maxLength ∷ f Int
421+ , mediaGroup ∷ f String
422+ , minLength ∷ f Int
423+ , multiple ∷ f Boolean
424+ , name ∷ f String
425+ , noValidate ∷ f Boolean
426+ , onAnimationEnd ∷ f EventHandler
427+ , onAnimationIteration ∷ f EventHandler
428+ , onAnimationStart ∷ f EventHandler
429+ , onBlur ∷ f EventHandler
430+ , onChange ∷ f EventHandler
431+ , onClick ∷ f EventHandler
432+ , onCompositionEnd ∷ f EventHandler
433+ , onCompositionStart ∷ f EventHandler
434+ , onCompositionUpdate ∷ f EventHandler
435+ , onContextMenu ∷ f EventHandler
436+ , onCopy ∷ f EventHandler
437+ , onCut ∷ f EventHandler
438+ , onDoubleClick ∷ f EventHandler
439+ , onDrag ∷ f EventHandler
440+ , onDragEnd ∷ f EventHandler
441+ , onDragEnter ∷ f EventHandler
442+ , onDragExit ∷ f EventHandler
443+ , onDragLeave ∷ f EventHandler
444+ , onDragOver ∷ f EventHandler
445+ , onDragStart ∷ f EventHandler
446+ , onDrop ∷ f EventHandler
447+ , onFocus ∷ f EventHandler
448+ , onGotPointerCapture ∷ f EventHandler
449+ , onInvalid ∷ f EventHandler
450+ , onKeyDown ∷ f EventHandler
451+ , onKeyPress ∷ f EventHandler
452+ , onKeyUp ∷ f EventHandler
453+ , onLostPointerCapture ∷ f EventHandler
454+ , onMouseDown ∷ f EventHandler
455+ , onMouseEnter ∷ f EventHandler
456+ , onMouseLeave ∷ f EventHandler
457+ , onMouseMove ∷ f EventHandler
458+ , onMouseOut ∷ f EventHandler
459+ , onMouseOver ∷ f EventHandler
460+ , onMouseUp ∷ f EventHandler
461+ , onPaste ∷ f EventHandler
462+ , onPointerCancel ∷ f EventHandler
463+ , onPointerDown ∷ f EventHandler
464+ , onPointerEnter ∷ f EventHandler
465+ , onPointerLeave ∷ f EventHandler
466+ , onPointerMove ∷ f EventHandler
467+ , onPointerOut ∷ f EventHandler
468+ , onPointerOver ∷ f EventHandler
469+ , onPointerUp ∷ f EventHandler
470+ , onSelect ∷ f EventHandler
471+ , onSubmit ∷ f EventHandler
472+ , onTouchCancel ∷ f EventHandler
473+ , onTouchEnd ∷ f EventHandler
474+ , onTouchMove ∷ f EventHandler
475+ , onTouchStart ∷ f EventHandler
476+ , onTransitionEnd ∷ f EventHandler
477+ , onWheel ∷ f EventHandler
478+ , pattern ∷ f String
479+ , placeholder ∷ f String
480+ , prefix ∷ f String
481+ , property ∷ f String
482+ , radioGroup ∷ f String
483+ , ref ∷ f (Ref (Nullable Node))
484+ , readOnly ∷ f Boolean
485+ , required ∷ f Boolean
486+ , resource ∷ f String
487+ , results ∷ f String
488+ , role ∷ f String
489+ , rowSpan ∷ f Int
490+ , scoped ∷ f Boolean
491+ , seamless ∷ f Boolean
492+ , security ∷ f String
493+ , size ∷ f Int
494+ , spellCheck ∷ f Boolean
495+ , src ∷ f String
496+ , srcDoc ∷ f JSX
497+ , srcLang ∷ f String
498+ , srcSet ∷ f String
499+ , step ∷ f String
500+ , style ∷ f CSS
501+ , suppressContentEditableWarning ∷ f Boolean
502+ , tabIndex ∷ f Int
503+ , title ∷ f String
504+ , title ∷ f String
505+ , type ∷ f String
506+ , typeof ∷ f String
507+ , unselectable ∷ f Boolean
508+ , useMap ∷ f String
509+ , value ∷ f String
510+ , vocab ∷ f String
511+ , width ∷ f String
512+ , wmode ∷ f String
513+ , min ∷ f (String)
514+ , max ∷ f (String)
515+ | more
516+ )
515517
516−type ButtonProps
517− = ButtonPropsF Id ()
518+type ButtonProps =
519+ ButtonPropsF Id ()
518520
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− )
521+type ButtonPropsF f more =
522+ ( _aria ∷ f (Object String)
523+ , _data ∷ f (Object String)
524+ , about ∷ f String
525+ , acceptCharset ∷ f String
526+ , accessKey ∷ f String
527+ , allowFullScreen ∷ f Boolean
528+ , allowTransparency ∷ f Boolean
529+ , autoFocus ∷ f Boolean
530+ , autoPlay ∷ f Boolean
531+ , capture ∷ f Boolean
532+ , cellPadding ∷ f String
533+ , cellSpacing ∷ f String
534+ , charSet ∷ f String
535+ , children ∷ f (Array JSX)
536+ , classID ∷ f String
537+ , className ∷ f String
538+ , colSpan ∷ f Int
539+ , contentEditable ∷ f Boolean
540+ , contextMenu ∷ f String
541+ , crossOrigin ∷ f String
542+ , dangerouslySetInnerHTML ∷ f { __html ∷ String }
543+ , datatype ∷ f String
544+ , dateTime ∷ f String
545+ , dir ∷ f String
546+ , disabled ∷ f Boolean
547+ , draggable ∷ f Boolean
548+ , encType ∷ f String
549+ , form ∷ f String
550+ , formAction ∷ f String
551+ , formEncType ∷ f String
552+ , formMethod ∷ f String
553+ , formNoValidate ∷ f Boolean
554+ , formTarget ∷ f String
555+ , frameBorder ∷ f String
556+ , hidden ∷ f Boolean
557+ , hrefLang ∷ f String
558+ , htmlFor ∷ f String
559+ , httpEquiv ∷ f String
560+ , icon ∷ f String
561+ , id ∷ f String
562+ , inlist ∷ f String
563+ , inputMode ∷ f String
564+ , is ∷ f String
565+ , itemID ∷ f String
566+ , itemProp ∷ f String
567+ , itemRef ∷ f String
568+ , itemScope ∷ f Boolean
569+ , itemType ∷ f String
570+ , key ∷ f String
571+ , keyParams ∷ f String
572+ , keyType ∷ f String
573+ , lang ∷ f String
574+ , marginHeight ∷ f String
575+ , marginWidth ∷ f String
576+ , maxLength ∷ f Int
577+ , mediaGroup ∷ f String
578+ , minLength ∷ f Int
579+ , name ∷ f String
580+ , noValidate ∷ f Boolean
581+ , onAnimationEnd ∷ f EventHandler
582+ , onAnimationIteration ∷ f EventHandler
583+ , onAnimationStart ∷ f EventHandler
584+ , onBlur ∷ f EventHandler
585+ , onClick ∷ f EventHandler
586+ , onCompositionEnd ∷ f EventHandler
587+ , onCompositionStart ∷ f EventHandler
588+ , onCompositionUpdate ∷ f EventHandler
589+ , onContextMenu ∷ f EventHandler
590+ , onCopy ∷ f EventHandler
591+ , onCut ∷ f EventHandler
592+ , onDoubleClick ∷ f EventHandler
593+ , onDrag ∷ f EventHandler
594+ , onDragEnd ∷ f EventHandler
595+ , onDragEnter ∷ f EventHandler
596+ , onDragExit ∷ f EventHandler
597+ , onDragLeave ∷ f EventHandler
598+ , onDragOver ∷ f EventHandler
599+ , onDragStart ∷ f EventHandler
600+ , onDrop ∷ f EventHandler
601+ , onFocus ∷ f EventHandler
602+ , onGotPointerCapture ∷ f EventHandler
603+ , onInvalid ∷ f EventHandler
604+ , onKeyDown ∷ f EventHandler
605+ , onKeyPress ∷ f EventHandler
606+ , onKeyUp ∷ f EventHandler
607+ , onLostPointerCapture ∷ f EventHandler
608+ , onMouseDown ∷ f EventHandler
609+ , onMouseEnter ∷ f EventHandler
610+ , onMouseLeave ∷ f EventHandler
611+ , onMouseMove ∷ f EventHandler
612+ , onMouseOut ∷ f EventHandler
613+ , onMouseOver ∷ f EventHandler
614+ , onMouseUp ∷ f EventHandler
615+ , onPaste ∷ f EventHandler
616+ , onPointerCancel ∷ f EventHandler
617+ , onPointerDown ∷ f EventHandler
618+ , onPointerEnter ∷ f EventHandler
619+ , onPointerLeave ∷ f EventHandler
620+ , onPointerMove ∷ f EventHandler
621+ , onPointerOut ∷ f EventHandler
622+ , onPointerOver ∷ f EventHandler
623+ , onPointerUp ∷ f EventHandler
624+ , onSelect ∷ f EventHandler
625+ , onSubmit ∷ f EventHandler
626+ , onTouchCancel ∷ f EventHandler
627+ , onTouchEnd ∷ f EventHandler
628+ , onTouchMove ∷ f EventHandler
629+ , onTouchStart ∷ f EventHandler
630+ , onTransitionEnd ∷ f EventHandler
631+ , onWheel ∷ f EventHandler
632+ , prefix ∷ f String
633+ , property ∷ f String
634+ , radioGroup ∷ f String
635+ , readOnly ∷ f Boolean
636+ , ref ∷ f (Ref (Nullable Node))
637+ , resource ∷ f String
638+ , role ∷ f String
639+ , rowSpan ∷ f Int
640+ , scoped ∷ f Boolean
641+ , seamless ∷ f Boolean
642+ , security ∷ f String
643+ , spellCheck ∷ f Boolean
644+ , srcDoc ∷ f JSX
645+ , srcLang ∷ f String
646+ , srcSet ∷ f String
647+ , style ∷ f CSS
648+ , suppressContentEditableWarning ∷ f Boolean
649+ , tabIndex ∷ f Int
650+ , title ∷ f String
651+ , type ∷ f String
652+ , typeof ∷ f String
653+ , unselectable ∷ f Boolean
654+ , useMap ∷ f String
655+ , value ∷ f String
656+ , vocab ∷ f String
657+ , wmode ∷ f String
658+ | more
659+ )
src/Yoga/Block/Internal/OptionalProp.purs+9−9
@@ -15,11 +15,10 @@ import Unsafe.Coerce (unsafeCoerce)
1515import Untagged.Castable (class Castable, cast)
1616import Untagged.Union (UndefinedOr, defined, fromUndefinedOr, maybeToUor, uorToMaybe)
1717
18−type Id a
19− = a
18+type Id a =
19+ a
2020
21−newtype OptionalProp a
22− = OptionalProp (UndefinedOr a)
21+newtype OptionalProp a = OptionalProp (UndefinedOr a)
2322
2423setOrDelete ∷
2524 ∀ r a rNoA key.
@@ -33,17 +32,17 @@ setOrDelete key v = case opToMaybe v of
3332 Nothing -> unsafeDelete (reflectSymbol key)
3433 Just v' -> set key v'
3534
36−asOptional :: forall a. a -> OptionalProp a
35+asOptional ∷ ∀ a. a -> OptionalProp a
3736asOptional = cast
3837
39−asMaybe :: forall a. a -> Maybe a
38+asMaybe ∷ ∀ a. a -> Maybe a
4039asMaybe = asOptional >>> opToMaybe
4140
42−composeHandler :: EventHandler -> EventHandler -> EventHandler
41+composeHandler ∷ EventHandler -> OptionalProp EventHandler -> EventHandler
4342composeHandler handler propsHandler =
4443 mkEffectFn1 \a -> do
45− for_ (propsHandler # asMaybe) $ flip runEffectFn1 a
46− for_ (handler # asMaybe) $ flip runEffectFn1 a -- not necessary but safer
44+ for_ (propsHandler # opToMaybe) $ flip runEffectFn1 a
45+ for_ (handler # asMaybe) $ flip runEffectFn1 a
4746
4847unsafeUnOptional ∷ ∀ a. OptionalProp a -> a
4948unsafeUnOptional = unsafeCoerce
@@ -56,6 +55,7 @@ opToMaybe (OptionalProp x) = uorToMaybe x
5655
5756maybeToOp ∷ ∀ a. Maybe a -> OptionalProp a
5857maybeToOp mb = OptionalProp (maybeToUor mb)
58+
5959derive instance ntOptionalProp ∷ Newtype (OptionalProp a) _
6060
6161instance semigroupOptionalProp ∷ Semigroup a => Semigroup (OptionalProp a) where