@agilehub/vue-pdf-flipbook 1.3.4 → 2.0.0

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,6 +1,9 @@
1
+ import type { PdfAnnotationToolbarSlotProps, PdfAnnotationEditorSlotProps, PdfAnnotationClickPayload } from './annotationTypes';
1
2
  import type { PdfFlipbookProps, PdfPageNavigationSlotProps, PdfThumbnailSlotProps, PdfThumbnailsSlotProps } from './types';
2
3
  /** thumbnail 替换单项内容;thumbnails 接管整个列表、位置及交互,优先级更高。 */
3
4
  type __VLS_Slots = {
5
+ 'annotation-toolbar'?: (props: PdfAnnotationToolbarSlotProps) => unknown;
6
+ 'annotation-editor'?: (props: PdfAnnotationEditorSlotProps) => unknown;
4
7
  'previous-button'?: (props: PdfPageNavigationSlotProps) => unknown;
5
8
  'next-button'?: (props: PdfPageNavigationSlotProps) => unknown;
6
9
  thumbnail?: (props: PdfThumbnailSlotProps) => unknown;
@@ -9,6 +12,10 @@ type __VLS_Slots = {
9
12
  declare const __VLS_base: import("vue").DefineComponent<PdfFlipbookProps, import("./types").PdfFlipbookExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
13
  error: (error: unknown) => any;
11
14
  progress: (progress: number) => any;
15
+ "annotation-change": (change: import("./annotationTypes").PdfAnnotationChange) => any;
16
+ "annotation-select": (annotation: import("./annotationTypes").PdfAnnotation | null) => any;
17
+ "annotation-click": (payload: PdfAnnotationClickPayload) => any;
18
+ "annotation-error": (error: unknown) => any;
12
19
  loaded: (payload: {
13
20
  pages: number;
14
21
  }) => any;
@@ -18,6 +25,10 @@ declare const __VLS_base: import("vue").DefineComponent<PdfFlipbookProps, import
18
25
  }, string, import("vue").PublicProps, Readonly<PdfFlipbookProps> & Readonly<{
19
26
  onError?: ((error: unknown) => any) | undefined;
20
27
  onProgress?: ((progress: number) => any) | undefined;
28
+ "onAnnotation-change"?: ((change: import("./annotationTypes").PdfAnnotationChange) => any) | undefined;
29
+ "onAnnotation-select"?: ((annotation: import("./annotationTypes").PdfAnnotation | null) => any) | undefined;
30
+ "onAnnotation-click"?: ((payload: PdfAnnotationClickPayload) => any) | undefined;
31
+ "onAnnotation-error"?: ((error: unknown) => any) | undefined;
21
32
  onLoaded?: ((payload: {
22
33
  pages: number;
23
34
  }) => any) | undefined;
@@ -25,10 +36,11 @@ declare const __VLS_base: import("vue").DefineComponent<PdfFlipbookProps, import
25
36
  "onMode-change"?: ((mode: import("./types").ReaderMode) => any) | undefined;
26
37
  "onState-change"?: ((state: import("./types").PdfFlipbookState) => any) | undefined;
27
38
  }>, {
28
- initialPage: number;
29
39
  height: string | number;
40
+ initialPage: number;
30
41
  background: string;
31
42
  workerSrc: string;
43
+ showAnnotationToolbar: boolean;
32
44
  loadingText: string;
33
45
  showPreviousButton: boolean;
34
46
  showNextButton: boolean;
@@ -0,0 +1,35 @@
1
+ import type { PdfAnnotationGeometry, PdfAnnotationPoint } from './annotationTypes';
2
+ /** PDF.js scale=1 viewport 的最小几何接口;只传尺寸和变换矩阵,不把大型 PDF 页面实例存进标注。 */
3
+ export interface AnnotationViewport {
4
+ width: number;
5
+ height: number;
6
+ transform: number[];
7
+ }
8
+ /**
9
+ * 把持久化的 PDF 点投影为本页 SVG 点;矩阵已包含旋转、裁剪原点和 userUnit。
10
+ * @param point 标注中保存的 PDF 用户空间坐标。
11
+ * @param viewport 当前页由 PDF.js 提供的 scale=1 视口。
12
+ */
13
+ export declare function projectPoint(point: PdfAnnotationPoint, viewport: AnnotationViewport): PdfAnnotationPoint;
14
+ /**
15
+ * 将鼠标所在的 SVG 点反投影成可保存的 PDF 坐标;无效矩阵必须拒绝。
16
+ * @param point 本页 SVG/viewBox 坐标。
17
+ * @param viewport 与绘制正文时相同的当前页视口。
18
+ */
19
+ export declare function unprojectPoint(point: PdfAnnotationPoint, viewport: AnnotationViewport): PdfAnnotationPoint;
20
+ /** 将端点投影为页面朝向的包围盒;矩形绘制、拖拽限位和定位都复用这一结果。 */
21
+ export declare function geometryBounds(geometry: PdfAnnotationGeometry, viewport: AnnotationViewport): {
22
+ start: PdfAnnotationPoint;
23
+ end: PdfAnnotationPoint;
24
+ x: number;
25
+ y: number;
26
+ width: number;
27
+ height: number;
28
+ };
29
+ /**
30
+ * 沿直线法线生成波浪线 SVG 路径;首尾仍是原始端点,因此编辑手柄与存储坐标不变。
31
+ * 限制周期数和采样点数,避免长线或大尺寸 PDF 生成过大的 DOM 路径。
32
+ */
33
+ export declare function waveLinePath(start: PdfAnnotationPoint, end: PdfAnnotationPoint): string;
34
+ /** 校验外部快照中的标注是否落在当前 PDF 可见区域;错误数据由页面层报告,不静默挪动。 */
35
+ export declare function isGeometryOnPage(geometry: PdfAnnotationGeometry, viewport: AnnotationViewport): boolean;
@@ -0,0 +1,163 @@
1
+ /**
2
+ * 标注业务的数据流:调用方传入完整快照或按页加载器 → 控制器管理内存中的标注 → 每页 SVG 层绘制和交互
3
+ * → 控制器发送变更 → 调用方自行保存。阅读组件本身不持久化数据。
4
+ */
5
+ /** read 保留翻页手势并在点击标注时发送 annotation-click;select 用于选中、移动和编辑。 */
6
+ export type PdfAnnotationTool = 'read' | 'select' | 'rect' | 'line' | 'anchor';
7
+ /** PDF 用户空间中的点;不受外部 CSS 缩放、滚动和 DPR 影响。 */
8
+ export interface PdfAnnotationPoint {
9
+ x: number;
10
+ y: number;
11
+ }
12
+ /** 锚点记录一个 PDF 坐标;矩形记录两个对角点,直线记录两个端点。 */
13
+ export type PdfAnnotationGeometry = {
14
+ type: 'anchor';
15
+ point: PdfAnnotationPoint;
16
+ } | {
17
+ type: 'rect' | 'line';
18
+ start: PdfAnnotationPoint;
19
+ end: PdfAnnotationPoint;
20
+ };
21
+ /** 直线可选线型;矩形边框只允许实线、虚线或无边框。 */
22
+ export type PdfLineStyle = 'solid' | 'dashed' | 'wavy';
23
+ export type PdfRectBorderStyle = 'solid' | 'dashed' | 'none';
24
+ /** 绘制所需的最小标注数据;笔记标题、摘要和正文由调用方独立保存。 */
25
+ export interface PdfAnnotation {
26
+ /** 单条标注的稳定 ID,更新、删除和跨页定位都使用它。 */
27
+ id: string;
28
+ /** PDF 页码从 1 开始,不随单双栏布局变化。 */
29
+ page: number;
30
+ geometry: PdfAnnotationGeometry;
31
+ color: string;
32
+ /** 旧数据省略时按实线渲染;取值必须与 geometry.type 匹配,锚点不可设置。 */
33
+ strokeStyle?: PdfLineStyle | PdfRectBorderStyle;
34
+ }
35
+ /** 阅读模式点击已有标注时只返回 ID;详情查询和弹框展示由调用方负责。 */
36
+ export interface PdfAnnotationClickPayload {
37
+ id: string;
38
+ }
39
+ /** 可 JSON 序列化的快照;只需业务文档 ID 和标注列表。 */
40
+ export interface PdfAnnotationSnapshot {
41
+ /** 业务文档 ID,由调用方确保每份 PDF 使用正确的数据。 */
42
+ documentId: string;
43
+ /** 完整标注列表;调用方负责从数据库或本地存储读取并传入。 */
44
+ annotations: PdfAnnotation[];
45
+ }
46
+ /** 保存操作类型;撤销新增为 delete,撤销删除为 add,撤销修改仍为 update。 */
47
+ export type PdfAnnotationAction = 'add' | 'update' | 'delete';
48
+ /** 单条保存通知;不包含全量快照和修改前副本,标注数据只取 annotation;不含笔记正文。 */
49
+ export interface PdfAnnotationChange {
50
+ documentId: string;
51
+ /** 本次操作的确认标识,重试时保持不变;不要作为笔记字段持久化。 */
52
+ operationId: string;
53
+ action: PdfAnnotationAction;
54
+ /** 新增/修改为提交后的完整单条标注;删除为被删除的标注,可用其 id、page 定位。 */
55
+ annotation: PdfAnnotation;
56
+ }
57
+ /** 工具栏和 SVG 页面共同读取的状态;items 是内存中的当前值,并非已保存状态。 */
58
+ export interface PdfAnnotationState {
59
+ readonly tool: PdfAnnotationTool;
60
+ readonly color: string;
61
+ /** 下一条直线、矩形的默认样式;不修改已有标注。 */
62
+ readonly lineStyle: PdfLineStyle;
63
+ readonly rectBorderStyle: PdfRectBorderStyle;
64
+ readonly readOnly: boolean;
65
+ /** 完整快照模式在 hydrate 后为 true;按页模式创建后即为 true,未加载页仍需用 isPageLoaded 判断。 */
66
+ readonly ready: boolean;
67
+ readonly selectedId: string | null;
68
+ /** 当前尚未点击“保存”的新标注 ID;它只用于页面预览,不进入导出快照。 */
69
+ readonly draftId: string | null;
70
+ /** 本次草稿使用的绘制工具;弹框保存或取消后用于恢复连续标注。 */
71
+ readonly draftTool: 'rect' | 'line' | 'anchor' | null;
72
+ /** 快照模式为全部标注;按页模式仅包含当前缓存页,不能当作整份文档。 */
73
+ readonly items: readonly PdfAnnotation[];
74
+ readonly canUndo: boolean;
75
+ readonly canRedo: boolean;
76
+ /** 尚未由调用方确认保存成功的操作数。 */
77
+ readonly pendingCount: number;
78
+ }
79
+ /** 每个控制器对应一个文档会话;按页模式可调用宿主提供的 pageLoader,持久化仍由宿主负责。 */
80
+ export interface PdfAnnotationController {
81
+ readonly documentId: string;
82
+ /** true 时只持有已加载页,保存应使用 annotation-change 的增量数据。 */
83
+ readonly paged: boolean;
84
+ readonly state: PdfAnnotationState;
85
+ /**
86
+ * 初始化或回显完整数据;有未确认操作时拒绝覆盖。无历史标注也应传入空快照。
87
+ * @param snapshot 调用方从持久化存储读出的当前文档快照。
88
+ */
89
+ hydrate(snapshot: PdfAnnotationSnapshot): void;
90
+ /** 返回完整独立副本;按页模式不能导出整份文档,会抛错。 */
91
+ exportSnapshot(): PdfAnnotationSnapshot;
92
+ /** 当前页的标注。按页模式下,未加载页面返回空数组,须结合 isPageLoaded 判断。 */
93
+ getPageItems(page: number): readonly PdfAnnotation[];
94
+ /** 标注是否已加载;快照模式在 hydrate 后所有有效页均视为已加载。 */
95
+ isPageLoaded(page: number): boolean;
96
+ /** 按页模式请求当前阅读窗口。控制器自动取消离开的请求、限制并发并回收旧页缓存。 */
97
+ setActivePages(pages: readonly number[]): void;
98
+ /** 切换阅读、选择或绘制工具;切回阅读会取消选中。 */
99
+ setTool(tool: PdfAnnotationTool): void;
100
+ /** 设置后续新标注的颜色,不修改已存在标注。 */
101
+ setColor(color: string): void;
102
+ /** 设置后续新直线的线型;修改已有标注应使用 update。 */
103
+ setLineStyle(style: PdfLineStyle): void;
104
+ /** 设置后续新矩形的边框;修改已有标注应使用 update。 */
105
+ setRectBorderStyle(style: PdfRectBorderStyle): void;
106
+ /** 切换只读;只读时仍可选择、查看,但不能提交编辑。 */
107
+ setReadOnly(value: boolean): void;
108
+ /** 选择已有 ID 或传入 null 清除选择。 */
109
+ select(id: string | null): void;
110
+ /**
111
+ * 新增标注并生成 ID;SVG 页层在一次绘制完成后调用。
112
+ * @param value 页码、PDF 坐标、颜色及可选样式,不需要传 ID。
113
+ * @returns 供后续编辑和定位使用的标注 ID。
114
+ */
115
+ add(value: Omit<PdfAnnotation, 'id'>): string;
116
+ /** 页面绘制完成后创建临时标注;不会触发变更事件或进入待保存队列。 */
117
+ addDraft(value: Omit<PdfAnnotation, 'id'>): string;
118
+ /** 用户点击笔记弹框“保存”后提交草稿,并产生一次仅含绘制数据的新增变更。 */
119
+ commitDraft(id: string): void;
120
+ /** 用户取消新标注时静默移除草稿;重复调用不会报错。 */
121
+ discardDraft(id: string): void;
122
+ /**
123
+ * 原子替换颜色、形状或样式;不能修改 ID 和页码。
124
+ * @param id 目标标注 ID。
125
+ * @param patch 需要修改的字段,未提供的字段保留原值。
126
+ */
127
+ update(id: string, patch: Partial<Pick<PdfAnnotation, 'color' | 'geometry' | 'strokeStyle'>>): void;
128
+ /** 删除标注;实际持久化仍由调用方处理。 */
129
+ remove(id: string): void;
130
+ /** 撤销最近一次编辑;撤销本身也会发送一条待保存变更。 */
131
+ undo(): void;
132
+ /** 重做最近一次撤销;重做本身也会发送一条待保存变更。 */
133
+ redo(): void;
134
+ /**
135
+ * 只确认实际保存成功的操作;请求发出后新增的编辑仍留在待保存队列。
136
+ * @param operationIds 本次已经由调用方持久化成功的操作 ID。
137
+ */
138
+ acknowledge(operationIds: readonly string[]): void;
139
+ /** 按产生顺序返回待保存操作的副本;逐条保存并确认,失败时停止,供下次重试。 */
140
+ getPendingChanges(): PdfAnnotationChange[];
141
+ /**
142
+ * 订阅新增、修改、删除与撤销重做;初始化及保存确认不产生增量事件。
143
+ * @param listener 每次操作完成后收到独立副本的回调。
144
+ * @returns 取消订阅函数,阅读组件卸载或切换控制器时会调用。
145
+ */
146
+ subscribe(listener: (change: PdfAnnotationChange) => void): () => void;
147
+ /** 订阅分页标注请求异常;返回值用于组件卸载时解除订阅。 */
148
+ subscribePageError(listener: (error: unknown, pages: readonly number[]) => void): () => void;
149
+ }
150
+ export interface PdfAnnotationToolbarSlotProps {
151
+ state: PdfAnnotationState;
152
+ actions: PdfAnnotationController;
153
+ /** 页面准备、翻页和归位期间为 false。 */
154
+ canEdit: boolean;
155
+ }
156
+ export interface PdfAnnotationEditorSlotProps {
157
+ annotation: PdfAnnotation;
158
+ readOnly: boolean;
159
+ /** 外部保存笔记成功后调用,无需传正文/摘要;false 表示提交失败,应保留草稿。 */
160
+ save: () => boolean;
161
+ remove: () => void;
162
+ close: () => void;
163
+ }
@@ -0,0 +1,26 @@
1
+ import type { PdfAnnotationController, PdfAnnotationEditorSlotProps, PdfAnnotationToolbarSlotProps } from '../annotationTypes';
2
+ type __VLS_Props = {
3
+ controller: PdfAnnotationController;
4
+ showToolbar: boolean;
5
+ stable: boolean;
6
+ visiblePages: readonly number[];
7
+ };
8
+ type __VLS_Slots = {
9
+ toolbar?: (props: PdfAnnotationToolbarSlotProps) => unknown;
10
+ editor?: (props: PdfAnnotationEditorSlotProps) => unknown;
11
+ };
12
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ error: (error: unknown) => any;
14
+ focus: (id: string) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ onError?: ((error: unknown) => any) | undefined;
17
+ onFocus?: ((id: string) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -0,0 +1,29 @@
1
+ import type { PdfAnnotationClickPayload, PdfAnnotationController } from '../annotationTypes';
2
+ import type { AnnotationViewport } from '../annotationGeometry';
3
+ /**
4
+ * 每个 PDF 页面各有一层 SVG,与页面 Canvas 使用同一个可见区域。
5
+ * 控制器保存 PDF 原始坐标;这里绘制时投影到当前页,鼠标操作时再反投影回 PDF 坐标。
6
+ * 因此外部缩放、双栏排版和浏览器 DPR 不会改变标注的存储位置。
7
+ */
8
+ type __VLS_Props = {
9
+ controller: PdfAnnotationController;
10
+ page: number;
11
+ viewport: AnnotationViewport;
12
+ /** 页面已准备、当前可见且无翻页/归位时允许交互。 */
13
+ interactive: boolean;
14
+ /** 动画中保留进入动画前的静态标记,避免克隆与原页内容不一致。 */
15
+ frozen: boolean;
16
+ /** 程序导航即刻取消当前手势,无需等目标页准备完成。 */
17
+ revision: number;
18
+ };
19
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
+ select: (id: string) => any;
21
+ error: (error: unknown) => any;
22
+ view: (payload: PdfAnnotationClickPayload) => any;
23
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
24
+ onSelect?: ((id: string) => any) | undefined;
25
+ onError?: ((error: unknown) => any) | undefined;
26
+ onView?: ((payload: PdfAnnotationClickPayload) => any) | undefined;
27
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
28
+ declare const _default: typeof __VLS_export;
29
+ export default _default;
@@ -1,4 +1,5 @@
1
1
  import type { PDFDocumentProxy } from 'pdfjs-dist';
2
+ import type { AnnotationViewport } from '../annotationGeometry';
2
3
  /**
3
4
  * 单页 Canvas 的输入属性。正文和缩略图均复用此组件;实际渲染与资源释放交给 usePdfPageCanvas。
4
5
  */
@@ -12,7 +13,13 @@ type __VLS_Props = {
12
13
  /** Canvas 无障碍名称的前缀,最终会拼接一基页码;默认“PDF 页面”。 */
13
14
  ariaLabel?: string;
14
15
  };
15
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
+ /** 页内容插槽与 Canvas 共用 object-fit 内容坐标,正文标注使用;缩略图不创建标注。 */
17
+ type __VLS_Slots = {
18
+ default?: (props: {
19
+ viewport: AnnotationViewport;
20
+ }) => unknown;
21
+ };
22
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
23
  rendered: (payload: {
17
24
  page: number;
18
25
  width: number;
@@ -30,5 +37,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
30
37
  renderScale: number;
31
38
  ariaLabel: string;
32
39
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
33
41
  declare const _default: typeof __VLS_export;
34
42
  export default _default;
43
+ type __VLS_WithSlots<T, S> = T & {
44
+ new (): {
45
+ $slots: S;
46
+ };
47
+ };
@@ -12,11 +12,11 @@ type __VLS_Slots = {
12
12
  thumbnail?: (props: PdfThumbnailSlotProps) => unknown;
13
13
  };
14
14
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
- error: (error: unknown) => any;
16
15
  select: (page: number) => any;
16
+ error: (error: unknown) => any;
17
17
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
18
- onError?: ((error: unknown) => any) | undefined;
19
18
  onSelect?: ((page: number) => any) | undefined;
19
+ onError?: ((error: unknown) => any) | undefined;
20
20
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
21
21
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
22
22
  declare const _default: typeof __VLS_export;
@@ -1,10 +1,17 @@
1
1
  import type { PdfFlipAnimation, PdfFlipbookProps, PdfFlipbookState, ReaderMode } from '../types';
2
+ import type { PdfAnnotation, PdfAnnotationChange, PdfAnnotationClickPayload } from '../annotationTypes';
2
3
  export interface PageSize {
3
4
  width: number;
4
5
  height: number;
5
6
  }
6
7
  export type ResolvedFlipbookProps = Readonly<PdfFlipbookProps & Required<Pick<PdfFlipbookProps, 'initialPage' | 'height' | 'background' | 'workerSrc'>>>;
7
8
  export type FlipbookEvents = {
9
+ /** 每次只发送一条带 action 的保存通知,完整加载与按页加载使用相同结构。 */
10
+ 'annotation-change': [change: PdfAnnotationChange];
11
+ 'annotation-select': [annotation: PdfAnnotation | null];
12
+ /** 阅读模式点击已有标注;由调用方决定如何展示笔记。 */
13
+ 'annotation-click': [payload: PdfAnnotationClickPayload];
14
+ 'annotation-error': [error: unknown];
8
15
  loaded: [payload: {
9
16
  pages: number;
10
17
  }];
@@ -15,6 +15,7 @@ interface EngineEvents {
15
15
  canStartUserTurn: (forward: boolean, prepare?: boolean) => boolean;
16
16
  getLayoutMode: () => ReaderMode;
17
17
  isAnimationEnabled: () => boolean;
18
+ isInputEnabled?: () => boolean;
18
19
  onInstantUserTurn: (forward: boolean) => void;
19
20
  }
20
21
  /**
@@ -28,6 +29,7 @@ export declare function usePageFlip(flipbookElement: Ref<HTMLElement | undefined
28
29
  initialize: (pageSize: PageSize, pageCount: number, currentPage: number) => void;
29
30
  destroy: () => void;
30
31
  syncAnimationMode: () => void;
32
+ syncInputMode: () => void;
31
33
  /** 导航层翻页前调用;无参数,返回引擎实例是否存在。 */
32
34
  isReady: () => boolean;
33
35
  update: () => void;
@@ -1,3 +1,4 @@
1
+ import type { PdfAnnotationController } from '../annotationTypes';
1
2
  import type { PdfFlipbookExpose, ReaderMode } from '../types';
2
3
  import type { FlipbookEmit, ResolvedFlipbookProps } from './types';
3
4
  /**
@@ -8,6 +9,11 @@ import type { FlipbookEmit, ResolvedFlipbookProps } from './types';
8
9
  * @returns 模板所需 ref、事件处理方法和公开实例 API。
9
10
  */
10
11
  export declare function usePdfFlipbook(props: ResolvedFlipbookProps, emit: FlipbookEmit): {
12
+ annotationController: import("vue").ShallowRef<PdfAnnotationController | undefined, PdfAnnotationController | undefined>;
13
+ annotationSession: import("vue").Ref<number, number>;
14
+ annotationStable: import("vue").ComputedRef<boolean>;
15
+ annotationInteractionRevision: import("vue").Ref<number, number>;
16
+ onAnnotationTransition: (event: TransitionEvent) => void;
11
17
  viewport: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
12
18
  bookStage: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
13
19
  flipbookElement: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
@@ -1,3 +1,4 @@
1
+ import type { AnnotationViewport } from '../annotationGeometry';
1
2
  import type { PDFDocumentProxy } from 'pdfjs-dist';
2
3
  interface CanvasOptions {
3
4
  pdf: PDFDocumentProxy;
@@ -24,5 +25,6 @@ interface CanvasEvents {
24
25
  export declare function usePdfPageCanvas(props: Readonly<CanvasOptions>, events: CanvasEvents): {
25
26
  canvas: import("vue").Ref<HTMLCanvasElement | undefined, HTMLCanvasElement | undefined>;
26
27
  rendering: import("vue").Ref<boolean, boolean>;
28
+ pageViewport: import("vue").ShallowRef<AnnotationViewport | undefined, AnnotationViewport | undefined>;
27
29
  };
28
30
  export {};
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ import type { Plugin } from 'vue';
2
2
  import VuePdfFlipbook from './VuePdfFlipbook.vue';
3
3
  export type { PdfFlipAnimation, PdfFlipbookExpose, PdfFlipbookProps, PdfFlipbookState, PdfPageNavigationSlotProps, PdfThumbnailSlotProps, PdfThumbnailsSlotProps, PdfThumbnailItem, ReaderMode } from './types';
4
4
  export { VuePdfFlipbook };
5
+ export { usePdfAnnotations } from './usePdfAnnotations';
6
+ export type { PdfAnnotation, PdfAnnotationGeometry, PdfAnnotationPoint, PdfAnnotationClickPayload, PdfLineStyle, PdfRectBorderStyle, PdfAnnotationSnapshot, PdfAnnotationAction, PdfAnnotationChange, PdfAnnotationController, PdfAnnotationState, PdfAnnotationTool, PdfAnnotationToolbarSlotProps, PdfAnnotationEditorSlotProps } from './annotationTypes';
5
7
  export { default as PdfCanvasPage } from './components/PdfCanvasPage.vue';
6
8
  declare const plugin: Plugin;
7
9
  export default plugin;
@@ -1,4 +1,6 @@
1
1
  /** PDF.js 现代构建直接调用的浏览器 API;缺失时使用包含 polyfill 的兼容构建。 */
2
2
  export declare function needsLegacyPdfRuntime(): boolean;
3
+ /** 兼容构建会补齐主线程 API;固定首次检测结果,避免重载时切换到未补齐的现代 Worker。 */
4
+ export declare function shouldUseLegacyPdfRuntime(): boolean;
3
5
  /** 文档解析器和 Worker 从同一个构建导入,避免浏览器能力差异导致版本混用。 */
4
6
  export declare function loadPdfRuntime(): Promise<typeof import("./pdfLegacyRuntime")>;