superdoc 2.29.0-next.3 → 2.29.0-next.9

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.
Files changed (128) hide show
  1. package/dist/chunks/{PdfViewer-boENOZdF.cjs → PdfViewer-DmSkZehl.cjs} +70 -99
  2. package/dist/chunks/{PdfViewer-D4lVeOJu.es.js → PdfViewer-aOWhUVI7.es.js} +67 -96
  3. package/dist/chunks/{constants-DpXuDx_g.cjs → constants-BeeNZoQp.cjs} +1 -1
  4. package/dist/chunks/{constants-B6VBlmKp.es.js → constants-BvNs_ybI.es.js} +1 -1
  5. package/dist/chunks/{create-super-doc-ui-BFt8agAI.es.js → create-super-doc-ui-Bm5kmx0W.es.js} +12 -29
  6. package/dist/chunks/{create-super-doc-ui-BAGOnYGM.cjs → create-super-doc-ui-DN70aatf.cjs} +17 -28
  7. package/dist/collaboration-upgrade-engine.cjs +1 -1
  8. package/dist/collaboration-upgrade-engine.es.js +1 -1
  9. package/dist/document-api/src/capabilities/html-markdown-support.d.ts +4 -6
  10. package/dist/document-api/src/comments/comments.d.ts +2 -0
  11. package/dist/document-api/src/contract/operation-definitions.d.ts +2 -2
  12. package/dist/document-api/src/contract/operation-registry.d.ts +10 -9
  13. package/dist/document-api/src/index.d.ts +8 -7
  14. package/dist/document-api/src/insert/insert.d.ts +2 -2
  15. package/dist/document-api/src/replace/replace.d.ts +3 -2
  16. package/dist/document-api/src/types/address.d.ts +3 -0
  17. package/dist/document-api/src/types/temporary-mutation.d.ts +5 -1
  18. package/dist/document-api/src/write/write.d.ts +12 -6
  19. package/dist/public/ui-react.cjs +1 -1
  20. package/dist/public/ui-react.es.js +1 -1
  21. package/dist/public/ui-vue.cjs +1 -1
  22. package/dist/public/ui-vue.es.js +1 -1
  23. package/dist/public/ui.cjs +1 -1
  24. package/dist/public/ui.es.js +1 -1
  25. package/dist/style.css +1 -1
  26. package/dist/style.layered.css +1 -1
  27. package/dist/superdoc/src/SuperDoc.vue.d.ts +132 -58
  28. package/dist/superdoc/src/components/CommentsLayer/CommentDialog.vue.d.ts +28 -13
  29. package/dist/superdoc/src/components/CommentsLayer/floating-comment-positioning.d.ts +24 -23
  30. package/dist/superdoc/src/components/CommentsLayer/tracked-change-threading.d.ts +0 -1
  31. package/dist/superdoc/src/components/CommentsLayer/use-comment.d.ts +28 -13
  32. package/dist/superdoc/src/components/PdfViewer/PdfViewer.vue.d.ts +132 -45
  33. package/dist/superdoc/src/components/PdfViewer/PdfViewerDocument.vue.d.ts +62 -16
  34. package/dist/superdoc/src/components/PdfViewer/PdfViewerPage.vue.d.ts +77 -17
  35. package/dist/superdoc/src/components/PdfViewer/pdf-viewer-types.d.ts +45 -0
  36. package/dist/superdoc/src/components/Whiteboard/WhiteboardLayer.vue.d.ts +81 -16
  37. package/dist/superdoc/src/components/Whiteboard/WhiteboardPage.vue.d.ts +49 -13
  38. package/dist/superdoc/src/components/Whiteboard/use-whiteboard.d.ts +30 -15
  39. package/dist/superdoc/src/components/Whiteboard/whiteboard-types.d.ts +11 -0
  40. package/dist/superdoc/src/components/surfaces/focusable-selector.d.ts +1 -5
  41. package/dist/superdoc/src/composables/find-shortcut-owner.d.ts +16 -9
  42. package/dist/superdoc/src/composables/replace-continuation.d.ts +11 -15
  43. package/dist/superdoc/src/composables/use-document.d.ts +1210 -30
  44. package/dist/superdoc/src/composables/use-field.d.ts +88 -25
  45. package/dist/superdoc/src/composables/use-password-prompt.d.ts +23 -24
  46. package/dist/superdoc/src/composables/useUiFontFamily.d.ts +3 -11
  47. package/dist/superdoc/src/core/SuperDoc.d.ts +1 -1
  48. package/dist/superdoc/src/core/collaboration/collaboration-comments.d.ts +9 -4
  49. package/dist/superdoc/src/core/collaboration/helpers.d.ts +20 -3
  50. package/dist/superdoc/src/core/collaboration/permissions.d.ts +15 -10
  51. package/dist/superdoc/src/core/collaboration/resolve-v2-collaboration-target.d.ts +4 -3
  52. package/dist/superdoc/src/core/collaboration/v2-awareness-bridge.d.ts +2 -1
  53. package/dist/superdoc/src/core/config/merge-comments-config.d.ts +1 -5
  54. package/dist/superdoc/src/core/config/merge-defined.d.ts +3 -8
  55. package/dist/superdoc/src/core/config/normalize-hyperlinks-config.d.ts +7 -12
  56. package/dist/superdoc/src/core/config/normalize-surfaces-config.d.ts +9 -12
  57. package/dist/superdoc/src/core/config/normalize-ui-config.d.ts +1 -12
  58. package/dist/superdoc/src/core/create-app.d.ts +13 -24
  59. package/dist/superdoc/src/core/editor-runtime/conformance/fake-v2-runtime.d.ts +2 -1
  60. package/dist/superdoc/src/core/editor-runtime/editor-runtime-registry.d.ts +2 -1
  61. package/dist/superdoc/src/core/editor-runtime/index.d.ts +1 -1
  62. package/dist/superdoc/src/core/editor-runtime/types.d.ts +2 -1
  63. package/dist/superdoc/src/core/editor-runtime/v2/v2-session-shortcut-routes.d.ts +1 -1
  64. package/dist/superdoc/src/core/helpers/export.d.ts +3 -2
  65. package/dist/superdoc/src/core/helpers/file.d.ts +8 -45
  66. package/dist/superdoc/src/core/helpers/normalize-track-changes-config.d.ts +6 -60
  67. package/dist/superdoc/src/core/pdf/helpers/constants.d.ts +2 -2
  68. package/dist/superdoc/src/core/pdf/helpers/floor.d.ts +1 -1
  69. package/dist/superdoc/src/core/pdf/helpers/range.d.ts +1 -1
  70. package/dist/superdoc/src/core/pdf/helpers/read-file.d.ts +1 -1
  71. package/dist/superdoc/src/core/pdf/pdf-adapter.d.ts +24 -61
  72. package/dist/superdoc/src/core/superdoc-ui-owner.d.ts +1 -1
  73. package/dist/superdoc/src/core/surface-manager.d.ts +21 -83
  74. package/dist/superdoc/src/core/types/index.d.ts +4 -19
  75. package/dist/superdoc/src/core/v2-integration/v2-integration.d.ts +10 -10
  76. package/dist/superdoc/src/core/whiteboard/Whiteboard.d.ts +22 -208
  77. package/dist/superdoc/src/core/whiteboard/WhiteboardPage.d.ts +163 -189
  78. package/dist/superdoc/src/core/whiteboard/helpers/createTextarea.d.ts +14 -1
  79. package/dist/superdoc/src/core/whiteboard/helpers/flattenPoints.d.ts +1 -1
  80. package/dist/superdoc/src/core/whiteboard/helpers/getRandomId.d.ts +1 -1
  81. package/dist/superdoc/src/helpers/comment-focus.d.ts +21 -4
  82. package/dist/superdoc/src/helpers/deprecation.d.ts +5 -11
  83. package/dist/superdoc/src/helpers/interaction-trace.d.ts +7 -24
  84. package/dist/superdoc/src/helpers/mark-raw-component.d.ts +1 -0
  85. package/dist/superdoc/src/helpers/object-guards.d.ts +1 -5
  86. package/dist/superdoc/src/helpers/selection-source.d.ts +1 -1
  87. package/dist/superdoc/src/helpers/use-selection.d.ts +35 -15
  88. package/dist/superdoc/src/internal/diagnostics/diagnostic-dedupe.d.ts +6 -15
  89. package/dist/superdoc/src/internal/toolbar/built-in/AIWriter.vue.d.ts +2 -2
  90. package/dist/superdoc/src/internal/toolbar/built-in/ButtonGroup.vue.d.ts +4 -24
  91. package/dist/superdoc/src/internal/toolbar/built-in/FontFamilyCombobox.vue.d.ts +34 -0
  92. package/dist/superdoc/src/internal/toolbar/built-in/FontSizeCombobox.vue.d.ts +34 -0
  93. package/dist/superdoc/src/internal/toolbar/built-in/LinkInput.vue.d.ts +1 -1
  94. package/dist/superdoc/src/internal/toolbar/built-in/Toolbar.vue.d.ts +9 -3
  95. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarComboBox.vue.d.ts +12 -14
  96. package/dist/superdoc/src/internal/toolbar/built-in/ToolbarDropdown.vue.d.ts +1 -11
  97. package/dist/superdoc/src/internal/toolbar/built-in/color-dropdown-helpers.d.ts +9 -19
  98. package/dist/superdoc/src/internal/toolbar/built-in/constants.d.ts +12 -45
  99. package/dist/superdoc/src/internal/toolbar/built-in/default-items.d.ts +34 -17
  100. package/dist/superdoc/src/internal/toolbar/built-in/toolbar-focus-helpers.d.ts +10 -2
  101. package/dist/superdoc/src/internal/toolbar/built-in/toolbarTexts.d.ts +61 -61
  102. package/dist/superdoc/src/internal/toolbar/built-in/use-toolbar-item.d.ts +110 -48
  103. package/dist/superdoc/src/internal/toolbar/built-in-toolbar.d.ts +7 -27
  104. package/dist/superdoc/src/internal/toolbar/compatibility-catalog.d.ts +4 -3
  105. package/dist/superdoc/src/internal/toolbar/toolbar-item-aliases.d.ts +1 -1
  106. package/dist/superdoc/src/public/browser-document-api.d.ts +5 -4
  107. package/dist/superdoc/src/public/index.d.cts +26 -0
  108. package/dist/superdoc/src/public/index.d.ts +13 -0
  109. package/dist/superdoc/src/public/ui/commands.d.ts +14 -13
  110. package/dist/superdoc/src/public/ui/create-super-doc-ui.d.ts +1 -1
  111. package/dist/superdoc/src/public/ui/entity-at.d.ts +2 -1
  112. package/dist/superdoc/src/public/ui/style-match-patch.d.ts +2 -2
  113. package/dist/superdoc/src/public/ui/types.d.ts +1 -1
  114. package/dist/superdoc/src/stores/comments-store.d.ts +225 -99
  115. package/dist/superdoc/src/stores/helpers/comment-grouping.d.ts +30 -0
  116. package/dist/superdoc/src/stores/helpers/comment-identity.d.ts +40 -0
  117. package/dist/superdoc/src/stores/helpers/floating-comment-instances.d.ts +48 -13
  118. package/dist/superdoc/src/stores/helpers/tracked-change-identity.d.ts +19 -0
  119. package/dist/superdoc/src/stores/helpers/tracked-change-row-values.d.ts +0 -4
  120. package/dist/superdoc/src/stores/helpers/tracked-change-thread-index.d.ts +21 -24
  121. package/dist/superdoc/src/stores/superdoc-store.d.ts +676 -298
  122. package/dist/superdoc.cjs +1325 -2262
  123. package/dist/superdoc.es.js +1321 -2259
  124. package/dist-cdn/style.layered.css +1 -1
  125. package/dist-cdn/superdoc.min.css +1 -1
  126. package/dist-cdn/superdoc.min.js +42 -42
  127. package/package.json +2 -2
  128. package/dist/superdoc/src/internal/toolbar/index.d.ts +0 -10
