@pie-lib/editable-html-tip-tap 2.2.0-beta.9 → 3.0.0-next.36

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 (238) hide show
  1. package/dist/components/CharacterPicker.d.ts +31 -0
  2. package/dist/components/CharacterPicker.js +141 -0
  3. package/dist/components/EditableHtml.d.ts +11 -0
  4. package/dist/components/EditableHtml.js +330 -0
  5. package/dist/components/MenuBar.d.ts +11 -0
  6. package/dist/components/MenuBar.js +531 -0
  7. package/dist/components/TiptapContainer.d.ts +11 -0
  8. package/dist/components/TiptapContainer.js +167 -0
  9. package/dist/components/characters/characterUtils.d.ts +35 -0
  10. package/dist/components/characters/characterUtils.js +465 -0
  11. package/dist/components/characters/custom-popper.d.ts +14 -0
  12. package/dist/components/characters/custom-popper.js +32 -0
  13. package/dist/components/common/done-button.d.ts +30 -0
  14. package/dist/components/common/done-button.js +26 -0
  15. package/dist/components/common/toolbar-buttons.d.ts +38 -0
  16. package/dist/components/common/toolbar-buttons.js +96 -0
  17. package/dist/components/icons/CssIcon.d.ts +11 -0
  18. package/dist/components/icons/CssIcon.js +14 -0
  19. package/dist/components/icons/RespArea.d.ts +26 -0
  20. package/dist/components/icons/RespArea.js +42 -0
  21. package/dist/components/icons/TableIcons.d.ts +14 -0
  22. package/dist/components/icons/TableIcons.js +34 -0
  23. package/dist/components/icons/TextAlign.d.ts +18 -0
  24. package/dist/components/icons/TextAlign.js +143 -0
  25. package/dist/components/image/AltDialog.d.ts +22 -0
  26. package/dist/components/image/AltDialog.js +61 -0
  27. package/dist/components/image/ImageToolbar.d.ts +24 -0
  28. package/dist/components/image/ImageToolbar.js +80 -0
  29. package/dist/components/image/InsertImageHandler.d.ts +33 -0
  30. package/dist/components/image/InsertImageHandler.js +65 -0
  31. package/dist/components/image/findImageNode.d.ts +3 -0
  32. package/dist/components/image/findImageNode.js +11 -0
  33. package/dist/components/media/MediaDialog.d.ts +43 -0
  34. package/dist/components/media/MediaDialog.js +389 -0
  35. package/dist/components/media/MediaToolbar.d.ts +19 -0
  36. package/dist/components/media/MediaToolbar.js +41 -0
  37. package/dist/components/media/MediaWrapper.d.ts +19 -0
  38. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.d.ts +23 -0
  39. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.js +58 -0
  40. package/dist/components/respArea/DragInTheBlank/choice.d.ts +56 -0
  41. package/dist/components/respArea/DragInTheBlank/choice.js +157 -0
  42. package/dist/components/respArea/ExplicitConstructedResponse.d.ts +20 -0
  43. package/dist/components/respArea/ExplicitConstructedResponse.js +84 -0
  44. package/dist/components/respArea/InlineDropdown.d.ts +18 -0
  45. package/dist/components/respArea/InlineDropdown.js +126 -0
  46. package/dist/components/respArea/MathTemplated.d.ts +19 -0
  47. package/dist/components/respArea/MathTemplated.js +98 -0
  48. package/dist/components/respArea/ToolbarIcon.d.ts +14 -0
  49. package/dist/components/respArea/ToolbarIcon.js +17 -0
  50. package/dist/components/respArea/inlineDropdownUtils.d.ts +15 -0
  51. package/dist/components/respArea/inlineDropdownUtils.js +15 -0
  52. package/dist/constants.d.ts +13 -0
  53. package/dist/constants.js +4 -0
  54. package/dist/extensions/css.d.ts +11 -0
  55. package/dist/extensions/css.js +120 -0
  56. package/dist/extensions/custom-toolbar-wrapper.d.ts +11 -0
  57. package/dist/extensions/custom-toolbar-wrapper.js +61 -0
  58. package/dist/extensions/div-node.d.ts +10 -0
  59. package/dist/extensions/div-node.js +42 -0
  60. package/dist/extensions/ensure-empty-root-div.d.ts +14 -0
  61. package/dist/extensions/ensure-empty-root-div.js +24 -0
  62. package/dist/extensions/ensure-list-item-content-is-div.d.ts +15 -0
  63. package/dist/extensions/ensure-list-item-content-is-div.js +31 -0
  64. package/dist/extensions/extended-list-item.d.ts +13 -0
  65. package/dist/extensions/extended-list-item.js +5 -0
  66. package/dist/extensions/extended-table-cell.d.ts +10 -0
  67. package/dist/extensions/extended-table-cell.js +6 -0
  68. package/dist/extensions/extended-table.d.ts +17 -0
  69. package/dist/extensions/extended-table.js +34 -0
  70. package/dist/extensions/heading-paragraph.d.ts +17 -0
  71. package/dist/extensions/heading-paragraph.js +30 -0
  72. package/dist/extensions/image-component.d.ts +22 -0
  73. package/dist/extensions/image-component.js +223 -0
  74. package/dist/extensions/image.d.ts +10 -0
  75. package/dist/extensions/image.js +77 -0
  76. package/dist/extensions/index.d.ts +16 -0
  77. package/dist/extensions/index.js +64 -0
  78. package/dist/extensions/math.d.ts +15 -0
  79. package/dist/extensions/math.js +213 -0
  80. package/dist/extensions/media.d.ts +19 -0
  81. package/dist/extensions/media.js +149 -0
  82. package/dist/extensions/responseArea.d.ts +27 -0
  83. package/dist/extensions/responseArea.js +255 -0
  84. package/dist/index.d.ts +13 -0
  85. package/dist/index.js +7 -0
  86. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  87. package/dist/styles/editorContainerStyles.d.ts +134 -0
  88. package/dist/theme.d.ts +9 -0
  89. package/dist/utils/helper.d.ts +9 -0
  90. package/dist/utils/helper.js +27 -0
  91. package/dist/utils/size.d.ts +9 -0
  92. package/dist/utils/size.js +14 -0
  93. package/dist/utils/toolbar.d.ts +10 -0
  94. package/dist/utils/toolbar.js +7 -0
  95. package/package.json +56 -42
  96. package/CHANGELOG.json +0 -32
  97. package/CHANGELOG.md +0 -2532
  98. package/lib/components/CharacterPicker.js +0 -226
  99. package/lib/components/CharacterPicker.js.map +0 -1
  100. package/lib/components/EditableHtml.js +0 -388
  101. package/lib/components/EditableHtml.js.map +0 -1
  102. package/lib/components/MenuBar.js +0 -702
  103. package/lib/components/MenuBar.js.map +0 -1
  104. package/lib/components/TiptapContainer.js +0 -242
  105. package/lib/components/TiptapContainer.js.map +0 -1
  106. package/lib/components/characters/characterUtils.js +0 -378
  107. package/lib/components/characters/characterUtils.js.map +0 -1
  108. package/lib/components/characters/custom-popper.js +0 -44
  109. package/lib/components/characters/custom-popper.js.map +0 -1
  110. package/lib/components/common/done-button.js +0 -34
  111. package/lib/components/common/done-button.js.map +0 -1
  112. package/lib/components/common/toolbar-buttons.js +0 -149
  113. package/lib/components/common/toolbar-buttons.js.map +0 -1
  114. package/lib/components/icons/CssIcon.js +0 -25
  115. package/lib/components/icons/CssIcon.js.map +0 -1
  116. package/lib/components/icons/RespArea.js +0 -72
  117. package/lib/components/icons/RespArea.js.map +0 -1
  118. package/lib/components/icons/TableIcons.js +0 -53
  119. package/lib/components/icons/TableIcons.js.map +0 -1
  120. package/lib/components/icons/TextAlign.js +0 -157
  121. package/lib/components/icons/TextAlign.js.map +0 -1
  122. package/lib/components/image/AltDialog.js +0 -98
  123. package/lib/components/image/AltDialog.js.map +0 -1
  124. package/lib/components/image/ImageToolbar.js +0 -137
  125. package/lib/components/image/ImageToolbar.js.map +0 -1
  126. package/lib/components/image/InsertImageHandler.js +0 -135
  127. package/lib/components/image/InsertImageHandler.js.map +0 -1
  128. package/lib/components/media/MediaDialog.js +0 -594
  129. package/lib/components/media/MediaDialog.js.map +0 -1
  130. package/lib/components/media/MediaToolbar.js +0 -74
  131. package/lib/components/media/MediaToolbar.js.map +0 -1
  132. package/lib/components/media/MediaWrapper.js +0 -67
  133. package/lib/components/media/MediaWrapper.js.map +0 -1
  134. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +0 -84
  135. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +0 -1
  136. package/lib/components/respArea/DragInTheBlank/choice.js +0 -253
  137. package/lib/components/respArea/DragInTheBlank/choice.js.map +0 -1
  138. package/lib/components/respArea/ExplicitConstructedResponse.js +0 -137
  139. package/lib/components/respArea/ExplicitConstructedResponse.js.map +0 -1
  140. package/lib/components/respArea/InlineDropdown.js +0 -223
  141. package/lib/components/respArea/InlineDropdown.js.map +0 -1
  142. package/lib/components/respArea/MathTemplated.js +0 -130
  143. package/lib/components/respArea/MathTemplated.js.map +0 -1
  144. package/lib/components/respArea/ToolbarIcon.js +0 -81
  145. package/lib/components/respArea/ToolbarIcon.js.map +0 -1
  146. package/lib/components/respArea/inlineDropdownUtils.js +0 -67
  147. package/lib/components/respArea/inlineDropdownUtils.js.map +0 -1
  148. package/lib/constants.js +0 -11
  149. package/lib/constants.js.map +0 -1
  150. package/lib/extensions/css.js +0 -227
  151. package/lib/extensions/css.js.map +0 -1
  152. package/lib/extensions/custom-toolbar-wrapper.js +0 -92
  153. package/lib/extensions/custom-toolbar-wrapper.js.map +0 -1
  154. package/lib/extensions/div-node.js +0 -83
  155. package/lib/extensions/div-node.js.map +0 -1
  156. package/lib/extensions/ensure-empty-root-div.js +0 -48
  157. package/lib/extensions/ensure-empty-root-div.js.map +0 -1
  158. package/lib/extensions/ensure-list-item-content-is-div.js +0 -64
  159. package/lib/extensions/ensure-list-item-content-is-div.js.map +0 -1
  160. package/lib/extensions/extended-list-item.js +0 -15
  161. package/lib/extensions/extended-list-item.js.map +0 -1
  162. package/lib/extensions/extended-table-cell.js +0 -22
  163. package/lib/extensions/extended-table-cell.js.map +0 -1
  164. package/lib/extensions/extended-table.js +0 -75
  165. package/lib/extensions/extended-table.js.map +0 -1
  166. package/lib/extensions/heading-paragraph.js +0 -61
  167. package/lib/extensions/heading-paragraph.js.map +0 -1
  168. package/lib/extensions/image-component.js +0 -351
  169. package/lib/extensions/image-component.js.map +0 -1
  170. package/lib/extensions/image.js +0 -134
  171. package/lib/extensions/image.js.map +0 -1
  172. package/lib/extensions/index.js +0 -46
  173. package/lib/extensions/index.js.map +0 -1
  174. package/lib/extensions/math.js +0 -469
  175. package/lib/extensions/math.js.map +0 -1
  176. package/lib/extensions/media.js +0 -243
  177. package/lib/extensions/media.js.map +0 -1
  178. package/lib/extensions/responseArea.js +0 -452
  179. package/lib/extensions/responseArea.js.map +0 -1
  180. package/lib/index.js +0 -37
  181. package/lib/index.js.map +0 -1
  182. package/lib/styles/editorContainerStyles.js +0 -137
  183. package/lib/styles/editorContainerStyles.js.map +0 -1
  184. package/lib/theme.js +0 -8
  185. package/lib/theme.js.map +0 -1
  186. package/lib/utils/helper.js +0 -73
  187. package/lib/utils/helper.js.map +0 -1
  188. package/lib/utils/size.js +0 -26
  189. package/lib/utils/size.js.map +0 -1
  190. package/lib/utils/toolbar.js +0 -19
  191. package/lib/utils/toolbar.js.map +0 -1
  192. package/src/components/CharacterPicker.jsx +0 -237
  193. package/src/components/EditableHtml.jsx +0 -458
  194. package/src/components/MenuBar.jsx +0 -561
  195. package/src/components/TiptapContainer.jsx +0 -235
  196. package/src/components/characters/characterUtils.js +0 -447
  197. package/src/components/characters/custom-popper.js +0 -38
  198. package/src/components/common/done-button.jsx +0 -27
  199. package/src/components/common/toolbar-buttons.jsx +0 -127
  200. package/src/components/icons/CssIcon.jsx +0 -15
  201. package/src/components/icons/RespArea.jsx +0 -71
  202. package/src/components/icons/TableIcons.jsx +0 -52
  203. package/src/components/icons/TextAlign.jsx +0 -114
  204. package/src/components/image/AltDialog.jsx +0 -82
  205. package/src/components/image/ImageToolbar.jsx +0 -99
  206. package/src/components/image/InsertImageHandler.js +0 -107
  207. package/src/components/media/MediaDialog.jsx +0 -596
  208. package/src/components/media/MediaToolbar.jsx +0 -49
  209. package/src/components/media/MediaWrapper.jsx +0 -39
  210. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +0 -76
  211. package/src/components/respArea/DragInTheBlank/choice.jsx +0 -259
  212. package/src/components/respArea/ExplicitConstructedResponse.jsx +0 -136
  213. package/src/components/respArea/InlineDropdown.jsx +0 -240
  214. package/src/components/respArea/MathTemplated.jsx +0 -124
  215. package/src/components/respArea/ToolbarIcon.jsx +0 -66
  216. package/src/components/respArea/inlineDropdownUtils.js +0 -79
  217. package/src/constants.js +0 -5
  218. package/src/extensions/css.js +0 -233
  219. package/src/extensions/custom-toolbar-wrapper.jsx +0 -78
  220. package/src/extensions/div-node.js +0 -86
  221. package/src/extensions/ensure-empty-root-div.js +0 -47
  222. package/src/extensions/ensure-list-item-content-is-div.js +0 -62
  223. package/src/extensions/extended-list-item.js +0 -10
  224. package/src/extensions/extended-table-cell.js +0 -19
  225. package/src/extensions/extended-table.js +0 -60
  226. package/src/extensions/heading-paragraph.js +0 -53
  227. package/src/extensions/image-component.jsx +0 -340
  228. package/src/extensions/image.js +0 -109
  229. package/src/extensions/index.js +0 -81
  230. package/src/extensions/math.js +0 -454
  231. package/src/extensions/media.js +0 -188
  232. package/src/extensions/responseArea.js +0 -407
  233. package/src/index.jsx +0 -5
  234. package/src/styles/editorContainerStyles.js +0 -145
  235. package/src/theme.js +0 -1
  236. package/src/utils/helper.js +0 -69
  237. package/src/utils/size.js +0 -32
  238. package/src/utils/toolbar.js +0 -15
