diff --git a/bindings/headlessui/Headlessui.res b/bindings/headlessui/Headlessui.res
new file mode 100644
index 00000000..c2ed18d8
--- /dev/null
+++ b/bindings/headlessui/Headlessui.res
@@ -0,0 +1,83 @@
+module Popover = {
+ type popoverChildrenRenderProps = {@as("open") open_: bool}
+
+ @module("@headlessui/react") @react.component
+ external make: (
+ ~as_: string=?,
+ ~children: popoverChildrenRenderProps => React.element=?,
+ ~className: string=?,
+ ) => React.element = "Popover"
+
+ module Overlay = {
+ @module("@headlessui/react") @scope("Popover") @react.component
+ external make: (~as_: string=?, ~children: 'children=?, ~className: string=?) => React.element =
+ "Overlay"
+ }
+
+ module Button = {
+ @module("@headlessui/react") @scope("Popover") @react.component
+ external make: (~as_: string=?, ~children: 'children=?, ~className: string=?) => React.element =
+ "Button"
+ }
+
+ module Panel = {
+ @module("@headlessui/react") @scope("Popover") @react.component
+ external make: (
+ ~as_: string=?,
+ ~focus: bool=?,
+ ~static: bool=?,
+ ~unmount: bool=?,
+ ~children: 'children=?,
+ ~className: string=?,
+ ) => React.element = "Panel"
+ }
+
+ module Group = {
+ @module("@headlessui/react") @scope("Popover") @react.component
+ external make: (~as_: string=?, ~children: 'children=?, ~className: string=?) => React.element =
+ "Group"
+ }
+}
+
+module Transition = {
+ @module("@headlessui/react") @react.component
+ external make: (
+ ~show: bool,
+ ~as_: string=?,
+ ~appear: bool=?,
+ ~unmount: bool=?,
+ ~enter: string=?,
+ ~enterFrom: string=?,
+ ~enterTo: string=?,
+ ~leave: string=?,
+ ~leaveFrom: string=?,
+ ~leaveTo: string=?,
+ ~beforeEnter: unit => unit=?,
+ ~afterEnter: unit => unit=?,
+ ~beforeLeave: unit => unit=?,
+ ~afterLeave: unit => unit=?,
+ ~children: 'children=?,
+ ~className: string=?,
+ ) => React.element = "Transition"
+
+ module Child = {
+ @module("@headlessui/react") @scope("Transition") @react.component
+ external make: (
+ ~as_: string=?,
+ ~appear: bool=?,
+ ~unmount: bool=?,
+ ~enter: string=?,
+ ~enterFrom: string=?,
+ ~enterTo: string=?,
+ ~leave: string=?,
+ ~leaveFrom: string=?,
+ ~leaveTo: string=?,
+ ~beforeEnter: unit => unit=?,
+ ~afterEnter: unit => unit=?,
+ ~beforeLeave: unit => unit=?,
+ ~afterLeave: unit => unit=?,
+ ~children: 'children,
+ ~className: string=?,
+ ) => React.element = "Child"
+ }
+}
diff --git a/bsconfig.json b/bsconfig.json
index 21aabb16..b4a1b770 100644
--- a/bsconfig.json
+++ b/bsconfig.json
@@ -16,6 +16,10 @@
{
"dir": "src"
},
+ {
+ "dir": "bindings",
+ "subdirs": true
+ },
{
"dir": "pages",
"subdirs": true
diff --git a/package.json b/package.json
index 88296068..9a4c7077 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
},
"dependencies": {
"@glennsl/bs-json": "^5.0.2",
+ "@headlessui/react": "^1.2.0",
"@rescript/react": "^0.10.3",
"bs-platform": "9.0.2",
"next": "^10.2.0",
diff --git a/src/FlyoutMenu.res b/src/FlyoutMenu.res
new file mode 100644
index 00000000..a9553fb3
--- /dev/null
+++ b/src/FlyoutMenu.res
@@ -0,0 +1,75 @@
+module Popover = Headlessui.Popover
+module Transition = Headlessui.Transition
+module Link = Next.Link
+
+type item = {
+ name: string,
+ description: string,
+ href: string,
+ icon: React.element,
+}
+
+@react.component
+let make = (~name, ~items) =>
+
+ {React.string(item.label)}
+ {React.string(item.text)}