@@ -1,117 +1,75 @@
1
1
  const require__plugin_vue_export_helper = require("./_plugin-vue_export-helper-6MBoygIY.cjs");
2
2
  const require_is_finite_number = require("./is-finite-number-BEXgTRgc.cjs");
3
- const require_constants = require("./constants-DpXuDx_g.cjs");
4
- //#region src/core/pdf/helpers/floor.js
3
+ const require_constants = require("./constants-BeeNZoQp.cjs");
4
+ //#region src/core/pdf/helpers/floor.ts
5
5
  var floor = (val, precision) => {
6
6
  const multiplier = 10 ** (precision || 0);
7
7
  return Math.floor(val * multiplier) / multiplier;
8
8
  };
9
9
  //#endregion
10
- //#region src/core/pdf/helpers/read-file.js
10
+ //#region src/core/pdf/helpers/read-file.ts
11
11
  var readFileAsArrayBuffer = (blob) => {
12
12
  return new Promise((resolve, reject) => {
13
13
  const reader = new FileReader();
14
- reader.onload = (event) => resolve(event.target.result);
14
+ reader.onload = () => {
15
+ if (reader.result instanceof ArrayBuffer) resolve(reader.result);
16
+ else reject(/* @__PURE__ */ new TypeError("FileReader did not produce an ArrayBuffer"));
17
+ };
15
18
  reader.onerror = reject;
16
- reader.readAsDataURL(blob);
19
+ reader.readAsArrayBuffer(blob);
17
20
  });
18
21
  };
