@libresign/pdf-elements 0.2.2 → 0.2.4
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 +1 -0
- package/dist/pdf-elements.common.js +133 -176
- package/dist/pdf-elements.common.js.map +1 -1
- package/dist/pdf-elements.css +1 -1
- package/dist/pdf-elements.umd.js +133 -176
- package/dist/pdf-elements.umd.js.map +1 -1
- package/dist/pdf-elements.umd.min.js +2 -2
- package/dist/pdf-elements.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DraggableElement.vue +53 -20
- package/src/components/PDFElements.vue +85 -45
package/README.md
CHANGED
|
@@ -24,6 +24,7 @@ A Vue 2 component for rendering PDFs with draggable and resizable element overla
|
|
|
24
24
|
| `hideSelectionUI` | Boolean | `false` | Hide selection handles and actions UI |
|
|
25
25
|
| `showSelectionHandles` | Boolean | `true` | Show resize/move handles on selected elements |
|
|
26
26
|
| `showElementActions` | Boolean | `true` | Show action buttons on selected elements |
|
|
27
|
+
| `readOnly` | Boolean | `false` | Disable drag, resize, and actions for elements |
|
|
27
28
|
| `pageCountFormat` | String | `'{currentPage} of {totalPages}'` | Format string for page counter |
|
|
28
29
|
| `autoFitZoom` | Boolean | `false` | Automatically adjust zoom to fit viewport on window resize |
|
|
29
30
|
|
|
@@ -29166,7 +29166,7 @@ globalThis.pdfjsLib = {
|
|
|
29166
29166
|
//# sourceMappingURL=pdf.mjs.map
|
|
29167
29167
|
;// ./node_modules/pdfjs-dist/build/pdf.worker.min.mjs
|
|
29168
29168
|
const pdf_worker_min_namespaceObject = __webpack_require__.p + "pdf.worker.min.mjs";
|
|
29169
|
-
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=template&id=
|
|
29169
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=template&id=1815c763&scoped=true
|
|
29170
29170
|
var render = function render() {
|
|
29171
29171
|
var _vm = this,
|
|
29172
29172
|
_c = _vm._self._c;
|
|
@@ -29177,11 +29177,7 @@ var render = function render() {
|
|
|
29177
29177
|
height: _vm.height
|
|
29178
29178
|
}
|
|
29179
29179
|
}, [_vm.pdfDocuments.length ? _c('div', {
|
|
29180
|
-
staticClass: "pages-container"
|
|
29181
|
-
style: {
|
|
29182
|
-
transform: `scale(${_vm.visualScale / _vm.scale})`,
|
|
29183
|
-
transformOrigin: 'top center'
|
|
29184
|
-
}
|
|
29180
|
+
staticClass: "pages-container"
|
|
29185
29181
|
}, _vm._l(_vm.pdfDocuments, function (pdfDoc, docIndex) {
|
|
29186
29182
|
return _c('div', {
|
|
29187
29183
|
key: docIndex
|
|
@@ -29217,7 +29213,11 @@ var render = function render() {
|
|
|
29217
29213
|
}
|
|
29218
29214
|
}
|
|
29219
29215
|
}), _c('div', {
|
|
29220
|
-
staticClass: "overlay"
|
|
29216
|
+
staticClass: "overlay",
|
|
29217
|
+
on: {
|
|
29218
|
+
"mousemove": _vm.handleMouseMove,
|
|
29219
|
+
"touchmove": _vm.handleMouseMove
|
|
29220
|
+
}
|
|
29221
29221
|
}, [_vm.isAddingMode && _vm.previewPageDocIndex === docIndex && _vm.previewPageIndex === pIndex && _vm.previewElement && _vm.previewVisible ? _c('div', {
|
|
29222
29222
|
staticClass: "preview-element",
|
|
29223
29223
|
style: {
|
|
@@ -29226,7 +29226,12 @@ var render = function render() {
|
|
|
29226
29226
|
width: `${_vm.previewElement.width * _vm.previewScale.x}px`,
|
|
29227
29227
|
height: `${_vm.previewElement.height * _vm.previewScale.y}px`
|
|
29228
29228
|
}
|
|
29229
|
-
}, [_vm._t(
|
|
29229
|
+
}, [_vm._t(_vm.previewElement.type ? `element-${_vm.previewElement.type}` : 'custom', function () {
|
|
29230
|
+
return [_vm._t("custom", null, {
|
|
29231
|
+
"object": _vm.previewElement,
|
|
29232
|
+
"isSelected": false
|
|
29233
|
+
})];
|
|
29234
|
+
}, {
|
|
29230
29235
|
"object": _vm.previewElement,
|
|
29231
29236
|
"isSelected": false
|
|
29232
29237
|
})], 2) : _vm._e(), _vm._l(pdfDoc.allObjects[pIndex], function (object) {
|
|
@@ -29236,9 +29241,10 @@ var render = function render() {
|
|
|
29236
29241
|
refInFor: true,
|
|
29237
29242
|
attrs: {
|
|
29238
29243
|
"object": object,
|
|
29239
|
-
"pages-scale": _vm.
|
|
29244
|
+
"pages-scale": _vm.getDisplayedPageScale(docIndex, pIndex),
|
|
29240
29245
|
"page-width": _vm.getPageWidth(docIndex, pIndex),
|
|
29241
29246
|
"page-height": _vm.getPageHeight(docIndex, pIndex),
|
|
29247
|
+
"read-only": _vm.readOnly,
|
|
29242
29248
|
"on-update": payload => _vm.updateObject(docIndex, object.id, payload),
|
|
29243
29249
|
"on-delete": () => _vm.deleteObject(docIndex, object.id),
|
|
29244
29250
|
"on-drag-start": (mouseX, mouseY, pointerOffset, dragShift) => _vm.startDraggingElement(docIndex, pIndex, object, mouseX, mouseY, pointerOffset, dragShift),
|
|
@@ -29318,112 +29324,6 @@ var es_iterator_flat_map = __webpack_require__(531);
|
|
|
29318
29324
|
var es_iterator_for_each = __webpack_require__(7588);
|
|
29319
29325
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.map.js
|
|
29320
29326
|
var es_iterator_map = __webpack_require__(1701);
|
|
29321
|
-
;// ./node_modules/debounce/index.js
|
|
29322
|
-
function debounce(function_, wait = 100, options = {}) {
|
|
29323
|
-
if (typeof function_ !== 'function') {
|
|
29324
|
-
throw new TypeError(`Expected the first parameter to be a function, got \`${typeof function_}\`.`);
|
|
29325
|
-
}
|
|
29326
|
-
|
|
29327
|
-
if (wait < 0) {
|
|
29328
|
-
throw new RangeError('`wait` must not be negative.');
|
|
29329
|
-
}
|
|
29330
|
-
|
|
29331
|
-
if (typeof options === 'boolean') {
|
|
29332
|
-
throw new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');
|
|
29333
|
-
}
|
|
29334
|
-
|
|
29335
|
-
const {immediate} = options;
|
|
29336
|
-
|
|
29337
|
-
let storedContext;
|
|
29338
|
-
let storedArguments;
|
|
29339
|
-
let timeoutId;
|
|
29340
|
-
let timestamp;
|
|
29341
|
-
let result;
|
|
29342
|
-
|
|
29343
|
-
function run() {
|
|
29344
|
-
const callContext = storedContext;
|
|
29345
|
-
const callArguments = storedArguments;
|
|
29346
|
-
storedContext = undefined;
|
|
29347
|
-
storedArguments = undefined;
|
|
29348
|
-
result = function_.apply(callContext, callArguments);
|
|
29349
|
-
return result;
|
|
29350
|
-
}
|
|
29351
|
-
|
|
29352
|
-
function later() {
|
|
29353
|
-
const last = Date.now() - timestamp;
|
|
29354
|
-
|
|
29355
|
-
if (last < wait && last >= 0) {
|
|
29356
|
-
timeoutId = setTimeout(later, wait - last);
|
|
29357
|
-
} else {
|
|
29358
|
-
timeoutId = undefined;
|
|
29359
|
-
|
|
29360
|
-
if (!immediate) {
|
|
29361
|
-
result = run();
|
|
29362
|
-
}
|
|
29363
|
-
}
|
|
29364
|
-
}
|
|
29365
|
-
|
|
29366
|
-
const debounced = function (...arguments_) {
|
|
29367
|
-
if (
|
|
29368
|
-
storedContext
|
|
29369
|
-
&& this !== storedContext
|
|
29370
|
-
&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)
|
|
29371
|
-
) {
|
|
29372
|
-
throw new Error('Debounced method called with different contexts of the same prototype.');
|
|
29373
|
-
}
|
|
29374
|
-
|
|
29375
|
-
storedContext = this; // eslint-disable-line unicorn/no-this-assignment
|
|
29376
|
-
storedArguments = arguments_;
|
|
29377
|
-
timestamp = Date.now();
|
|
29378
|
-
|
|
29379
|
-
const callNow = immediate && !timeoutId;
|
|
29380
|
-
|
|
29381
|
-
if (!timeoutId) {
|
|
29382
|
-
timeoutId = setTimeout(later, wait);
|
|
29383
|
-
}
|
|
29384
|
-
|
|
29385
|
-
if (callNow) {
|
|
29386
|
-
result = run();
|
|
29387
|
-
return result;
|
|
29388
|
-
}
|
|
29389
|
-
|
|
29390
|
-
return undefined;
|
|
29391
|
-
};
|
|
29392
|
-
|
|
29393
|
-
Object.defineProperty(debounced, 'isPending', {
|
|
29394
|
-
get() {
|
|
29395
|
-
return timeoutId !== undefined;
|
|
29396
|
-
},
|
|
29397
|
-
});
|
|
29398
|
-
|
|
29399
|
-
debounced.clear = () => {
|
|
29400
|
-
if (!timeoutId) {
|
|
29401
|
-
return;
|
|
29402
|
-
}
|
|
29403
|
-
|
|
29404
|
-
clearTimeout(timeoutId);
|
|
29405
|
-
timeoutId = undefined;
|
|
29406
|
-
storedContext = undefined;
|
|
29407
|
-
storedArguments = undefined;
|
|
29408
|
-
};
|
|
29409
|
-
|
|
29410
|
-
debounced.flush = () => {
|
|
29411
|
-
if (!timeoutId) {
|
|
29412
|
-
return;
|
|
29413
|
-
}
|
|
29414
|
-
|
|
29415
|
-
debounced.trigger();
|
|
29416
|
-
};
|
|
29417
|
-
|
|
29418
|
-
debounced.trigger = () => {
|
|
29419
|
-
result = run();
|
|
29420
|
-
|
|
29421
|
-
debounced.clear();
|
|
29422
|
-
};
|
|
29423
|
-
|
|
29424
|
-
return debounced;
|
|
29425
|
-
}
|
|
29426
|
-
|
|
29427
29327
|
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFPage.vue?vue&type=template&id=2c9e224a&scoped=true
|
|
29428
29328
|
var PDFPagevue_type_template_id_2c9e224a_scoped_true_render = function render() {
|
|
29429
29329
|
var _vm = this,
|
|
@@ -29631,8 +29531,8 @@ var component = normalizeComponent(
|
|
|
29631
29531
|
)
|
|
29632
29532
|
|
|
29633
29533
|
/* harmony default export */ const PDFPage = (component.exports);
|
|
29634
|
-
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=template&id=
|
|
29635
|
-
var
|
|
29534
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=template&id=17037ade&scoped=true
|
|
29535
|
+
var DraggableElementvue_type_template_id_17037ade_scoped_true_render = function render() {
|
|
29636
29536
|
var _vm = this,
|
|
29637
29537
|
_c = _vm._self._c;
|
|
29638
29538
|
return _c('div', {
|
|
@@ -29712,7 +29612,7 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_render = function
|
|
|
29712
29612
|
});
|
|
29713
29613
|
}) : _vm._e()], 2)]);
|
|
29714
29614
|
};
|
|
29715
|
-
var
|
|
29615
|
+
var DraggableElementvue_type_template_id_17037ade_scoped_true_staticRenderFns = [];
|
|
29716
29616
|
|
|
29717
29617
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=script&lang=js
|
|
29718
29618
|
/* harmony default export */ const DraggableElementvue_type_script_lang_js = ({
|
|
@@ -29788,6 +29688,10 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29788
29688
|
showDefaultActions: {
|
|
29789
29689
|
type: Boolean,
|
|
29790
29690
|
default: true
|
|
29691
|
+
},
|
|
29692
|
+
readOnly: {
|
|
29693
|
+
type: Boolean,
|
|
29694
|
+
default: false
|
|
29791
29695
|
}
|
|
29792
29696
|
},
|
|
29793
29697
|
data() {
|
|
@@ -29824,25 +29728,41 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29824
29728
|
},
|
|
29825
29729
|
elementStyle() {
|
|
29826
29730
|
const scale = this.pagesScale || 1;
|
|
29827
|
-
const
|
|
29828
|
-
const
|
|
29829
|
-
const
|
|
29830
|
-
const
|
|
29731
|
+
const isDragging = this.mode === 'drag';
|
|
29732
|
+
const isResizing = this.mode === 'resize';
|
|
29733
|
+
const offsetX = isDragging ? this.offsetX : 0;
|
|
29734
|
+
const offsetY = isDragging ? this.offsetY : 0;
|
|
29735
|
+
const resizeOffsetX = isResizing ? this.resizeOffsetX : 0;
|
|
29736
|
+
const resizeOffsetY = isResizing ? this.resizeOffsetY : 0;
|
|
29737
|
+
const resizeOffsetW = isResizing ? this.resizeOffsetW : 0;
|
|
29738
|
+
const resizeOffsetH = isResizing ? this.resizeOffsetH : 0;
|
|
29739
|
+
const currentX = this.object.x + offsetX + resizeOffsetX;
|
|
29740
|
+
const currentY = this.object.y + offsetY + resizeOffsetY;
|
|
29741
|
+
const currentWidth = this.object.width + resizeOffsetW;
|
|
29742
|
+
const currentHeight = this.object.height + resizeOffsetH;
|
|
29831
29743
|
return {
|
|
29832
29744
|
left: `${currentX * scale}px`,
|
|
29833
29745
|
top: `${currentY * scale}px`,
|
|
29834
29746
|
width: `${currentWidth * scale}px`,
|
|
29835
|
-
height: `${currentHeight * scale}px
|
|
29747
|
+
height: `${currentHeight * scale}px`,
|
|
29748
|
+
pointerEvents: this.readOnly ? 'none' : 'auto'
|
|
29836
29749
|
};
|
|
29837
29750
|
},
|
|
29838
29751
|
toolbarStyle() {
|
|
29839
29752
|
const scale = this.pagesScale || 1;
|
|
29840
|
-
const
|
|
29841
|
-
const
|
|
29842
|
-
const
|
|
29753
|
+
const isDragging = this.mode === 'drag';
|
|
29754
|
+
const isResizing = this.mode === 'resize';
|
|
29755
|
+
const offsetX = isDragging ? this.offsetX : 0;
|
|
29756
|
+
const offsetY = isDragging ? this.offsetY : 0;
|
|
29757
|
+
const resizeOffsetX = isResizing ? this.resizeOffsetX : 0;
|
|
29758
|
+
const resizeOffsetY = isResizing ? this.resizeOffsetY : 0;
|
|
29759
|
+
const resizeOffsetW = isResizing ? this.resizeOffsetW : 0;
|
|
29760
|
+
const x = this.object.x + offsetX + resizeOffsetX;
|
|
29761
|
+
const y = this.object.y + offsetY + resizeOffsetY;
|
|
29762
|
+
const width = this.object.width + resizeOffsetW;
|
|
29843
29763
|
return {
|
|
29844
29764
|
left: `${(x + width / 2) * scale}px`,
|
|
29845
|
-
top: `${(y -
|
|
29765
|
+
top: `${(y - 60) * scale}px`,
|
|
29846
29766
|
transform: 'translateX(-50%)'
|
|
29847
29767
|
};
|
|
29848
29768
|
},
|
|
@@ -29874,6 +29794,9 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29874
29794
|
},
|
|
29875
29795
|
methods: {
|
|
29876
29796
|
handleElementClick(event) {
|
|
29797
|
+
if (this.readOnly) {
|
|
29798
|
+
return;
|
|
29799
|
+
}
|
|
29877
29800
|
if (event.target.closest('.delete-handle') || event.target.closest('[data-stop-drag]') || event.target.closest('.actions-toolbar')) {
|
|
29878
29801
|
return;
|
|
29879
29802
|
}
|
|
@@ -29891,6 +29814,7 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29891
29814
|
this.startResize(direction, event);
|
|
29892
29815
|
},
|
|
29893
29816
|
startDrag(event) {
|
|
29817
|
+
if (this.readOnly) return;
|
|
29894
29818
|
if (event.target.classList.contains('delete')) return;
|
|
29895
29819
|
if (event.target.classList.contains('resize-handle')) return;
|
|
29896
29820
|
this.mode = 'drag';
|
|
@@ -29927,6 +29851,7 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29927
29851
|
window.addEventListener('touchend', this.boundStopInteraction);
|
|
29928
29852
|
},
|
|
29929
29853
|
startResize(direction, event) {
|
|
29854
|
+
if (this.readOnly) return;
|
|
29930
29855
|
this.mode = 'resize';
|
|
29931
29856
|
this.direction = direction;
|
|
29932
29857
|
this.startX = event.type.includes('touch') ? event.touches[0].clientX : event.clientX;
|
|
@@ -29980,7 +29905,7 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
29980
29905
|
this.rafId = null;
|
|
29981
29906
|
return;
|
|
29982
29907
|
}
|
|
29983
|
-
const minSize = 16;
|
|
29908
|
+
const minSize = 16 / (this.pagesScale || 1);
|
|
29984
29909
|
let newWidth = this.startWidth;
|
|
29985
29910
|
let newHeight = this.startHeight;
|
|
29986
29911
|
let newLeft = this.startLeft;
|
|
@@ -30094,10 +30019,10 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
30094
30019
|
});
|
|
30095
30020
|
;// ./src/components/DraggableElement.vue?vue&type=script&lang=js
|
|
30096
30021
|
/* harmony default export */ const components_DraggableElementvue_type_script_lang_js = (DraggableElementvue_type_script_lang_js);
|
|
30097
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=style&index=0&id=
|
|
30022
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=style&index=0&id=17037ade&prod&scoped=true&lang=css
|
|
30098
30023
|
// extracted by mini-css-extract-plugin
|
|
30099
30024
|
|
|
30100
|
-
;// ./src/components/DraggableElement.vue?vue&type=style&index=0&id=
|
|
30025
|
+
;// ./src/components/DraggableElement.vue?vue&type=style&index=0&id=17037ade&prod&scoped=true&lang=css
|
|
30101
30026
|
|
|
30102
30027
|
;// ./src/components/DraggableElement.vue
|
|
30103
30028
|
|
|
@@ -30110,11 +30035,11 @@ var DraggableElementvue_type_template_id_55db89ce_scoped_true_staticRenderFns =
|
|
|
30110
30035
|
|
|
30111
30036
|
var DraggableElement_component = normalizeComponent(
|
|
30112
30037
|
components_DraggableElementvue_type_script_lang_js,
|
|
30113
|
-
|
|
30114
|
-
|
|
30038
|
+
DraggableElementvue_type_template_id_17037ade_scoped_true_render,
|
|
30039
|
+
DraggableElementvue_type_template_id_17037ade_scoped_true_staticRenderFns,
|
|
30115
30040
|
false,
|
|
30116
30041
|
null,
|
|
30117
|
-
"
|
|
30042
|
+
"17037ade",
|
|
30118
30043
|
null
|
|
30119
30044
|
|
|
30120
30045
|
)
|
|
@@ -30152,7 +30077,6 @@ function readAsPDF(file) {
|
|
|
30152
30077
|
|
|
30153
30078
|
|
|
30154
30079
|
|
|
30155
|
-
|
|
30156
30080
|
/* harmony default export */ const PDFElementsvue_type_script_lang_js = ({
|
|
30157
30081
|
name: 'PDFElements',
|
|
30158
30082
|
components: {
|
|
@@ -30196,6 +30120,10 @@ function readAsPDF(file) {
|
|
|
30196
30120
|
type: Boolean,
|
|
30197
30121
|
default: true
|
|
30198
30122
|
},
|
|
30123
|
+
readOnly: {
|
|
30124
|
+
type: Boolean,
|
|
30125
|
+
default: false
|
|
30126
|
+
},
|
|
30199
30127
|
pageCountFormat: {
|
|
30200
30128
|
type: String,
|
|
30201
30129
|
default: '{currentPage} of {totalPages}'
|
|
@@ -30249,15 +30177,15 @@ function readAsPDF(file) {
|
|
|
30249
30177
|
viewportRafId: 0,
|
|
30250
30178
|
objectIndexCache: {},
|
|
30251
30179
|
zoomRafId: null,
|
|
30180
|
+
wheelZoomRafId: null,
|
|
30252
30181
|
boundHandleWheel: null,
|
|
30253
|
-
debouncedApplyZoom: null,
|
|
30254
30182
|
visualScale: this.initialScale,
|
|
30255
|
-
|
|
30183
|
+
autoFitApplied: false,
|
|
30184
|
+
lastContainerWidth: 0
|
|
30256
30185
|
};
|
|
30257
30186
|
},
|
|
30258
30187
|
mounted() {
|
|
30259
30188
|
this.boundHandleWheel = this.handleWheel.bind(this);
|
|
30260
|
-
this.debouncedApplyZoom = debounce(this.commitZoom, 150);
|
|
30261
30189
|
this.init();
|
|
30262
30190
|
document.addEventListener('mousemove', this.handleMouseMove);
|
|
30263
30191
|
document.addEventListener('touchmove', this.handleMouseMove, {
|
|
@@ -30276,23 +30204,15 @@ function readAsPDF(file) {
|
|
|
30276
30204
|
this.$el?.addEventListener('wheel', this.boundHandleWheel, {
|
|
30277
30205
|
passive: false
|
|
30278
30206
|
});
|
|
30279
|
-
if (this.autoFitZoom) {
|
|
30280
|
-
window.addEventListener('resize', this.adjustZoomToFit);
|
|
30281
|
-
if (typeof ResizeObserver !== 'undefined') {
|
|
30282
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
30283
|
-
this.scheduleAutoFitZoom();
|
|
30284
|
-
});
|
|
30285
|
-
if (this.$el) {
|
|
30286
|
-
this.resizeObserver.observe(this.$el);
|
|
30287
|
-
}
|
|
30288
|
-
}
|
|
30289
|
-
}
|
|
30290
30207
|
},
|
|
30291
30208
|
beforeUnmount() {
|
|
30292
30209
|
if (this.zoomRafId) {
|
|
30293
30210
|
cancelAnimationFrame(this.zoomRafId);
|
|
30294
30211
|
}
|
|
30295
|
-
this.
|
|
30212
|
+
if (this.wheelZoomRafId) {
|
|
30213
|
+
cancelAnimationFrame(this.wheelZoomRafId);
|
|
30214
|
+
this.wheelZoomRafId = null;
|
|
30215
|
+
}
|
|
30296
30216
|
if (this.boundHandleWheel) {
|
|
30297
30217
|
this.$el?.removeEventListener('wheel', this.boundHandleWheel);
|
|
30298
30218
|
}
|
|
@@ -30304,13 +30224,6 @@ function readAsPDF(file) {
|
|
|
30304
30224
|
window.removeEventListener('scroll', this.onViewportScroll);
|
|
30305
30225
|
window.removeEventListener('resize', this.onViewportScroll);
|
|
30306
30226
|
this.$el?.removeEventListener('scroll', this.onViewportScroll);
|
|
30307
|
-
if (this.autoFitZoom) {
|
|
30308
|
-
window.removeEventListener('resize', this.adjustZoomToFit);
|
|
30309
|
-
if (this.resizeObserver) {
|
|
30310
|
-
this.resizeObserver.disconnect();
|
|
30311
|
-
this.resizeObserver = null;
|
|
30312
|
-
}
|
|
30313
|
-
}
|
|
30314
30227
|
if (this.viewportRafId) {
|
|
30315
30228
|
window.cancelAnimationFrame(this.viewportRafId);
|
|
30316
30229
|
this.viewportRafId = 0;
|
|
@@ -30320,6 +30233,7 @@ function readAsPDF(file) {
|
|
|
30320
30233
|
async init() {
|
|
30321
30234
|
if (!this.initFiles || this.initFiles.length === 0) return;
|
|
30322
30235
|
const docs = [];
|
|
30236
|
+
this.autoFitApplied = false;
|
|
30323
30237
|
for (let i = 0; i < this.initFiles.length; i++) {
|
|
30324
30238
|
const file = this.initFiles[i];
|
|
30325
30239
|
const name = this.initFileNames[i] || `document-${i + 1}.pdf`;
|
|
@@ -30457,23 +30371,34 @@ function readAsPDF(file) {
|
|
|
30457
30371
|
this.cachePageBounds();
|
|
30458
30372
|
},
|
|
30459
30373
|
cachePageBounds() {
|
|
30460
|
-
|
|
30374
|
+
const nextRects = {};
|
|
30461
30375
|
for (let docIdx = 0; docIdx < this.pdfDocuments.length; docIdx++) {
|
|
30462
30376
|
for (let pageIdx = 0; pageIdx < this.pdfDocuments[docIdx].pages.length; pageIdx++) {
|
|
30463
30377
|
const canvas = this.getPageCanvasElement(docIdx, pageIdx);
|
|
30464
30378
|
if (!canvas) continue;
|
|
30465
30379
|
const rect = canvas.getBoundingClientRect();
|
|
30466
|
-
|
|
30380
|
+
nextRects[`${docIdx}-${pageIdx}`] = {
|
|
30467
30381
|
docIndex: docIdx,
|
|
30468
30382
|
pageIndex: pageIdx,
|
|
30469
30383
|
rect
|
|
30470
30384
|
};
|
|
30471
30385
|
}
|
|
30472
30386
|
}
|
|
30387
|
+
this.pagesBoundingRects = nextRects;
|
|
30473
30388
|
},
|
|
30474
30389
|
getDisplayedPageScale(docIndex, pageIndex) {
|
|
30475
30390
|
const doc = this.pdfDocuments[docIndex];
|
|
30476
30391
|
if (!doc) return 1;
|
|
30392
|
+
const baseWidth = doc.pageWidths?.[pageIndex] || 0;
|
|
30393
|
+
const rectWidth = this.pagesBoundingRects[`${docIndex}-${pageIndex}`]?.rect?.width || 0;
|
|
30394
|
+
if (rectWidth && baseWidth) {
|
|
30395
|
+
return rectWidth / baseWidth;
|
|
30396
|
+
}
|
|
30397
|
+
const canvas = this.getPageCanvasElement(docIndex, pageIndex);
|
|
30398
|
+
const fallbackRectWidth = canvas?.getBoundingClientRect?.().width || 0;
|
|
30399
|
+
if (fallbackRectWidth && baseWidth) {
|
|
30400
|
+
return fallbackRectWidth / baseWidth;
|
|
30401
|
+
}
|
|
30477
30402
|
const base = doc.pagesScale[pageIndex] || 1;
|
|
30478
30403
|
const factor = this.visualScale && this.scale ? this.visualScale / this.scale : 1;
|
|
30479
30404
|
return base * factor;
|
|
@@ -30497,6 +30422,14 @@ function readAsPDF(file) {
|
|
|
30497
30422
|
if (this.isAddingMode || this.isDraggingElement) {
|
|
30498
30423
|
this.cachePageBounds();
|
|
30499
30424
|
}
|
|
30425
|
+
if (this.autoFitZoom && !this.isAddingMode && !this.isDraggingElement) {
|
|
30426
|
+
const containerWidth = this.$el?.clientWidth || 0;
|
|
30427
|
+
if (containerWidth && containerWidth !== this.lastContainerWidth) {
|
|
30428
|
+
this.lastContainerWidth = containerWidth;
|
|
30429
|
+
this.autoFitApplied = false;
|
|
30430
|
+
this.scheduleAutoFitZoom();
|
|
30431
|
+
}
|
|
30432
|
+
}
|
|
30500
30433
|
this.viewportRafId = 0;
|
|
30501
30434
|
});
|
|
30502
30435
|
},
|
|
@@ -30517,16 +30450,16 @@ function readAsPDF(file) {
|
|
|
30517
30450
|
foundPage = true;
|
|
30518
30451
|
const canvasEl = this.getPageCanvasElement(docIndex, pageIndex);
|
|
30519
30452
|
const pagesScale = this.pdfDocuments[docIndex]?.pagesScale?.[pageIndex] || 1;
|
|
30520
|
-
const
|
|
30521
|
-
const
|
|
30522
|
-
const layoutScaleX =
|
|
30523
|
-
const layoutScaleY =
|
|
30453
|
+
const renderWidth = canvasEl?.width || rect.width;
|
|
30454
|
+
const renderHeight = canvasEl?.height || rect.height;
|
|
30455
|
+
const layoutScaleX = renderWidth ? rect.width / renderWidth : 1;
|
|
30456
|
+
const layoutScaleY = renderHeight ? rect.height / renderHeight : 1;
|
|
30524
30457
|
const relX = (clientX - rect.left) / layoutScaleX / pagesScale;
|
|
30525
30458
|
const relY = (clientY - rect.top) / layoutScaleY / pagesScale;
|
|
30526
|
-
const pageWidth =
|
|
30527
|
-
const pageHeight =
|
|
30528
|
-
this.previewScale.x = pagesScale
|
|
30529
|
-
this.previewScale.y = pagesScale
|
|
30459
|
+
const pageWidth = renderWidth / pagesScale;
|
|
30460
|
+
const pageHeight = renderHeight / pagesScale;
|
|
30461
|
+
this.previewScale.x = pagesScale;
|
|
30462
|
+
this.previewScale.y = pagesScale;
|
|
30530
30463
|
let x = relX - this.previewElement.width / 2;
|
|
30531
30464
|
let y = relY - this.previewElement.height / 2;
|
|
30532
30465
|
x = Math.max(0, Math.min(x, pageWidth - this.previewElement.width));
|
|
@@ -30556,7 +30489,11 @@ function readAsPDF(file) {
|
|
|
30556
30489
|
const factor = 1 - event.deltaY * 0.002;
|
|
30557
30490
|
const nextVisual = Math.max(0.5, Math.min(3.0, this.visualScale * factor));
|
|
30558
30491
|
this.visualScale = nextVisual;
|
|
30559
|
-
this.
|
|
30492
|
+
if (this.wheelZoomRafId) return;
|
|
30493
|
+
this.wheelZoomRafId = window.requestAnimationFrame(() => {
|
|
30494
|
+
this.wheelZoomRafId = null;
|
|
30495
|
+
this.commitZoom();
|
|
30496
|
+
});
|
|
30560
30497
|
},
|
|
30561
30498
|
commitZoom() {
|
|
30562
30499
|
const newScale = this.visualScale;
|
|
@@ -30617,23 +30554,25 @@ function readAsPDF(file) {
|
|
|
30617
30554
|
getAllObjects(docIndex = this.selectedDocIndex) {
|
|
30618
30555
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return [];
|
|
30619
30556
|
const doc = this.pdfDocuments[docIndex];
|
|
30620
|
-
const scale = this.scale || 1;
|
|
30621
30557
|
const result = [];
|
|
30622
30558
|
doc.allObjects.forEach((pageObjects, pageIndex) => {
|
|
30623
30559
|
const pageRef = this.getPageComponent(docIndex, pageIndex);
|
|
30624
30560
|
if (!pageRef) return;
|
|
30625
30561
|
const measurement = pageRef.getCanvasMeasurement();
|
|
30626
|
-
const
|
|
30562
|
+
const pagesScale = doc.pagesScale[pageIndex] || 1;
|
|
30563
|
+
const normalizedCanvasHeight = measurement.canvasHeight / pagesScale;
|
|
30627
30564
|
pageObjects.forEach(object => {
|
|
30628
30565
|
result.push({
|
|
30629
30566
|
...object,
|
|
30630
30567
|
pageIndex,
|
|
30631
30568
|
pageNumber: pageIndex + 1,
|
|
30632
|
-
scale,
|
|
30569
|
+
scale: pagesScale,
|
|
30633
30570
|
normalizedCoordinates: {
|
|
30634
30571
|
llx: parseInt(object.x, 10),
|
|
30635
30572
|
lly: parseInt(normalizedCanvasHeight - object.y, 10),
|
|
30636
|
-
ury: parseInt(normalizedCanvasHeight - object.y - object.height, 10)
|
|
30573
|
+
ury: parseInt(normalizedCanvasHeight - object.y - object.height, 10),
|
|
30574
|
+
width: parseInt(object.width, 10),
|
|
30575
|
+
height: parseInt(object.height, 10)
|
|
30637
30576
|
}
|
|
30638
30577
|
});
|
|
30639
30578
|
});
|
|
@@ -30727,8 +30666,24 @@ function readAsPDF(file) {
|
|
|
30727
30666
|
deleteObject(docIndex, objectId) {
|
|
30728
30667
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return;
|
|
30729
30668
|
const doc = this.pdfDocuments[docIndex];
|
|
30730
|
-
|
|
30669
|
+
let deletedObject = null;
|
|
30670
|
+
let deletedPageIndex = -1;
|
|
30671
|
+
doc.allObjects = doc.allObjects.map((objects, pageIndex) => objects.filter(object => {
|
|
30672
|
+
if (object.id === objectId) {
|
|
30673
|
+
deletedObject = object;
|
|
30674
|
+
deletedPageIndex = pageIndex;
|
|
30675
|
+
return false;
|
|
30676
|
+
}
|
|
30677
|
+
return true;
|
|
30678
|
+
}));
|
|
30731
30679
|
delete this.objectIndexCache[`${docIndex}-${objectId}`];
|
|
30680
|
+
if (deletedObject) {
|
|
30681
|
+
this.$emit('pdf-elements:delete-object', {
|
|
30682
|
+
object: deletedObject,
|
|
30683
|
+
docIndex,
|
|
30684
|
+
pageIndex: deletedPageIndex
|
|
30685
|
+
});
|
|
30686
|
+
}
|
|
30732
30687
|
},
|
|
30733
30688
|
checkAndMoveObjectPage(docIndex, objectId, mouseX, mouseY) {
|
|
30734
30689
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return undefined;
|
|
@@ -30816,6 +30771,7 @@ function readAsPDF(file) {
|
|
|
30816
30771
|
return Math.max(0.1, Math.min(2, availableWidth / maxPageWidth));
|
|
30817
30772
|
},
|
|
30818
30773
|
scheduleAutoFitZoom() {
|
|
30774
|
+
if (this.autoFitApplied) return;
|
|
30819
30775
|
if (this.zoomRafId) return;
|
|
30820
30776
|
this.zoomRafId = window.requestAnimationFrame(() => {
|
|
30821
30777
|
this.zoomRafId = 0;
|
|
@@ -30823,7 +30779,7 @@ function readAsPDF(file) {
|
|
|
30823
30779
|
});
|
|
30824
30780
|
},
|
|
30825
30781
|
adjustZoomToFit() {
|
|
30826
|
-
if (!this.autoFitZoom || !this.pdfDocuments.length) return;
|
|
30782
|
+
if (!this.autoFitZoom || this.autoFitApplied || !this.pdfDocuments.length) return;
|
|
30827
30783
|
const widths = this.pdfDocuments.flatMap(doc => doc.pageWidths || []).filter(width => width > 0);
|
|
30828
30784
|
let maxCanvasWidth = 0;
|
|
30829
30785
|
if (widths.length) {
|
|
@@ -30838,6 +30794,7 @@ function readAsPDF(file) {
|
|
|
30838
30794
|
maxCanvasWidth = Math.max(...Array.from(canvases).map(canvas => canvas.width / (this.scale || 1)));
|
|
30839
30795
|
}
|
|
30840
30796
|
const optimalScale = this.calculateOptimalScale(maxCanvasWidth);
|
|
30797
|
+
this.autoFitApplied = true;
|
|
30841
30798
|
if (Math.abs(optimalScale - this.scale) > 0.01) {
|
|
30842
30799
|
this.scale = optimalScale;
|
|
30843
30800
|
this.visualScale = optimalScale;
|
|
@@ -30851,10 +30808,10 @@ function readAsPDF(file) {
|
|
|
30851
30808
|
});
|
|
30852
30809
|
;// ./src/components/PDFElements.vue?vue&type=script&lang=js
|
|
30853
30810
|
/* harmony default export */ const components_PDFElementsvue_type_script_lang_js = (PDFElementsvue_type_script_lang_js);
|
|
30854
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=style&index=0&id=
|
|
30811
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=style&index=0&id=1815c763&prod&scoped=true&lang=css
|
|
30855
30812
|
// extracted by mini-css-extract-plugin
|
|
30856
30813
|
|
|
30857
|
-
;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=
|
|
30814
|
+
;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=1815c763&prod&scoped=true&lang=css
|
|
30858
30815
|
|
|
30859
30816
|
;// ./src/components/PDFElements.vue
|
|
30860
30817
|
|
|
@@ -30871,7 +30828,7 @@ var PDFElements_component = normalizeComponent(
|
|
|
30871
30828
|
staticRenderFns,
|
|
30872
30829
|
false,
|
|
30873
30830
|
null,
|
|
30874
|
-
"
|
|
30831
|
+
"1815c763",
|
|
30875
30832
|
null
|
|
30876
30833
|
|
|
30877
30834
|
)
|