@libresign/pdf-elements 0.1.2 → 0.2.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 CHANGED
@@ -13,18 +13,19 @@ A Vue 2 component for rendering PDFs with draggable and resizable element overla
13
13
 
14
14
  ### Props
15
15
 
16
- | Prop | Type | Default |
17
- |------|------|---------|
18
- | `width` | String | `'100%'` |
19
- | `height` | String | `'100%'` |
20
- | `initFiles` | Array | `[]` |
21
- | `initFileNames` | Array | `[]` |
22
- | `initialScale` | Number | `1` |
23
- | `showPageFooter` | Boolean | `true` |
24
- | `hideSelectionUI` | Boolean | `false` |
25
- | `showSelectionHandles` | Boolean | `true` |
26
- | `showElementActions` | Boolean | `true` |
27
- | `pageCountFormat` | String | `'{currentPage} of {totalPages}'` |
16
+ | Prop | Type | Default | Description |
17
+ |------|------|---------|-------------|
18
+ | `width` | String | `'100%'` | Container width |
19
+ | `height` | String | `'100%'` | Container height |
20
+ | `initFiles` | Array | `[]` | PDF files to load |
21
+ | `initFileNames` | Array | `[]` | Names for the PDF files |
22
+ | `initialScale` | Number | `1` | Initial zoom scale |
23
+ | `showPageFooter` | Boolean | `true` | Show page footer with document name and page number |
24
+ | `hideSelectionUI` | Boolean | `false` | Hide selection handles and actions UI |
25
+ | `showSelectionHandles` | Boolean | `true` | Show resize/move handles on selected elements |
26
+ | `showElementActions` | Boolean | `true` | Show action buttons on selected elements |
27
+ | `pageCountFormat` | String | `'{currentPage} of {totalPages}'` | Format string for page counter |
28
+ | `autoFitZoom` | Boolean | `false` | Automatically adjust zoom to fit viewport on window resize |
28
29
 
29
30
  ### Events
30
31
 
@@ -35,3 +36,4 @@ A Vue 2 component for rendering PDFs with draggable and resizable element overla
35
36
  - `element-{type}` - Custom element rendering (e.g., `element-signature`)
36
37
  - `custom` - Fallback for elements without specific type
37
38
  - `actions` - Custom action buttons
39
+
@@ -2686,7 +2686,7 @@ if (typeof window !== 'undefined') {
2686
2686
  // Indicate to webpack that this file can be concatenated
2687
2687
  /* harmony default export */ const setPublicPath = (null);
2688
2688
 
2689
- ;// ./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=5a4a7f3b&scoped=true
2689
+ ;// ./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=7a179460&scoped=true
2690
2690
  var render = function render() {
2691
2691
  var _vm = this,
2692
2692
  _c = _vm._self._c;
@@ -30107,6 +30107,10 @@ function readAsPDF(file) {
30107
30107
  pageCountFormat: {
30108
30108
  type: String,
30109
30109
  default: '{currentPage} of {totalPages}'
30110
+ },
30111
+ autoFitZoom: {
30112
+ type: Boolean,
30113
+ default: false
30110
30114
  }
30111
30115
  },
30112
30116
  data() {
@@ -30179,6 +30183,9 @@ function readAsPDF(file) {
30179
30183
  this.$el?.addEventListener('wheel', this.boundHandleWheel, {
30180
30184
  passive: false
30181
30185
  });
30186
+ if (this.autoFitZoom) {
30187
+ window.addEventListener('resize', this.adjustZoomToFit);
30188
+ }
30182
30189
  },
30183
30190
  beforeUnmount() {
30184
30191
  if (this.zoomRafId) {
@@ -30196,6 +30203,9 @@ function readAsPDF(file) {
30196
30203
  window.removeEventListener('scroll', this.onViewportScroll);
30197
30204
  window.removeEventListener('resize', this.onViewportScroll);
30198
30205
  this.$el?.removeEventListener('scroll', this.onViewportScroll);
30206
+ if (this.autoFitZoom) {
30207
+ window.removeEventListener('resize', this.adjustZoomToFit);
30208
+ }
30199
30209
  if (this.viewportRafId) {
30200
30210
  window.cancelAnimationFrame(this.viewportRafId);
30201
30211
  this.viewportRafId = 0;
@@ -30674,15 +30684,32 @@ function readAsPDF(file) {
30674
30684
  const doc = this.pdfDocuments[docIndex];
30675
30685
  const pagesScale = doc.pagesScale[pageIndex] || 1;
30676
30686
  return pageRef.getCanvasMeasurement().canvasHeight / pagesScale;
30687
+ },
30688
+ calculateOptimalScale(maxPageWidth) {
30689
+ const containerWidth = this.$el?.clientWidth || 0;
30690
+ if (!containerWidth || !maxPageWidth) return 1;
30691
+ const availableWidth = containerWidth - 40;
30692
+ return Math.max(0.1, Math.min(2, availableWidth / maxPageWidth));
30693
+ },
30694
+ adjustZoomToFit() {
30695
+ if (!this.autoFitZoom || !this.pdfDocuments.length) return;
30696
+ const canvases = this.$el?.querySelectorAll('canvas');
30697
+ if (!canvases?.length) return;
30698
+ const maxCanvasWidth = Math.max(...Array.from(canvases).map(canvas => canvas.width / (this.scale || 1)));
30699
+ const optimalScale = this.calculateOptimalScale(maxCanvasWidth);
30700
+ if (Math.abs(optimalScale - this.scale) > 0.01) {
30701
+ this.scale = optimalScale;
30702
+ this.visualScale = optimalScale;
30703
+ }
30677
30704
  }
30678
30705
  }
30679
30706
  });
30680
30707
  ;// ./src/components/PDFElements.vue?vue&type=script&lang=js
30681
30708
  /* harmony default export */ const components_PDFElementsvue_type_script_lang_js = (PDFElementsvue_type_script_lang_js);
30682
- ;// ./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=5a4a7f3b&prod&scoped=true&lang=css
30709
+ ;// ./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=7a179460&prod&scoped=true&lang=css
30683
30710
  // extracted by mini-css-extract-plugin
30684
30711
 
30685
- ;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=5a4a7f3b&prod&scoped=true&lang=css
30712
+ ;// ./src/components/PDFElements.vue?vue&type=style&index=0&id=7a179460&prod&scoped=true&lang=css
30686
30713
 
30687
30714
  ;// ./src/components/PDFElements.vue
30688
30715
 
@@ -30699,7 +30726,7 @@ var PDFElements_component = normalizeComponent(
30699
30726
  staticRenderFns,
30700
30727
  false,
30701
30728
  null,
30702
- "5a4a7f3b",
30729
+ "7a179460",
30703
30730
  null
30704
30731
 
30705
30732
  )