@zero-library/common 2.4.1 → 2.4.3

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.cjs.js CHANGED
@@ -1521,7 +1521,7 @@ var RenderMarkdown_default = ({ content = "", searchValue, customComponents, ...
1521
1521
  }, [content, searchValue]);
1522
1522
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ns-markdown", children: reactContent });
1523
1523
  };
1524
- var MarkdownPreview_default = ({ fileUrl, searchValue }) => {
1524
+ var MarkdownPreview_default = ({ fileUrl, searchValue, asPlainText }) => {
1525
1525
  const [content, setContent] = React.useState("");
1526
1526
  const [error, setError] = React.useState("");
1527
1527
  const fetchMarkdown = async () => {
@@ -1529,29 +1529,41 @@ var MarkdownPreview_default = ({ fileUrl, searchValue }) => {
1529
1529
  if (res.status !== 200) {
1530
1530
  throw new Error(`\u8BF7\u6C42\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${res.status}`);
1531
1531
  }
1532
- const markdownText = await res.text();
1533
- if (!markdownText) {
1532
+ const content2 = await res.text();
1533
+ if (!content2) {
1534
1534
  throw new Error("\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A");
1535
1535
  }
1536
- setContent(markdownText);
1536
+ return content2;
1537
1537
  };
1538
1538
  const init = async () => {
1539
1539
  setContent("");
1540
1540
  setError("");
1541
1541
  if (fileUrl) {
1542
1542
  try {
1543
- await fetchMarkdown();
1544
- } catch (error2) {
1545
- setError("\u52A0\u8F7D\u6216\u89E3\u6790 Markdown \u5931\u8D25");
1543
+ const content2 = await fetchMarkdown();
1544
+ setContent(content2);
1545
+ } catch {
1546
+ setError("\u52A0\u8F7D\u6216\u89E3\u6790\u6587\u4EF6\u5931\u8D25");
1546
1547
  }
1547
1548
  } else {
1548
- setError("Markdown\u5730\u5740\u9519\u8BEF");
1549
+ setError("\u6587\u4EF6\u5730\u5740\u9519\u8BEF");
1549
1550
  }
1550
1551
  };
1551
1552
  React.useEffect(() => {
1552
1553
  init();
1553
1554
  }, [fileUrl]);
1554
- return error ? /* @__PURE__ */ jsxRuntime.jsx(antd.Result, { status: "error", title: error }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "height-full width-full", children: /* @__PURE__ */ jsxRuntime.jsx(RenderMarkdown_default, { content, searchValue }) });
1555
+ const wrapInCodeFence = (text) => {
1556
+ const matches = text.match(/`+/g) ?? [];
1557
+ const maxRun = matches.reduce((max, run) => Math.max(max, run.length), 0);
1558
+ const fence = "`".repeat(Math.max(3, maxRun + 1));
1559
+ return `${fence}
1560
+ ${text}
1561
+ ${fence}`;
1562
+ };
1563
+ const newContent = React.useMemo(() => {
1564
+ return content ? asPlainText ? wrapInCodeFence(content) : content : "";
1565
+ }, [content, asPlainText]);
1566
+ return error ? /* @__PURE__ */ jsxRuntime.jsx(antd.Result, { status: "error", title: error }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "height-full width-full", children: /* @__PURE__ */ jsxRuntime.jsx(RenderMarkdown_default, { content: newContent, searchValue }) });
1555
1567
  };
1556
1568
 
1557
1569
  // src/hooks/iframe/iframeRelay.ts
@@ -2388,6 +2400,8 @@ var FilePreview_default = ({ suffix, fileUrl, pdfParams, password, searchValue,
2388
2400
  case "MD":
2389
2401
  case "MARKDOWN":
2390
2402
  return /* @__PURE__ */ jsxRuntime.jsx(MarkdownPreview_default, { fileUrl, searchValue });
2403
+ case "TXT":
2404
+ return /* @__PURE__ */ jsxRuntime.jsx(MarkdownPreview_default, { fileUrl, searchValue, asPlainText: true });
2391
2405
  case "DOCX":
2392
2406
  return /* @__PURE__ */ jsxRuntime.jsx(DocxPreview_default, { fileUrl });
2393
2407
  default:
@@ -8512,6 +8526,55 @@ var SearchAndReplace = core.Extension.create({
8512
8526
  }
8513
8527
  });
8514
8528
  var searchAndReplace_default = SearchAndReplace;
8529
+ var usePageNo = (pageNoConfig) => {
8530
+ const [editor, setEditor] = React.useState(null);
8531
+ const lastScrollToPageNoRef = React.useRef(void 0);
8532
+ const setPageNoEditor = (newEditor) => {
8533
+ setEditor(newEditor);
8534
+ };
8535
+ const onPageChange = useDebounce_default((pageNo = 0) => {
8536
+ lastScrollToPageNoRef.current = pageNo;
8537
+ pageNoConfig?.onScrollPage?.(pageNo);
8538
+ }, 300);
8539
+ React.useEffect(() => {
8540
+ if (!editor) return;
8541
+ if (!pageNoConfig?.enabled) return;
8542
+ const targetPageNo = pageNoConfig?.pageNo;
8543
+ if (isNullOrUnDef(targetPageNo)) return;
8544
+ if (lastScrollToPageNoRef.current === targetPageNo) return;
8545
+ let rafId = 0;
8546
+ const targetPageNoStr = String(targetPageNo);
8547
+ const findTargetPos = () => {
8548
+ let foundPos = null;
8549
+ editor.state.doc.descendants((node, pos) => {
8550
+ if (!isNullOrUnDef(foundPos)) return false;
8551
+ if (node.type.name !== PAGE_NO_KEY) return true;
8552
+ if (String(node.attrs?.[PAGE_NO_TAG]) === targetPageNoStr) {
8553
+ foundPos = pos;
8554
+ return false;
8555
+ }
8556
+ return true;
8557
+ });
8558
+ return foundPos;
8559
+ };
8560
+ let tries = 0;
8561
+ const tryScroll = () => {
8562
+ const foundPos = findTargetPos();
8563
+ if (!isNullOrUnDef(foundPos)) {
8564
+ scrollEditorViewToPosInNextFrame(editor.view, foundPos, { align: "start", behavior: "smooth" });
8565
+ return;
8566
+ }
8567
+ tries += 1;
8568
+ if (tries < 10) rafId = requestAnimationFrame(tryScroll);
8569
+ };
8570
+ rafId = requestAnimationFrame(tryScroll);
8571
+ return () => cancelAnimationFrame(rafId);
8572
+ }, [editor, pageNoConfig?.enabled, pageNoConfig?.pageNo]);
8573
+ return {
8574
+ setPageNoEditor,
8575
+ onPageChange
8576
+ };
8577
+ };
8515
8578
  var MarkdownEditor_default = ({
8516
8579
  value = ``,
8517
8580
  onChange,
@@ -8528,9 +8591,7 @@ var MarkdownEditor_default = ({
8528
8591
  }) => {
8529
8592
  const isMobile = useIsBreakpoint();
8530
8593
  const lastContentRef = React.useRef("");
8531
- const onPageChange = useDebounce_default((pageIndex) => {
8532
- pageNoConfig?.onScrollPage?.(pageIndex ?? 0);
8533
- }, 300);
8594
+ const { setPageNoEditor, onPageChange } = usePageNo(pageNoConfig);
8534
8595
  const {
8535
8596
  setAnnotationEditor,
8536
8597
  annotations,
@@ -8666,6 +8727,7 @@ var MarkdownEditor_default = ({
8666
8727
  if (!editor) return;
8667
8728
  setAnnotationEditor(editor);
8668
8729
  setCollectionEditor(editor);
8730
+ setPageNoEditor(editor);
8669
8731
  }, [editor]);
8670
8732
  React.useEffect(() => {
8671
8733
  if (!editor) return;