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 */