git.iko.soy/rowtype-yoga/purescript-yoga-heroui3
on main help sign in
wave 2 containers (Card, ScrollShadow, Accordion, Tabs)
commit100d782f06e5fc46dc85eab3ca66ff76aefe5b16 authorMark <mark.eibes@gmail.com> dateSun 31 May 2026, 17:37 (4 months ago) parent27c75f6
17 files changed+1489
src/HeroUI/Autocomplete.purs+88 src/HeroUI/Calendar.purs+115 src/HeroUI/Checkbox.purs+93 src/HeroUI/DateField.purs+75 src/HeroUI/DatePicker.purs+126 src/HeroUI/Form.purs+39 src/HeroUI/Input.purs+120 src/HeroUI/InputOTP.purs+66 src/HeroUI/ListBox.purs+63 src/HeroUI/NumberField.purs+76 src/HeroUI/Radio.purs+85 src/HeroUI/Raw.js+182 src/HeroUI/Raw.purs+107 src/HeroUI/Select.purs+78 src/HeroUI/Slider.purs+81 src/HeroUI/Switch.purs+71 src/HeroUI/Types.purs+24
src/HeroUI/Autocomplete.pursnew file+88
@@ -0,0 +1,88 @@
1+module HeroUI.Autocomplete where
2+
3+import Prelude
4+
5+import Effect (Effect)
6+import Effect.Uncurried (EffectFn1)
7+import React.Basic (JSX)
8+import Yoga.React.DOM.Internal (class IsJSX)
9+import Data.Function.Uncurried (runFn4)
10+import HeroUI.Types (FieldVariant, fieldVariantToString)
11+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
12+import HeroUI.Raw as Raw
13+
14+type AutocompleteProps r =
15+ ( selectedKey :: String
16+ , defaultSelectedKey :: String
17+ , onSelectionChange :: EffectFn1 String Unit
18+ , inputValue :: String
19+ , defaultInputValue :: String
20+ , onInputChange :: EffectFn1 String Unit
21+ , onClear :: Effect Unit
22+ , allowsCustomValue :: Boolean
23+ , placeholder :: String
24+ , name :: String
25+ , isDisabled :: Boolean
26+ , isRequired :: Boolean
27+ , isInvalid :: Boolean
28+ , fullWidth :: Boolean
29+ , variant :: FieldVariant
30+ , className :: String
31+ | r
32+ )
33+
34+autocomplete
35+ :: forall givenProps nonDataProps kids
36+ . IsJSX kids
37+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | AutocompleteProps () }
38+ => { | givenProps }
39+ -> kids
40+ -> JSX
41+autocomplete props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.autocomplete props kids
42+
43+type SectionProps r = (className :: String | r)
44+
45+autocompleteTrigger
46+ :: forall givenProps nonDataProps kids
47+ . IsJSX kids
48+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
49+ => { | givenProps }
50+ -> kids
51+ -> JSX
52+autocompleteTrigger props kids = runFn4 createElementTransformImpl {} Raw.autocompleteTrigger props kids
53+
54+autocompleteValue
55+ :: forall givenProps nonDataProps kids
56+ . IsJSX kids
57+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
58+ => { | givenProps }
59+ -> kids
60+ -> JSX
61+autocompleteValue props kids = runFn4 createElementTransformImpl {} Raw.autocompleteValue props kids
62+
63+autocompleteIndicator
64+ :: forall givenProps nonDataProps kids
65+ . IsJSX kids
66+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
67+ => { | givenProps }
68+ -> kids
69+ -> JSX
70+autocompleteIndicator props kids = runFn4 createElementTransformImpl {} Raw.autocompleteIndicator props kids
71+
72+autocompletePopover
73+ :: forall givenProps nonDataProps kids
74+ . IsJSX kids
75+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
76+ => { | givenProps }
77+ -> kids
78+ -> JSX
79+autocompletePopover props kids = runFn4 createElementTransformImpl {} Raw.autocompletePopover props kids
80+
81+autocompleteClearButton
82+ :: forall givenProps nonDataProps kids
83+ . IsJSX kids
84+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
85+ => { | givenProps }
86+ -> kids
87+ -> JSX
88+autocompleteClearButton props kids = runFn4 createElementTransformImpl {} Raw.autocompleteClearButton props kids
src/HeroUI/Calendar.pursnew file+115
@@ -0,0 +1,115 @@
1+module HeroUI.Calendar where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import Foreign (Foreign)
7+import React.Basic (JSX)
8+import Yoga.React.DOM.Internal (class IsJSX)
9+import Data.Function.Uncurried (runFn4)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+-- | Date values are opaque `@internationalized/date` objects; pass as `Foreign`.
14+type CalendarProps r =
15+ ( value :: Foreign
16+ , defaultValue :: Foreign
17+ , onChange :: EffectFn1 Foreign Unit
18+ , minValue :: Foreign
19+ , maxValue :: Foreign
20+ , isDisabled :: Boolean
21+ , isReadOnly :: Boolean
22+ , className :: String
23+ | r
24+ )
25+
26+calendar
27+ :: forall givenProps nonDataProps kids
28+ . IsJSX kids
29+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | CalendarProps () }
30+ => { | givenProps }
31+ -> kids
32+ -> JSX
33+calendar props kids = runFn4 createElementTransformImpl {} Raw.calendar props kids
34+
35+type SectionProps r = (className :: String | r)
36+
37+calendarHeader
38+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
39+calendarHeader props kids = runFn4 createElementTransformImpl {} Raw.calendarHeader props kids
40+
41+calendarHeading
42+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
43+calendarHeading props kids = runFn4 createElementTransformImpl {} Raw.calendarHeading props kids
44+
45+calendarNavButton
46+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
47+calendarNavButton props kids = runFn4 createElementTransformImpl {} Raw.calendarNavButton props kids
48+
49+calendarGrid
50+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
51+calendarGrid props kids = runFn4 createElementTransformImpl {} Raw.calendarGrid props kids
52+
53+calendarGridHeader
54+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
55+calendarGridHeader props kids = runFn4 createElementTransformImpl {} Raw.calendarGridHeader props kids
56+
57+calendarGridBody
58+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
59+calendarGridBody props kids = runFn4 createElementTransformImpl {} Raw.calendarGridBody props kids
60+
61+calendarHeaderCell
62+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
63+calendarHeaderCell props kids = runFn4 createElementTransformImpl {} Raw.calendarHeaderCell props kids
64+
65+type CalendarCellProps r = (date :: Foreign, className :: String | r)
66+
67+calendarCell
68+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | CalendarCellProps () } => { | g } -> k -> JSX
69+calendarCell props kids = runFn4 createElementTransformImpl {} Raw.calendarCell props kids
70+
71+calendarCellIndicator
72+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
73+calendarCellIndicator props kids = runFn4 createElementTransformImpl {} Raw.calendarCellIndicator props kids
74+
75+-- RangeCalendar
76+type RangeCalendarProps r =
77+ ( value :: Foreign
78+ , defaultValue :: Foreign
79+ , onChange :: EffectFn1 Foreign Unit
80+ , minValue :: Foreign
81+ , maxValue :: Foreign
82+ , isDisabled :: Boolean
83+ , isReadOnly :: Boolean
84+ , className :: String
85+ | r
86+ )
87+
88+rangeCalendar
89+ :: forall givenProps nonDataProps kids
90+ . IsJSX kids
91+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | RangeCalendarProps () }
92+ => { | givenProps }
93+ -> kids
94+ -> JSX
95+rangeCalendar props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendar props kids
96+
97+rangeCalendarHeader
98+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
99+rangeCalendarHeader props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendarHeader props kids
100+
101+rangeCalendarHeading
102+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
103+rangeCalendarHeading props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendarHeading props kids
104+
105+rangeCalendarNavButton
106+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
107+rangeCalendarNavButton props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendarNavButton props kids
108+
109+rangeCalendarGrid
110+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
111+rangeCalendarGrid props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendarGrid props kids
112+
113+rangeCalendarCell
114+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | CalendarCellProps () } => { | g } -> k -> JSX
115+rangeCalendarCell props kids = runFn4 createElementTransformImpl {} Raw.rangeCalendarCell props kids
src/HeroUI/Checkbox.pursnew file+93
@@ -0,0 +1,93 @@
1+module HeroUI.Checkbox where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, Orientation, fieldVariantToString, orientationToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type CheckboxProps r =
14+ ( value :: String
15+ , isSelected :: Boolean
16+ , defaultSelected :: Boolean
17+ , onChange :: EffectFn1 Boolean Unit
18+ , isIndeterminate :: Boolean
19+ , isDisabled :: Boolean
20+ , isReadOnly :: Boolean
21+ , isRequired :: Boolean
22+ , isInvalid :: Boolean
23+ , name :: String
24+ , variant :: FieldVariant
25+ , className :: String
26+ | r
27+ )
28+
29+checkbox
30+ :: forall givenProps nonDataProps kids
31+ . IsJSX kids
32+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | CheckboxProps () }
33+ => { | givenProps }
34+ -> kids
35+ -> JSX
36+checkbox props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.checkbox props kids
37+
38+type CheckboxGroupProps r =
39+ ( value :: Array String
40+ , defaultValue :: Array String
41+ , onChange :: EffectFn1 (Array String) Unit
42+ , isDisabled :: Boolean
43+ , isReadOnly :: Boolean
44+ , isRequired :: Boolean
45+ , isInvalid :: Boolean
46+ , name :: String
47+ , orientation :: Orientation
48+ , variant :: FieldVariant
49+ , className :: String
50+ | r
51+ )
52+
53+checkboxGroupTransforms
54+ :: { variant :: FieldVariant -> String, orientation :: Orientation -> String }
55+checkboxGroupTransforms = { variant: fieldVariantToString, orientation: orientationToString }
56+
57+checkboxGroup
58+ :: forall givenProps nonDataProps kids
59+ . IsJSX kids
60+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | CheckboxGroupProps () }
61+ => { | givenProps }
62+ -> kids
63+ -> JSX
64+checkboxGroup props kids = runFn4 createElementTransformImpl checkboxGroupTransforms Raw.checkboxGroup props kids
65+
66+type SectionProps r = (className :: String | r)
67+
68+checkboxControl
69+ :: forall givenProps nonDataProps kids
70+ . IsJSX kids
71+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
72+ => { | givenProps }
73+ -> kids
74+ -> JSX
75+checkboxControl props kids = runFn4 createElementTransformImpl {} Raw.checkboxControl props kids
76+
77+checkboxIndicator
78+ :: forall givenProps nonDataProps kids
79+ . IsJSX kids
80+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
81+ => { | givenProps }
82+ -> kids
83+ -> JSX
84+checkboxIndicator props kids = runFn4 createElementTransformImpl {} Raw.checkboxIndicator props kids
85+
86+checkboxContent
87+ :: forall givenProps nonDataProps kids
88+ . IsJSX kids
89+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
90+ => { | givenProps }
91+ -> kids
92+ -> JSX
93+checkboxContent props kids = runFn4 createElementTransformImpl {} Raw.checkboxContent props kids
src/HeroUI/DateField.pursnew file+75
@@ -0,0 +1,75 @@
1+module HeroUI.DateField where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import Foreign (Foreign)
7+import React.Basic (JSX)
8+import Yoga.React.DOM.Internal (class IsJSX)
9+import Data.Function.Uncurried (runFn4)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+data Granularity = Day | Hour | Minute | Second
14+
15+derive instance Eq Granularity
16+derive instance Ord Granularity
17+
18+granularityToString :: Granularity -> String
19+granularityToString = case _ of
20+ Day -> "day"
21+ Hour -> "hour"
22+ Minute -> "minute"
23+ Second -> "second"
24+
25+-- | Date values are `@internationalized/date` objects (`CalendarDate`, ...);
26+-- | they're opaque here, so construct/inspect them via FFI and pass as `Foreign`.
27+type DateFieldProps r =
28+ ( value :: Foreign
29+ , defaultValue :: Foreign
30+ , onChange :: EffectFn1 Foreign Unit
31+ , minValue :: Foreign
32+ , maxValue :: Foreign
33+ , granularity :: Granularity
34+ , isDisabled :: Boolean
35+ , isReadOnly :: Boolean
36+ , isRequired :: Boolean
37+ , isInvalid :: Boolean
38+ , fullWidth :: Boolean
39+ , className :: String
40+ | r
41+ )
42+
43+dateField
44+ :: forall givenProps nonDataProps kids
45+ . IsJSX kids
46+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DateFieldProps () }
47+ => { | givenProps }
48+ -> kids
49+ -> JSX
50+dateField props kids = runFn4 createElementTransformImpl { granularity: granularityToString } Raw.dateField props kids
51+
52+type TimeFieldProps r =
53+ ( value :: Foreign
54+ , defaultValue :: Foreign
55+ , onChange :: EffectFn1 Foreign Unit
56+ , minValue :: Foreign
57+ , maxValue :: Foreign
58+ , granularity :: Granularity
59+ , isDisabled :: Boolean
60+ , isReadOnly :: Boolean
61+ , isRequired :: Boolean
62+ , isInvalid :: Boolean
63+ , fullWidth :: Boolean
64+ , className :: String
65+ | r
66+ )
67+
68+timeField
69+ :: forall givenProps nonDataProps kids
70+ . IsJSX kids
71+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | TimeFieldProps () }
72+ => { | givenProps }
73+ -> kids
74+ -> JSX
75+timeField props kids = runFn4 createElementTransformImpl { granularity: granularityToString } Raw.timeField props kids
src/HeroUI/DatePicker.pursnew file+126
@@ -0,0 +1,126 @@
1+module HeroUI.DatePicker where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import Foreign (Foreign)
7+import React.Basic (JSX)
8+import Yoga.React.DOM.Internal (class IsJSX)
9+import Data.Function.Uncurried (runFn4)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+-- | Date values are opaque `@internationalized/date` objects; pass as `Foreign`.
14+type DatePickerProps r =
15+ ( value :: Foreign
16+ , defaultValue :: Foreign
17+ , onChange :: EffectFn1 Foreign Unit
18+ , minValue :: Foreign
19+ , maxValue :: Foreign
20+ , isOpen :: Boolean
21+ , isDisabled :: Boolean
22+ , isReadOnly :: Boolean
23+ , isRequired :: Boolean
24+ , isInvalid :: Boolean
25+ , className :: String
26+ | r
27+ )
28+
29+datePicker
30+ :: forall givenProps nonDataProps kids
31+ . IsJSX kids
32+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DatePickerProps () }
33+ => { | givenProps }
34+ -> kids
35+ -> JSX
36+datePicker props kids = runFn4 createElementTransformImpl {} Raw.datePicker props kids
37+
38+type SectionProps r = (className :: String | r)
39+
40+datePickerTrigger
41+ :: forall givenProps nonDataProps kids
42+ . IsJSX kids
43+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
44+ => { | givenProps }
45+ -> kids
46+ -> JSX
47+datePickerTrigger props kids = runFn4 createElementTransformImpl {} Raw.datePickerTrigger props kids
48+
49+datePickerTriggerIndicator
50+ :: forall givenProps nonDataProps kids
51+ . IsJSX kids
52+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
53+ => { | givenProps }
54+ -> kids
55+ -> JSX
56+datePickerTriggerIndicator props kids = runFn4 createElementTransformImpl {} Raw.datePickerTriggerIndicator props kids
57+
58+datePickerPopover
59+ :: forall givenProps nonDataProps kids
60+ . IsJSX kids
61+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
62+ => { | givenProps }
63+ -> kids
64+ -> JSX
65+datePickerPopover props kids = runFn4 createElementTransformImpl {} Raw.datePickerPopover props kids
66+
67+-- | Range pickers take a `{ start, end }` range object; pass as `Foreign`.
68+type DateRangePickerProps r =
69+ ( value :: Foreign
70+ , defaultValue :: Foreign
71+ , onChange :: EffectFn1 Foreign Unit
72+ , minValue :: Foreign
73+ , maxValue :: Foreign
74+ , isOpen :: Boolean
75+ , isDisabled :: Boolean
76+ , isReadOnly :: Boolean
77+ , isRequired :: Boolean
78+ , isInvalid :: Boolean
79+ , className :: String
80+ | r
81+ )
82+
83+dateRangePicker
84+ :: forall givenProps nonDataProps kids
85+ . IsJSX kids
86+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DateRangePickerProps () }
87+ => { | givenProps }
88+ -> kids
89+ -> JSX
90+dateRangePicker props kids = runFn4 createElementTransformImpl {} Raw.dateRangePicker props kids
91+
92+dateRangePickerTrigger
93+ :: forall givenProps nonDataProps kids
94+ . IsJSX kids
95+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
96+ => { | givenProps }
97+ -> kids
98+ -> JSX
99+dateRangePickerTrigger props kids = runFn4 createElementTransformImpl {} Raw.dateRangePickerTrigger props kids
100+
101+dateRangePickerTriggerIndicator
102+ :: forall givenProps nonDataProps kids
103+ . IsJSX kids
104+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
105+ => { | givenProps }
106+ -> kids
107+ -> JSX
108+dateRangePickerTriggerIndicator props kids = runFn4 createElementTransformImpl {} Raw.dateRangePickerTriggerIndicator props kids
109+
110+dateRangePickerRangeSeparator
111+ :: forall givenProps nonDataProps kids
112+ . IsJSX kids
113+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
114+ => { | givenProps }
115+ -> kids
116+ -> JSX
117+dateRangePickerRangeSeparator props kids = runFn4 createElementTransformImpl {} Raw.dateRangePickerRangeSeparator props kids
118+
119+dateRangePickerPopover
120+ :: forall givenProps nonDataProps kids
121+ . IsJSX kids
122+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
123+ => { | givenProps }
124+ -> kids
125+ -> JSX
126+dateRangePickerPopover props kids = runFn4 createElementTransformImpl {} Raw.dateRangePickerPopover props kids
src/HeroUI/Form.pursnew file+39
@@ -0,0 +1,39 @@
1+module HeroUI.Form where
2+
3+import Prelude
4+
5+import React.Basic (JSX)
6+import React.Basic.Events (EventHandler)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
10+import HeroUI.Raw as Raw
11+
12+data ValidationBehavior = Native | Aria
13+
14+derive instance Eq ValidationBehavior
15+derive instance Ord ValidationBehavior
16+
17+validationBehaviorToString :: ValidationBehavior -> String
18+validationBehaviorToString = case _ of
19+ Native -> "native"
20+ Aria -> "aria"
21+
22+type FormProps r =
23+ ( action :: String
24+ , method :: String
25+ , validationBehavior :: ValidationBehavior
26+ , onSubmit :: EventHandler
27+ , onReset :: EventHandler
28+ , className :: String
29+ | r
30+ )
31+
32+form
33+ :: forall givenProps nonDataProps kids
34+ . IsJSX kids
35+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | FormProps () }
36+ => { | givenProps }
37+ -> kids
38+ -> JSX
39+form props kids = runFn4 createElementTransformImpl { validationBehavior: validationBehaviorToString } Raw.form props kids
src/HeroUI/Input.pursnew file+120
@@ -0,0 +1,120 @@
1+module HeroUI.Input where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, fieldVariantToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+data InputType
14+ = InputTypeText
15+ | InputTypeEmail
16+ | InputTypePassword
17+ | InputTypeNumber
18+ | InputTypeTel
19+ | InputTypeUrl
20+ | InputTypeSearch
21+ | InputTypeDate
22+ | InputTypeTime
23+ | InputTypeDateTimeLocal
24+ | InputTypeMonth
25+ | InputTypeWeek
26+ | InputTypeColor
27+
28+derive instance Eq InputType
29+derive instance Ord InputType
30+
31+inputTypeToString :: InputType -> String
32+inputTypeToString = case _ of
33+ InputTypeText -> "text"
34+ InputTypeEmail -> "email"
35+ InputTypePassword -> "password"
36+ InputTypeNumber -> "number"
37+ InputTypeTel -> "tel"
38+ InputTypeUrl -> "url"
39+ InputTypeSearch -> "search"
40+ InputTypeDate -> "date"
41+ InputTypeTime -> "time"
42+ InputTypeDateTimeLocal -> "datetime-local"
43+ InputTypeMonth -> "month"
44+ InputTypeWeek -> "week"
45+ InputTypeColor -> "color"
46+
47+-- | `TextField` is the stateful field wrapper (holds value/onChange,
48+-- | validation). Compose `input` / a `Label` inside it.
49+type TextFieldProps r =
50+ ( value :: String
51+ , defaultValue :: String
52+ , onChange :: EffectFn1 String Unit
53+ , type :: InputType
54+ , name :: String
55+ , isDisabled :: Boolean
56+ , isReadOnly :: Boolean
57+ , isRequired :: Boolean
58+ , isInvalid :: Boolean
59+ , autoFocus :: Boolean
60+ , fullWidth :: Boolean
61+ , variant :: FieldVariant
62+ , className :: String
63+ | r
64+ )
65+
66+textFieldTransforms :: { type :: InputType -> String, variant :: FieldVariant -> String }
67+textFieldTransforms = { type: inputTypeToString, variant: fieldVariantToString }
68+
69+textField
70+ :: forall givenProps nonDataProps kids
71+ . IsJSX kids
72+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | TextFieldProps () }
73+ => { | givenProps }
74+ -> kids
75+ -> JSX
76+textField props kids = runFn4 createElementTransformImpl textFieldTransforms Raw.textField props kids
77+
78+-- | The bare styled input element. Use inside `textField` for managed state.
79+type InputProps r =
80+ ( placeholder :: String
81+ , type :: InputType
82+ , name :: String
83+ , autoComplete :: String
84+ , fullWidth :: Boolean
85+ , variant :: FieldVariant
86+ , className :: String
87+ | r
88+ )
89+
90+inputTransforms :: { type :: InputType -> String, variant :: FieldVariant -> String }
91+inputTransforms = { type: inputTypeToString, variant: fieldVariantToString }
92+
93+input
94+ :: forall givenProps nonDataProps kids
95+ . IsJSX kids
96+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | InputProps () }
97+ => { | givenProps }
98+ -> kids
99+ -> JSX
100+input props kids = runFn4 createElementTransformImpl inputTransforms Raw.input props kids
101+
102+type TextareaProps r =
103+ ( placeholder :: String
104+ , rows :: Int
105+ , name :: String
106+ , isDisabled :: Boolean
107+ , fullWidth :: Boolean
108+ , variant :: FieldVariant
109+ , className :: String
110+ | r
111+ )
112+
113+textarea
114+ :: forall givenProps nonDataProps kids
115+ . IsJSX kids
116+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | TextareaProps () }
117+ => { | givenProps }
118+ -> kids
119+ -> JSX
120+textarea props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.textarea props kids
src/HeroUI/InputOTP.pursnew file+66
@@ -0,0 +1,66 @@
1+module HeroUI.InputOTP where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, fieldVariantToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type InputOTPProps r =
14+ ( value :: String
15+ , defaultValue :: String
16+ , onChange :: EffectFn1 String Unit
17+ , maxLength :: Int
18+ , isDisabled :: Boolean
19+ , isInvalid :: Boolean
20+ , variant :: FieldVariant
21+ , inputClassName :: String
22+ , className :: String
23+ | r
24+ )
25+
26+inputOTP
27+ :: forall givenProps nonDataProps kids
28+ . IsJSX kids
29+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | InputOTPProps () }
30+ => { | givenProps }
31+ -> kids
32+ -> JSX
33+inputOTP props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.inputOTP props kids
34+
35+type InputOTPGroupProps r = (className :: String | r)
36+
37+inputOTPGroup
38+ :: forall givenProps nonDataProps kids
39+ . IsJSX kids
40+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | InputOTPGroupProps () }
41+ => { | givenProps }
42+ -> kids
43+ -> JSX
44+inputOTPGroup props kids = runFn4 createElementTransformImpl {} Raw.inputOTPGroup props kids
45+
46+type InputOTPSlotProps r = (index :: Int, className :: String | r)
47+
48+inputOTPSlot
49+ :: forall givenProps nonDataProps kids
50+ . IsJSX kids
51+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | InputOTPSlotProps () }
52+ => { | givenProps }
53+ -> kids
54+ -> JSX
55+inputOTPSlot props kids = runFn4 createElementTransformImpl {} Raw.inputOTPSlot props kids
56+
57+type InputOTPSeparatorProps r = (className :: String | r)
58+
59+inputOTPSeparator
60+ :: forall givenProps nonDataProps kids
61+ . IsJSX kids
62+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | InputOTPSeparatorProps () }
63+ => { | givenProps }
64+ -> kids
65+ -> JSX
66+inputOTPSeparator props kids = runFn4 createElementTransformImpl {} Raw.inputOTPSeparator props kids
src/HeroUI/ListBox.pursnew file+63
@@ -0,0 +1,63 @@
1+module HeroUI.ListBox where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import Foreign (Foreign)
7+import React.Basic (JSX)
8+import Yoga.React.DOM.Internal (class IsJSX)
9+import Data.Function.Uncurried (runFn4)
10+import HeroUI.Types (SelectionMode, selectionModeToString)
11+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
12+import HeroUI.Raw as Raw
13+
14+type ListBoxProps r =
15+ ( selectionMode :: SelectionMode
16+ , selectedKeys :: Array String
17+ , defaultSelectedKeys :: Array String
18+ , onSelectionChange :: EffectFn1 Foreign Unit
19+ , disabledKeys :: Array String
20+ , isDisabled :: Boolean
21+ , className :: String
22+ | r
23+ )
24+
25+listBox
26+ :: forall givenProps nonDataProps kids
27+ . IsJSX kids
28+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ListBoxProps () }
29+ => { | givenProps }
30+ -> kids
31+ -> JSX
32+listBox props kids = runFn4 createElementTransformImpl { selectionMode: selectionModeToString } Raw.listBox props kids
33+
34+-- | Collection item. `id` identifies the item for selection state; supply
35+-- | `textValue` when the children aren't plain text (used for typeahead).
36+type ListBoxItemProps r =
37+ ( id :: String
38+ , textValue :: String
39+ , isDisabled :: Boolean
40+ , href :: String
41+ , className :: String
42+ | r
43+ )
44+
45+listBoxItem
46+ :: forall givenProps nonDataProps kids
47+ . IsJSX kids
48+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ListBoxItemProps () }
49+ => { | givenProps }
50+ -> kids
51+ -> JSX
52+listBoxItem props kids = runFn4 createElementTransformImpl {} Raw.listBoxItem props kids
53+
54+type ListBoxSectionProps r = (id :: String, className :: String | r)
55+
56+listBoxSection
57+ :: forall givenProps nonDataProps kids
58+ . IsJSX kids
59+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ListBoxSectionProps () }
60+ => { | givenProps }
61+ -> kids
62+ -> JSX
63+listBoxSection props kids = runFn4 createElementTransformImpl {} Raw.listBoxSection props kids
src/HeroUI/NumberField.pursnew file+76
@@ -0,0 +1,76 @@
1+module HeroUI.NumberField where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, fieldVariantToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type NumberFieldProps r =
14+ ( value :: Number
15+ , defaultValue :: Number
16+ , onChange :: EffectFn1 Number Unit
17+ , minValue :: Number
18+ , maxValue :: Number
19+ , step :: Number
20+ , name :: String
21+ , isDisabled :: Boolean
22+ , isReadOnly :: Boolean
23+ , isRequired :: Boolean
24+ , isInvalid :: Boolean
25+ , fullWidth :: Boolean
26+ , variant :: FieldVariant
27+ , className :: String
28+ | r
29+ )
30+
31+numberField
32+ :: forall givenProps nonDataProps kids
33+ . IsJSX kids
34+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | NumberFieldProps () }
35+ => { | givenProps }
36+ -> kids
37+ -> JSX
38+numberField props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.numberField props kids
39+
40+type SectionProps r = (className :: String | r)
41+
42+numberFieldGroup
43+ :: forall givenProps nonDataProps kids
44+ . IsJSX kids
45+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
46+ => { | givenProps }
47+ -> kids
48+ -> JSX
49+numberFieldGroup props kids = runFn4 createElementTransformImpl {} Raw.numberFieldGroup props kids
50+
51+numberFieldInput
52+ :: forall givenProps nonDataProps kids
53+ . IsJSX kids
54+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
55+ => { | givenProps }
56+ -> kids
57+ -> JSX
58+numberFieldInput props kids = runFn4 createElementTransformImpl {} Raw.numberFieldInput props kids
59+
60+numberFieldIncrementButton
61+ :: forall givenProps nonDataProps kids
62+ . IsJSX kids
63+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
64+ => { | givenProps }
65+ -> kids
66+ -> JSX
67+numberFieldIncrementButton props kids = runFn4 createElementTransformImpl {} Raw.numberFieldIncrementButton props kids
68+
69+numberFieldDecrementButton
70+ :: forall givenProps nonDataProps kids
71+ . IsJSX kids
72+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
73+ => { | givenProps }
74+ -> kids
75+ -> JSX
76+numberFieldDecrementButton props kids = runFn4 createElementTransformImpl {} Raw.numberFieldDecrementButton props kids
src/HeroUI/Radio.pursnew file+85
@@ -0,0 +1,85 @@
1+module HeroUI.Radio where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, Orientation, fieldVariantToString, orientationToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type RadioProps r =
14+ ( value :: String
15+ , isDisabled :: Boolean
16+ , name :: String
17+ , className :: String
18+ | r
19+ )
20+
21+radio
22+ :: forall givenProps nonDataProps kids
23+ . IsJSX kids
24+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | RadioProps () }
25+ => { | givenProps }
26+ -> kids
27+ -> JSX
28+radio props kids = runFn4 createElementTransformImpl {} Raw.radio props kids
29+
30+type RadioGroupProps r =
31+ ( value :: String
32+ , defaultValue :: String
33+ , onChange :: EffectFn1 String Unit
34+ , isDisabled :: Boolean
35+ , isReadOnly :: Boolean
36+ , isRequired :: Boolean
37+ , isInvalid :: Boolean
38+ , name :: String
39+ , orientation :: Orientation
40+ , variant :: FieldVariant
41+ , className :: String
42+ | r
43+ )
44+
45+radioGroupTransforms
46+ :: { variant :: FieldVariant -> String, orientation :: Orientation -> String }
47+radioGroupTransforms = { variant: fieldVariantToString, orientation: orientationToString }
48+
49+radioGroup
50+ :: forall givenProps nonDataProps kids
51+ . IsJSX kids
52+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | RadioGroupProps () }
53+ => { | givenProps }
54+ -> kids
55+ -> JSX
56+radioGroup props kids = runFn4 createElementTransformImpl radioGroupTransforms Raw.radioGroup props kids
57+
58+type SectionProps r = (className :: String | r)
59+
60+radioControl
61+ :: forall givenProps nonDataProps kids
62+ . IsJSX kids
63+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
64+ => { | givenProps }
65+ -> kids
66+ -> JSX
67+radioControl props kids = runFn4 createElementTransformImpl {} Raw.radioControl props kids
68+
69+radioIndicator
70+ :: forall givenProps nonDataProps kids
71+ . IsJSX kids
72+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
73+ => { | givenProps }
74+ -> kids
75+ -> JSX
76+radioIndicator props kids = runFn4 createElementTransformImpl {} Raw.radioIndicator props kids
77+
78+radioContent
79+ :: forall givenProps nonDataProps kids
80+ . IsJSX kids
81+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
82+ => { | givenProps }
83+ -> kids
84+ -> JSX
85+radioContent props kids = runFn4 createElementTransformImpl {} Raw.radioContent props kids
src/HeroUI/Raw.js+182
@@ -39,6 +39,81 @@ import {
3939 TabIndicator,
4040 TabSeparator,
4141 TabPanel,
42+ TextFieldRoot,
43+ InputRoot,
44+ TextAreaRoot,
45+ NumberFieldRoot,
46+ NumberFieldGroup,
47+ NumberFieldInput,
48+ NumberFieldIncrementButton,
49+ NumberFieldDecrementButton,
50+ CheckboxRoot,
51+ CheckboxControl,
52+ CheckboxIndicator,
53+ CheckboxContent,
54+ CheckboxGroup,
55+ RadioRoot,
56+ RadioControl,
57+ RadioIndicator,
58+ RadioContent,
59+ RadioGroupRoot,
60+ SwitchRoot,
61+ SwitchControl,
62+ SwitchThumb,
63+ SwitchIcon,
64+ SwitchContent,
65+ SliderRoot,
66+ SliderOutput,
67+ SliderTrack,
68+ SliderFill,
69+ SliderThumb,
70+ SliderMarks,
71+ FormRoot,
72+ InputOTPRoot,
73+ InputOTPGroup,
74+ InputOTPSlot,
75+ InputOTPSeparator,
76+ ListBoxRoot,
77+ ListBoxItemRoot,
78+ ListBoxSectionRoot,
79+ SelectRoot,
80+ SelectTrigger,
81+ SelectValue,
82+ SelectIndicator,
83+ SelectPopover,
84+ AutocompleteRoot,
85+ AutocompleteTrigger,
86+ AutocompleteValue,
87+ AutocompleteIndicator,
88+ AutocompletePopover,
89+ AutocompleteClearButton,
90+ DateFieldRoot,
91+ TimeFieldRoot,
92+ DatePickerRoot,
93+ DatePickerTrigger,
94+ DatePickerTriggerIndicator,
95+ DatePickerPopover,
96+ DateRangePickerRoot,
97+ DateRangePickerTrigger,
98+ DateRangePickerTriggerIndicator,
99+ DateRangePickerRangeSeparator,
100+ DateRangePickerPopover,
101+ CalendarRoot,
102+ CalendarHeader,
103+ CalendarHeading,
104+ CalendarNavButton,
105+ CalendarGrid,
106+ CalendarGridHeader,
107+ CalendarGridBody,
108+ CalendarHeaderCell,
109+ CalendarCell,
110+ CalendarCellIndicator,
111+ RangeCalendarRoot,
112+ RangeCalendarHeader,
113+ RangeCalendarHeading,
114+ RangeCalendarNavButton,
115+ RangeCalendarGrid,
116+ RangeCalendarCell,
42117} from "@heroui/react";
43118
44119// Button
@@ -106,3 +181,110 @@ export const tab = Tab;
106181export const tabIndicator = TabIndicator;
107182export const tabSeparator = TabSeparator;
108183export const tabPanel = TabPanel;
184+
185+// TextField / Input / Textarea
186+export const textField = TextFieldRoot;
187+export const input = InputRoot;
188+export const textarea = TextAreaRoot;
189+
190+// NumberField
191+export const numberField = NumberFieldRoot;
192+export const numberFieldGroup = NumberFieldGroup;
193+export const numberFieldInput = NumberFieldInput;
194+export const numberFieldIncrementButton = NumberFieldIncrementButton;
195+export const numberFieldDecrementButton = NumberFieldDecrementButton;
196+
197+// Checkbox
198+export const checkbox = CheckboxRoot;
199+export const checkboxControl = CheckboxControl;
200+export const checkboxIndicator = CheckboxIndicator;
201+export const checkboxContent = CheckboxContent;
202+export const checkboxGroup = CheckboxGroup;
203+
204+// Radio
205+export const radio = RadioRoot;
206+export const radioControl = RadioControl;
207+export const radioIndicator = RadioIndicator;
208+export const radioContent = RadioContent;
209+export const radioGroup = RadioGroupRoot;
210+
211+// Switch
212+export const switch_ = SwitchRoot;
213+export const switchControl = SwitchControl;
214+export const switchThumb = SwitchThumb;
215+export const switchIcon = SwitchIcon;
216+export const switchContent = SwitchContent;
217+
218+// Slider
219+export const slider = SliderRoot;
220+export const sliderOutput = SliderOutput;
221+export const sliderTrack = SliderTrack;
222+export const sliderFill = SliderFill;
223+export const sliderThumb = SliderThumb;
224+export const sliderMarks = SliderMarks;
225+
226+// Form
227+export const form = FormRoot;
228+
229+// InputOTP
230+export const inputOTP = InputOTPRoot;
231+export const inputOTPGroup = InputOTPGroup;
232+export const inputOTPSlot = InputOTPSlot;
233+export const inputOTPSeparator = InputOTPSeparator;
234+
235+// ListBox
236+export const listBox = ListBoxRoot;
237+export const listBoxItem = ListBoxItemRoot;
238+export const listBoxSection = ListBoxSectionRoot;
239+
240+// Select
241+export const select = SelectRoot;
242+export const selectTrigger = SelectTrigger;
243+export const selectValue = SelectValue;
244+export const selectIndicator = SelectIndicator;
245+export const selectPopover = SelectPopover;
246+
247+// Autocomplete
248+export const autocomplete = AutocompleteRoot;
249+export const autocompleteTrigger = AutocompleteTrigger;
250+export const autocompleteValue = AutocompleteValue;
251+export const autocompleteIndicator = AutocompleteIndicator;
252+export const autocompletePopover = AutocompletePopover;
253+export const autocompleteClearButton = AutocompleteClearButton;
254+
255+// DateField / TimeField
256+export const dateField = DateFieldRoot;
257+export const timeField = TimeFieldRoot;
258+
259+// DatePicker
260+export const datePicker = DatePickerRoot;
261+export const datePickerTrigger = DatePickerTrigger;
262+export const datePickerTriggerIndicator = DatePickerTriggerIndicator;
263+export const datePickerPopover = DatePickerPopover;
264+
265+// DateRangePicker
266+export const dateRangePicker = DateRangePickerRoot;
267+export const dateRangePickerTrigger = DateRangePickerTrigger;
268+export const dateRangePickerTriggerIndicator = DateRangePickerTriggerIndicator;
269+export const dateRangePickerRangeSeparator = DateRangePickerRangeSeparator;
270+export const dateRangePickerPopover = DateRangePickerPopover;
271+
272+// Calendar
273+export const calendar = CalendarRoot;
274+export const calendarHeader = CalendarHeader;
275+export const calendarHeading = CalendarHeading;
276+export const calendarNavButton = CalendarNavButton;
277+export const calendarGrid = CalendarGrid;
278+export const calendarGridHeader = CalendarGridHeader;
279+export const calendarGridBody = CalendarGridBody;
280+export const calendarHeaderCell = CalendarHeaderCell;
281+export const calendarCell = CalendarCell;
282+export const calendarCellIndicator = CalendarCellIndicator;
283+
284+// RangeCalendar
285+export const rangeCalendar = RangeCalendarRoot;
286+export const rangeCalendarHeader = RangeCalendarHeader;
287+export const rangeCalendarHeading = RangeCalendarHeading;
288+export const rangeCalendarNavButton = RangeCalendarNavButton;
289+export const rangeCalendarGrid = RangeCalendarGrid;
290+export const rangeCalendarCell = RangeCalendarCell;
src/HeroUI/Raw.purs+107
@@ -67,3 +67,110 @@ foreign import tab :: forall r. ReactComponent { | r }
6767foreign import tabIndicator :: forall r. ReactComponent { | r }
6868foreign import tabSeparator :: forall r. ReactComponent { | r }
6969foreign import tabPanel :: forall r. ReactComponent { | r }
70+
71+-- TextField / Input / Textarea
72+foreign import textField :: forall r. ReactComponent { | r }
73+foreign import input :: forall r. ReactComponent { | r }
74+foreign import textarea :: forall r. ReactComponent { | r }
75+
76+-- NumberField
77+foreign import numberField :: forall r. ReactComponent { | r }
78+foreign import numberFieldGroup :: forall r. ReactComponent { | r }
79+foreign import numberFieldInput :: forall r. ReactComponent { | r }
80+foreign import numberFieldIncrementButton :: forall r. ReactComponent { | r }
81+foreign import numberFieldDecrementButton :: forall r. ReactComponent { | r }
82+
83+-- Checkbox
84+foreign import checkbox :: forall r. ReactComponent { | r }
85+foreign import checkboxControl :: forall r. ReactComponent { | r }
86+foreign import checkboxIndicator :: forall r. ReactComponent { | r }
87+foreign import checkboxContent :: forall r. ReactComponent { | r }
88+foreign import checkboxGroup :: forall r. ReactComponent { | r }
89+
90+-- Radio
91+foreign import radio :: forall r. ReactComponent { | r }
92+foreign import radioControl :: forall r. ReactComponent { | r }
93+foreign import radioIndicator :: forall r. ReactComponent { | r }
94+foreign import radioContent :: forall r. ReactComponent { | r }
95+foreign import radioGroup :: forall r. ReactComponent { | r }
96+
97+-- Switch
98+foreign import switch_ :: forall r. ReactComponent { | r }
99+foreign import switchControl :: forall r. ReactComponent { | r }
100+foreign import switchThumb :: forall r. ReactComponent { | r }
101+foreign import switchIcon :: forall r. ReactComponent { | r }
102+foreign import switchContent :: forall r. ReactComponent { | r }
103+
104+-- Slider
105+foreign import slider :: forall r. ReactComponent { | r }
106+foreign import sliderOutput :: forall r. ReactComponent { | r }
107+foreign import sliderTrack :: forall r. ReactComponent { | r }
108+foreign import sliderFill :: forall r. ReactComponent { | r }
109+foreign import sliderThumb :: forall r. ReactComponent { | r }
110+foreign import sliderMarks :: forall r. ReactComponent { | r }
111+
112+-- Form
113+foreign import form :: forall r. ReactComponent { | r }
114+
115+-- InputOTP
116+foreign import inputOTP :: forall r. ReactComponent { | r }
117+foreign import inputOTPGroup :: forall r. ReactComponent { | r }
118+foreign import inputOTPSlot :: forall r. ReactComponent { | r }
119+foreign import inputOTPSeparator :: forall r. ReactComponent { | r }
120+
121+-- ListBox
122+foreign import listBox :: forall r. ReactComponent { | r }
123+foreign import listBoxItem :: forall r. ReactComponent { | r }
124+foreign import listBoxSection :: forall r. ReactComponent { | r }
125+
126+-- Select
127+foreign import select :: forall r. ReactComponent { | r }
128+foreign import selectTrigger :: forall r. ReactComponent { | r }
129+foreign import selectValue :: forall r. ReactComponent { | r }
130+foreign import selectIndicator :: forall r. ReactComponent { | r }
131+foreign import selectPopover :: forall r. ReactComponent { | r }
132+
133+-- Autocomplete
134+foreign import autocomplete :: forall r. ReactComponent { | r }
135+foreign import autocompleteTrigger :: forall r. ReactComponent { | r }
136+foreign import autocompleteValue :: forall r. ReactComponent { | r }
137+foreign import autocompleteIndicator :: forall r. ReactComponent { | r }
138+foreign import autocompletePopover :: forall r. ReactComponent { | r }
139+foreign import autocompleteClearButton :: forall r. ReactComponent { | r }
140+
141+-- DateField / TimeField
142+foreign import dateField :: forall r. ReactComponent { | r }
143+foreign import timeField :: forall r. ReactComponent { | r }
144+
145+-- DatePicker
146+foreign import datePicker :: forall r. ReactComponent { | r }
147+foreign import datePickerTrigger :: forall r. ReactComponent { | r }
148+foreign import datePickerTriggerIndicator :: forall r. ReactComponent { | r }
149+foreign import datePickerPopover :: forall r. ReactComponent { | r }
150+
151+-- DateRangePicker
152+foreign import dateRangePicker :: forall r. ReactComponent { | r }
153+foreign import dateRangePickerTrigger :: forall r. ReactComponent { | r }
154+foreign import dateRangePickerTriggerIndicator :: forall r. ReactComponent { | r }
155+foreign import dateRangePickerRangeSeparator :: forall r. ReactComponent { | r }
156+foreign import dateRangePickerPopover :: forall r. ReactComponent { | r }
157+
158+-- Calendar
159+foreign import calendar :: forall r. ReactComponent { | r }
160+foreign import calendarHeader :: forall r. ReactComponent { | r }
161+foreign import calendarHeading :: forall r. ReactComponent { | r }
162+foreign import calendarNavButton :: forall r. ReactComponent { | r }
163+foreign import calendarGrid :: forall r. ReactComponent { | r }
164+foreign import calendarGridHeader :: forall r. ReactComponent { | r }
165+foreign import calendarGridBody :: forall r. ReactComponent { | r }
166+foreign import calendarHeaderCell :: forall r. ReactComponent { | r }
167+foreign import calendarCell :: forall r. ReactComponent { | r }
168+foreign import calendarCellIndicator :: forall r. ReactComponent { | r }
169+
170+-- RangeCalendar
171+foreign import rangeCalendar :: forall r. ReactComponent { | r }
172+foreign import rangeCalendarHeader :: forall r. ReactComponent { | r }
173+foreign import rangeCalendarHeading :: forall r. ReactComponent { | r }
174+foreign import rangeCalendarNavButton :: forall r. ReactComponent { | r }
175+foreign import rangeCalendarGrid :: forall r. ReactComponent { | r }
176+foreign import rangeCalendarCell :: forall r. ReactComponent { | r }
src/HeroUI/Select.pursnew file+78
@@ -0,0 +1,78 @@
1+module HeroUI.Select where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (FieldVariant, fieldVariantToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type SelectProps r =
14+ ( selectedKey :: String
15+ , defaultSelectedKey :: String
16+ , onSelectionChange :: EffectFn1 String Unit
17+ , placeholder :: String
18+ , name :: String
19+ , isDisabled :: Boolean
20+ , isRequired :: Boolean
21+ , isInvalid :: Boolean
22+ , isOpen :: Boolean
23+ , fullWidth :: Boolean
24+ , variant :: FieldVariant
25+ , className :: String
26+ | r
27+ )
28+
29+select
30+ :: forall givenProps nonDataProps kids
31+ . IsJSX kids
32+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SelectProps () }
33+ => { | givenProps }
34+ -> kids
35+ -> JSX
36+select props kids = runFn4 createElementTransformImpl { variant: fieldVariantToString } Raw.select props kids
37+
38+type SectionProps r = (className :: String | r)
39+
40+selectTrigger
41+ :: forall givenProps nonDataProps kids
42+ . IsJSX kids
43+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
44+ => { | givenProps }
45+ -> kids
46+ -> JSX
47+selectTrigger props kids = runFn4 createElementTransformImpl {} Raw.selectTrigger props kids
48+
49+type SelectValueProps r = (placeholder :: String, className :: String | r)
50+
51+selectValue
52+ :: forall givenProps nonDataProps kids
53+ . IsJSX kids
54+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SelectValueProps () }
55+ => { | givenProps }
56+ -> kids
57+ -> JSX
58+selectValue props kids = runFn4 createElementTransformImpl {} Raw.selectValue props kids
59+
60+selectIndicator
61+ :: forall givenProps nonDataProps kids
62+ . IsJSX kids
63+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
64+ => { | givenProps }
65+ -> kids
66+ -> JSX
67+selectIndicator props kids = runFn4 createElementTransformImpl {} Raw.selectIndicator props kids
68+
69+type SelectPopoverProps r = (placement :: String, className :: String | r)
70+
71+selectPopover
72+ :: forall givenProps nonDataProps kids
73+ . IsJSX kids
74+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SelectPopoverProps () }
75+ => { | givenProps }
76+ -> kids
77+ -> JSX
78+selectPopover props kids = runFn4 createElementTransformImpl {} Raw.selectPopover props kids
src/HeroUI/Slider.pursnew file+81
@@ -0,0 +1,81 @@
1+module HeroUI.Slider where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (Orientation, orientationToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type SliderProps r =
14+ ( value :: Number
15+ , defaultValue :: Number
16+ , onChange :: EffectFn1 Number Unit
17+ , onChangeEnd :: EffectFn1 Number Unit
18+ , minValue :: Number
19+ , maxValue :: Number
20+ , step :: Number
21+ , orientation :: Orientation
22+ , isDisabled :: Boolean
23+ , className :: String
24+ | r
25+ )
26+
27+slider
28+ :: forall givenProps nonDataProps kids
29+ . IsJSX kids
30+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SliderProps () }
31+ => { | givenProps }
32+ -> kids
33+ -> JSX
34+slider props kids = runFn4 createElementTransformImpl { orientation: orientationToString } Raw.slider props kids
35+
36+type SectionProps r = (className :: String | r)
37+
38+sliderOutput
39+ :: forall givenProps nonDataProps kids
40+ . IsJSX kids
41+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
42+ => { | givenProps }
43+ -> kids
44+ -> JSX
45+sliderOutput props kids = runFn4 createElementTransformImpl {} Raw.sliderOutput props kids
46+
47+sliderTrack
48+ :: forall givenProps nonDataProps kids
49+ . IsJSX kids
50+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
51+ => { | givenProps }
52+ -> kids
53+ -> JSX
54+sliderTrack props kids = runFn4 createElementTransformImpl {} Raw.sliderTrack props kids
55+
56+sliderFill
57+ :: forall givenProps nonDataProps kids
58+ . IsJSX kids
59+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
60+ => { | givenProps }
61+ -> kids
62+ -> JSX
63+sliderFill props kids = runFn4 createElementTransformImpl {} Raw.sliderFill props kids
64+
65+sliderThumb
66+ :: forall givenProps nonDataProps kids
67+ . IsJSX kids
68+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
69+ => { | givenProps }
70+ -> kids
71+ -> JSX
72+sliderThumb props kids = runFn4 createElementTransformImpl {} Raw.sliderThumb props kids
73+
74+sliderMarks
75+ :: forall givenProps nonDataProps kids
76+ . IsJSX kids
77+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
78+ => { | givenProps }
79+ -> kids
80+ -> JSX
81+sliderMarks props kids = runFn4 createElementTransformImpl {} Raw.sliderMarks props kids
src/HeroUI/Switch.pursnew file+71
@@ -0,0 +1,71 @@
1+module HeroUI.Switch where
2+
3+import Prelude
4+
5+import Effect.Uncurried (EffectFn1)
6+import React.Basic (JSX)
7+import Yoga.React.DOM.Internal (class IsJSX)
8+import Data.Function.Uncurried (runFn4)
9+import HeroUI.Types (Size, sizeToString)
10+import HeroUI.Internal (class CoerceHeroProps, createElementTransformImpl)
11+import HeroUI.Raw as Raw
12+
13+type SwitchProps r =
14+ ( value :: String
15+ , isSelected :: Boolean
16+ , defaultSelected :: Boolean
17+ , onChange :: EffectFn1 Boolean Unit
18+ , isDisabled :: Boolean
19+ , isReadOnly :: Boolean
20+ , name :: String
21+ , size :: Size
22+ , className :: String
23+ | r
24+ )
25+
26+switch_
27+ :: forall givenProps nonDataProps kids
28+ . IsJSX kids
29+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SwitchProps () }
30+ => { | givenProps }
31+ -> kids
32+ -> JSX
33+switch_ props kids = runFn4 createElementTransformImpl { size: sizeToString } Raw.switch_ props kids
34+
35+type SectionProps r = (className :: String | r)
36+
37+switchControl
38+ :: forall givenProps nonDataProps kids
39+ . IsJSX kids
40+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
41+ => { | givenProps }
42+ -> kids
43+ -> JSX
44+switchControl props kids = runFn4 createElementTransformImpl {} Raw.switchControl props kids
45+
46+switchThumb
47+ :: forall givenProps nonDataProps kids
48+ . IsJSX kids
49+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
50+ => { | givenProps }
51+ -> kids
52+ -> JSX
53+switchThumb props kids = runFn4 createElementTransformImpl {} Raw.switchThumb props kids
54+
55+switchIcon
56+ :: forall givenProps nonDataProps kids
57+ . IsJSX kids
58+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
59+ => { | givenProps }
60+ -> kids
61+ -> JSX
62+switchIcon props kids = runFn4 createElementTransformImpl {} Raw.switchIcon props kids
63+
64+switchContent
65+ :: forall givenProps nonDataProps kids
66+ . IsJSX kids
67+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | SectionProps () }
68+ => { | givenProps }
69+ -> kids
70+ -> JSX
71+switchContent props kids = runFn4 createElementTransformImpl {} Raw.switchContent props kids
src/HeroUI/Types.purs+24
@@ -31,6 +31,30 @@ sizeToString = case _ of
3131 Md -> "md"
3232 Lg -> "lg"
3333
34+-- | The `primary | secondary` field variant shared by HeroUI v3 form
35+-- | controls (Input, Textarea, NumberField, Select, Checkbox, ...).
36+data FieldVariant = Primary | Secondary
37+
38+derive instance Eq FieldVariant
39+derive instance Ord FieldVariant
40+
41+fieldVariantToString :: FieldVariant -> String
42+fieldVariantToString = case _ of
43+ Primary -> "primary"
44+ Secondary -> "secondary"
45+
46+-- | Selection mode for collection components (ListBox, Menu, Table, ...).
47+data SelectionMode = SelectionNone | Single | Multiple
48+
49+derive instance Eq SelectionMode
50+derive instance Ord SelectionMode
51+
52+selectionModeToString :: SelectionMode -> String
53+selectionModeToString = case _ of
54+ SelectionNone -> "none"
55+ Single -> "single"
56+ Multiple -> "multiple"
57+
3458data Orientation = Horizontal | Vertical
3559
3660derive instance Eq Orientation