19
22
  //#endregion
20
- //#region src/core/pdf/helpers/range.js
23
+ //#region src/core/pdf/helpers/range.ts
21
24
  var range = (start, end) => {
22
25
  const length = end - start;
23
26
  return Array.from({ length }, (_, i) => start + i);
24
27
  };
25
28
  //#endregion
26
- //#region src/core/pdf/pdf-adapter.js
27
- /**
28
- * @typedef {import('pdfjs-dist').PDFDocumentProxy} PDFDocumentProxy
29
- * @typedef {import('pdfjs-dist').PDFPageProxy} PDFPageProxy
30
- */
31
- /**
32
- * @typedef {'pdfjs'} AdapterType
33
- */
34
- /**
35
- * @typedef {Object} PDFConfig
36
- * @property {AdapterType} adapter
37
- * @property {any} [pdfLib]
38
- * @property {string} [workerSrc]
39
- * @property {boolean} [setWorker]
40
- */
41
- /**
42
- * @typedef {Object} PDFJSConfig
43
- * @property {any} pdfLib
44
- * @property {string} [workerSrc]
45
- * @property {boolean} [setWorker]
46
- */
47
- /**
48
- * @typedef {Object} RenderPagesOptions
49
- * @property {string} documentId
50
- * @property {PDFDocumentProxy} pdfDocument
51
- * @property {HTMLElement} viewerContainer
52
- * @property {function(string, ...any): void} [emit]
53
- */
54
- /**
55
- * @typedef {Object} PageSize
56
- * @property {number} width
57
- * @property {number} height
58
- */
59
- /**
60
- * @param {Partial<PDFConfig>} [config]
61
- * @returns {PDFConfig}
62
- */
29
+ //#region src/core/pdf/pdf-adapter.ts
30
+ var isObjectLike = (value) => (typeof value === "object" || typeof value === "function") && value !== null;
31
+ var REQUIRES_PDFJS = "PDFJSAdapter requires a pdf.js module as pdfLib";
32
+ var hasDocumentLoader = (value) => isObjectLike(value) && "getDocument" in value && typeof value.getDocument === "function";
33
+ var requireWorkerOptions = (value) => {
34
+ if (isObjectLike(value) && "GlobalWorkerOptions" in value && isObjectLike(value.GlobalWorkerOptions)) return value.GlobalWorkerOptions;
35
+ throw new TypeError(REQUIRES_PDFJS);
36
+ };
37
+ var requireVersion = (value) => {
38
+ if (isObjectLike(value) && "version" in value && typeof value.version === "string") return value.version;
39
+ throw new TypeError(REQUIRES_PDFJS);
40
+ };
63
41
  var createPDFConfig = (config) => {
64
42
  return {
65
43
  adapter: "pdfjs",
66
44
  ...config
67
45
  };
68
46
  };
69
- /**
70
- * @abstract
71
- */
72
47
  var PDFAdapter = class PDFAdapter {
73
- /**
74
- * @throws {Error}
75
- */
76
48
  constructor() {
77
49
  if (Object.getPrototypeOf(this).constructor === PDFAdapter) throw new Error("Abstract class should not be instantiated");
78
50
  }
79
51
  };
