@windoc/react 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/aliansyahFirdaus/windoc/main/docs/static/img/logo-text-white.png#gh-light-mode-only" alt="Windoc" height="120">
3
- <img src="https://raw.githubusercontent.com/aliansyahFirdaus/windoc/main/docs/static/img/logo-text-black.png#gh-dark-mode-only" alt="Windoc" height="120">
2
+ <img src="https://raw.githubusercontent.com/aliansyahFirdaus/windoc/main/docs/static/img/og.png" alt="Windoc — Canvas document editor for the web" width="720">
4
3
  </div>
5
4
 
6
5
  # @windoc/react
package/dist/index.js CHANGED
@@ -182,7 +182,7 @@ var import_react3 = require("react");
182
182
  var import_jsx_runtime5 = require("react/jsx-runtime");
183
183
  function ColumnTool() {
184
184
  const { editorRef } = useEditor();
185
- const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
185
+ const optionsRef = (0, import_react3.useRef)(null);
186
186
  const [currentColumns, setCurrentColumns] = (0, import_react3.useState)(1);
187
187
  const [gap, setGap] = (0, import_react3.useState)(20);
188
188
  const handleColumn = (col) => {
@@ -194,9 +194,9 @@ function ColumnTool() {
194
194
  setGap(clampedValue);
195
195
  editorRef.current?.command.executeColumnGap(clampedValue);
196
196
  };
197
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "menu-item__column", onClick: () => setIsOpen(!isOpen), children: [
197
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "menu-item__column", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
198
198
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "select", title: "Column Layout", children: currentColumns === 1 ? "1 Column" : `${currentColumns} Columns` }),
199
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
199
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
200
200
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("ul", { children: [
201
201
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { onClick: () => handleColumn(1), children: "1 Column" }),
202
202
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { onClick: () => handleColumn(2), children: "2 Columns" })
@@ -285,15 +285,15 @@ var LEVELS = [
285
285
  ];
286
286
  function TitleTool() {
287
287
  const { editorRef, rangeStyle } = useEditor();
288
- const [isOpen, setIsOpen] = (0, import_react5.useState)(false);
288
+ const optionsRef = (0, import_react5.useRef)(null);
289
289
  const activeLevel = rangeStyle?.level || null;
290
290
  const activeLabel = LEVELS.find((l) => l.level === activeLevel)?.label || "Body";
291
291
  const handleTitle = (level) => {
292
292
  editorRef.current?.command.executeTitle(level);
293
293
  };
294
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "menu-item__title", onClick: () => setIsOpen(!isOpen), children: [
294
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "menu-item__title", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
295
295
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "select", title: "Toggle Heading", children: activeLabel }),
296
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ul", { children: LEVELS.map(({ level, label }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
296
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ul", { children: LEVELS.map(({ level, label }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
297
297
  "li",
298
298
  {
299
299
  className: activeLevel === level ? "active" : "",
@@ -315,15 +315,15 @@ var FONTS = [
315
315
  ];
316
316
  function FontTool() {
317
317
  const { editorRef, rangeStyle } = useEditor();
318
- const [isOpen, setIsOpen] = (0, import_react6.useState)(false);
318
+ const optionsRef = (0, import_react6.useRef)(null);
319
319
  const activeFont = rangeStyle?.font || "Arial";
320
320
  const activeLabel = FONTS.find((f) => f.family === activeFont)?.label || activeFont;
321
321
  const handleFont = (family) => {
322
322
  editorRef.current?.command.executeFont(family);
323
323
  };
324
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "menu-item__font", onClick: () => setIsOpen(!isOpen), children: [
324
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "menu-item__font", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
325
325
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "select", title: "Font", children: activeLabel }),
326
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { children: FONTS.map(({ family, label }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
326
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { children: FONTS.map(({ family, label }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
327
327
  "li",
328
328
  {
329
329
  "data-family": family,
@@ -343,14 +343,14 @@ var import_jsx_runtime9 = require("react/jsx-runtime");
343
343
  var SIZES = [56, 48, 34, 32, 29, 24, 21, 20, 18, 16, 14, 12, 10, 8];
344
344
  function FontSizeTool() {
345
345
  const { editorRef, rangeStyle } = useEditor();
346
- const [isOpen, setIsOpen] = (0, import_react7.useState)(false);
346
+ const optionsRef = (0, import_react7.useRef)(null);
347
347
  const activeSize = rangeStyle?.size ?? 16;
348
348
  const handleSize = (size) => {
349
349
  editorRef.current?.command.executeSize(size);
350
350
  };
351
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "menu-item__size", onClick: () => setIsOpen(!isOpen), children: [
351
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "menu-item__size", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
352
352
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "select", title: "Font Size", children: activeSize }),
353
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { children: SIZES.map((size) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
353
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { children: SIZES.map((size) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
354
354
  "li",
355
355
  {
356
356
  className: activeSize === size ? "active" : "",
@@ -368,15 +368,15 @@ var import_jsx_runtime10 = require("react/jsx-runtime");
368
368
  var LINE_HEIGHTS = ["1.0", "1.15", "1.5", "2.0", "2.5"];
369
369
  function LineHeightTool() {
370
370
  const { editorRef, rangeStyle } = useEditor();
371
- const [isOpen, setIsOpen] = (0, import_react8.useState)(false);
371
+ const optionsRef = (0, import_react8.useRef)(null);
372
372
  const activeMargin = rangeStyle?.rowMargin ?? 1;
373
373
  const activeLabel = Number.isInteger(activeMargin) ? `${activeMargin}.0` : String(activeMargin);
374
374
  const handleLineHeight = (value) => {
375
375
  editorRef.current?.command.executeRowMargin(Number(value));
376
376
  };
377
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "menu-item__line-height", onClick: () => setIsOpen(!isOpen), children: [
377
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "menu-item__line-height", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
378
378
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "select", title: "Line Height", children: activeLabel }),
379
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { children: LINE_HEIGHTS.map((h) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
379
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { children: LINE_HEIGHTS.map((h) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
380
380
  "li",
381
381
  {
382
382
  className: String(activeMargin) === h || activeLabel === h ? "active" : "",
@@ -404,7 +404,7 @@ var COLOR_PALETTE = [
404
404
  ];
405
405
  function ColorTool() {
406
406
  const { editorRef, rangeStyle } = useEditor();
407
- const [visible, setVisible] = (0, import_react9.useState)(false);
407
+ const dropdownRef = (0, import_react9.useRef)(null);
408
408
  const activeColor = rangeStyle?.color || "#000000";
409
409
  const handleColor = (color) => {
410
410
  editorRef.current?.command.executeColor(color);
@@ -412,11 +412,11 @@ function ColorTool() {
412
412
  const handleReset = () => {
413
413
  editorRef.current?.command.executeColor(null);
414
414
  };
415
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "menu-item__color", title: "Font Color", onClick: () => setVisible(!visible), children: [
415
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "menu-item__color", title: "Font Color", onClick: () => dropdownRef.current?.classList.toggle("visible"), children: [
416
416
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react4.Baseline, { size: 16 }),
417
417
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { style: { backgroundColor: activeColor } }),
418
418
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("input", { id: "color", type: "color", readOnly: true, tabIndex: -1 }),
419
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "color-palette-dropdown" + (visible ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
419
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "color-palette-dropdown", ref: dropdownRef, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
420
420
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("button", { className: "color-palette-reset", onClick: handleReset, children: [
421
421
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react4.RotateCcw, { size: 12 }),
422
422
  "Reset"
@@ -451,7 +451,7 @@ var HIGHLIGHT_PALETTE = [
451
451
  ];
452
452
  function HighlightTool() {
453
453
  const { editorRef, rangeStyle } = useEditor();
454
- const [visible, setVisible] = (0, import_react10.useState)(false);
454
+ const dropdownRef = (0, import_react10.useRef)(null);
455
455
  const activeColor = rangeStyle?.highlight || "";
456
456
  const handleColor = (color) => {
457
457
  editorRef.current?.command.executeHighlight(color);
@@ -459,11 +459,11 @@ function HighlightTool() {
459
459
  const handleReset = () => {
460
460
  editorRef.current?.command.executeHighlight(null);
461
461
  };
462
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "menu-item__highlight", title: "Highlight", onClick: () => setVisible(!visible), children: [
462
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "menu-item__highlight", title: "Highlight", onClick: () => dropdownRef.current?.classList.toggle("visible"), children: [
463
463
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.Highlighter, { size: 16 }),
464
464
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { backgroundColor: activeColor || "#ffff00" } }),
465
465
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", { id: "highlight", type: "color", readOnly: true, tabIndex: -1 }),
466
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "color-palette-dropdown" + (visible ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
466
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "color-palette-dropdown", ref: dropdownRef, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { onClick: (e) => e.stopPropagation(), children: [
467
467
  /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("button", { className: "color-palette-reset", onClick: handleReset, children: [
468
468
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.RotateCcw, { size: 12 }),
469
469
  "None"
@@ -507,12 +507,12 @@ var import_jsx_runtime15 = require("react/jsx-runtime");
507
507
  var STYLES = ["solid", "double", "dashed", "dotted", "wavy"];
508
508
  function UnderlineTool() {
509
509
  const { editorRef, isApple, rangeStyle } = useEditor();
510
- const [isOpen, setIsOpen] = (0, import_react11.useState)(false);
510
+ const optionsRef = (0, import_react11.useRef)(null);
511
511
  const isActive = rangeStyle?.underline === true;
512
512
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: `menu-item__underline ${isActive ? "active" : ""}`, title: `Underline(${isApple ? "\u2318" : "Ctrl"}+U)`, children: [
513
513
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react8.Underline, { size: 16, onClick: () => editorRef.current?.command.executeUnderline(), style: { cursor: "pointer" } }),
514
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "select", onClick: () => setIsOpen(!isOpen) }),
515
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("ul", { children: STYLES.map((style) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { "data-decoration-style": style, onClick: () => {
514
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "select", onClick: () => optionsRef.current?.classList.toggle("visible") }),
515
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("ul", { children: STYLES.map((style) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { "data-decoration-style": style, onClick: () => {
516
516
  editorRef.current?.command.executeUnderline({ style });
517
517
  }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("i", {}) }, style)) }) })
518
518
  ] });
@@ -599,7 +599,7 @@ function PresetCell({ option, onClick }) {
599
599
  }
600
600
  function ListTool() {
601
601
  const { editorRef, isApple, rangeStyle } = useEditor();
602
- const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
602
+ const optionsRef = (0, import_react12.useRef)(null);
603
603
  const isActive = !!rangeStyle?.listType;
604
604
  const handleList = (type, style) => {
605
605
  editorRef.current?.command.executeList(type, style);
@@ -617,8 +617,8 @@ function ListTool() {
617
617
  editorRef.current?.command.executeListOutdent();
618
618
  };
619
619
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: `menu-item__list ${isActive ? "active" : ""}`, title: `List(${isApple ? "\u2318" : "Ctrl"}+Shift+U)`, children: [
620
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react14.List, { size: 16, onClick: () => setIsOpen(!isOpen), style: { cursor: "pointer" } }),
621
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { padding: "8px", width: "320px" }, children: [
620
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react14.List, { size: 16, onClick: () => optionsRef.current?.classList.toggle("visible"), style: { cursor: "pointer" } }),
621
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { padding: "8px", width: "320px" }, children: [
622
622
  /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { display: "flex", gap: "4px", marginBottom: "8px" }, children: [
623
623
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
624
624
  "button",
@@ -709,15 +709,15 @@ var LINE_WIDTHS = [
709
709
  ];
710
710
  function SeparatorTool() {
711
711
  const { editorRef } = useEditor();
712
- const [isOpen, setIsOpen] = (0, import_react13.useState)(false);
712
+ const optionsRef = (0, import_react13.useRef)(null);
713
713
  const [selectedWidth, setSelectedWidth] = (0, import_react13.useState)(1);
714
714
  const lineColor = "#344054";
715
715
  const handleSeparator = (dashArray) => {
716
716
  editorRef.current?.command.executeSeparator(dashArray, { lineWidth: selectedWidth });
717
717
  };
718
718
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "menu-item__separator", title: "Separator", children: [
719
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react16.Minus, { size: 16, onClick: () => setIsOpen(!isOpen), style: { cursor: "pointer" } }),
720
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { padding: "8px 10px 10px", width: "200px" }, children: [
719
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react16.Minus, { size: 16, onClick: () => optionsRef.current?.classList.toggle("visible"), style: { cursor: "pointer" } }),
720
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { padding: "8px 10px 10px", width: "200px" }, children: [
721
721
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("ul", { style: { margin: 0, padding: 0, listStyle: "none" }, children: DASH_STYLES.map(({ label, dashArray }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
722
722
  "li",
723
723
  {
@@ -775,7 +775,7 @@ var import_react14 = require("react");
775
775
  var import_jsx_runtime24 = require("react/jsx-runtime");
776
776
  function InsertElementTool() {
777
777
  const { editorRef } = useEditor();
778
- const [isOpen, setIsOpen] = (0, import_react14.useState)(false);
778
+ const optionsRef = (0, import_react14.useRef)(null);
779
779
  const handleHeader = () => {
780
780
  if (!editorRef.current) return;
781
781
  const options = editorRef.current.command.getOptions();
@@ -785,9 +785,9 @@ function InsertElementTool() {
785
785
  }
786
786
  editorRef.current.command.executeSetZone("header");
787
787
  };
788
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "menu-item__insert-element", onClick: () => setIsOpen(!isOpen), children: [
788
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "menu-item__insert-element", onClick: () => optionsRef.current?.classList.toggle("visible"), children: [
789
789
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("i", { title: "Insert Element" }),
790
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { onClick: handleHeader, children: "Add Header" }) }) })
790
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { onClick: handleHeader, children: "Add Header" }) }) })
791
791
  ] });
792
792
  }
793
793
 
@@ -796,7 +796,7 @@ var import_react15 = require("react");
796
796
  var import_jsx_runtime25 = require("react/jsx-runtime");
797
797
  function PageBreakTool() {
798
798
  const { editorRef } = useEditor();
799
- const [isOpen, setIsOpen] = (0, import_react15.useState)(false);
799
+ const optionsRef = (0, import_react15.useRef)(null);
800
800
  const handlePageBreak = () => {
801
801
  editorRef.current?.command.executePageBreak();
802
802
  };
@@ -807,10 +807,10 @@ function PageBreakTool() {
807
807
  "div",
808
808
  {
809
809
  className: "menu-item__page-break",
810
- onClick: () => setIsOpen(!isOpen),
810
+ onClick: () => optionsRef.current?.classList.toggle("visible"),
811
811
  children: [
812
812
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("i", { title: "Break" }),
813
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "options" + (isOpen ? " visible" : ""), children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("ul", { children: [
813
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "options", ref: optionsRef, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("ul", { children: [
814
814
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { onClick: handlePageBreak, children: "Page Break" }),
815
815
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { onClick: handleColumnBreak, children: "Column Break" })
816
816
  ] }) })