@libresign/pdf-elements 0.3.1 → 1.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.
- package/README.md +24 -1
- package/dist/components/DraggableElement.vue.d.ts +240 -0
- package/dist/components/PDFElements.vue.d.ts +552 -0
- package/dist/components/PDFPage.vue.d.ts +40 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.mjs +1293 -0
- package/dist/pdf-uHvE5neP.mjs +17593 -0
- package/dist/pdf.worker.min-DmO9Xdfo.mjs +4 -0
- package/dist/types.d.ts +30 -0
- package/dist/utils/asyncReader.d.ts +10 -0
- package/dist/utils/geometry.d.ts +5 -0
- package/dist/utils/measurements.d.ts +12 -0
- package/dist/utils/objectStore.d.ts +5 -0
- package/dist/utils/pageBounds.d.ts +5 -0
- package/dist/utils/zoom.d.ts +2 -0
- package/package.json +46 -21
- package/src/components/DraggableElement.vue +18 -15
- package/src/components/PDFElements.vue +135 -60
- package/src/components/PDFPage.vue +11 -7
- package/src/index.ts +18 -0
- package/src/types.ts +35 -0
- package/src/utils/asyncReader.ts +103 -0
- package/src/utils/{geometry.js → geometry.ts} +16 -2
- package/src/utils/{measurements.js → measurements.ts} +20 -1
- package/src/utils/{objectStore.js → objectStore.ts} +15 -4
- package/src/utils/{pageBounds.js → pageBounds.ts} +2 -2
- package/src/utils/{zoom.js → zoom.ts} +3 -1
- package/dist/demo.html +0 -1
- package/dist/pdf-elements.common.js +0 -31698
- package/dist/pdf-elements.common.js.map +0 -1
- package/dist/pdf-elements.css +0 -1
- package/dist/pdf-elements.umd.js +0 -31710
- package/dist/pdf-elements.umd.js.map +0 -1
- package/dist/pdf-elements.umd.min.js +0 -2
- package/dist/pdf-elements.umd.min.js.map +0 -1
- package/dist/pdf.worker.min.mjs +0 -22
- package/src/index.js +0 -17
- package/src/utils/asyncReader.js +0 -44
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface PDFElementObject {
|
|
2
|
+
id?: string;
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
type?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
icon?: string;
|
|
10
|
+
resizable?: boolean;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface PDFDocumentEntry {
|
|
14
|
+
name: string;
|
|
15
|
+
file: unknown;
|
|
16
|
+
pdfDoc: unknown;
|
|
17
|
+
numPages: number;
|
|
18
|
+
pages: Promise<unknown>[];
|
|
19
|
+
pageWidths: number[];
|
|
20
|
+
pagesScale: number[];
|
|
21
|
+
allObjects: PDFElementObject[][];
|
|
22
|
+
}
|
|
23
|
+
export interface PDFElementsPublicApi {
|
|
24
|
+
startAddingElement: (templateObject: PDFElementObject) => void;
|
|
25
|
+
addObjectToPage: (object: PDFElementObject, pageIndex?: number, docIndex?: number) => boolean;
|
|
26
|
+
getAllObjects: (docIndex?: number) => PDFElementObject[];
|
|
27
|
+
updateObject: (docIndex: number, objectId: string, payload: Partial<PDFElementObject>) => void;
|
|
28
|
+
deleteObject: (docIndex: number, objectId: string) => void;
|
|
29
|
+
duplicateObject: (docIndex: number, objectId: string) => void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PDFDocumentProxy } from 'pdfjs-dist';
|
|
2
|
+
export declare function setWorkerPath(path: string): void;
|
|
3
|
+
export declare function readAsArrayBuffer(file: Blob): Promise<ArrayBuffer>;
|
|
4
|
+
type PdfInput = string | ArrayBuffer | ArrayBufferView | Blob | {
|
|
5
|
+
url?: string;
|
|
6
|
+
data?: ArrayBuffer | Uint8Array;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
export declare function readAsPDF(file: PdfInput, options?: Record<string, unknown>): Promise<PDFDocumentProxy>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function clampPosition(x: number, y: number, width: number, height: number, pageWidth: number, pageHeight: number): {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function getVisibleArea(newX: number, newY: number, objWidth: number, objHeight: number, pageWidth: number, pageHeight: number): number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CanvasMeasurement {
|
|
2
|
+
canvasWidth: number;
|
|
3
|
+
canvasHeight: number;
|
|
4
|
+
}
|
|
5
|
+
export interface PageMeasurement {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
export interface PageMeasurementProvider {
|
|
10
|
+
getCanvasMeasurement: () => CanvasMeasurement;
|
|
11
|
+
}
|
|
12
|
+
export declare function getCachedMeasurement(cache: Record<string, PageMeasurement>, cacheKey: string, pageRef: PageMeasurementProvider, pagesScale: number): PageMeasurement;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PDFDocumentEntry, PDFElementObject } from '../types';
|
|
2
|
+
export declare function objectIdExistsInDoc(doc: PDFDocumentEntry | undefined, objectId: string): boolean;
|
|
3
|
+
export declare function findObjectPageIndex(doc: PDFDocumentEntry | undefined, objectId: string): number;
|
|
4
|
+
export declare function updateObjectInDoc(doc: PDFDocumentEntry | undefined, pageIndex: number, objectId: string, payload: Partial<PDFElementObject>): boolean;
|
|
5
|
+
export declare function removeObjectFromDoc(doc: PDFDocumentEntry | undefined, pageIndex: number, objectId: string): boolean;
|
package/package.json
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libresign/pdf-elements",
|
|
3
|
-
"description": "PDF viewer with draggable and resizable element overlays for Vue
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "PDF viewer with draggable and resizable element overlays for Vue 3",
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"author": "LibreCode <contact@librecode.coop>",
|
|
6
6
|
"private": false,
|
|
7
|
-
"main": "dist/
|
|
8
|
-
"module": "dist/
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"module": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
9
16
|
"repository": {
|
|
10
17
|
"type": "git",
|
|
11
18
|
"url": "https://github.com/LibreSign/pdf-elements"
|
|
@@ -21,40 +28,58 @@
|
|
|
21
28
|
"draggable",
|
|
22
29
|
"resizable",
|
|
23
30
|
"libresign",
|
|
24
|
-
"
|
|
31
|
+
"vue3"
|
|
25
32
|
],
|
|
26
33
|
"scripts": {
|
|
27
|
-
"
|
|
28
|
-
"build": "
|
|
29
|
-
"build:
|
|
30
|
-
"
|
|
31
|
-
"
|
|
34
|
+
"dev": "vite",
|
|
35
|
+
"build": "vite build",
|
|
36
|
+
"build:report": "vite build --mode report",
|
|
37
|
+
"build:demo": "vite build --mode demo",
|
|
38
|
+
"preview:demo": "vite preview --outDir dist-demo",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"lint": "eslint . --ext .vue,.ts,.js --max-warnings=0",
|
|
42
|
+
"lint:fix": "eslint . --ext .vue,.ts,.js --fix"
|
|
32
43
|
},
|
|
33
44
|
"dependencies": {
|
|
34
|
-
"pdfjs-dist": "^5.4.
|
|
35
|
-
"vue": "^
|
|
45
|
+
"pdfjs-dist": "^5.4.624",
|
|
46
|
+
"vue": "^3.5.28"
|
|
36
47
|
},
|
|
37
48
|
"devDependencies": {
|
|
38
|
-
"@babel/core": "^7.28.6",
|
|
39
|
-
"@babel/eslint-parser": "^7.28.6",
|
|
40
|
-
"@babel/plugin-transform-private-methods": "^7.28.6",
|
|
41
49
|
"@nextcloud/browserslist-config": "^3.1.2",
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"@
|
|
45
|
-
"
|
|
46
|
-
"eslint
|
|
50
|
+
"@eslint/js": "^9.39.3",
|
|
51
|
+
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
52
|
+
"@typescript-eslint/parser": "^8.56.0",
|
|
53
|
+
"@vitejs/plugin-vue": "^6.0.4",
|
|
54
|
+
"eslint": "^9.0.0",
|
|
55
|
+
"eslint-plugin-vue": "^10.8.0",
|
|
56
|
+
"eslint-plugin-vitest": "^0.5.4",
|
|
57
|
+
"globals": "^15.9.0",
|
|
58
|
+
"happy-dom": "^20.7.0",
|
|
47
59
|
"postcss": "^8.5.6",
|
|
48
|
-
"
|
|
60
|
+
"rollup-plugin-visualizer": "^7.0.0",
|
|
61
|
+
"typescript": "^5.9.3",
|
|
62
|
+
"vite": "^7.3.1",
|
|
63
|
+
"vite-plugin-dts": "^4.5.4",
|
|
64
|
+
"vitest": "^4.0.18",
|
|
65
|
+
"@vue/test-utils": "^2.4.6",
|
|
66
|
+
"vue-eslint-parser": "^10.4.0",
|
|
67
|
+
"vue-tsc": "^3.2.4"
|
|
49
68
|
},
|
|
50
69
|
"browserslist": [
|
|
51
70
|
"extends @nextcloud/browserslist-config"
|
|
52
71
|
],
|
|
72
|
+
"overrides": {
|
|
73
|
+
"eslint-plugin-vitest": {
|
|
74
|
+
"@typescript-eslint/utils": "^8.56.0"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
53
77
|
"files": [
|
|
54
78
|
"dist",
|
|
55
79
|
"src",
|
|
56
80
|
"COPYING",
|
|
57
81
|
"README.md"
|
|
58
82
|
],
|
|
83
|
+
"sideEffects": false,
|
|
59
84
|
"license": "AGPL-3.0-or-later"
|
|
60
85
|
}
|
|
@@ -54,12 +54,15 @@ SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
54
54
|
</div>
|
|
55
55
|
</template>
|
|
56
56
|
|
|
57
|
-
<script>
|
|
58
|
-
|
|
57
|
+
<script lang="ts">
|
|
58
|
+
import { defineComponent, type PropType, type CSSProperties } from 'vue'
|
|
59
|
+
import type { PDFElementObject } from '../types'
|
|
60
|
+
|
|
61
|
+
export default defineComponent({
|
|
59
62
|
name: 'DraggableElement',
|
|
60
63
|
props: {
|
|
61
64
|
object: {
|
|
62
|
-
type: Object
|
|
65
|
+
type: Object as PropType<PDFElementObject>,
|
|
63
66
|
required: true,
|
|
64
67
|
},
|
|
65
68
|
pagesScale: {
|
|
@@ -75,27 +78,27 @@ export default {
|
|
|
75
78
|
required: true,
|
|
76
79
|
},
|
|
77
80
|
onUpdate: {
|
|
78
|
-
type: Function
|
|
81
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
79
82
|
default: () => {},
|
|
80
83
|
},
|
|
81
84
|
onDelete: {
|
|
82
|
-
type: Function
|
|
85
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
83
86
|
default: () => {},
|
|
84
87
|
},
|
|
85
88
|
onDuplicate: {
|
|
86
|
-
type: Function
|
|
89
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
87
90
|
default: () => {},
|
|
88
91
|
},
|
|
89
92
|
onDragStart: {
|
|
90
|
-
type: Function
|
|
93
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
91
94
|
default: () => {},
|
|
92
95
|
},
|
|
93
96
|
onDragMove: {
|
|
94
|
-
type: Function
|
|
97
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
95
98
|
default: () => {},
|
|
96
99
|
},
|
|
97
100
|
onDragEnd: {
|
|
98
|
-
type: Function
|
|
101
|
+
type: Function as PropType<(...args: any[]) => void>,
|
|
99
102
|
default: () => {},
|
|
100
103
|
},
|
|
101
104
|
isBeingDraggedGlobally: {
|
|
@@ -103,7 +106,7 @@ export default {
|
|
|
103
106
|
default: false,
|
|
104
107
|
},
|
|
105
108
|
draggingClientPos: {
|
|
106
|
-
type: Object
|
|
109
|
+
type: Object as PropType<{ x: number; y: number }>,
|
|
107
110
|
default: () => ({ x: 0, y: 0 }),
|
|
108
111
|
},
|
|
109
112
|
currentDocIndex: {
|
|
@@ -135,7 +138,7 @@ export default {
|
|
|
135
138
|
default: false,
|
|
136
139
|
},
|
|
137
140
|
ignoreClickOutsideSelectors: {
|
|
138
|
-
type: Array
|
|
141
|
+
type: Array as PropType<string[]>,
|
|
139
142
|
default: () => [],
|
|
140
143
|
},
|
|
141
144
|
},
|
|
@@ -188,7 +191,7 @@ export default {
|
|
|
188
191
|
width: `${currentWidth * scale}px`,
|
|
189
192
|
height: `${currentHeight * scale}px`,
|
|
190
193
|
pointerEvents: this.readOnly ? 'none' : 'auto',
|
|
191
|
-
}
|
|
194
|
+
} as CSSProperties
|
|
192
195
|
},
|
|
193
196
|
toolbarStyle() {
|
|
194
197
|
const scale = this.pagesScale || 1
|
|
@@ -209,7 +212,7 @@ export default {
|
|
|
209
212
|
left: `${(x + width / 2) * scale}px`,
|
|
210
213
|
top: `${top * scale}px`,
|
|
211
214
|
transform: 'translateX(-50%)',
|
|
212
|
-
}
|
|
215
|
+
} as CSSProperties
|
|
213
216
|
},
|
|
214
217
|
dragElementStyle() {
|
|
215
218
|
if (!this.isBeingDraggedGlobally || !this.draggingClientPos) {
|
|
@@ -218,7 +221,7 @@ export default {
|
|
|
218
221
|
return {
|
|
219
222
|
opacity: 0,
|
|
220
223
|
pointerEvents: 'none',
|
|
221
|
-
}
|
|
224
|
+
} as CSSProperties
|
|
222
225
|
},
|
|
223
226
|
},
|
|
224
227
|
mounted() {
|
|
@@ -476,7 +479,7 @@ export default {
|
|
|
476
479
|
this.currentPageRect = null
|
|
477
480
|
},
|
|
478
481
|
},
|
|
479
|
-
}
|
|
482
|
+
})
|
|
480
483
|
</script>
|
|
481
484
|
|
|
482
485
|
<style scoped>
|