80
52
  var PDFJSAdapter = class extends PDFAdapter {
81
- /**
82
- * @param {PDFJSConfig} config
83
- */
84
53
  constructor(config) {
85
54
  super();
86
55
  this.pdfLib = config.pdfLib;
87
56
  this.workerSrc = config.workerSrc;
88
- if (config.setWorker) if (this.workerSrc) this.pdfLib.GlobalWorkerOptions.workerSrc = config.workerSrc;
89
- else this.pdfLib.GlobalWorkerOptions.workerSrc = getWorkerSrcFromCDN(this.pdfLib.version);
57
+ if (config.setWorker) {
58
+ const workerOptions = requireWorkerOptions(this.pdfLib);
59
+ workerOptions.workerSrc = this.workerSrc || getWorkerSrcFromCDN(requireVersion(this.pdfLib));
60
+ }
90
61
  }
91
- /**
92
- * @param {string | ArrayBuffer | Uint8Array} file
93
- * @returns {Promise<PDFDocumentProxy>}
94
- */
95
62
  async getDocument(file) {
96
- return await this.pdfLib.getDocument(file).promise;
63
+ const pdfLib = this.pdfLib;
64
+ if (!hasDocumentLoader(pdfLib)) throw new TypeError(REQUIRES_PDFJS);
65
+ return pdfLib.getDocument(file).promise;
97
66
  }
98
- /**
99
- * @param {PDFDocumentProxy} pdf
100
- * @param {number} firstPage
101
- * @param {number} lastPage
102
- * @returns {Promise<PDFPageProxy[]>}
103
- */
104
67
  async getPages(pdf, firstPage, lastPage) {
105
68
  const pagesPromises = range(firstPage, lastPage + 1).map((num) => pdf.getPage(num));
106
69
  return await Promise.all(pagesPromises);
107
70
  }
108
71
  };
