@libresign/pdf-elements 0.2.5 → 0.3.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 +1 -1
- package/dist/pdf-elements.common.js +110 -15
- package/dist/pdf-elements.common.js.map +1 -1
- package/dist/pdf-elements.css +1 -1
- package/dist/pdf-elements.umd.js +110 -15
- 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 +23 -2
- package/src/components/PDFElements.vue +65 -0
package/dist/pdf-elements.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
canvas[data-v-acf7a444]{display:block}.draggable-wrapper[data-v-
|
|
1
|
+
canvas[data-v-acf7a444]{display:block}.draggable-wrapper[data-v-9f1fd9e4]{position:relative}.actions-toolbar[data-v-9f1fd9e4]{position:absolute;display:flex;gap:4px;background:#1f2937;border-radius:6px;padding:6px 8px;box-shadow:0 4px 12px -2px #00000026,0 2px 6px -2px #0000001a;z-index:5;white-space:nowrap}.action-btn[data-v-9f1fd9e4]{border:none;background:#0000;color:#fff;padding:4px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .12s ease}.action-btn[data-v-9f1fd9e4]:hover{background:#ffffff1a}.draggable-element[data-v-9f1fd9e4]{position:absolute;cursor:move;user-select:none;border-radius:6px;overflow:visible}.draggable-element.selected[data-v-9f1fd9e4]{box-shadow:inset 0 0 0 2px #2563eb}.resize-handle[data-v-9f1fd9e4]{all:unset;position:absolute;width:12px;height:12px;min-width:0;min-height:0;background:#2563eb;border:1px solid #fff;border-radius:3px;padding:0;margin:0;line-height:0;font-size:0;box-sizing:border-box;display:block;appearance:none;cursor:pointer;z-index:5}.handle-top-left[data-v-9f1fd9e4]{top:-7px;left:-7px;cursor:nwse-resize}.handle-top-right[data-v-9f1fd9e4]{top:-7px;right:-7px;cursor:nesw-resize}.handle-bottom-left[data-v-9f1fd9e4]{bottom:-7px;left:-7px;cursor:nesw-resize}.handle-bottom-right[data-v-9f1fd9e4]{bottom:-7px;right:-7px;cursor:nwse-resize}.pdf-elements-root[data-v-46de43ea]{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;box-sizing:border-box}.pages-container[data-v-46de43ea]{width:100%;padding:20px 0 0 0;text-align:center;background:#f7fafc;overflow:hidden}.page-slot[data-v-46de43ea]{margin:0 auto}.page-wrapper[data-v-46de43ea]{display:inline-block;margin-bottom:0}.page-canvas[data-v-46de43ea]{position:relative;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.shadow-outline[data-v-46de43ea]{box-shadow:0 0 0 3px #4299e180}.preview-element[data-v-46de43ea]{position:absolute;opacity:.7;pointer-events:none}.overlay[data-v-46de43ea]{position:absolute;top:0;left:0;transform-origin:top left;width:100%;height:100%}.page-footer[data-v-46de43ea]{display:flex;justify-content:space-between;align-items:center;padding:12px 20px 20px 20px;color:#4b5563;font-size:14px}
|
package/dist/pdf-elements.umd.js
CHANGED
|
@@ -2821,7 +2821,7 @@ if (typeof window !== 'undefined') {
|
|
|
2821
2821
|
// Indicate to webpack that this file can be concatenated
|
|
2822
2822
|
/* harmony default export */ const setPublicPath = (null);
|
|
2823
2823
|
|
|
2824
|
-
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
2824
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=46de43ea&scoped=true
|
|
2825
2825
|
var render = function render() {
|
|
2826
2826
|
var _vm = this,
|
|
2827
2827
|
_c = _vm._self._c;
|
|
@@ -2902,6 +2902,7 @@ var render = function render() {
|
|
|
2902
2902
|
"read-only": _vm.readOnly,
|
|
2903
2903
|
"on-update": payload => _vm.updateObject(docIndex, object.id, payload),
|
|
2904
2904
|
"on-delete": () => _vm.deleteObject(docIndex, object.id),
|
|
2905
|
+
"on-duplicate": () => _vm.duplicateObject(docIndex, object.id),
|
|
2905
2906
|
"on-drag-start": (mouseX, mouseY, pointerOffset, dragShift) => _vm.startDraggingElement(docIndex, pIndex, object, mouseX, mouseY, pointerOffset, dragShift),
|
|
2906
2907
|
"on-drag-move": _vm.updateDraggingPosition,
|
|
2907
2908
|
"on-drag-end": _vm.stopDraggingElement,
|
|
@@ -2912,7 +2913,8 @@ var render = function render() {
|
|
|
2912
2913
|
"global-drag-doc-index": _vm.draggingDocIndex,
|
|
2913
2914
|
"global-drag-page-index": _vm.draggingPageIndex,
|
|
2914
2915
|
"show-selection-ui": _vm.showSelectionHandles && !_vm.hideSelectionUI && object.resizable !== false,
|
|
2915
|
-
"show-default-actions": _vm.showElementActions && !_vm.hideSelectionUI
|
|
2916
|
+
"show-default-actions": _vm.showElementActions && !_vm.hideSelectionUI,
|
|
2917
|
+
"ignore-click-outside-selectors": _vm.ignoreClickOutsideSelectors
|
|
2916
2918
|
},
|
|
2917
2919
|
scopedSlots: _vm._u([{
|
|
2918
2920
|
key: "default",
|
|
@@ -2934,7 +2936,8 @@ var render = function render() {
|
|
|
2934
2936
|
fn: function (slotProps) {
|
|
2935
2937
|
return [_vm._t("actions", null, {
|
|
2936
2938
|
"object": slotProps.object,
|
|
2937
|
-
"onDelete": slotProps.onDelete
|
|
2939
|
+
"onDelete": slotProps.onDelete,
|
|
2940
|
+
"onDuplicate": slotProps.onDuplicate
|
|
2938
2941
|
})];
|
|
2939
2942
|
}
|
|
2940
2943
|
}], null, true)
|
|
@@ -3211,8 +3214,8 @@ var component = normalizeComponent(
|
|
|
3211
3214
|
)
|
|
3212
3215
|
|
|
3213
3216
|
/* harmony default export */ const PDFPage = (component.exports);
|
|
3214
|
-
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
3215
|
-
var
|
|
3217
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=9f1fd9e4&scoped=true
|
|
3218
|
+
var DraggableElementvue_type_template_id_9f1fd9e4_scoped_true_render = function render() {
|
|
3216
3219
|
var _vm = this,
|
|
3217
3220
|
_c = _vm._self._c;
|
|
3218
3221
|
return _c('div', {
|
|
@@ -3222,6 +3225,29 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_render = function
|
|
|
3222
3225
|
style: _vm.toolbarStyle
|
|
3223
3226
|
}, [_vm._t("actions", function () {
|
|
3224
3227
|
return [_c('button', {
|
|
3228
|
+
staticClass: "action-btn",
|
|
3229
|
+
attrs: {
|
|
3230
|
+
"type": "button",
|
|
3231
|
+
"title": "Duplicate"
|
|
3232
|
+
},
|
|
3233
|
+
on: {
|
|
3234
|
+
"click": function ($event) {
|
|
3235
|
+
$event.stopPropagation();
|
|
3236
|
+
return _vm.onDuplicate.apply(null, arguments);
|
|
3237
|
+
}
|
|
3238
|
+
}
|
|
3239
|
+
}, [_c('svg', {
|
|
3240
|
+
attrs: {
|
|
3241
|
+
"width": "16",
|
|
3242
|
+
"height": "16",
|
|
3243
|
+
"viewBox": "0 0 24 24",
|
|
3244
|
+
"fill": "currentColor"
|
|
3245
|
+
}
|
|
3246
|
+
}, [_c('path', {
|
|
3247
|
+
attrs: {
|
|
3248
|
+
"d": "M16 1H6a2 2 0 0 0-2 2v12h2V3h10V1zm3 4H10a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm0 16H10V7h9v14z"
|
|
3249
|
+
}
|
|
3250
|
+
})])]), _c('button', {
|
|
3225
3251
|
staticClass: "action-btn",
|
|
3226
3252
|
attrs: {
|
|
3227
3253
|
"type": "button",
|
|
@@ -3247,7 +3273,8 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_render = function
|
|
|
3247
3273
|
})])])];
|
|
3248
3274
|
}, {
|
|
3249
3275
|
"object": _vm.object,
|
|
3250
|
-
"onDelete": _vm.onDelete
|
|
3276
|
+
"onDelete": _vm.onDelete,
|
|
3277
|
+
"onDuplicate": _vm.onDuplicate
|
|
3251
3278
|
})], 2) : _vm._e(), _c('div', {
|
|
3252
3279
|
staticClass: "draggable-element",
|
|
3253
3280
|
class: {
|
|
@@ -3292,7 +3319,7 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_render = function
|
|
|
3292
3319
|
});
|
|
3293
3320
|
}) : _vm._e()], 2)]);
|
|
3294
3321
|
};
|
|
3295
|
-
var
|
|
3322
|
+
var DraggableElementvue_type_template_id_9f1fd9e4_scoped_true_staticRenderFns = [];
|
|
3296
3323
|
|
|
3297
3324
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=script&lang=js
|
|
3298
3325
|
/* harmony default export */ const DraggableElementvue_type_script_lang_js = ({
|
|
@@ -3322,6 +3349,10 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_staticRenderFns =
|
|
|
3322
3349
|
type: Function,
|
|
3323
3350
|
default: () => {}
|
|
3324
3351
|
},
|
|
3352
|
+
onDuplicate: {
|
|
3353
|
+
type: Function,
|
|
3354
|
+
default: () => {}
|
|
3355
|
+
},
|
|
3325
3356
|
onDragStart: {
|
|
3326
3357
|
type: Function,
|
|
3327
3358
|
default: () => {}
|
|
@@ -3372,6 +3403,10 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_staticRenderFns =
|
|
|
3372
3403
|
readOnly: {
|
|
3373
3404
|
type: Boolean,
|
|
3374
3405
|
default: false
|
|
3406
|
+
},
|
|
3407
|
+
ignoreClickOutsideSelectors: {
|
|
3408
|
+
type: Array,
|
|
3409
|
+
default: () => []
|
|
3375
3410
|
}
|
|
3376
3411
|
},
|
|
3377
3412
|
data() {
|
|
@@ -3488,6 +3523,12 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_staticRenderFns =
|
|
|
3488
3523
|
this.startDrag(event);
|
|
3489
3524
|
},
|
|
3490
3525
|
handleClickOutside(event) {
|
|
3526
|
+
const selectors = Array.isArray(this.ignoreClickOutsideSelectors) ? this.ignoreClickOutsideSelectors : [];
|
|
3527
|
+
for (const selector of selectors) {
|
|
3528
|
+
if (selector && event?.target?.closest?.(selector)) {
|
|
3529
|
+
return;
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3491
3532
|
if (this.$el && !this.$el.contains(event.target)) {
|
|
3492
3533
|
this.isSelected = false;
|
|
3493
3534
|
}
|
|
@@ -3702,10 +3743,10 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_staticRenderFns =
|
|
|
3702
3743
|
});
|
|
3703
3744
|
;// ./src/components/DraggableElement.vue?vue&type=script&lang=js
|
|
3704
3745
|
/* harmony default export */ const components_DraggableElementvue_type_script_lang_js = (DraggableElementvue_type_script_lang_js);
|
|
3705
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=style&index=0&id=
|
|
3746
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/DraggableElement.vue?vue&type=style&index=0&id=9f1fd9e4&prod&scoped=true&lang=css
|
|
3706
3747
|
// extracted by mini-css-extract-plugin
|
|
3707
3748
|
|
|
3708
|
-
;// ./src/components/DraggableElement.vue?vue&type=style&index=0&id=
|
|
3749
|
+
;// ./src/components/DraggableElement.vue?vue&type=style&index=0&id=9f1fd9e4&prod&scoped=true&lang=css
|
|
3709
3750
|
|
|
3710
3751
|
;// ./src/components/DraggableElement.vue
|
|
3711
3752
|
|
|
@@ -3718,11 +3759,11 @@ var DraggableElementvue_type_template_id_1fb13404_scoped_true_staticRenderFns =
|
|
|
3718
3759
|
|
|
3719
3760
|
var DraggableElement_component = normalizeComponent(
|
|
3720
3761
|
components_DraggableElementvue_type_script_lang_js,
|
|
3721
|
-
|
|
3722
|
-
|
|
3762
|
+
DraggableElementvue_type_template_id_9f1fd9e4_scoped_true_render,
|
|
3763
|
+
DraggableElementvue_type_template_id_9f1fd9e4_scoped_true_staticRenderFns,
|
|
3723
3764
|
false,
|
|
3724
3765
|
null,
|
|
3725
|
-
"
|
|
3766
|
+
"9f1fd9e4",
|
|
3726
3767
|
null
|
|
3727
3768
|
|
|
3728
3769
|
)
|
|
@@ -30307,6 +30348,10 @@ function getCachedMeasurement(cache, cacheKey, pageRef, pagesScale) {
|
|
|
30307
30348
|
type: Boolean,
|
|
30308
30349
|
default: false
|
|
30309
30350
|
},
|
|
30351
|
+
ignoreClickOutsideSelectors: {
|
|
30352
|
+
type: Array,
|
|
30353
|
+
default: () => []
|
|
30354
|
+
},
|
|
30310
30355
|
pageCountFormat: {
|
|
30311
30356
|
type: String,
|
|
30312
30357
|
default: '{currentPage} of {totalPages}'
|
|
@@ -31037,6 +31082,56 @@ function getCachedMeasurement(cache, cacheKey, pageRef, pagesScale) {
|
|
|
31037
31082
|
});
|
|
31038
31083
|
}
|
|
31039
31084
|
},
|
|
31085
|
+
duplicateObject(docIndex, objectId) {
|
|
31086
|
+
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return;
|
|
31087
|
+
const doc = this.pdfDocuments[docIndex];
|
|
31088
|
+
const cacheKey = `${docIndex}-${objectId}`;
|
|
31089
|
+
let pageIndex = this.objectIndexCache[cacheKey];
|
|
31090
|
+
if (pageIndex === undefined) {
|
|
31091
|
+
pageIndex = findObjectPageIndex(doc, objectId);
|
|
31092
|
+
if (pageIndex !== undefined) {
|
|
31093
|
+
this.objectIndexCache[cacheKey] = pageIndex;
|
|
31094
|
+
}
|
|
31095
|
+
}
|
|
31096
|
+
if (pageIndex === undefined) return;
|
|
31097
|
+
const sourceObject = doc.allObjects[pageIndex]?.find(o => o.id === objectId);
|
|
31098
|
+
if (!sourceObject) return;
|
|
31099
|
+
const {
|
|
31100
|
+
width: pageWidth,
|
|
31101
|
+
height: pageHeight
|
|
31102
|
+
} = this.getPageSize(docIndex, pageIndex);
|
|
31103
|
+
const offset = 12;
|
|
31104
|
+
const {
|
|
31105
|
+
x,
|
|
31106
|
+
y
|
|
31107
|
+
} = clampPosition(sourceObject.x + offset, sourceObject.y + offset, sourceObject.width, sourceObject.height, pageWidth, pageHeight);
|
|
31108
|
+
let duplicatedSigner = sourceObject.signer;
|
|
31109
|
+
if (duplicatedSigner?.element && Object.prototype.hasOwnProperty.call(duplicatedSigner.element, 'elementId')) {
|
|
31110
|
+
duplicatedSigner = {
|
|
31111
|
+
...duplicatedSigner,
|
|
31112
|
+
element: {
|
|
31113
|
+
...duplicatedSigner.element
|
|
31114
|
+
}
|
|
31115
|
+
};
|
|
31116
|
+
delete duplicatedSigner.element.elementId;
|
|
31117
|
+
}
|
|
31118
|
+
const duplicatedObject = {
|
|
31119
|
+
...sourceObject,
|
|
31120
|
+
id: this.generateObjectId(),
|
|
31121
|
+
x,
|
|
31122
|
+
y,
|
|
31123
|
+
signer: duplicatedSigner
|
|
31124
|
+
};
|
|
31125
|
+
doc.allObjects[pageIndex].push(duplicatedObject);
|
|
31126
|
+
this.objectIndexCache[`${docIndex}-${duplicatedObject.id}`] = pageIndex;
|
|
31127
|
+
this.$nextTick(() => {
|
|
31128
|
+
const refKey = `draggable${docIndex}-${pageIndex}-${duplicatedObject.id}`;
|
|
31129
|
+
const draggableRefs = this.$refs[refKey];
|
|
31130
|
+
if (draggableRefs && Array.isArray(draggableRefs) && draggableRefs[0]) {
|
|
31131
|
+
draggableRefs[0].isSelected = true;
|
|
31132
|
+
}
|
|
31133
|
+
});
|
|
31134
|
+
},
|
|
31040
31135
|
checkAndMoveObjectPage(docIndex, objectId, mouseX, mouseY) {
|
|
31041
31136
|
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return undefined;
|
|
31042
31137
|
const doc = this.pdfDocuments[docIndex];
|
|
@@ -31172,10 +31267,10 @@ function getCachedMeasurement(cache, cacheKey, pageRef, pagesScale) {
|
|
|
31172
31267
|
});
|
|
31173
31268
|
;// ./src/components/PDFElements.vue?vue&type=script&lang=js
|
|
31174
31269
|
/* harmony default export */ const components_PDFElementsvue_type_script_lang_js = (PDFElementsvue_type_script_lang_js);
|
|
31175
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=style&index=0&id=
|
|
31270
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/PDFElements.vue?vue&type=style&index=0&id=46de43ea&prod&scoped=true&lang=css
|
|
31176
31271
|
// extracted by mini-css-extract-plugin
|
|
31177
31272
|
|
|
31178
|
-
;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=
|
|
31273
|
+
;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=46de43ea&prod&scoped=true&lang=css
|
|
31179
31274
|
|
|
31180
31275
|
;// ./src/components/PDFElements.vue
|
|
31181
31276
|
|
|
@@ -31192,7 +31287,7 @@ var PDFElements_component = normalizeComponent(
|
|
|
31192
31287
|
staticRenderFns,
|
|
31193
31288
|
false,
|
|
31194
31289
|
null,
|
|
31195
|
-
"
|
|
31290
|
+
"46de43ea",
|
|
31196
31291
|
null
|
|
31197
31292
|
|
|
31198
31293
|
)
|