@libresign/pdf-elements 0.2.3 → 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 +129 -157
- package/dist/pdf-elements.common.js.map +1 -1
- package/dist/pdf-elements.css +1 -1
- package/dist/pdf-elements.umd.js +129 -157
- 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 +80 -25
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
|
-
autoFitApplied: false
|
|
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, {
|
|
@@ -30281,7 +30209,10 @@ function readAsPDF(file) {
|
|
|
30281
30209
|
if (this.zoomRafId) {
|
|
30282
30210
|
cancelAnimationFrame(this.zoomRafId);
|
|
30283
30211
|
}
|
|
30284
|
-
this.
|
|
30212
|
+
if (this.wheelZoomRafId) {
|
|
30213
|
+
cancelAnimationFrame(this.wheelZoomRafId);
|
|
30214
|
+
this.wheelZoomRafId = null;
|
|
30215
|
+
}
|
|
30285
30216
|
if (this.boundHandleWheel) {
|
|
30286
30217
|
this.$el?.removeEventListener('wheel', this.boundHandleWheel);
|
|
30287
30218
|
}
|
|
@@ -30440,23 +30371,34 @@ function readAsPDF(file) {
|
|
|
30440
30371
|
this.cachePageBounds();
|
|
30441
30372
|
},
|
|
30442
30373
|
cachePageBounds() {
|
|
30443
|
-
|
|
30374
|
+
const nextRects = {};
|
|
30444
30375
|
for (let docIdx = 0; docIdx < this.pdfDocuments.length; docIdx++) {
|
|
30445
30376
|
for (let pageIdx = 0; pageIdx < this.pdfDocuments[docIdx].pages.length; pageIdx++) {
|
|
30446
30377
|
const canvas = this.getPageCanvasElement(docIdx, pageIdx);
|
|
30447
30378
|
if (!canvas) continue;
|
|
30448
30379
|
const rect = canvas.getBoundingClientRect();
|
|
30449
|
-
|
|
30380
|
+
nextRects[`${docIdx}-${pageIdx}`] = {
|
|
30450
30381
|
docIndex: docIdx,
|
|
30451
30382
|
pageIndex: pageIdx,
|
|
30452
30383
|
rect
|
|
30453
30384
|
};
|
|
30454
30385
|
}
|
|
30455
30386
|
}
|
|
30387
|
+
this.pagesBoundingRects = nextRects;
|
|
30456
30388
|
},
|
|
30457
30389
|
getDisplayedPageScale(docIndex, pageIndex) {
|
|
30458
30390
|
const doc = this.pdfDocuments[docIndex];
|
|
30459
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
|
+
}
|
|
30460
30402
|
const base = doc.pagesScale[pageIndex] || 1;
|
|
30461
30403
|
const factor = this.visualScale && this.scale ? this.visualScale / this.scale : 1;
|
|
30462
30404
|
return base * factor;
|
|
@@ -30480,6 +30422,14 @@ function readAsPDF(file) {
|
|
|
30480
30422
|
if (this.isAddingMode || this.isDraggingElement) {
|
|
30481
30423
|
this.cachePageBounds();
|
|
30482
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
|
+
}
|
|
30483
30433
|
this.viewportRafId = 0;
|
|
30484
30434
|
});
|
|
30485
30435
|
},
|
|
@@ -30500,16 +30450,16 @@ function readAsPDF(file) {
|
|
|
30500
30450
|
foundPage = true;
|
|
30501
30451
|
const canvasEl = this.getPageCanvasElement(docIndex, pageIndex);
|
|
30502
30452
|
const pagesScale = this.pdfDocuments[docIndex]?.pagesScale?.[pageIndex] || 1;
|
|
30503
|
-
const
|
|
30504
|
-
const
|
|
30505
|
-
const layoutScaleX =
|
|
30506
|
-
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;
|
|
30507
30457
|
const relX = (clientX - rect.left) / layoutScaleX / pagesScale;
|
|
30508
30458
|
const relY = (clientY - rect.top) / layoutScaleY / pagesScale;
|
|
30509
|
-
const pageWidth =
|
|
30510
|
-
const pageHeight =
|
|
30511
|
-
this.previewScale.x = pagesScale
|
|
30512
|
-
this.previewScale.y = pagesScale
|
|
30459
|
+
const pageWidth = renderWidth / pagesScale;
|
|
30460
|
+
const pageHeight = renderHeight / pagesScale;
|
|
30461
|
+
this.previewScale.x = pagesScale;
|
|
30462
|
+
this.previewScale.y = pagesScale;
|
|
30513
30463
|
let x = relX - this.previewElement.width / 2;
|
|
30514
30464
|
let y = relY - this.previewElement.height / 2;
|
|
30515
30465
|
x = Math.max(0, Math.min(x, pageWidth - this.previewElement.width));
|
|
@@ -30539,7 +30489,11 @@ function readAsPDF(file) {
|
|
|
30539
30489
|
const factor = 1 - event.deltaY * 0.002;
|
|
30540
30490
|
const nextVisual = Math.max(0.5, Math.min(3.0, this.visualScale * factor));
|
|
30541
30491
|
this.visualScale = nextVisual;
|
|
30542
|
-
this.
|
|
30492
|
+
if (this.wheelZoomRafId) return;
|
|
30493
|
+
this.wheelZoomRafId = window.requestAnimationFrame(() => {
|
|
30494
|
+
this.wheelZoomRafId = null;
|
|
30495
|
+
this.commitZoom();
|
|
30496
|
+
});
|
|
30543
30497
|
},
|
|
30544
30498
|
commitZoom() {
|
|
30545
30499
|
const newScale = this.visualScale;
|
|
@@ -30600,23 +30554,25 @@ function readAsPDF(file) {
|
|
|
30600
30554
|
getAllObjects(docIndex = this.selectedDocIndex) {
|
|
30601
30555
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return [];
|
|
30602
30556
|
const doc = this.pdfDocuments[docIndex];
|
|
30603
|
-
const scale = this.scale || 1;
|
|
30604
30557
|
const result = [];
|
|
30605
30558
|
doc.allObjects.forEach((pageObjects, pageIndex) => {
|
|
30606
30559
|
const pageRef = this.getPageComponent(docIndex, pageIndex);
|
|
30607
30560
|
if (!pageRef) return;
|
|
30608
30561
|
const measurement = pageRef.getCanvasMeasurement();
|
|
30609
|
-
const
|
|
30562
|
+
const pagesScale = doc.pagesScale[pageIndex] || 1;
|
|
30563
|
+
const normalizedCanvasHeight = measurement.canvasHeight / pagesScale;
|
|
30610
30564
|
pageObjects.forEach(object => {
|
|
30611
30565
|
result.push({
|
|
30612
30566
|
...object,
|
|
30613
30567
|
pageIndex,
|
|
30614
30568
|
pageNumber: pageIndex + 1,
|
|
30615
|
-
scale,
|
|
30569
|
+
scale: pagesScale,
|
|
30616
30570
|
normalizedCoordinates: {
|
|
30617
30571
|
llx: parseInt(object.x, 10),
|
|
30618
30572
|
lly: parseInt(normalizedCanvasHeight - object.y, 10),
|
|
30619
|
-
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)
|
|
30620
30576
|
}
|
|
30621
30577
|
});
|
|
30622
30578
|
});
|
|
@@ -30710,8 +30666,24 @@ function readAsPDF(file) {
|
|
|
30710
30666
|
deleteObject(docIndex, objectId) {
|
|
30711
30667
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return;
|
|
30712
30668
|
const doc = this.pdfDocuments[docIndex];
|
|
30713
|
-
|
|
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
|
+
}));
|
|
30714
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
|
+
}
|
|
30715
30687
|
},
|
|
30716
30688
|
checkAndMoveObjectPage(docIndex, objectId, mouseX, mouseY) {
|
|
30717
30689
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return undefined;
|
|
@@ -30836,10 +30808,10 @@ function readAsPDF(file) {
|
|
|
30836
30808
|
});
|
|
30837
30809
|
;// ./src/components/PDFElements.vue?vue&type=script&lang=js
|
|
30838
30810
|
/* harmony default export */ const components_PDFElementsvue_type_script_lang_js = (PDFElementsvue_type_script_lang_js);
|
|
30839
|
-
;// ./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
|
|
30840
30812
|
// extracted by mini-css-extract-plugin
|
|
30841
30813
|
|
|
30842
|
-
;// ./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
|
|
30843
30815
|
|
|
30844
30816
|
;// ./src/components/PDFElements.vue
|
|
30845
30817
|
|
|
@@ -30856,7 +30828,7 @@ var PDFElements_component = normalizeComponent(
|
|
|
30856
30828
|
staticRenderFns,
|
|
30857
30829
|
false,
|
|
30858
30830
|
null,
|
|
30859
|
-
"
|
|
30831
|
+
"1815c763",
|
|
30860
30832
|
null
|
|
30861
30833
|
|
|
30862
30834
|
)
|