109
72
  var PDFAdapterFactory = class {
110
- /**
111
- * @param {PDFJSConfig & {adapter: AdapterType}} config
112
- * @returns {PDFAdapter}
113
- * @throws {Error}
114
- */
115
73
  static create(config) {
116
74
  const adapters = {
117
75
  pdfjs: () => {
@@ -124,18 +82,14 @@ var PDFAdapterFactory = class {
124
82
  return (adapters[config.adapter] ?? adapters.default)();
125
83
  }
126
84
  };
127
- /**
128
- * @param {number} version
129
- * @returns {string}
130
- */
131
85
  function getWorkerSrcFromCDN(version) {
132
86
  return `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${version}/pdf.worker.min.mjs`;
133
87
  }
134
88
  //#endregion
135
- //#region src/components/PdfViewer/PdfViewerPage.vue
89
+ //#region src/components/PdfViewer/PdfViewerPage.vue?vue&type=script&setup=true&lang.ts
136
90
  var _hoisted_1$1 = ["data-page-id", "data-page-number"];
137
91
  var _hoisted_2 = { class: "sd-pdf-viewer-page__canvas-wrapper" };
138
- var _sfc_main$2 = {
92
+ var PdfViewerPage_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
139
93
  __name: "PdfViewerPage",
140
94
  props: {
141
95
  config: {
@@ -163,7 +117,7 @@ var _sfc_main$2 = {
163
117
  default: 2
164
118
  },
165
119
  documentEl: {
166
- type: [Object],
120
+ type: Object,
167
121
  default: null
168
122
  }
169
123
  },
@@ -178,11 +132,11 @@ var _sfc_main$2 = {
178
132
  setup(__props, { emit: __emit }) {
179
133
  const emit = __emit;
180
134
  const props = __props;
181
- const viewport = require__plugin_vue_export_helper.shallowRef(null);
135
+ const viewport = require__plugin_vue_export_helper.shallowRef(createInitialViewport());
182
136
  const pageRef = require__plugin_vue_export_helper.ref(null);
183
137
  const canvasRef = require__plugin_vue_export_helper.ref(null);
184
138
  const textLayerRef = require__plugin_vue_export_helper.ref(null);
185
- let renderTask;
139
+ let renderTask = null;
186
140
  const pageIdx = require__plugin_vue_export_helper.computed(() => props.pages.findIndex((page) => page.pageId === props.page.pageId));
187
141
  const pageNumber = require__plugin_vue_export_helper.computed(() => {
188
142
  if (pageIdx.value === -1) return 0;
@@ -243,7 +197,9 @@ var _sfc_main$2 = {
243
197
  function onMouseUp() {
244
198
  const selection = window.getSelection();
245
199
  if (!selection || selection.toString().length === 0) return;
246
- const bounds = getSelectedTextBoundingBox(props.documentEl?.value ?? props.documentEl ?? pageRef.value);
200
+ const container = props.documentEl ?? pageRef.value;
201
+ if (!container) return;
202
+ const bounds = getSelectedTextBoundingBox(container);
247
203
  if (!bounds) return;
248
204
  emit("selection-raw", {
249
205
  selectionBounds: bounds,
@@ -254,7 +210,7 @@ var _sfc_main$2 = {
254
210
  }
255
211
  function onMouseDown(event) {
256
212
  if (!event?.target) return;
257
- if (event.target.tagName !== "SPAN") emit("bypass-selection", event);
213
+ if (!(event.target instanceof Element) || event.target.tagName !== "SPAN") emit("bypass-selection", event);
258
214
  }
259
215
  function getPagePtSize() {
260
216
  const factor = require_constants.PDF_TO_CSS_UNITS * props.outputScale;
@@ -278,16 +234,16 @@ var _sfc_main$2 = {
278
234
  function getScaleFactor() {
279
235
  return (props.scale ?? 1) * require_constants.PDF_TO_CSS_UNITS;
280
236
  }
281
- function setInitialViewport() {
237
+ function createInitialViewport() {
282
238
  const { pdfjsPage } = props.page;
283
- viewport.value = pdfjsPage.getViewport({ scale: require_constants.PDF_TO_CSS_UNITS * props.outputScale });
239
+ return pdfjsPage.getViewport({ scale: require_constants.PDF_TO_CSS_UNITS * props.outputScale });
284
240
  }
285
241
  async function renderPage() {
286
242
  if (renderTask) return;
287
243
  const canvasElem = canvasRef.value;
288
244
  if (!canvasElem || !viewport.value) return;
289
245
  const renderContext = {
290
- canvasContext: canvasElem.getContext("2d"),
246
+ canvas: canvasElem,
291
247
  viewport: viewport.value
292
248
  };
293
249
  try {
@@ -349,7 +305,6 @@ var _sfc_main$2 = {
349
305
  require__plugin_vue_export_helper.watch(() => props.scale, () => {
350
306
  renderTextLayer();
351
307
  });
352
- setInitialViewport();
353
308
  require__plugin_vue_export_helper.onMounted(() => {
354
309
  render();
355
310
  });
@@ -378,11 +333,13 @@ var _sfc_main$2 = {
378
333
  }, null, 512)) : require__plugin_vue_export_helper.createCommentVNode("", true)], 44, _hoisted_1$1);
379
334
  };
380
335
  }
381
- };
382
- var PdfViewerPage_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$2, [["__scopeId", "data-v-d7a9857d"]]);
336
+ });
383
337
  //#endregion
384
- //#region src/components/PdfViewer/PdfViewerDocument.vue
385
- var _sfc_main$1 = {
338
+ //#region src/components/PdfViewer/PdfViewerPage.vue
339
+ var PdfViewerPage_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(PdfViewerPage_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ba5c44f5"]]);
340
+ //#endregion
341
+ //#region src/components/PdfViewer/PdfViewerDocument.vue?vue&type=script&setup=true&lang.ts
342
+ var PdfViewerDocument_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
386
343
  __name: "PdfViewerDocument",
387
344
  props: {
388
345
  config: {
@@ -394,7 +351,10 @@ var _sfc_main$1 = {
394
351
  type: Array,
395
352
  required: true
396
353
  },
397
- scale: { type: Number },
354
+ scale: {
355
+ type: Number,
356
+ required: true
357
+ },
398
358
  hasTextLayer: {
399
359
  type: Boolean,
400
360
  default: false
@@ -451,12 +411,14 @@ var _sfc_main$1 = {
451
411
  }), 128))], 512)], 512);
452
412
  };
453
413
  }
454
- };
455
- var PdfViewerDocument_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main$1, [["__scopeId", "data-v-2152178b"]]);
414
+ });
456
415
  //#endregion
457
- //#region src/components/PdfViewer/PdfViewer.vue
416
+ //#region src/components/PdfViewer/PdfViewerDocument.vue
417
+ var PdfViewerDocument_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(PdfViewerDocument_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-92044cae"]]);
418
+ //#endregion
419
+ //#region src/components/PdfViewer/PdfViewer.vue?vue&type=script&setup=true&lang.ts
458
420
  var _hoisted_1 = { class: "sd-pdf-viewer__main" };
459
- var _sfc_main = {
421
+ var PdfViewer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ require__plugin_vue_export_helper.defineComponent({
460
422
  __name: "PdfViewer",
461
423
  props: {
462
424
  config: {
@@ -490,8 +452,13 @@ var _sfc_main = {
490
452
  setup(__props, { expose: __expose, emit: __emit }) {
491
453
  const emit = __emit;
492
454
  const props = __props;
455
+ function requirePdfLib(config) {
456
+ const { pdfLib } = config;
457
+ if (!pdfLib) throw new TypeError("PdfViewer requires modules.pdf.pdfLib");
458
+ return require__plugin_vue_export_helper.markRaw(pdfLib);
459
+ }
493
460
  const pdfConfig = createPDFConfig({
494
- pdfLib: require__plugin_vue_export_helper.markRaw(props.config.pdfLib),
461
+ pdfLib: requirePdfLib(props.config),
495
462
  workerSrc: props.config.workerSrc,
496
463
  setWorker: props.config.setWorker
497
464
  });
@@ -559,9 +526,11 @@ var _sfc_main = {
559
526
  try {
560
527
  const pdfjsPages = await pdfAdapter.getPages(pdfjsDocument, firstPageNum, lastPageNum);
561
528
  const mapPages = (pdfjsPage) => {
529
+ const currentPdf = pdf.value;
530
+ if (!currentPdf) throw new TypeError("PdfViewer has no document to map pages for");
562
531
  return {
563
- documentId: pdf.value.documentId,
564
- pageId: generatePageId(pdf.value.documentId, pdfjsPage.pageNumber),
532
+ documentId: currentPdf.documentId,
533
+ pageId: generatePageId(currentPdf.documentId, pdfjsPage.pageNumber),
565
534
  pageNumber: pdfjsPage.pageNumber,
566
535
  pageIsRendered: false,
567
536
  pdfjsPage: require__plugin_vue_export_helper.markRaw(pdfjsPage)
@@ -614,7 +583,9 @@ var _sfc_main = {
614
583
  }), null, 16)])], 512);
615
584
  };
616
585
  }
617
- };
618
- var PdfViewer_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(_sfc_main, [["__scopeId", "data-v-8708fac2"]]);
586
+ });
587
+ //#endregion
588
+ //#region src/components/PdfViewer/PdfViewer.vue
589
+ var PdfViewer_default = /* @__PURE__ */ require__plugin_vue_export_helper._plugin_vue_export_helper_default(PdfViewer_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-469cc3d8"]]);
619
590
  //#endregion
620
591
  exports.default = PdfViewer_default;
@@ -1,117 +1,75 @@
1
- import { B as renderList, F as openBlock, N as onMounted, T as mergeProps, W as shallowRef, a as computed, c as createCommentVNode, j as onBeforeUnmount, k as normalizeStyle, l as createElementBlock, n as Fragment, p as createVNode, s as createBlock, t as _plugin_vue_export_helper_default, tt as watch, u as createElementVNode, w as markRaw, z as ref } from "./_plugin-vue_export-helper-CsJQtMvr.es.js";
1
+ import { B as renderList, F as openBlock, N as onMounted, T as mergeProps, W as shallowRef, a as computed, c as createCommentVNode, h as defineComponent, j as onBeforeUnmount, k as normalizeStyle, l as createElementBlock, n as Fragment, p as createVNode, s as createBlock, t as _plugin_vue_export_helper_default, tt as watch, u as createElementVNode, w as markRaw, z as ref } from "./_plugin-vue_export-helper-CsJQtMvr.es.js";
2
2
  import { t as isFiniteNumber } from "./is-finite-number-BpL4F38c.es.js";
3
- import { t as PDF_TO_CSS_UNITS } from "./constants-B6VBlmKp.es.js";
4
- //#region src/core/pdf/helpers/floor.js
3
+ import { t as PDF_TO_CSS_UNITS } from "./constants-BvNs_ybI.es.js";
4
+ //#region src/core/pdf/helpers/floor.ts
5
5
  var floor = (val, precision) => {
6
6
  const multiplier = 10 ** (precision || 0);
7
7
  return Math.floor(val * multiplier) / multiplier;
8
8
  };
9
9
  //#endregion
10
- //#region src/core/pdf/helpers/read-file.js
10
+ //#region src/core/pdf/helpers/read-file.ts
11
11
  var readFileAsArrayBuffer = (blob) => {
12
12
  return new Promise((resolve, reject) => {
13
13
  const reader = new FileReader();
14
- reader.onload = (event) => resolve(event.target.result);
14
+ reader.onload = () => {
15
+ if (reader.result instanceof ArrayBuffer) resolve(reader.result);
16
+ else reject(/* @__PURE__ */ new TypeError("FileReader did not produce an ArrayBuffer"));
17
+ };
15
18
  reader.onerror = reject;
16
- reader.readAsDataURL(blob);
19
+ reader.readAsArrayBuffer(blob);
17
20
  });
18
21
  };
19
22
  //#endregion
20
- //#region src/core/pdf/helpers/range.js
23
+ //#region src/core/pdf/helpers/range.ts
21
24
  var range = (start, end) => {
22
25
  const length = end - start;
23
26
  return Array.from({ length }, (_, i) => start + i);
24
27
  };
25
28
  //#endregion
26
- //#region src/core/pdf/pdf-adapter.js
27
- /**
28
- * @typedef {import('pdfjs-dist').PDFDocumentProxy} PDFDocumentProxy
29
- * @typedef {import('pdfjs-dist').PDFPageProxy} PDFPageProxy
30
- */
31
- /**
32
- * @typedef {'pdfjs'} AdapterType
33
- */
34
- /**
35
- * @typedef {Object} PDFConfig
36
- * @property {AdapterType} adapter
37
- * @property {any} [pdfLib]
38
- * @property {string} [workerSrc]
39
- * @property {boolean} [setWorker]
40
- */
41
- /**
42
- * @typedef {Object} PDFJSConfig
43
- * @property {any} pdfLib
44
- * @property {string} [workerSrc]
45
- * @property {boolean} [setWorker]
46
- */
47
- /**
48
- * @typedef {Object} RenderPagesOptions
49
- * @property {string} documentId
50
- * @property {PDFDocumentProxy} pdfDocument
51
- * @property {HTMLElement} viewerContainer
52
- * @property {function(string, ...any): void} [emit]
53
- */
54
- /**
55
- * @typedef {Object} PageSize
56
- * @property {number} width
57
- * @property {number} height
58
- */
59
- /**
60
- * @param {Partial<PDFConfig>} [config]
61
- * @returns {PDFConfig}
62
- */
29
+ //#region src/core/pdf/pdf-adapter.ts
30
+ var isObjectLike = (value) => (typeof value === "object" || typeof value === "function") && value !== null;
31
+ var REQUIRES_PDFJS = "PDFJSAdapter requires a pdf.js module as pdfLib";
32
+ var hasDocumentLoader = (value) => isObjectLike(value) && "getDocument" in value && typeof value.getDocument === "function";
33
+ var requireWorkerOptions = (value) => {
34
+ if (isObjectLike(value) && "GlobalWorkerOptions" in value && isObjectLike(value.GlobalWorkerOptions)) return value.GlobalWorkerOptions;
35
+ throw new TypeError(REQUIRES_PDFJS);
36
+ };
37
+ var requireVersion = (value) => {
38
+ if (isObjectLike(value) && "version" in value && typeof value.version === "string") return value.version;
39
+ throw new TypeError(REQUIRES_PDFJS);
40
+ };
63
41
  var createPDFConfig = (config) => {
64
42
  return {
65
43
  adapter: "pdfjs",
66
44
  ...config
67
45
  };
68
46
  };
69
- /**
70
- * @abstract
71
- */
72
47
  var PDFAdapter = class PDFAdapter {
73
- /**
74
- * @throws {Error}
75
- */
76
48
  constructor() {
77
49
  if (Object.getPrototypeOf(this).constructor === PDFAdapter) throw new Error("Abstract class should not be instantiated");
78
50
  }
79
51
  };
80
52
  var PDFJSAdapter = class extends PDFAdapter {
81
- /**
82
- * @param {PDFJSConfig} config
83
- */
84
53
  constructor(config) {
85
54
  super();
86
55
  this.pdfLib = config.pdfLib;
87
56
  this.workerSrc = config.workerSrc;
88
- if (config.setWorker) if (this.workerSrc) this.pdfLib.GlobalWorkerOptions.workerSrc = config.workerSrc;
89
- else this.pdfLib.GlobalWorkerOptions.workerSrc = getWorkerSrcFromCDN(this.pdfLib.version);
57
+ if (config.setWorker) {
58
+ const workerOptions = requireWorkerOptions(this.pdfLib);
59
+ workerOptions.workerSrc = this.workerSrc || getWorkerSrcFromCDN(requireVersion(this.pdfLib));
60
+ }
90
61
  }
91
- /**
92
- * @param {string | ArrayBuffer | Uint8Array} file
93
- * @returns {Promise<PDFDocumentProxy>}
94
- */
95
62
  async getDocument(file) {
96
- return await this.pdfLib.getDocument(file).promise;
63
+ const pdfLib = this.pdfLib;
64
+ if (!hasDocumentLoader(pdfLib)) throw new TypeError(REQUIRES_PDFJS);
65
+ return pdfLib.getDocument(file).promise;
97
66
  }
98
- /**
99
- * @param {PDFDocumentProxy} pdf
100
- * @param {number} firstPage
101
- * @param {number} lastPage
102
- * @returns {Promise<PDFPageProxy[]>}
103
- */
104
67
  async getPages(pdf, firstPage, lastPage) {
105
68
  const pagesPromises = range(firstPage, lastPage + 1).map((num) => pdf.getPage(num));
106
69
  return await Promise.all(pagesPromises);
107
70
  }
108
71
  };
109
72
  var PDFAdapterFactory = class {
110
- /**
111
- * @param {PDFJSConfig & {adapter: AdapterType}} config
112
- * @returns {PDFAdapter}
113
- * @throws {Error}
114
- */
115
73
  static create(config) {
116
74
  const adapters = {
117
75
  pdfjs: () => {
@@ -124,18 +82,16 @@ var PDFAdapterFactory = class {
124
82
  return (adapters[config.adapter] ?? adapters.default)();
125
83
  }
126
84
  };
127
- /**
128
- * @param {number} version
129
- * @returns {string}
130
- */
131
85
  function getWorkerSrcFromCDN(version) {
132
86
  return `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${version}/pdf.worker.min.mjs`;
133
87
  }
134
88
  //#endregion
135
- //#region src/components/PdfViewer/PdfViewerPage.vue
89
+ //#region src/components/PdfViewer/PdfViewerPage.vue?vue&type=script&setup=true&lang.ts
136
90
  var _hoisted_1$1 = ["data-page-id", "data-page-number"];
137
91
  var _hoisted_2 = { class: "sd-pdf-viewer-page__canvas-wrapper" };
138
- var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
92
+ //#endregion
93
+ //#region src/components/PdfViewer/PdfViewerPage.vue
94
+ var PdfViewerPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
139
95
  __name: "PdfViewerPage",
140
96
  props: {
141
97
  config: {
@@ -163,7 +119,7 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
163
119
  default: 2
164
120
  },
165
121
  documentEl: {
166
- type: [Object],
122
+ type: Object,
167
123
  default: null
168
124
  }
169
125
  },
@@ -178,11 +134,11 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
178
134
  setup(__props, { emit: __emit }) {
179
135
  const emit = __emit;
180
136
  const props = __props;
181
- const viewport = shallowRef(null);
137
+ const viewport = shallowRef(createInitialViewport());
182
138
  const pageRef = ref(null);
183
139
  const canvasRef = ref(null);
184
140
  const textLayerRef = ref(null);
185
- let renderTask;
141
+ let renderTask = null;
186
142
  const pageIdx = computed(() => props.pages.findIndex((page) => page.pageId === props.page.pageId));
187
143
  const pageNumber = computed(() => {
188
144
  if (pageIdx.value === -1) return 0;
@@ -243,7 +199,9 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
243
199
  function onMouseUp() {
244
200
  const selection = window.getSelection();
245
201
  if (!selection || selection.toString().length === 0) return;
246
- const bounds = getSelectedTextBoundingBox(props.documentEl?.value ?? props.documentEl ?? pageRef.value);
202
+ const container = props.documentEl ?? pageRef.value;
203
+ if (!container) return;
204
+ const bounds = getSelectedTextBoundingBox(container);
247
205
  if (!bounds) return;
248
206
  emit("selection-raw", {
249
207
  selectionBounds: bounds,
@@ -254,7 +212,7 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
254
212
  }
255
213
  function onMouseDown(event) {
256
214
  if (!event?.target) return;
257
- if (event.target.tagName !== "SPAN") emit("bypass-selection", event);
215
+ if (!(event.target instanceof Element) || event.target.tagName !== "SPAN") emit("bypass-selection", event);
258
216
  }
259
217
  function getPagePtSize() {
260
218
  const factor = PDF_TO_CSS_UNITS * props.outputScale;
@@ -278,16 +236,16 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
278
236
  function getScaleFactor() {
279
237
  return (props.scale ?? 1) * PDF_TO_CSS_UNITS;
280
238
  }
281
- function setInitialViewport() {
239
+ function createInitialViewport() {
282
240
  const { pdfjsPage } = props.page;
283
- viewport.value = pdfjsPage.getViewport({ scale: PDF_TO_CSS_UNITS * props.outputScale });
241
+ return pdfjsPage.getViewport({ scale: PDF_TO_CSS_UNITS * props.outputScale });
284
242
  }
285
243
  async function renderPage() {
286
244
  if (renderTask) return;
287
245
  const canvasElem = canvasRef.value;
288
246
  if (!canvasElem || !viewport.value) return;
289
247
  const renderContext = {
290
- canvasContext: canvasElem.getContext("2d"),
248
+ canvas: canvasElem,
291
249
  viewport: viewport.value
292
250
  };
293
251
  try {
@@ -349,7 +307,6 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
349
307
  watch(() => props.scale, () => {
350
308
  renderTextLayer();
351
309
  });
352
- setInitialViewport();
353
310
  onMounted(() => {
354
311
  render();
355
312
  });
@@ -378,8 +335,10 @@ var PdfViewerPage_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
378
335
  }, null, 512)) : createCommentVNode("", true)], 44, _hoisted_1$1);
379
336
  };
380
337
  }
381
- }, [["__scopeId", "data-v-d7a9857d"]]);
382
- var PdfViewerDocument_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
338
+ }), [["__scopeId", "data-v-ba5c44f5"]]);
339
+ //#endregion
340
+ //#region src/components/PdfViewer/PdfViewerDocument.vue
341
+ var PdfViewerDocument_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
383
342
  __name: "PdfViewerDocument",
384
343
  props: {
385
344
  config: {
@@ -391,7 +350,10 @@ var PdfViewerDocument_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
391
350
  type: Array,
392
351
  required: true
393
352
  },
394
- scale: { type: Number },
353
+ scale: {
354
+ type: Number,
355
+ required: true
356
+ },
395
357
  hasTextLayer: {
396
358
  type: Boolean,
397
359
  default: false
@@ -448,11 +410,13 @@ var PdfViewerDocument_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
448
410
  }), 128))], 512)], 512);
