@pie-lib/editable-html-tip-tap 1.2.0-next.9 → 2.0.1

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 (94) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/lib/components/CharacterPicker.js +1 -0
  3. package/lib/components/CharacterPicker.js.map +1 -1
  4. package/lib/components/EditableHtml.js +84 -43
  5. package/lib/components/EditableHtml.js.map +1 -1
  6. package/lib/components/MenuBar.js +74 -43
  7. package/lib/components/MenuBar.js.map +1 -1
  8. package/lib/components/TiptapContainer.js +9 -8
  9. package/lib/components/TiptapContainer.js.map +1 -1
  10. package/lib/components/icons/TextAlign.js +2 -2
  11. package/lib/components/icons/TextAlign.js.map +1 -1
  12. package/lib/components/image/InsertImageHandler.js +10 -13
  13. package/lib/components/image/InsertImageHandler.js.map +1 -1
  14. package/lib/components/media/MediaDialog.js.map +1 -1
  15. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +6 -1
  16. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -1
  17. package/lib/components/respArea/DragInTheBlank/choice.js +15 -7
  18. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
  19. package/lib/components/respArea/ExplicitConstructedResponse.js +29 -11
  20. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -1
  21. package/lib/components/respArea/InlineDropdown.js +35 -6
  22. package/lib/components/respArea/InlineDropdown.js.map +1 -1
  23. package/lib/extensions/custom-toolbar-wrapper.js +3 -2
  24. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -1
  25. package/lib/extensions/div-node.js +83 -0
  26. package/lib/extensions/div-node.js.map +1 -0
  27. package/lib/extensions/ensure-empty-root-div.js +48 -0
  28. package/lib/extensions/ensure-empty-root-div.js.map +1 -0
  29. package/lib/extensions/ensure-list-item-content-is-div.js +64 -0
  30. package/lib/extensions/ensure-list-item-content-is-div.js.map +1 -0
  31. package/lib/extensions/extended-list-item.js +15 -0
  32. package/lib/extensions/extended-list-item.js.map +1 -0
  33. package/lib/extensions/extended-table-cell.js +22 -0
  34. package/lib/extensions/extended-table-cell.js.map +1 -0
  35. package/lib/extensions/extended-table.js +50 -1
  36. package/lib/extensions/extended-table.js.map +1 -1
  37. package/lib/extensions/image-component.js +102 -51
  38. package/lib/extensions/image-component.js.map +1 -1
  39. package/lib/extensions/image.js +51 -2
  40. package/lib/extensions/image.js.map +1 -1
  41. package/lib/extensions/math.js +50 -9
  42. package/lib/extensions/math.js.map +1 -1
  43. package/lib/extensions/media.js +3 -1
  44. package/lib/extensions/media.js.map +1 -1
  45. package/lib/extensions/responseArea.js +12 -7
  46. package/lib/extensions/responseArea.js.map +1 -1
  47. package/lib/styles/editorContainerStyles.js +5 -4
  48. package/lib/styles/editorContainerStyles.js.map +1 -1
  49. package/lib/utils/helper.js +17 -0
  50. package/lib/utils/helper.js.map +1 -0
  51. package/package.json +8 -8
  52. package/src/__tests__/EditableHtml.test.jsx +90 -7
  53. package/src/__tests__/index.test.jsx +11 -3
  54. package/src/components/CharacterPicker.jsx +1 -0
  55. package/src/components/EditableHtml.jsx +91 -41
  56. package/src/components/MenuBar.jsx +57 -24
  57. package/src/components/TiptapContainer.jsx +10 -8
  58. package/src/components/__tests__/CharacterPicker.test.jsx +22 -0
  59. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +55 -12
  60. package/src/components/__tests__/InlineDropdown.test.jsx +203 -10
  61. package/src/components/__tests__/InsertImageHandler.test.js +28 -21
  62. package/src/components/__tests__/MenuBar.test.jsx +32 -0
  63. package/src/components/icons/TextAlign.jsx +1 -1
  64. package/src/components/image/InsertImageHandler.js +9 -13
  65. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +6 -1
  66. package/src/components/respArea/DragInTheBlank/choice.jsx +32 -4
  67. package/src/components/respArea/ExplicitConstructedResponse.jsx +33 -10
  68. package/src/components/respArea/InlineDropdown.jsx +45 -10
  69. package/src/extensions/__tests__/divNode.test.js +87 -0
  70. package/src/extensions/__tests__/ensure-empty-root-div.test.js +57 -0
  71. package/src/extensions/__tests__/ensure-list-item-content-is-div.test.js +44 -0
  72. package/src/extensions/__tests__/extended-list-item.test.js +13 -0
  73. package/src/extensions/__tests__/extended-table-cell.test.js +22 -0
  74. package/src/extensions/__tests__/extended-table.test.js +98 -1
  75. package/src/extensions/__tests__/image-component.test.jsx +105 -9
  76. package/src/extensions/__tests__/image.test.js +109 -8
  77. package/src/extensions/__tests__/math.test.js +348 -0
  78. package/src/extensions/__tests__/media-node-view.test.jsx +10 -8
  79. package/src/extensions/__tests__/responseArea.test.js +291 -0
  80. package/src/extensions/custom-toolbar-wrapper.jsx +2 -2
  81. package/src/extensions/div-node.js +86 -0
  82. package/src/extensions/ensure-empty-root-div.js +47 -0
  83. package/src/extensions/ensure-list-item-content-is-div.js +62 -0
  84. package/src/extensions/extended-list-item.js +10 -0
  85. package/src/extensions/extended-table-cell.js +19 -0
  86. package/src/extensions/extended-table.js +37 -1
  87. package/src/extensions/image-component.jsx +114 -69
  88. package/src/extensions/image.js +56 -1
  89. package/src/extensions/math.js +62 -10
  90. package/src/extensions/media.js +1 -1
  91. package/src/extensions/responseArea.js +13 -11
  92. package/src/styles/editorContainerStyles.js +5 -4
  93. package/src/utils/helper.js +17 -0
  94. /package/src/components/media/{MediaDialog.js → MediaDialog.jsx} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,182 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.0.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@2.0.0...@pie-lib/editable-html-tip-tap@2.0.1) (2026-04-28)
