FormattingMenu.res.mjs

  1// Generated by ReScript, PLEASE EDIT WITH CARE
  2
  3import * as State from "../State.res.mjs";
  4import * as LucidePreact from "lucide-preact";
  5import * as Signals from "@preact/signals";
  6import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
  7import * as JsxRuntime from "preact/jsx-runtime";
  8import * as Menus from "@tiptap/react/menus";
  9
 10let submenu = Signals.signal(false);
 11
 12function FormattingMenu(props) {
 13  let doc = props.doc;
 14  let btn = [
 15    "p-1 bg-[var(--color-paper)]",
 16    "hover:bg-[var(--color-bg-2)]",
 17    "rounded-sm",
 18    "cursor-pointer",
 19    "text-sm box-border"
 20  ];
 21  let toggle = mark => {
 22    let editor = State.Editor.get(doc);
 23    if (editor === undefined) {
 24      return;
 25    }
 26    let editor$1 = Primitive_option.valFromOption(editor);
 27    let editorState = editor$1.state;
 28    let selection = editorState.selection;
 29    if (!selection.empty) {
 30      editor$1.commands.toggleMark(mark);
 31      editor$1.commands.setTextSelection(selection.to);
 32      return;
 33    }
 34  };
 35  let remove = () => {
 36    let editor = State.Editor.get(doc);
 37    if (editor === undefined) {
 38      return;
 39    }
 40    let editor$1 = Primitive_option.valFromOption(editor);
 41    let editorState = editor$1.state;
 42    let selection = editorState.selection;
 43    if (!selection.empty) {
 44      editor$1.commands.unsetAllMarks();
 45      editor$1.commands.setTextSelection(selection.to);
 46      return;
 47    }
 48  };
 49  let heading = level => {
 50    let editor = State.Editor.get(doc);
 51    if (editor === undefined) {
 52      return;
 53    }
 54    let editor$1 = Primitive_option.valFromOption(editor);
 55    let editorState = editor$1.state;
 56    let selection = editorState.selection;
 57    if (!selection.empty) {
 58      editor$1.commands.toggleHeading({
 59        level: level
 60      });
 61      editor$1.commands.setTextSelection(selection.to);
 62      return;
 63    }
 64  };
 65  return JsxRuntime.jsxs(Menus.BubbleMenu, {
 66    className: "p-[2px] ring-2 ring-[var(--color-blue)] rounded-sm cursor-pointer box-border",
 67    children: [
 68      JsxRuntime.jsx("button", {
 69        children: JsxRuntime.jsxs("div", {
 70          children: [
 71            JsxRuntime.jsx(LucidePreact.Heading, {
 72              className: "p-[2px]"
 73            }),
 74            JsxRuntime.jsx(LucidePreact.Triangle, {
 75              className: "w-2 rotate-90"
 76            })
 77          ],
 78          className: "flex flex-row"
 79        }),
 80        className: btn.join(" "),
 81        onClick: _evt => {
 82          submenu.value = !submenu.value;
 83        }
 84      }),
 85      submenu.value ? JsxRuntime.jsxs(JsxRuntime.Fragment, {
 86          children: [
 87            JsxRuntime.jsx("button", {
 88              children: JsxRuntime.jsx(LucidePreact.Heading1, {
 89                className: "p-[3px]"
 90              }),
 91              className: btn.join(" "),
 92              onClick: _evt => heading(1)
 93            }),
 94            JsxRuntime.jsx("button", {
 95              children: JsxRuntime.jsx(LucidePreact.Heading2, {
 96                className: "p-[3px]"
 97              }),
 98              className: btn.join(" "),
 99              onClick: _evt => heading(2)
100            }),
101            JsxRuntime.jsx("button", {
102              children: JsxRuntime.jsx(LucidePreact.Heading3, {
103                className: "p-[3px]"
104              }),
105              className: btn.join(" "),
106              onClick: _evt => heading(3)
107            }),
108            JsxRuntime.jsx("button", {
109              children: JsxRuntime.jsx(LucidePreact.Heading4, {
110                className: "p-[3px]"
111              }),
112              className: btn.join(" "),
113              onClick: _evt => heading(4)
114            })
115          ]
116        }) : JsxRuntime.jsxs(JsxRuntime.Fragment, {
117          children: [
118            JsxRuntime.jsx("button", {
119              children: JsxRuntime.jsx(LucidePreact.Bold, {
120                className: "p-[2px]"
121              }),
122              className: btn.join(" "),
123              onClick: _evt => toggle("bold")
124            }),
125            JsxRuntime.jsx("button", {
126              children: JsxRuntime.jsx(LucidePreact.Italic, {
127                className: "p-[2px]"
128              }),
129              className: btn.join(" "),
130              onClick: _evt => toggle("italic")
131            }),
132            JsxRuntime.jsx("button", {
133              children: JsxRuntime.jsx(LucidePreact.Underline, {
134                className: "p-[2px]"
135              }),
136              className: btn.join(" "),
137              onClick: _evt => toggle("underline")
138            }),
139            JsxRuntime.jsx("button", {
140              children: JsxRuntime.jsx(LucidePreact.RemoveFormatting, {
141                className: "p-[2px]"
142              }),
143              className: btn.join(" "),
144              onClick: _evt => remove()
145            })
146          ]
147        })
148    ]
149  });
150}
151
152let make = FormattingMenu;
153
154export {
155  submenu,
156  make,
157}
158/* submenu Not a pure module */