@pie-lib/editable-html-tip-tap 2.1.1 → 2.1.2-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist/components/CharacterPicker.d.ts +31 -0
  2. package/dist/components/CharacterPicker.js +131 -0
  3. package/dist/components/EditableHtml.d.ts +11 -0
  4. package/dist/components/EditableHtml.js +291 -0
  5. package/dist/components/MenuBar.d.ts +11 -0
  6. package/dist/components/MenuBar.js +462 -0
  7. package/dist/components/TiptapContainer.d.ts +11 -0
  8. package/dist/components/TiptapContainer.js +154 -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 +91 -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 +32 -0
  23. package/dist/components/icons/TextAlign.d.ts +18 -0
  24. package/dist/components/icons/TextAlign.js +134 -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 +32 -0
  30. package/dist/components/image/InsertImageHandler.js +53 -0
  31. package/dist/components/media/MediaDialog.d.ts +43 -0
  32. package/dist/components/media/MediaDialog.js +389 -0
  33. package/dist/components/media/MediaToolbar.d.ts +19 -0
  34. package/dist/components/media/MediaToolbar.js +41 -0
  35. package/dist/components/media/MediaWrapper.d.ts +19 -0
  36. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.d.ts +23 -0
  37. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.js +58 -0
  38. package/dist/components/respArea/DragInTheBlank/choice.d.ts +56 -0
  39. package/dist/components/respArea/DragInTheBlank/choice.js +156 -0
  40. package/dist/components/respArea/ExplicitConstructedResponse.d.ts +20 -0
  41. package/dist/components/respArea/ExplicitConstructedResponse.js +83 -0
  42. package/dist/components/respArea/InlineDropdown.d.ts +18 -0
  43. package/dist/components/respArea/InlineDropdown.js +119 -0
  44. package/dist/components/respArea/MathTemplated.d.ts +19 -0
  45. package/dist/components/respArea/MathTemplated.js +97 -0
  46. package/dist/components/respArea/ToolbarIcon.d.ts +14 -0
  47. package/dist/components/respArea/ToolbarIcon.js +17 -0
  48. package/dist/components/respArea/inlineDropdownUtils.d.ts +15 -0
  49. package/dist/components/respArea/inlineDropdownUtils.js +15 -0
  50. package/dist/constants.d.ts +13 -0
  51. package/dist/constants.js +4 -0
  52. package/dist/extensions/css.d.ts +11 -0
  53. package/dist/extensions/css.js +115 -0
  54. package/dist/extensions/custom-toolbar-wrapper.d.ts +11 -0
  55. package/dist/extensions/custom-toolbar-wrapper.js +61 -0
  56. package/dist/extensions/div-node.d.ts +10 -0
  57. package/dist/extensions/div-node.js +42 -0
  58. package/dist/extensions/ensure-empty-root-div.d.ts +14 -0
  59. package/dist/extensions/ensure-empty-root-div.js +24 -0
  60. package/dist/extensions/ensure-list-item-content-is-div.d.ts +15 -0
  61. package/dist/extensions/ensure-list-item-content-is-div.js +31 -0
  62. package/dist/extensions/extended-list-item.d.ts +13 -0
  63. package/dist/extensions/extended-list-item.js +5 -0
  64. package/dist/extensions/extended-table-cell.d.ts +10 -0
  65. package/dist/extensions/extended-table-cell.js +6 -0
  66. package/dist/extensions/extended-table.d.ts +17 -0
  67. package/dist/extensions/extended-table.js +34 -0
  68. package/dist/extensions/heading-paragraph.d.ts +17 -0
  69. package/dist/extensions/heading-paragraph.js +30 -0
  70. package/dist/extensions/image-component.d.ts +22 -0
  71. package/dist/extensions/image-component.js +220 -0
  72. package/dist/extensions/image.d.ts +10 -0
  73. package/dist/extensions/image.js +68 -0
  74. package/dist/extensions/index.d.ts +16 -0
  75. package/dist/extensions/index.js +65 -0
  76. package/dist/extensions/math.d.ts +15 -0
  77. package/dist/extensions/math.js +158 -0
  78. package/dist/extensions/media.d.ts +19 -0
  79. package/dist/extensions/media.js +149 -0
  80. package/dist/extensions/responseArea.d.ts +27 -0
  81. package/dist/extensions/responseArea.js +259 -0
  82. package/dist/index.d.ts +13 -0
  83. package/dist/index.js +7 -0
  84. package/dist/styles/editorContainerStyles.d.ts +134 -0
  85. package/dist/theme.d.ts +9 -0
  86. package/dist/utils/helper.d.ts +9 -0
  87. package/dist/utils/helper.js +27 -0
  88. package/dist/utils/size.d.ts +9 -0
  89. package/dist/utils/size.js +14 -0
  90. package/package.json +51 -38
  91. package/CHANGELOG.json +0 -32
  92. package/CHANGELOG.md +0 -2532
  93. package/LICENSE.md +0 -5
  94. package/lib/components/CharacterPicker.js +0 -195
  95. package/lib/components/CharacterPicker.js.map +0 -1
  96. package/lib/components/EditableHtml.js +0 -375
  97. package/lib/components/EditableHtml.js.map +0 -1
  98. package/lib/components/MenuBar.js +0 -693
  99. package/lib/components/MenuBar.js.map +0 -1
  100. package/lib/components/TiptapContainer.js +0 -234
  101. package/lib/components/TiptapContainer.js.map +0 -1
  102. package/lib/components/characters/characterUtils.js +0 -378
  103. package/lib/components/characters/characterUtils.js.map +0 -1
  104. package/lib/components/characters/custom-popper.js +0 -44
  105. package/lib/components/characters/custom-popper.js.map +0 -1
  106. package/lib/components/common/done-button.js +0 -34
  107. package/lib/components/common/done-button.js.map +0 -1
  108. package/lib/components/common/toolbar-buttons.js +0 -144
  109. package/lib/components/common/toolbar-buttons.js.map +0 -1
  110. package/lib/components/icons/CssIcon.js +0 -25
  111. package/lib/components/icons/CssIcon.js.map +0 -1
  112. package/lib/components/icons/RespArea.js +0 -72
  113. package/lib/components/icons/RespArea.js.map +0 -1
  114. package/lib/components/icons/TableIcons.js +0 -53
  115. package/lib/components/icons/TableIcons.js.map +0 -1
  116. package/lib/components/icons/TextAlign.js +0 -157
  117. package/lib/components/icons/TextAlign.js.map +0 -1
  118. package/lib/components/image/AltDialog.js +0 -98
  119. package/lib/components/image/AltDialog.js.map +0 -1
  120. package/lib/components/image/ImageToolbar.js +0 -137
  121. package/lib/components/image/ImageToolbar.js.map +0 -1
  122. package/lib/components/image/InsertImageHandler.js +0 -135
  123. package/lib/components/image/InsertImageHandler.js.map +0 -1
  124. package/lib/components/media/MediaDialog.js +0 -594
  125. package/lib/components/media/MediaDialog.js.map +0 -1
  126. package/lib/components/media/MediaToolbar.js +0 -74
  127. package/lib/components/media/MediaToolbar.js.map +0 -1
  128. package/lib/components/media/MediaWrapper.js +0 -67
  129. package/lib/components/media/MediaWrapper.js.map +0 -1
  130. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +0 -84
  131. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +0 -1
  132. package/lib/components/respArea/DragInTheBlank/choice.js +0 -250
  133. package/lib/components/respArea/DragInTheBlank/choice.js.map +0 -1
  134. package/lib/components/respArea/ExplicitConstructedResponse.js +0 -136
  135. package/lib/components/respArea/ExplicitConstructedResponse.js.map +0 -1
  136. package/lib/components/respArea/InlineDropdown.js +0 -165
  137. package/lib/components/respArea/InlineDropdown.js.map +0 -1
  138. package/lib/components/respArea/MathTemplated.js +0 -130
  139. package/lib/components/respArea/MathTemplated.js.map +0 -1
  140. package/lib/components/respArea/ToolbarIcon.js +0 -81
  141. package/lib/components/respArea/ToolbarIcon.js.map +0 -1
  142. package/lib/constants.js +0 -11
  143. package/lib/constants.js.map +0 -1
  144. package/lib/extensions/css.js +0 -217
  145. package/lib/extensions/css.js.map +0 -1
  146. package/lib/extensions/custom-toolbar-wrapper.js +0 -92
  147. package/lib/extensions/custom-toolbar-wrapper.js.map +0 -1
  148. package/lib/extensions/div-node.js +0 -83
  149. package/lib/extensions/div-node.js.map +0 -1
  150. package/lib/extensions/ensure-empty-root-div.js +0 -48
  151. package/lib/extensions/ensure-empty-root-div.js.map +0 -1
  152. package/lib/extensions/ensure-list-item-content-is-div.js +0 -64
  153. package/lib/extensions/ensure-list-item-content-is-div.js.map +0 -1
  154. package/lib/extensions/extended-list-item.js +0 -15
  155. package/lib/extensions/extended-list-item.js.map +0 -1
  156. package/lib/extensions/extended-table-cell.js +0 -22
  157. package/lib/extensions/extended-table-cell.js.map +0 -1
  158. package/lib/extensions/extended-table.js +0 -75
  159. package/lib/extensions/extended-table.js.map +0 -1
  160. package/lib/extensions/heading-paragraph.js +0 -61
  161. package/lib/extensions/heading-paragraph.js.map +0 -1
  162. package/lib/extensions/image-component.js +0 -348
  163. package/lib/extensions/image-component.js.map +0 -1
  164. package/lib/extensions/image.js +0 -134
  165. package/lib/extensions/image.js.map +0 -1
  166. package/lib/extensions/index.js +0 -46
  167. package/lib/extensions/index.js.map +0 -1
  168. package/lib/extensions/math.js +0 -343
  169. package/lib/extensions/math.js.map +0 -1
  170. package/lib/extensions/media.js +0 -243
  171. package/lib/extensions/media.js.map +0 -1
  172. package/lib/extensions/responseArea.js +0 -446
  173. package/lib/extensions/responseArea.js.map +0 -1
  174. package/lib/index.js +0 -30
  175. package/lib/index.js.map +0 -1
  176. package/lib/styles/editorContainerStyles.js +0 -137
  177. package/lib/styles/editorContainerStyles.js.map +0 -1
  178. package/lib/theme.js +0 -8
  179. package/lib/theme.js.map +0 -1
  180. package/lib/utils/helper.js +0 -73
  181. package/lib/utils/helper.js.map +0 -1
  182. package/lib/utils/size.js +0 -26
  183. package/lib/utils/size.js.map +0 -1
  184. package/src/__tests__/EditableHtml.test.jsx +0 -474
  185. package/src/__tests__/constants.test.js +0 -19
  186. package/src/__tests__/div-to-paragraph-conversion.test.jsx +0 -125
  187. package/src/__tests__/extensions.test.js +0 -208
  188. package/src/__tests__/index.test.jsx +0 -154
  189. package/src/__tests__/size-utils.test.js +0 -64
  190. package/src/__tests__/theme.test.js +0 -17
  191. package/src/components/CharacterPicker.jsx +0 -200
  192. package/src/components/EditableHtml.jsx +0 -438
  193. package/src/components/MenuBar.jsx +0 -549
  194. package/src/components/TiptapContainer.jsx +0 -219
  195. package/src/components/__tests__/AltDialog.test.jsx +0 -147
  196. package/src/components/__tests__/CharacterPicker.test.jsx +0 -219
  197. package/src/components/__tests__/CssIcon.test.jsx +0 -46
  198. package/src/components/__tests__/DragInTheBlank.test.jsx +0 -255
  199. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +0 -204
  200. package/src/components/__tests__/ImageToolbar.test.jsx +0 -128
  201. package/src/components/__tests__/InlineDropdown.test.jsx +0 -380
  202. package/src/components/__tests__/InsertImageHandler.test.js +0 -161
  203. package/src/components/__tests__/MediaDialog.test.jsx +0 -293
  204. package/src/components/__tests__/MediaToolbar.test.jsx +0 -74
  205. package/src/components/__tests__/MediaWrapper.test.jsx +0 -81
  206. package/src/components/__tests__/MenuBar.test.jsx +0 -249
  207. package/src/components/__tests__/RespArea.test.jsx +0 -122
  208. package/src/components/__tests__/TableIcons.test.jsx +0 -149
  209. package/src/components/__tests__/TextAlign.test.jsx +0 -167
  210. package/src/components/__tests__/TiptapContainer.test.jsx +0 -138
  211. package/src/components/__tests__/characterUtils.test.js +0 -166
  212. package/src/components/__tests__/choice.test.jsx +0 -171
  213. package/src/components/__tests__/custom-popper.test.jsx +0 -82
  214. package/src/components/__tests__/done-button.test.jsx +0 -54
  215. package/src/components/__tests__/toolbar-buttons.test.jsx +0 -234
  216. package/src/components/characters/characterUtils.js +0 -447
  217. package/src/components/characters/custom-popper.js +0 -38
  218. package/src/components/common/done-button.jsx +0 -27
  219. package/src/components/common/toolbar-buttons.jsx +0 -122
  220. package/src/components/icons/CssIcon.jsx +0 -15
  221. package/src/components/icons/RespArea.jsx +0 -71
  222. package/src/components/icons/TableIcons.jsx +0 -52
  223. package/src/components/icons/TextAlign.jsx +0 -114
  224. package/src/components/image/AltDialog.jsx +0 -82
  225. package/src/components/image/ImageToolbar.jsx +0 -99
  226. package/src/components/image/InsertImageHandler.js +0 -107
  227. package/src/components/media/MediaDialog.jsx +0 -596
  228. package/src/components/media/MediaToolbar.jsx +0 -49
  229. package/src/components/media/MediaWrapper.jsx +0 -39
  230. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +0 -76
  231. package/src/components/respArea/DragInTheBlank/choice.jsx +0 -256
  232. package/src/components/respArea/ExplicitConstructedResponse.jsx +0 -135
  233. package/src/components/respArea/InlineDropdown.jsx +0 -167
  234. package/src/components/respArea/MathTemplated.jsx +0 -124
  235. package/src/components/respArea/ToolbarIcon.jsx +0 -66
  236. package/src/components/respArea/__tests__/MathTemplated.test.jsx +0 -210
  237. package/src/constants.js +0 -5
  238. package/src/extensions/__tests__/css.test.js +0 -196
  239. package/src/extensions/__tests__/custom-toolbar-wrapper.test.jsx +0 -180
  240. package/src/extensions/__tests__/divNode.test.js +0 -87
  241. package/src/extensions/__tests__/ensure-empty-root-div.test.js +0 -57
  242. package/src/extensions/__tests__/ensure-list-item-content-is-div.test.js +0 -44
  243. package/src/extensions/__tests__/extended-list-item.test.js +0 -13
  244. package/src/extensions/__tests__/extended-table-cell.test.js +0 -22
  245. package/src/extensions/__tests__/extended-table.test.js +0 -183
  246. package/src/extensions/__tests__/image-component.test.jsx +0 -345
  247. package/src/extensions/__tests__/image.test.js +0 -237
  248. package/src/extensions/__tests__/math.test.js +0 -459
  249. package/src/extensions/__tests__/media-node-view.test.jsx +0 -298
  250. package/src/extensions/__tests__/media.test.js +0 -271
  251. package/src/extensions/__tests__/responseArea.test.js +0 -601
  252. package/src/extensions/css.js +0 -220
  253. package/src/extensions/custom-toolbar-wrapper.jsx +0 -78
  254. package/src/extensions/div-node.js +0 -86
  255. package/src/extensions/ensure-empty-root-div.js +0 -47
  256. package/src/extensions/ensure-list-item-content-is-div.js +0 -62
  257. package/src/extensions/extended-list-item.js +0 -10
  258. package/src/extensions/extended-table-cell.js +0 -19
  259. package/src/extensions/extended-table.js +0 -60
  260. package/src/extensions/heading-paragraph.js +0 -53
  261. package/src/extensions/image-component.jsx +0 -338
  262. package/src/extensions/image.js +0 -109
  263. package/src/extensions/index.js +0 -81
  264. package/src/extensions/math.js +0 -327
  265. package/src/extensions/media.js +0 -188
  266. package/src/extensions/responseArea.js +0 -401
  267. package/src/index.jsx +0 -5
  268. package/src/styles/editorContainerStyles.js +0 -145
  269. package/src/theme.js +0 -1
  270. package/src/utils/__tests__/helper.test.js +0 -126
  271. package/src/utils/helper.js +0 -69
  272. package/src/utils/size.js +0 -32
