git.iko.soy/rowtype-yoga/purescript-yoga-heroui3
on main help sign in
wave 3 forms (inputs, choices, select/autocomplete, dates)
commit3529183bd43bf456d823d04fe638c6985b7c9aa5 authorMark <mark.eibes@gmail.com> dateSun 31 May 2026, 17:43 (4 months ago) parent100d782
8 files changed+708
src/HeroUI/Drawer.purs+107 src/HeroUI/Dropdown.purs+107 src/HeroUI/Menu.purs+71 src/HeroUI/Modal.purs+142 src/HeroUI/Popover.purs+63 src/HeroUI/Raw.js+104 src/HeroUI/Raw.purs+58 src/HeroUI/Tooltip.purs+56
src/HeroUI/Drawer.pursnew file+107
@@ -0,0 +1,107 @@
1+module HeroUI.Drawer 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.Internal (class CoerceHeroProps, createElementTransformImpl)
10+import HeroUI.Raw as Raw
11+
12+data Placement = Top | Bottom | Left | Right
13+
14+derive instance Eq Placement
15+derive instance Ord Placement
16+
17+placementToString :: Placement -> String
18+placementToString = case _ of
19+ Top -> "top"
20+ Bottom -> "bottom"
21+ Left -> "left"
22+ Right -> "right"
23+
24+data Backdrop = Blur | Opaque | Transparent
25+
26+derive instance Eq Backdrop
27+derive instance Ord Backdrop
28+
29+backdropToString :: Backdrop -> String
30+backdropToString = case _ of
31+ Blur -> "blur"
32+ Opaque -> "opaque"
33+ Transparent -> "transparent"
34+
35+type DrawerProps r =
36+ ( isOpen :: Boolean
37+ , defaultOpen :: Boolean
38+ , onOpenChange :: EffectFn1 Boolean Unit
39+ , isDismissable :: Boolean
40+ , className :: String
41+ | r
42+ )
43+
44+drawer
45+ :: forall givenProps nonDataProps kids
46+ . IsJSX kids
47+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DrawerProps () }
48+ => { | givenProps }
49+ -> kids
50+ -> JSX
51+drawer props kids = runFn4 createElementTransformImpl {} Raw.drawer props kids
52+
53+type DrawerBackdropProps r = (variant :: Backdrop, isDismissable :: Boolean, className :: String | r)
54+
55+drawerBackdrop
56+ :: forall givenProps nonDataProps kids
57+ . IsJSX kids
58+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DrawerBackdropProps () }
59+ => { | givenProps }
60+ -> kids
61+ -> JSX
62+drawerBackdrop props kids = runFn4 createElementTransformImpl { variant: backdropToString } Raw.drawerBackdrop props kids
63+
64+type DrawerContentProps r = (placement :: Placement, className :: String | r)
65+
66+drawerContent
67+ :: forall givenProps nonDataProps kids
68+ . IsJSX kids
69+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DrawerContentProps () }
70+ => { | givenProps }
71+ -> kids
72+ -> JSX
73+drawerContent props kids = runFn4 createElementTransformImpl { placement: placementToString } Raw.drawerContent props kids
74+
75+type SectionProps r = (className :: String | r)
76+
77+drawerTrigger
78+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
79+drawerTrigger props kids = runFn4 createElementTransformImpl {} Raw.drawerTrigger props kids
80+
81+drawerDialog
82+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
83+drawerDialog props kids = runFn4 createElementTransformImpl {} Raw.drawerDialog props kids
84+
85+drawerHeader
86+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
87+drawerHeader props kids = runFn4 createElementTransformImpl {} Raw.drawerHeader props kids
88+
89+drawerHeading
90+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
91+drawerHeading props kids = runFn4 createElementTransformImpl {} Raw.drawerHeading props kids
92+
93+drawerBody
94+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
95+drawerBody props kids = runFn4 createElementTransformImpl {} Raw.drawerBody props kids
96+
97+drawerFooter
98+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
99+drawerFooter props kids = runFn4 createElementTransformImpl {} Raw.drawerFooter props kids
100+
101+drawerHandle
102+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
103+drawerHandle props kids = runFn4 createElementTransformImpl {} Raw.drawerHandle props kids
104+
105+drawerCloseTrigger
106+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
107+drawerCloseTrigger props kids = runFn4 createElementTransformImpl {} Raw.drawerCloseTrigger props kids
src/HeroUI/Dropdown.pursnew file+107
@@ -0,0 +1,107 @@
1+module HeroUI.Dropdown 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 DropdownProps r =
15+ ( isOpen :: Boolean
16+ , defaultOpen :: Boolean
17+ , onOpenChange :: EffectFn1 Boolean Unit
18+ , className :: String
19+ | r
20+ )
21+
22+dropdown
23+ :: forall givenProps nonDataProps kids
24+ . IsJSX kids
25+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DropdownProps () }
26+ => { | givenProps }
27+ -> kids
28+ -> JSX
29+dropdown props kids = runFn4 createElementTransformImpl {} Raw.dropdown props kids
30+
31+type DropdownMenuProps r =
32+ ( selectionMode :: SelectionMode
33+ , selectedKeys :: Array String
34+ , defaultSelectedKeys :: Array String
35+ , onSelectionChange :: EffectFn1 Foreign Unit
36+ , onAction :: EffectFn1 String Unit
37+ , disabledKeys :: Array String
38+ , className :: String
39+ | r
40+ )
41+
42+dropdownMenu
43+ :: forall givenProps nonDataProps kids
44+ . IsJSX kids
45+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DropdownMenuProps () }
46+ => { | givenProps }
47+ -> kids
48+ -> JSX
49+dropdownMenu props kids = runFn4 createElementTransformImpl { selectionMode: selectionModeToString } Raw.dropdownMenu props kids
50+
51+type DropdownItemProps r =
52+ ( id :: String
53+ , textValue :: String
54+ , isDisabled :: Boolean
55+ , href :: String
56+ , className :: String
57+ | r
58+ )
59+
60+dropdownItem
61+ :: forall givenProps nonDataProps kids
62+ . IsJSX kids
63+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DropdownItemProps () }
64+ => { | givenProps }
65+ -> kids
66+ -> JSX
67+dropdownItem props kids = runFn4 createElementTransformImpl {} Raw.dropdownItem props kids
68+
69+type DropdownSectionProps r = (id :: String, className :: String | r)
70+
71+dropdownSection
72+ :: forall givenProps nonDataProps kids
73+ . IsJSX kids
74+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DropdownSectionProps () }
75+ => { | givenProps }
76+ -> kids
77+ -> JSX
78+dropdownSection props kids = runFn4 createElementTransformImpl {} Raw.dropdownSection props kids
79+
80+type DropdownPopoverProps r = (placement :: String, className :: String | r)
81+
82+dropdownPopover
83+ :: forall givenProps nonDataProps kids
84+ . IsJSX kids
85+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | DropdownPopoverProps () }
86+ => { | givenProps }
87+ -> kids
88+ -> JSX
89+dropdownPopover props kids = runFn4 createElementTransformImpl {} Raw.dropdownPopover props kids
90+
91+type SectionProps r = (className :: String | r)
92+
93+dropdownTrigger
94+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
95+dropdownTrigger props kids = runFn4 createElementTransformImpl {} Raw.dropdownTrigger props kids
96+
97+dropdownItemIndicator
98+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
99+dropdownItemIndicator props kids = runFn4 createElementTransformImpl {} Raw.dropdownItemIndicator props kids
100+
101+dropdownSubmenuIndicator
102+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
103+dropdownSubmenuIndicator props kids = runFn4 createElementTransformImpl {} Raw.dropdownSubmenuIndicator props kids
104+
105+dropdownSubmenuTrigger
106+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
107+dropdownSubmenuTrigger props kids = runFn4 createElementTransformImpl {} Raw.dropdownSubmenuTrigger props kids
src/HeroUI/Menu.pursnew file+71
@@ -0,0 +1,71 @@
1+module HeroUI.Menu 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 MenuProps r =
15+ ( selectionMode :: SelectionMode
16+ , selectedKeys :: Array String
17+ , defaultSelectedKeys :: Array String
18+ , onSelectionChange :: EffectFn1 Foreign Unit
19+ , onAction :: EffectFn1 String Unit
20+ , disabledKeys :: Array String
21+ , className :: String
22+ | r
23+ )
24+
25+menu
26+ :: forall givenProps nonDataProps kids
27+ . IsJSX kids
28+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | MenuProps () }
29+ => { | givenProps }
30+ -> kids
31+ -> JSX
32+menu props kids = runFn4 createElementTransformImpl { selectionMode: selectionModeToString } Raw.menu props kids
33+
34+type MenuItemProps r =
35+ ( id :: String
36+ , textValue :: String
37+ , isDisabled :: Boolean
38+ , href :: String
39+ , className :: String
40+ | r
41+ )
42+
43+menuItem
44+ :: forall givenProps nonDataProps kids
45+ . IsJSX kids
46+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | MenuItemProps () }
47+ => { | givenProps }
48+ -> kids
49+ -> JSX
50+menuItem props kids = runFn4 createElementTransformImpl {} Raw.menuItem props kids
51+
52+type MenuSectionProps r = (id :: String, className :: String | r)
53+
54+menuSection
55+ :: forall givenProps nonDataProps kids
56+ . IsJSX kids
57+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | MenuSectionProps () }
58+ => { | givenProps }
59+ -> kids
60+ -> JSX
61+menuSection props kids = runFn4 createElementTransformImpl {} Raw.menuSection props kids
62+
63+type SectionProps r = (className :: String | r)
64+
65+menuItemIndicator
66+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
67+menuItemIndicator props kids = runFn4 createElementTransformImpl {} Raw.menuItemIndicator props kids
68+
69+menuItemSubmenuIndicator
70+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
71+menuItemSubmenuIndicator props kids = runFn4 createElementTransformImpl {} Raw.menuItemSubmenuIndicator props kids
src/HeroUI/Modal.pursnew file+142
@@ -0,0 +1,142 @@
1+module HeroUI.Modal 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.Internal (class CoerceHeroProps, createElementTransformImpl)
10+import HeroUI.Raw as Raw
11+
12+data Size = Xs | Sm | Md | Lg | Full | Cover
13+
14+derive instance Eq Size
15+derive instance Ord Size
16+
17+sizeToString :: Size -> String
18+sizeToString = case _ of
19+ Xs -> "xs"
20+ Sm -> "sm"
21+ Md -> "md"
22+ Lg -> "lg"
23+ Full -> "full"
24+ Cover -> "cover"
25+
26+data Placement = PlacementAuto | PlacementTop | PlacementCenter | PlacementBottom
27+
28+derive instance Eq Placement
29+derive instance Ord Placement
30+
31+placementToString :: Placement -> String
32+placementToString = case _ of
33+ PlacementAuto -> "auto"
34+ PlacementTop -> "top"
35+ PlacementCenter -> "center"
36+ PlacementBottom -> "bottom"
37+
38+data Backdrop = Blur | Opaque | Transparent
39+
40+derive instance Eq Backdrop
41+derive instance Ord Backdrop
42+
43+backdropToString :: Backdrop -> String
44+backdropToString = case _ of
45+ Blur -> "blur"
46+ Opaque -> "opaque"
47+ Transparent -> "transparent"
48+
49+data Scroll = ScrollInside | ScrollOutside
50+
51+derive instance Eq Scroll
52+derive instance Ord Scroll
53+
54+scrollToString :: Scroll -> String
55+scrollToString = case _ of
56+ ScrollInside -> "inside"
57+ ScrollOutside -> "outside"
58+
59+-- | The root wires the open state (react-aria `DialogTrigger`).
60+type ModalProps r =
61+ ( isOpen :: Boolean
62+ , defaultOpen :: Boolean
63+ , onOpenChange :: EffectFn1 Boolean Unit
64+ , isDismissable :: Boolean
65+ , className :: String
66+ | r
67+ )
68+
69+modal
70+ :: forall givenProps nonDataProps kids
71+ . IsJSX kids
72+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ModalProps () }
73+ => { | givenProps }
74+ -> kids
75+ -> JSX
76+modal props kids = runFn4 createElementTransformImpl {} Raw.modal props kids
77+
78+type ModalBackdropProps r = (variant :: Backdrop, isDismissable :: Boolean, className :: String | r)
79+
80+modalBackdrop
81+ :: forall givenProps nonDataProps kids
82+ . IsJSX kids
83+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ModalBackdropProps () }
84+ => { | givenProps }
85+ -> kids
86+ -> JSX
87+modalBackdrop props kids = runFn4 createElementTransformImpl { variant: backdropToString } Raw.modalBackdrop props kids
88+
89+type ModalContainerProps r =
90+ ( placement :: Placement
91+ , scroll :: Scroll
92+ , size :: Size
93+ , className :: String
94+ | r
95+ )
96+
97+modalContainerTransforms
98+ :: { placement :: Placement -> String, scroll :: Scroll -> String, size :: Size -> String }
99+modalContainerTransforms = { placement: placementToString, scroll: scrollToString, size: sizeToString }
100+
101+modalContainer
102+ :: forall givenProps nonDataProps kids
103+ . IsJSX kids
104+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | ModalContainerProps () }
105+ => { | givenProps }
106+ -> kids
107+ -> JSX
108+modalContainer props kids = runFn4 createElementTransformImpl modalContainerTransforms Raw.modalContainer props kids
109+
110+type SectionProps r = (className :: String | r)
111+
112+modalTrigger
113+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
114+modalTrigger props kids = runFn4 createElementTransformImpl {} Raw.modalTrigger props kids
115+
116+modalDialog
117+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
118+modalDialog props kids = runFn4 createElementTransformImpl {} Raw.modalDialog props kids
119+
120+modalHeader
121+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
122+modalHeader props kids = runFn4 createElementTransformImpl {} Raw.modalHeader props kids
123+
124+modalIcon
125+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
126+modalIcon props kids = runFn4 createElementTransformImpl {} Raw.modalIcon props kids
127+
128+modalHeading
129+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
130+modalHeading props kids = runFn4 createElementTransformImpl {} Raw.modalHeading props kids
131+
132+modalBody
133+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
134+modalBody props kids = runFn4 createElementTransformImpl {} Raw.modalBody props kids
135+
136+modalFooter
137+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
138+modalFooter props kids = runFn4 createElementTransformImpl {} Raw.modalFooter props kids
139+
140+modalCloseTrigger
141+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
142+modalCloseTrigger props kids = runFn4 createElementTransformImpl {} Raw.modalCloseTrigger props kids
src/HeroUI/Popover.pursnew file+63
@@ -0,0 +1,63 @@
1+module HeroUI.Popover 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.Internal (class CoerceHeroProps, createElementTransformImpl)
10+import HeroUI.Raw as Raw
11+
12+type PopoverProps r =
13+ ( isOpen :: Boolean
14+ , defaultOpen :: Boolean
15+ , onOpenChange :: EffectFn1 Boolean Unit
16+ | r
17+ )
18+
19+popover
20+ :: forall givenProps nonDataProps kids
21+ . IsJSX kids
22+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | PopoverProps () }
23+ => { | givenProps }
24+ -> kids
25+ -> JSX
26+popover props kids = runFn4 createElementTransformImpl {} Raw.popover props kids
27+
28+-- | `placement` follows react-aria's placement strings (e.g. "bottom",
29+-- | "top start"); kept as `String` since the union is large.
30+type PopoverContentProps r =
31+ ( placement :: String
32+ , offset :: Number
33+ , showArrow :: Boolean
34+ , className :: String
35+ | r
36+ )
37+
38+popoverContent
39+ :: forall givenProps nonDataProps kids
40+ . IsJSX kids
41+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | PopoverContentProps () }
42+ => { | givenProps }
43+ -> kids
44+ -> JSX
45+popoverContent props kids = runFn4 createElementTransformImpl {} Raw.popoverContent props kids
46+
47+type SectionProps r = (className :: String | r)
48+
49+popoverTrigger
50+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
51+popoverTrigger props kids = runFn4 createElementTransformImpl {} Raw.popoverTrigger props kids
52+
53+popoverDialog
54+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
55+popoverDialog props kids = runFn4 createElementTransformImpl {} Raw.popoverDialog props kids
56+
57+popoverHeading
58+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
59+popoverHeading props kids = runFn4 createElementTransformImpl {} Raw.popoverHeading props kids
60+
61+popoverArrow
62+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
63+popoverArrow props kids = runFn4 createElementTransformImpl {} Raw.popoverArrow props kids
src/HeroUI/Raw.js+104
@@ -114,6 +114,52 @@ import {
114114 RangeCalendarNavButton,
115115 RangeCalendarGrid,
116116 RangeCalendarCell,
117+ ModalRoot,
118+ ModalTrigger,
119+ ModalBackdrop,
120+ ModalContainer,
121+ ModalDialog,
122+ ModalHeader,
123+ ModalIcon,
124+ ModalHeading,
125+ ModalBody,
126+ ModalFooter,
127+ ModalCloseTrigger,
128+ DrawerRoot,
129+ DrawerTrigger,
130+ DrawerBackdrop,
131+ DrawerContent,
132+ DrawerDialog,
133+ DrawerHeader,
134+ DrawerHeading,
135+ DrawerBody,
136+ DrawerFooter,
137+ DrawerHandle,
138+ DrawerCloseTrigger,
139+ PopoverRoot,
140+ PopoverTrigger,
141+ PopoverContent,
142+ PopoverDialog,
143+ PopoverHeading,
144+ PopoverArrow,
145+ TooltipRoot,
146+ TooltipTrigger,
147+ TooltipContent,
148+ TooltipArrow,
149+ DropdownRoot,
150+ DropdownTrigger,
151+ DropdownPopover,
152+ DropdownMenu,
153+ DropdownSection,
154+ DropdownItem,
155+ DropdownItemIndicator,
156+ DropdownSubmenuIndicator,
157+ DropdownSubmenuTrigger,
158+ MenuRoot,
159+ MenuItemRoot,
160+ MenuItemIndicator,
161+ MenuItemSubmenuIndicator,
162+ MenuSectionRoot,
117163} from "@heroui/react";
118164
119165// Button
@@ -288,3 +334,61 @@ export const rangeCalendarHeading = RangeCalendarHeading;
288334export const rangeCalendarNavButton = RangeCalendarNavButton;
289335export const rangeCalendarGrid = RangeCalendarGrid;
290336export const rangeCalendarCell = RangeCalendarCell;
337+
338+// Modal
339+export const modal = ModalRoot;
340+export const modalTrigger = ModalTrigger;
341+export const modalBackdrop = ModalBackdrop;
342+export const modalContainer = ModalContainer;
343+export const modalDialog = ModalDialog;
344+export const modalHeader = ModalHeader;
345+export const modalIcon = ModalIcon;
346+export const modalHeading = ModalHeading;
347+export const modalBody = ModalBody;
348+export const modalFooter = ModalFooter;
349+export const modalCloseTrigger = ModalCloseTrigger;
350+
351+// Drawer
352+export const drawer = DrawerRoot;
353+export const drawerTrigger = DrawerTrigger;
354+export const drawerBackdrop = DrawerBackdrop;
355+export const drawerContent = DrawerContent;
356+export const drawerDialog = DrawerDialog;
357+export const drawerHeader = DrawerHeader;
358+export const drawerHeading = DrawerHeading;
359+export const drawerBody = DrawerBody;
360+export const drawerFooter = DrawerFooter;
361+export const drawerHandle = DrawerHandle;
362+export const drawerCloseTrigger = DrawerCloseTrigger;
363+
364+// Popover
365+export const popover = PopoverRoot;
366+export const popoverTrigger = PopoverTrigger;
367+export const popoverContent = PopoverContent;
368+export const popoverDialog = PopoverDialog;
369+export const popoverHeading = PopoverHeading;
370+export const popoverArrow = PopoverArrow;
371+
372+// Tooltip
373+export const tooltip = TooltipRoot;
374+export const tooltipTrigger = TooltipTrigger;
375+export const tooltipContent = TooltipContent;
376+export const tooltipArrow = TooltipArrow;
377+
378+// Dropdown
379+export const dropdown = DropdownRoot;
380+export const dropdownTrigger = DropdownTrigger;
381+export const dropdownPopover = DropdownPopover;
382+export const dropdownMenu = DropdownMenu;
383+export const dropdownSection = DropdownSection;
384+export const dropdownItem = DropdownItem;
385+export const dropdownItemIndicator = DropdownItemIndicator;
386+export const dropdownSubmenuIndicator = DropdownSubmenuIndicator;
387+export const dropdownSubmenuTrigger = DropdownSubmenuTrigger;
388+
389+// Menu
390+export const menu = MenuRoot;
391+export const menuItem = MenuItemRoot;
392+export const menuItemIndicator = MenuItemIndicator;
393+export const menuItemSubmenuIndicator = MenuItemSubmenuIndicator;
394+export const menuSection = MenuSectionRoot;
src/HeroUI/Raw.purs+58
@@ -174,3 +174,61 @@ foreign import rangeCalendarHeading :: forall r. ReactComponent { | r }
174174foreign import rangeCalendarNavButton :: forall r. ReactComponent { | r }
175175foreign import rangeCalendarGrid :: forall r. ReactComponent { | r }
176176foreign import rangeCalendarCell :: forall r. ReactComponent { | r }
177+
178+-- Modal
179+foreign import modal :: forall r. ReactComponent { | r }
180+foreign import modalTrigger :: forall r. ReactComponent { | r }
181+foreign import modalBackdrop :: forall r. ReactComponent { | r }
182+foreign import modalContainer :: forall r. ReactComponent { | r }
183+foreign import modalDialog :: forall r. ReactComponent { | r }
184+foreign import modalHeader :: forall r. ReactComponent { | r }
185+foreign import modalIcon :: forall r. ReactComponent { | r }
186+foreign import modalHeading :: forall r. ReactComponent { | r }
187+foreign import modalBody :: forall r. ReactComponent { | r }
188+foreign import modalFooter :: forall r. ReactComponent { | r }
189+foreign import modalCloseTrigger :: forall r. ReactComponent { | r }
190+
191+-- Drawer
192+foreign import drawer :: forall r. ReactComponent { | r }
193+foreign import drawerTrigger :: forall r. ReactComponent { | r }
194+foreign import drawerBackdrop :: forall r. ReactComponent { | r }
195+foreign import drawerContent :: forall r. ReactComponent { | r }
196+foreign import drawerDialog :: forall r. ReactComponent { | r }
197+foreign import drawerHeader :: forall r. ReactComponent { | r }
198+foreign import drawerHeading :: forall r. ReactComponent { | r }
199+foreign import drawerBody :: forall r. ReactComponent { | r }
200+foreign import drawerFooter :: forall r. ReactComponent { | r }
201+foreign import drawerHandle :: forall r. ReactComponent { | r }
202+foreign import drawerCloseTrigger :: forall r. ReactComponent { | r }
203+
204+-- Popover
205+foreign import popover :: forall r. ReactComponent { | r }
206+foreign import popoverTrigger :: forall r. ReactComponent { | r }
207+foreign import popoverContent :: forall r. ReactComponent { | r }
208+foreign import popoverDialog :: forall r. ReactComponent { | r }
209+foreign import popoverHeading :: forall r. ReactComponent { | r }
210+foreign import popoverArrow :: forall r. ReactComponent { | r }
211+
212+-- Tooltip
213+foreign import tooltip :: forall r. ReactComponent { | r }
214+foreign import tooltipTrigger :: forall r. ReactComponent { | r }
215+foreign import tooltipContent :: forall r. ReactComponent { | r }
216+foreign import tooltipArrow :: forall r. ReactComponent { | r }
217+
218+-- Dropdown
219+foreign import dropdown :: forall r. ReactComponent { | r }
220+foreign import dropdownTrigger :: forall r. ReactComponent { | r }
221+foreign import dropdownPopover :: forall r. ReactComponent { | r }
222+foreign import dropdownMenu :: forall r. ReactComponent { | r }
223+foreign import dropdownSection :: forall r. ReactComponent { | r }
224+foreign import dropdownItem :: forall r. ReactComponent { | r }
225+foreign import dropdownItemIndicator :: forall r. ReactComponent { | r }
226+foreign import dropdownSubmenuIndicator :: forall r. ReactComponent { | r }
227+foreign import dropdownSubmenuTrigger :: forall r. ReactComponent { | r }
228+
229+-- Menu
230+foreign import menu :: forall r. ReactComponent { | r }
231+foreign import menuItem :: forall r. ReactComponent { | r }
232+foreign import menuItemIndicator :: forall r. ReactComponent { | r }
233+foreign import menuItemSubmenuIndicator :: forall r. ReactComponent { | r }
234+foreign import menuSection :: forall r. ReactComponent { | r }
src/HeroUI/Tooltip.pursnew file+56
@@ -0,0 +1,56 @@
1+module HeroUI.Tooltip 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.Internal (class CoerceHeroProps, createElementTransformImpl)
10+import HeroUI.Raw as Raw
11+
12+type TooltipProps r =
13+ ( isOpen :: Boolean
14+ , defaultOpen :: Boolean
15+ , onOpenChange :: EffectFn1 Boolean Unit
16+ , isDisabled :: Boolean
17+ , delay :: Number
18+ , closeDelay :: Number
19+ | r
20+ )
21+
22+tooltip
23+ :: forall givenProps nonDataProps kids
24+ . IsJSX kids
25+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | TooltipProps () }
26+ => { | givenProps }
27+ -> kids
28+ -> JSX
29+tooltip props kids = runFn4 createElementTransformImpl {} Raw.tooltip props kids
30+
31+type TooltipContentProps r =
32+ ( placement :: String
33+ , offset :: Number
34+ , showArrow :: Boolean
35+ , className :: String
36+ | r
37+ )
38+
39+tooltipContent
40+ :: forall givenProps nonDataProps kids
41+ . IsJSX kids
42+ => CoerceHeroProps { | givenProps } { | nonDataProps } { | TooltipContentProps () }
43+ => { | givenProps }
44+ -> kids
45+ -> JSX
46+tooltipContent props kids = runFn4 createElementTransformImpl {} Raw.tooltipContent props kids
47+
48+type SectionProps r = (className :: String | r)
49+
50+tooltipTrigger
51+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
52+tooltipTrigger props kids = runFn4 createElementTransformImpl {} Raw.tooltipTrigger props kids
53+
54+tooltipArrow
55+ :: forall g n k. IsJSX k => CoerceHeroProps { | g } { | n } { | SectionProps () } => { | g } -> k -> JSX
56+tooltipArrow props kids = runFn4 createElementTransformImpl {} Raw.tooltipArrow props kids