Menugroup.res.mjs

  1// Generated by ReScript, PLEASE EDIT WITH CARE
  2
  3import * as Log from "../utils/Log.res.mjs";
  4import * as Login from "./Login.res.mjs";
  5import * as State from "../State.res.mjs";
  6import * as Core__Option from "@rescript/core/lib/es6/src/Core__Option.res.mjs";
  7import * as LucidePreact from "lucide-preact";
  8import * as Signals from "@preact/signals";
  9import * as JsxRuntime from "preact/jsx-runtime";
 10import * as Menu from "@base-ui/react/menu";
 11
 12import logo from '../static/logo.png?inline';
 13;
 14
 15let isOpen = Signals.signal(false);
 16
 17let loggedIn = Signals.computed(() => Core__Option.map(State.user.value, data => data.registered));
 18
 19function Menugroup(props) {
 20  return JsxRuntime.jsx(JsxRuntime.Fragment, {
 21    children: JsxRuntime.jsxs("div", {
 22      children: [
 23        JsxRuntime.jsx("div", {
 24          children: JsxRuntime.jsx("img", {
 25            className: "w-28",
 26            src: logo
 27          }),
 28          className: "pr-2"
 29        }),
 30        JsxRuntime.jsxs("div", {
 31          children: [
 32            Core__Option.getOr(loggedIn.value, false) ? null : JsxRuntime.jsx("div", {
 33                children: "!",
 34                className: "absolute top-0 right-0 w-4 h-4 rounded-full bg-[var(--color-red)] z-10 translate-x-1/2 -translate-y-1/2 text-xs text-white font-bold text-center"
 35              }),
 36            JsxRuntime.jsxs(Menu.Menu.Root, {
 37              children: [
 38                JsxRuntime.jsx(Menu.Menu.Trigger, {
 39                  children: JsxRuntime.jsx(LucidePreact.Menu, {
 40                    size: 20,
 41                    strokeWidth: 3,
 42                    className: "text-ui-2 m-auto"
 43                  })
 44                }),
 45                JsxRuntime.jsx(Menu.Menu.Portal, {
 46                  children: JsxRuntime.jsx(Menu.Menu.Positioner, {
 47                    sideOffset: 14,
 48                    className: "outline-none",
 49                    children: JsxRuntime.jsxs(Menu.Menu.Popup, {
 50                      children: [
 51                        Core__Option.getOr(loggedIn.value, false) ? JsxRuntime.jsx(Menu.Menu.LinkItem, {
 52                            href: `/u/` + Core__Option.getOr(Core__Option.map(State.user.value, data => data.id), ""),
 53                            className: "w-full rounded-sm py-1 px-14 hover:bg-blue-100 flex flex-row items-center justify-center",
 54                            children: Core__Option.getOr(Core__Option.map(State.user.value, data => "@" + data.handle + "'s account"), "Account")
 55                          }) : JsxRuntime.jsx(Menu.Menu.Item, {
 56                            onClick: _evt => {
 57                              Log.debug("got login button", undefined);
 58                              State.content.value = JsxRuntime.jsx(Login.make, {});
 59                            },
 60                            className: "w-full rounded-sm px-2 py-1 outline-2 outline-offset-2 outline-solid outline-orange hover:bg-[var(--color-orange)] active:bg-[var(--color-orange)] hover:text-white active:text-white focus:bg-(--color-orange) focus:text-white text-center",
 61                            children: "Login or Sign up"
 62                          }),
 63                        JsxRuntime.jsx(Menu.Menu.LinkItem, {
 64                          href: "/about",
 65                          className: "rounded-sm hover:bg-blue-100 py-1 mt-2 w-full flex flex-row items-center justify-center hover:outline-none active:outline-(--color-blue) mx-auto",
 66                          children: "About"
 67                        }),
 68                        Core__Option.getOr(loggedIn.value, false) ? null : JsxRuntime.jsxs("div", {
 69                            children: [
 70                              JsxRuntime.jsx("div", {
 71                                children: JsxRuntime.jsx(LucidePreact.OctagonAlert, {
 72                                  size: 24,
 73                                  color: "var(--color-red)",
 74                                  strokeWidth: 3,
 75                                  className: "pr-1"
 76                                })
 77                              }),
 78                              JsxRuntime.jsx("div", {
 79                                children: "You'll lose your work after 30 days if you don't log in",
 80                                className: "text-xs text-pretty"
 81                              })
 82                            ],
 83                            className: "flex flex-column mt-5 items-center"
 84                          })
 85                      ],
 86                      className: "popup bg-paper shadow-md p-2 rounded-sm py-2 pt-4 outline-none"
 87                    })
 88                  }),
 89                  className: "max-w-full md:w-fit md:max-w-[20rem] md:min-w-[10rem]"
 90                })
 91              ]
 92            })
 93          ],
 94          className: "relative bg-paper px-2 pt-1 rounded-sm flex-1",
 95          onClick: _evt => {
 96            isOpen.value = !isOpen.value;
 97          }
 98        })
 99      ],
100      className: "fixed top-2 right-2 flex flex-row items-center z-1 mr-2"
101    })
102  });
103}
104
105let make = Menugroup;
106
107export {
108  isOpen,
109  loggedIn,
110  make,
111}
112/*  Not a pure module */