@pie-lib/editable-html-tip-tap 2.1.2-next.30 → 2.1.2-next.34

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 (276) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2532 -0
  3. package/LICENSE.md +5 -0
  4. package/lib/components/CharacterPicker.js +201 -0
  5. package/lib/components/CharacterPicker.js.map +1 -0
  6. package/lib/components/EditableHtml.js +376 -0
  7. package/lib/components/EditableHtml.js.map +1 -0
  8. package/lib/components/MenuBar.js +696 -0
  9. package/lib/components/MenuBar.js.map +1 -0
  10. package/lib/components/TiptapContainer.js +234 -0
  11. package/lib/components/TiptapContainer.js.map +1 -0
  12. package/lib/components/characters/characterUtils.js +378 -0
  13. package/lib/components/characters/characterUtils.js.map +1 -0
  14. package/lib/components/characters/custom-popper.js +44 -0
  15. package/lib/components/characters/custom-popper.js.map +1 -0
  16. package/lib/components/common/done-button.js +34 -0
  17. package/lib/components/common/done-button.js.map +1 -0
  18. package/lib/components/common/toolbar-buttons.js +144 -0
  19. package/lib/components/common/toolbar-buttons.js.map +1 -0
  20. package/lib/components/icons/CssIcon.js +25 -0
  21. package/lib/components/icons/CssIcon.js.map +1 -0
  22. package/lib/components/icons/RespArea.js +72 -0
  23. package/lib/components/icons/RespArea.js.map +1 -0
  24. package/lib/components/icons/TableIcons.js +53 -0
  25. package/lib/components/icons/TableIcons.js.map +1 -0
  26. package/lib/components/icons/TextAlign.js +157 -0
  27. package/lib/components/icons/TextAlign.js.map +1 -0
  28. package/lib/components/image/AltDialog.js +98 -0
  29. package/lib/components/image/AltDialog.js.map +1 -0
  30. package/lib/components/image/ImageToolbar.js +137 -0
  31. package/lib/components/image/ImageToolbar.js.map +1 -0
  32. package/lib/components/image/InsertImageHandler.js +135 -0
  33. package/lib/components/image/InsertImageHandler.js.map +1 -0
  34. package/lib/components/media/MediaDialog.js +594 -0
  35. package/lib/components/media/MediaDialog.js.map +1 -0
  36. package/lib/components/media/MediaToolbar.js +74 -0
  37. package/lib/components/media/MediaToolbar.js.map +1 -0
  38. package/lib/components/media/MediaWrapper.js +67 -0
  39. package/lib/components/media/MediaWrapper.js.map +1 -0
  40. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +84 -0
  41. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -0
  42. package/lib/components/respArea/DragInTheBlank/choice.js +250 -0
  43. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -0
  44. package/lib/components/respArea/ExplicitConstructedResponse.js +136 -0
  45. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -0
  46. package/lib/components/respArea/InlineDropdown.js +209 -0
  47. package/lib/components/respArea/InlineDropdown.js.map +1 -0
  48. package/lib/components/respArea/MathTemplated.js +130 -0
  49. package/lib/components/respArea/MathTemplated.js.map +1 -0
  50. package/lib/components/respArea/ToolbarIcon.js +81 -0
  51. package/lib/components/respArea/ToolbarIcon.js.map +1 -0
  52. package/lib/components/respArea/inlineDropdownUtils.js +67 -0
  53. package/lib/components/respArea/inlineDropdownUtils.js.map +1 -0
  54. package/lib/constants.js +11 -0
  55. package/lib/constants.js.map +1 -0
  56. package/lib/extensions/css.js +217 -0
  57. package/lib/extensions/css.js.map +1 -0
  58. package/lib/extensions/custom-toolbar-wrapper.js +92 -0
  59. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -0
  60. package/lib/extensions/div-node.js +83 -0
  61. package/lib/extensions/div-node.js.map +1 -0
  62. package/lib/extensions/ensure-empty-root-div.js +48 -0
  63. package/lib/extensions/ensure-empty-root-div.js.map +1 -0
  64. package/lib/extensions/ensure-list-item-content-is-div.js +64 -0
  65. package/lib/extensions/ensure-list-item-content-is-div.js.map +1 -0
  66. package/lib/extensions/extended-list-item.js +15 -0
  67. package/lib/extensions/extended-list-item.js.map +1 -0
  68. package/lib/extensions/extended-table-cell.js +22 -0
  69. package/lib/extensions/extended-table-cell.js.map +1 -0
  70. package/lib/extensions/extended-table.js +75 -0
  71. package/lib/extensions/extended-table.js.map +1 -0
  72. package/lib/extensions/heading-paragraph.js +61 -0
  73. package/lib/extensions/heading-paragraph.js.map +1 -0
  74. package/lib/extensions/image-component.js +348 -0
  75. package/lib/extensions/image-component.js.map +1 -0
  76. package/lib/extensions/image.js +134 -0
  77. package/lib/extensions/image.js.map +1 -0
  78. package/lib/extensions/index.js +46 -0
  79. package/lib/extensions/index.js.map +1 -0
  80. package/lib/extensions/math.js +342 -0
  81. package/lib/extensions/math.js.map +1 -0
  82. package/lib/extensions/media.js +243 -0
  83. package/lib/extensions/media.js.map +1 -0
  84. package/lib/extensions/responseArea.js +446 -0
  85. package/lib/extensions/responseArea.js.map +1 -0
  86. package/lib/index.js +37 -0
  87. package/lib/index.js.map +1 -0
  88. package/lib/styles/editorContainerStyles.js +137 -0
  89. package/lib/styles/editorContainerStyles.js.map +1 -0
  90. package/lib/theme.js +8 -0
  91. package/lib/theme.js.map +1 -0
  92. package/lib/utils/helper.js +73 -0
  93. package/lib/utils/helper.js.map +1 -0
  94. package/lib/utils/size.js +26 -0
  95. package/lib/utils/size.js.map +1 -0
  96. package/package.json +24 -40
  97. package/src/__tests__/EditableHtml.test.jsx +554 -0
  98. package/src/__tests__/constants.test.js +19 -0
  99. package/src/__tests__/div-to-paragraph-conversion.test.jsx +125 -0
  100. package/src/__tests__/extensions.test.js +208 -0
  101. package/src/__tests__/index.test.jsx +154 -0
  102. package/src/__tests__/size-utils.test.js +64 -0
  103. package/src/__tests__/theme.test.js +17 -0
  104. package/src/components/CharacterPicker.jsx +207 -0
  105. package/src/components/EditableHtml.jsx +440 -0
  106. package/src/components/MenuBar.jsx +554 -0
  107. package/src/components/TiptapContainer.jsx +219 -0
  108. package/src/components/__tests__/AltDialog.test.jsx +147 -0
  109. package/src/components/__tests__/CharacterPicker.test.jsx +261 -0
  110. package/src/components/__tests__/CssIcon.test.jsx +46 -0
  111. package/src/components/__tests__/DragInTheBlank.test.jsx +255 -0
  112. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +204 -0
  113. package/src/components/__tests__/ImageToolbar.test.jsx +128 -0
  114. package/src/components/__tests__/InlineDropdown.test.jsx +388 -0
  115. package/src/components/__tests__/InsertImageHandler.test.js +161 -0
  116. package/src/components/__tests__/MediaDialog.test.jsx +293 -0
  117. package/src/components/__tests__/MediaToolbar.test.jsx +74 -0
  118. package/src/components/__tests__/MediaWrapper.test.jsx +81 -0
  119. package/src/components/__tests__/MenuBar.test.jsx +250 -0
  120. package/src/components/__tests__/RespArea.test.jsx +122 -0
  121. package/src/components/__tests__/TableIcons.test.jsx +149 -0
  122. package/src/components/__tests__/TextAlign.test.jsx +167 -0
  123. package/src/components/__tests__/TiptapContainer.test.jsx +138 -0
  124. package/src/components/__tests__/characterUtils.test.js +166 -0
  125. package/src/components/__tests__/choice.test.jsx +171 -0
  126. package/src/components/__tests__/custom-popper.test.jsx +82 -0
  127. package/src/components/__tests__/done-button.test.jsx +54 -0
  128. package/src/components/__tests__/toolbar-buttons.test.jsx +234 -0
  129. package/src/components/characters/characterUtils.js +447 -0
  130. package/src/components/characters/custom-popper.js +38 -0
  131. package/src/components/common/done-button.jsx +27 -0
  132. package/src/components/common/toolbar-buttons.jsx +122 -0
  133. package/src/components/icons/CssIcon.jsx +15 -0
  134. package/src/components/icons/RespArea.jsx +71 -0
  135. package/src/components/icons/TableIcons.jsx +52 -0
  136. package/src/components/icons/TextAlign.jsx +114 -0
  137. package/src/components/image/AltDialog.jsx +82 -0
  138. package/src/components/image/ImageToolbar.jsx +99 -0
  139. package/src/components/image/InsertImageHandler.js +107 -0
  140. package/src/components/media/MediaDialog.jsx +596 -0
  141. package/src/components/media/MediaToolbar.jsx +49 -0
  142. package/src/components/media/MediaWrapper.jsx +39 -0
  143. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +76 -0
  144. package/src/components/respArea/DragInTheBlank/choice.jsx +256 -0
  145. package/src/components/respArea/ExplicitConstructedResponse.jsx +135 -0
  146. package/src/components/respArea/InlineDropdown.jsx +220 -0
  147. package/src/components/respArea/MathTemplated.jsx +124 -0
  148. package/src/components/respArea/ToolbarIcon.jsx +66 -0
  149. package/src/components/respArea/__tests__/MathTemplated.test.jsx +210 -0
  150. package/src/components/respArea/inlineDropdownUtils.js +79 -0
  151. package/src/constants.js +5 -0
  152. package/src/extensions/__tests__/css.test.js +196 -0
  153. package/src/extensions/__tests__/custom-toolbar-wrapper.test.jsx +180 -0
  154. package/src/extensions/__tests__/divNode.test.js +87 -0
  155. package/src/extensions/__tests__/ensure-empty-root-div.test.js +57 -0
  156. package/src/extensions/__tests__/ensure-list-item-content-is-div.test.js +44 -0
  157. package/src/extensions/__tests__/extended-list-item.test.js +13 -0
  158. package/src/extensions/__tests__/extended-table-cell.test.js +22 -0
  159. package/src/extensions/__tests__/extended-table.test.js +183 -0
  160. package/src/extensions/__tests__/image-component.test.jsx +345 -0
  161. package/src/extensions/__tests__/image.test.js +237 -0
  162. package/src/extensions/__tests__/math.test.js +603 -0
  163. package/src/extensions/__tests__/media-node-view.test.jsx +298 -0
  164. package/src/extensions/__tests__/media.test.js +271 -0
  165. package/src/extensions/__tests__/responseArea.test.js +601 -0
  166. package/src/extensions/css.js +220 -0
  167. package/src/extensions/custom-toolbar-wrapper.jsx +78 -0
  168. package/src/extensions/div-node.js +86 -0
  169. package/src/extensions/ensure-empty-root-div.js +47 -0
  170. package/src/extensions/ensure-list-item-content-is-div.js +62 -0
  171. package/src/extensions/extended-list-item.js +10 -0
  172. package/src/extensions/extended-table-cell.js +19 -0
  173. package/src/extensions/extended-table.js +60 -0
  174. package/src/extensions/heading-paragraph.js +53 -0
  175. package/src/extensions/image-component.jsx +338 -0
  176. package/src/extensions/image.js +109 -0
  177. package/src/extensions/index.js +81 -0
  178. package/src/extensions/math.js +326 -0
  179. package/src/extensions/media.js +188 -0
  180. package/src/extensions/responseArea.js +401 -0
  181. package/src/index.jsx +5 -0
  182. package/src/styles/editorContainerStyles.js +145 -0
  183. package/src/theme.js +1 -0
  184. package/src/utils/__tests__/helper.test.js +126 -0
  185. package/src/utils/helper.js +69 -0
  186. package/src/utils/size.js +32 -0
  187. package/dist/components/CharacterPicker.d.ts +0 -31
  188. package/dist/components/CharacterPicker.js +0 -131
  189. package/dist/components/EditableHtml.d.ts +0 -11
  190. package/dist/components/EditableHtml.js +0 -291
  191. package/dist/components/MenuBar.d.ts +0 -11
  192. package/dist/components/MenuBar.js +0 -462
  193. package/dist/components/TiptapContainer.d.ts +0 -11
  194. package/dist/components/TiptapContainer.js +0 -154
  195. package/dist/components/characters/characterUtils.d.ts +0 -35
  196. package/dist/components/characters/characterUtils.js +0 -465
  197. package/dist/components/characters/custom-popper.d.ts +0 -14
  198. package/dist/components/characters/custom-popper.js +0 -32
  199. package/dist/components/common/done-button.d.ts +0 -30
  200. package/dist/components/common/done-button.js +0 -26
  201. package/dist/components/common/toolbar-buttons.d.ts +0 -38
  202. package/dist/components/common/toolbar-buttons.js +0 -91
  203. package/dist/components/icons/CssIcon.d.ts +0 -11
  204. package/dist/components/icons/CssIcon.js +0 -14
  205. package/dist/components/icons/RespArea.d.ts +0 -26
  206. package/dist/components/icons/RespArea.js +0 -42
  207. package/dist/components/icons/TableIcons.d.ts +0 -14
  208. package/dist/components/icons/TableIcons.js +0 -32
  209. package/dist/components/icons/TextAlign.d.ts +0 -18
  210. package/dist/components/icons/TextAlign.js +0 -134
  211. package/dist/components/image/AltDialog.d.ts +0 -22
  212. package/dist/components/image/AltDialog.js +0 -61
  213. package/dist/components/image/ImageToolbar.d.ts +0 -24
  214. package/dist/components/image/ImageToolbar.js +0 -80
  215. package/dist/components/image/InsertImageHandler.d.ts +0 -32
  216. package/dist/components/image/InsertImageHandler.js +0 -53
  217. package/dist/components/media/MediaDialog.d.ts +0 -43
  218. package/dist/components/media/MediaDialog.js +0 -389
  219. package/dist/components/media/MediaToolbar.d.ts +0 -19
  220. package/dist/components/media/MediaToolbar.js +0 -41
  221. package/dist/components/media/MediaWrapper.d.ts +0 -19
  222. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.d.ts +0 -23
  223. package/dist/components/respArea/DragInTheBlank/DragInTheBlank.js +0 -58
  224. package/dist/components/respArea/DragInTheBlank/choice.d.ts +0 -56
  225. package/dist/components/respArea/DragInTheBlank/choice.js +0 -156
  226. package/dist/components/respArea/ExplicitConstructedResponse.d.ts +0 -20
  227. package/dist/components/respArea/ExplicitConstructedResponse.js +0 -83
  228. package/dist/components/respArea/InlineDropdown.d.ts +0 -18
  229. package/dist/components/respArea/InlineDropdown.js +0 -119
  230. package/dist/components/respArea/MathTemplated.d.ts +0 -19
  231. package/dist/components/respArea/MathTemplated.js +0 -97
  232. package/dist/components/respArea/ToolbarIcon.d.ts +0 -14
  233. package/dist/components/respArea/ToolbarIcon.js +0 -17
  234. package/dist/components/respArea/inlineDropdownUtils.d.ts +0 -15
  235. package/dist/components/respArea/inlineDropdownUtils.js +0 -15
  236. package/dist/constants.d.ts +0 -13
  237. package/dist/constants.js +0 -4
  238. package/dist/extensions/css.d.ts +0 -11
  239. package/dist/extensions/css.js +0 -115
  240. package/dist/extensions/custom-toolbar-wrapper.d.ts +0 -11
  241. package/dist/extensions/custom-toolbar-wrapper.js +0 -61
  242. package/dist/extensions/div-node.d.ts +0 -10
  243. package/dist/extensions/div-node.js +0 -42
  244. package/dist/extensions/ensure-empty-root-div.d.ts +0 -14
  245. package/dist/extensions/ensure-empty-root-div.js +0 -24
  246. package/dist/extensions/ensure-list-item-content-is-div.d.ts +0 -15
  247. package/dist/extensions/ensure-list-item-content-is-div.js +0 -31
  248. package/dist/extensions/extended-list-item.d.ts +0 -13
  249. package/dist/extensions/extended-list-item.js +0 -5
  250. package/dist/extensions/extended-table-cell.d.ts +0 -10
  251. package/dist/extensions/extended-table-cell.js +0 -6
  252. package/dist/extensions/extended-table.d.ts +0 -17
  253. package/dist/extensions/extended-table.js +0 -34
  254. package/dist/extensions/heading-paragraph.d.ts +0 -17
  255. package/dist/extensions/heading-paragraph.js +0 -30
  256. package/dist/extensions/image-component.d.ts +0 -22
  257. package/dist/extensions/image-component.js +0 -220
  258. package/dist/extensions/image.d.ts +0 -10
  259. package/dist/extensions/image.js +0 -68
  260. package/dist/extensions/index.d.ts +0 -16
  261. package/dist/extensions/index.js +0 -64
  262. package/dist/extensions/math.d.ts +0 -15
  263. package/dist/extensions/math.js +0 -158
  264. package/dist/extensions/media.d.ts +0 -19
  265. package/dist/extensions/media.js +0 -149
  266. package/dist/extensions/responseArea.d.ts +0 -27
  267. package/dist/extensions/responseArea.js +0 -259
  268. package/dist/index.d.ts +0 -13
  269. package/dist/index.js +0 -7
  270. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
  271. package/dist/styles/editorContainerStyles.d.ts +0 -134
  272. package/dist/theme.d.ts +0 -9
  273. package/dist/utils/helper.d.ts +0 -9
  274. package/dist/utils/helper.js +0 -27
  275. package/dist/utils/size.d.ts +0 -9
  276. package/dist/utils/size.js +0 -14