7
+
8
+ **Note:** Version bump only for package @pie-lib/editable-html-tip-tap
9
+
10
+ # [1.2.0-next.36](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.35...@pie-lib/editable-html-tip-tap@1.2.0-next.36) (2026-04-23)
11
+
12
+ ### Bug Fixes
13
+
14
+ - made sure colspan elements match the number of columns on removing [PIE-168] ([0ee3056](https://github.com/pie-framework/pie-lib/commit/0ee3056f2c00d71eb83ee2f56ad0efb75dc3b21b))
15
+ - made sure custom toolbar is shown for inline dropdown response areas [PIE-130] ([d3cb03d](https://github.com/pie-framework/pie-lib/commit/d3cb03d45eb716d700f1202aa1cc223c169cfde5))
16
+
17
+ # [1.2.0-next.35](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.34...@pie-lib/editable-html-tip-tap@1.2.0-next.35) (2026-04-17)
18
+
19
+ ### Bug Fixes
20
+
21
+ - made sure insertImageRequested is called only once [PIE-1229] ([336d38c](https://github.com/pie-framework/pie-lib/commit/336d38cf2e7e45b621b5dd831991017a694ec5cd))
22
+
23
+ # [1.2.0-next.34](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.33...@pie-lib/editable-html-tip-tap@1.2.0-next.34) (2026-04-16)
24
+
25
+ ### Bug Fixes
26
+
27
+ - **editable-html-tip-tap:** handle list item to avoid default paragraph wrapping PIE-46 ([9c37dac](https://github.com/pie-framework/pie-lib/commit/9c37dac9d10940f59930d21a135cd991f238d622))
28
+ - streamline beforeEach setup in image component tests ([3d0fc78](https://github.com/pie-framework/pie-lib/commit/3d0fc78b9ceda1664978378ace9f6c3bbd4a2269))
29
+ - tests ([4c96c88](https://github.com/pie-framework/pie-lib/commit/4c96c88b791b10d747453914577178b991753961))
30
+
31
+ ### Features
32
+
33
+ - **editable-html-tip-tap:** image -add unique nodeKey attribute for identification PIE-54 ([210c0d5](https://github.com/pie-framework/pie-lib/commit/210c0d5ffda0718b52845b3b4011b98f66b0b547))
34
+
35
+ # [1.2.0-next.33](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.32...@pie-lib/editable-html-tip-tap@1.2.0-next.33) (2026-04-16)
36
+
37
+ ### Bug Fixes
38
+
39
+ - made sure correct reference is sent for insert image handler [PIE-1229][PIE-44] ([8db57c0](https://github.com/pie-framework/pie-lib/commit/8db57c035449b5c630a084211b506d2c85786772))
40
+
41
+ # [1.2.0-next.32](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.31...@pie-lib/editable-html-tip-tap@1.2.0-next.32) (2026-04-16)
42
+
43
+ ### Bug Fixes
44
+
45
+ - made sure image handling works properly without losing focus, fix media size problem [PIE-129][PIE-44] ([ad28c81](https://github.com/pie-framework/pie-lib/commit/ad28c816e12d35a59d51bcb03466194c33e3b5dd))
46
+
47
+ # [1.2.0-next.31](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.30...@pie-lib/editable-html-tip-tap@1.2.0-next.31) (2026-04-15)
48
+
49
+ ### Bug Fixes
50
+
51
+ - **render-ui/editable-html-tip-tap:** fix disableImageAlignmentButtons prop and fix alignment in PreviewPrompt PIE-45 ([ef87ea4](https://github.com/pie-framework/pie-lib/commit/ef87ea4e4f9343be4779ea370036a556d67c8cb3))
52
+
53
+ # [1.2.0-next.30](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.29...@pie-lib/editable-html-tip-tap@1.2.0-next.30) (2026-04-15)
54
+
55
+ ### Features
56
+
57
+ - made sure pasting image works in the editor [PIE-173] ([28c46e5](https://github.com/pie-framework/pie-lib/commit/28c46e5d1ec97fdc2d1b4dd454fe19882dea5125))
58
+
59
+ # [1.2.0-next.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.28...@pie-lib/editable-html-tip-tap@1.2.0-next.29) (2026-04-14)
60
+
61
+ ### Bug Fixes
62
+
63
+ - **editable-html-tip-tap:** parseHTML as img tag image extension, avoid open upload automatically at mounted PIE-37 ([30bad4e](https://github.com/pie-framework/pie-lib/commit/30bad4ea07c1e4c738534aab115cc16d64195b60))
64
+
65
+ # [1.2.0-next.28](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.27...@pie-lib/editable-html-tip-tap@1.2.0-next.28) (2026-04-13)
66
+
67
+ ### Bug Fixes
68
+
69
+ - **image:** remove unwanted change ([04a484f](https://github.com/pie-framework/pie-lib/commit/04a484f395c8a87407a8ad3f0ff99a7c0af0488a))
70
+ - **image:** revert - simplify setImageUploadNode command to directly insert content ([0d4467d](https://github.com/pie-framework/pie-lib/commit/0d4467dd9c29e9c90db6cfbf49f6e68704c1d0a9))
71
+
72
+ # [1.2.0-next.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.26...@pie-lib/editable-html-tip-tap@1.2.0-next.27) (2026-04-09)
73
+
74
+ ### Bug Fixes
75
+
76
+ - **editable-html-tip-tap:** image-component - fix active style, dragging issues and update image rendering logic PIE-34 ([5588e8b](https://github.com/pie-framework/pie-lib/commit/5588e8b10f61f2936d2356a4b2d403f29d094efa))
77
+ - handle optional chaining and fix test ([c4d4657](https://github.com/pie-framework/pie-lib/commit/c4d4657ed38718142c07ddf2a06225f2a11fd535))
78
+
79
+ # [1.2.0-next.26](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.25...@pie-lib/editable-html-tip-tap@1.2.0-next.26) (2026-04-09)
80
+
81
+ ### Bug Fixes
82
+
83
+ - **editable-html-tip-tap:** open math toolbar in current container PIE-18 ([f33a73f](https://github.com/pie-framework/pie-lib/commit/f33a73fd0c7dbd34571d6490b031459ad89923c3))
84
+ - **editable-html-tip-tap:** prevent spanish keyboard to be dismissed when clicking on it PIE-36 ([6c02557](https://github.com/pie-framework/pie-lib/commit/6c02557fd61b5b0cc217340f20b94e1934f6beaa))
85
+ - **tip-tap/image-component:** add image deletion handling PIE-38 ([582bd1f](https://github.com/pie-framework/pie-lib/commit/582bd1f8edd33f0a2c5a80eab7d400a2db5113fb))
86
+
87
+ # [1.2.0-next.25](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.24...@pie-lib/editable-html-tip-tap@1.2.0-next.25) (2026-04-08)
88
+
89
+ ### Bug Fixes
90
+
91
+ - **editable-html-tip-tap:** enhance toolbar visibility logic and use portal for rendering ([0b06a9d](https://github.com/pie-framework/pie-lib/commit/0b06a9d2a8b208069d9a774b38797428cff30174))
92
+ - made sure div is the default field in the editor, if a breakpoint is added it turns into a p [PIE-53] ([8f33af0](https://github.com/pie-framework/pie-lib/commit/8f33af05047cdd8993a8a862ce3e26e67c6810fe))
93
+ - test ([10d2392](https://github.com/pie-framework/pie-lib/commit/10d23926c2028851bcb26cc41f430aa88e85ff21))
94
+
95
+ # [1.2.0-next.24](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.23...@pie-lib/editable-html-tip-tap@1.2.0-next.24) (2026-04-07)
96
+
97
+ ### Bug Fixes
98
+
99
+ - **editable-html-tip-tap:** prevent toolbar from closing when clicking on math node preview PIE-114 ([b422584](https://github.com/pie-framework/pie-lib/commit/b4225846952d9eaef76039d7c6b69b93c5029da6))
100
+
101
+ # [1.2.0-next.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.22...@pie-lib/editable-html-tip-tap@1.2.0-next.23) (2026-04-06)
102
+
103
+ ### Bug Fixes
104
+
105
+ - made sure lastIndex in respArea is handled properly, improved spacing around response areas [PIE-35][PIE-40] ([c673701](https://github.com/pie-framework/pie-lib/commit/c673701618bc896208c9760e87ea6dbbd1a91d54))
106
+
107
+ # [1.2.0-next.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.21...@pie-lib/editable-html-tip-tap@1.2.0-next.22) (2026-04-03)
108
+
109
+ ### Bug Fixes
110
+
111
+ - **editable-html-tip-tap:** backspace behavior in tiptap and add custom toolbar in ExplicitConstructedResponse PIE-19 PIE-30 ([5779a6d](https://github.com/pie-framework/pie-lib/commit/5779a6d6a1c30f398025d4c7bdce578827b51e3a))
112
+ - handle different editors, handle clicks in dropdown PIE-47 ([19c8914](https://github.com/pie-framework/pie-lib/commit/19c89148cee951133680c218fb446107f9b2ce16))
113
+ - **math-input:** bump @pie-framework/mathquill to 1.2.1-beta.1 with jQuery shim fixes PIE-16 PIE-20 ([3eaa8fd](https://github.com/pie-framework/pie-lib/commit/3eaa8fd410d8668c2d085cca4a4995a7e66d774f))
114
+ - **plot:** remove unnecessary space, prevent new lines, center placeholder PD-5674 ([9840d80](https://github.com/pie-framework/pie-lib/commit/9840d80a1351f19adbe3396d3abae5fb4e310494))
115
+
116
+ # [1.2.0-next.21](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.20...@pie-lib/editable-html-tip-tap@1.2.0-next.21) (2026-03-31)
117
+
118
+ ### Bug Fixes
119
+
120
+ - **editable-html-tip-tap:** avoid closing math dialog on scrollbar, update test PD-5823 ([ad43e67](https://github.com/pie-framework/pie-lib/commit/ad43e67d9019efae020d2da817568936348bcbc9))
121
+
122
+ # [1.2.0-next.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.19...@pie-lib/editable-html-tip-tap@1.2.0-next.20) (2026-03-25)
123
+
124
+ ### Bug Fixes
125
+
126
+ - **editable-html-tip-tap:** extend text alignment options to include additional elements PD-5851 ([fc43c5c](https://github.com/pie-framework/pie-lib/commit/fc43c5c4c29a4c6bcd42c61d6b18e32d56bf2557))
127
+ - provided the pos of the node as well in the response area toolbar callback [PD-5787] ([caa9a90](https://github.com/pie-framework/pie-lib/commit/caa9a90617d15afcd8457c8962460867b3990bbc))
128
+
129
+ # [1.2.0-next.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.18...@pie-lib/editable-html-tip-tap@1.2.0-next.19) (2026-03-18)
130
+
131
+ ### Bug Fixes
132
+
133
+ - **editable-html-tip-tap:** wrap new node with plain text in a div not in a p PD-5669 ([0216b60](https://github.com/pie-framework/pie-lib/commit/0216b60cb54f2af2761042c0be7247b1507b8aeb))
134
+
135
+ # [1.2.0-next.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.17...@pie-lib/editable-html-tip-tap@1.2.0-next.18) (2026-03-18)
136
+
137
+ ### Bug Fixes
138
+
139
+ - **editable-html-tip-tap:** add blockquote, fix styling and add text alignment options PD-5790 ([99b30f6](https://github.com/pie-framework/pie-lib/commit/99b30f6622fd002abcdb901c4584026519bed8b7))
140
+
141
+ # [1.2.0-next.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.16...@pie-lib/editable-html-tip-tap@1.2.0-next.17) (2026-03-18)
142
+
143
+ ### Bug Fixes
144
+
145
+ - add touchAction style to prevent touch interactions in DragInTheBlank and blank components PD-5811 ([ba4d73b](https://github.com/pie-framework/pie-lib/commit/ba4d73b4785cc59e85f3055902667a1cd4db325c))
146
+ - **editable-html-tip-tap:** create test for new div block extension PD-5622 ([911ef92](https://github.com/pie-framework/pie-lib/commit/911ef92c08f8de3f7080c36b48aa336f61b55800))
147
+ - **editable-html-tip-tap:** set div as default, transform div to p tag at enter, update tests PD-5622 ([32e4126](https://github.com/pie-framework/pie-lib/commit/32e4126b9369c29c165d7a55315b04dbc759a181))
148
+
149
+ # [1.2.0-next.16](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.15...@pie-lib/editable-html-tip-tap@1.2.0-next.16) (2026-03-11)
150
+
151
+ **Note:** Version bump only for package @pie-lib/editable-html-tip-tap
152
+
153
+ # [1.2.0-next.15](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.14...@pie-lib/editable-html-tip-tap@1.2.0-next.15) (2026-03-11)
154
+
155
+ ### Bug Fixes
156
+
157
+ - bump pie-framework/mathquill PD-5791 ([6dd160a](https://github.com/pie-framework/pie-lib/commit/6dd160a980fd53c2acd704b503266863c24bcf23))
158
+
159
+ # [1.2.0-next.14](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.13...@pie-lib/editable-html-tip-tap@1.2.0-next.14) (2026-03-09)
160
+
161
+ ### Features
162
+
163
+ - remove jQuery dependency via MathQuill 1.2.0-beta.0 Interface v3 shim PD-5791 ([d427f32](https://github.com/pie-framework/pie-lib/commit/d427f32d5547de9610579d83b454c568def7ea74))
164
+
165
+ # [1.2.0-next.13](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.12...@pie-lib/editable-html-tip-tap@1.2.0-next.13) (2026-03-06)
166
+
167
+ ### Bug Fixes
168
+
169
+ - editable-area responsive, added handling for toolbars inside responseArea, ability to provide editor instance PD-5616-PD-5582-PD-5603-PD-5604-PD-5605 ([02213cd](https://github.com/pie-framework/pie-lib/commit/02213cde4315edb8fa68f1f3b97a14aaba2b156c))
170
+
171
+ # [1.2.0-next.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.11...@pie-lib/editable-html-tip-tap@1.2.0-next.12) (2026-03-04)
172
+
173
+ ### Bug Fixes
174
+
175
+ - **editable-html-tip-tap:** adjust placeholder styling for empty paragraphs to prevent extra height ([a9d8643](https://github.com/pie-framework/pie-lib/commit/a9d86432b7aac9a3ead327c7d32ddbdb94e25fdb))
176
+ - **editable-html-tip-tap:** handle focus,selection delete menu PD-5589 ([b975827](https://github.com/pie-framework/pie-lib/commit/b975827da8fed42936f54544c7faba2ea7de009c))
177
+
178
+ # [1.2.0-next.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.9...@pie-lib/editable-html-tip-tap@1.2.0-next.11) (2026-02-26)
179
+
180
+ **Note:** Version bump only for package @pie-lib/editable-html-tip-tap
181
+
6
182
  # [1.2.0-next.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.8...@pie-lib/editable-html-tip-tap@1.2.0-next.9) (2026-02-25)
7
183
 
8
184
  ### Bug Fixes
@@ -127,6 +127,7 @@ function CharacterPicker(_ref2) {
127
127
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
128
128
  ref: containerRef,
129
129
  className: "insert-character-dialog",
130
+ "data-toolbar-for": editor.instanceId,
130
131
  style: {
131
132
  visibility: position.top === 0 && position.left === 0 ? 'hidden' : 'initial',
132
133
  position: 'absolute',
@@ -1 +1 @@
1
- {"version":3,"file":"CharacterPicker.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_propTypes","_get","_mathToolbar","_customPopper","_characterUtils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","CharacterIcon","exports","_ref","letter","createElement","style","fontSize","lineHeight","propTypes","PropTypes","string","CharacterPicker","_ref2","_opts$characters","editor","opts","onClose","characters","containerRef","useRef","_useState","useState","top","left","_useState2","_slicedToArray2","position","setPosition","_useState3","_useState4","popover","setPopover","configToUse","useMemo","spanishConfig","language","specialConfig","layoutForCharacters","reduce","obj","arr","columns","rows","closePopOver","useEffect","editorDOM","options","element","editorRect","getBoundingClientRect","bodyRect","document","body","from","state","selection","start","view","coordsAtPos","Math","abs","height","y","current","offsetHeight","handleClickOutside","contains","target","dom","timeoutId","setTimeout","addEventListener","clearTimeout","removeEventListener","renderPopOver","event","el","anchorEl","currentTarget","handleChange","val","chain","focus","insertContent","run","Fragment","ReactDOM","createPortal","ref","className","visibility","concat","maxWidth","zIndex","PureToolbar","keyPadCharacterRef","setKeypadInteraction","autoFocus","noDecimal","hideInput","noLatexHandling","hideDoneButtonBackground","layoutForKeyPad","additionalKeys","_toConsumableArray2","map","k","name","write","label","category","extraClass","extraProps","border","hasPreview","actions","onMouseEnter","ev","onMouseLeave","keypadMode","onChange","onDone","description","unicode","object","func","isRequired"],"sources":["../../src/components/CharacterPicker.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport get from 'lodash-es/get';\n\nimport { PureToolbar } from '@pie-lib/math-toolbar';\n\nimport CustomPopper from './characters/custom-popper';\nimport { spanishConfig, specialConfig } from './characters/characterUtils';\n\nconst CharacterIcon = ({ letter }) => (\n <div\n style={{\n fontSize: '24px',\n lineHeight: '24px',\n }}\n >\n {letter}\n </div>\n);\n\nCharacterIcon.propTypes = {\n letter: PropTypes.string,\n};\n\nexport function CharacterPicker({ editor, opts, onClose }) {\n if (!opts?.characters?.length) {\n return null;\n }\n\n const containerRef = useRef(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [popover, setPopover] = useState(null);\n\n const configToUse = useMemo(() => {\n if (!opts) return spanishConfig;\n\n switch (true) {\n case opts.language === 'spanish':\n return spanishConfig;\n case opts.language === 'special':\n return specialConfig;\n default:\n return opts;\n }\n }, [opts]);\n\n const layoutForCharacters = useMemo(\n () =>\n configToUse.characters.reduce(\n (obj, arr) => {\n if (arr.length >= obj.columns) {\n obj.columns = arr.length;\n }\n\n return obj;\n },\n { rows: configToUse.characters.length, columns: 0 },\n ),\n [configToUse],\n );\n\n const closePopOver = () => setPopover(null);\n\n useEffect(\n () => () => {\n closePopOver();\n },\n [],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n // Calculate position relative to selection\n const editorDOM = editor.options.element;\n const editorRect = editorDOM.getBoundingClientRect();\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n let top = editorRect.top + Math.abs(bodyRect.top) + editorRect.height + 60;\n\n if (editorRect.y > containerRef.current.offsetHeight) {\n top = top - (containerRef.current.offsetHeight + editorRect.height) - 80;\n }\n\n setPosition({\n // top: start.top + Math.abs(bodyRect.top) - containerRef.current.offsetHeight - 10 + additionalTopOffset, // shift above\n top: top,\n left: start.left,\n });\n\n const handleClickOutside = (e) => {\n if (containerRef.current && !containerRef.current.contains(e.target) && !editor.view.dom.contains(e.target)) {\n onClose();\n }\n };\n\n const timeoutId = setTimeout(() => {\n document.addEventListener('click', handleClickOutside);\n });\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('click', handleClickOutside);\n };\n }, [editor, onClose]);\n\n const renderPopOver = (event, el) => setPopover({ anchorEl: event.currentTarget, el });\n\n const handleChange = (val) => {\n if (typeof val === 'string') {\n editor.chain().focus().insertContent(val).run();\n }\n };\n\n return (\n <>\n {ReactDOM.createPortal(\n <div\n ref={containerRef}\n className=\"insert-character-dialog\"\n style={{\n visibility: position.top === 0 && position.left === 0 ? 'hidden' : 'initial',\n position: 'absolute',\n top: `${position.top}px`,\n left: `${position.left}px`,\n maxWidth: '500px',\n zIndex: 99,\n }}\n >\n <div>\n <PureToolbar\n keyPadCharacterRef={opts.keyPadCharacterRef}\n setKeypadInteraction={opts.setKeypadInteraction}\n autoFocus\n noDecimal\n hideInput\n noLatexHandling\n hideDoneButtonBackground\n layoutForKeyPad={layoutForCharacters}\n additionalKeys={configToUse.characters.reduce((arr, n) => {\n arr = [\n ...arr,\n ...n.map((k) => ({\n name: get(k, 'name') || k,\n write: get(k, 'write') || k,\n label: get(k, 'label') || k,\n category: 'character',\n extraClass: 'character',\n extraProps: {\n ...(k.extraProps || {}),\n style: {\n ...(k.extraProps || {}).style,\n border: '1px solid #000',\n },\n },\n ...(configToUse.hasPreview\n ? {\n actions: {\n onMouseEnter: (ev) => renderPopOver(ev, k),\n onMouseLeave: closePopOver,\n },\n }\n : {}),\n })),\n ];\n\n return arr;\n }, [])}\n keypadMode=\"language\"\n onChange={handleChange}\n onDone={onClose}\n />\n </div>\n </div>,\n document.body,\n )}\n {popover &&\n ReactDOM.createPortal(\n <CustomPopper onClose={closePopOver} anchorEl={popover.anchorEl}>\n <div>{popover.el.label}</div>\n <div style={{ fontSize: 20, lineHeight: '20px' }}>{popover.el.description}</div>\n <div style={{ fontSize: 20, lineHeight: '20px' }}>{popover.el.unicode}</div>\n </CustomPopper>,\n document.body,\n )}\n </>\n );\n}\n\nCharacterPicker.propTypes = {\n editor: PropTypes.object,\n opts: PropTypes.object,\n onClose: PropTypes.func.isRequired,\n};\n\nexport { CharacterIcon };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CharacterPicker.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_propTypes","_get","_mathToolbar","_customPopper","_characterUtils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","CharacterIcon","exports","_ref","letter","createElement","style","fontSize","lineHeight","propTypes","PropTypes","string","CharacterPicker","_ref2","_opts$characters","editor","opts","onClose","characters","containerRef","useRef","_useState","useState","top","left","_useState2","_slicedToArray2","position","setPosition","_useState3","_useState4","popover","setPopover","configToUse","useMemo","spanishConfig","language","specialConfig","layoutForCharacters","reduce","obj","arr","columns","rows","closePopOver","useEffect","editorDOM","options","element","editorRect","getBoundingClientRect","bodyRect","document","body","from","state","selection","start","view","coordsAtPos","Math","abs","height","y","current","offsetHeight","handleClickOutside","contains","target","dom","timeoutId","setTimeout","addEventListener","clearTimeout","removeEventListener","renderPopOver","event","el","anchorEl","currentTarget","handleChange","val","chain","focus","insertContent","run","Fragment","ReactDOM","createPortal","ref","className","instanceId","visibility","concat","maxWidth","zIndex","PureToolbar","keyPadCharacterRef","setKeypadInteraction","autoFocus","noDecimal","hideInput","noLatexHandling","hideDoneButtonBackground","layoutForKeyPad","additionalKeys","_toConsumableArray2","map","k","name","write","label","category","extraClass","extraProps","border","hasPreview","actions","onMouseEnter","ev","onMouseLeave","keypadMode","onChange","onDone","description","unicode","object","func","isRequired"],"sources":["../../src/components/CharacterPicker.jsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport get from 'lodash-es/get';\n\nimport { PureToolbar } from '@pie-lib/math-toolbar';\n\nimport CustomPopper from './characters/custom-popper';\nimport { spanishConfig, specialConfig } from './characters/characterUtils';\n\nconst CharacterIcon = ({ letter }) => (\n <div\n style={{\n fontSize: '24px',\n lineHeight: '24px',\n }}\n >\n {letter}\n </div>\n);\n\nCharacterIcon.propTypes = {\n letter: PropTypes.string,\n};\n\nexport function CharacterPicker({ editor, opts, onClose }) {\n if (!opts?.characters?.length) {\n return null;\n }\n\n const containerRef = useRef(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [popover, setPopover] = useState(null);\n\n const configToUse = useMemo(() => {\n if (!opts) return spanishConfig;\n\n switch (true) {\n case opts.language === 'spanish':\n return spanishConfig;\n case opts.language === 'special':\n return specialConfig;\n default:\n return opts;\n }\n }, [opts]);\n\n const layoutForCharacters = useMemo(\n () =>\n configToUse.characters.reduce(\n (obj, arr) => {\n if (arr.length >= obj.columns) {\n obj.columns = arr.length;\n }\n\n return obj;\n },\n { rows: configToUse.characters.length, columns: 0 },\n ),\n [configToUse],\n );\n\n const closePopOver = () => setPopover(null);\n\n useEffect(\n () => () => {\n closePopOver();\n },\n [],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n // Calculate position relative to selection\n const editorDOM = editor.options.element;\n const editorRect = editorDOM.getBoundingClientRect();\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n let top = editorRect.top + Math.abs(bodyRect.top) + editorRect.height + 60;\n\n if (editorRect.y > containerRef.current.offsetHeight) {\n top = top - (containerRef.current.offsetHeight + editorRect.height) - 80;\n }\n\n setPosition({\n // top: start.top + Math.abs(bodyRect.top) - containerRef.current.offsetHeight - 10 + additionalTopOffset, // shift above\n top: top,\n left: start.left,\n });\n\n const handleClickOutside = (e) => {\n if (containerRef.current && !containerRef.current.contains(e.target) && !editor.view.dom.contains(e.target)) {\n onClose();\n }\n };\n\n const timeoutId = setTimeout(() => {\n document.addEventListener('click', handleClickOutside);\n });\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('click', handleClickOutside);\n };\n }, [editor, onClose]);\n\n const renderPopOver = (event, el) => setPopover({ anchorEl: event.currentTarget, el });\n\n const handleChange = (val) => {\n if (typeof val === 'string') {\n editor.chain().focus().insertContent(val).run();\n }\n };\n\n return (\n <>\n {ReactDOM.createPortal(\n <div\n ref={containerRef}\n className=\"insert-character-dialog\"\n data-toolbar-for={editor.instanceId}\n style={{\n visibility: position.top === 0 && position.left === 0 ? 'hidden' : 'initial',\n position: 'absolute',\n top: `${position.top}px`,\n left: `${position.left}px`,\n maxWidth: '500px',\n zIndex: 99,\n }}\n >\n <div>\n <PureToolbar\n keyPadCharacterRef={opts.keyPadCharacterRef}\n setKeypadInteraction={opts.setKeypadInteraction}\n autoFocus\n noDecimal\n hideInput\n noLatexHandling\n hideDoneButtonBackground\n layoutForKeyPad={layoutForCharacters}\n additionalKeys={configToUse.characters.reduce((arr, n) => {\n arr = [\n ...arr,\n ...n.map((k) => ({\n name: get(k, 'name') || k,\n write: get(k, 'write') || k,\n label: get(k, 'label') || k,\n category: 'character',\n extraClass: 'character',\n extraProps: {\n ...(k.extraProps || {}),\n style: {\n ...(k.extraProps || {}).style,\n border: '1px solid #000',\n },\n },\n ...(configToUse.hasPreview\n ? {\n actions: {\n onMouseEnter: (ev) => renderPopOver(ev, k),\n onMouseLeave: closePopOver,\n },\n }\n : {}),\n })),\n ];\n\n return arr;\n }, [])}\n keypadMode=\"language\"\n onChange={handleChange}\n onDone={onClose}\n />\n </div>\n </div>,\n document.body,\n )}\n {popover &&\n ReactDOM.createPortal(\n <CustomPopper onClose={closePopOver} anchorEl={popover.anchorEl}>\n <div>{popover.el.label}</div>\n <div style={{ fontSize: 20, lineHeight: '20px' }}>{popover.el.description}</div>\n <div style={{ fontSize: 20, lineHeight: '20px' }}>{popover.el.unicode}</div>\n </CustomPopper>,\n document.body,\n )}\n </>\n );\n}\n\nCharacterPicker.propTypes = {\n editor: PropTypes.object,\n opts: PropTypes.object,\n onClose: PropTypes.func.isRequired,\n};\n\nexport { CharacterIcon };\n"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,9 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
14
  var _react = _interopRequireWildcard(require("react"));
15
+ var _debounce = _interopRequireDefault(require("lodash-es/debounce"));
15
16
  var _react2 = require("@tiptap/react");
17
+ var _styles = require("@mui/material/styles");
16
18
  var _starterKit = _interopRequireDefault(require("@tiptap/starter-kit"));
17
19
  var _extensionTextStyle = require("@tiptap/extension-text-style");
18
20
  var _extensionCharacterCount = require("@tiptap/extension-character-count");
@@ -21,17 +23,19 @@ var _extensionSubscript = _interopRequireDefault(require("@tiptap/extension-subs
21
23
  var _extensionTextAlign = _interopRequireDefault(require("@tiptap/extension-text-align"));
22
24
  var _extensionImage = _interopRequireDefault(require("@tiptap/extension-image"));
23
25
  var _extensionPlaceholder = _interopRequireDefault(require("@tiptap/extension-placeholder"));
24
- var _styles = require("@mui/material/styles");
25
- var _debounce = _interopRequireDefault(require("lodash-es/debounce"));
26
+ var _helper = require("../utils/helper");
26
27
  var _extendedTable = _interopRequireDefault(require("../extensions/extended-table"));
28
+ var _extendedTableCell = require("../extensions/extended-table-cell");
29
+ var _divNode = require("../extensions/div-node");
30
+ var _ensureEmptyRootDiv = require("../extensions/ensure-empty-root-div");
31
+ var _ensureListItemContentIsDiv = require("../extensions/ensure-list-item-content-is-div");
27
32
  var _extensionTableRow = require("@tiptap/extension-table-row");
28
- var _extensionTableCell = require("@tiptap/extension-table-cell");
29
- var _extensionTableHeader = require("@tiptap/extension-table-header");
30
33
  var _responseArea = require("../extensions/responseArea");
31
34
  var _math = require("../extensions/math");
32
35
  var _image = require("../extensions/image");
33
36
  var _media = require("../extensions/media");
34
37
  var _css = require("../extensions/css");
38
+ var _extendedListItem = require("../extensions/extended-list-item");
35
39
  var _TiptapContainer = _interopRequireDefault(require("./TiptapContainer"));
36
40
  var _size = require("../utils/size");
37
41
  var _extensions = require("../extensions");
@@ -73,6 +77,7 @@ var cssVariables = {
73
77
  '--shadow': "0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)"
74
78
  };
75
79
  var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
80
+ var _props$pluginProps;
76
81
  var _ref = props.pluginProps || {},
77
82
  showParagraphs = _ref.showParagraphs,
78
83
  separateParagraphs = _ref.separateParagraphs;
@@ -85,6 +90,17 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
85
90
  scheduled = _useState4[0],
86
91
  setScheduled = _useState4[1];
87
92
  var toolbarOpts = props.toolbarOpts;
93
+ var removePendingImage = (0, _react.useCallback)(function (imagePos) {
94
+ setPendingImages(function (prev) {
95
+ var next = prev.filter(function (img) {
96
+ return img.pos !== imagePos;
97
+ });
98
+ if (next.length === 0) {
99
+ setScheduled(false);
100
+ }
101
+ return next;
102
+ });
103
+ }, [setPendingImages]);
88
104
  var toolbarOptsToUse = _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
89
105
  var activePluginsToUse = (0, _react.useMemo)(function () {
90
106
  var _ref3, _props$responseAreaPr;
@@ -114,43 +130,44 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
114
130
  media: {}
115
131
  });
116
132
  }, [props]);
117
- var extensions = [_extensionTextStyle.TextStyleKit, _extensionCharacterCount.CharacterCount.configure({
133
+ var extensions = [_extensionTextAlign["default"].configure({
134
+ types: ['heading', 'paragraph', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'th'],
135
+ alignments: ['left', 'right', 'center', 'justify']
136
+ }), _extensionTextStyle.TextStyleKit, _extensionCharacterCount.CharacterCount.configure({
118
137
  limit: props.charactersLimit || 1000000
119
- }), _starterKit["default"], _extensionPlaceholder["default"].configure({
138
+ }), _starterKit["default"].configure({
139
+ trailingNode: {
140
+ node: 'paragraph',
141
+ notAfter: ['paragraph', 'div']
142
+ }
143
+ }), _extendedListItem.ExtendedListItem, _divNode.DivNode, _ensureEmptyRootDiv.EnsureEmptyRootIsDiv, _ensureListItemContentIsDiv.EnsureListItemContentIsDiv, _extensionPlaceholder["default"].configure({
120
144
  placeholder: props.placeholder,
121
145
  // show placeholder even when editor is focused
122
146
  showOnlyWhenEditable: true,
123
147
  showOnlyCurrent: false,
124
148
  // show on all empty nodes, not only the current one
125
149
  includeChildren: true
126
- }), _extendedTable["default"], _extensionTableRow.TableRow, _extensionTableHeader.TableHeader, _extensionTableCell.TableCell, _responseArea.ResponseAreaExtension.configure(props.responseAreaProps), _responseArea.ExplicitConstructedResponseNode.configure(props.responseAreaProps), _responseArea.DragInTheBlankNode.configure(props.responseAreaProps), _responseArea.InlineDropdownNode.configure(props.responseAreaProps), _responseArea.MathTemplatedNode.configure(props.responseAreaProps), _math.MathNode.configure({
127
- toolbarOpts: toolbarOptsToUse
128
- }), _extensionSubscript["default"], _extensionSuperscript["default"], _extensionTextAlign["default"].configure({
129
- types: ['heading', 'paragraph'],
130
- alignments: ['left', 'right', 'center']
131
- }), _extensionImage["default"], _image.ImageUploadNode.configure({
150
+ }), _extendedTable["default"], _extensionTableRow.TableRow, _extendedTableCell.ExtendedTableHeader, _extendedTableCell.ExtendedTableCell, _responseArea.ResponseAreaExtension.configure(props.responseAreaProps), _responseArea.ExplicitConstructedResponseNode.configure(props.responseAreaProps), _responseArea.DragInTheBlankNode.configure(props.responseAreaProps), _responseArea.InlineDropdownNode.configure(props.responseAreaProps), _responseArea.MathTemplatedNode.configure(props.responseAreaProps), _math.MathNode.configure({
151
+ toolbarOpts: toolbarOptsToUse,
152
+ math: ((_props$pluginProps = props.pluginProps) === null || _props$pluginProps === void 0 ? void 0 : _props$pluginProps.math) || {}
153
+ }), _extensionSubscript["default"], _extensionSuperscript["default"], _extensionImage["default"], _image.ImageUploadNode.configure({
132
154
  toolbarOpts: toolbarOptsToUse,
133
155
  imageHandling: {
134
156
  disableImageAlignmentButtons: props.disableImageAlignmentButtons,
135
- onDone: function onDone() {
157
+ onDone: function onDone(editor) {
136
158
  var _props$onDone;
137
159
  return (_props$onDone = props.onDone) === null || _props$onDone === void 0 ? void 0 : _props$onDone.call(props, editor.getHTML());
138
160
  },
139
161
  onDelete: props.imageSupport && props.imageSupport["delete"] && function (node) {
140
162
  var src = node.attrs.src;
141
163
  props.imageSupport["delete"](src, function (e) {
142
- var newPendingImages = pendingImages.filter(function (img) {
143
- return img.key !== node.key;
144
- });
145
- var newState = {
146
- pendingImages: newPendingImages,
147
- scheduled: scheduled && newPendingImages.length === 0 ? false : scheduled
148
- };
149
- setPendingImages(newState.pendingImages);
150
- setScheduled(newState.scheduled);
164
+ removePendingImage(node.pos);
151
165
  });
152
166
  },
153
- insertImageRequested: props.imageSupport && function (addedImage, getHandler) {
167
+ insertImageRequested: props.imageSupport && function (editor, imageInfo, getHandler) {
168
+ var _imageInfo = (0, _slicedToArray2["default"])(imageInfo, 2),
169
+ addedImage = _imageInfo[0],
170
+ pos = _imageInfo[1];
154
171
  var onFinish = function onFinish(result) {
155
172
  var _cb;
156
173
  var cb;
@@ -158,17 +175,7 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
158
175
  // finish editing only on success
159
176
  cb = props.onChange;
160
177
  }
161
- var newPendingImages = pendingImages.filter(function (img) {
162
- return img.key !== addedImage.key;
163
- });
164
- var newState = {
165
- pendingImages: newPendingImages
166
- };
167
- if (newPendingImages.length === 0) {
168
- newState.scheduled = false;
169
- }
170
- setPendingImages(newState.pendingImages);
171
- setScheduled(newState.scheduled);
178
+ removePendingImage(pos);
172
179
  (_cb = cb) === null || _cb === void 0 || _cb(editor.getHTML());
173
180
  };
174
181
  var callback = function callback() {
@@ -177,9 +184,28 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
177
184
  * communicates file upload events like: fileChosen, cancel, progress
178
185
  */
179
186
  var handler = getHandler(onFinish);
187
+
188
+ // If the user closes the file picker without choosing a file, the window regains
189
+ // focus while _insertingImage is still true — drop the stale pending entry.
190
+ var focusHandler = (0, _debounce["default"])(function () {
191
+ var detach = function detach() {
192
+ return window.removeEventListener('focus', focusHandler);
193
+ };
194
+ if (!editor._insertingImage) {
195
+ detach();
196
+ return;
197
+ }
198
+ removePendingImage(pos);
199
+ editor._insertingImage = false;
200
+ detach();
201
+ }, 500);
202
+ window.addEventListener('focus', focusHandler);
180
203
  props.imageSupport.add(handler);
181
204
  };
182
- setPendingImages([].concat((0, _toConsumableArray2["default"])(pendingImages), [addedImage]));
205
+ editor._insertingImage = true;
206
+ setPendingImages(function (prev) {
207
+ return [].concat((0, _toConsumableArray2["default"])(prev), [addedImage]);
208
+ });
183
209
  callback();
184
210
  },
185
211
  maxImageWidth: props.maxImageWidth,
@@ -205,7 +231,7 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
205
231
  }
206
232
  },
207
233
  editable: !props.disabled,
208
- content: props.markup,
234
+ content: (0, _helper.normalizeInitialMarkup)(props.markup),
209
235
  onUpdate: function onUpdate(_ref4) {
210
236
  var editor = _ref4.editor,
211
237
  transaction = _ref4.transaction;
@@ -216,7 +242,7 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
216
242
  },
217
243
  onBlur: (0, _debounce["default"])(function (_ref5) {
218
244
  var editor = _ref5.editor;
219
- var otherToolbarOpened = editor._toolbarOpened || editor.isActive('inline_dropdown') || editor.isActive('explicit_constructed_response');
245
+ var otherToolbarOpened = editor._insertingImage || editor._toolbarOpened || editor.isActive('inline_dropdown') || editor.isActive('explicit_constructed_response');
220
246
  if (otherToolbarOpened) {
221
247
  return;
222
248
  }
@@ -230,6 +256,11 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
230
256
  }
231
257
  }, 200)
232
258
  }, [props.charactersLimit]);
259
+ (0, _react.useEffect)(function () {
260
+ if (props.editorRef) {
261
+ props.editorRef(editor);
262
+ }
263
+ }, [props.editorRef, editor]);
233
264
  (0, _react.useEffect)(function () {
234
265
  editor === null || editor === void 0 || editor.setEditable(!props.disabled);
235
266
  }, [props.disabled, editor]);
@@ -237,8 +268,9 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
237
268
  if (!editor) {
238
269
  return;
239
270
  }
240
- if (props.markup !== editor.getHTML()) {
241
- editor.commands.setContent(props.markup, false); // false = don’t emit update
271
+ var nextMarkup = (0, _helper.normalizeInitialMarkup)(props.markup);
272
+ if (nextMarkup !== editor.getHTML()) {
273
+ editor.commands.setContent(nextMarkup, false);
242
274
  }
243
275
  }, [props.markup, editor]);
244
276
  (0, _react.useEffect)(function () {
@@ -299,24 +331,33 @@ var StyledEditorContent = (0, _styles.styled)(_react2.EditorContent, {
299
331
  var showParagraph = _ref8.showParagraph,
300
332
  separateParagraph = _ref8.separateParagraph;
301
333
  return {
334
+ display: 'flex',
302
335
  outline: 'none !important',
303
336
  '& .ProseMirror': _objectSpread(_objectSpread({
337
+ flex: 1,
304
338
  padding: '5px',
305
339
  maxHeight: '500px',
306
340
  outline: 'none !important',
307
341
  position: 'initial',
308
- '& > p': {
342
+ // reset default margins for all block paragraphs/divs in the editor
343
+ '& > p, & > div': {
309
344
  margin: '0'
310
345
  },
311
- '& p.is-editor-empty:first-child::before': {
346
+ // Out of flow so the caret stays at the start of the block; in-flow ::before pushes the caret after the hint text.
347
+ '& p.is-editor-empty, & div.is-editor-empty': {
348
+ position: 'relative'
349
+ },
350
+ '& p.is-editor-empty::before, & div.is-editor-empty::before': {
312
351
  content: 'attr(data-placeholder)',
313
- display: 'block',
352
+ position: 'absolute',
353
+ left: 0,
354
+ top: 0,
314
355
  color: '#9CA3AF',
315
356
  pointerEvents: 'none',
316
357
  whiteSpace: 'pre-wrap'
317
358
  }
318
359
  }, showParagraph && {
319
- '& > p:has(+ p)::after': {
360
+ '& > p:has(+ p)::after, & > div:has(+ div)::after': {
320
361
  display: 'block',
321
362
  content: '"¶"',
322
363
  fontSize: '1em',