@@ -0,0 +1,223 @@
1
+ import e from "./custom-toolbar-wrapper.js";
2
+ import t from "../components/image/findImageNode.js";
3
+ import n from "../components/image/InsertImageHandler.js";
4
+ import { ImageToolbar as r } from "../components/image/ImageToolbar.js";
5
+ import { useCallback as i, useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
6
+ import { isEqual as l } from "@pie-element/shared-lodash";
7
+ import { NodeViewWrapper as u } from "@tiptap/react";
8
+ import { styled as d } from "@mui/material/styles";
9
+ import f from "react-dom";
10
+ import p from "prop-types";
11
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
12
+ import g from "debug";
13
+ import _ from "@mui/material/LinearProgress";
14
+ //#region src/extensions/image-component.tsx
15
+ g("@pie-lib:editable-html:plugins:image:component");
16
+ var v = d(_, { shouldForwardProp: (e) => e !== "hideProgress" })(({ hideProgress: e }) => ({
17
+ position: "absolute",
18
+ left: "0",
19
+ width: "fit-content",
20
+ top: "0%",
21
+ transition: "opacity 200ms linear",
22
+ ...e && { opacity: 0 }
23
+ })), y = d("div", { shouldForwardProp: (e) => ![
24
+ "active",
25
+ "loading",
26
+ "pendingDelete"
27
+ ].includes(e) })(({ loading: e, pendingDelete: t }) => ({
28
+ position: "relative",
29
+ display: "flex",
30
+ transition: "opacity 200ms linear",
31
+ ...e && { opacity: .3 },
32
+ ...t && { opacity: .3 }
33
+ })), b = d("div")(({ theme: e }) => ({
34
+ position: "relative",
35
+ width: "fit-content",
36
+ display: "flex",
37
+ alignItems: "center",
38
+ "&&:hover > .resize": { display: "block" }
39
+ })), x = d("img", { shouldForwardProp: (e) => e !== "active" })(({ theme: e, active: t }) => ({ border: t ? `solid 1px ${e.palette.primary.main}` : "solid 1px transparent" })), S = d("div")(({ theme: e }) => ({
40
+ backgroundColor: e.palette.primary.main,
41
+ cursor: "col-resize",
42
+ height: "35px",
43
+ width: "5px",
44
+ borderRadius: 8,
45
+ marginLeft: "5px",
46
+ marginRight: "10px",
47
+ display: "none"
48
+ })), C = (e) => e ? `${e}px` : "calc(20px)";
49
+ function w(d) {
50
+ let { node: p, editor: g, attributes: _, onFocus: w, getPos: T, selected: E, options: D, maxImageWidth: O = 700, maxImageHeight: k = 900 } = d, { alt: A } = p.attrs, j = T(), M = g.state.selection.from, N = g.state.selection.to, P = o(() => M + p.nodeSize === N, [
51
+ M,
52
+ N,
53
+ p.nodeSize
54
+ ]), [F, I] = c(!1), L = s(p), R = s(null), z = s(null), B = s(null), V = i((e) => {
55
+ let t = e / R.current.naturalWidth * 4;
56
+ return parseInt(t.toFixed(0) * 25, 10);
57
+ }, []), H = i(() => {
58
+ let e = t(g, L.current.attrs.nodeKey);
59
+ return e ? e[1] : null;
60
+ }, [g]), U = i((e) => {
61
+ let t = H();
62
+ if (t === null) return;
63
+ let n = g.state.doc.nodeAt(t);
64
+ n && g.view.dispatch(g.state.tr.setNodeMarkup(t, void 0, {
65
+ ...n.attrs,
66
+ ...e
67
+ }));
68
+ }, [g, H]), W = i(() => {
69
+ if (!p.attrs.width || !R.current || !R.current.naturalWidth) return;
70
+ let e = V(p.attrs.width);
71
+ p.attrs.resizePercent !== e && U({ resizePercent: e });
72
+ }, [
73
+ p.attrs.width,
74
+ p.attrs.resizePercent,
75
+ V,
76
+ U
77
+ ]);
78
+ a(() => {
79
+ L.current = {
80
+ ...p,
81
+ pos: j
82
+ };
83
+ }, [p, j]), a(() => {
84
+ E ? P && g.isEditable && (!String(p.attrs?.src ?? "").trim() && D.imageHandling?.insertImageRequested && D.imageHandling.insertImageRequested(g, [p, j], (e) => new n(g, [p, j], e)), I(E)) : I(E);
85
+ }, [
86
+ P,
87
+ E,
88
+ g.isEditable
89
+ ]), a(() => {
90
+ W();
91
+ let e = z?.current;
92
+ return e && g.isEditable && e.addEventListener("mousedown", X, !1), () => {
93
+ e && e.removeEventListener("mousedown", X, !1);
94
+ };
95
+ }, []), a(() => {
96
+ W();
97
+ });
98
+ let G = i(() => {
99
+ let e = R.current;
100
+ if (e && (!e.style.width || e.style.width === "calc(20px)")) {
101
+ let t = Math.min(e.naturalWidth, O), n = Math.min(e.naturalHeight, k);
102
+ e.style.width = `${t}px`, e.style.height = `${n}px`;
103
+ let r = {
104
+ width: t,
105
+ height: n
106
+ };
107
+ l(r, {
108
+ width: p.attrs.width,
109
+ height: p.attrs.height
110
+ }) || U(r);
111
+ }
112
+ }, [
113
+ p.attrs.width,
114
+ p.attrs.height,
115
+ O,
116
+ k,
117
+ U
118
+ ]), K = (e, t, n = !0, r) => {
119
+ if (n) {
120
+ let n = e.width / e.height;
121
+ return r === "height" ? {
122
+ width: t.height * n,
123
+ height: t.height
124
+ } : {
125
+ width: t.width,
126
+ height: t.width / n
127
+ };
128
+ }
129
+ return t;
130
+ }, q = i((e) => {
131
+ let t = R.current;
132
+ if (!t) return;
133
+ let n = e.target.getBoundingClientRect(), r = {
134
+ width: t.naturalWidth,
135
+ height: t.naturalHeight
136
+ }, i = K(r, {
137
+ width: e.clientX - n.left,
138
+ height: e.clientY - n.top
139
+ });
140
+ i.width > 50 && i.height > 50 && i.width <= 700 && i.height <= 900 && (t.style.width = `${i.width}px`, t.style.height = `${i.height}px`, U({
141
+ width: i.width,
142
+ height: i.height
143
+ }));
144
+ }, [g, U]), J = i((e) => {
145
+ U(e);
146
+ }, [g, U]), Y = i(() => {
147
+ window.removeEventListener("mousemove", q), window.removeEventListener("mouseup", Y);
148
+ }, [q]), X = i(() => {
149
+ window.addEventListener("mousemove", q), window.addEventListener("mouseup", Y);
150
+ }, [q, Y]), Z = {
151
+ width: C(p.attrs.width),
152
+ height: C(p.attrs.height),
153
+ objectFit: "contain"
154
+ }, Q = {
155
+ left: "flex-start",
156
+ center: "center",
157
+ right: "flex-end"
158
+ }[p.attrs.alignment] || "flex-start";
159
+ return /* @__PURE__ */ h(u, { children: [/* @__PURE__ */ h(y, {
160
+ onFocus: w,
161
+ loading: !p.attrs.loaded,
162
+ pendingDelete: p.attrs.deleteStatus === "pending",
163
+ style: { justifyContent: Q },
164
+ children: [/* @__PURE__ */ m(v, {
165
+ mode: "determinate",
166
+ value: p.attrs.percent || 0,
167
+ hideProgress: p.attrs.loaded
168
+ }), /* @__PURE__ */ h(b, {
169
+ onDragStart: (e) => e.preventDefault(),
170
+ children: [/* @__PURE__ */ m(x, {
171
+ ..._,
172
+ active: E && p.attrs.loaded,
173
+ draggable: !1,
174
+ ref: R,
175
+ src: p.attrs.src,
176
+ style: Z,
177
+ onLoad: G,
178
+ alt: p.attrs.alt
179
+ }), /* @__PURE__ */ m(S, {
180
+ ref: z,
181
+ className: "resize",
182
+ style: { display: g.isEditable ? void 0 : "none" }
183
+ })]
184
+ })]
185
+ }), F && g._tiptapContainerEl && f.createPortal(/* @__PURE__ */ m("div", {
186
+ ref: B,
187
+ style: {
188
+ zIndex: 20,
189
+ background: "var(--editable-html-toolbar-bg, #efefef)",
190
+ boxShadow: "0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)",
191
+ width: "100%"
192
+ },
193
+ children: /* @__PURE__ */ m(e, {
194
+ showDone: !0,
195
+ deletable: !0,
196
+ toolbarOpts: D.toolbarOpts || {},
197
+ onDelete: () => {
198
+ let e = H();
199
+ e !== null && (D.imageHandling?.onDelete?.(L.current), g.view.dispatch(g.state.tr.delete(e, e + g.state.doc.nodeAt(e).nodeSize)), I(!1), g.commands.focus());
200
+ },
201
+ onDone: () => {
202
+ I(!1), D.imageHandling?.onDone?.(g), g.commands.focus("end");
203
+ },
204
+ children: /* @__PURE__ */ m(r, {
205
+ disableImageAlignmentButtons: D.imageHandling?.disableImageAlignmentButtons,
206
+ alt: p.attrs.alt,
207
+ imageLoaded: p.attrs.loaded,
208
+ alignment: p.attrs.alignment || "left",
209
+ onChange: J
210
+ })
211
+ })
212
+ }), g._tiptapContainerEl)] });
213
+ }
214
+ w.propTypes = {
215
+ node: p.object.isRequired,
216
+ editor: p.object.isRequired,
217
+ attributes: p.object,
218
+ onFocus: p.func,
219
+ maxImageWidth: p.number,
220
+ maxImageHeight: p.number
221
+ };
222
+ //#endregion
223
+ export { w as default };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @synced-from pie-lib/packages/editable-html-tip-tap/src/extensions/image.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import { Node } from '@tiptap/core';
10
+ export declare const ImageUploadNode: Node<any, any>;
@@ -0,0 +1,77 @@
1
+ import e, { newImageNodeKey as t } from "../components/image/findImageNode.js";
2
+ import n from "../components/image/InsertImageHandler.js";
3
+ import r from "./image-component.js";
4
+ import "react";
5
+ import { ReactNodeViewRenderer as i } from "@tiptap/react";
6
+ import { Node as a, mergeAttributes as o } from "@tiptap/core";
7
+ import { Plugin as s } from "@tiptap/pm/state";
8
+ import { jsx as c } from "react/jsx-runtime";
9
+ //#region src/extensions/image.tsx
10
+ var l = a.create({
11
+ name: "imageUploadNode",
12
+ group: "block",
13
+ atom: !0,
14
+ selectable: !0,
15
+ draggable: !0,
16
+ addAttributes() {
17
+ return {
18
+ nodeKey: { default: null },
19
+ loaded: { default: !1 },
20
+ deleteStatus: { default: null },
21
+ alignment: { default: null },
22
+ percent: { default: null },
23
+ width: { default: null },
24
+ height: { default: null },
25
+ src: { default: null },
26
+ alt: { default: null }
27
+ };
28
+ },
29
+ parseHTML() {
30
+ return [{ tag: "img[data-type=\"image-upload-node\"]" }];
31
+ },
32
+ renderHTML({ HTMLAttributes: e }) {
33
+ return ["img", o(e, { "data-type": "image-upload-node" })];
34
+ },
35
+ addNodeView() {
36
+ return i((e) => /* @__PURE__ */ c(r, {
37
+ ...e,
38
+ options: this.options
39
+ }));
40
+ },
41
+ addCommands() {
42
+ return { setImageUploadNode: () => ({ commands: e }) => e.insertContent({
43
+ type: this.name,
44
+ attrs: { nodeKey: t() }
45
+ }) };
46
+ },
47
+ addProseMirrorPlugins() {
48
+ let r = this.editor, i = this.options;
49
+ return [new s({ props: { handlePaste(a, o) {
50
+ let s = Array.from(o.clipboardData?.items || []).find((e) => e.kind === "file" && e.type.startsWith("image/"));
51
+ if (!s) return !1;
52
+ let c = s.getAsFile();
53
+ if (!c) return !1;
54
+ let l = i?.imageHandling?.insertImageRequested, u = t(), d = new FileReader();
55
+ return d.onload = () => {
56
+ let t = d.result;
57
+ if (typeof t != "string" || (r.commands.insertContent({
58
+ type: "imageUploadNode",
59
+ attrs: {
60
+ src: t,
61
+ loaded: !l,
62
+ nodeKey: u
63
+ }
64
+ }), !l)) return;
65
+ let i = e(r, u);
66
+ i && l(r, i, (e) => {
67
+ let t;
68
+ return t = new n(r, i, (n) => {
69
+ n || t?.updateNode({ loaded: !0 }), e(n);
70
+ }, !0), t.fileChosen(c), t;
71
+ });
72
+ }, d.readAsDataURL(c), !0;
73
+ } } })];
74
+ }
75
+ });
76
+ //#endregion
77
+ export { l as ImageUploadNode };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @synced-from pie-lib/packages/editable-html-tip-tap/src/extensions/index.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ export declare const ALL_PLUGINS: string[];
10
+ export declare const PLUGINS_MAP: {
11
+ 'text-align': string;
12
+ 'bulleted-list': string;
13
+ 'numbered-list': string;
14
+ };
15
+ export declare const DEFAULT_PLUGINS: string[];
16
+ export declare const buildExtensions: (activeExtensions: any, customExtensions: any, opts: any) => any[];
@@ -0,0 +1,64 @@
1
+ import { compact as e, isEmpty as t } from "@pie-element/shared-lodash";
2
+ import n from "debug";
3
+ //#region src/extensions/index.tsx
4
+ var r = n("@pie-lib:editable-html:plugins"), i = [
5
+ "bold",
6
+ "html",
7
+ "extraCSSRules",
8
+ "italic",
9
+ "underline",
10
+ "strikethrough",
11
+ "bulleted-list",
12
+ "numbered-list",
13
+ "image",
14
+ "math",
15
+ "languageCharacters",
16
+ "text-align",
17
+ "blockquote",
18
+ "h3",
19
+ "table",
20
+ "video",
21
+ "audio",
22
+ "responseArea",
23
+ "redo",
24
+ "undo",
25
+ "superscript",
26
+ "subscript"
27
+ ], a = {
28
+ "text-align": "textAlign",
29
+ "bulleted-list": "ul_list",
30
+ "numbered-list": "ol_list"
31
+ }, o = i.filter((e) => ![
32
+ "responseArea",
33
+ "h3",
34
+ "blockquote"
35
+ ].includes(e)), s = (n, i, a) => {
36
+ r("[buildPlugins] opts: ", a), n ||= o;
37
+ let s = (e, t = !0) => n.includes(e) && t && e, c = a.image && a.image.delete, l = a.math, u = a.responseArea && a.responseArea.type, d = !t(a.extraCSSRules), f = a?.languageCharacters || [];
38
+ return e([
39
+ s("table"),
40
+ s("bold"),
41
+ s("italic"),
42
+ s("strikethrough"),
43
+ s("underline"),
44
+ s("superscript"),
45
+ s("subscript"),
46
+ s("image", !!c),
47
+ s("video"),
48
+ s("audio"),
49
+ s("math", !!l),
50
+ ...f.map((e) => s("languageCharacters", e)),
51
+ s("text-align"),
52
+ s("blockquote"),
53
+ s("h3"),
54
+ s("bulleted-list"),
55
+ s("numbered-list"),
56
+ s("undo"),
57
+ s("redo"),
58
+ s("responseArea", !!u),
59
+ s("css", !!d),
60
+ s("html", !!a.html)
61
+ ]);
62
+ };
63
+ //#endregion
64
+ export { i as ALL_PLUGINS, o as DEFAULT_PLUGINS, a as PLUGINS_MAP, s as buildExtensions };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @synced-from pie-lib/packages/editable-html-tip-tap/src/extensions/math.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import { Node } from '@tiptap/core';
11
+ import { Plugin } from 'prosemirror-state';
12
+ export declare const EnsureTextAfterMathPlugin: (mathNodeName: any) => Plugin<any>;
13
+ export declare const ZeroWidthSpaceHandlingPlugin: Plugin<any>;
14
+ export declare const MathNode: Node<any, any>;
15
+ export declare const MathNodeView: (props: any) => React.JSX.Element;
@@ -0,0 +1,213 @@
1
+ import { setToolbarOpened as e } from "../utils/toolbar.js";
2
+ import { useEffect as t, useRef as n, useState as r } from "react";
3
+ import { NodeViewWrapper as i, ReactNodeViewRenderer as a } from "@tiptap/react";
4
+ import { Node as o } from "@tiptap/core";
5
+ import { NodeSelection as s, Plugin as c, PluginKey as l, TextSelection as u } from "prosemirror-state";
6
+ import d from "react-dom";
7
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
8
+ import { wrapMath as m } from "@pie-element/shared-math-rendering-mathjax";
9
+ import { MathPreview as h, MathToolbar as g } from "@pie-lib/math-toolbar";
10
+ //#region src/extensions/math.tsx
11
+ var _ = new l("ensureTextAfterMath"), v = (e = []) => e.map((e) => ({
12
+ name: e,
13
+ latex: e,
14
+ write: e,
15
+ label: e
16
+ })), y = (e) => new c({
17
+ key: _,
18
+ appendTransaction: (t, n, r) => {
19
+ if (!t.some((e) => e.docChanged)) return null;
20
+ let i = r.tr, a = !1;
21
+ return r.doc.descendants((t, n) => {
22
+ if (t.type.name === e) {
23
+ let e = n + t.nodeSize, o = r.doc.nodeAt(e);
24
+ (!o || o.type.name !== "text") && (i.insert(e, r.schema.text("​")), a = !0);
25
+ }
26
+ }), a ? i : null;
27
+ }
28
+ }), b = (e, t) => {
29
+ let n;
30
+ for (n = t; n > 0; n--) {
31
+ let t = e.nodeAt(n);
32
+ if (t?.type?.name === "text" && t.textContent !== "​") return -1;
33
+ if (t && t?.type?.name !== "text") break;
34
+ }
35
+ return n;
36
+ }, x = new c({
37
+ key: new l("zeroWidthSpaceHandling"),
38
+ props: { handleKeyDown(e, t) {
39
+ let { state: n, dispatch: r } = e, { selection: i, doc: a } = n, { from: o, empty: c } = i;
40
+ if (c && t.key === "Backspace" && o > 0) {
41
+ let e = b(a, o);
42
+ return e === -1 ? !1 : (r(n.tr.delete(e, o)), !0);
43
+ }
44
+ if (c && t.key === "ArrowLeft" && o > 0) {
45
+ let e = b(a, o);
46
+ if (e === -1) return !1;
47
+ let t = n.doc.resolve(e);
48
+ if (t.nodeAfter || t.nodeBefore) {
49
+ let t = n.doc.resolve(e);
50
+ return r(n.tr.setSelection(s.create(n.doc, t.pos))), !0;
51
+ } else return r(n.tr.setSelection(u.create(n.doc, o - 2))), !0;
52
+ }
53
+ return !1;
54
+ } }
55
+ }), S = o.create({
56
+ name: "math",
57
+ group: "inline",
58
+ inline: !0,
59
+ atom: !0,
60
+ addAttributes() {
61
+ return {
62
+ latex: { default: "" },
63
+ wrapper: { default: null },
64
+ html: { default: null }
65
+ };
66
+ },
67
+ addProseMirrorPlugins() {
68
+ return [y(this.name), x];
69
+ },
70
+ parseHTML() {
71
+ return [{
72
+ tag: "span[data-latex]",
73
+ getAttrs: (e) => ({ latex: e.getAttribute("data-raw") || e.textContent })
74
+ }, {
75
+ tag: "span[data-type=\"mathml\"]",
76
+ getAttrs: (e) => ({ html: e.innerHTML })
77
+ }];
78
+ },
79
+ addCommands() {
80
+ return { insertMath: (t = "") => ({ tr: n, editor: r, dispatch: i }) => {
81
+ let { state: a } = r.view, o = a.schema.nodes.math.create({ latex: t }), { selection: c } = a, l = c.$from.pos;
82
+ if (n.insert(l, o), o?.type?.name === this.name) {
83
+ let e = s.create(n.doc, c.$from.pos);
84
+ n.setSelection(e);
85
+ }
86
+ return i(n), e(r, !0), !0;
87
+ } };
88
+ },
89
+ renderHTML({ HTMLAttributes: e }) {
90
+ return e.html ? ["span", {
91
+ "data-type": "mathml",
92
+ dangerouslySetInnerHTML: { __html: e.html }
93
+ }] : [
94
+ "span",
95
+ {
96
+ "data-latex": "",
97
+ "data-raw": e.latex
98
+ },
99
+ m(e.latex, e.wrapper)
100
+ ];
101
+ },
102
+ addNodeView() {
103
+ return a((e) => /* @__PURE__ */ f(C, {
104
+ ...e,
105
+ options: this.options
106
+ }));
107
+ }
108
+ }), C = (a) => {
109
+ let { node: o, updateAttributes: s, editor: c, selected: l, options: m, getPos: _ } = a, [y, b] = r(l), x = n(null), S = n(null), C = n(Date.now()), [w, T] = r({
110
+ top: 0,
111
+ left: 0
112
+ }), { math: E = {} } = m || {}, { keypadMode: D, controlledKeypadMode: O = !0, customKeys: k = [], keyPadCharacterRef: A, setKeypadInteraction: j } = E, M = o.attrs.latex || "", N = (e) => {
113
+ s({ latex: e });
114
+ }, P = (e, { moveCursorAfterNode: t = !0 } = {}) => {
115
+ if (s({ latex: e }), b(!1), t && typeof _ == "function") {
116
+ let e = _(), { doc: t } = c.state, n = u.create(t, e + o.nodeSize), r = c.state.tr.setSelection(n);
117
+ c.view.dispatch(r);
118
+ }
119
+ c.commands.focus();
120
+ };
121
+ return t(() => {
122
+ if (!l) return;
123
+ let { selection: e } = c.state;
124
+ e.node?.type?.name === "math" && b(!0);
125
+ }, [l, c]), t(() => {
126
+ e(c, l || y);
127
+ }, [
128
+ c,
129
+ y,
130
+ l
131
+ ]), t(() => {
132
+ if (!c || !y) {
133
+ T({
134
+ top: 0,
135
+ left: 0
136
+ });
137
+ return;
138
+ }
139
+ let e = () => {
140
+ if (!x.current) return;
141
+ let { from: e } = c.state.selection, t = c.view.coordsAtPos(e), n = S.current?.getBoundingClientRect?.(), r = n?.height ? n.top : t.top, i = n?.width ? n.left : t.left, a = n?.height ? n.bottom : t.bottom ?? t.top, o = x.current.offsetHeight, s = x.current.offsetWidth, l = window.innerHeight - (a + 0) >= o ? a + 0 : r - o - 0, u = i;
142
+ l = Math.max(8, Math.min(l, window.innerHeight - o - 8)), u = Math.max(8, Math.min(u, window.innerWidth - s - 8));
143
+ let d = (c._tiptapContainerEl || document.body).getBoundingClientRect();
144
+ T({
145
+ top: l - d.top,
146
+ left: u - d.left
147
+ });
148
+ };
149
+ e();
150
+ let t = null, n = () => {
151
+ t === null && (t = requestAnimationFrame(() => {
152
+ t = null, e();
153
+ }));
154
+ };
155
+ return t = requestAnimationFrame(() => {
156
+ t = null, e();
157
+ }), window.addEventListener("scroll", n, !0), window.addEventListener("resize", n), () => {
158
+ t !== null && cancelAnimationFrame(t), window.removeEventListener("scroll", n, !0), window.removeEventListener("resize", n);
159
+ };
160
+ }, [c, y]), t(() => {
161
+ let e = (e) => {
162
+ let t = e?.target, n = (document.querySelectorAll?.("[id^=\"equation-editor-select\"][id*=\"listbox\"], [aria-labelledby=\"equation-editor-label\"][role=\"listbox\"]") || []).length > 0, r = !!(t?.id && t.id.includes("equation-editor-select")) || !!t?.closest?.("[id*=\"equation-editor-select\"]"), i = !!t?.closest?.(`.math-node-${C.current}`);
163
+ if (x.current && !x.current.contains(t) && !t?.closest?.("[data-inline-node]") && !n && !r && !i) {
164
+ b(!1);
165
+ let e = !!c?.view?.dom?.contains(t);
166
+ P(o.attrs.latex, { moveCursorAfterNode: !e });
167
+ }
168
+ };
169
+ return y ? document.addEventListener("click", e) : document.removeEventListener("click", e), () => document.removeEventListener("click", e);
170
+ }, [
171
+ c,
172
+ y,
173
+ o
174
+ ]), /* @__PURE__ */ p(i, {
175
+ className: `math-node-${C.current}`,
176
+ style: {
177
+ display: "inline-flex",
178
+ cursor: "pointer",
179
+ margin: "0 4px"
180
+ },
181
+ "data-selected": l,
182
+ children: [/* @__PURE__ */ f("div", {
183
+ ref: S,
184
+ onClick: () => b(!0),
185
+ contentEditable: !1,
186
+ children: /* @__PURE__ */ f(h, { latex: M })
187
+ }), y && d.createPortal(/* @__PURE__ */ f("div", {
188
+ ref: x,
189
+ "data-toolbar-for": c.instanceId,
190
+ style: {
191
+ position: "absolute",
192
+ top: `${w.top}px`,
193
+ left: `${w.left}px`,
194
+ zIndex: 1e3,
195
+ background: "var(--editable-html-toolbar-bg, #efefef)",
196
+ boxShadow: "0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)"
197
+ },
198
+ children: /* @__PURE__ */ f(g, {
199
+ latex: M,
200
+ autoFocus: !0,
201
+ onChange: N,
202
+ onDone: P,
203
+ keypadMode: D,
204
+ controlledKeypadMode: O,
205
+ additionalKeys: v(k),
206
+ keyPadCharacterRef: A,
207
+ setKeypadInteraction: j
208
+ })
209
+ }), c?._tiptapContainerEl || document.body)]
210
+ });
211
+ };
212
+ //#endregion
213
+ export { y as EnsureTextAfterMathPlugin, S as MathNode, C as MathNodeView, x as ZeroWidthSpaceHandlingPlugin };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @synced-from pie-lib/packages/editable-html-tip-tap/src/extensions/media.js
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import { Node } from '@tiptap/core';
11
+ export declare const Media: Node<any, any>;
12
+ export declare const insertDialog: (props: any) => void;
13
+ export default function MediaNodeView({ editor, node, updateAttributes, deleteNode, options }: {
14
+ editor: any;
15
+ node: any;
16
+ updateAttributes: any;
17
+ deleteNode: any;
18
+ options: any;
19
+ }): React.JSX.Element;