@@ -0,0 +1,69 @@
1
+ const escapeHtml = (str) =>
2
+ String(str)
3
+ .replace(/&/g, '&')
4
+ .replace(/</g, '&lt;')
5
+ .replace(/>/g, '&gt;')
6
+ .replace(/"/g, '&quot;')
7
+ .replace(/'/g, '&#39;');
8
+
9
+ /**
10
+ * Converts consecutive div elements into a single paragraph with line breaks.
11
+ * Example: "<div>A</div><div>B</div>" becomes "<p>A<br>B</p>"
12
+ */
13
+ const convertConsecutiveDivsToParagraph = (html) => {
14
+ // Create a temporary element to parse the HTML
15
+ const temp = document.createElement('div');
16
+ temp.innerHTML = html;
17
+
18
+ // Get all top-level children
19
+ const children = Array.from(temp.children);
20
+
21
+ // Only convert if there are 2 or more divs
22
+ if (children.length < 2) {
23
+ return html;
24
+ }
25
+
26
+ // Check if all children are divs with simple content (text or inline elements)
27
+ const allDivs = children.every((child) => child.tagName === 'DIV');
28
+
29
+ if (!allDivs) {
30
+ return html;
31
+ }
32
+
33
+ // Check if divs have no attributes (only convert plain divs)
34
+ const hasNoAttributes = children.every((div) => div.attributes.length === 0);
35
+
36
+ if (!hasNoAttributes) {
37
+ return html;
38
+ }
39
+
40
+ // Check if divs contain only simple content (no nested block elements)
41
+ const hasOnlySimpleContent = children.every((div) => {
42
+ return Array.from(div.children).every((child) => {
43
+ const tag = child.tagName;
44
+ // Allow inline elements and br tags
45
+ return ['SPAN', 'B', 'I', 'EM', 'STRONG', 'U', 'SUB', 'SUP', 'A', 'CODE', 'BR'].includes(tag);
46
+ });
47
+ });
48
+
49
+ if (!hasOnlySimpleContent) {
50
+ return html;
51
+ }
52
+
53
+ // Convert to paragraph with br tags
54
+ const contents = children.map((div) => div.innerHTML);
55
+ return `<p>${contents.join('<br>')}</p>`;
56
+ };
57
+
58
+ export const normalizeInitialMarkup = (markup) => {
59
+ const trimmed = String(markup ?? '').trim();
60
+ if (!trimmed) return '<div></div>';
61
+
62
+ const looksLikeHtml = /<[^>]+>/.test(trimmed);
63
+ if (!looksLikeHtml) {
64
+ return `<div>${escapeHtml(trimmed)}</div>`;
65
+ }
66
+
67
+ // Apply the div-to-paragraph transformation
68
+ return convertConsecutiveDivsToParagraph(trimmed);
69
+ };
@@ -0,0 +1,32 @@
1
+ export const valueToSize = (v) => {
2
+ if (!v) {
3
+ return;
4
+ }
5
+
6
+ const calcRegex = /^calc\((.*)\)$/;
7
+
8
+ if (typeof v === 'string') {
9
+ if (v.endsWith('%')) {
10
+ return undefined;
11
+ }
12
+
13
+ if (
14
+ v.endsWith('px') ||
15
+ v.endsWith('vh') ||
16
+ v.endsWith('vw') ||
17
+ v.endsWith('ch') ||
18
+ v.endsWith('em') ||
19
+ v.match(calcRegex)
20
+ ) {
21
+ return v;
22
+ }
23
+
24
+ const value = parseInt(v, 10);
25
+
26
+ return Number.isNaN(value) ? value : `${value}px`;
27
+ }
28
+
29
+ if (typeof v === 'number') {
30
+ return `${v}px`;
31
+ }
32
+ };
@@ -1,31 +0,0 @@
1
- /**
2
- * @synced-from pie-lib/packages/editable-html-tip-tap/src/components/CharacterPicker.jsx
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 PropTypes from 'prop-types';
11
- declare const CharacterIcon: {
12
- ({ letter }: {
13
- letter: any;
14
- }): React.JSX.Element;
15
- propTypes: {
16
- letter: PropTypes.Requireable<string>;
17
- };
18
- };
19
- export declare function CharacterPicker({ editor, opts, onClose }: {
20
- editor: any;
21
- opts: any;
22
- onClose: any;
23
- }): React.JSX.Element | null;
24
- export declare namespace CharacterPicker {
25
- var propTypes: {
26
- editor: PropTypes.Requireable<object>;
27
- opts: PropTypes.Requireable<object>;
28
- onClose: PropTypes.Validator<(...args: any[]) => any>;
29
- };
30
- }
31
- export { CharacterIcon };
@@ -1,131 +0,0 @@
1
- import { spanishConfig as e, specialConfig as t } from "./characters/characterUtils.js";
2
- import n from "./characters/custom-popper.js";
3
- import { useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
4
- import { get as s } from "@pie-element/shared-lodash";
5
- import c from "react-dom";
6
- import l from "prop-types";
7
- import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
8
- import { PureToolbar as p } from "@pie-lib/math-toolbar";
9
- //#region src/components/CharacterPicker.tsx
10
- var m = ({ letter: e }) => /* @__PURE__ */ d("div", {
11
- style: {
12
- fontSize: "24px",
13
- lineHeight: "24px"
14
- },
15
- children: e
16
- });
17
- m.propTypes = { letter: l.string };
18
- function h({ editor: l, opts: m, onClose: h }) {
19
- if (!m?.characters?.length) return null;
20
- let g = a(null), _ = a(h), [v, y] = o({
21
- top: 0,
22
- left: 0
23
- }), [b, x] = o(null);
24
- _.current = h;
25
- let S = i(() => {
26
- if (!m) return e;
27
- switch (!0) {
28
- case m.language === "spanish": return e;
29
- case m.language === "special": return t;
30
- default: return m;
31
- }
32
- }, [m]), C = i(() => S.characters.reduce((e, t) => (t.length >= e.columns && (e.columns = t.length), e), {
33
- rows: S.characters.length,
34
- columns: 0
35
- }), [S]), w = () => x(null);
36
- r(() => () => {
37
- w();
38
- }, []), r(() => {
39
- if (!l) return;
40
- let e = l.options.element.getBoundingClientRect(), t = document.body.getBoundingClientRect(), { from: n } = l.state.selection, r = l.view.coordsAtPos(n), i = e.top + Math.abs(t.top) + e.height + 60;
41
- e.y > g.current.offsetHeight && (i = i - (g.current.offsetHeight + e.height) - 80), y({
42
- top: i,
43
- left: r.left
44
- });
45
- let a = l.view.dom, o = (e) => {
46
- g.current && !g.current.contains(e.target) && !a.contains(e.target) && _.current();
47
- }, s = setTimeout(() => {
48
- document.addEventListener("click", o);
49
- });
50
- return () => {
51
- clearTimeout(s), document.removeEventListener("click", o);
52
- };
53
- }, [l]);
54
- let T = (e, t) => x({
55
- anchorEl: e.currentTarget,
56
- el: t
57
- });
58
- return /* @__PURE__ */ f(u, { children: [c.createPortal(/* @__PURE__ */ d("div", {
59
- ref: g,
60
- className: "insert-character-dialog",
61
- "data-toolbar-for": l.instanceId,
62
- style: {
63
- visibility: v.top === 0 && v.left === 0 ? "hidden" : "initial",
64
- position: "absolute",
65
- top: `${v.top}px`,
66
- left: `${v.left}px`,
67
- maxWidth: "500px",
68
- zIndex: 99
69
- },
70
- children: /* @__PURE__ */ d("div", { children: /* @__PURE__ */ d(p, {
71
- keyPadCharacterRef: m.keyPadCharacterRef,
72
- setKeypadInteraction: m.setKeypadInteraction,
73
- autoFocus: !0,
74
- noDecimal: !0,
75
- hideInput: !0,
76
- noLatexHandling: !0,
77
- hideDoneButtonBackground: !0,
78
- layoutForKeyPad: C,
79
- additionalKeys: S.characters.reduce((e, t) => (e = [...e, ...t.map((e) => ({
80
- name: s(e, "name") || e,
81
- write: s(e, "write") || e,
82
- label: s(e, "label") || e,
83
- category: "character",
84
- extraClass: "character",
85
- extraProps: {
86
- ...e.extraProps || {},
87
- style: {
88
- ...(e.extraProps || {}).style,
89
- border: "1px solid #000"
90
- }
91
- },
92
- ...S.hasPreview ? { actions: {
93
- onMouseEnter: (t) => T(t, e),
94
- onMouseLeave: w
95
- } } : {}
96
- }))], e), []),
97
- keypadMode: "language",
98
- onChange: (e) => {
99
- typeof e == "string" && l.chain().focus().insertContent(e).run();
100
- },
101
- onDone: h
102
- }) })
103
- }), document.body), b && c.createPortal(/* @__PURE__ */ f(n, {
104
- onClose: w,
105
- anchorEl: b.anchorEl,
106
- children: [
107
- /* @__PURE__ */ d("div", { children: b.el.label }),
108
- /* @__PURE__ */ d("div", {
109
- style: {
110
- fontSize: 20,
111
- lineHeight: "20px"
112
- },
113
- children: b.el.description
114
- }),
115
- /* @__PURE__ */ d("div", {
116
- style: {
117
- fontSize: 20,
118
- lineHeight: "20px"
119
- },
120
- children: b.el.unicode
121
- })
122
- ]
123
- }), document.body)] });
124
- }
125
- h.propTypes = {
126
- editor: l.object,
127
- opts: l.object,
128
- onClose: l.func.isRequired
129
- };
130
- //#endregion
131
- export { m as CharacterIcon, h as CharacterPicker };
@@ -1,11 +0,0 @@
1
- /**
2
- * @synced-from pie-lib/packages/editable-html-tip-tap/src/components/EditableHtml.jsx
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
- export declare const EditableHtml: (props: any) => React.JSX.Element;
11
- export default EditableHtml;
@@ -1,291 +0,0 @@
1
- import { normalizeInitialMarkup as e } from "../utils/helper.js";
2
- import t from "../extensions/extended-table.js";
3
- import { ExtendedTableCell as n, ExtendedTableHeader as r } from "../extensions/extended-table-cell.js";
4
- import { DivNode as i } from "../extensions/div-node.js";
5
- import { EnsureEmptyRootIsDiv as a } from "../extensions/ensure-empty-root-div.js";
6
- import { EnsureListItemContentIsDiv as o } from "../extensions/ensure-list-item-content-is-div.js";
7
- import { DragInTheBlankNode as s, ExplicitConstructedResponseNode as c, InlineDropdownNode as l, MathTemplatedNode as u, ResponseAreaExtension as d } from "../extensions/responseArea.js";
8
- import { MathNode as f } from "../extensions/math.js";
9
- import { ImageUploadNode as p } from "../extensions/image.js";
10
- import { Media as m } from "../extensions/media.js";
11
- import { CSSMark as h } from "../extensions/css.js";
12
- import { ExtendedListItem as g } from "../extensions/extended-list-item.js";
13
- import { HeadingParagraph as _ } from "../extensions/heading-paragraph.js";
14
- import { valueToSize as v } from "../utils/size.js";
15
- import ee from "./TiptapContainer.js";
16
- import { PLUGINS_MAP as y, buildExtensions as b } from "../extensions/index.js";
17
- import { useCallback as x, useEffect as S, useMemo as C, useState as w } from "react";
18
- import { debounce as T } from "@pie-element/shared-lodash";
19
- import { EditorContent as E, useEditor as D, useEditorState as O } from "@tiptap/react";
20
- import { styled as k } from "@mui/material/styles";
21
- import A from "@tiptap/starter-kit";
22
- import { TextStyleKit as j } from "@tiptap/extension-text-style";
23
- import { CharacterCount as M } from "@tiptap/extension-character-count";
24
- import N from "@tiptap/extension-superscript";
25
- import P from "@tiptap/extension-subscript";
26
- import te from "@tiptap/extension-text-align";
27
- import F from "@tiptap/extension-image";
28
- import I from "@tiptap/extension-placeholder";
29
- import { TableRow as L } from "@tiptap/extension-table-row";
30
- import { jsx as R } from "react/jsx-runtime";
31
- //#region src/components/EditableHtml.tsx
32
- var z = {
33
- position: "bottom",
34
- alignment: "left",
35
- alwaysVisible: !1,
36
- showDone: !0,
37
- doneOn: "blur"
38
- }, B = [
39
- "bold",
40
- "italic",
41
- "underline",
42
- "strikethrough",
43
- "code",
44
- "bulleted-list",
45
- "numbered-list",
46
- "image",
47
- "math",
48
- "languageCharacters",
49
- "text-align",
50
- "table",
51
- "video",
52
- "audio",
53
- "responseArea",
54
- "superscript",
55
- "subscript",
56
- "css",
57
- "h3",
58
- "undo",
59
- "redo"
60
- ], V = {
61
- "--white": "#fff",
62
- "--black": "#2e2b29",
63
- "--black-contrast": "#110f0e",
64
- "--gray-1": "rgba(61, 37, 20, .05)",
65
- "--gray-2": "rgba(61, 37, 20, .08)",
66
- "--gray-3": "rgba(61, 37, 20, .12)",
67
- "--gray-4": "rgba(53, 38, 28, .3)",
68
- "--gray-5": "rgba(28, 25, 23, .6)",
69
- "--green": "#22c55e",
70
- "--purple": "#6a00f5",
71
- "--purple-contrast": "#5800cc",
72
- "--purple-light": "rgba(88, 5, 255, .05)",
73
- "--yellow-contrast": "#facc15",
74
- "--yellow": "rgba(250, 204, 21, .4)",
75
- "--yellow-light": "#fffae5",
76
- "--red": "#ff5c33",
77
- "--red-light": "#ffebe5",
78
- "--shadow": "0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)"
79
- }, H = (E) => {
80
- let { showParagraphs: k, separateParagraphs: H } = E.pluginProps || {}, [ne, W] = w([]), [G, K] = w(!1), { toolbarOpts: q } = E, J = x((e) => {
81
- W((t) => {
82
- let n = t.filter((t) => t.pos !== e);
83
- return n.length === 0 && K(!1), n;
84
- });
85
- }, [W]), Y = {
86
- ...z,
87
- ...q
88
- }, X = C(() => {
89
- let { customPlugins: e, ...t } = E.pluginProps || {};
90
- e ||= [];
91
- let n = (E.activePlugins || B)?.filter((e) => {
92
- let n = t[y[e] || e] || {};
93
- return !n || !n.disabled;
94
- });
95
- return b(n, e, {
96
- math: {},
97
- textAlign: E.textAlign,
98
- html: {},
99
- extraCSSRules: E.extraCSSRules || {},
100
- image: { ...E.imageSupport },
101
- toolbar: {},
102
- table: {},
103
- responseArea: { type: E.responseAreaProps?.type },
104
- languageCharacters: E.languageCharactersProps,
105
- keyPadCharacterRef: {},
106
- setKeypadInteraction: {},
107
- media: {}
108
- });
109
- }, [E]), Z = D({
110
- extensions: [
111
- te.configure({
112
- types: [
113
- "heading",
114
- "paragraph",
115
- "div",
116
- "headingParagraph",
117
- "h1",
118
- "h2",
119
- "h3",
120
- "h4",
121
- "h5",
122
- "h6",
123
- "td",
124
- "th"
125
- ],
126
- alignments: [
127
- "left",
128
- "right",
129
- "center",
130
- "justify"
131
- ]
132
- }),
133
- j,
134
- M.configure({ limit: E.charactersLimit || 1e6 }),
135
- A.configure({ trailingNode: {
136
- node: "paragraph",
137
- notAfter: ["paragraph", "div"]
138
- } }),
139
- g,
140
- i,
141
- _,
142
- a,
143
- o,
144
- I.configure({
145
- placeholder: E.placeholder,
146
- showOnlyWhenEditable: !0,
147
- showOnlyCurrent: !1,
148
- includeChildren: !0
149
- }),
150
- t,
151
- L,
152
- r,
153
- n,
154
- d.configure(E.responseAreaProps),
155
- c.configure(E.responseAreaProps),
156
- s.configure(E.responseAreaProps),
157
- l.configure(E.responseAreaProps),
158
- u.configure(E.responseAreaProps),
159
- f.configure({
160
- toolbarOpts: Y,
161
- math: E.pluginProps?.math || {}
162
- }),
163
- P,
164
- N,
165
- F,
166
- p.configure({
167
- toolbarOpts: Y,
168
- imageHandling: {
169
- disableImageAlignmentButtons: E.disableImageAlignmentButtons,
170
- onDone: (e) => E.onDone?.(e.getHTML()),
171
- onDelete: E.imageSupport && E.imageSupport.delete && ((e) => {
172
- let { src: t } = e.attrs;
173
- E.imageSupport.delete(t, (t) => {
174
- J(e.pos);
175
- });
176
- }),
177
- insertImageRequested: E.imageSupport && ((e, t, n) => {
178
- let [r, i] = t, a = (t) => {
179
- let n;
180
- G && t && (n = E.onChange), J(i), n?.(e.getHTML());
181
- };
182
- e._insertingImage = !0, W((e) => [...e, r]), (() => {
183
- let t = n(a), r = T(() => {
184
- let t = () => window.removeEventListener("focus", r);
185
- if (!e._insertingImage) {
186
- t();
187
- return;
188
- }
189
- J(i), e._insertingImage = !1, t();
190
- }, 500);
191
- window.addEventListener("focus", r), E.imageSupport.add(t);
192
- })();
193
- }),
194
- maxImageWidth: E.maxImageWidth,
195
- maxImageHeight: E.maxImageHeight
196
- },
197
- limit: 3
198
- }),
199
- m.configure({ uploadSoundSupport: E.uploadSoundSupport }),
200
- h.configure({ extraCSSRules: E.extraCSSRules })
201
- ],
202
- immediatelyRender: !1,
203
- editorProps: { handleKeyDown(e, t) {
204
- return E.onKeyDown ? E.onKeyDown(t) : !1;
205
- } },
206
- editable: !E.disabled,
207
- content: e(E.markup),
208
- onUpdate: ({ editor: e, transaction: t }) => {
209
- t.isDone && E.onChange?.(e.getHTML());
210
- },
211
- onBlur: ({ editor: e }) => {
212
- if (e._insertingImage || e._toolbarOpened || e.isActive("inline_dropdown") || e.isActive("explicit_constructed_response") || !e.schema) return;
213
- let t = e.getHTML();
214
- E.markup !== t && E.onChange?.(t), Y.doneOn === "blur" && E.onDone?.(t);
215
- }
216
- }, [E.charactersLimit]);
217
- S(() => {
218
- E.editorRef && E.editorRef(Z);
219
- }, [E.editorRef, Z]), S(() => {
220
- Z?.setEditable(!E.disabled);
221
- }, [E.disabled, Z]), S(() => {
222
- if (!Z) return;
223
- let t = e(E.markup);
224
- t !== Z.getHTML() && Z.commands.setContent(t, !1);
225
- }, [E.markup, Z]), S(() => {
226
- Object.entries(V).forEach(([e, t]) => {
227
- document.documentElement.style.setProperty(e, t);
228
- });
229
- }, []);
230
- let Q = O({
231
- editor: Z,
232
- selector: (e) => ({ isFocused: e.editor?.isFocused })
233
- }), $ = C(() => {
234
- let { minWidth: e, width: t, maxWidth: n, minHeight: r, height: i, maxHeight: a } = E;
235
- return {
236
- width: v(t),
237
- minWidth: v(e),
238
- maxWidth: v(n),
239
- height: v(i),
240
- minHeight: v(r),
241
- maxHeight: v(a)
242
- };
243
- }, [E]);
244
- return /* @__PURE__ */ R(ee, {
245
- ...E,
246
- activePlugins: X,
247
- toolbarOpts: Y,
248
- editorState: Q,
249
- editor: Z,
250
- children: Z && /* @__PURE__ */ R(U, {
251
- style: {
252
- minHeight: $.minHeight,
253
- height: $.height,
254
- maxHeight: $.maxHeight
255
- },
256
- showParagraph: k && !k.disabled,
257
- separateParagraph: H && !H.disabled,
258
- editor: Z
259
- })
260
- });
261
- }, U = k(E, { shouldForwardProp: (e) => !["showParagraph", "separateParagraph"].includes(e) })(({ showParagraph: e, separateParagraph: t }) => ({
262
- display: "flex",
263
- outline: "none !important",
264
- "& .ProseMirror": {
265
- flex: 1,
266
- padding: "5px",
267
- maxHeight: "500px",
268
- outline: "none !important",
269
- position: "initial",
270
- "& > p, & > div": { margin: "0" },
271
- "& p.is-editor-empty, & div.is-editor-empty": { position: "relative" },
272
- "& p.is-editor-empty::before, & div.is-editor-empty::before": {
273
- content: "attr(data-placeholder)",
274
- position: "absolute",
275
- left: 0,
276
- top: 0,
277
- color: "#9CA3AF",
278
- pointerEvents: "none",
279
- whiteSpace: "pre-wrap"
280
- },
281
- ...e && { "& > p:has(+ p)::after, & > div:has(+ div)::after": {
282
- display: "block",
283
- content: "\"¶\"",
284
- fontSize: "1em",
285
- color: "#146EB3"
286
- } },
287
- ...t && { "& > p:has(+ p)": { marginBottom: "1em" } }
288
- }
289
- }));
290
- //#endregion
291
- export { H as default };
@@ -1,11 +0,0 @@
1
- /**
2
- * @synced-from pie-lib/packages/editable-html-tip-tap/src/components/MenuBar.jsx
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
- declare const StyledMenuBar: (props: any) => React.JSX.Element;
11
- export default StyledMenuBar;