@pie-lib/editable-html-tip-tap 3.1.2-next.20261019145129 → 3.1.2-next.20261019155156

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.
@@ -3,25 +3,25 @@ import { normalizeInitialMarkup as t } from "../utils/helper.js";
3
3
  import { setPendingSaveFlush as n } from "../pending-save.js";
4
4
  import r from "../extensions/extended-table.js";
5
5
  import { ExtendedTableCell as i, ExtendedTableHeader as a } from "../extensions/extended-table-cell.js";
6
- import { DivNode as ee } from "../extensions/div-node.js";
7
- import { EnsureEmptyRootIsDiv as te } from "../extensions/ensure-empty-root-div.js";
8
- import { EnsureListItemContentIsDiv as ne } from "../extensions/ensure-list-item-content-is-div.js";
9
- import { DragInTheBlankNode as re, ExplicitConstructedResponseNode as ie, InlineDropdownNode as ae, MathTemplatedNode as oe, ResponseAreaExtension as se } from "../extensions/responseArea.js";
10
- import { MathNode as ce } from "../extensions/math.js";
11
- import { ImageUploadNode as o, uploadPastedImage as s } from "../extensions/image.js";
12
- import { Media as c } from "../extensions/media.js";
13
- import { CSSMark as le } from "../extensions/css.js";
14
- import { ExtendedListItem as ue } from "../extensions/extended-list-item.js";
15
- import { HeadingParagraph as l } from "../extensions/heading-paragraph.js";
16
- import { valueToSize as u } from "../utils/size.js";
17
- import de from "./TiptapContainer.js";
18
- import { PLUGINS_MAP as fe, buildExtensions as pe } from "../extensions/index.js";
19
- import { useCallback as d, useEffect as f, useMemo as p, useRef as m, useState as h } from "react";
20
- import { debounce as g } from "@pie-element/shared-lodash";
21
- import { EditorContent as _, useEditor as me, useEditorState as he } from "@tiptap/react";
22
- import { styled as v } from "@mui/material/styles";
23
- import y from "@tiptap/starter-kit";
24
- import { TextStyleKit as b } from "@tiptap/extension-text-style";
6
+ import { DivNode as o } from "../extensions/div-node.js";
7
+ import { EnsureEmptyRootIsDiv as ee } from "../extensions/ensure-empty-root-div.js";
8
+ import { EnsureListItemContentIsDiv as s } from "../extensions/ensure-list-item-content-is-div.js";
9
+ import { DragInTheBlankNode as c, ExplicitConstructedResponseNode as te, InlineDropdownNode as l, MathTemplatedNode as ne, ResponseAreaExtension as re } from "../extensions/responseArea.js";
10
+ import { MathNode as ie } from "../extensions/math.js";
11
+ import { ImageUploadNode as ae, uploadPastedImage as oe } from "../extensions/image.js";
12
+ import { Media as se } from "../extensions/media.js";
13
+ import { CSSMark as u } from "../extensions/css.js";
14
+ import { ExtendedListItem as ce } from "../extensions/extended-list-item.js";
15
+ import { HeadingParagraph as le } from "../extensions/heading-paragraph.js";
16
+ import { valueToSize as d } from "../utils/size.js";
17
+ import ue from "./TiptapContainer.js";
18
+ import { PLUGINS_MAP as de, buildExtensions as f } from "../extensions/index.js";
19
+ import { useCallback as p, useEffect as m, useMemo as h, useRef as g, useState as _ } from "react";
20
+ import { debounce as v } from "@pie-element/shared-lodash";
21
+ import { EditorContent as y, useEditor as fe, useEditorState as pe } from "@tiptap/react";
22
+ import { styled as b } from "@mui/material/styles";
23
+ import me from "@tiptap/starter-kit";
24
+ import { TextStyleKit as he } from "@tiptap/extension-text-style";
25
25
  import { CharacterCount as ge } from "@tiptap/extension-character-count";
26
26
  import _e from "@tiptap/extension-superscript";
27
27
  import ve from "@tiptap/extension-subscript";
