Panel.res.mjs

  1// Generated by ReScript, PLEASE EDIT WITH CARE
  2
  3import * as Log from "../utils/Log.res.mjs";
  4import * as Sheet from "../ffi/Sheet.res.mjs";
  5import * as Preact from "../ffi/Preact.res.mjs";
  6import * as Window from "../ffi/Window.res.mjs";
  7import * as Hooks from "preact/hooks";
  8import * as LucidePreact from "lucide-preact";
  9import * as Signals from "@preact/signals";
 10import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
 11import * as ReactModalSheet from "react-modal-sheet";
 12import * as JsxRuntime from "preact/jsx-runtime";
 13
 14let snapPoints = Signals.computed(() => {
 15  if (Window.isMobile.value) {
 16    return [
 17      0,
 18      0.06,
 19      0.5,
 20      1.0
 21    ];
 22  } else {
 23    return [
 24      0,
 25      0.06,
 26      1.0
 27    ];
 28  }
 29});
 30
 31let isMinimized = Signals.signal(false);
 32
 33function onResize(ref) {
 34  return () => {
 35    Log.debug("resize", {
 36      mobile: Window.isMobile.value,
 37      snap: Sheet.currentSnap(ref)
 38    });
 39    if (!Window.isMobile.value && Sheet.currentSnap(ref) === 2) {
 40      Sheet.snapTo(ref, 3);
 41    }
 42    if (Window.isMobile.value && isMinimized.value) {
 43      return Sheet.snapTo(ref, 1);
 44    }
 45  };
 46}
 47
 48function Panel(props) {
 49  let onOpen = props.onOpen;
 50  let onMinimize = props.onMinimize;
 51  let sheetRef = Hooks.useRef(null);
 52  Signals.effect(onResize(sheetRef));
 53  return JsxRuntime.jsx(ReactModalSheet.Sheet, {
 54    children: JsxRuntime.jsxs(ReactModalSheet.Sheet.Container, {
 55      children: [
 56        Window.isMobile.value ? JsxRuntime.jsx(ReactModalSheet.Sheet.Header, {}) : JsxRuntime.jsx(ReactModalSheet.Sheet.Header, {
 57            children: JsxRuntime.jsx("div", {
 58              children: JsxRuntime.jsx("div", {
 59                children: JsxRuntime.jsx(LucidePreact.ChevronDown, {
 60                  className: Preact.cls("text-ui-2", {
 61                    "rotate-180": isMinimized.value
 62                  })
 63                }),
 64                className: "hover:bg-bg-2 p-2 rounded-sm",
 65                onClick: _evt => {
 66                  if (isMinimized.value) {
 67                    return Sheet.snapTo(sheetRef, 2);
 68                  } else {
 69                    return Sheet.snapTo(sheetRef, 1);
 70                  }
 71                }
 72              }),
 73              className: "flex flex-row justify-end w-full px-4"
 74            })
 75          }),
 76        JsxRuntime.jsx(ReactModalSheet.Sheet.Content, {
 77          children: props.children
 78        })
 79      ]
 80    }),
 81    isOpen: true,
 82    onClose: () => {
 83      console.debug("closed");
 84    },
 85    ref: Primitive_option.some(sheetRef),
 86    disableDismiss: true,
 87    detent: "full",
 88    onSnap: index => {
 89      if (index === 1) {
 90        isMinimized.value = true;
 91        if (onMinimize !== undefined) {
 92          onMinimize();
 93        }
 94      } else {
 95        isMinimized.value = false;
 96        if (onOpen !== undefined) {
 97          onOpen();
 98        }
 99      }
100      Log.debug("sheet position", {
101        from: Sheet.currentSnap(sheetRef),
102        to: index
103      });
104    },
105    snapPoints: snapPoints.value,
106    initialSnap: 2
107  });
108}
109
110let make = Panel;
111
112export {
113  snapPoints,
114  isMinimized,
115  onResize,
116  make,
117}
118/* snapPoints Not a pure module */