@hyebook/vue3-adapter 0.2.5 → 2.2.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"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"}
@@ -144,6 +144,14 @@ const WORKBENCH_CSS = `
144
144
  .hyewb-upload-progress{height:8px;background:#e2e8f0;border-radius:999px;overflow:hidden}
145
145
  .hyewb-upload-progress > span{display:block;height:100%;width:0;background:#0b7285;transition:width .18s ease}
146
146
  .hyewb-upload-error{min-height:18px;font-size:12px;color:#b91c1c;margin:0}
147
+ .hyewb-preview-note-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:10080;padding:16px}
148
+ .hyewb-preview-note-backdrop.show{display:flex}
149
+ .hyewb-preview-note-dialog{width:min(520px,100%);background:#fff;border:1px solid #cbd5e1;border-radius:12px;padding:14px;display:grid;gap:10px;box-shadow:0 16px 34px rgba(15,23,42,.28)}
150
+ .hyewb-preview-note-title{margin:0;font-size:14px;font-weight:600;color:#0f172a}
151
+ .hyewb-preview-note-input{width:100%;min-height:120px;resize:vertical;border:1px solid #94a3b8;border-radius:8px;padding:8px 10px;background:#fff;color:#0f172a;box-sizing:border-box;font-family:inherit;font-size:14px;line-height:1.5}
152
+ .hyewb-preview-note-actions{display:flex;justify-content:flex-end;gap:8px}
153
+ .hyewb-preview-note-btn{height:34px;padding:0 12px;border-radius:8px;border:1px solid #94a3b8;background:#fff;color:#0f172a;cursor:pointer}
154
+ .hyewb-preview-note-btn.primary{border-color:#0b7285;background:#0b7285;color:#fff}
147
155
  .hyewb-preview-highlight-mark{background:var(--hyewb-highlight-color,#fff59d);color:inherit;padding:0 .08em;border-radius:.2em}
148
156
  .hyewb-preview-note-mark{background:rgba(14,116,144,.14);border-bottom:2px solid #0e7490;color:inherit;padding:0 .04em;border-radius:.2em}
149
157
  .hyewb-preview-annotation-panel{display:none;align-content:start;gap:10px;border:1px solid #d8e0ea;border-radius:10px;background:#ffffff;padding:12px;max-height:100%;overflow:auto}
@@ -779,6 +787,35 @@ export function mountEditorWorkbench(container, options = {}) {
779
787
  previewNoteBtn.setAttribute("aria-label", "创建笔记");
780
788
  previewNoteBtn.append(createIconPlaceholder("notebook-pen"));
781
789
  previewSelectionToolbar.append(previewHighlightBtn, previewNoteBtn);
790
+ const preservePreviewSelectionOnToolbarPointerDown = (event) => {
791
+ // Keep native text selection active while clicking toolbar actions.
792
+ event.preventDefault();
793
+ event.stopPropagation();
794
+ };
795
+ previewSelectionToolbar.addEventListener("mousedown", preservePreviewSelectionOnToolbarPointerDown);
796
+ const previewNoteBackdrop = document.createElement("div");
797
+ previewNoteBackdrop.className = "hyewb-preview-note-backdrop";
798
+ const previewNoteDialog = document.createElement("div");
799
+ previewNoteDialog.className = "hyewb-preview-note-dialog";
800
+ const previewNoteTitle = document.createElement("h4");
801
+ previewNoteTitle.className = "hyewb-preview-note-title";
802
+ previewNoteTitle.textContent = "新增笔记";
803
+ const previewNoteInput = document.createElement("textarea");
804
+ previewNoteInput.className = "hyewb-preview-note-input";
805
+ previewNoteInput.placeholder = "请输入笔记内容";
806
+ const previewNoteActions = document.createElement("div");
807
+ previewNoteActions.className = "hyewb-preview-note-actions";
808
+ const previewNoteCancelBtn = document.createElement("button");
809
+ previewNoteCancelBtn.type = "button";
810
+ previewNoteCancelBtn.className = "hyewb-preview-note-btn";
811
+ previewNoteCancelBtn.textContent = "取消";
812
+ const previewNoteConfirmBtn = document.createElement("button");
813
+ previewNoteConfirmBtn.type = "button";
814
+ previewNoteConfirmBtn.className = "hyewb-preview-note-btn primary";
815
+ previewNoteConfirmBtn.textContent = "保存";
816
+ previewNoteActions.append(previewNoteCancelBtn, previewNoteConfirmBtn);
817
+ previewNoteDialog.append(previewNoteTitle, previewNoteInput, previewNoteActions);
818
+ previewNoteBackdrop.append(previewNoteDialog);
782
819
  const floatingToolbar = document.createElement("div");
783
820
  floatingToolbar.className = "hyewb-float";
784
821
  const floatBoldBtn = createButton("bold");
@@ -853,7 +890,7 @@ export function mountEditorWorkbench(container, options = {}) {
853
890
  const colorGrid = document.createElement("div");
854
891
  colorGrid.className = "hyewb-color-grid";
855
892
  colorPalette.append(colorGrid);
856
- root.append(header, toolbar, pageRow, previewLayout, status, colorPalette, tablePicker, tableTools, tableRowDeleteBtn, tableMoveHandle, tableScaleHandle, tableColEdgeLayer, tableRowEdgeLayer, tableRowGapInsertBtn, tableColGapInsertBtn, tableDropIndicator, tableContextMenu, uploadBackdrop, docxInput, previewSelectionToolbar);
893
+ root.append(header, toolbar, pageRow, previewLayout, status, colorPalette, tablePicker, tableTools, tableRowDeleteBtn, tableMoveHandle, tableScaleHandle, tableColEdgeLayer, tableRowEdgeLayer, tableRowGapInsertBtn, tableColGapInsertBtn, tableDropIndicator, tableContextMenu, uploadBackdrop, previewNoteBackdrop, docxInput, previewSelectionToolbar);
857
894
  container.innerHTML = "";
858
895
  root.append(floatingToolbar);
859
896
  container.append(root);
@@ -882,6 +919,7 @@ export function mountEditorWorkbench(container, options = {}) {
882
919
  let selectedTableColIndex = null;
883
920
  let annotationActiveTab = previewAnnotationOptions.annotationListDefaultTab;
884
921
  let previewSelectionDraft = null;
922
+ let previewNoteDialogDraft = null;
885
923
  const isTableGapInsertTarget = (node) => {
886
924
  if (!node) {
887
925
  return false;
@@ -1029,6 +1067,48 @@ export function mountEditorWorkbench(container, options = {}) {
1029
1067
  uploadProgressBar.style.width = `${formatUploadProgress(uploadState.progress)}%`;
1030
1068
  uploadError.textContent = uploadState.error || "";
1031
1069
  };
1070
+ const closePreviewNoteDialog = () => {
1071
+ previewNoteDialogDraft = null;
1072
+ previewNoteInput.value = "";
1073
+ previewNoteBackdrop.classList.remove("show");
1074
+ previewNoteInput.blur();
1075
+ };
1076
+ const openPreviewNoteDialog = (draft) => {
1077
+ previewNoteDialogDraft = { ...draft };
1078
+ previewNoteInput.value = draft.text || "";
1079
+ previewNoteBackdrop.classList.add("show");
1080
+ window.setTimeout(() => {
1081
+ previewNoteInput.focus();
1082
+ previewNoteInput.select();
1083
+ }, 0);
1084
+ };
1085
+ const savePreviewNoteFromDialog = () => {
1086
+ if (!previewNoteDialogDraft) {
1087
+ return;
1088
+ }
1089
+ const noteText = previewNoteInput.value.trim();
1090
+ if (!noteText) {
1091
+ status.textContent = "请输入笔记内容";
1092
+ previewNoteInput.focus();
1093
+ return;
1094
+ }
1095
+ const current = normalizePreviewAnnotations(state.doc.meta.previewAnnotations);
1096
+ current.notes = mergeNoteRecords(current.notes, {
1097
+ id: `note-${Date.now()}-${Math.round(Math.random() * 10000)}`,
1098
+ pageId: previewNoteDialogDraft.pageId,
1099
+ start: previewNoteDialogDraft.start,
1100
+ end: previewNoteDialogDraft.end,
1101
+ text: noteText,
1102
+ selectedText: previewNoteDialogDraft.text,
1103
+ color: "#0e7490",
1104
+ createdAt: new Date().toISOString(),
1105
+ });
1106
+ annotationActiveTab = "notes";
1107
+ savePreviewAnnotations(current);
1108
+ window.getSelection()?.removeAllRanges();
1109
+ closePreviewNoteDialog();
1110
+ hidePreviewSelectionToolbar();
1111
+ };
1032
1112
  const closeUploadDialog = () => {
1033
1113
  if (uploadState.uploading) {
1034
1114
  return;
@@ -3735,26 +3815,25 @@ export function mountEditorWorkbench(container, options = {}) {
3735
3815
  if (!previewSelectionDraft) {
3736
3816
  return;
3737
3817
  }
3738
- const text = window.prompt("请输入笔记内容", previewSelectionDraft.text || "") || "";
3739
- const noteText = text.trim();
3740
- if (!noteText) {
3741
- return;
3818
+ openPreviewNoteDialog(previewSelectionDraft);
3819
+ });
3820
+ previewNoteConfirmBtn.addEventListener("click", () => {
3821
+ savePreviewNoteFromDialog();
3822
+ });
3823
+ previewNoteCancelBtn.addEventListener("click", () => {
3824
+ closePreviewNoteDialog();
3825
+ });
3826
+ previewNoteBackdrop.addEventListener("click", () => {
3827
+ closePreviewNoteDialog();
3828
+ });
3829
+ previewNoteDialog.addEventListener("click", (event) => {
3830
+ event.stopPropagation();
3831
+ });
3832
+ previewNoteInput.addEventListener("keydown", (event) => {
3833
+ if ((event.ctrlKey || event.metaKey) && event.key === "Enter") {
3834
+ event.preventDefault();
3835
+ savePreviewNoteFromDialog();
3742
3836
  }
3743
- const current = normalizePreviewAnnotations(state.doc.meta.previewAnnotations);
3744
- current.notes = mergeNoteRecords(current.notes, {
3745
- id: `note-${Date.now()}-${Math.round(Math.random() * 10000)}`,
3746
- pageId: previewSelectionDraft.pageId,
3747
- start: previewSelectionDraft.start,
3748
- end: previewSelectionDraft.end,
3749
- text: noteText,
3750
- selectedText: previewSelectionDraft.text,
3751
- color: "#0e7490",
3752
- createdAt: new Date().toISOString(),
3753
- });
3754
- annotationActiveTab = "notes";
3755
- savePreviewAnnotations(current);
3756
- window.getSelection()?.removeAllRanges();
3757
- hidePreviewSelectionToolbar();
3758
3837
  });
3759
3838
  floatLeftBtn.addEventListener("click", () => updateAlign("left"));
3760
3839
  floatCenterBtn.addEventListener("click", () => updateAlign("center"));
@@ -4526,6 +4605,9 @@ export function mountEditorWorkbench(container, options = {}) {
4526
4605
  const handleDocumentKeyDown = (event) => {
4527
4606
  if (event.key === "Escape") {
4528
4607
  hideTableContextMenu();
4608
+ if (previewNoteBackdrop.classList.contains("show")) {
4609
+ closePreviewNoteDialog();
4610
+ }
4529
4611
  }
4530
4612
  };
4531
4613
  document.addEventListener("pointerdown", handleDocumentPointerDownForPalette);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyebook/vue3-adapter",
3
- "version": "0.2.5",
3
+ "version": "2.2.6",
4
4
  "description": "Vue3 adapter for hy-ebook core",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,11 +17,11 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@hyebook/core": "^0.2.5"
20
+ "@hyebook/core": "^2.2.6"
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tsc -p tsconfig.json",
24
24
  "typecheck": "tsc -p tsconfig.json --noEmit",
25
25
  "lint": "echo 'No lint configured for @hyebook/vue3-adapter'"
26
26
  }
27
- }
27
+ }