@trafica/editor 1.0.25 → 1.0.27
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/index.js +42 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +42 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1685,7 +1685,7 @@ function serializeBlock(node, idCounts = /* @__PURE__ */ new Map()) {
|
|
|
1685
1685
|
return "<hr />";
|
|
1686
1686
|
case "table": {
|
|
1687
1687
|
const rows = node.children.map((c) => serializeBlock(c)).join("");
|
|
1688
|
-
return `<table><tbody>${rows}</tbody></table>`;
|
|
1688
|
+
return `<div style="overflow-x:auto;margin:0.75em 0;"><table style="border-collapse:collapse;table-layout:fixed;width:100%;font-size:inherit;font-family:inherit;"><tbody>${rows}</tbody></table></div>`;
|
|
1689
1689
|
}
|
|
1690
1690
|
case "table_row": {
|
|
1691
1691
|
const cells = node.children.map((c) => serializeBlock(c)).join("");
|
|
@@ -1695,13 +1695,13 @@ function serializeBlock(node, idCounts = /* @__PURE__ */ new Map()) {
|
|
|
1695
1695
|
if ((_p = node.attrs) == null ? void 0 : _p.covered) return "";
|
|
1696
1696
|
const cs = ((_q = node.attrs) == null ? void 0 : _q.colspan) > 1 ? ` colspan="${(_r = node.attrs) == null ? void 0 : _r.colspan}"` : "";
|
|
1697
1697
|
const rs = ((_s = node.attrs) == null ? void 0 : _s.rowspan) > 1 ? ` rowspan="${(_t = node.attrs) == null ? void 0 : _t.rowspan}"` : "";
|
|
1698
|
-
return `<td${cs}${rs}>${serializeChildren(node.children)}</td>`;
|
|
1698
|
+
return `<td${cs}${rs} style="border:1px solid #d1d5db;padding:0.5em 0.75em;vertical-align:top;min-width:40px;word-break:break-word;">${serializeChildren(node.children)}</td>`;
|
|
1699
1699
|
}
|
|
1700
1700
|
case "table_header": {
|
|
1701
1701
|
if ((_u = node.attrs) == null ? void 0 : _u.covered) return "";
|
|
1702
1702
|
const cs = ((_v = node.attrs) == null ? void 0 : _v.colspan) > 1 ? ` colspan="${(_w = node.attrs) == null ? void 0 : _w.colspan}"` : "";
|
|
1703
1703
|
const rs = ((_x = node.attrs) == null ? void 0 : _x.rowspan) > 1 ? ` rowspan="${(_y = node.attrs) == null ? void 0 : _y.rowspan}"` : "";
|
|
1704
|
-
return `<th${cs}${rs}>${serializeChildren(node.children)}</th>`;
|
|
1704
|
+
return `<th${cs}${rs} style="border:1px solid #d1d5db;padding:0.5em 0.75em;vertical-align:top;min-width:40px;word-break:break-word;background:#f9fafb;font-weight:600;text-align:left;">${serializeChildren(node.children)}</th>`;
|
|
1705
1705
|
}
|
|
1706
1706
|
default:
|
|
1707
1707
|
return `<p>${serializeChildren(node.children)}</p>`;
|
|
@@ -7830,6 +7830,43 @@ function EditorCore({
|
|
|
7830
7830
|
}) {
|
|
7831
7831
|
const containerRef = react.useRef(null);
|
|
7832
7832
|
const isRenderingRef = react.useRef(false);
|
|
7833
|
+
const scrollCaretIntoView = react.useCallback(() => {
|
|
7834
|
+
var _a, _b;
|
|
7835
|
+
const sel = window.getSelection();
|
|
7836
|
+
if (!sel || sel.rangeCount === 0) return;
|
|
7837
|
+
const range = sel.getRangeAt(0).cloneRange();
|
|
7838
|
+
range.collapse(true);
|
|
7839
|
+
const caretRect = range.getBoundingClientRect();
|
|
7840
|
+
let rect = caretRect;
|
|
7841
|
+
if (!rect || rect.top === 0 && rect.bottom === 0 && rect.left === 0) {
|
|
7842
|
+
const node = range.startContainer;
|
|
7843
|
+
const el = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
|
|
7844
|
+
if (el) rect = el.getBoundingClientRect();
|
|
7845
|
+
}
|
|
7846
|
+
if (!rect || rect.bottom === 0) return;
|
|
7847
|
+
let scrollEl = (_b = (_a = containerRef.current) == null ? void 0 : _a.parentElement) != null ? _b : null;
|
|
7848
|
+
while (scrollEl) {
|
|
7849
|
+
const style = window.getComputedStyle(scrollEl);
|
|
7850
|
+
const overflow = style.overflow + style.overflowY;
|
|
7851
|
+
if (/auto|scroll/.test(overflow)) break;
|
|
7852
|
+
scrollEl = scrollEl.parentElement;
|
|
7853
|
+
}
|
|
7854
|
+
const PADDING = 24;
|
|
7855
|
+
if (scrollEl) {
|
|
7856
|
+
const containerRect = scrollEl.getBoundingClientRect();
|
|
7857
|
+
if (rect.bottom > containerRect.bottom - PADDING) {
|
|
7858
|
+
scrollEl.scrollBy({ top: rect.bottom - containerRect.bottom + PADDING, behavior: "smooth" });
|
|
7859
|
+
} else if (rect.top < containerRect.top + PADDING) {
|
|
7860
|
+
scrollEl.scrollBy({ top: rect.top - containerRect.top - PADDING, behavior: "smooth" });
|
|
7861
|
+
}
|
|
7862
|
+
} else {
|
|
7863
|
+
if (rect.bottom > window.innerHeight - PADDING) {
|
|
7864
|
+
window.scrollBy({ top: rect.bottom - window.innerHeight + PADDING, behavior: "smooth" });
|
|
7865
|
+
} else if (rect.top < PADDING) {
|
|
7866
|
+
window.scrollBy({ top: rect.top - PADDING, behavior: "smooth" });
|
|
7867
|
+
}
|
|
7868
|
+
}
|
|
7869
|
+
}, []);
|
|
7833
7870
|
const isComposingRef = react.useRef(false);
|
|
7834
7871
|
const stateRef = react.useRef(engine.getState());
|
|
7835
7872
|
const [selectedImagePath, setSelectedImagePath] = react.useState(null);
|
|
@@ -7892,6 +7929,7 @@ function EditorCore({
|
|
|
7892
7929
|
}
|
|
7893
7930
|
if (state.selection) {
|
|
7894
7931
|
restoreSelection(container, state.selection);
|
|
7932
|
+
scrollCaretIntoView();
|
|
7895
7933
|
}
|
|
7896
7934
|
isRenderingRef.current = false;
|
|
7897
7935
|
if (onHTMLChange) {
|
|
@@ -7905,6 +7943,7 @@ function EditorCore({
|
|
|
7905
7943
|
const container = containerRef.current;
|
|
7906
7944
|
if (!container || !state.selection) return;
|
|
7907
7945
|
restoreSelection(container, state.selection);
|
|
7946
|
+
scrollCaretIntoView();
|
|
7908
7947
|
}, [state.selection]);
|
|
7909
7948
|
react.useEffect(() => {
|
|
7910
7949
|
const container = containerRef.current;
|