@harbour-enterprises/superdoc 1.0.0-beta.79 → 1.0.0-beta.80
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/dist/chunks/{PdfViewer-DLPMtoVD.es.js → PdfViewer-Cl8-bF2d.es.js} +1 -1
- package/dist/chunks/{PdfViewer-Dn5MoKhX.cjs → PdfViewer-otVXTOCF.cjs} +1 -1
- package/dist/chunks/{index-X_javC2m.es.js → index-Da8gsiup.es.js} +3 -3
- package/dist/chunks/{index-DLvHMUJi.cjs → index-DvRDR0Q1.cjs} +3 -3
- package/dist/chunks/{index-lIKPN00V-Bn76jN3g.es.js → index-dhmURjT9-C4FbtHG8.es.js} +1 -1
- package/dist/chunks/{index-lIKPN00V-dYKYHttm.cjs → index-dhmURjT9-eBXRY_y8.cjs} +1 -1
- package/dist/chunks/{super-editor.es-37HP4-SX.cjs → super-editor.es-BPfJzTNn.cjs} +50 -8
- package/dist/chunks/{super-editor.es-eQ24GmlY.es.js → super-editor.es-Bo6Jt_tq.es.js} +50 -8
- package/dist/style.css +6 -6
- package/dist/super-editor/ai-writer.es.js +2 -2
- package/dist/super-editor/chunks/{converter-DqebDh5Y.js → converter-Cww1mCyd.js} +1 -1
- package/dist/super-editor/chunks/{docx-zipper-DNBbqIUN.js → docx-zipper-BlOp_CYx.js} +1 -1
- package/dist/super-editor/chunks/{editor-BHqPITqs.js → editor-D3MjMYeX.js} +38 -8
- package/dist/super-editor/chunks/{index-lIKPN00V.js → index-dhmURjT9.js} +1 -1
- package/dist/super-editor/chunks/{toolbar-gYGrkDSx.js → toolbar-CuJJlHlv.js} +2 -2
- package/dist/super-editor/converter.es.js +1 -1
- package/dist/super-editor/docx-zipper.es.js +2 -2
- package/dist/super-editor/editor.es.js +3 -3
- package/dist/super-editor/file-zipper.es.js +1 -1
- package/dist/super-editor/style.css +6 -6
- package/dist/super-editor/super-editor.es.js +19 -7
- package/dist/super-editor/toolbar.es.js +2 -2
- package/dist/super-editor.cjs +1 -1
- package/dist/super-editor.es.js +1 -1
- package/dist/superdoc.cjs +2 -2
- package/dist/superdoc.es.js +2 -2
- package/dist/superdoc.umd.js +52 -10
- package/dist/superdoc.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { y as defineComponent, z as h, O as Transition, a0 as process$1, J as watchEffect, a as computed, r as ref, j as onMounted, W as onUnmounted, b as createElementBlock, o as openBlock, f as createBaseVNode, e as createCommentVNode, u as createVNode, v as unref } from "./vue-Dysv_7z5.es.js";
|
|
2
|
-
import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-
|
|
2
|
+
import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-Da8gsiup.es.js";
|
|
3
3
|
function self(vars) {
|
|
4
4
|
const {
|
|
5
5
|
opacityDisabled,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const vue = require("./vue-jWLMl8Ts.cjs");
|
|
4
|
-
const superdoc = require("./index-
|
|
4
|
+
const superdoc = require("./index-DvRDR0Q1.cjs");
|
|
5
5
|
function self(vars) {
|
|
6
6
|
const {
|
|
7
7
|
opacityDisabled,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { q as index, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, P as PresentationEditor, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-
|
|
1
|
+
import { q as index, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, P as PresentationEditor, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-Bo6Jt_tq.es.js";
|
|
2
2
|
import { B as BlankDOCX } from "./blank-docx-ABm6XYAA.es.js";
|
|
3
3
|
import { E as EventEmitter } from "./eventemitter3-CcXAdeql.es.js";
|
|
4
4
|
import { HocuspocusProvider, HocuspocusProviderWebsocket } from "@hocuspocus/provider";
|
|
@@ -17251,7 +17251,7 @@ const _sfc_main = {
|
|
|
17251
17251
|
__name: "SuperDoc",
|
|
17252
17252
|
emits: ["selection-update"],
|
|
17253
17253
|
setup(__props, { emit: __emit }) {
|
|
17254
|
-
const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-
|
|
17254
|
+
const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-Cl8-bF2d.es.js"));
|
|
17255
17255
|
const superdocStore = useSuperdocStore();
|
|
17256
17256
|
const commentsStore = useCommentsStore();
|
|
17257
17257
|
const {
|
|
@@ -18140,7 +18140,7 @@ class SuperDoc extends EventEmitter {
|
|
|
18140
18140
|
this.config.colors = shuffleArray(this.config.colors);
|
|
18141
18141
|
this.userColorMap = /* @__PURE__ */ new Map();
|
|
18142
18142
|
this.colorIndex = 0;
|
|
18143
|
-
this.version = "1.0.0-beta.
|
|
18143
|
+
this.version = "1.0.0-beta.80";
|
|
18144
18144
|
this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
|
|
18145
18145
|
this.superdocId = config.superdocId || v4();
|
|
18146
18146
|
this.colors = this.config.colors;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const superEditor_es = require("./super-editor.es-
|
|
2
|
+
const superEditor_es = require("./super-editor.es-BPfJzTNn.cjs");
|
|
3
3
|
const blankDocx = require("./blank-docx-DfW3Eeh2.cjs");
|
|
4
4
|
const eventemitter3 = require("./eventemitter3-DQmQUge-.cjs");
|
|
5
5
|
const provider = require("@hocuspocus/provider");
|
|
@@ -17268,7 +17268,7 @@ const _sfc_main = {
|
|
|
17268
17268
|
__name: "SuperDoc",
|
|
17269
17269
|
emits: ["selection-update"],
|
|
17270
17270
|
setup(__props, { emit: __emit }) {
|
|
17271
|
-
const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-
|
|
17271
|
+
const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-otVXTOCF.cjs")));
|
|
17272
17272
|
const superdocStore = useSuperdocStore();
|
|
17273
17273
|
const commentsStore = useCommentsStore();
|
|
17274
17274
|
const {
|
|
@@ -18157,7 +18157,7 @@ class SuperDoc extends eventemitter3.EventEmitter {
|
|
|
18157
18157
|
this.config.colors = shuffleArray(this.config.colors);
|
|
18158
18158
|
this.userColorMap = /* @__PURE__ */ new Map();
|
|
18159
18159
|
this.colorIndex = 0;
|
|
18160
|
-
this.version = "1.0.0-beta.
|
|
18160
|
+
this.version = "1.0.0-beta.80";
|
|
18161
18161
|
this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
|
|
18162
18162
|
this.superdocId = config.superdocId || uuid.v4();
|
|
18163
18163
|
this.colors = this.config.colors;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const superEditor_es = require("./super-editor.es-
|
|
3
|
+
const superEditor_es = require("./super-editor.es-BPfJzTNn.cjs");
|
|
4
4
|
const indexCvBqQJbG = require("./index-CvBqQJbG-Dwm0THD7.cjs");
|
|
5
5
|
function bail(error) {
|
|
6
6
|
if (error) {
|
|
@@ -42326,7 +42326,7 @@ const _SuperConverter = class _SuperConverter2 {
|
|
|
42326
42326
|
static getStoredSuperdocVersion(docx) {
|
|
42327
42327
|
return _SuperConverter2.getStoredCustomProperty(docx, "SuperdocVersion");
|
|
42328
42328
|
}
|
|
42329
|
-
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.
|
|
42329
|
+
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.80") {
|
|
42330
42330
|
return _SuperConverter2.setStoredCustomProperty(docx, "SuperdocVersion", version2, false);
|
|
42331
42331
|
}
|
|
42332
42332
|
/**
|
|
@@ -59515,7 +59515,7 @@ const isHeadless = (editor) => {
|
|
|
59515
59515
|
const shouldSkipNodeView = (editor) => {
|
|
59516
59516
|
return isHeadless(editor);
|
|
59517
59517
|
};
|
|
59518
|
-
const summaryVersion = "1.0.0-beta.
|
|
59518
|
+
const summaryVersion = "1.0.0-beta.80";
|
|
59519
59519
|
const nodeKeys = ["group", "content", "marks", "inline", "atom", "defining", "code", "tableRole", "summary"];
|
|
59520
59520
|
const markKeys = ["group", "inclusive", "excludes", "spanning", "code"];
|
|
59521
59521
|
function mapAttributes(attrs) {
|
|
@@ -60304,7 +60304,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
60304
60304
|
{ default: remarkStringify },
|
|
60305
60305
|
{ default: remarkGfm }
|
|
60306
60306
|
] = await Promise.all([
|
|
60307
|
-
Promise.resolve().then(() => require("./index-
|
|
60307
|
+
Promise.resolve().then(() => require("./index-dhmURjT9-eBXRY_y8.cjs")),
|
|
60308
60308
|
Promise.resolve().then(() => require("./index-DRCvimau-H4Ck3S9a.cjs")),
|
|
60309
60309
|
Promise.resolve().then(() => require("./index-C_x_N6Uh-Db3CUJMX.cjs")),
|
|
60310
60310
|
Promise.resolve().then(() => require("./index-D_sWOSiG-BtDZzJ6I.cjs")),
|
|
@@ -60509,7 +60509,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
60509
60509
|
* Process collaboration migrations
|
|
60510
60510
|
*/
|
|
60511
60511
|
processCollaborationMigrations() {
|
|
60512
|
-
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.
|
|
60512
|
+
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.80");
|
|
60513
60513
|
if (!this.options.ydoc) return;
|
|
60514
60514
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
60515
60515
|
let docVersion = metaMap.get("version");
|
|
@@ -72207,6 +72207,9 @@ const MAX_HREF_LENGTH = 2048;
|
|
|
72207
72207
|
const SAFE_ANCHOR_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
72208
72208
|
const MAX_DATA_URL_LENGTH = 10 * 1024 * 1024;
|
|
72209
72209
|
const VALID_IMAGE_DATA_URL = /^data:image\/(png|jpeg|jpg|gif|svg\+xml|webp|bmp|ico|tiff?);base64,/i;
|
|
72210
|
+
const MAX_RESIZE_MULTIPLIER = 3;
|
|
72211
|
+
const FALLBACK_MAX_DIMENSION = 1e3;
|
|
72212
|
+
const MIN_IMAGE_DIMENSION = 20;
|
|
72210
72213
|
const AMBIGUOUS_LINK_PATTERNS = /^(click here|read more|more|link|here|this|download|view)$/i;
|
|
72211
72214
|
const TRACK_CHANGE_BASE_CLASS = {
|
|
72212
72215
|
insert: "track-insert-dec",
|
|
@@ -74153,14 +74156,25 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74153
74156
|
* - Only allows safe image MIME types (png, jpeg, gif, etc.) with base64 encoding
|
|
74154
74157
|
* - Non-data URLs are sanitized through sanitizeUrl to prevent XSS
|
|
74155
74158
|
*
|
|
74159
|
+
* METADATA ATTRIBUTE:
|
|
74160
|
+
* - Adds `data-image-metadata` attribute to enable interactive resizing via ImageResizeOverlay
|
|
74161
|
+
* - Metadata includes: originalWidth, originalHeight, aspectRatio, min/max dimensions
|
|
74162
|
+
* - Only added when run.width > 0 && run.height > 0 to prevent invalid metadata
|
|
74163
|
+
* - Max dimensions: 3x original size or 1000px (whichever is larger)
|
|
74164
|
+
* - Min dimensions: 20px to ensure visibility and interactivity
|
|
74165
|
+
*
|
|
74156
74166
|
* @param run - The ImageRun to render containing image source, dimensions, and spacing
|
|
74157
74167
|
* @returns HTMLElement (img) or null if src is missing or invalid
|
|
74158
74168
|
*
|
|
74159
74169
|
* @example
|
|
74160
74170
|
* ```typescript
|
|
74161
|
-
* // Valid data URL
|
|
74171
|
+
* // Valid data URL with metadata
|
|
74162
74172
|
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 100, height: 100 })
|
|
74163
|
-
* // Returns: <img> element
|
|
74173
|
+
* // Returns: <img> element with data-image-metadata attribute
|
|
74174
|
+
*
|
|
74175
|
+
* // Invalid dimensions - no metadata
|
|
74176
|
+
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 0, height: 0 })
|
|
74177
|
+
* // Returns: <img> element WITHOUT data-image-metadata attribute
|
|
74164
74178
|
*
|
|
74165
74179
|
* // Invalid MIME type
|
|
74166
74180
|
* renderImageRun({ kind: 'image', src: 'data:text/html;base64,PHNjcmlwdD4...', width: 100, height: 100 })
|
|
@@ -74168,7 +74182,7 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74168
74182
|
*
|
|
74169
74183
|
* // HTTP URL
|
|
74170
74184
|
* renderImageRun({ kind: 'image', src: 'https://example.com/image.png', width: 100, height: 100 })
|
|
74171
|
-
* // Returns: <img> element (after sanitization)
|
|
74185
|
+
* // Returns: <img> element (after sanitization) with data-image-metadata attribute
|
|
74172
74186
|
* ```
|
|
74173
74187
|
*/
|
|
74174
74188
|
renderImageRun(run2) {
|
|
@@ -74196,6 +74210,22 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74196
74210
|
}
|
|
74197
74211
|
img.width = run2.width;
|
|
74198
74212
|
img.height = run2.height;
|
|
74213
|
+
if (run2.width > 0 && run2.height > 0) {
|
|
74214
|
+
const aspectRatio = run2.width / run2.height;
|
|
74215
|
+
const inlineImageMetadata = {
|
|
74216
|
+
originalWidth: run2.width,
|
|
74217
|
+
originalHeight: run2.height,
|
|
74218
|
+
// Max dimensions: MAX_RESIZE_MULTIPLIER x original size or FALLBACK_MAX_DIMENSION, whichever is larger
|
|
74219
|
+
// This provides generous constraints while preventing excessive scaling
|
|
74220
|
+
maxWidth: Math.max(run2.width * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
74221
|
+
maxHeight: Math.max(run2.height * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
74222
|
+
aspectRatio,
|
|
74223
|
+
// Min dimensions: MIN_IMAGE_DIMENSION to ensure images remain visible and interactive
|
|
74224
|
+
minWidth: MIN_IMAGE_DIMENSION,
|
|
74225
|
+
minHeight: MIN_IMAGE_DIMENSION
|
|
74226
|
+
};
|
|
74227
|
+
img.setAttribute("data-image-metadata", JSON.stringify(inlineImageMetadata));
|
|
74228
|
+
}
|
|
74199
74229
|
img.alt = run2.alt ?? "";
|
|
74200
74230
|
if (run2.title) {
|
|
74201
74231
|
img.title = run2.title;
|
|
@@ -124991,6 +125021,12 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
124991
125021
|
};
|
|
124992
125022
|
const updateImageResizeOverlay = (event) => {
|
|
124993
125023
|
if (!editorElem.value) return;
|
|
125024
|
+
if (!(event.target instanceof Element)) {
|
|
125025
|
+
imageResizeState.visible = false;
|
|
125026
|
+
imageResizeState.imageElement = null;
|
|
125027
|
+
imageResizeState.blockId = null;
|
|
125028
|
+
return;
|
|
125029
|
+
}
|
|
124994
125030
|
let target = event.target;
|
|
124995
125031
|
while (target && target !== document.body) {
|
|
124996
125032
|
if (target.classList?.contains("superdoc-image-resize-overlay") || target.closest?.(".superdoc-image-resize-overlay")) {
|
|
@@ -125002,6 +125038,12 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
125002
125038
|
imageResizeState.blockId = target.getAttribute("data-sd-block-id");
|
|
125003
125039
|
return;
|
|
125004
125040
|
}
|
|
125041
|
+
if (target.classList?.contains("superdoc-inline-image") && target.hasAttribute("data-image-metadata")) {
|
|
125042
|
+
imageResizeState.visible = true;
|
|
125043
|
+
imageResizeState.imageElement = target;
|
|
125044
|
+
imageResizeState.blockId = target.getAttribute("data-pm-start");
|
|
125045
|
+
return;
|
|
125046
|
+
}
|
|
125005
125047
|
target = target.parentElement;
|
|
125006
125048
|
}
|
|
125007
125049
|
imageResizeState.visible = false;
|
|
@@ -125381,7 +125423,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
125381
125423
|
};
|
|
125382
125424
|
}
|
|
125383
125425
|
});
|
|
125384
|
-
const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
|
125426
|
+
const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-209a1e8b"]]);
|
|
125385
125427
|
const _hoisted_1 = ["innerHTML"];
|
|
125386
125428
|
const _sfc_main = {
|
|
125387
125429
|
__name: "SuperInput",
|
|
@@ -42309,7 +42309,7 @@ const _SuperConverter = class _SuperConverter2 {
|
|
|
42309
42309
|
static getStoredSuperdocVersion(docx) {
|
|
42310
42310
|
return _SuperConverter2.getStoredCustomProperty(docx, "SuperdocVersion");
|
|
42311
42311
|
}
|
|
42312
|
-
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.
|
|
42312
|
+
static setStoredSuperdocVersion(docx = this.convertedXml, version2 = "1.0.0-beta.80") {
|
|
42313
42313
|
return _SuperConverter2.setStoredCustomProperty(docx, "SuperdocVersion", version2, false);
|
|
42314
42314
|
}
|
|
42315
42315
|
/**
|
|
@@ -59498,7 +59498,7 @@ const isHeadless = (editor) => {
|
|
|
59498
59498
|
const shouldSkipNodeView = (editor) => {
|
|
59499
59499
|
return isHeadless(editor);
|
|
59500
59500
|
};
|
|
59501
|
-
const summaryVersion = "1.0.0-beta.
|
|
59501
|
+
const summaryVersion = "1.0.0-beta.80";
|
|
59502
59502
|
const nodeKeys = ["group", "content", "marks", "inline", "atom", "defining", "code", "tableRole", "summary"];
|
|
59503
59503
|
const markKeys = ["group", "inclusive", "excludes", "spanning", "code"];
|
|
59504
59504
|
function mapAttributes(attrs) {
|
|
@@ -60287,7 +60287,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
60287
60287
|
{ default: remarkStringify },
|
|
60288
60288
|
{ default: remarkGfm }
|
|
60289
60289
|
] = await Promise.all([
|
|
60290
|
-
import("./index-
|
|
60290
|
+
import("./index-dhmURjT9-C4FbtHG8.es.js"),
|
|
60291
60291
|
import("./index-DRCvimau-Cw339678.es.js"),
|
|
60292
60292
|
import("./index-C_x_N6Uh-DJn8hIEt.es.js"),
|
|
60293
60293
|
import("./index-D_sWOSiG-DE96TaT5.es.js"),
|
|
@@ -60492,7 +60492,7 @@ const _Editor = class _Editor2 extends EventEmitter$1 {
|
|
|
60492
60492
|
* Process collaboration migrations
|
|
60493
60493
|
*/
|
|
60494
60494
|
processCollaborationMigrations() {
|
|
60495
|
-
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.
|
|
60495
|
+
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.80");
|
|
60496
60496
|
if (!this.options.ydoc) return;
|
|
60497
60497
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
60498
60498
|
let docVersion = metaMap.get("version");
|
|
@@ -72190,6 +72190,9 @@ const MAX_HREF_LENGTH = 2048;
|
|
|
72190
72190
|
const SAFE_ANCHOR_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
72191
72191
|
const MAX_DATA_URL_LENGTH = 10 * 1024 * 1024;
|
|
72192
72192
|
const VALID_IMAGE_DATA_URL = /^data:image\/(png|jpeg|jpg|gif|svg\+xml|webp|bmp|ico|tiff?);base64,/i;
|
|
72193
|
+
const MAX_RESIZE_MULTIPLIER = 3;
|
|
72194
|
+
const FALLBACK_MAX_DIMENSION = 1e3;
|
|
72195
|
+
const MIN_IMAGE_DIMENSION = 20;
|
|
72193
72196
|
const AMBIGUOUS_LINK_PATTERNS = /^(click here|read more|more|link|here|this|download|view)$/i;
|
|
72194
72197
|
const TRACK_CHANGE_BASE_CLASS = {
|
|
72195
72198
|
insert: "track-insert-dec",
|
|
@@ -74136,14 +74139,25 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74136
74139
|
* - Only allows safe image MIME types (png, jpeg, gif, etc.) with base64 encoding
|
|
74137
74140
|
* - Non-data URLs are sanitized through sanitizeUrl to prevent XSS
|
|
74138
74141
|
*
|
|
74142
|
+
* METADATA ATTRIBUTE:
|
|
74143
|
+
* - Adds `data-image-metadata` attribute to enable interactive resizing via ImageResizeOverlay
|
|
74144
|
+
* - Metadata includes: originalWidth, originalHeight, aspectRatio, min/max dimensions
|
|
74145
|
+
* - Only added when run.width > 0 && run.height > 0 to prevent invalid metadata
|
|
74146
|
+
* - Max dimensions: 3x original size or 1000px (whichever is larger)
|
|
74147
|
+
* - Min dimensions: 20px to ensure visibility and interactivity
|
|
74148
|
+
*
|
|
74139
74149
|
* @param run - The ImageRun to render containing image source, dimensions, and spacing
|
|
74140
74150
|
* @returns HTMLElement (img) or null if src is missing or invalid
|
|
74141
74151
|
*
|
|
74142
74152
|
* @example
|
|
74143
74153
|
* ```typescript
|
|
74144
|
-
* // Valid data URL
|
|
74154
|
+
* // Valid data URL with metadata
|
|
74145
74155
|
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 100, height: 100 })
|
|
74146
|
-
* // Returns: <img> element
|
|
74156
|
+
* // Returns: <img> element with data-image-metadata attribute
|
|
74157
|
+
*
|
|
74158
|
+
* // Invalid dimensions - no metadata
|
|
74159
|
+
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 0, height: 0 })
|
|
74160
|
+
* // Returns: <img> element WITHOUT data-image-metadata attribute
|
|
74147
74161
|
*
|
|
74148
74162
|
* // Invalid MIME type
|
|
74149
74163
|
* renderImageRun({ kind: 'image', src: 'data:text/html;base64,PHNjcmlwdD4...', width: 100, height: 100 })
|
|
@@ -74151,7 +74165,7 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74151
74165
|
*
|
|
74152
74166
|
* // HTTP URL
|
|
74153
74167
|
* renderImageRun({ kind: 'image', src: 'https://example.com/image.png', width: 100, height: 100 })
|
|
74154
|
-
* // Returns: <img> element (after sanitization)
|
|
74168
|
+
* // Returns: <img> element (after sanitization) with data-image-metadata attribute
|
|
74155
74169
|
* ```
|
|
74156
74170
|
*/
|
|
74157
74171
|
renderImageRun(run2) {
|
|
@@ -74179,6 +74193,22 @@ const _DomPainter = class _DomPainter2 {
|
|
|
74179
74193
|
}
|
|
74180
74194
|
img.width = run2.width;
|
|
74181
74195
|
img.height = run2.height;
|
|
74196
|
+
if (run2.width > 0 && run2.height > 0) {
|
|
74197
|
+
const aspectRatio = run2.width / run2.height;
|
|
74198
|
+
const inlineImageMetadata = {
|
|
74199
|
+
originalWidth: run2.width,
|
|
74200
|
+
originalHeight: run2.height,
|
|
74201
|
+
// Max dimensions: MAX_RESIZE_MULTIPLIER x original size or FALLBACK_MAX_DIMENSION, whichever is larger
|
|
74202
|
+
// This provides generous constraints while preventing excessive scaling
|
|
74203
|
+
maxWidth: Math.max(run2.width * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
74204
|
+
maxHeight: Math.max(run2.height * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
74205
|
+
aspectRatio,
|
|
74206
|
+
// Min dimensions: MIN_IMAGE_DIMENSION to ensure images remain visible and interactive
|
|
74207
|
+
minWidth: MIN_IMAGE_DIMENSION,
|
|
74208
|
+
minHeight: MIN_IMAGE_DIMENSION
|
|
74209
|
+
};
|
|
74210
|
+
img.setAttribute("data-image-metadata", JSON.stringify(inlineImageMetadata));
|
|
74211
|
+
}
|
|
74182
74212
|
img.alt = run2.alt ?? "";
|
|
74183
74213
|
if (run2.title) {
|
|
74184
74214
|
img.title = run2.title;
|
|
@@ -124974,6 +125004,12 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
124974
125004
|
};
|
|
124975
125005
|
const updateImageResizeOverlay = (event) => {
|
|
124976
125006
|
if (!editorElem.value) return;
|
|
125007
|
+
if (!(event.target instanceof Element)) {
|
|
125008
|
+
imageResizeState.visible = false;
|
|
125009
|
+
imageResizeState.imageElement = null;
|
|
125010
|
+
imageResizeState.blockId = null;
|
|
125011
|
+
return;
|
|
125012
|
+
}
|
|
124977
125013
|
let target = event.target;
|
|
124978
125014
|
while (target && target !== document.body) {
|
|
124979
125015
|
if (target.classList?.contains("superdoc-image-resize-overlay") || target.closest?.(".superdoc-image-resize-overlay")) {
|
|
@@ -124985,6 +125021,12 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
124985
125021
|
imageResizeState.blockId = target.getAttribute("data-sd-block-id");
|
|
124986
125022
|
return;
|
|
124987
125023
|
}
|
|
125024
|
+
if (target.classList?.contains("superdoc-inline-image") && target.hasAttribute("data-image-metadata")) {
|
|
125025
|
+
imageResizeState.visible = true;
|
|
125026
|
+
imageResizeState.imageElement = target;
|
|
125027
|
+
imageResizeState.blockId = target.getAttribute("data-pm-start");
|
|
125028
|
+
return;
|
|
125029
|
+
}
|
|
124988
125030
|
target = target.parentElement;
|
|
124989
125031
|
}
|
|
124990
125032
|
imageResizeState.visible = false;
|
|
@@ -125364,7 +125406,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
125364
125406
|
};
|
|
125365
125407
|
}
|
|
125366
125408
|
});
|
|
125367
|
-
const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
|
125409
|
+
const SuperEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-209a1e8b"]]);
|
|
125368
125410
|
const _hoisted_1 = ["innerHTML"];
|
|
125369
125411
|
const _sfc_main = {
|
|
125370
125412
|
__name: "SuperInput",
|
package/dist/style.css
CHANGED
|
@@ -2330,10 +2330,10 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
|
|
|
2330
2330
|
box-shadow: 0 0 4px rgba(74, 144, 226, 0.5);
|
|
2331
2331
|
}
|
|
2332
2332
|
|
|
2333
|
-
.editor-element[data-v-
|
|
2333
|
+
.editor-element[data-v-209a1e8b] {
|
|
2334
2334
|
position: relative;
|
|
2335
2335
|
}
|
|
2336
|
-
.super-editor-container[data-v-
|
|
2336
|
+
.super-editor-container[data-v-209a1e8b] {
|
|
2337
2337
|
width: auto;
|
|
2338
2338
|
height: auto;
|
|
2339
2339
|
min-width: 8in;
|
|
@@ -2342,14 +2342,14 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
|
|
|
2342
2342
|
display: flex;
|
|
2343
2343
|
flex-direction: column;
|
|
2344
2344
|
}
|
|
2345
|
-
.ruler[data-v-
|
|
2345
|
+
.ruler[data-v-209a1e8b] {
|
|
2346
2346
|
margin-bottom: 2px;
|
|
2347
2347
|
}
|
|
2348
|
-
.super-editor[data-v-
|
|
2348
|
+
.super-editor[data-v-209a1e8b] {
|
|
2349
2349
|
color: initial;
|
|
2350
2350
|
overflow: hidden;
|
|
2351
2351
|
}
|
|
2352
|
-
.placeholder-editor[data-v-
|
|
2352
|
+
.placeholder-editor[data-v-209a1e8b] {
|
|
2353
2353
|
position: absolute;
|
|
2354
2354
|
top: 0;
|
|
2355
2355
|
left: 0;
|
|
@@ -2361,7 +2361,7 @@ https://github.com/ProseMirror/prosemirror-tables/blob/master/demo/index.html
|
|
|
2361
2361
|
background-color: white;
|
|
2362
2362
|
box-sizing: border-box;
|
|
2363
2363
|
}
|
|
2364
|
-
.placeholder-title[data-v-
|
|
2364
|
+
.placeholder-title[data-v-209a1e8b] {
|
|
2365
2365
|
display: flex;
|
|
2366
2366
|
justify-content: center;
|
|
2367
2367
|
margin-bottom: 40px;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, onMounted, onUnmounted, computed, createElementBlock, openBlock, withModifiers, createElementVNode, withDirectives, unref, vModelText, createCommentVNode, nextTick } from "vue";
|
|
2
|
-
import { T as TextSelection } from "./chunks/converter-
|
|
3
|
-
import { _ as _export_sfc } from "./chunks/editor-
|
|
2
|
+
import { T as TextSelection } from "./chunks/converter-Cww1mCyd.js";
|
|
3
|
+
import { _ as _export_sfc } from "./chunks/editor-D3MjMYeX.js";
|
|
4
4
|
const DEFAULT_API_ENDPOINT = "https://sd-dev-express-gateway-i6xtm.ondigitalocean.app/insights";
|
|
5
5
|
const SYSTEM_PROMPT = "You are an expert copywriter and you are immersed in a document editor. You are to provide document related text responses based on the user prompts. Only write what is asked for. Do not provide explanations. Try to keep placeholders as short as possible. Do not output your prompt. Your instructions are: ";
|
|
6
6
|
async function baseInsightsFetch(payload, options = {}) {
|
|
@@ -42626,7 +42626,7 @@ const _SuperConverter = class _SuperConverter {
|
|
|
42626
42626
|
static getStoredSuperdocVersion(docx) {
|
|
42627
42627
|
return _SuperConverter.getStoredCustomProperty(docx, "SuperdocVersion");
|
|
42628
42628
|
}
|
|
42629
|
-
static setStoredSuperdocVersion(docx = this.convertedXml, version = "1.0.0-beta.
|
|
42629
|
+
static setStoredSuperdocVersion(docx = this.convertedXml, version = "1.0.0-beta.80") {
|
|
42630
42630
|
return _SuperConverter.setStoredCustomProperty(docx, "SuperdocVersion", version, false);
|
|
42631
42631
|
}
|
|
42632
42632
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as process$1, aJ as commonjsGlobal, B as Buffer, aK as getDefaultExportFromCjs, aL as getContentTypesFromXml, aM as xmljs } from "./converter-
|
|
1
|
+
import { p as process$1, aJ as commonjsGlobal, B as Buffer, aK as getDefaultExportFromCjs, aL as getContentTypesFromXml, aM as xmljs } from "./converter-Cww1mCyd.js";
|
|
2
2
|
function commonjsRequire(path) {
|
|
3
3
|
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
|
|
4
4
|
}
|
|
@@ -12,8 +12,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
12
12
|
var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, dispatchWithFallback_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, getPluginKeyName_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, checkFonts_fn, determineUnsupportedFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _map, _editor2, _descriptors, _collections, _editorEntries, _maxCachedEditors, _editorAccessOrder, _pendingCreations, _cacheHits, _cacheMisses, _evictions, _HeaderFooterEditorManager_instances, hasConverter_fn, extractCollections_fn, collectDescriptors_fn, teardownMissingEditors_fn, teardownEditors_fn, createEditor_fn, createEditorContainer_fn, registerConverterEditor_fn, unregisterConverterEditor_fn, updateAccessOrder_fn, enforceCacheSizeLimit_fn, _manager, _mediaFiles, _blockCache, _HeaderFooterLayoutAdapter_instances, getBlocks_fn, getConverterContext_fn, _selectionOverlay, _activeEditorHost, _activeDecorationContainer, _activeRegion, _borderLine, _dimmingOverlay, _EditorOverlayManager_instances, findDecorationContainer_fn, ensureEditorHost_fn, positionEditorHost_fn, hideDimmingOverlay_fn, showHeaderFooterBorder_fn, hideHeaderFooterBorder_fn, _instances, _options, _editor3, _visibleHost, _viewportHost, _painterHost, _selectionOverlay2, _hiddenHost, _layoutOptions, _layoutState, _domPainter, _dragHandlerCleanup, _layoutError, _layoutErrorState, _errorBanner, _errorBannerMessage, _telemetryEmitter, _renderScheduled, _pendingDocChange, _isRerendering, _selectionUpdateScheduled, _remoteCursorUpdateScheduled, _rafHandle, _editorListeners, _sectionMetadata, _documentMode, _inputBridge, _trackedChangesMode, _trackedChangesEnabled, _trackedChangesOverrides, _headerFooterManager, _headerFooterAdapter, _headerFooterIdentifier, _multiSectionIdentifier, _headerLayoutResults, _footerLayoutResults, _headerLayoutsByRId, _footerLayoutsByRId, _headerDecorationProvider, _footerDecorationProvider, _headerFooterManagerCleanups, _headerRegions, _footerRegions, _session, _activeHeaderFooterEditor, _overlayManager, _hoverOverlay, _hoverTooltip, _modeBanner, _ariaLiveRegion, _hoverRegion, _clickCount, _lastClickTime, _lastClickPosition, _lastSelectedImageBlockId, _dragAnchor, _isDragging, _dragExtensionMode, _remoteCursorState, _remoteCursorElements, _remoteCursorDirty, _remoteCursorOverlay, _localSelectionLayer, _awarenessCleanup, _scrollCleanup, _scrollTimeout, _lastRemoteCursorRenderTime, _remoteCursorThrottleTimeout, _PresentationEditor_instances, collectCommentPositions_fn, aggregateLayoutBounds_fn, safeCleanup_fn, setupEditorListeners_fn, setupCollaborationCursors_fn, updateLocalAwarenessCursor_fn, normalizeAwarenessStates_fn, getFallbackColor_fn, getValidatedColor_fn, scheduleRemoteCursorUpdate_fn, scheduleRemoteCursorReRender_fn, updateRemoteCursors_fn, renderRemoteCursors_fn, renderRemoteCaret_fn, renderRemoteCursorLabel_fn, renderRemoteSelection_fn, setupPointerHandlers_fn, setupDragHandlers_fn, focusEditorAfterImageSelection_fn, setupInputBridge_fn, initHeaderFooterRegistry_fn, _handlePointerDown, getFirstTextPosition_fn, registerPointerClick_fn, selectWordAt_fn, selectParagraphAt_fn, calculateExtendedSelection_fn, isWordCharacter_fn, _handlePointerMove, _handlePointerLeave, _handlePointerUp, _handleDragOver, _handleDrop, _handleDoubleClick, _handleKeyDown, focusHeaderFooterShortcut_fn, scheduleRerender_fn, flushRerenderQueue_fn, rerender_fn, ensurePainter_fn, scheduleSelectionUpdate_fn, updateSelection_fn, resolveLayoutOptions_fn, buildHeaderFooterInput_fn, computeHeaderFooterConstraints_fn, layoutPerRIdHeaderFooters_fn, updateDecorationProviders_fn, createDecorationProvider_fn, findHeaderFooterPageForPageNumber_fn, computeDecorationBox_fn, computeExpectedSectionType_fn, rebuildHeaderFooterRegions_fn, hitTestHeaderFooterRegion_fn, pointInRegion_fn, activateHeaderFooterRegion_fn, enterHeaderFooterMode_fn, exitHeaderFooterMode_fn, getActiveDomTarget_fn, emitHeaderFooterModeChanged_fn, emitHeaderFooterEditingContext_fn, updateAwarenessSession_fn, updateModeBanner_fn, announce_fn, validateHeaderFooterEditPermission_fn, emitHeaderFooterEditBlocked_fn, resolveDescriptorForRegion_fn, createDefaultHeaderFooter_fn, getPageElement_fn, scrollPageIntoView_fn, computeAnchorMap_fn, waitForPageMount_fn, getBodyPageHeight_fn, getHeaderFooterPageHeight_fn, applyDomCorrectionToRects_fn, renderSelectionRects_fn, renderHoverRegion_fn, clearHoverRegion_fn, renderCaretOverlay_fn, getHeaderFooterContext_fn, computeHeaderFooterSelectionRects_fn, syncTrackedChangesPreferences_fn, deriveTrackedChangesMode_fn, deriveTrackedChangesEnabled_fn, getTrackChangesPluginState_fn, computeDefaultLayoutDefaults_fn, parseColumns_fn, inchesToPx_fn, applyZoom_fn, createLayoutMetrics_fn, getPageOffsetX_fn, convertPageLocalToOverlayCoords_fn, computeDomCaretPageLocal_fn, normalizeClientPoint_fn, computeCaretLayoutRectGeometry_fn, computeCaretLayoutRect_fn, computeCaretLayoutRectFromDOM_fn, computeTableCaretLayoutRect_fn, findLineContainingPos_fn, lineHeightBeforeIndex_fn, getCurrentPageIndex_fn, findRegionForPage_fn, handleLayoutError_fn, decorateError_fn, showLayoutErrorBanner_fn, dismissErrorBanner_fn, createHiddenHost_fn, _windowRoot, _layoutSurfaces, _getTargetDom, _isEditable, _onTargetChanged, _listeners, _currentTarget, _destroyed, _useWindowFallback, _PresentationInputBridge_instances, addListener_fn, dispatchToTarget_fn, forwardKeyboardEvent_fn, forwardTextEvent_fn, forwardCompositionEvent_fn, forwardContextMenu_fn, isEventOnActiveTarget_fn, shouldSkipSurface_fn, isInLayoutSurface_fn, getListenerTargets_fn, isPlainCharacterKey_fn, _DocumentSectionView_instances, init_fn2, addToolTip_fn, _ParagraphNodeView_instances, checkShouldUpdate_fn, updateHTMLAttributes_fn, updateDOMStyles_fn, resolveNeighborParagraphProperties_fn, updateListStyles_fn, initList_fn, checkIsList_fn, createMarker_fn, createSeparator_fn, calculateTabSeparatorStyle_fn, calculateMarkerStyle_fn, removeList_fn, getParagraphContext_fn, scheduleAnimation_fn, cancelScheduledAnimation_fn, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn, _VectorShapeView_instances, ensureParentPositioned_fn, _ShapeGroupView_instances, ensureParentPositioned_fn2;
|
|
13
13
|
import * as Y from "yjs";
|
|
14
14
|
import { UndoManager, Item as Item$1, ContentType, Text as Text$1, XmlElement, encodeStateAsUpdate } from "yjs";
|
|
15
|
-
import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as htmlHandler, E as ReplaceStep, G as twipsToInches, H as inchesToTwips, I as ptToTwips, J as getResolvedParagraphProperties, K as linesToTwips, L as changeListLevel, O as findParentNode, Q as isList, U as updateNumberingProperties, V as ListHelpers, W as isMacOS, X as isIOS, Y as getSchemaTypeByName, Z as inputRulesPlugin, _ as TrackDeleteMarkName$1, $ as TrackInsertMarkName$1, a0 as v4, a1 as TrackFormatMarkName$1, a2 as comments_module_events, a3 as findMark, a4 as objectIncludes, a5 as AddMarkStep, a6 as RemoveMarkStep, a7 as twipsToLines, a8 as pixelsToTwips, a9 as helpers, aa as posToDOMRect, ab as CommandService, ac as SuperConverter, ad as createDocument, ae as createDocFromMarkdown, af as createDocFromHTML, ag as EditorState, ah as isActive, ai as unflattenListsInHtml, aj as resolveParagraphProperties, ak as _getReferencedTableStyles, al as parseSizeUnit, am as minMax, an as updateDOMAttributes, ao as findChildren$5, ap as generateRandomSigned32BitIntStrId, aq as decodeRPrFromMarks, ar as calculateResolvedParagraphProperties, as as resolveRunProperties, at as encodeCSSFromPPr, au as twipsToPixels$2, av as encodeCSSFromRPr, aw as generateOrderedListIndex, ax as docxNumberingHelpers, ay as InputRule, az as convertSizeToCSS, aA as SelectionRange, aB as Transform, aC as findParentNodeClosestToPos, aD as isInTable$1, aE as generateDocxRandomId, aF as insertNewRelationship, aG as inchesToPixels, aH as kebabCase, aI as getUnderlineCssString } from "./converter-
|
|
16
|
-
import { D as DocxZipper } from "./docx-zipper-
|
|
15
|
+
import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as htmlHandler, E as ReplaceStep, G as twipsToInches, H as inchesToTwips, I as ptToTwips, J as getResolvedParagraphProperties, K as linesToTwips, L as changeListLevel, O as findParentNode, Q as isList, U as updateNumberingProperties, V as ListHelpers, W as isMacOS, X as isIOS, Y as getSchemaTypeByName, Z as inputRulesPlugin, _ as TrackDeleteMarkName$1, $ as TrackInsertMarkName$1, a0 as v4, a1 as TrackFormatMarkName$1, a2 as comments_module_events, a3 as findMark, a4 as objectIncludes, a5 as AddMarkStep, a6 as RemoveMarkStep, a7 as twipsToLines, a8 as pixelsToTwips, a9 as helpers, aa as posToDOMRect, ab as CommandService, ac as SuperConverter, ad as createDocument, ae as createDocFromMarkdown, af as createDocFromHTML, ag as EditorState, ah as isActive, ai as unflattenListsInHtml, aj as resolveParagraphProperties, ak as _getReferencedTableStyles, al as parseSizeUnit, am as minMax, an as updateDOMAttributes, ao as findChildren$5, ap as generateRandomSigned32BitIntStrId, aq as decodeRPrFromMarks, ar as calculateResolvedParagraphProperties, as as resolveRunProperties, at as encodeCSSFromPPr, au as twipsToPixels$2, av as encodeCSSFromRPr, aw as generateOrderedListIndex, ax as docxNumberingHelpers, ay as InputRule, az as convertSizeToCSS, aA as SelectionRange, aB as Transform, aC as findParentNodeClosestToPos, aD as isInTable$1, aE as generateDocxRandomId, aF as insertNewRelationship, aG as inchesToPixels, aH as kebabCase, aI as getUnderlineCssString } from "./converter-Cww1mCyd.js";
|
|
16
|
+
import { D as DocxZipper } from "./docx-zipper-BlOp_CYx.js";
|
|
17
17
|
import { ref, computed, createElementBlock, openBlock, withModifiers, Fragment as Fragment$1, renderList, normalizeClass, createCommentVNode, toDisplayString, createElementVNode, createApp } from "vue";
|
|
18
18
|
var GOOD_LEAF_SIZE = 200;
|
|
19
19
|
var RopeSequence = function RopeSequence2() {
|
|
@@ -13923,7 +13923,7 @@ const isHeadless = (editor) => {
|
|
|
13923
13923
|
const shouldSkipNodeView = (editor) => {
|
|
13924
13924
|
return isHeadless(editor);
|
|
13925
13925
|
};
|
|
13926
|
-
const summaryVersion = "1.0.0-beta.
|
|
13926
|
+
const summaryVersion = "1.0.0-beta.80";
|
|
13927
13927
|
const nodeKeys = ["group", "content", "marks", "inline", "atom", "defining", "code", "tableRole", "summary"];
|
|
13928
13928
|
const markKeys = ["group", "inclusive", "excludes", "spanning", "code"];
|
|
13929
13929
|
function mapAttributes(attrs) {
|
|
@@ -14715,7 +14715,7 @@ const _Editor = class _Editor extends EventEmitter {
|
|
|
14715
14715
|
{ default: remarkStringify },
|
|
14716
14716
|
{ default: remarkGfm }
|
|
14717
14717
|
] = await Promise.all([
|
|
14718
|
-
import("./index-
|
|
14718
|
+
import("./index-dhmURjT9.js"),
|
|
14719
14719
|
import("./index-DRCvimau.js"),
|
|
14720
14720
|
import("./index-C_x_N6Uh.js"),
|
|
14721
14721
|
import("./index-D_sWOSiG.js"),
|
|
@@ -14920,7 +14920,7 @@ const _Editor = class _Editor extends EventEmitter {
|
|
|
14920
14920
|
* Process collaboration migrations
|
|
14921
14921
|
*/
|
|
14922
14922
|
processCollaborationMigrations() {
|
|
14923
|
-
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.
|
|
14923
|
+
console.debug("[checkVersionMigrations] Current editor version", "1.0.0-beta.80");
|
|
14924
14924
|
if (!this.options.ydoc) return;
|
|
14925
14925
|
const metaMap = this.options.ydoc.getMap("meta");
|
|
14926
14926
|
let docVersion = metaMap.get("version");
|
|
@@ -26706,6 +26706,9 @@ const MAX_HREF_LENGTH = 2048;
|
|
|
26706
26706
|
const SAFE_ANCHOR_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
26707
26707
|
const MAX_DATA_URL_LENGTH = 10 * 1024 * 1024;
|
|
26708
26708
|
const VALID_IMAGE_DATA_URL = /^data:image\/(png|jpeg|jpg|gif|svg\+xml|webp|bmp|ico|tiff?);base64,/i;
|
|
26709
|
+
const MAX_RESIZE_MULTIPLIER = 3;
|
|
26710
|
+
const FALLBACK_MAX_DIMENSION = 1e3;
|
|
26711
|
+
const MIN_IMAGE_DIMENSION = 20;
|
|
26709
26712
|
const AMBIGUOUS_LINK_PATTERNS = /^(click here|read more|more|link|here|this|download|view)$/i;
|
|
26710
26713
|
const TRACK_CHANGE_BASE_CLASS = {
|
|
26711
26714
|
insert: "track-insert-dec",
|
|
@@ -28652,14 +28655,25 @@ const _DomPainter = class _DomPainter {
|
|
|
28652
28655
|
* - Only allows safe image MIME types (png, jpeg, gif, etc.) with base64 encoding
|
|
28653
28656
|
* - Non-data URLs are sanitized through sanitizeUrl to prevent XSS
|
|
28654
28657
|
*
|
|
28658
|
+
* METADATA ATTRIBUTE:
|
|
28659
|
+
* - Adds `data-image-metadata` attribute to enable interactive resizing via ImageResizeOverlay
|
|
28660
|
+
* - Metadata includes: originalWidth, originalHeight, aspectRatio, min/max dimensions
|
|
28661
|
+
* - Only added when run.width > 0 && run.height > 0 to prevent invalid metadata
|
|
28662
|
+
* - Max dimensions: 3x original size or 1000px (whichever is larger)
|
|
28663
|
+
* - Min dimensions: 20px to ensure visibility and interactivity
|
|
28664
|
+
*
|
|
28655
28665
|
* @param run - The ImageRun to render containing image source, dimensions, and spacing
|
|
28656
28666
|
* @returns HTMLElement (img) or null if src is missing or invalid
|
|
28657
28667
|
*
|
|
28658
28668
|
* @example
|
|
28659
28669
|
* ```typescript
|
|
28660
|
-
* // Valid data URL
|
|
28670
|
+
* // Valid data URL with metadata
|
|
28661
28671
|
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 100, height: 100 })
|
|
28662
|
-
* // Returns: <img> element
|
|
28672
|
+
* // Returns: <img> element with data-image-metadata attribute
|
|
28673
|
+
*
|
|
28674
|
+
* // Invalid dimensions - no metadata
|
|
28675
|
+
* renderImageRun({ kind: 'image', src: 'data:image/png;base64,iVBORw...', width: 0, height: 0 })
|
|
28676
|
+
* // Returns: <img> element WITHOUT data-image-metadata attribute
|
|
28663
28677
|
*
|
|
28664
28678
|
* // Invalid MIME type
|
|
28665
28679
|
* renderImageRun({ kind: 'image', src: 'data:text/html;base64,PHNjcmlwdD4...', width: 100, height: 100 })
|
|
@@ -28667,7 +28681,7 @@ const _DomPainter = class _DomPainter {
|
|
|
28667
28681
|
*
|
|
28668
28682
|
* // HTTP URL
|
|
28669
28683
|
* renderImageRun({ kind: 'image', src: 'https://example.com/image.png', width: 100, height: 100 })
|
|
28670
|
-
* // Returns: <img> element (after sanitization)
|
|
28684
|
+
* // Returns: <img> element (after sanitization) with data-image-metadata attribute
|
|
28671
28685
|
* ```
|
|
28672
28686
|
*/
|
|
28673
28687
|
renderImageRun(run) {
|
|
@@ -28695,6 +28709,22 @@ const _DomPainter = class _DomPainter {
|
|
|
28695
28709
|
}
|
|
28696
28710
|
img.width = run.width;
|
|
28697
28711
|
img.height = run.height;
|
|
28712
|
+
if (run.width > 0 && run.height > 0) {
|
|
28713
|
+
const aspectRatio = run.width / run.height;
|
|
28714
|
+
const inlineImageMetadata = {
|
|
28715
|
+
originalWidth: run.width,
|
|
28716
|
+
originalHeight: run.height,
|
|
28717
|
+
// Max dimensions: MAX_RESIZE_MULTIPLIER x original size or FALLBACK_MAX_DIMENSION, whichever is larger
|
|
28718
|
+
// This provides generous constraints while preventing excessive scaling
|
|
28719
|
+
maxWidth: Math.max(run.width * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
28720
|
+
maxHeight: Math.max(run.height * MAX_RESIZE_MULTIPLIER, FALLBACK_MAX_DIMENSION),
|
|
28721
|
+
aspectRatio,
|
|
28722
|
+
// Min dimensions: MIN_IMAGE_DIMENSION to ensure images remain visible and interactive
|
|
28723
|
+
minWidth: MIN_IMAGE_DIMENSION,
|
|
28724
|
+
minHeight: MIN_IMAGE_DIMENSION
|
|
28725
|
+
};
|
|
28726
|
+
img.setAttribute("data-image-metadata", JSON.stringify(inlineImageMetadata));
|
|
28727
|
+
}
|
|
28698
28728
|
img.alt = run.alt ?? "";
|
|
28699
28729
|
if (run.title) {
|
|
28700
28730
|
img.title = run.title;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, normalizeStyle, ref, withKeys, unref, withModifiers, createBlock, toDisplayString, withDirectives, vModelText, nextTick, getCurrentInstance, onMounted, onBeforeUnmount, createVNode, readonly, watch, reactive, onBeforeMount, inject, onActivated, onDeactivated, createTextVNode, Fragment, Comment, defineComponent, provide, h, Teleport, toRef, renderSlot, isVNode, shallowRef, watchEffect, mergeProps, Transition, vShow, cloneVNode, Text, renderList, withCtx } from "vue";
|
|
2
|
-
import { p as process$1 } from "./converter-
|
|
3
|
-
import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-
|
|
2
|
+
import { p as process$1 } from "./converter-Cww1mCyd.js";
|
|
3
|
+
import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-D3MjMYeX.js";
|
|
4
4
|
const sanitizeNumber = (value, defaultNumber) => {
|
|
5
5
|
let sanitized = value.replace(/[^0-9.]/g, "");
|
|
6
6
|
sanitized = parseFloat(sanitized);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { E } from "./chunks/editor-
|
|
2
|
-
import "./chunks/converter-
|
|
3
|
-
import "./chunks/docx-zipper-
|
|
1
|
+
import { E } from "./chunks/editor-D3MjMYeX.js";
|
|
2
|
+
import "./chunks/converter-Cww1mCyd.js";
|
|
3
|
+
import "./chunks/docx-zipper-BlOp_CYx.js";
|
|
4
4
|
export {
|
|
5
5
|
E as Editor
|
|
6
6
|
};
|