kviewer 0.1.2 → 0.2.1
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/README.md +28 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +25 -4
- package/dist/runtime/annotation/engine/config.d.ts +1 -1
- package/dist/runtime/annotation/engine/config.js +2 -2
- package/dist/runtime/annotation/engine/painter.d.ts +1 -1
- package/dist/runtime/annotation/engine/utils.d.ts +2 -1
- package/dist/runtime/annotation/engine/utils.js +3 -7
- package/dist/runtime/annotation/pdf-export/export.js +63 -9
- package/dist/runtime/annotation/pdf-export/parse_circle.js +3 -2
- package/dist/runtime/annotation/pdf-export/parse_freetext.js +18 -8
- package/dist/runtime/annotation/pdf-export/parse_highlight.js +27 -29
- package/dist/runtime/annotation/pdf-export/parse_ink.js +5 -3
- package/dist/runtime/annotation/pdf-export/parse_line.js +5 -3
- package/dist/runtime/annotation/pdf-export/parse_polyline.js +6 -4
- package/dist/runtime/annotation/pdf-export/parse_square.js +3 -2
- package/dist/runtime/annotation/pdf-export/parse_stamp.js +16 -9
- package/dist/runtime/annotation/pdf-export/parse_strikeout.js +11 -10
- package/dist/runtime/annotation/pdf-export/parse_text.js +3 -1
- package/dist/runtime/annotation/pdf-export/parse_underline.js +11 -10
- package/dist/runtime/annotation/pdf-export/parse_utils.d.ts +11 -0
- package/dist/runtime/annotation/pdf-export/parse_utils.js +12 -0
- package/dist/runtime/annotation/pdf-import/decode.d.ts +2 -1
- package/dist/runtime/annotation/pdf-import/decode.js +6 -5
- package/dist/runtime/annotation/pdf-import/decode_circle.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_freetext.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_highlight.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_ink.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_line.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_square.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_stamp.js +1 -1
- package/dist/runtime/annotation/pdf-import/decode_text.js +1 -1
- package/dist/runtime/annotation/pdf-import/extract_stamp_appearance.d.ts +3 -2
- package/dist/runtime/annotation/pdf-import/extract_stamp_appearance.js +7 -15
- package/dist/runtime/annotation/pdf-import/transform.d.ts +85 -0
- package/dist/runtime/annotation/pdf-import/transform.js +81 -0
- package/dist/runtime/annotation/pdf-import/types.d.ts +5 -1
- package/dist/runtime/annotation/pdf-import/utils.d.ts +6 -5
- package/dist/runtime/annotation/pdf-import/utils.js +53 -38
- package/dist/runtime/components/AnnotationToolbar.vue +16 -0
- package/dist/runtime/components/FormFieldLayer.d.vue.ts +4 -7
- package/dist/runtime/components/FormFieldLayer.vue +5 -10
- package/dist/runtime/components/FormFieldLayer.vue.d.ts +4 -7
- package/dist/runtime/components/PdfPage.vue +1 -6
- package/dist/runtime/components/Viewer.d.vue.ts +12 -0
- package/dist/runtime/components/Viewer.vue +35 -2
- package/dist/runtime/components/Viewer.vue.d.ts +12 -0
- package/dist/runtime/components/form-fields/FormFieldWrapper.d.vue.ts +5 -6
- package/dist/runtime/components/form-fields/FormFieldWrapper.vue +8 -14
- package/dist/runtime/components/form-fields/FormFieldWrapper.vue.d.ts +5 -6
- package/dist/runtime/composables/usePageVirtualization.d.ts +17 -0
- package/dist/runtime/composables/usePageVirtualization.js +48 -2
- package/dist/runtime/embed/bridge-client.d.ts +9 -1
- package/dist/runtime/embed/bridge-client.js +13 -0
- package/dist/runtime/embed/bridge-host.d.ts +3 -0
- package/dist/runtime/embed/bridge-host.js +30 -8
- package/dist/runtime/embed/protocol.d.ts +21 -0
- package/package.json +1 -1
|
@@ -20,7 +20,8 @@ type EventHandler<E extends EventName> = (payload: EventPayloads[E]) => void;
|
|
|
20
20
|
* Parent-page client that drives a `<KViewer>` instance running inside
|
|
21
21
|
* an iframe. Wraps `postMessage` into a Promise-based RPC mirroring the
|
|
22
22
|
* viewer's exposed methods, and surfaces iframe-emitted events
|
|
23
|
-
* (`ready`, `formEditMode-changed`
|
|
23
|
+
* (`ready`, `formEditMode-changed`, `viewedPages-changed`, `all-pages-read`)
|
|
24
|
+
* via `on()`.
|
|
24
25
|
*/
|
|
25
26
|
export declare class KViewerEmbedClient {
|
|
26
27
|
private readonly iframe;
|
|
@@ -52,6 +53,13 @@ export declare class KViewerEmbedClient {
|
|
|
52
53
|
getFormEditMode(): Promise<boolean>;
|
|
53
54
|
setFormEditMode(enabled: boolean): Promise<void>;
|
|
54
55
|
toggleFormEditMode(): Promise<boolean>;
|
|
56
|
+
/** True once the user has viewed every page. For a push-style signal,
|
|
57
|
+
* subscribe via `on('all-pages-read', …)` / `on('viewedPages-changed', …)`. */
|
|
58
|
+
allPagesRead(): Promise<boolean>;
|
|
59
|
+
/** Page numbers viewed so far, ascending. */
|
|
60
|
+
getViewedPages(): Promise<number[]>;
|
|
61
|
+
/** Clear viewed-page tracking, e.g. to restart a signing session. */
|
|
62
|
+
resetViewedPages(): Promise<void>;
|
|
55
63
|
private call;
|
|
56
64
|
private handleMessage;
|
|
57
65
|
}
|
|
@@ -87,6 +87,19 @@ export class KViewerEmbedClient {
|
|
|
87
87
|
toggleFormEditMode() {
|
|
88
88
|
return this.call("toggleFormEditMode");
|
|
89
89
|
}
|
|
90
|
+
/** True once the user has viewed every page. For a push-style signal,
|
|
91
|
+
* subscribe via `on('all-pages-read', …)` / `on('viewedPages-changed', …)`. */
|
|
92
|
+
allPagesRead() {
|
|
93
|
+
return this.call("allPagesRead");
|
|
94
|
+
}
|
|
95
|
+
/** Page numbers viewed so far, ascending. */
|
|
96
|
+
getViewedPages() {
|
|
97
|
+
return this.call("getViewedPages");
|
|
98
|
+
}
|
|
99
|
+
/** Clear viewed-page tracking, e.g. to restart a signing session. */
|
|
100
|
+
resetViewedPages() {
|
|
101
|
+
return this.call("resetViewedPages");
|
|
102
|
+
}
|
|
90
103
|
// ── internals ──────────────────────────────────────────────────────────
|
|
91
104
|
call(method, ...args) {
|
|
92
105
|
if (this.disposed) {
|
|
@@ -26,6 +26,9 @@ export interface KViewerApi {
|
|
|
26
26
|
formEditMode: Ref<boolean>;
|
|
27
27
|
setFormEditMode: (enabled: boolean) => void;
|
|
28
28
|
toggleFormEditMode: () => boolean;
|
|
29
|
+
allPagesRead: () => boolean;
|
|
30
|
+
getViewedPages: () => number[];
|
|
31
|
+
resetViewedPages: () => void;
|
|
29
32
|
}
|
|
30
33
|
export interface KViewerEmbedBridgeOptions {
|
|
31
34
|
/**
|
|
@@ -75,6 +75,13 @@ export function useKViewerEmbedBridge(viewerRef, options) {
|
|
|
75
75
|
}
|
|
76
76
|
case "toggleFormEditMode":
|
|
77
77
|
return viewer.toggleFormEditMode();
|
|
78
|
+
case "allPagesRead":
|
|
79
|
+
return viewer.allPagesRead();
|
|
80
|
+
case "getViewedPages":
|
|
81
|
+
return viewer.getViewedPages();
|
|
82
|
+
case "resetViewedPages":
|
|
83
|
+
viewer.resetViewedPages();
|
|
84
|
+
return void 0;
|
|
78
85
|
default:
|
|
79
86
|
throw new Error(`Unknown KViewer embed method: ${req.method}`);
|
|
80
87
|
}
|
|
@@ -110,17 +117,32 @@ export function useKViewerEmbedBridge(viewerRef, options) {
|
|
|
110
117
|
target.postMessage(reply, event.origin === "" ? options.parentOrigin : event.origin);
|
|
111
118
|
}
|
|
112
119
|
win.addEventListener("message", handleMessage);
|
|
113
|
-
let
|
|
120
|
+
let stopViewerStateWatches = [];
|
|
114
121
|
const stopViewerWatch = watch(
|
|
115
122
|
viewerRef,
|
|
116
123
|
(viewer) => {
|
|
117
|
-
|
|
118
|
-
|
|
124
|
+
for (const stop of stopViewerStateWatches) stop();
|
|
125
|
+
stopViewerStateWatches = [];
|
|
119
126
|
if (!viewer) return;
|
|
120
127
|
postEvent("ready", { protocolVersion: KVIEWER_EMBED_PROTOCOL_VERSION });
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
stopViewerStateWatches.push(
|
|
129
|
+
watch(
|
|
130
|
+
viewer.formEditMode,
|
|
131
|
+
(enabled) => postEvent("formEditMode-changed", { enabled })
|
|
132
|
+
),
|
|
133
|
+
// Read-tracking. The getters touch the viewer's reactive viewed-pages
|
|
134
|
+
// state, so watch re-runs them whenever a page is viewed or tracking
|
|
135
|
+
// is reset.
|
|
136
|
+
watch(
|
|
137
|
+
() => viewer.allPagesRead(),
|
|
138
|
+
(read, prev) => {
|
|
139
|
+
if (read && !prev) postEvent("all-pages-read", {});
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
watch(
|
|
143
|
+
() => viewer.getViewedPages(),
|
|
144
|
+
(pages) => postEvent("viewedPages-changed", { pages, allRead: viewer.allPagesRead() })
|
|
145
|
+
)
|
|
124
146
|
);
|
|
125
147
|
},
|
|
126
148
|
{ immediate: true }
|
|
@@ -128,8 +150,8 @@ export function useKViewerEmbedBridge(viewerRef, options) {
|
|
|
128
150
|
function unmount() {
|
|
129
151
|
win.removeEventListener("message", handleMessage);
|
|
130
152
|
stopViewerWatch();
|
|
131
|
-
|
|
132
|
-
|
|
153
|
+
for (const stop of stopViewerStateWatches) stop();
|
|
154
|
+
stopViewerStateWatches = [];
|
|
133
155
|
}
|
|
134
156
|
onScopeDispose(unmount);
|
|
135
157
|
return { unmount };
|
|
@@ -59,6 +59,18 @@ export interface MethodSignatures {
|
|
|
59
59
|
args: [];
|
|
60
60
|
result: boolean;
|
|
61
61
|
};
|
|
62
|
+
allPagesRead: {
|
|
63
|
+
args: [];
|
|
64
|
+
result: boolean;
|
|
65
|
+
};
|
|
66
|
+
getViewedPages: {
|
|
67
|
+
args: [];
|
|
68
|
+
result: number[];
|
|
69
|
+
};
|
|
70
|
+
resetViewedPages: {
|
|
71
|
+
args: [];
|
|
72
|
+
result: undefined;
|
|
73
|
+
};
|
|
62
74
|
}
|
|
63
75
|
export type MethodName = keyof MethodSignatures;
|
|
64
76
|
export interface RequestMessage<M extends MethodName = MethodName> {
|
|
@@ -91,6 +103,15 @@ export interface EventPayloads {
|
|
|
91
103
|
'formEditMode-changed': {
|
|
92
104
|
enabled: boolean;
|
|
93
105
|
};
|
|
106
|
+
/** The set of viewed pages changed. `allRead` is true once every page has
|
|
107
|
+
* been viewed. */
|
|
108
|
+
'viewedPages-changed': {
|
|
109
|
+
pages: number[];
|
|
110
|
+
allRead: boolean;
|
|
111
|
+
};
|
|
112
|
+
/** Fires once when the final unseen page is viewed. Re-arms after
|
|
113
|
+
* `resetViewedPages()` or a new document. */
|
|
114
|
+
'all-pages-read': Record<string, never>;
|
|
94
115
|
}
|
|
95
116
|
export type EventName = keyof EventPayloads;
|
|
96
117
|
export interface EventMessage<E extends EventName = EventName> {
|