@@ -102,40 +102,34 @@ var C = {
102
102
  autocapitalize: e ? "on" : "off",
103
103
  ...t && { "aria-label": t },
104
104
  ...n && { "aria-labelledby": n }
105
- }), k = ["aria-label", "aria-labelledby"], A = 5, j = (e) => e._insertingImage || e._toolbarOpened || e.isActive("inline_dropdown") || e.isActive("explicit_constructed_response"), M = (_) => {
106
- let { showParagraphs: v, separateParagraphs: M } = _.pluginProps || {}, [Ce, N] = h([]), [we, Te] = h(!1), { toolbarOpts: Ee } = _, P = d((e) => {
105
+ }), k = ["aria-label", "aria-labelledby"], A = (e) => e._insertingImage || e._toolbarOpened || e.isActive("inline_dropdown") || e.isActive("explicit_constructed_response"), j = (y) => {
106
+ let { showParagraphs: b, separateParagraphs: j } = y.pluginProps || {}, [Se, N] = _([]), [Ce, we] = _(!1), { toolbarOpts: Te } = y, P = p((e) => {
107
107
  N((t) => {
108
108
  let n = t.filter((t) => t.pos !== e);
109
- return n.length === 0 && Te(!1), n;
109
+ return n.length === 0 && we(!1), n;
110
110
  });
111
111
  }, [N]), F = {
112
112
  ...C,
113
- ...Ee
114
- }, I = m([]), L = (e) => {
115
- I.current = [...I.current.slice(1 - A), e], _.onChange?.(e);
116
- }, R = m(L);
113
+ ...Te
114
+ }, I = g([]), L = (e) => {
115
+ I.current = [...I.current.slice(-4), e], y.onChange?.(e);
116
+ }, R = g(L);
117
117
  R.current = L;
118
- let z = d((e) => {
118
+ let z = p((e) => {
119
119
  let t = e.getHTML();
120
- _.markup !== t && R.current(t), F.doneOn === "blur" && _.onDone?.(t);
120
+ y.markup !== t && R.current(t), F.doneOn === "blur" && y.onDone?.(t);
121
121
  }, [
122
- _.markup,
123
- _.onChange,
124
- _.onDone,
122
+ y.markup,
123
+ y.onChange,
124
+ y.onDone,
125
125
  F.doneOn
126
- ]), B = m(z);
126
+ ]), B = g(z);
127
127
  B.current = z;
128
- let { idleSaveDelay: V } = _, H = m(!1), U = p(() => V > 0 ? g((e) => {
129
- if (!e.isDestroyed) {
130
- if (!H.current && (e.view.composing || j(e))) {
131
- W.current?.(e);
132
- return;
133
- }
134
- B.current(e);
135
- }
136
- }, V) : null, [V]), W = m(U);
128
+ let { idleSaveDelay: V } = y, H = g(!1), U = h(() => V > 0 ? v((e) => {
129
+ e.isDestroyed || (!H.current && (e.view.composing || A(e)) ? W.current?.(e) : B.current(e));
130
+ }, V) : null, [V]), W = g(U);
137
131
  W.current = U;
138
- let G = d((e) => {
132
+ let G = p((e) => {
139
133
  H.current = !0;
140
134
  try {
141
135
  e?.flush();
@@ -143,38 +137,38 @@ var C = {
143
137
  H.current = !1;
144
138
  }
145
139
  }, []);
146
- f(() => () => G(U), [U, G]);
147
- let De = d(() => G(W.current), [G]), K = p(() => ({
140
+ m(() => () => G(U), [U, G]);
141
+ let Ee = p(() => G(W.current), [G]), K = h(() => ({
148
142
  ...w,
149
- ..._.responseAreaProps,
143
+ ...y.responseAreaProps,
150
144
  onInlineDropdownToolbarClose: z
151
- }), [_.responseAreaProps, z]), q = p(() => {
152
- let { customPlugins: e, ...t } = _.pluginProps || {};
145
+ }), [y.responseAreaProps, z]), q = h(() => {
146
+ let { customPlugins: e, ...t } = y.pluginProps || {};
153
147
  e ||= [];
154
- let n = (_.activePlugins || T)?.filter((e) => {
155
- let n = fe[e] || e, r = t[n] || {};
148
+ let n = (y.activePlugins || T)?.filter((e) => {
149
+ let n = de[e] || e, r = t[n] || {};
156
150
  return !r || !r.disabled;
157
151
  });
158
- return pe(n, e, {
152
+ return f(n, e, {
159
153
  math: {},
160
- textAlign: _.textAlign,
154
+ textAlign: y.textAlign,
161
155
  html: {},
162
- extraCSSRules: _.extraCSSRules || {},
163
- image: { ..._.imageSupport },
156
+ extraCSSRules: y.extraCSSRules || {},
157
+ image: { ...y.imageSupport },
164
158
  toolbar: {},
165
159
  table: {},
166
160
  responseArea: { type: K.type },
167
- languageCharacters: _.languageCharactersProps,
161
+ languageCharacters: y.languageCharactersProps,
168
162
  keyPadCharacterRef: {},
169
163
  setKeypadInteraction: {},
170
164
  media: {}
171
165
  });
172
- }, [_, K.type]), J = m(null);
166
+ }, [y, K.type]), J = g(null);
173
167
  J.current = {
174
- plainText: _.pluginProps?.pasteFormatting?.disabled === !0,
168
+ plainText: y.pluginProps?.pasteFormatting?.disabled === !0,
175
169
  formatting: q.map((e) => E[e]).filter(Boolean)
176
170
  };
177
- let Oe = [
171
+ let De = [
178
172
  ye.configure({
179
173
  types: [
180
174
  "heading",
@@ -197,13 +191,13 @@ var C = {
197
191
  "justify"
198
192
  ]
199
193
  }),
200
- b,
194
+ he,
201
195
  e.configure({
202
196
  settings: () => J.current,
203
- uploadImage: _.imageSupport && s
197
+ uploadImage: y.imageSupport && oe
204
198
  }),
205
- ge.configure({ limit: _.charactersLimit || 1e6 }),
206
- y.configure({
199
+ ge.configure({ limit: y.charactersLimit || 1e6 }),
200
+ me.configure({
207
201
  trailingNode: {
208
202
  node: "paragraph",
209
203
  notAfter: ["paragraph", "div"]
@@ -213,13 +207,13 @@ var C = {
213
207
  linkOnPaste: !1
214
208
  }
215
209
  }),
216
- ue,
210
+ ce,
211
+ o,
212
+ le,
217
213
  ee,
218
- l,
219
- te,
220
- ne,
214
+ s,
221
215
  xe.configure({
222
- placeholder: _.placeholder,
216
+ placeholder: y.placeholder,
223
217
  showOnlyWhenEditable: !0,
224
218
  showOnlyCurrent: !1,
225
219
  includeChildren: !0
@@ -228,78 +222,73 @@ var C = {
228
222
  x,
229
223
  a,
230
224
  i,
231
- se.configure(K),
232
- ie.configure(K),
233
225
  re.configure(K),
234
- ae.configure(K),
235
- oe.configure(K),
236
- ce.configure({
226
+ te.configure(K),
227
+ c.configure(K),
228
+ l.configure(K),
229
+ ne.configure(K),
230
+ ie.configure({
237
231
  toolbarOpts: F,
238
- math: _.pluginProps?.math || {}
232
+ math: y.pluginProps?.math || {}
239
233
  }),
240
234
  ve,
241
235
  _e,
242
236
  be,
243
- o.configure({
237
+ ae.configure({
244
238
  toolbarOpts: F,
245
239
  imageHandling: {
246
- disableImageAlignmentButtons: _.disableImageAlignmentButtons,
247
- onDone: (e) => _.onDone?.(e.getHTML()),
248
- onDelete: _.imageSupport && _.imageSupport.delete && ((e) => {
240
+ disableImageAlignmentButtons: y.disableImageAlignmentButtons,
241
+ onDone: (e) => y.onDone?.(e.getHTML()),
242
+ onDelete: y.imageSupport && y.imageSupport.delete && ((e) => {
249
243
  let { src: t } = e.attrs;
250
- _.imageSupport.delete(t, (t) => {
244
+ y.imageSupport.delete(t, (t) => {
251
245
  P(e.pos);
252
246
  });
253
247
  }),
254
- insertImageRequested: _.imageSupport && ((e, t, n) => {
248
+ insertImageRequested: y.imageSupport && ((e, t, n) => {
255
249
  let [r, i] = t, a = (t) => {
256
250
  let n;
257
- we && t && (n = R.current), P(i), n?.(e.getHTML());
251
+ Ce && t && (n = R.current), P(i), n?.(e.getHTML());
258
252
  };
259
253
  e._insertingImage = !0, N((e) => [...e, r]), (() => {
260
- let t = n(a), r = g(() => {
261
- let t = () => window.removeEventListener("focus", r);
262
- if (!e._insertingImage) {
263
- t();
264
- return;
265
- }
266
- P(i), e._insertingImage = !1, t();
254
+ let t = n(a), r = v(() => {
255
+ e._insertingImage &&= (P(i), !1), window.removeEventListener("focus", r);
267
256
  }, 500);
268
- window.addEventListener("focus", r), _.imageSupport.add(t);
257
+ window.addEventListener("focus", r), y.imageSupport.add(t);
269
258
  })();
270
259
  }),
271
- maxImageWidth: _.maxImageWidth,
272
- maxImageHeight: _.maxImageHeight
260
+ maxImageWidth: y.maxImageWidth,
261
+ maxImageHeight: y.maxImageHeight
273
262
  },
274
263
  limit: 3
275
264
  }),
276
- c.configure({ uploadSoundSupport: _.uploadSoundSupport }),
277
- le.configure({ extraCSSRules: _.extraCSSRules })
278
- ], Y = _.spellCheck !== !1, { ariaLabel: X, ariaLabelledBy: Z } = _, Q = me({
279
- extensions: Oe,
265
+ se.configure({ uploadSoundSupport: y.uploadSoundSupport }),
266
+ u.configure({ extraCSSRules: y.extraCSSRules })
267
+ ], Y = y.spellCheck !== !1, { ariaLabel: X, ariaLabelledBy: Z } = y, Q = fe({
268
+ extensions: De,
280
269
  immediatelyRender: !1,
281
270
  editorProps: {
282
271
  attributes: O(Y, X, Z),
283
272
  handleKeyDown(e, t) {
284
- return _.onKeyDown ? _.onKeyDown(t) : !1;
273
+ return y.onKeyDown ? y.onKeyDown(t) : !1;
285
274
  }
286
275
  },
287
- editable: !_.disabled,
288
- content: t(_.markup),
276
+ editable: !y.disabled,
277
+ content: t(y.markup),
289
278
  onUpdate: ({ editor: e, transaction: t }) => {
290
- t.isDone && R.current(e.getHTML()), t.docChanged && W.current && (W.current(e), n(e.view.dom, De));
279
+ t.isDone && R.current(e.getHTML()), t.docChanged && W.current && (W.current(e), n(e.view.dom, Ee));
291
280
  },
292
281
  onBlur: ({ editor: e }) => {
293
- j(e) || !e.schema || (W.current?.cancel(), z(e));
282
+ !A(e) && e.schema && (W.current?.cancel(), z(e));
294
283
  }
295
- }, [_.charactersLimit]);
296
- f(() => {
297
- _.editorRef && _.editorRef(Q);
298
- }, [_.editorRef, Q]), f(() => {
299
- Q?.setEditable(!_.disabled);
300
- }, [_.disabled, Q]), f(() => {
284
+ }, [y.charactersLimit]);
285
+ m(() => {
286
+ y.editorRef && y.editorRef(Q);
287
+ }, [y.editorRef, Q]), m(() => {
288
+ Q?.setEditable(!y.disabled);
289
+ }, [y.disabled, Q]), m(() => {
301
290
  Q?.on("destroy", () => G(W.current));
302
- }, [Q, G]), f(() => {
291
+ }, [Q, G]), m(() => {
303
292
  if (!Q) return;
304
293
  let e = Q.options?.editorProps, t = e?.attributes || {}, n = O(Y, X, Z);
305
294
  if (["spellcheck", ...k].every((e) => t[e] === n[e])) return;
@@ -316,48 +305,48 @@ var C = {
316
305
  X,
317
306
  Z,
318
307
  Q
319
- ]), f(() => {
320
- if (!Q || I.current.includes(_.markup)) return;
308
+ ]), m(() => {
309
+ if (!Q || I.current.includes(y.markup)) return;
321
310
  I.current = [];
322
- let e = t(_.markup);
311
+ let e = t(y.markup);
323
312
  e !== Q.getHTML() && Q.commands.setContent(e, { emitUpdate: !1 });
324
- }, [_.markup, Q]), f(() => {
313
+ }, [y.markup, Q]), m(() => {
325
314
  Object.entries(D).forEach(([e, t]) => {
326
315
  document.documentElement.style.setProperty(e, t);
327
316
  });
328
317
  }, []);
329
- let ke = he({
318
+ let Oe = pe({
330
319
  editor: Q,
331
320
  selector: (e) => ({ isFocused: e.editor?.isFocused })
332
- }), $ = p(() => {
333
- let { minWidth: e, width: t, maxWidth: n, minHeight: r, height: i, maxHeight: a } = _;
321
+ }), $ = h(() => {
322
+ let { minWidth: e, width: t, maxWidth: n, minHeight: r, height: i, maxHeight: a } = y;
334
323
  return {
335
- width: u(t),
336
- minWidth: u(e),
337
- maxWidth: u(n),
338
- height: u(i),
339
- minHeight: u(r),
340
- maxHeight: u(a)
324
+ width: d(t),
325
+ minWidth: d(e),
326
+ maxWidth: d(n),
327
+ height: d(i),
328
+ minHeight: d(r),
329
+ maxHeight: d(a)
341
330
  };
342
- }, [_]);
343
- return /* @__PURE__ */ S(de, {
344
- ..._,
331
+ }, [y]);
332
+ return /* @__PURE__ */ S(ue, {
333
+ ...y,
345
334
  activePlugins: q,
346
335
  toolbarOpts: F,
347
- editorState: ke,
336
+ editorState: Oe,
348
337
  editor: Q,
349
- children: Q && /* @__PURE__ */ S(Se, {
338
+ children: Q && /* @__PURE__ */ S(M, {
350
339
  style: {
351
340
  minHeight: $.minHeight,
352
341
  height: $.height,
353
342
  maxHeight: $.maxHeight
354
343
  },
355
- showParagraph: v && !v.disabled,
356
- separateParagraph: M && !M.disabled,
344
+ showParagraph: b && !b.disabled,
345
+ separateParagraph: j && !j.disabled,
357
346
  editor: Q
358
347
  })
359
348
  });
360
- }, Se = v(_, { shouldForwardProp: (e) => !["showParagraph", "separateParagraph"].includes(e) })(({ showParagraph: e, separateParagraph: t }) => ({
349
+ }, M = b(y, { shouldForwardProp: (e) => !["showParagraph", "separateParagraph"].includes(e) })(({ showParagraph: e, separateParagraph: t }) => ({
361
350
  display: "flex",
362
351
  outline: "none !important",
363
352
  "& .ProseMirror": {
@@ -387,4 +376,4 @@ var C = {
387
376
  }
388
377
  }));
389
378
  //#endregion
390
- export { M as EditableHtml, M as default };
379
+ export { j as EditableHtml, j as default };
@@ -13,9 +13,9 @@ var o = (e) => {
13
13
  default: return 0;
14
14
  }
15
15
  }, s = (e) => {
16
- let { direction: t, style: r } = e;
16
+ let { direction: t, style: r } = e, a = o(t);
17
17
  return /* @__PURE__ */ n(i, { style: {
18
- transform: `rotate(${o(t)}deg)`,
18
+ transform: `rotate(${a}deg)`,
19
19
  ...r
20
20
  } });
21
21
  };
@@ -64,9 +64,7 @@ var o = () => /* @__PURE__ */ t("svg", {
64
64
  case u.isActive({ textAlign: "justify" }):
65
65
  m = /* @__PURE__ */ t(l, {});
66
66
  break;
67
- default:
68
- m = /* @__PURE__ */ t(o, {});
69
- break;
67
+ default: m = /* @__PURE__ */ t(o, {});
70
68
  }
71
69
  let h = (e) => {
72
70
  let t = e.currentTarget?.getAttribute("value");
@@ -154,14 +154,7 @@ var y = c("@pie-lib:editable-html:plugins:media:dialog"), b = (e) => {
154
154
  };
155
155
  urlChange = (e) => {
156
156
  let { value: t } = e.target || {}, { type: n } = this.props;
157
- if (n && n === "audio") {
158
- this.checkAudio(t);
159
- return;
160
- } else if (n && n === "video") {
161
- this.checkVideo(t);
162
- return;
163
- }
164
- this.handleStateChange({
157
+ n && n === "audio" ? this.checkAudio(t) : n && n === "video" ? this.checkVideo(t) : this.handleStateChange({
165
158
  urlToUse: null,
166
159
  url: null,
167
160
  invalid: !0
@@ -170,11 +163,8 @@ var y = c("@pie-lib:editable-html:plugins:media:dialog"), b = (e) => {
170
163
  changeHandler = (e) => (t) => this.handleStateChange({ [e]: t.target.value });
171
164
  handleDone = (e) => {
172
165
  let { handleClose: t } = this.props, { tabValue: n, fileUpload: r } = this.state, i = n === E.insertUrl;
173
- if (!e) {
174
- r.url && this.handleRemoveFile(), t(e);
175
- return;
176
- }
177
- if (i) {
166
+ if (!e) r.url && this.handleRemoveFile(), t(e);
167
+ else if (i) {
178
168
  let { ends: n, height: r, url: i, urlToUse: a, formattedUrl: o, starts: s, width: c } = this.state;
179
169
  t(e, {
180
170
  tag: "iframe",
@@ -186,19 +176,13 @@ var y = c("@pie-lib:editable-html:plugins:media:dialog"), b = (e) => {
186
176
  urlToUse: a,
187
177
  src: o
188
178
  });
189
- return;
190
- }
191
- if (!r.loading) {
192
- t(e, {
193
- tag: "audio",
194
- src: r.url
195
- });
196
- return;
197
- }
198
- this.setState({ fileUpload: {
179
+ } else r.loading ? this.setState({ fileUpload: {
199
180
  ...r,
200
181
  scheduled: !0
201
- } });
182
+ } }) : t(e, {
183
+ tag: "audio",
184
+ src: r.url
185
+ });
202
186
  };
203
187
  handleUploadFile = async (e) => {
204
188
  e.preventDefault(), this.setState({ fileUpload: {
@@ -109,13 +109,7 @@ function h({ value: t, disabled: n, instanceId: r, children: i, n: a, onChange:
109
109
  n: a,
110
110
  opts: { duplicates: l },
111
111
  onDrop: (e, t) => {
112
- if (t?.type === "drag-in-the-blank-drop-choice" && e.value.id !== t.value.id) {
113
- if (e.type === "drag-in-the-blank-choice") {
114
- o(e), !l && e.fromChoice && s(e);
115
- return;
116
- }
117
- e.type === "drag-in-the-blank-placed-choice" && (s(t), o(e), setTimeout(() => s(e), 10));
118
- }
112
+ t?.type === "drag-in-the-blank-drop-choice" && e.value.id !== t.value.id && (e.type === "drag-in-the-blank-choice" ? (o(e), !l && e.fromChoice && s(e)) : e.type === "drag-in-the-blank-placed-choice" && (s(t), o(e), setTimeout(() => s(e), 10)));
119
113
  }
120
114
  }
121
115
  }), C = (e) => {
@@ -20,7 +20,7 @@ var h = (u) => {
20
20
  let { tr: e } = h.state, t = e.doc.nodeAt(w);
21
21
  if (!t) return;
22
22
  let { selection: n } = e;
23
- n.from === w && n.to === w + t.nodeSize || (e.setSelection(c.create(e.doc, w)), h.view.dispatch(e));
23
+ (n.from !== w || n.to !== w + t.nodeSize) && (e.setSelection(c.create(e.doc, w)), h.view.dispatch(e));
24
24
  }, L = () => {
25
25
  D.current || (v.onToolbarCloseRequest ? (D.current = !0, v.onToolbarCloseRequest([g, w], h, () => {
26
26
  D.current = !1, delete h._holdInlineDropdownToolbarIndex, P();
@@ -10,23 +10,23 @@ var s = () => {
10
10
  }, c = ({ editor: e, callback: t, opts: c, selectedText: l, parentNode: u }) => {
11
11
  let d = e.options.element, f = document.createElement("div"), { selection: p } = e.state;
12
12
  s(), f.className = "insert-css-dialog";
13
- let m = !1, h = (e) => {
14
- if (m) {
15
- let t = f.contains(e.target) || void 0, n = d.contains(e.target);
16
- t || n || g();
17
- } else m = !0;
18
- }, g = () => {
19
- t(void 0, !0), f.remove(), document.body.removeEventListener("click", h);
20
- }, _ = (e) => {
21
- t(e, !0), f.remove(), document.body.removeEventListener("click", h);
22
- }, v = u?.attrs.class, y = (e) => {
13
+ let m, h = !1, g = (e) => {
14
+ if (h) {
15
+ let t = f.contains(e.target) || m, n = d.contains(e.target);
16
+ t || n || _();
17
+ } else h = !0;
18
+ }, _ = () => {
19
+ t(void 0, !0), f.remove(), document.body.removeEventListener("click", g);
20
+ }, v = (e) => {
21
+ t(e, !0), f.remove(), document.body.removeEventListener("click", g);
22
+ }, y = u?.attrs.class, b = (e) => {
23
23
  let t = `<span class="${e}">${l}</span>`;
24
24
  if (u) {
25
25
  let e = "span";
26
- u?.object === "inline" && (e = "span"), u?.object === "block" && (e = "div"), t = `<${e} class="${v}">${u.text.slice(0, p.$anchor.textOffset)}${t}${u.text.slice(p.$head.textOffset)}</${e}>`;
26
+ u?.object === "inline" && (e = "span"), u?.object === "block" && (e = "div"), t = `<${e} class="${y}">${u.text.slice(0, p.$anchor.textOffset)}${t}${u.text.slice(p.$head.textOffset)}</${e}>`;
27
27
  }
28
28
  return t;
29
- }, b = /* @__PURE__ */ i("div", {
29
+ }, x = /* @__PURE__ */ i("div", {
30
30
  style: {
31
31
  background: "white",
32
32
  height: 500,
@@ -37,22 +37,22 @@ var s = () => {
37
37
  },
38
38
  children: [
39
39
  /* @__PURE__ */ r("h2", { children: "Please choose a css class" }),
40
- v && /* @__PURE__ */ i("div", { children: ["The current parent has this class ", v] }),
40
+ y && /* @__PURE__ */ i("div", { children: ["The current parent has this class ", y] }),
41
41
  /* @__PURE__ */ r(a, {
42
42
  component: "nav",
43
43
  style: { overflow: "scroll" },
44
44
  children: c.names.map((e, t) => /* @__PURE__ */ i(o, {
45
45
  button: !0,
46
- onClick: () => _(e),
46
+ onClick: () => v(e),
47
47
  children: [/* @__PURE__ */ r("div", {
48
48
  style: { marginRight: 20 },
49
49
  children: e
50
- }), /* @__PURE__ */ r("div", { dangerouslySetInnerHTML: { __html: y(e) } })]
50
+ }), /* @__PURE__ */ r("div", { dangerouslySetInnerHTML: { __html: b(e) } })]
51
51
  }, `rule-${t}`))
52
52
  })
53
53
  ]
54
54
  });
55
- n.render(b, f, () => {
55
+ n.render(x, f, () => {
56
56
  let t = e.view.nodeDOM(e.state.selection.from)?.parentNode;
57
57
  if (t) {
58
58
  let e = d.parentElement.parentElement.parentElement.getBoundingClientRect(), n = t.getBoundingClientRect();
@@ -62,7 +62,7 @@ var s = () => {
62
62
  let a = f.offsetWidth;
63
63
  f.style.left = "unset", f.style.right = i;
64
64
  let o = f.offsetWidth;
65
- f.style.left = "unset", f.style.right = "unset", a >= o ? f.style.left = r : f.style.right = i, document.body.addEventListener("click", h);
65
+ f.style.left = "unset", f.style.right = "unset", a >= o ? f.style.left = r : f.style.right = i, document.body.addEventListener("click", g);
66
66
  }
67
67
  });
68
68
  }, l = e.create({
@@ -4,8 +4,9 @@ import { Plugin as t, PluginKey as n } from "@tiptap/pm/state";
4
4
  var r = e.create({
5
5
  name: "ensureEmptyRootIsDiv",
6
6
  addProseMirrorPlugins() {
7
+ let e = new n(this.name);
7
8
  return [new t({
8
- key: new n(this.name),
9
+ key: e,
9
10
  appendTransaction(e, t, n) {
10
11
  if (!e.some((e) => e.docChanged)) return null;
11
12
  let { doc: r } = n;
@@ -4,8 +4,9 @@ import { Plugin as t, PluginKey as n } from "@tiptap/pm/state";
4
4
  var r = e.create({
5
5
  name: "ensureListItemContentIsDiv",
6
6
  addProseMirrorPlugins() {
7
+ let e = new n(this.name);
7
8
  return [new t({
8
- key: new n(this.name),
9
+ key: e,
9
10
  appendTransaction(e, t, n) {
10
11
  if (!e.some((e) => e.docChanged)) return null;
11
12
  let { doc: r, schema: i } = n, a = i.nodes.div;
@@ -13,16 +13,12 @@ var l = (e) => {
13
13
  };
14
14
  function u(t, r, i, a, o = () => {}) {
15
15
  let s = e(t, i);
16
- if (!s) {
17
- o();
18
- return;
19
- }
20
- r(t, s, (e) => {
16
+ s ? r(t, s, (e) => {
21
17
  let r;
22
18
  return r = new n(t, s, (t) => {
23
19
  t || r?.updateNode({ loaded: !0 }), e(t), o();
24
20
  }, !0), r.fileChosen(a), r;
25
- });
21
+ }) : o();
26
22
  }
27
23
  function d(t, n) {
28
24
  let r = t.extensionManager.extensions.find((e) => e.name === "imageUploadNode")?.options.imageHandling?.insertImageRequested, i = e(t, n)?.[0].attrs.src;
@@ -40,7 +40,7 @@ var y = new u("ensureTextAfterMath"), b = (e = []) => e.map((e) => ({
40
40
  let { state: n, dispatch: r } = e, { selection: i, doc: a } = n, { from: o, empty: s } = i;
41
41
  if (s && t.key === "Backspace" && o > 0) {
42
42
  let e = S(a, o);
43
- return e === -1 ? !1 : (r(n.tr.delete(e, o)), !0);
43
+ return e !== -1 && (r(n.tr.delete(e, o)), !0);
44
44
  }
45
45
  if (s && t.key === "ArrowLeft" && o > 0) {
46
46
  let e = S(a, o);
@@ -49,7 +49,8 @@ var y = new u("ensureTextAfterMath"), b = (e = []) => e.map((e) => ({
49
49
  if (t.nodeAfter || t.nodeBefore) {
50
50
  let t = n.doc.resolve(e);
51
51
  return r(n.tr.setSelection(c.create(n.doc, t.pos))), !0;
52
- } else return r(n.tr.setSelection(d.create(n.doc, o - 2))), !0;
52
+ }
53
+ return r(n.tr.setSelection(d.create(n.doc, o - 2))), !0;
53
54
  }
54
55
  return !1;
55
56
  } }
@@ -59,9 +59,9 @@ var f = (e) => String(e || "").replace(/-/g, "_"), p = (e) => e && e.attrs && e.
59
59
  },
60
60
  addProseMirrorPlugins() {
61
61
  if (!this.options.type) return [];
62
- let e = f(this.options.type);
62
+ let e = f(this.options.type), t = new l(`response-area-watcher:${e}`);
63
63
  return [new c({
64
- key: new l(`response-area-watcher:${e}`),
64
+ key: t,
65
65
  view: (t) => {
66
66
  let { lastIndexMap: n } = this.storage;
67
67
  return n[e] = Math.max(n[e] ?? 0, m(t.state.doc, e)), { update: (t, n) => {
@@ -19,11 +19,7 @@ function r(e, t) {
19
19
  }
20
20
  function i(t, n) {
21
21
  let r = e(t);
22
- if (!n) {
23
- r?.remove();
24
- return;
25
- }
26
- r || (r = t.ownerDocument.createElement("caption"), r.setAttribute("contenteditable", "false"), t.insertBefore(r, t.firstChild)), r.textContent !== n && (r.textContent = n);
22
+ n ? (r || (r = t.ownerDocument.createElement("caption"), r.setAttribute("contenteditable", "false"), t.insertBefore(r, t.firstChild)), r.textContent !== n && (r.textContent = n)) : r?.remove();
27
23
  }
28
24
  var a = [
29
25
  "row",
@@ -90,7 +90,7 @@ var C = (e, t = null) => (n, r) => {
90
90
  })];
91
91
  }, h = (e) => {
92
92
  let t = [];
93
- return e.descendants((e) => e.isTextblock ? (t.length && t.push(i.text(" ")), t.push(...p(e)), !1) : !0), t;
93
+ return e.descendants((e) => !e.isTextblock || (t.length && t.push(i.text(" ")), t.push(...p(e)), !1)), t;
94
94
  }, v = (t) => {
95
95
  let n = t.type.name === "orderedList";
96
96
  if (e.has(t.type.name)) {
@@ -141,7 +141,7 @@ function w(e, t) {
141
141
  t.push(i(e));
142
142
  }), a.push(t.flatMap((e, t) => t ? [n.text(" ", r), ...e] : e)), !1;
143
143
  }
144
- return e.isTextblock ? (a.push(i(e)), !1) : !0;
144
+ return !e.isTextblock || (a.push(i(e)), !1);
145
145
  }), _(n, a.map((e) => n.nodes.paragraph.create(null, e)));
146
146
  }
147
147
  function T(e, t, n) {
@@ -157,9 +157,8 @@ function E(t, { text: n, html: r }, i, a) {
157
157
  if ("$anchorCell" in o && !(u.has("table") && s(r, "table"))) {
158
158
  let e = h(n).split("\n").map((e) => `<tr>${e.split(" ").map((e) => `<td>${m(e)}</td>`).join("")}</tr>`);
159
159
  t.pasteHTML(`<table><tbody>${e.join("")}</tbody></table>`);
160
- return;
161
- }
162
- if (!i.plainText) {
160
+ } else if (i.plainText) c.nodes.math && l(r) ? T(t, r, w) : t.pasteText(o.$from.parent.type.spec.code ? h(n) : h(n).replace(/^$/gm, "\xA0"));
161
+ else {
163
162
  let n = u.has("image") && c.nodes.imageUploadNode ? {
164
163
  keys: [],
165
164
  upload: !!a
@@ -167,13 +166,7 @@ function E(t, { text: n, html: r }, i, a) {
167
166
  T(t, e(n ? p(r) : r), C(u, n));
168
167
  let i = Promise.resolve();
169
168
  for (let e of n?.keys ?? []) i = i.then(() => a?.(e));
170
- return;
171
- }
172
- if (c.nodes.math && l(r)) {
173
- T(t, r, w);
174
- return;
175
169
  }
176
- t.pasteText(o.$from.parent.type.spec.code ? h(n) : h(n).replace(/^$/gm, "\xA0"));
177
170
  }
178
171
  var D = t.create({
179
172
  name: "externalPaste",
@@ -197,7 +190,7 @@ var D = t.create({
197
190
  },
198
191
  handlePaste(t, n) {
199
192
  let r = S(n.clipboardData);
200
- return r === null ? !1 : (E(t, r, e(), o), !0);
193
+ return r !== null && (E(t, r, e(), o), !0);
201
194
  },
202
195
  handleDrop(t, n) {
203
196
  let r = t.dragging ? null : S(n.dataTransfer), a = r === null ? null : t.posAtCoords({
@@ -2,10 +2,12 @@
2
2
  function e(t) {
3
3
  var n, r, i = "";
4
4
  if (typeof t == "string" || typeof t == "number") i += t;
5
- else if (typeof t == "object") if (Array.isArray(t)) {
6
- var a = t.length;
7
- for (n = 0; n < a; n++) t[n] && (r = e(t[n])) && (i && (i += " "), i += r);
8
- } else for (r in t) t[r] && (i && (i += " "), i += r);
5
+ else if (typeof t == "object") {
6
+ if (Array.isArray(t)) {
7
+ var a = t.length;
8
+ for (n = 0; n < a; n++) t[n] && (r = e(t[n])) && (i && (i += " "), i += r);
9
+ } else for (r in t) t[r] && (i && (i += " "), i += r);
10
+ }
9
11
  return i;
10
12
  }
11
13
  function t() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html-tip-tap",
3
- "version": "3.1.2-next.20261019145129",
3
+ "version": "3.1.2-next.20261019155156",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,11 +13,11 @@
13
13
  "@dnd-kit/utilities": "3.2.2",
14
14
  "@mui/icons-material": "^7.3.4",
15
15
  "@mui/material": "^7.3.4",
16
- "@pie-lib/drag": "5.0.7-next.20261019145129",
17
- "@pie-lib/math-input": "9.0.7-next.20261019145129",
18
- "@pie-lib/math-toolbar": "4.0.7-next.20261019145129",
19
- "@pie-lib/render-ui": "8.0.7-next.20261019145129",
20
- "@pie-lib/translator": "5.0.2-next.20261006160832",
16
+ "@pie-lib/drag": "5.0.7-next.20261019155156",
17
+ "@pie-lib/math-input": "9.0.7-next.20261019155156",
18
+ "@pie-lib/math-toolbar": "4.0.7-next.20261019155156",
19
+ "@pie-lib/render-ui": "8.0.7-next.20261019155156",
20
+ "@pie-lib/translator": "5.0.2-next.20261019155156",
21
21
  "@tiptap/core": "3.31.4",
22
22
  "@tiptap/extension-character-count": "3.31.4",
23
23
  "@tiptap/extension-color": "3.31.4",
@@ -44,10 +44,10 @@
44
44
  "react-portal": "^4.2.0",
45
45
  "tippy.js": "latest",
46
46
  "to-style": "^1.3.3",
47
- "@pie-element/shared-lodash": "0.1.3-next.20261012213240",
47
+ "@pie-element/shared-lodash": "0.1.3-next.20261019151920",
48
48
  "clsx": "^2.1.1",
49
49
  "prosemirror-state": "^1.4.4",
50
- "@pie-element/shared-math-rendering-mathjax": "0.1.8-next.20261019145129",
50
+ "@pie-element/shared-math-rendering-mathjax": "0.1.8-next.20261019155156",
51
51
  "@tiptap/extensions": "3.31.4",
52
52
  "@tiptap/extension-list": "3.31.4",
53
53
  "@tiptap/extension-bubble-menu": "3.31.4",