449
411
  };
450
412
  }
451
- }, [["__scopeId", "data-v-2152178b"]]);
413
+ }), [["__scopeId", "data-v-92044cae"]]);
452
414
  //#endregion
453
- //#region src/components/PdfViewer/PdfViewer.vue
415
+ //#region src/components/PdfViewer/PdfViewer.vue?vue&type=script&setup=true&lang.ts
454
416
  var _hoisted_1 = { class: "sd-pdf-viewer__main" };
455
- var PdfViewer_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
417
+ //#endregion
418
+ //#region src/components/PdfViewer/PdfViewer.vue
419
+ var PdfViewer_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
456
420
  __name: "PdfViewer",
457
421
  props: {
458
422
  config: {
@@ -486,8 +450,13 @@ var PdfViewer_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
486
450
  setup(__props, { expose: __expose, emit: __emit }) {
487
451
  const emit = __emit;
488
452
  const props = __props;
453
+ function requirePdfLib(config) {
454
+ const { pdfLib } = config;
455
+ if (!pdfLib) throw new TypeError("PdfViewer requires modules.pdf.pdfLib");
456
+ return markRaw(pdfLib);
457
+ }
489
458
  const pdfConfig = createPDFConfig({
490
- pdfLib: markRaw(props.config.pdfLib),
459
+ pdfLib: requirePdfLib(props.config),
491
460
  workerSrc: props.config.workerSrc,
492
461
  setWorker: props.config.setWorker
493
462
  });
@@ -555,9 +524,11 @@ var PdfViewer_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
555
524
  try {
556
525
  const pdfjsPages = await pdfAdapter.getPages(pdfjsDocument, firstPageNum, lastPageNum);
557
526
  const mapPages = (pdfjsPage) => {
527
+ const currentPdf = pdf.value;
528
+ if (!currentPdf) throw new TypeError("PdfViewer has no document to map pages for");
558
529
  return {
559
- documentId: pdf.value.documentId,
560
- pageId: generatePageId(pdf.value.documentId, pdfjsPage.pageNumber),
530
+ documentId: currentPdf.documentId,
531
+ pageId: generatePageId(currentPdf.documentId, pdfjsPage.pageNumber),
561
532
  pageNumber: pdfjsPage.pageNumber,
562
533
  pageIsRendered: false,
563
534
  pdfjsPage: markRaw(pdfjsPage)
@@ -610,6 +581,6 @@ var PdfViewer_default = /*#__PURE__*/ _plugin_vue_export_helper_default({
610
581
  }), null, 16)])], 512);
611
582
  };
612
583
  }
613
- }, [["__scopeId", "data-v-8708fac2"]]);
584
+ }), [["__scopeId", "data-v-469cc3d8"]]);
614
585
  //#endregion
615
586
  export { PdfViewer_default as default };
@@ -1,4 +1,4 @@
1
- //#region src/core/pdf/helpers/constants.js
1
+ //#region src/core/pdf/helpers/constants.ts
2
2
  var PDF_TO_CSS_UNITS = 96 / 72;
3
3
  //#endregion
4
4
  Object.defineProperty(exports, "PDF_TO_CSS_UNITS", {
@@ -1,4 +1,4 @@
1
- //#region src/core/pdf/helpers/constants.js
1
+ //#region src/core/pdf/helpers/constants.ts
2
2
  var PDF_TO_CSS_UNITS = 96 / 72;
3
3
  //#endregion
4
4
  export { PDF_TO_CSS_UNITS as t };