@hyebook/vue3-adapter 2.3.3 → 2.3.5

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,5 +1,5 @@
1
1
  import type { EbookDoc } from "../types/ebook";
2
- import type { EBookPlayerHandle, EBookPlayerOptions, ReaderAnnotationCreateEvent, ReaderAnnotationDeleteEvent, ReaderAnnotations, ReaderAnnotationsChangeEvent, ReaderAnnotationUpdateEvent, ReaderBookmark, ReaderHighlight, ReaderNote } from "../types/player";
2
+ import type { EBookPlayerHandle, EBookPlayerOptions, EBookPlayerSetBookmarkOptions, ReaderAnnotationCreateEvent, ReaderAnnotationDeleteEvent, ReaderAnnotations, ReaderAnnotationsChangeEvent, ReaderAnnotationUpdateEvent, ReaderBookmark, ReaderHighlight, ReaderNote } from "../types/player";
3
3
  export declare class EBookPlayer implements EBookPlayerHandle {
4
4
  private container;
5
5
  private options;
@@ -17,6 +17,7 @@ export declare class EBookPlayer implements EBookPlayerHandle {
17
17
  private loaded;
18
18
  private destroyed;
19
19
  private readonly handleSelectionChangeBound;
20
+ private readonly handleSelectionRepositionBound;
20
21
  private readonly handleDocumentPointerDownBound;
21
22
  private readonly preserveSelectionOnToolbarMouseDownBound;
22
23
  private readonly handleHighlightClickBound;
@@ -37,8 +38,10 @@ export declare class EBookPlayer implements EBookPlayerHandle {
37
38
  createNote(note: Omit<ReaderNote, "id" | "createdAt" | "updatedAt" | "bookId">, source?: "api" | "user"): Promise<ReaderNote>;
38
39
  updateNote(noteId: string, patch: Partial<Omit<ReaderNote, "id" | "bookId" | "createdAt">>, source?: "api" | "user"): Promise<ReaderNote | null>;
39
40
  deleteNote(noteId: string, source?: "api" | "user"): Promise<boolean>;
40
- setBookmark(pageId: string, blockId: string, source?: "api" | "user"): Promise<ReaderBookmark | null>;
41
+ setBookmark(options?: EBookPlayerSetBookmarkOptions, source?: "api" | "user"): Promise<ReaderBookmark | null>;
41
42
  deleteBookmark(bookmarkId: string, source?: "api" | "user"): Promise<boolean>;
43
+ goToHighlight(highlightId: string): number | null;
44
+ goToNote(noteId: string): number | null;
42
45
  goToBookmark(bookmarkId: string): number | null;
43
46
  onAnnotationCreate(listener: (event: ReaderAnnotationCreateEvent) => void): () => void;
44
47
  onAnnotationUpdate(listener: (event: ReaderAnnotationUpdateEvent) => void): () => void;
@@ -47,7 +50,6 @@ export declare class EBookPlayer implements EBookPlayerHandle {
47
50
  private renderDocument;
48
51
  private renderPage;
49
52
  private renderTextBlock;
50
- private renderNonTextBlock;
51
53
  private getTextBlockContent;
52
54
  private textBlockToHTML;
53
55
  private paragraphTypeToTag;
@@ -56,16 +58,21 @@ export declare class EBookPlayer implements EBookPlayerHandle {
56
58
  private inlineImageAlignStyleParts;
57
59
  private renderImageBlock;
58
60
  private renderVideoBlock;
61
+ private renderNonTextBlock;
59
62
  private renderTableBlock;
60
63
  private createAnnotationBuckets;
61
64
  private toBlockKey;
65
+ private resolveAnnotationSegments;
62
66
  private applyHighlightMarks;
63
67
  private applyNoteMarks;
68
+ private resolveTableCell;
69
+ private isRangeInsideSingleTableCell;
64
70
  private applyBookmarkMarker;
65
71
  private wrapRangeWithMark;
66
72
  private createRangeFromOffsets;
67
73
  private normalizeOffsetRange;
68
74
  private handleSelectionChange;
75
+ private updateSelectionToolbarPosition;
69
76
  private resolveTextContainer;
70
77
  private getSelectionOffsets;
71
78
  private collectSelectionSegments;
@@ -83,7 +90,16 @@ export declare class EBookPlayer implements EBookPlayerHandle {
83
90
  private resolveInputLimits;
84
91
  private normalizeLimitValue;
85
92
  private promptTextWithLimit;
86
- private ensureTextBlockExists;
93
+ private normalizeBookmarkContent;
94
+ private resolveCurrentBlockFromScroll;
95
+ private extractBlockDataset;
96
+ private scrollToBlock;
97
+ private getCurrentScrollTop;
98
+ private scrollToStoredPosition;
99
+ private resolveScrollHost;
100
+ private isWindowScrollHost;
101
+ private escapeSelectorValue;
102
+ private ensureBookmarkBlockExists;
87
103
  private findBookmarkByBlock;
88
104
  private setToolbarButtonContent;
89
105
  private ensureLoaded;
@@ -1 +1 @@
1
- {"version":3,"file":"ebook-player.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/ebook-player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ebook-player.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/ebook-player.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ const NOTE_ICON_SVG = `<svg width="24" height="24" viewBox="0 0 24 24" fill="non
6
6
  const BOOKMARK_ICON_SVG = `<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 3C0 1.34315 1.34315 0 3 0H27C28.6569 0 30 1.34315 30 3V38.1989C30 38.9837 29.1374 39.4627 28.4713 39.0477L15 30.6562L1.52873 39.0477C0.862627 39.4627 0 38.9837 0 38.1989L0 3Z" fill="#4FCEBB"/></svg>`;
7
7
  const EBOOK_PLAYER_CSS = `
8
8
  .hyepl-root{position:relative;max-width:100%;margin:0 auto;color:#0f172a;font-size:14px;line-height:1.7}
9
+ .hyepl-root ::selection{background:#7DE2D3}
10
+ .hyepl-root ::-moz-selection{background:#7DE2D3}
9
11
  .hyepl-content{position:relative}
10
12
  .hyepl-page{margin:0 0 16px}
11
13
  .hyepl-page:last-child{margin-bottom:0}
@@ -27,7 +29,7 @@ const EBOOK_PLAYER_CSS = `
27
29
  .hyepl-inline-video{border-radius:8px;background:#000}
28
30
  .hyepl-block-image img,.hyepl-block-video video{display:block;max-width:100%;width:100%;height:auto;border-radius:8px}
29
31
  .hyepl-block-image figcaption,.hyepl-block-video figcaption{margin-top:6px;font-size:12px;color:#64748b}
30
- .hyepl-block-table{overflow:auto}
32
+ .hyepl-block-table{position:relative;overflow:auto;padding-right:18px}
31
33
  .hyepl-block-table table{width:100%;border-collapse:collapse;table-layout:fixed}
32
34
  .hyepl-block-table th,.hyepl-block-table td{border:1px solid #cbd5e1;padding:6px 8px;vertical-align:top;min-width:68px}
33
35
  .hyepl-block-muted{color:#64748b}
@@ -56,6 +58,9 @@ export class EBookPlayer {
56
58
  this.handleSelectionChangeBound = () => {
57
59
  this.handleSelectionChange();
58
60
  };
61
+ this.handleSelectionRepositionBound = () => {
62
+ this.updateSelectionToolbarPosition();
63
+ };
59
64
  this.handleDocumentPointerDownBound = (event) => {
60
65
  this.handleDocumentPointerDown(event);
61
66
  };
@@ -105,6 +110,8 @@ export class EBookPlayer {
105
110
  this.noteBtn.addEventListener("click", this.handleNoteClickBound);
106
111
  document.addEventListener("selectionchange", this.handleSelectionChangeBound);
107
112
  document.addEventListener("pointerdown", this.handleDocumentPointerDownBound);
113
+ window.addEventListener("scroll", this.handleSelectionRepositionBound, true);
114
+ window.addEventListener("resize", this.handleSelectionRepositionBound);
108
115
  }
109
116
  async load(doc) {
110
117
  if (doc) {
@@ -129,6 +136,8 @@ export class EBookPlayer {
129
136
  this.hideSelectionToolbar();
130
137
  document.removeEventListener("selectionchange", this.handleSelectionChangeBound);
131
138
  document.removeEventListener("pointerdown", this.handleDocumentPointerDownBound);
139
+ window.removeEventListener("scroll", this.handleSelectionRepositionBound, true);
140
+ window.removeEventListener("resize", this.handleSelectionRepositionBound);
132
141
  this.highlightBtn.removeEventListener("mousedown", this.preserveSelectionOnToolbarMouseDownBound);
133
142
  this.noteBtn.removeEventListener("mousedown", this.preserveSelectionOnToolbarMouseDownBound);
134
143
  this.highlightBtn.removeEventListener("click", this.handleHighlightClickBound);
@@ -200,15 +209,30 @@ export class EBookPlayer {
200
209
  this.renderDocument();
201
210
  return deleted;
202
211
  }
203
- async setBookmark(pageId, blockId, source = "api") {
212
+ async setBookmark(options = {}, source = "api") {
204
213
  this.ensureLoaded();
205
- this.ensureTextBlockExists(pageId, blockId);
214
+ const target = this.resolveCurrentBlockFromScroll();
215
+ if (!target) {
216
+ throw new Error("Cannot resolve current block for bookmark.");
217
+ }
218
+ this.ensureBookmarkBlockExists(target.pageId, target.blockId);
219
+ const { pageId, blockId } = target;
206
220
  const current = this.findBookmarkByBlock(pageId, blockId);
207
- const content = this.promptTextWithLimit("请输入书签内容", current?.content || "", this.inputLimits.bookmarkMaxLength);
221
+ let content = null;
222
+ if (typeof options.content === "string" && options.content.trim()) {
223
+ content = this.normalizeBookmarkContent(options.content);
224
+ }
225
+ else if (options.prompt === false) {
226
+ throw new Error("Bookmark content is required when prompt is disabled.");
227
+ }
228
+ else {
229
+ content = this.promptTextWithLimit("请输入书签内容", current?.content || "", this.inputLimits.bookmarkMaxLength);
230
+ }
208
231
  if (content === null) {
209
232
  return null;
210
233
  }
211
- const bookmark = await this.engine.setBookmark(pageId, blockId, content, source);
234
+ const scrollTop = this.getCurrentScrollTop();
235
+ const bookmark = await this.engine.setBookmark(pageId, blockId, content, source, scrollTop);
212
236
  this.renderDocument();
213
237
  return bookmark;
214
238
  }
@@ -218,9 +242,52 @@ export class EBookPlayer {
218
242
  this.renderDocument();
219
243
  return deleted;
220
244
  }
245
+ goToHighlight(highlightId) {
246
+ this.ensureLoaded();
247
+ const target = this.engine
248
+ .getHighlights()
249
+ .find((item) => item.id === highlightId);
250
+ if (!target) {
251
+ return null;
252
+ }
253
+ const pageIndex = this.engine.goToHighlight(highlightId);
254
+ if (pageIndex === null) {
255
+ return null;
256
+ }
257
+ this.scrollToBlock(target.pageId, target.blockId);
258
+ return pageIndex;
259
+ }
260
+ goToNote(noteId) {
261
+ this.ensureLoaded();
262
+ const target = this.engine.getNotes().find((item) => item.id === noteId);
263
+ if (!target) {
264
+ return null;
265
+ }
266
+ const pageIndex = this.engine.goToNote(noteId);
267
+ if (pageIndex === null) {
268
+ return null;
269
+ }
270
+ this.scrollToBlock(target.pageId, target.blockId);
271
+ return pageIndex;
272
+ }
221
273
  goToBookmark(bookmarkId) {
222
274
  this.ensureLoaded();
223
- return this.engine.goToBookmark(bookmarkId);
275
+ const target = this.engine
276
+ .getBookmarks()
277
+ .find((item) => item.id === bookmarkId);
278
+ if (!target) {
279
+ return null;
280
+ }
281
+ const pageIndex = this.engine.goToBookmark(bookmarkId);
282
+ if (pageIndex === null) {
283
+ return null;
284
+ }
285
+ if (Number.isFinite(target.scrollTop)) {
286
+ this.scrollToStoredPosition(target.scrollTop);
287
+ return pageIndex;
288
+ }
289
+ this.scrollToBlock(target.pageId, target.blockId);
290
+ return pageIndex;
224
291
  }
225
292
  onAnnotationCreate(listener) {
226
293
  return this.engine.onAnnotationCreate(listener);
@@ -257,7 +324,7 @@ export class EBookPlayer {
257
324
  pageSection.append(this.renderTextBlock(page.id, block, buckets));
258
325
  return;
259
326
  }
260
- pageSection.append(this.renderNonTextBlock(block));
327
+ pageSection.append(this.renderNonTextBlock(page.id, block, buckets));
261
328
  });
262
329
  return pageSection;
263
330
  }
@@ -278,21 +345,6 @@ export class EBookPlayer {
278
345
  }
279
346
  return blockTextNode;
280
347
  }
281
- renderNonTextBlock(block) {
282
- if (block.type === "image") {
283
- return this.renderImageBlock(block);
284
- }
285
- if (block.type === "video") {
286
- return this.renderVideoBlock(block);
287
- }
288
- if (block.type === "table") {
289
- return this.renderTableBlock(block);
290
- }
291
- const node = document.createElement("div");
292
- node.className = "hyepl-block hyepl-block-muted";
293
- node.textContent = "[内容块]";
294
- return node;
295
- }
296
348
  getTextBlockContent(block) {
297
349
  return block.content.paragraphs
298
350
  .map((paragraph) => {
@@ -455,9 +507,26 @@ export class EBookPlayer {
455
507
  figure.append(video);
456
508
  return figure;
457
509
  }
458
- renderTableBlock(block) {
510
+ renderNonTextBlock(pageId, block, buckets) {
511
+ if (block.type === "image") {
512
+ return this.renderImageBlock(block);
513
+ }
514
+ if (block.type === "video") {
515
+ return this.renderVideoBlock(block);
516
+ }
517
+ if (block.type === "table") {
518
+ return this.renderTableBlock(pageId, block, buckets);
519
+ }
520
+ const node = document.createElement("div");
521
+ node.className = "hyepl-block hyepl-block-muted";
522
+ node.textContent = "[内容块]";
523
+ return node;
524
+ }
525
+ renderTableBlock(pageId, block, buckets) {
459
526
  const wrapper = document.createElement("div");
460
527
  wrapper.className = "hyepl-block hyepl-block-table";
528
+ wrapper.dataset.pageId = pageId;
529
+ wrapper.dataset.blockId = block.id;
461
530
  const table = document.createElement("table");
462
531
  if (block.style) {
463
532
  table.setAttribute("style", block.style);
@@ -514,6 +583,15 @@ export class EBookPlayer {
514
583
  }
515
584
  table.append(tbody);
516
585
  wrapper.append(table);
586
+ const blockKey = this.toBlockKey(pageId, block.id);
587
+ const highlights = buckets.highlightsByBlock.get(blockKey) || [];
588
+ const notes = buckets.notesByBlock.get(blockKey) || [];
589
+ const bookmark = buckets.bookmarksByBlock.get(blockKey) || null;
590
+ this.applyHighlightMarks(wrapper, highlights);
591
+ this.applyNoteMarks(wrapper, notes);
592
+ if (bookmark) {
593
+ this.applyBookmarkMarker(wrapper, bookmark);
594
+ }
517
595
  return wrapper;
518
596
  }
519
597
  createAnnotationBuckets(annotations) {
@@ -521,16 +599,27 @@ export class EBookPlayer {
521
599
  const notesByBlock = new Map();
522
600
  const bookmarksByBlock = new Map();
523
601
  annotations.highlights.forEach((item) => {
524
- const key = this.toBlockKey(item.pageId, item.blockId);
525
- const current = highlightsByBlock.get(key) || [];
526
- current.push(item);
527
- highlightsByBlock.set(key, current);
602
+ this.resolveAnnotationSegments(item.pageId, item.blockId, item.range, item.segments).forEach((segment) => {
603
+ const key = this.toBlockKey(segment.pageId, segment.blockId);
604
+ const current = highlightsByBlock.get(key) || [];
605
+ current.push({
606
+ id: item.id,
607
+ range: segment.range,
608
+ ...(item.color ? { color: item.color } : {}),
609
+ });
610
+ highlightsByBlock.set(key, current);
611
+ });
528
612
  });
529
613
  annotations.notes.forEach((item) => {
530
- const key = this.toBlockKey(item.pageId, item.blockId);
531
- const current = notesByBlock.get(key) || [];
532
- current.push(item);
533
- notesByBlock.set(key, current);
614
+ this.resolveAnnotationSegments(item.pageId, item.blockId, item.range, item.segments).forEach((segment) => {
615
+ const key = this.toBlockKey(segment.pageId, segment.blockId);
616
+ const current = notesByBlock.get(key) || [];
617
+ current.push({
618
+ id: item.id,
619
+ range: segment.range,
620
+ });
621
+ notesByBlock.set(key, current);
622
+ });
534
623
  });
535
624
  const bookmarks = Array.isArray(annotations.bookmarks)
536
625
  ? annotations.bookmarks
@@ -544,6 +633,39 @@ export class EBookPlayer {
544
633
  toBlockKey(pageId, blockId) {
545
634
  return `${pageId}::${blockId}`;
546
635
  }
636
+ resolveAnnotationSegments(pageId, blockId, range, segments) {
637
+ const resolvedSegments = Array.isArray(segments)
638
+ ? segments
639
+ .map((segment) => {
640
+ const segmentPageId = typeof segment?.pageId === "string" ? segment.pageId : "";
641
+ const segmentBlockId = typeof segment?.blockId === "string" ? segment.blockId : "";
642
+ const normalizedRange = this.normalizeOffsetRange(segment?.range?.start || 0, segment?.range?.end || 0);
643
+ if (!segmentPageId || !segmentBlockId || !normalizedRange) {
644
+ return null;
645
+ }
646
+ return {
647
+ pageId: segmentPageId,
648
+ blockId: segmentBlockId,
649
+ range: normalizedRange,
650
+ ...(segment?.selectedText
651
+ ? { selectedText: segment.selectedText }
652
+ : {}),
653
+ };
654
+ })
655
+ .filter((segment) => segment !== null)
656
+ : [];
657
+ if (resolvedSegments.length) {
658
+ return resolvedSegments;
659
+ }
660
+ if (!pageId || !blockId || !range) {
661
+ return [];
662
+ }
663
+ const normalizedRange = this.normalizeOffsetRange(range.start, range.end);
664
+ if (!normalizedRange) {
665
+ return [];
666
+ }
667
+ return [{ pageId, blockId, range: normalizedRange }];
668
+ }
547
669
  applyHighlightMarks(container, highlights) {
548
670
  [...highlights]
549
671
  .filter((item) => Number.isFinite(item.range.start) && Number.isFinite(item.range.end))
@@ -553,6 +675,10 @@ export class EBookPlayer {
553
675
  if (!range || range.collapsed) {
554
676
  return;
555
677
  }
678
+ if (container.classList.contains("hyepl-block-table") &&
679
+ !this.isRangeInsideSingleTableCell(range)) {
680
+ return;
681
+ }
556
682
  const mark = document.createElement("mark");
557
683
  mark.className = "hyepl-highlight";
558
684
  if (item.color) {
@@ -563,26 +689,43 @@ export class EBookPlayer {
563
689
  }
564
690
  applyNoteMarks(container, notes) {
565
691
  [...notes]
566
- .filter((item) => !!item.range)
567
692
  .sort((a, b) => {
568
- const startA = a.range?.start || 0;
569
- const startB = b.range?.start || 0;
693
+ const startA = a.range.start || 0;
694
+ const startB = b.range.start || 0;
570
695
  return startB - startA;
571
696
  })
572
697
  .forEach((item) => {
573
- if (!item.range) {
574
- return;
575
- }
576
698
  const range = this.createRangeFromOffsets(container, item.range.start, item.range.end);
577
699
  if (!range || range.collapsed) {
578
700
  return;
579
701
  }
702
+ if (container.classList.contains("hyepl-block-table") &&
703
+ !this.isRangeInsideSingleTableCell(range)) {
704
+ return;
705
+ }
580
706
  const mark = document.createElement("mark");
581
707
  mark.className = "hyepl-note";
582
708
  mark.dataset.noteId = item.id;
583
709
  this.wrapRangeWithMark(range, mark);
584
710
  });
585
711
  }
712
+ resolveTableCell(node) {
713
+ if (!node) {
714
+ return null;
715
+ }
716
+ const baseElement = node.nodeType === Node.ELEMENT_NODE
717
+ ? node
718
+ : node.parentElement;
719
+ if (!baseElement) {
720
+ return null;
721
+ }
722
+ return baseElement.closest("td,th");
723
+ }
724
+ isRangeInsideSingleTableCell(range) {
725
+ const startCell = this.resolveTableCell(range.startContainer);
726
+ const endCell = this.resolveTableCell(range.endContainer);
727
+ return Boolean(startCell && endCell && startCell === endCell);
728
+ }
586
729
  applyBookmarkMarker(container, bookmark) {
587
730
  const marker = document.createElement("span");
588
731
  marker.className = "hyepl-bookmark-flag";
@@ -691,9 +834,28 @@ export class EBookPlayer {
691
834
  text: selection.toString().trim(),
692
835
  segments,
693
836
  };
837
+ this.updateSelectionToolbarPosition(range);
838
+ if (this.selectionDraft) {
839
+ this.selectionToolbar.classList.add("show");
840
+ }
841
+ }
842
+ updateSelectionToolbarPosition(range) {
843
+ if (!this.selectionDraft) {
844
+ return;
845
+ }
846
+ const selection = window.getSelection();
847
+ if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {
848
+ this.hideSelectionToolbar();
849
+ return;
850
+ }
851
+ const activeRange = range ?? selection.getRangeAt(0);
852
+ const rect = activeRange.getBoundingClientRect();
853
+ if (!rect.width && !rect.height) {
854
+ this.hideSelectionToolbar();
855
+ return;
856
+ }
694
857
  this.selectionToolbar.style.left = `${Math.round(rect.left + rect.width / 2)}px`;
695
858
  this.selectionToolbar.style.top = `${Math.round(rect.top - 20)}px`;
696
- this.selectionToolbar.classList.add("show");
697
859
  }
698
860
  resolveTextContainer(node) {
699
861
  if (!node) {
@@ -705,7 +867,7 @@ export class EBookPlayer {
705
867
  if (!baseElement) {
706
868
  return null;
707
869
  }
708
- const textContainer = baseElement.closest(".hyepl-block-text");
870
+ const textContainer = baseElement.closest(".hyepl-block-text, .hyepl-block-table");
709
871
  if (!textContainer || !this.content.contains(textContainer)) {
710
872
  return null;
711
873
  }
@@ -732,7 +894,13 @@ export class EBookPlayer {
732
894
  if (!startContainer || !endContainer) {
733
895
  return null;
734
896
  }
735
- const textContainers = Array.from(this.content.querySelectorAll(".hyepl-block-text"));
897
+ if (startContainer.classList.contains("hyepl-block-table") ||
898
+ endContainer.classList.contains("hyepl-block-table")) {
899
+ if (!this.isRangeInsideSingleTableCell(range)) {
900
+ return null;
901
+ }
902
+ }
903
+ const textContainers = Array.from(this.content.querySelectorAll(".hyepl-block-text, .hyepl-block-table"));
736
904
  const startIndex = textContainers.indexOf(startContainer);
737
905
  const endIndex = textContainers.indexOf(endContainer);
738
906
  if (startIndex < 0 || endIndex < 0) {
@@ -861,18 +1029,32 @@ export class EBookPlayer {
861
1029
  text: this.selectionDraft.text,
862
1030
  },
863
1031
  ];
864
- for (const segment of segments) {
865
- const payload = {
1032
+ const firstSegment = segments[0];
1033
+ if (!firstSegment) {
1034
+ return;
1035
+ }
1036
+ const mergedSelectedText = this.selectionDraft.text ||
1037
+ segments
1038
+ .map((segment) => segment.text)
1039
+ .filter(Boolean)
1040
+ .join("\n")
1041
+ .trim();
1042
+ const payload = {
1043
+ pageId: firstSegment.pageId,
1044
+ blockId: firstSegment.blockId,
1045
+ range: firstSegment.range,
1046
+ ...(mergedSelectedText ? { selectedText: mergedSelectedText } : {}),
1047
+ ...(this.selectionOptions.highlightColor
1048
+ ? { color: this.selectionOptions.highlightColor }
1049
+ : {}),
1050
+ segments: segments.map((segment) => ({
866
1051
  pageId: segment.pageId,
867
1052
  blockId: segment.blockId,
868
1053
  range: segment.range,
869
1054
  ...(segment.text ? { selectedText: segment.text } : {}),
870
- ...(this.selectionOptions.highlightColor
871
- ? { color: this.selectionOptions.highlightColor }
872
- : {}),
873
- };
874
- await this.createHighlight(payload, "user");
875
- }
1055
+ })),
1056
+ };
1057
+ await this.createHighlight(payload, "user");
876
1058
  this.clearSelection();
877
1059
  this.hideSelectionToolbar();
878
1060
  }
@@ -895,19 +1077,33 @@ export class EBookPlayer {
895
1077
  text: this.selectionDraft.text,
896
1078
  },
897
1079
  ];
898
- for (const segment of segments) {
899
- const payload = {
1080
+ const firstSegment = segments[0];
1081
+ if (!firstSegment) {
1082
+ return;
1083
+ }
1084
+ const mergedSelectedText = this.selectionDraft.text ||
1085
+ segments
1086
+ .map((segment) => segment.text)
1087
+ .filter(Boolean)
1088
+ .join("\n")
1089
+ .trim();
1090
+ const payload = {
1091
+ pageId: firstSegment.pageId,
1092
+ blockId: firstSegment.blockId,
1093
+ range: firstSegment.range,
1094
+ content,
1095
+ ...(mergedSelectedText ? { selectedText: mergedSelectedText } : {}),
1096
+ ...(this.selectionOptions.noteColor
1097
+ ? { color: this.selectionOptions.noteColor }
1098
+ : {}),
1099
+ segments: segments.map((segment) => ({
900
1100
  pageId: segment.pageId,
901
1101
  blockId: segment.blockId,
902
1102
  range: segment.range,
903
- content,
904
1103
  ...(segment.text ? { selectedText: segment.text } : {}),
905
- ...(this.selectionOptions.noteColor
906
- ? { color: this.selectionOptions.noteColor }
907
- : {}),
908
- };
909
- await this.createNote(payload, "user");
910
- }
1104
+ })),
1105
+ };
1106
+ await this.createNote(payload, "user");
911
1107
  this.clearSelection();
912
1108
  this.hideSelectionToolbar();
913
1109
  }
@@ -974,7 +1170,107 @@ export class EBookPlayer {
974
1170
  return trimmed;
975
1171
  }
976
1172
  }
977
- ensureTextBlockExists(pageId, blockId) {
1173
+ normalizeBookmarkContent(raw) {
1174
+ const trimmed = raw.trim();
1175
+ if (!trimmed) {
1176
+ throw new Error("Bookmark content cannot be empty.");
1177
+ }
1178
+ if (trimmed.length > this.inputLimits.bookmarkMaxLength) {
1179
+ throw new Error(`Bookmark content exceeds max length ${this.inputLimits.bookmarkMaxLength}.`);
1180
+ }
1181
+ return trimmed;
1182
+ }
1183
+ resolveCurrentBlockFromScroll() {
1184
+ const rootRect = this.root.getBoundingClientRect();
1185
+ const x = Math.round(Math.min(window.innerWidth - 1, Math.max(0, rootRect.left + rootRect.width / 2)));
1186
+ const y = Math.round(Math.min(window.innerHeight - 1, Math.max(0, rootRect.top + 24)));
1187
+ const hit = document.elementFromPoint(x, y);
1188
+ const hitBlock = hit instanceof Element
1189
+ ? hit.closest?.(".hyepl-block-text[data-page-id][data-block-id], .hyepl-block-table[data-page-id][data-block-id]")
1190
+ : null;
1191
+ const fromHit = this.extractBlockDataset(hitBlock);
1192
+ if (fromHit) {
1193
+ return fromHit;
1194
+ }
1195
+ const blocks = Array.from(this.content.querySelectorAll(".hyepl-block-text[data-page-id][data-block-id], .hyepl-block-table[data-page-id][data-block-id]"));
1196
+ if (!blocks.length) {
1197
+ return null;
1198
+ }
1199
+ let best = null;
1200
+ for (const el of blocks) {
1201
+ const rect = el.getBoundingClientRect();
1202
+ if (rect.bottom <= 0 || rect.top >= window.innerHeight) {
1203
+ continue;
1204
+ }
1205
+ const score = Math.abs(rect.top);
1206
+ if (!best || score < best.score) {
1207
+ best = { el, score };
1208
+ }
1209
+ }
1210
+ return this.extractBlockDataset(best?.el ?? blocks[0] ?? null);
1211
+ }
1212
+ extractBlockDataset(el) {
1213
+ const pageId = el?.dataset?.pageId;
1214
+ const blockId = el?.dataset?.blockId;
1215
+ if (typeof pageId !== "string" || !pageId) {
1216
+ return null;
1217
+ }
1218
+ if (typeof blockId !== "string" || !blockId) {
1219
+ return null;
1220
+ }
1221
+ return { pageId, blockId };
1222
+ }
1223
+ scrollToBlock(pageId, blockId) {
1224
+ const page = this.escapeSelectorValue(pageId);
1225
+ const block = this.escapeSelectorValue(blockId);
1226
+ const node = this.content.querySelector(`[data-page-id="${page}"][data-block-id="${block}"]`);
1227
+ if (!node) {
1228
+ return false;
1229
+ }
1230
+ node.scrollIntoView({ block: "start" });
1231
+ return true;
1232
+ }
1233
+ getCurrentScrollTop() {
1234
+ const scrollHost = this.resolveScrollHost();
1235
+ if (this.isWindowScrollHost(scrollHost)) {
1236
+ return Math.max(0, Math.floor(window.scrollY || 0));
1237
+ }
1238
+ return Math.max(0, Math.floor(scrollHost.scrollTop || 0));
1239
+ }
1240
+ scrollToStoredPosition(scrollTop) {
1241
+ const safeTop = Math.max(0, Math.floor(scrollTop || 0));
1242
+ const scrollHost = this.resolveScrollHost();
1243
+ if (this.isWindowScrollHost(scrollHost)) {
1244
+ window.scrollTo({ top: safeTop, behavior: "auto" });
1245
+ return;
1246
+ }
1247
+ scrollHost.scrollTo({ top: safeTop, behavior: "auto" });
1248
+ }
1249
+ resolveScrollHost() {
1250
+ let current = this.container;
1251
+ while (current && current !== document.body) {
1252
+ const style = window.getComputedStyle(current);
1253
+ const overflowY = style.overflowY;
1254
+ const scrollableByStyle = overflowY === "auto" ||
1255
+ overflowY === "scroll" ||
1256
+ overflowY === "overlay";
1257
+ if (scrollableByStyle && current.scrollHeight > current.clientHeight) {
1258
+ return current;
1259
+ }
1260
+ current = current.parentElement;
1261
+ }
1262
+ return window;
1263
+ }
1264
+ isWindowScrollHost(host) {
1265
+ return host === window;
1266
+ }
1267
+ escapeSelectorValue(value) {
1268
+ if (typeof CSS !== "undefined" && typeof CSS.escape === "function") {
1269
+ return CSS.escape(value);
1270
+ }
1271
+ return value.replace(/["\\]/g, "\\$&");
1272
+ }
1273
+ ensureBookmarkBlockExists(pageId, blockId) {
978
1274
  const doc = this.engine.getDocument();
979
1275
  const page = doc.pages.find((item) => item.id === pageId);
980
1276
  if (!page) {
@@ -984,8 +1280,8 @@ export class EBookPlayer {
984
1280
  if (!block) {
985
1281
  throw new Error(`Block not found: ${blockId}`);
986
1282
  }
987
- if (block.type !== "text") {
988
- throw new Error("Bookmark is only supported on text blocks.");
1283
+ if (block.type !== "text" && block.type !== "table") {
1284
+ throw new Error("Bookmark is only supported on text/table blocks.");
989
1285
  }
990
1286
  }
991
1287
  findBookmarkByBlock(pageId, blockId) {
@@ -48,7 +48,7 @@ export declare class PlayerEngine {
48
48
  createNote(note: Omit<ReaderNote, "id" | "createdAt" | "updatedAt" | "bookId">, source?: "api" | "user"): Promise<ReaderNote>;
49
49
  updateNote(noteId: string, patch: Partial<Omit<ReaderNote, "id" | "bookId" | "createdAt">>, source?: "api" | "user"): Promise<ReaderNote | null>;
50
50
  deleteNote(noteId: string, source?: "api" | "user"): Promise<boolean>;
51
- setBookmark(pageId: string, blockId: string, content: string, source?: "api" | "user"): Promise<ReaderBookmark>;
51
+ setBookmark(pageId: string, blockId: string, content: string, source?: "api" | "user", scrollTop?: number): Promise<ReaderBookmark>;
52
52
  deleteBookmark(bookmarkId: string, source?: "api" | "user"): Promise<boolean>;
53
53
  onAnnotationCreate(listener: AnnotationCreateListener): () => void;
54
54
  onAnnotationUpdate(listener: AnnotationUpdateListener): () => void;
@@ -58,6 +58,7 @@ export declare class PlayerEngine {
58
58
  private loadAnnotationsState;
59
59
  private findPageIndexByPageId;
60
60
  private normalizeRange;
61
+ private normalizeSegments;
61
62
  private normalizeAnnotations;
62
63
  private mapPreviewAnnotationsToReader;
63
64
  private persistAnnotations;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/engine.ts"],"names":[],"mappings":"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"}
@@ -264,19 +264,26 @@ export class PlayerEngine {
264
264
  this.emitAnnotationDelete("note", removedNote, source);
265
265
  return true;
266
266
  }
267
- async setBookmark(pageId, blockId, content, source = "api") {
267
+ async setBookmark(pageId, blockId, content, source = "api", scrollTop) {
268
268
  const doc = this.getDocument();
269
269
  const now = Date.now();
270
270
  const normalizedContent = content.trim();
271
+ const normalizedScrollTop = Number.isFinite(scrollTop)
272
+ ? Math.max(0, Math.floor(scrollTop))
273
+ : undefined;
271
274
  const index = this.state.bookmarks.findIndex((item) => item.pageId === pageId && item.blockId === blockId);
272
275
  if (index >= 0) {
273
276
  const current = this.state.bookmarks[index];
274
277
  if (!current) {
275
278
  throw new Error("Bookmark update failed.");
276
279
  }
280
+ const nextScrollTop = normalizedScrollTop !== undefined
281
+ ? normalizedScrollTop
282
+ : current.scrollTop;
277
283
  const updatedBookmark = {
278
284
  ...current,
279
285
  content: normalizedContent,
286
+ ...(nextScrollTop !== undefined ? { scrollTop: nextScrollTop } : {}),
280
287
  updatedAt: now,
281
288
  };
282
289
  this.state.bookmarks[index] = updatedBookmark;
@@ -290,6 +297,9 @@ export class PlayerEngine {
290
297
  pageId,
291
298
  blockId,
292
299
  content: normalizedContent,
300
+ ...(normalizedScrollTop !== undefined
301
+ ? { scrollTop: normalizedScrollTop }
302
+ : {}),
293
303
  createdAt: now,
294
304
  updatedAt: now,
295
305
  };
@@ -399,12 +409,35 @@ export class PlayerEngine {
399
409
  return this.doc.pages.findIndex((page) => page.id === pageId);
400
410
  }
401
411
  normalizeRange(range) {
402
- const safeStart = Math.max(0, Math.floor(range.start || 0));
403
- const safeEnd = Math.max(0, Math.floor(range.end || 0));
412
+ const safeStart = Math.max(0, Math.floor(range?.start || 0));
413
+ const safeEnd = Math.max(0, Math.floor(range?.end || 0));
404
414
  return safeStart <= safeEnd
405
415
  ? { start: safeStart, end: safeEnd }
406
416
  : { start: safeEnd, end: safeStart };
407
417
  }
418
+ normalizeSegments(segments) {
419
+ if (!Array.isArray(segments) || !segments.length) {
420
+ return undefined;
421
+ }
422
+ const normalized = segments
423
+ .map((segment) => {
424
+ const pageId = typeof segment?.pageId === "string" ? segment.pageId : "";
425
+ const blockId = typeof segment?.blockId === "string" ? segment.blockId : "";
426
+ if (!pageId || !blockId) {
427
+ return null;
428
+ }
429
+ return {
430
+ pageId,
431
+ blockId,
432
+ range: this.normalizeRange(segment?.range),
433
+ ...(segment?.selectedText !== undefined
434
+ ? { selectedText: String(segment.selectedText) }
435
+ : {}),
436
+ };
437
+ })
438
+ .filter((segment) => segment !== null);
439
+ return normalized.length ? normalized : undefined;
440
+ }
408
441
  normalizeAnnotations(annotations, bookId) {
409
442
  const now = Date.now();
410
443
  const highlights = Array.isArray(annotations?.highlights)
@@ -419,13 +452,16 @@ export class PlayerEngine {
419
452
  const fallbackId = `highlight-${Date.now()}-${index}`;
420
453
  const createdAt = toTimestamp(item.createdAt, now);
421
454
  const updatedAt = toTimestamp(item.updatedAt, createdAt);
455
+ const segments = this.normalizeSegments(item.segments);
456
+ const firstSegment = segments?.[0];
422
457
  return {
423
458
  ...clone(item),
424
459
  id: item.id || fallbackId,
425
460
  bookId: item.bookId || bookId || "",
426
- pageId: item.pageId || "",
427
- blockId: item.blockId || "preview-flow-text",
428
- range: this.normalizeRange(item.range),
461
+ pageId: item.pageId || firstSegment?.pageId || "",
462
+ blockId: item.blockId || firstSegment?.blockId || "preview-flow-text",
463
+ range: this.normalizeRange(item.range || firstSegment?.range),
464
+ ...(segments ? { segments } : {}),
429
465
  createdAt,
430
466
  updatedAt,
431
467
  };
@@ -434,13 +470,19 @@ export class PlayerEngine {
434
470
  const fallbackId = `note-${Date.now()}-${index}`;
435
471
  const createdAt = toTimestamp(item.createdAt, now);
436
472
  const updatedAt = toTimestamp(item.updatedAt, createdAt);
473
+ const segments = this.normalizeSegments(item.segments);
474
+ const firstSegment = segments?.[0];
475
+ const resolvedRange = item.range || firstSegment?.range;
437
476
  return {
438
477
  ...clone(item),
439
478
  id: item.id || fallbackId,
440
479
  bookId: item.bookId || bookId || "",
441
- pageId: item.pageId || "",
442
- blockId: item.blockId || "preview-flow-text",
443
- ...(item.range ? { range: this.normalizeRange(item.range) } : {}),
480
+ pageId: item.pageId || firstSegment?.pageId || "",
481
+ blockId: item.blockId || firstSegment?.blockId || "preview-flow-text",
482
+ ...(resolvedRange
483
+ ? { range: this.normalizeRange(resolvedRange) }
484
+ : {}),
485
+ ...(segments ? { segments } : {}),
444
486
  content: item.content || "",
445
487
  createdAt,
446
488
  updatedAt,
@@ -450,6 +492,9 @@ export class PlayerEngine {
450
492
  const fallbackId = `bookmark-${Date.now()}-${index}`;
451
493
  const createdAt = toTimestamp(item.createdAt, now);
452
494
  const updatedAt = toTimestamp(item.updatedAt, createdAt);
495
+ const normalizedScrollTop = Number.isFinite(item.scrollTop)
496
+ ? Math.max(0, Math.floor(item.scrollTop))
497
+ : undefined;
453
498
  return {
454
499
  ...clone(item),
455
500
  id: item.id || fallbackId,
@@ -457,6 +502,9 @@ export class PlayerEngine {
457
502
  pageId: item.pageId || "",
458
503
  blockId: item.blockId || "",
459
504
  content: item.content || "",
505
+ ...(normalizedScrollTop !== undefined
506
+ ? { scrollTop: normalizedScrollTop }
507
+ : {}),
460
508
  createdAt,
461
509
  updatedAt,
462
510
  };
@@ -9,6 +9,12 @@ export interface ReaderProgress {
9
9
  zoom: number;
10
10
  updatedAt: number;
11
11
  }
12
+ export interface ReaderAnnotationSegment {
13
+ pageId: string;
14
+ blockId: string;
15
+ range: ReaderRange;
16
+ selectedText?: string;
17
+ }
12
18
  export interface ReaderNote {
13
19
  id: string;
14
20
  bookId: string;
@@ -17,6 +23,8 @@ export interface ReaderNote {
17
23
  range?: ReaderRange;
18
24
  content: string;
19
25
  color?: string;
26
+ selectedText?: string;
27
+ segments?: ReaderAnnotationSegment[];
20
28
  createdAt: number;
21
29
  updatedAt: number;
22
30
  }
@@ -28,6 +36,7 @@ export interface ReaderHighlight {
28
36
  range: ReaderRange;
29
37
  selectedText?: string;
30
38
  color?: string;
39
+ segments?: ReaderAnnotationSegment[];
31
40
  createdAt: number;
32
41
  updatedAt: number;
33
42
  }
@@ -37,6 +46,7 @@ export interface ReaderBookmark {
37
46
  pageId: string;
38
47
  blockId: string;
39
48
  content: string;
49
+ scrollTop?: number;
40
50
  createdAt: number;
41
51
  updatedAt: number;
42
52
  }
@@ -92,6 +102,10 @@ export interface EBookPlayerInputLimitsOptions {
92
102
  noteMaxLength?: number;
93
103
  bookmarkMaxLength?: number;
94
104
  }
105
+ export interface EBookPlayerSetBookmarkOptions {
106
+ content?: string;
107
+ prompt?: boolean;
108
+ }
95
109
  export interface PlayerDataProvider {
96
110
  getData: () => Promise<EbookDoc>;
97
111
  loadProgress?: (bookId: string) => Promise<ReaderProgress | null>;
@@ -128,8 +142,10 @@ export interface EBookPlayerHandle {
128
142
  createNote: (note: Omit<ReaderNote, "id" | "createdAt" | "updatedAt" | "bookId">, source?: "api" | "user") => Promise<ReaderNote>;
129
143
  updateNote: (noteId: string, patch: Partial<Omit<ReaderNote, "id" | "bookId" | "createdAt">>, source?: "api" | "user") => Promise<ReaderNote | null>;
130
144
  deleteNote: (noteId: string, source?: "api" | "user") => Promise<boolean>;
131
- setBookmark: (pageId: string, blockId: string, source?: "api" | "user") => Promise<ReaderBookmark | null>;
145
+ setBookmark: (options?: EBookPlayerSetBookmarkOptions, source?: "api" | "user") => Promise<ReaderBookmark | null>;
132
146
  deleteBookmark: (bookmarkId: string, source?: "api" | "user") => Promise<boolean>;
147
+ goToHighlight: (highlightId: string) => number | null;
148
+ goToNote: (noteId: string) => number | null;
133
149
  goToBookmark: (bookmarkId: string) => number | null;
134
150
  onAnnotationCreate: (listener: (event: ReaderAnnotationCreateEvent) => void) => () => void;
135
151
  onAnnotationUpdate: (listener: (event: ReaderAnnotationUpdateEvent) => void) => () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../../../core/src/types/player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../../../core/src/types/player.ts"],"names":[],"mappings":"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"}
@@ -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":"AAEA,OAAO,KAAK,EACV,QAAQ,EAKR,kBAAkB,EAWnB,MAAM,gBAAgB,CAAC;AA+LxB,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5C,kBAAkB,CAAC,EAAE,uCAAuC,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gCAAgC,CAAC;IAC9C,SAAS,CAAC,EAAE,+BAA+B,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,GAAG,2BAA2B,CAAC;IAC9C,MAAM,CAAC,EAAE,4BAA4B,CAAC;IACtC,UAAU,CAAC,EAAE,gCAAgC,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,gCAAgC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC;IAC9C,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,oCAAoC;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,qCAAqC,EAC9C,KAAK,EAAE,UAAU,KACd,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,oCAAoC,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAQD,MAAM,WAAW,uCAAuC;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uCAAuC;IACtD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,wBAAwB,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAClD,iBAAiB,CAAC,EAAE,uCAAuC,CAAC;CAC7D;AAED,MAAM,WAAW,gCAAgC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,wBAAyB,SAAQ,2BAA2B;CAAG;AAEhF,MAAM,WAAW,uBAAwB,SAAQ,2BAA2B;IAC1E,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;IACjD,sBAAsB,EAAE,CACtB,WAAW,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,KAC/C,kBAAkB,CAAC;IACxB,WAAW,EAAE,MAAM,uBAAuB,CAAC;IAC3C,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;CACnE;AAED,eAAO,MAAM,iCAAiC,EAAE,uBAM/C,CAAC;AAEF,KAAK,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAoSjC,wBAAgB,8BAA8B,IAAI,QAAQ,CA+FzD;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAigLvB"}
@@ -425,20 +425,6 @@ export function createDefaultWorkbenchDocument() {
425
425
  },
426
426
  ],
427
427
  },
428
- {
429
- id: "page-2",
430
- index: 1,
431
- blocks: [
432
- {
433
- id: "video-1",
434
- type: "video",
435
- rect: { x: 80, y: 80, width: 520, height: 300 },
436
- zIndex: 1,
437
- src: "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
438
- controls: true,
439
- },
440
- ],
441
- },
442
428
  ],
443
429
  };
444
430
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyebook/vue3-adapter",
3
- "version": "2.3.3",
3
+ "version": "2.3.5",
4
4
  "description": "Vue3 adapter for hy-ebook core",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,7 +17,7 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "@hyebook/core": "^2.3.3"
20
+ "@hyebook/core": "^2.3.5"
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tsc -p tsconfig.json",