@rufous/ui 0.2.55 → 0.2.56
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/dist/main.cjs +121 -53
- package/dist/main.css +131 -88
- package/dist/main.d.cts +6 -0
- package/dist/main.d.ts +6 -0
- package/dist/main.js +121 -53
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -9183,7 +9183,7 @@ var TranslateModal = ({ editor, onClose, onTranslate, initialSource, initialTarg
|
|
|
9183
9183
|
},
|
|
9184
9184
|
/* @__PURE__ */ import_react54.default.createElement("span", { className: "translate-code" }, lang.code),
|
|
9185
9185
|
/* @__PURE__ */ import_react54.default.createElement("span", { className: "translate-name" }, lang.name)
|
|
9186
|
-
))))), error && /* @__PURE__ */ import_react54.default.createElement("div", { className: "translate-error" }, error)), /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react54.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "
|
|
9186
|
+
))))), error && /* @__PURE__ */ import_react54.default.createElement("div", { className: "translate-error" }, error)), /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react54.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "Cancel")), /* @__PURE__ */ import_react54.default.createElement("button", { className: "modal-btn-apply", onClick: handleSave, disabled: translating }, translating ? "Translating..." : "Save"))));
|
|
9187
9187
|
};
|
|
9188
9188
|
var TranslateModal_default = TranslateModal;
|
|
9189
9189
|
|
|
@@ -9802,7 +9802,8 @@ var CustomTaskItem = import_extension_task_item.default.extend({
|
|
|
9802
9802
|
"border: 2px solid " + colors.border,
|
|
9803
9803
|
`background-image: url("${imageUrl}")`,
|
|
9804
9804
|
"background-repeat: no-repeat",
|
|
9805
|
-
"background-position: center"
|
|
9805
|
+
"background-position: center",
|
|
9806
|
+
"box-sizing: unset !important"
|
|
9806
9807
|
].join("; ");
|
|
9807
9808
|
li.setAttribute("data-status", status);
|
|
9808
9809
|
};
|
|
@@ -10033,12 +10034,24 @@ var Dropdown = ({ trigger, children, className = "", keepOpen = false }) => {
|
|
|
10033
10034
|
const menu = menuRef.current;
|
|
10034
10035
|
menu.style.left = "0";
|
|
10035
10036
|
menu.style.right = "auto";
|
|
10036
|
-
|
|
10037
|
-
|
|
10038
|
-
|
|
10039
|
-
|
|
10040
|
-
|
|
10041
|
-
|
|
10037
|
+
requestAnimationFrame(() => {
|
|
10038
|
+
if (!menu) return;
|
|
10039
|
+
const rect = menu.getBoundingClientRect();
|
|
10040
|
+
const vw = window.innerWidth;
|
|
10041
|
+
const parentLeft = ref.current?.getBoundingClientRect().left || 0;
|
|
10042
|
+
if (rect.right > vw - 8) {
|
|
10043
|
+
menu.style.left = "auto";
|
|
10044
|
+
menu.style.right = "0";
|
|
10045
|
+
const newRect = menu.getBoundingClientRect();
|
|
10046
|
+
if (newRect.left < 8) {
|
|
10047
|
+
menu.style.left = `${8 - parentLeft}px`;
|
|
10048
|
+
menu.style.right = "auto";
|
|
10049
|
+
}
|
|
10050
|
+
} else if (rect.left < 8) {
|
|
10051
|
+
menu.style.left = `${8 - parentLeft}px`;
|
|
10052
|
+
menu.style.right = "auto";
|
|
10053
|
+
}
|
|
10054
|
+
});
|
|
10042
10055
|
}, [open]);
|
|
10043
10056
|
return /* @__PURE__ */ import_react55.default.createElement("div", { className: `dropdown ${className}`, ref }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10044
10057
|
"button",
|
|
@@ -10303,10 +10316,11 @@ var ColorPickerPanel = ({ editor, onClose }) => {
|
|
|
10303
10316
|
}
|
|
10304
10317
|
))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "color-picker-footer" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "color-picker-preview", style: { background: activeColor || "#000" } }), /* @__PURE__ */ import_react55.default.createElement("button", { className: "color-picker-remove", onClick: removeColor, title: "Remove color" }, "\u2713")));
|
|
10305
10318
|
};
|
|
10306
|
-
var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTextToSpeech, onClose, onImageUpload }) => {
|
|
10319
|
+
var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTextToSpeech, onClose, onImageUpload, visibleButtons }) => {
|
|
10307
10320
|
const [, setEditorState] = (0, import_react55.useState)(0);
|
|
10308
10321
|
const [isFullscreen, setIsFullscreen] = (0, import_react55.useState)(false);
|
|
10309
10322
|
const [todoEnabled, setTodoEnabled] = (0, import_react55.useState)(false);
|
|
10323
|
+
const show = (id) => !visibleButtons || visibleButtons.has(id);
|
|
10310
10324
|
(0, import_react55.useEffect)(() => {
|
|
10311
10325
|
if (!editor) return;
|
|
10312
10326
|
const onTransaction = () => setEditorState((n) => n + 1);
|
|
@@ -10390,7 +10404,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10390
10404
|
setTimeout(() => setTranslateStatus(""), 2e3);
|
|
10391
10405
|
}, [editor, translateSource, translateTarget, onTranslate]);
|
|
10392
10406
|
if (!editor) return null;
|
|
10393
|
-
return /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: `toolbar-row ${onClose ? "with-close" : ""}` }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10407
|
+
return /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: `toolbar-row ${onClose ? "with-close" : ""}` }, (show("undo") || show("redo")) && /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, show("undo") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10394
10408
|
"button",
|
|
10395
10409
|
{
|
|
10396
10410
|
className: "toolbar-btn",
|
|
@@ -10399,7 +10413,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10399
10413
|
title: "Undo (Ctrl+Z)"
|
|
10400
10414
|
},
|
|
10401
10415
|
/* @__PURE__ */ import_react55.default.createElement(IconUndo, null)
|
|
10402
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10416
|
+
), show("redo") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10403
10417
|
"button",
|
|
10404
10418
|
{
|
|
10405
10419
|
className: "toolbar-btn",
|
|
@@ -10408,7 +10422,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10408
10422
|
title: "Redo (Ctrl+Y)"
|
|
10409
10423
|
},
|
|
10410
10424
|
/* @__PURE__ */ import_react55.default.createElement(IconRedo, null)
|
|
10411
|
-
)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(AICommands_default, { editor, onAICommand })), /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10425
|
+
)), show("ai") && /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(AICommands_default, { editor, onAICommand })), /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, show("paragraph") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10412
10426
|
Dropdown,
|
|
10413
10427
|
{
|
|
10414
10428
|
trigger: {
|
|
@@ -10475,7 +10489,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10475
10489
|
" Code Block"
|
|
10476
10490
|
),
|
|
10477
10491
|
/* @__PURE__ */ import_react55.default.createElement("button", { className: "dropdown-item", onClick: () => editor.chain().focus().setHorizontalRule().run() }, "\u2014 Horizontal Rule")
|
|
10478
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10492
|
+
), show("fontsize") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10479
10493
|
Dropdown,
|
|
10480
10494
|
{
|
|
10481
10495
|
trigger: {
|
|
@@ -10502,7 +10516,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10502
10516
|
sizeStr
|
|
10503
10517
|
);
|
|
10504
10518
|
})
|
|
10505
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10519
|
+
), show("font") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10506
10520
|
Dropdown,
|
|
10507
10521
|
{
|
|
10508
10522
|
trigger: {
|
|
@@ -10529,7 +10543,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10529
10543
|
font
|
|
10530
10544
|
);
|
|
10531
10545
|
})
|
|
10532
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10546
|
+
), show("color") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10533
10547
|
Dropdown,
|
|
10534
10548
|
{
|
|
10535
10549
|
trigger: {
|
|
@@ -10539,7 +10553,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10539
10553
|
keepOpen: true
|
|
10540
10554
|
},
|
|
10541
10555
|
(close) => /* @__PURE__ */ import_react55.default.createElement(ColorPickerPanel, { editor, onClose: close })
|
|
10542
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10556
|
+
), show("bold") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10543
10557
|
"button",
|
|
10544
10558
|
{
|
|
10545
10559
|
className: `toolbar-btn ${editor.isActive("bold") ? "is-active" : ""}`,
|
|
@@ -10547,7 +10561,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10547
10561
|
title: "Bold (Ctrl+B)"
|
|
10548
10562
|
},
|
|
10549
10563
|
/* @__PURE__ */ import_react55.default.createElement(IconBold, null)
|
|
10550
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10564
|
+
), show("italic") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10551
10565
|
"button",
|
|
10552
10566
|
{
|
|
10553
10567
|
className: `toolbar-btn ${editor.isActive("italic") ? "is-active" : ""}`,
|
|
@@ -10555,7 +10569,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10555
10569
|
title: "Italic (Ctrl+I)"
|
|
10556
10570
|
},
|
|
10557
10571
|
/* @__PURE__ */ import_react55.default.createElement(IconItalic, null)
|
|
10558
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10572
|
+
), show("strike") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10559
10573
|
Dropdown,
|
|
10560
10574
|
{
|
|
10561
10575
|
trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconStrike, null), title: "Text decoration", className: editor.isActive("strike") ? "is-active" : "" }
|
|
@@ -10580,7 +10594,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10580
10594
|
c.run();
|
|
10581
10595
|
}
|
|
10582
10596
|
} }, "\u2715 Clear formatting")
|
|
10583
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10597
|
+
), show("link") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10584
10598
|
"button",
|
|
10585
10599
|
{
|
|
10586
10600
|
className: `toolbar-btn ${editor.isActive("link") ? "is-active" : ""}`,
|
|
@@ -10588,7 +10602,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10588
10602
|
title: "Insert Link"
|
|
10589
10603
|
},
|
|
10590
10604
|
/* @__PURE__ */ import_react55.default.createElement(IconLink, null)
|
|
10591
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10605
|
+
), show("lineheight") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10592
10606
|
Dropdown,
|
|
10593
10607
|
{
|
|
10594
10608
|
trigger: {
|
|
@@ -10615,7 +10629,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10615
10629
|
lh
|
|
10616
10630
|
);
|
|
10617
10631
|
})
|
|
10618
|
-
)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10632
|
+
)), (show("ul") || show("ol")) && /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, show("ul") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10619
10633
|
Dropdown,
|
|
10620
10634
|
{
|
|
10621
10635
|
trigger: {
|
|
@@ -10658,7 +10672,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10658
10672
|
" ",
|
|
10659
10673
|
item.label
|
|
10660
10674
|
))
|
|
10661
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10675
|
+
), show("ol") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10662
10676
|
Dropdown,
|
|
10663
10677
|
{
|
|
10664
10678
|
trigger: {
|
|
@@ -10703,7 +10717,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10703
10717
|
" ",
|
|
10704
10718
|
item.label
|
|
10705
10719
|
))
|
|
10706
|
-
)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10720
|
+
)), (show("align") || show("indent") || show("outdent")) && /* @__PURE__ */ import_react55.default.createElement("div", { className: "toolbar-group" }, show("align") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10707
10721
|
Dropdown,
|
|
10708
10722
|
{
|
|
10709
10723
|
trigger: {
|
|
@@ -10728,7 +10742,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10728
10742
|
" ",
|
|
10729
10743
|
item.label
|
|
10730
10744
|
))
|
|
10731
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10745
|
+
), show("indent") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10732
10746
|
"button",
|
|
10733
10747
|
{
|
|
10734
10748
|
className: "toolbar-btn",
|
|
@@ -10749,7 +10763,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10749
10763
|
title: "Increase Indent"
|
|
10750
10764
|
},
|
|
10751
10765
|
/* @__PURE__ */ import_react55.default.createElement(IconIndentIncrease, null)
|
|
10752
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10766
|
+
), show("outdent") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10753
10767
|
"button",
|
|
10754
10768
|
{
|
|
10755
10769
|
className: "toolbar-btn",
|
|
@@ -10770,7 +10784,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10770
10784
|
title: "Decrease Indent"
|
|
10771
10785
|
},
|
|
10772
10786
|
/* @__PURE__ */ import_react55.default.createElement(IconIndentDecrease, null)
|
|
10773
|
-
)), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconTable, null), title: "Insert Table" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(TableGridSelector, { editor, onClose: close })), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconImage, null), title: "Insert Image" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(ImagePanel, { editor, onClose: close, onImageUpload })), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconVideo, null), title: "Insert Video" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(InsertPanel, { editor, onClose: close, mode: "video" })), /* @__PURE__ */ import_react55.default.createElement(
|
|
10787
|
+
)), show("table") && /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconTable, null), title: "Insert Table" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(TableGridSelector, { editor, onClose: close })), show("image") && /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconImage, null), title: "Insert Image" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(ImagePanel, { editor, onClose: close, onImageUpload })), show("video") && /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconVideo, null), title: "Insert Video" }, keepOpen: true }, (close) => /* @__PURE__ */ import_react55.default.createElement(InsertPanel, { editor, onClose: close, mode: "video" })), show("cut") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10774
10788
|
"button",
|
|
10775
10789
|
{
|
|
10776
10790
|
className: "toolbar-btn",
|
|
@@ -10778,7 +10792,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10778
10792
|
title: "Cut (Ctrl+X)"
|
|
10779
10793
|
},
|
|
10780
10794
|
/* @__PURE__ */ import_react55.default.createElement(IconCut, null)
|
|
10781
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10795
|
+
), show("copy") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10782
10796
|
"button",
|
|
10783
10797
|
{
|
|
10784
10798
|
className: "toolbar-btn",
|
|
@@ -10786,7 +10800,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10786
10800
|
title: "Copy selected text"
|
|
10787
10801
|
},
|
|
10788
10802
|
copySuccess ? /* @__PURE__ */ import_react55.default.createElement(IconCheck, null) : /* @__PURE__ */ import_react55.default.createElement(IconCopy, null)
|
|
10789
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10803
|
+
), show("paste") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10790
10804
|
"button",
|
|
10791
10805
|
{
|
|
10792
10806
|
className: "toolbar-btn",
|
|
@@ -10794,7 +10808,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10794
10808
|
title: "Paste (Ctrl+V)"
|
|
10795
10809
|
},
|
|
10796
10810
|
/* @__PURE__ */ import_react55.default.createElement(IconPaste, null)
|
|
10797
|
-
), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: "\u03A9", title: "Special characters", className: "special-characters-btn" } }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "char-grid" }, SPECIAL_CHARS.map((char) => /* @__PURE__ */ import_react55.default.createElement(
|
|
10811
|
+
), show("specialchars") && /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: "\u03A9", title: "Special characters", className: "special-characters-btn" } }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "char-grid" }, SPECIAL_CHARS.map((char) => /* @__PURE__ */ import_react55.default.createElement(
|
|
10798
10812
|
"button",
|
|
10799
10813
|
{
|
|
10800
10814
|
key: char,
|
|
@@ -10802,7 +10816,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10802
10816
|
onClick: () => insertSpecialChar(char)
|
|
10803
10817
|
},
|
|
10804
10818
|
char
|
|
10805
|
-
)))), /* @__PURE__ */ import_react55.default.createElement(
|
|
10819
|
+
)))), show("code") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10806
10820
|
Dropdown,
|
|
10807
10821
|
{
|
|
10808
10822
|
trigger: { label: /* @__PURE__ */ import_react55.default.createElement(IconCode, null), title: "Code", className: editor.isActive("code") || editor.isActive("codeBlock") ? "is-active" : "" }
|
|
@@ -10826,7 +10840,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10826
10840
|
}
|
|
10827
10841
|
} }, "</>", " Inline Code"),
|
|
10828
10842
|
/* @__PURE__ */ import_react55.default.createElement("button", { className: "dropdown-item", onClick: () => editor.chain().focus().toggleCodeBlock().run() }, "{ }", " Code Block")
|
|
10829
|
-
), /* @__PURE__ */ import_react55.default.createElement(
|
|
10843
|
+
), show("fullscreen") && /* @__PURE__ */ import_react55.default.createElement(
|
|
10830
10844
|
"button",
|
|
10831
10845
|
{
|
|
10832
10846
|
className: `toolbar-btn ${isFullscreen ? "is-active" : ""}`,
|
|
@@ -10834,7 +10848,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10834
10848
|
title: "Toggle Fullscreen"
|
|
10835
10849
|
},
|
|
10836
10850
|
/* @__PURE__ */ import_react55.default.createElement(IconFullscreen, null)
|
|
10837
|
-
), /* @__PURE__ */ import_react55.default.createElement(TextToSpeech_default, { editor, onTextToSpeech }), /* @__PURE__ */ import_react55.default.createElement(SpeechToText_default, { editor, onSpeechToText }), /* @__PURE__ */ import_react55.default.createElement("div", { className: "translate-split-btn" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10851
|
+
), show("tts") && /* @__PURE__ */ import_react55.default.createElement(TextToSpeech_default, { editor, onTextToSpeech }), show("stt") && /* @__PURE__ */ import_react55.default.createElement(SpeechToText_default, { editor, onSpeechToText }), show("translate") && /* @__PURE__ */ import_react55.default.createElement("div", { className: "translate-split-btn" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10838
10852
|
"button",
|
|
10839
10853
|
{
|
|
10840
10854
|
className: "toolbar-btn",
|
|
@@ -10842,7 +10856,7 @@ var Toolbar = ({ editor, setLink, onAICommand, onTranslate, onSpeechToText, onTe
|
|
|
10842
10856
|
title: "Translate selected text"
|
|
10843
10857
|
},
|
|
10844
10858
|
/* @__PURE__ */ import_react55.default.createElement(IconTranslate, null)
|
|
10845
|
-
), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: "", title: "Translate options", className: "translate-arrow-btn" } }, /* @__PURE__ */ import_react55.default.createElement("button", { className: "dropdown-item", onClick: () => setShowTranslateModal(true) }, "Options")), translateStatus && /* @__PURE__ */ import_react55.default.createElement("span", { className: `translate-toast-popup ${translateStatus === "Please select the text" || translateStatus === "Translation failed" ? "error" : ""}` }, translateStatus)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "todo-split-btn" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10859
|
+
), /* @__PURE__ */ import_react55.default.createElement(Dropdown, { trigger: { label: "", title: "Translate options", className: "translate-arrow-btn" } }, /* @__PURE__ */ import_react55.default.createElement("button", { className: "dropdown-item", onClick: () => setShowTranslateModal(true) }, "Options")), translateStatus && /* @__PURE__ */ import_react55.default.createElement("span", { className: `translate-toast-popup ${translateStatus === "Please select the text" || translateStatus === "Translation failed" ? "error" : ""}` }, translateStatus)), show("todo") && /* @__PURE__ */ import_react55.default.createElement("div", { className: "todo-split-btn" }, /* @__PURE__ */ import_react55.default.createElement(
|
|
10846
10860
|
"button",
|
|
10847
10861
|
{
|
|
10848
10862
|
className: `toolbar-btn ${todoEnabled ? "is-active" : ""}`,
|
|
@@ -11085,7 +11099,7 @@ var ImagePropertiesModal = ({ editor, node, onClose }) => {
|
|
|
11085
11099
|
checked: openInNewTab,
|
|
11086
11100
|
onChange: (e) => setOpenInNewTab(e.target.checked)
|
|
11087
11101
|
}
|
|
11088
|
-
), "Open link in new tab")) : /* @__PURE__ */ import_react56.default.createElement(import_react56.default.Fragment, null, /* @__PURE__ */ import_react56.default.createElement("label", { className: "modal-label" }, "CSS Class"), /* @__PURE__ */ import_react56.default.createElement("input", { type: "text", className: "modal-input", placeholder: "e.g. rounded shadow" }), /* @__PURE__ */ import_react56.default.createElement("label", { className: "modal-label" }, "Inline Style"), /* @__PURE__ */ import_react56.default.createElement("input", { type: "text", className: "modal-input", placeholder: "e.g. border: 1px solid #ccc" }))))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react56.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "
|
|
11102
|
+
), "Open link in new tab")) : /* @__PURE__ */ import_react56.default.createElement(import_react56.default.Fragment, null, /* @__PURE__ */ import_react56.default.createElement("label", { className: "modal-label" }, "CSS Class"), /* @__PURE__ */ import_react56.default.createElement("input", { type: "text", className: "modal-input", placeholder: "e.g. rounded shadow" }), /* @__PURE__ */ import_react56.default.createElement("label", { className: "modal-label" }, "Inline Style"), /* @__PURE__ */ import_react56.default.createElement("input", { type: "text", className: "modal-input", placeholder: "e.g. border: 1px solid #ccc" }))))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react56.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "Cancel"), /* @__PURE__ */ import_react56.default.createElement("button", { className: "modal-btn-delete", onClick: handleDelete }, "Delete")), /* @__PURE__ */ import_react56.default.createElement("button", { className: "modal-btn-apply", onClick: handleApply }, "Apply"))));
|
|
11089
11103
|
};
|
|
11090
11104
|
var ImageToolbar = ({ editor }) => {
|
|
11091
11105
|
const [showModal, setShowModal] = (0, import_react56.useState)(false);
|
|
@@ -11338,7 +11352,7 @@ var VideoPropertiesModal = ({ editor, node, nodeType, onClose }) => {
|
|
|
11338
11352
|
value: height,
|
|
11339
11353
|
onChange: (e) => handleHeightChange(e.target.value)
|
|
11340
11354
|
}
|
|
11341
|
-
)))), /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react57.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "
|
|
11355
|
+
)))), /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-footer" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-footer-left" }, /* @__PURE__ */ import_react57.default.createElement("button", { className: "modal-btn-cancel", onClick: onClose }, "Cancel"), /* @__PURE__ */ import_react57.default.createElement("button", { className: "modal-btn-delete", onClick: handleDelete }, "Delete")), /* @__PURE__ */ import_react57.default.createElement("button", { className: "modal-btn-apply", onClick: handleApply }, "Apply"))));
|
|
11342
11356
|
};
|
|
11343
11357
|
var VideoToolbar = ({ editor }) => {
|
|
11344
11358
|
const [showModal, setShowModal] = (0, import_react57.useState)(false);
|
|
@@ -11471,6 +11485,62 @@ var VideoToolbar = ({ editor }) => {
|
|
|
11471
11485
|
var VideoToolbar_default = VideoToolbar;
|
|
11472
11486
|
|
|
11473
11487
|
// lib/RufousTextEditor/RufousTextEditor.tsx
|
|
11488
|
+
var VARIANT_BUTTONS = {
|
|
11489
|
+
default: [
|
|
11490
|
+
"undo",
|
|
11491
|
+
"redo",
|
|
11492
|
+
"|",
|
|
11493
|
+
"ai",
|
|
11494
|
+
"|",
|
|
11495
|
+
"paragraph",
|
|
11496
|
+
"fontsize",
|
|
11497
|
+
"font",
|
|
11498
|
+
"color",
|
|
11499
|
+
"bold",
|
|
11500
|
+
"italic",
|
|
11501
|
+
"strike",
|
|
11502
|
+
"link",
|
|
11503
|
+
"lineheight",
|
|
11504
|
+
"|",
|
|
11505
|
+
"ul",
|
|
11506
|
+
"ol",
|
|
11507
|
+
"|",
|
|
11508
|
+
"align",
|
|
11509
|
+
"indent",
|
|
11510
|
+
"outdent",
|
|
11511
|
+
"|",
|
|
11512
|
+
"table",
|
|
11513
|
+
"image",
|
|
11514
|
+
"video",
|
|
11515
|
+
"|",
|
|
11516
|
+
"cut",
|
|
11517
|
+
"copy",
|
|
11518
|
+
"paste",
|
|
11519
|
+
"specialchars",
|
|
11520
|
+
"code",
|
|
11521
|
+
"fullscreen",
|
|
11522
|
+
"|",
|
|
11523
|
+
"tts",
|
|
11524
|
+
"stt",
|
|
11525
|
+
"translate",
|
|
11526
|
+
"|",
|
|
11527
|
+
"todo"
|
|
11528
|
+
],
|
|
11529
|
+
basic: [
|
|
11530
|
+
"undo",
|
|
11531
|
+
"redo",
|
|
11532
|
+
"|",
|
|
11533
|
+
"paragraph",
|
|
11534
|
+
"fontsize",
|
|
11535
|
+
"font",
|
|
11536
|
+
"bold",
|
|
11537
|
+
"italic",
|
|
11538
|
+
"link",
|
|
11539
|
+
"|",
|
|
11540
|
+
"ul",
|
|
11541
|
+
"ol"
|
|
11542
|
+
]
|
|
11543
|
+
};
|
|
11474
11544
|
var RufousTextEditor = ({
|
|
11475
11545
|
content: initialContent,
|
|
11476
11546
|
placeholder: customPlaceholder,
|
|
@@ -11486,6 +11556,10 @@ var RufousTextEditor = ({
|
|
|
11486
11556
|
onImageUpload,
|
|
11487
11557
|
onClose,
|
|
11488
11558
|
mentions,
|
|
11559
|
+
variant = "default",
|
|
11560
|
+
buttons,
|
|
11561
|
+
hideButtons,
|
|
11562
|
+
width,
|
|
11489
11563
|
height,
|
|
11490
11564
|
resizable = false,
|
|
11491
11565
|
className,
|
|
@@ -11493,6 +11567,14 @@ var RufousTextEditor = ({
|
|
|
11493
11567
|
sx
|
|
11494
11568
|
}) => {
|
|
11495
11569
|
const sxClass = useSx(sx);
|
|
11570
|
+
const toolbarButtons = (0, import_react58.useMemo)(() => {
|
|
11571
|
+
const list = buttons || VARIANT_BUTTONS[variant] || VARIANT_BUTTONS.default;
|
|
11572
|
+
const visible = new Set(list.filter((b) => b !== "|"));
|
|
11573
|
+
if (hideButtons) {
|
|
11574
|
+
hideButtons.forEach((b) => visible.delete(b));
|
|
11575
|
+
}
|
|
11576
|
+
return visible;
|
|
11577
|
+
}, [buttons, variant, hideButtons]);
|
|
11496
11578
|
const mentionSuggestion = (0, import_react58.useMemo)(() => createMentionSuggestion(mentions), [mentions]);
|
|
11497
11579
|
const onChangeRef = (0, import_react58.useRef)(onChange);
|
|
11498
11580
|
const onBlurRef = (0, import_react58.useRef)(onBlur);
|
|
@@ -11737,7 +11819,6 @@ var RufousTextEditor = ({
|
|
|
11737
11819
|
setLinkSelection(null);
|
|
11738
11820
|
editor?.chain().focus().run();
|
|
11739
11821
|
}, [editor]);
|
|
11740
|
-
const [saveFormat, setSaveFormat] = (0, import_react58.useState)("html");
|
|
11741
11822
|
const [saveStatus, setSaveStatus] = (0, import_react58.useState)("");
|
|
11742
11823
|
const handleSave = (0, import_react58.useCallback)(() => {
|
|
11743
11824
|
if (!editor || !onSaveProp) return;
|
|
@@ -11749,12 +11830,6 @@ var RufousTextEditor = ({
|
|
|
11749
11830
|
if (!editor || !onExportProp) return;
|
|
11750
11831
|
onExportProp(editor.getHTML(), editor.getJSON());
|
|
11751
11832
|
}, [editor, onExportProp]);
|
|
11752
|
-
const handleClear = (0, import_react58.useCallback)(() => {
|
|
11753
|
-
if (!editor) return;
|
|
11754
|
-
if (window.confirm("Clear all content? This cannot be undone.")) {
|
|
11755
|
-
editor.commands.clearContent();
|
|
11756
|
-
}
|
|
11757
|
-
}, [editor]);
|
|
11758
11833
|
const providerValue = (0, import_react58.useMemo)(() => ({ editor }), [editor]);
|
|
11759
11834
|
return /* @__PURE__ */ import_react58.default.createElement(
|
|
11760
11835
|
"div",
|
|
@@ -11762,6 +11837,7 @@ var RufousTextEditor = ({
|
|
|
11762
11837
|
className: `rf-rte-wrapper editor-wrapper ${resizable ? "rf-rte-resizable" : ""} ${sxClass} ${className || ""}`,
|
|
11763
11838
|
style: {
|
|
11764
11839
|
...style,
|
|
11840
|
+
...width ? { width: typeof width === "number" ? `${width}px` : width } : {},
|
|
11765
11841
|
...height ? { height: typeof height === "number" ? `${height}px` : height } : {}
|
|
11766
11842
|
}
|
|
11767
11843
|
},
|
|
@@ -11775,7 +11851,8 @@ var RufousTextEditor = ({
|
|
|
11775
11851
|
onSpeechToText,
|
|
11776
11852
|
onTextToSpeech,
|
|
11777
11853
|
onImageUpload,
|
|
11778
|
-
onClose
|
|
11854
|
+
onClose,
|
|
11855
|
+
visibleButtons: toolbarButtons
|
|
11779
11856
|
}
|
|
11780
11857
|
), /* @__PURE__ */ import_react58.default.createElement(import_react59.EditorContent, { editor, className: "editor-content-wrapper" }), /* @__PURE__ */ import_react58.default.createElement(ImageToolbar_default, { editor }), /* @__PURE__ */ import_react58.default.createElement(VideoToolbar_default, { editor }), editor && /* @__PURE__ */ import_react58.default.createElement(
|
|
11781
11858
|
import_react59.BubbleMenu,
|
|
@@ -11890,16 +11967,7 @@ var RufousTextEditor = ({
|
|
|
11890
11967
|
},
|
|
11891
11968
|
"\u201C Quote"
|
|
11892
11969
|
)
|
|
11893
|
-
), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-left" }, /* @__PURE__ */ import_react58.default.createElement(
|
|
11894
|
-
"select",
|
|
11895
|
-
{
|
|
11896
|
-
value: saveFormat,
|
|
11897
|
-
onChange: (e) => setSaveFormat(e.target.value),
|
|
11898
|
-
className: "format-select"
|
|
11899
|
-
},
|
|
11900
|
-
/* @__PURE__ */ import_react58.default.createElement("option", { value: "html" }, "HTML"),
|
|
11901
|
-
/* @__PURE__ */ import_react58.default.createElement("option", { value: "json" }, "JSON")
|
|
11902
|
-
), onSaveProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export"), /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleClear, className: "status-btn clear-btn" }, "Clear")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react58.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-overlay", onClick: handleLinkCancel }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-body" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-field" }, /* @__PURE__ */ import_react58.default.createElement("label", { className: "link-modal-label" }, "URL"), /* @__PURE__ */ import_react58.default.createElement(
|
|
11970
|
+
), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react58.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react58.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react58.default.createElement(import_react58.default.Fragment, null, /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react58.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-overlay", onClick: handleLinkCancel }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-body" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "link-modal-field" }, /* @__PURE__ */ import_react58.default.createElement("label", { className: "link-modal-label" }, "URL"), /* @__PURE__ */ import_react58.default.createElement(
|
|
11903
11971
|
"input",
|
|
11904
11972
|
{
|
|
11905
11973
|
type: "url",
|