@@ -0,0 +1,220 @@
1
+ import e from "./custom-toolbar-wrapper.js";
2
+ import t from "../components/image/InsertImageHandler.js";
3
+ import n from "../components/image/ImageToolbar.js";
4
+ import { useCallback as r, useEffect as i, useMemo as a, useRef as o, useState as s } from "react";
5
+ import { NodeViewWrapper as c } from "@tiptap/react";
6
+ import { styled as l } from "@mui/material/styles";
7
+ import u from "react-dom";
8
+ import d from "prop-types";
9
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
+ import m from "lodash-es/isEqual.js";
11
+ import h from "debug";
12
+ import g from "@mui/material/LinearProgress";
13
+ //#region src/extensions/image-component.tsx
14
+ h("@pie-lib:editable-html:plugins:image:component");
15
+ var _ = l(g, { shouldForwardProp: (e) => e !== "hideProgress" })(({ hideProgress: e }) => ({
16
+ position: "absolute",
17
+ left: "0",
18
+ width: "fit-content",
19
+ top: "0%",
20
+ transition: "opacity 200ms linear",
21
+ ...e && { opacity: 0 }
22
+ })), v = l("div", { shouldForwardProp: (e) => ![
23
+ "active",
24
+ "loading",
25
+ "pendingDelete"
26
+ ].includes(e) })(({ loading: e, pendingDelete: t }) => ({
27
+ position: "relative",
28
+ display: "flex",
29
+ transition: "opacity 200ms linear",
30
+ ...e && { opacity: .3 },
31
+ ...t && { opacity: .3 }
32
+ })), y = l("div")(({ theme: e }) => ({
33
+ position: "relative",
34
+ width: "fit-content",
35
+ display: "flex",
36
+ alignItems: "center",
37
+ "&&:hover > .resize": { display: "block" }
38
+ })), b = l("img", { shouldForwardProp: (e) => e !== "active" })(({ theme: e, active: t }) => ({ border: t ? `solid 1px ${e.palette.primary.main}` : "solid 1px transparent" })), x = l("div")(({ theme: e }) => ({
39
+ backgroundColor: e.palette.primary.main,
40
+ cursor: "col-resize",
41
+ height: "35px",
42
+ width: "5px",
43
+ borderRadius: 8,
44
+ marginLeft: "5px",
45
+ marginRight: "10px",
46
+ display: "none"
47
+ })), S = (e) => e ? `${e}px` : "calc(20px)";
48
+ function C(l) {
49
+ let { node: d, editor: h, attributes: g, onFocus: C, getPos: w, selected: T, options: E, maxImageWidth: D = 700, maxImageHeight: O = 900 } = l, { alt: k } = d.attrs, A = w(), j = h.state.selection.from, M = h.state.selection.to, N = a(() => j + d.nodeSize === M, [
50
+ j,
51
+ M,
52
+ d.nodeSize
53
+ ]), [P, F] = s(!1), I = o(d), L = o(null), R = o(null), z = o(null), B = r((e) => {
54
+ let t = e / L.current.naturalWidth * 4;
55
+ return parseInt(t.toFixed(0) * 25, 10);
56
+ }, []), V = r(() => {
57
+ let e = I.current.attrs.nodeKey, t = null;
58
+ return h.state.doc.descendants((n, r) => {
59
+ if (t !== null) return !1;
60
+ if (n.type.name === "imageUploadNode" && n.attrs.nodeKey === e) return t = r, !1;
61
+ }), t;
62
+ }, [h]), H = r((e) => {
63
+ let t = V();
64
+ if (t === null) return;
65
+ let n = h.state.doc.nodeAt(t);
66
+ n && h.view.dispatch(h.state.tr.setNodeMarkup(t, void 0, {
67
+ ...n.attrs,
68
+ ...e
69
+ }));
70
+ }, [h, V]), U = r(() => {
71
+ if (!d.attrs.width || !L.current) return;
72
+ let e = B(d.attrs.width);
73
+ d.attrs.resizePercent !== e && H({ resizePercent: e });
74
+ }, [
75
+ d.attrs.width,
76
+ d.attrs.resizePercent,
77
+ B,
78
+ H
79
+ ]);
80
+ i(() => {
81
+ I.current = {
82
+ ...d,
83
+ pos: A
84
+ };
85
+ }, [d, A]), i(() => {
86
+ T ? N && (!String(d.attrs?.src ?? "").trim() && E.imageHandling?.insertImageRequested && E.imageHandling.insertImageRequested(h, [d, A], (e) => new t(h, [d, A], e)), F(T)) : F(T);
87
+ }, [N, T]), i(() => {
88
+ U();
89
+ let e = R.current;
90
+ return e && e.addEventListener("mousedown", Y, !1), () => {
91
+ e && e.removeEventListener("mousedown", Y, !1);
92
+ };
93
+ }, []), i(() => {
94
+ U();
95
+ });
96
+ let W = r(() => {
97
+ let e = L.current;
98
+ if (e && (!e.style.width || e.style.width === "calc(20px)")) {
99
+ let t = Math.min(e.naturalWidth, D), n = Math.min(e.naturalHeight, O);
100
+ e.style.width = `${t}px`, e.style.height = `${n}px`;
101
+ let r = {
102
+ width: t,
103
+ height: n
104
+ };
105
+ m(r, {
106
+ width: d.attrs.width,
107
+ height: d.attrs.height
108
+ }) || H(r);
109
+ }
110
+ }, [
111
+ d.attrs.width,
112
+ d.attrs.height,
113
+ D,
114
+ O,
115
+ H
116
+ ]), G = (e, t, n = !0, r) => {
117
+ if (n) {
118
+ let n = e.width / e.height;
119
+ return r === "height" ? {
120
+ width: t.height * n,
121
+ height: t.height
122
+ } : {
123
+ width: t.width,
124
+ height: t.width / n
125
+ };
126
+ }
127
+ return t;
128
+ }, K = r((e) => {
129
+ let t = L.current;
130
+ if (!t) return;
131
+ let n = e.target.getBoundingClientRect(), r = G({
132
+ width: t.naturalWidth,
133
+ height: t.naturalHeight
134
+ }, {
135
+ width: e.clientX - n.left,
136
+ height: e.clientY - n.top
137
+ });
138
+ r.width > 50 && r.height > 50 && r.width <= 700 && r.height <= 900 && (t.style.width = `${r.width}px`, t.style.height = `${r.height}px`, H({
139
+ width: r.width,
140
+ height: r.height
141
+ }));
142
+ }, [h, H]), q = r((e) => {
143
+ H(e);
144
+ }, [h, H]), J = r(() => {
145
+ window.removeEventListener("mousemove", K), window.removeEventListener("mouseup", J);
146
+ }, [K]), Y = r(() => {
147
+ window.addEventListener("mousemove", K), window.addEventListener("mouseup", J);
148
+ }, [K, J]), X = {
149
+ width: S(d.attrs.width),
150
+ height: S(d.attrs.height),
151
+ objectFit: "contain"
152
+ }, Z = {
153
+ left: "flex-start",
154
+ center: "center",
155
+ right: "flex-end"
156
+ }[d.attrs.alignment] || "flex-start";
157
+ return /* @__PURE__ */ p(c, { children: [/* @__PURE__ */ p(v, {
158
+ onFocus: C,
159
+ loading: !d.attrs.loaded,
160
+ pendingDelete: d.attrs.deleteStatus === "pending",
161
+ style: { justifyContent: Z },
162
+ children: [/* @__PURE__ */ f(_, {
163
+ mode: "determinate",
164
+ value: d.attrs.percent || 0,
165
+ hideProgress: d.attrs.loaded
166
+ }), /* @__PURE__ */ p(y, {
167
+ onDragStart: (e) => e.preventDefault(),
168
+ children: [/* @__PURE__ */ f(b, {
169
+ ...g,
170
+ active: T && d.attrs.loaded,
171
+ draggable: !1,
172
+ ref: L,
173
+ src: d.attrs.src,
174
+ style: X,
175
+ onLoad: W,
176
+ alt: d.attrs.alt
177
+ }), /* @__PURE__ */ f(x, {
178
+ ref: R,
179
+ className: "resize"
180
+ })]
181
+ })]
182
+ }), P && h._tiptapContainerEl && u.createPortal(/* @__PURE__ */ f("div", {
183
+ ref: z,
184
+ style: {
185
+ zIndex: 20,
186
+ background: "var(--editable-html-toolbar-bg, #efefef)",
187
+ 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)",
188
+ width: "100%"
189
+ },
190
+ children: /* @__PURE__ */ f(e, {
191
+ showDone: !0,
192
+ deletable: !0,
193
+ toolbarOpts: E.toolbarOpts || {},
194
+ onDelete: () => {
195
+ let e = V();
196
+ e !== null && (E.imageHandling?.onDelete?.(I.current), h.view.dispatch(h.state.tr.delete(e, e + h.state.doc.nodeAt(e).nodeSize)), F(!1), h.commands.focus());
197
+ },
198
+ onDone: () => {
199
+ F(!1), E.imageHandling?.onDone?.(h), h.commands.focus("end");
200
+ },
201
+ children: /* @__PURE__ */ f(n, {
202
+ disableImageAlignmentButtons: E.imageHandling?.disableImageAlignmentButtons,
203
+ alt: d.attrs.alt,
204
+ imageLoaded: d.attrs.loaded,
205
+ alignment: d.attrs.alignment || "left",
206
+ onChange: q
207
+ })
208
+ })
209
+ }), h._tiptapContainerEl)] });
210
+ }
211
+ C.propTypes = {
212
+ node: d.object.isRequired,
213
+ editor: d.object.isRequired,
214
+ attributes: d.object,
215
+ onFocus: d.func,
216
+ maxImageWidth: d.number,
217
+ maxImageHeight: d.number
218
+ };
219
+ //#endregion
220
+ export { C 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,68 @@
1
+ import e from "./image-component.js";
2
+ import "react";
3
+ import { ReactNodeViewRenderer as t } from "@tiptap/react";
4
+ import { Node as n, mergeAttributes as r } from "@tiptap/core";
5
+ import { Plugin as i } from "@tiptap/pm/state";
6
+ import { jsx as a } from "react/jsx-runtime";
7
+ //#region src/extensions/image.tsx
8
+ var o = n.create({
9
+ name: "imageUploadNode",
10
+ group: "block",
11
+ atom: !0,
12
+ selectable: !0,
13
+ draggable: !0,
14
+ addAttributes() {
15
+ return {
16
+ nodeKey: { default: null },
17
+ loaded: { default: !1 },
18
+ deleteStatus: { default: null },
19
+ alignment: { default: null },
20
+ percent: { default: null },
21
+ width: { default: null },
22
+ height: { default: null },
23
+ src: { default: null },
24
+ alt: { default: null }
25
+ };
26
+ },
27
+ parseHTML() {
28
+ return [{ tag: "img[data-type=\"image-upload-node\"]" }];
29
+ },
30
+ renderHTML({ HTMLAttributes: e }) {
31
+ return ["img", r(e, { "data-type": "image-upload-node" })];
32
+ },
33
+ addNodeView() {
34
+ return t((t) => /* @__PURE__ */ a(e, {
35
+ ...t,
36
+ options: this.options
37
+ }));
38
+ },
39
+ addCommands() {
40
+ return { setImageUploadNode: () => ({ commands: e }) => e.insertContent({
41
+ type: this.name,
42
+ attrs: { nodeKey: `img-${Date.now()}-${Math.random().toString(36).slice(2)}` }
43
+ }) };
44
+ },
45
+ addProseMirrorPlugins() {
46
+ let e = this.editor;
47
+ return [new i({ props: { handlePaste(t, n) {
48
+ let r = Array.from(n.clipboardData?.items || []).find((e) => e.kind === "file" && e.type.startsWith("image/"));
49
+ if (!r) return !1;
50
+ let i = r.getAsFile();
51
+ if (!i) return !1;
52
+ let a = new FileReader();
53
+ return a.onload = () => {
54
+ let t = a.result;
55
+ typeof t == "string" && e.commands.insertContent({
56
+ type: "imageUploadNode",
57
+ attrs: {
58
+ src: t,
59
+ loaded: !0,
60
+ nodeKey: `img-${Date.now()}-${Math.random().toString(36).slice(2)}`
61
+ }
62
+ });
63
+ }, a.readAsDataURL(i), !0;
64
+ } } })];
65
+ }
66
+ });
67
+ //#endregion
68
+ export { o 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,65 @@
1
+ import e from "debug";
2
+ import t from "lodash-es/compact.js";
3
+ import n from "lodash-es/isEmpty.js";
4
+ //#region src/extensions/index.tsx
5
+ var r = e("@pie-lib:editable-html:plugins"), i = [
6
+ "bold",
7
+ "html",
8
+ "extraCSSRules",
9
+ "italic",
10
+ "underline",
11
+ "strikethrough",
12
+ "bulleted-list",
13
+ "numbered-list",
14
+ "image",
15
+ "math",
16
+ "languageCharacters",
17
+ "text-align",
18
+ "blockquote",
19
+ "h3",
20
+ "table",
21
+ "video",
22
+ "audio",
23
+ "responseArea",
24
+ "redo",
25
+ "undo",
26
+ "superscript",
27
+ "subscript"
28
+ ], a = {
29
+ "text-align": "textAlign",
30
+ "bulleted-list": "ul_list",
31
+ "numbered-list": "ol_list"
32
+ }, o = i.filter((e) => ![
33
+ "responseArea",
34
+ "h3",
35
+ "blockquote"
36
+ ].includes(e)), s = (e, i, a) => {
37
+ r("[buildPlugins] opts: ", a), e ||= o;
38
+ let s = (t, n = !0) => e.includes(t) && n && t, c = a.image && a.image.delete, l = a.math, u = a.responseArea && a.responseArea.type, d = !n(a.extraCSSRules), f = a?.languageCharacters || [];
39
+ return t([
40
+ s("table"),
41
+ s("bold"),
42
+ s("italic"),
43
+ s("strikethrough"),
44
+ s("underline"),
45
+ s("superscript"),
46
+ s("subscript"),
47
+ s("image", !!c),
48
+ s("video"),
49
+ s("audio"),
50
+ s("math", !!l),
51
+ ...f.map((e) => s("languageCharacters", e)),
52
+ s("text-align"),
53
+ s("blockquote"),
54
+ s("h3"),
55
+ s("bulleted-list"),
56
+ s("numbered-list"),
57
+ s("undo"),
58
+ s("redo"),
59
+ s("responseArea", !!u),
60
+ s("css", !!d),
61
+ s("html", !!a.html)
62
+ ]);
63
+ };
64
+ //#endregion
65
+ 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,158 @@
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
2
+ import { NodeViewWrapper as r, ReactNodeViewRenderer as i } from "@tiptap/react";
3
+ import { Node as a } from "@tiptap/core";
4
+ import { NodeSelection as o, Plugin as s, PluginKey as c, TextSelection as l } from "prosemirror-state";
5
+ import u from "react-dom";
6
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
7
+ import { wrapMath as p } from "@pie-element/shared-math-rendering-mathjax";
8
+ import { MathPreview as m, MathToolbar as h } from "@pie-lib/math-toolbar";
9
+ //#region src/extensions/math.tsx
10
+ var g = new c("ensureTextAfterMath"), _ = (e = []) => e.map((e) => ({
11
+ name: e,
12
+ latex: e,
13
+ write: e,
14
+ label: e
15
+ })), v = (e) => new s({
16
+ key: g,
17
+ appendTransaction: (t, n, r) => {
18
+ if (!t.some((e) => e.docChanged)) return null;
19
+ let i = r.tr, a = !1;
20
+ return r.doc.descendants((t, n) => {
21
+ if (t.type.name === e) {
22
+ let e = n + t.nodeSize, o = r.doc.nodeAt(e);
23
+ (!o || o.type.name !== "text") && (i.insert(e, r.schema.text("​")), a = !0);
24
+ }
25
+ }), a ? i : null;
26
+ }
27
+ }), y = new s({
28
+ key: new c("zeroWidthSpaceHandling"),
29
+ props: { handleKeyDown(e, t) {
30
+ let { state: n, dispatch: r } = e, { selection: i, doc: a } = n, { from: s, empty: c } = i;
31
+ if (c && t.key === "Backspace" && s > 0 && a.textBetween(s - 1, s, "", "") === "​") return r(n.tr.delete(s - 2, s)), !0;
32
+ if (c && t.key === "ArrowLeft" && s > 0 && a.textBetween(s - 1, s, "", "") === "​") {
33
+ let e = s - 1, t = n.doc.resolve(e - 1), i = t.nodeAfter || t.nodeBefore;
34
+ if (i) {
35
+ let t = e - i.nodeSize, a = n.doc.resolve(t);
36
+ return r(n.tr.setSelection(o.create(n.doc, a.pos))), !0;
37
+ } else return r(n.tr.setSelection(l.create(n.doc, s - 2))), !0;
38
+ }
39
+ return !1;
40
+ } }
41
+ }), b = a.create({
42
+ name: "math",
43
+ group: "inline",
44
+ inline: !0,
45
+ atom: !0,
46
+ addAttributes() {
47
+ return {
48
+ latex: { default: "" },
49
+ wrapper: { default: null },
50
+ html: { default: null }
51
+ };
52
+ },
53
+ addProseMirrorPlugins() {
54
+ return [v(this.name), y];
55
+ },
56
+ parseHTML() {
57
+ return [{
58
+ tag: "span[data-latex]",
59
+ getAttrs: (e) => ({ latex: e.getAttribute("data-raw") || e.textContent })
60
+ }, {
61
+ tag: "span[data-type=\"mathml\"]",
62
+ getAttrs: (e) => ({ html: e.innerHTML })
63
+ }];
64
+ },
65
+ addCommands() {
66
+ return { insertMath: (e = "") => ({ tr: t, editor: n, dispatch: r }) => {
67
+ let { state: i } = n.view, a = i.schema.nodes.math.create({ latex: e }), { selection: s } = i, c = s.$from.pos;
68
+ if (t.insert(c, a), a?.type?.name === this.name) {
69
+ let e = o.create(t.doc, s.$from.pos);
70
+ t.setSelection(e);
71
+ }
72
+ return r(t), !0;
73
+ } };
74
+ },
75
+ renderHTML({ HTMLAttributes: e }) {
76
+ return e.html ? ["span", {
77
+ "data-type": "mathml",
78
+ dangerouslySetInnerHTML: { __html: e.html }
79
+ }] : [
80
+ "span",
81
+ {
82
+ "data-latex": "",
83
+ "data-raw": e.latex
84
+ },
85
+ p(e.latex, e.wrapper)
86
+ ];
87
+ },
88
+ addNodeView() {
89
+ return i((e) => /* @__PURE__ */ d(x, {
90
+ ...e,
91
+ options: this.options
92
+ }));
93
+ }
94
+ }), x = (i) => {
95
+ let { node: a, updateAttributes: o, editor: s, selected: c, options: p } = i, [g, v] = n(c), y = t(null), [b, x] = n({
96
+ top: 0,
97
+ left: 0
98
+ }), { math: S = {} } = p || {}, { keypadMode: C, controlledKeypadMode: w = !0, customKeys: T = [], keyPadCharacterRef: E, setKeypadInteraction: D } = S, O = a.attrs.latex || "", k = (e) => {
99
+ o({ latex: e });
100
+ }, A = (e) => {
101
+ o({ latex: e }), v(!1), s._toolbarOpened = !1;
102
+ let { selection: t, tr: n, doc: r } = s.state, i = l.create(r, t.from + 1);
103
+ n.setSelection(i), s.view.dispatch(n), s.commands.focus();
104
+ };
105
+ return e(() => {
106
+ c && v(!0);
107
+ }, [c]), e(() => {
108
+ s._toolbarOpened = !!g;
109
+ }, [g]), e(() => {
110
+ let { from: e } = s.state.selection;
111
+ x({
112
+ top: 40,
113
+ left: s.view.coordsAtPos(e).left
114
+ });
115
+ let t = (e) => {
116
+ 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");
117
+ y.current && !y.current.contains(t) && !t?.closest?.("[data-inline-node]") && !n && !r && !i && (v(!1), A(a.attrs.latex));
118
+ };
119
+ return g ? document.addEventListener("click", t) : document.removeEventListener("click", t), () => document.removeEventListener("click", t);
120
+ }, [s, g]), /* @__PURE__ */ f(r, {
121
+ className: "math-node",
122
+ style: {
123
+ display: "inline-flex",
124
+ cursor: "pointer",
125
+ margin: "0 4px"
126
+ },
127
+ "data-selected": c,
128
+ children: [/* @__PURE__ */ d("div", {
129
+ onClick: () => v(!0),
130
+ contentEditable: !1,
131
+ children: /* @__PURE__ */ d(m, { latex: O })
132
+ }), g && u.createPortal(/* @__PURE__ */ d("div", {
133
+ ref: y,
134
+ "data-toolbar-for": s.instanceId,
135
+ style: {
136
+ position: "absolute",
137
+ top: `${b.top}px`,
138
+ left: `${b.left}px`,
139
+ zIndex: 20,
140
+ background: "var(--editable-html-toolbar-bg, #efefef)",
141
+ 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)"
142
+ },
143
+ children: /* @__PURE__ */ d(h, {
144
+ latex: O,
145
+ autoFocus: !0,
146
+ onChange: k,
147
+ onDone: A,
148
+ keypadMode: C,
149
+ controlledKeypadMode: w,
150
+ additionalKeys: _(T),
151
+ keyPadCharacterRef: E,
152
+ setKeypadInteraction: D
153
+ })
154
+ }), s?._tiptapContainerEl || document.body)]
155
+ });
156
+ };
157
+ //#endregion
158
+ export { b as MathNode };
@@ -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;