@contentstack/live-preview-utils 3.2.0-alpha.1 → 3.2.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 (508) hide show
  1. package/README.md +2 -2
  2. package/dist/legacy/configManager/config.default.cjs +10 -1
  3. package/dist/legacy/configManager/config.default.cjs.map +1 -1
  4. package/dist/legacy/configManager/config.default.js +10 -1
  5. package/dist/legacy/configManager/config.default.js.map +1 -1
  6. package/dist/legacy/configManager/handleUserConfig.cjs +7 -3
  7. package/dist/legacy/configManager/handleUserConfig.cjs.map +1 -1
  8. package/dist/legacy/configManager/handleUserConfig.js +7 -3
  9. package/dist/legacy/configManager/handleUserConfig.js.map +1 -1
  10. package/dist/legacy/index.cjs +45 -1
  11. package/dist/legacy/index.cjs.map +1 -1
  12. package/dist/legacy/index.d.cts +16 -2
  13. package/dist/legacy/index.d.ts +16 -2
  14. package/dist/legacy/index.js +45 -1
  15. package/dist/legacy/index.js.map +1 -1
  16. package/dist/legacy/livePreview/editButton/editButton.cjs +86 -1
  17. package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
  18. package/dist/legacy/livePreview/editButton/editButton.d.cts +14 -1
  19. package/dist/legacy/livePreview/editButton/editButton.d.ts +14 -1
  20. package/dist/legacy/livePreview/editButton/editButton.js +85 -1
  21. package/dist/legacy/livePreview/editButton/editButton.js.map +1 -1
  22. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
  23. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
  24. package/dist/legacy/logger/logger.cjs +1 -1
  25. package/dist/legacy/logger/logger.cjs.map +1 -1
  26. package/dist/legacy/logger/logger.js +1 -1
  27. package/dist/legacy/logger/logger.js.map +1 -1
  28. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +6 -2
  29. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  30. package/dist/legacy/preview/contentstack-live-preview-HOC.js +6 -2
  31. package/dist/legacy/preview/contentstack-live-preview-HOC.js.map +1 -1
  32. package/dist/legacy/types/types.cjs.map +1 -1
  33. package/dist/legacy/types/types.d.cts +10 -15
  34. package/dist/legacy/types/types.d.ts +10 -15
  35. package/dist/legacy/types/types.js.map +1 -1
  36. package/dist/legacy/visualBuilder/collab.style.cjs +131 -1
  37. package/dist/legacy/visualBuilder/collab.style.cjs.map +1 -1
  38. package/dist/legacy/visualBuilder/collab.style.d.cts +17 -0
  39. package/dist/legacy/visualBuilder/collab.style.d.ts +17 -0
  40. package/dist/legacy/visualBuilder/collab.style.js +131 -1
  41. package/dist/legacy/visualBuilder/collab.style.js.map +1 -1
  42. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.cjs +70 -0
  43. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.cjs.map +1 -0
  44. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.d.cts +12 -0
  45. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.d.ts +12 -0
  46. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.js +41 -0
  47. package/dist/legacy/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.js.map +1 -0
  48. package/dist/legacy/visualBuilder/components/Collab/Button/Button.cjs +32 -10
  49. package/dist/legacy/visualBuilder/components/Collab/Button/Button.cjs.map +1 -1
  50. package/dist/legacy/visualBuilder/components/Collab/Button/Button.d.cts +2 -0
  51. package/dist/legacy/visualBuilder/components/Collab/Button/Button.d.ts +2 -0
  52. package/dist/legacy/visualBuilder/components/Collab/Button/Button.js +33 -11
  53. package/dist/legacy/visualBuilder/components/Collab/Button/Button.js.map +1 -1
  54. package/dist/legacy/visualBuilder/components/Collab/CollabIndicator.cjs +11 -4
  55. package/dist/legacy/visualBuilder/components/Collab/CollabIndicator.cjs.map +1 -1
  56. package/dist/legacy/visualBuilder/components/Collab/CollabIndicator.js +11 -4
  57. package/dist/legacy/visualBuilder/components/Collab/CollabIndicator.js.map +1 -1
  58. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.cjs +6 -1
  59. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.cjs.map +1 -1
  60. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.d.cts +1 -0
  61. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.d.ts +1 -0
  62. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.js +6 -1
  63. package/dist/legacy/visualBuilder/components/Collab/Icon/Icon.js.map +1 -1
  64. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.cjs +8 -3
  65. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.js +9 -4
  67. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.js.map +1 -1
  68. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentCard.cjs +1 -2
  69. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentCard.cjs.map +1 -1
  70. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentCard.js +2 -3
  71. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentCard.js.map +1 -1
  72. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.cjs +2 -5
  73. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.cjs.map +1 -1
  74. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.js +3 -9
  75. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.js.map +1 -1
  76. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs +98 -57
  77. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs.map +1 -1
  78. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js +98 -57
  79. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js.map +1 -1
  80. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.cjs +92 -0
  81. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.cjs.map +1 -0
  82. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.d.cts +13 -0
  83. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.d.ts +13 -0
  84. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.js +63 -0
  85. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.js.map +1 -0
  86. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.cjs +1 -0
  87. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.js +1 -0
  89. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.js.map +1 -1
  90. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.cjs +19 -50
  91. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.cjs.map +1 -1
  92. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.js +21 -52
  93. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.js.map +1 -1
  94. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/index.cjs +29 -18
  95. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/index.cjs.map +1 -1
  96. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/index.js +29 -18
  97. package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/index.js.map +1 -1
  98. package/dist/legacy/visualBuilder/components/Collab/Tooltip/Tooltip.cjs +19 -35
  99. package/dist/legacy/visualBuilder/components/Collab/Tooltip/Tooltip.cjs.map +1 -1
  100. package/dist/legacy/visualBuilder/components/Collab/Tooltip/Tooltip.js +19 -35
  101. package/dist/legacy/visualBuilder/components/Collab/Tooltip/Tooltip.js.map +1 -1
  102. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +28 -22
  103. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  104. package/dist/legacy/visualBuilder/components/FieldToolbar.d.cts +1 -0
  105. package/dist/legacy/visualBuilder/components/FieldToolbar.d.ts +1 -0
  106. package/dist/legacy/visualBuilder/components/FieldToolbar.js +29 -24
  107. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  108. package/dist/legacy/visualBuilder/components/addInstanceButton.cjs +39 -11
  109. package/dist/legacy/visualBuilder/components/addInstanceButton.cjs.map +1 -1
  110. package/dist/legacy/visualBuilder/components/addInstanceButton.d.cts +5 -0
  111. package/dist/legacy/visualBuilder/components/addInstanceButton.d.ts +5 -0
  112. package/dist/legacy/visualBuilder/components/addInstanceButton.js +39 -11
  113. package/dist/legacy/visualBuilder/components/addInstanceButton.js.map +1 -1
  114. package/dist/legacy/visualBuilder/components/startEditingButton.cjs +38 -11
  115. package/dist/legacy/visualBuilder/components/startEditingButton.cjs.map +1 -1
  116. package/dist/legacy/visualBuilder/components/startEditingButton.d.cts +7 -2
  117. package/dist/legacy/visualBuilder/components/startEditingButton.d.ts +7 -2
  118. package/dist/legacy/visualBuilder/components/startEditingButton.js +34 -11
  119. package/dist/legacy/visualBuilder/components/startEditingButton.js.map +1 -1
  120. package/dist/legacy/visualBuilder/eventManager/useCollab.cjs +57 -19
  121. package/dist/legacy/visualBuilder/eventManager/useCollab.cjs.map +1 -1
  122. package/dist/legacy/visualBuilder/eventManager/useCollab.js +57 -19
  123. package/dist/legacy/visualBuilder/eventManager/useCollab.js.map +1 -1
  124. package/dist/legacy/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.cjs +7 -2
  125. package/dist/legacy/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.cjs.map +1 -1
  126. package/dist/legacy/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.js +7 -2
  127. package/dist/legacy/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.js.map +1 -1
  128. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +59 -4
  129. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  130. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +59 -4
  131. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  132. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
  133. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
  134. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
  135. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
  136. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
  137. package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
  138. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +5 -0
  139. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  140. package/dist/legacy/visualBuilder/generators/generateOverlay.js +5 -0
  141. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  142. package/dist/legacy/visualBuilder/generators/generateThread.cjs +103 -18
  143. package/dist/legacy/visualBuilder/generators/generateThread.cjs.map +1 -1
  144. package/dist/legacy/visualBuilder/generators/generateThread.d.cts +3 -1
  145. package/dist/legacy/visualBuilder/generators/generateThread.d.ts +3 -1
  146. package/dist/legacy/visualBuilder/generators/generateThread.js +101 -17
  147. package/dist/legacy/visualBuilder/generators/generateThread.js.map +1 -1
  148. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +13 -5
  149. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  150. package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +2 -2
  151. package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +2 -2
  152. package/dist/legacy/visualBuilder/generators/generateToolbar.js +13 -5
  153. package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
  154. package/dist/legacy/visualBuilder/hooks/useCollabOperations.cjs +9 -8
  155. package/dist/legacy/visualBuilder/hooks/useCollabOperations.cjs.map +1 -1
  156. package/dist/legacy/visualBuilder/hooks/useCollabOperations.js +9 -8
  157. package/dist/legacy/visualBuilder/hooks/useCollabOperations.js.map +1 -1
  158. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.cjs +23 -5
  159. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.cjs.map +1 -1
  160. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.d.cts +1 -0
  161. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.d.ts +1 -0
  162. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.js +23 -5
  163. package/dist/legacy/visualBuilder/hooks/useCommentTextArea.js.map +1 -1
  164. package/dist/legacy/visualBuilder/index.cjs +16 -11
  165. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  166. package/dist/legacy/visualBuilder/index.d.cts +1 -0
  167. package/dist/legacy/visualBuilder/index.d.ts +1 -0
  168. package/dist/legacy/visualBuilder/index.js +14 -5
  169. package/dist/legacy/visualBuilder/index.js.map +1 -1
  170. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +93 -20
  171. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  172. package/dist/legacy/visualBuilder/listeners/mouseClick.d.cts +4 -1
  173. package/dist/legacy/visualBuilder/listeners/mouseClick.d.ts +4 -1
  174. package/dist/legacy/visualBuilder/listeners/mouseClick.js +93 -20
  175. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  176. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +3 -1
  177. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  178. package/dist/legacy/visualBuilder/listeners/mouseHover.js +3 -1
  179. package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
  180. package/dist/legacy/visualBuilder/types/collab.types.cjs.map +1 -1
  181. package/dist/legacy/visualBuilder/types/collab.types.d.cts +22 -1
  182. package/dist/legacy/visualBuilder/types/collab.types.d.ts +22 -1
  183. package/dist/legacy/visualBuilder/utils/collabUtils.cjs +108 -4
  184. package/dist/legacy/visualBuilder/utils/collabUtils.cjs.map +1 -1
  185. package/dist/legacy/visualBuilder/utils/collabUtils.d.cts +25 -1
  186. package/dist/legacy/visualBuilder/utils/collabUtils.d.ts +25 -1
  187. package/dist/legacy/visualBuilder/utils/collabUtils.js +103 -4
  188. package/dist/legacy/visualBuilder/utils/collabUtils.js.map +1 -1
  189. package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs +94 -0
  190. package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
  191. package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
  192. package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
  193. package/dist/legacy/visualBuilder/utils/enableInlineEditing.js +74 -0
  194. package/dist/legacy/visualBuilder/utils/enableInlineEditing.js.map +1 -0
  195. package/dist/legacy/visualBuilder/utils/getChildrenDirection.cjs +8 -0
  196. package/dist/legacy/visualBuilder/utils/getChildrenDirection.cjs.map +1 -1
  197. package/dist/legacy/visualBuilder/utils/getChildrenDirection.d.cts +3 -1
  198. package/dist/legacy/visualBuilder/utils/getChildrenDirection.d.ts +3 -1
  199. package/dist/legacy/visualBuilder/utils/getChildrenDirection.js +8 -0
  200. package/dist/legacy/visualBuilder/utils/getChildrenDirection.js.map +1 -1
  201. package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.cjs +4 -1
  202. package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.cjs.map +1 -1
  203. package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.js +4 -1
  204. package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.js.map +1 -1
  205. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +24 -112
  206. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  207. package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
  208. package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
  209. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +22 -116
  210. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  211. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
  212. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
  213. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
  214. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
  215. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js +58 -0
  216. package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
  217. package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs +35 -0
  218. package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
  219. package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
  220. package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
  221. package/dist/legacy/visualBuilder/utils/isFieldMultiple.js +12 -0
  222. package/dist/legacy/visualBuilder/utils/isFieldMultiple.js.map +1 -0
  223. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs +14 -20
  224. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
  225. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
  226. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
  227. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js +14 -20
  228. package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
  229. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
  230. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
  231. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
  232. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
  233. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js +21 -0
  234. package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
  235. package/dist/legacy/visualBuilder/utils/types/index.types.cjs.map +1 -1
  236. package/dist/legacy/visualBuilder/utils/types/index.types.d.cts +6 -1
  237. package/dist/legacy/visualBuilder/utils/types/index.types.d.ts +6 -1
  238. package/dist/legacy/visualBuilder/utils/types/index.types.js.map +1 -1
  239. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +2 -1
  240. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  241. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +2 -1
  242. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +2 -1
  243. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +2 -1
  244. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  245. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs +10 -7
  246. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  247. package/dist/legacy/visualBuilder/utils/updateFocussedState.js +10 -7
  248. package/dist/legacy/visualBuilder/utils/updateFocussedState.js.map +1 -1
  249. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +27 -5
  250. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  251. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +6 -1
  252. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +6 -1
  253. package/dist/legacy/visualBuilder/visualBuilder.style.js +27 -5
  254. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  255. package/dist/modern/configManager/config.default.cjs +10 -1
  256. package/dist/modern/configManager/config.default.cjs.map +1 -1
  257. package/dist/modern/configManager/config.default.js +10 -1
  258. package/dist/modern/configManager/config.default.js.map +1 -1
  259. package/dist/modern/configManager/handleUserConfig.cjs +4 -0
  260. package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
  261. package/dist/modern/configManager/handleUserConfig.js +4 -0
  262. package/dist/modern/configManager/handleUserConfig.js.map +1 -1
  263. package/dist/modern/index.cjs +45 -1
  264. package/dist/modern/index.cjs.map +1 -1
  265. package/dist/modern/index.d.cts +16 -2
  266. package/dist/modern/index.d.ts +16 -2
  267. package/dist/modern/index.js +45 -1
  268. package/dist/modern/index.js.map +1 -1
  269. package/dist/modern/livePreview/editButton/editButton.cjs +85 -1
  270. package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
  271. package/dist/modern/livePreview/editButton/editButton.d.cts +14 -1
  272. package/dist/modern/livePreview/editButton/editButton.d.ts +14 -1
  273. package/dist/modern/livePreview/editButton/editButton.js +84 -1
  274. package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
  275. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
  276. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
  277. package/dist/modern/logger/logger.cjs +1 -1
  278. package/dist/modern/logger/logger.cjs.map +1 -1
  279. package/dist/modern/logger/logger.js +1 -1
  280. package/dist/modern/logger/logger.js.map +1 -1
  281. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +6 -2
  282. package/dist/modern/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  283. package/dist/modern/preview/contentstack-live-preview-HOC.js +6 -2
  284. package/dist/modern/preview/contentstack-live-preview-HOC.js.map +1 -1
  285. package/dist/modern/types/types.cjs.map +1 -1
  286. package/dist/modern/types/types.d.cts +10 -15
  287. package/dist/modern/types/types.d.ts +10 -15
  288. package/dist/modern/types/types.js.map +1 -1
  289. package/dist/modern/visualBuilder/collab.style.cjs +131 -1
  290. package/dist/modern/visualBuilder/collab.style.cjs.map +1 -1
  291. package/dist/modern/visualBuilder/collab.style.d.cts +17 -0
  292. package/dist/modern/visualBuilder/collab.style.d.ts +17 -0
  293. package/dist/modern/visualBuilder/collab.style.js +131 -1
  294. package/dist/modern/visualBuilder/collab.style.js.map +1 -1
  295. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.cjs +70 -0
  296. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.cjs.map +1 -0
  297. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.d.cts +12 -0
  298. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.d.ts +12 -0
  299. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.js +41 -0
  300. package/dist/modern/visualBuilder/components/Collab/AsyncLoader/AsyncLoader.js.map +1 -0
  301. package/dist/modern/visualBuilder/components/Collab/Button/Button.cjs +32 -10
  302. package/dist/modern/visualBuilder/components/Collab/Button/Button.cjs.map +1 -1
  303. package/dist/modern/visualBuilder/components/Collab/Button/Button.d.cts +2 -0
  304. package/dist/modern/visualBuilder/components/Collab/Button/Button.d.ts +2 -0
  305. package/dist/modern/visualBuilder/components/Collab/Button/Button.js +33 -11
  306. package/dist/modern/visualBuilder/components/Collab/Button/Button.js.map +1 -1
  307. package/dist/modern/visualBuilder/components/Collab/CollabIndicator.cjs +7 -1
  308. package/dist/modern/visualBuilder/components/Collab/CollabIndicator.cjs.map +1 -1
  309. package/dist/modern/visualBuilder/components/Collab/CollabIndicator.js +7 -1
  310. package/dist/modern/visualBuilder/components/Collab/CollabIndicator.js.map +1 -1
  311. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.cjs +6 -1
  312. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.cjs.map +1 -1
  313. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.d.cts +1 -0
  314. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.d.ts +1 -0
  315. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.js +6 -1
  316. package/dist/modern/visualBuilder/components/Collab/Icon/Icon.js.map +1 -1
  317. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.cjs +8 -3
  318. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.cjs.map +1 -1
  319. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.js +9 -4
  320. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentActionBar.js.map +1 -1
  321. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentCard.cjs +1 -2
  322. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentCard.cjs.map +1 -1
  323. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentCard.js +2 -3
  324. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentCard.js.map +1 -1
  325. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.cjs +2 -5
  326. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.cjs.map +1 -1
  327. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.js +3 -9
  328. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentResolvedText.js.map +1 -1
  329. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs +94 -57
  330. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs.map +1 -1
  331. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js +94 -57
  332. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js.map +1 -1
  333. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.cjs +92 -0
  334. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.cjs.map +1 -0
  335. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.d.cts +13 -0
  336. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.d.ts +13 -0
  337. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.js +63 -0
  338. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadActionBar.js.map +1 -0
  339. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.cjs +1 -0
  340. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.cjs.map +1 -1
  341. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.js +1 -0
  342. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadFooter.js.map +1 -1
  343. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.cjs +19 -50
  344. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.cjs.map +1 -1
  345. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.js +21 -52
  346. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/ThreadHeader.js.map +1 -1
  347. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/index.cjs +29 -18
  348. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/index.cjs.map +1 -1
  349. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/index.js +29 -18
  350. package/dist/modern/visualBuilder/components/Collab/ThreadPopup/index.js.map +1 -1
  351. package/dist/modern/visualBuilder/components/Collab/Tooltip/Tooltip.cjs +19 -35
  352. package/dist/modern/visualBuilder/components/Collab/Tooltip/Tooltip.cjs.map +1 -1
  353. package/dist/modern/visualBuilder/components/Collab/Tooltip/Tooltip.js +19 -35
  354. package/dist/modern/visualBuilder/components/Collab/Tooltip/Tooltip.js.map +1 -1
  355. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +28 -21
  356. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  357. package/dist/modern/visualBuilder/components/FieldToolbar.d.cts +1 -0
  358. package/dist/modern/visualBuilder/components/FieldToolbar.d.ts +1 -0
  359. package/dist/modern/visualBuilder/components/FieldToolbar.js +29 -23
  360. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  361. package/dist/modern/visualBuilder/components/addInstanceButton.cjs +38 -11
  362. package/dist/modern/visualBuilder/components/addInstanceButton.cjs.map +1 -1
  363. package/dist/modern/visualBuilder/components/addInstanceButton.d.cts +5 -0
  364. package/dist/modern/visualBuilder/components/addInstanceButton.d.ts +5 -0
  365. package/dist/modern/visualBuilder/components/addInstanceButton.js +38 -11
  366. package/dist/modern/visualBuilder/components/addInstanceButton.js.map +1 -1
  367. package/dist/modern/visualBuilder/components/startEditingButton.cjs +38 -11
  368. package/dist/modern/visualBuilder/components/startEditingButton.cjs.map +1 -1
  369. package/dist/modern/visualBuilder/components/startEditingButton.d.cts +7 -2
  370. package/dist/modern/visualBuilder/components/startEditingButton.d.ts +7 -2
  371. package/dist/modern/visualBuilder/components/startEditingButton.js +34 -11
  372. package/dist/modern/visualBuilder/components/startEditingButton.js.map +1 -1
  373. package/dist/modern/visualBuilder/eventManager/useCollab.cjs +45 -11
  374. package/dist/modern/visualBuilder/eventManager/useCollab.cjs.map +1 -1
  375. package/dist/modern/visualBuilder/eventManager/useCollab.js +45 -11
  376. package/dist/modern/visualBuilder/eventManager/useCollab.js.map +1 -1
  377. package/dist/modern/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.cjs +5 -0
  378. package/dist/modern/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.cjs.map +1 -1
  379. package/dist/modern/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.js +5 -0
  380. package/dist/modern/visualBuilder/eventManager/useHideFocusOverlayPostMessageEvent.js.map +1 -1
  381. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +59 -4
  382. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  383. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +59 -4
  384. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  385. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
  386. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
  387. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
  388. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
  389. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
  390. package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
  391. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +5 -0
  392. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  393. package/dist/modern/visualBuilder/generators/generateOverlay.js +5 -0
  394. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  395. package/dist/modern/visualBuilder/generators/generateThread.cjs +102 -16
  396. package/dist/modern/visualBuilder/generators/generateThread.cjs.map +1 -1
  397. package/dist/modern/visualBuilder/generators/generateThread.d.cts +3 -1
  398. package/dist/modern/visualBuilder/generators/generateThread.d.ts +3 -1
  399. package/dist/modern/visualBuilder/generators/generateThread.js +100 -15
  400. package/dist/modern/visualBuilder/generators/generateThread.js.map +1 -1
  401. package/dist/modern/visualBuilder/generators/generateToolbar.cjs +13 -5
  402. package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  403. package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +2 -2
  404. package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +2 -2
  405. package/dist/modern/visualBuilder/generators/generateToolbar.js +13 -5
  406. package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
  407. package/dist/modern/visualBuilder/hooks/useCollabOperations.cjs +9 -8
  408. package/dist/modern/visualBuilder/hooks/useCollabOperations.cjs.map +1 -1
  409. package/dist/modern/visualBuilder/hooks/useCollabOperations.js +9 -8
  410. package/dist/modern/visualBuilder/hooks/useCollabOperations.js.map +1 -1
  411. package/dist/modern/visualBuilder/hooks/useCommentTextArea.cjs +22 -5
  412. package/dist/modern/visualBuilder/hooks/useCommentTextArea.cjs.map +1 -1
  413. package/dist/modern/visualBuilder/hooks/useCommentTextArea.d.cts +1 -0
  414. package/dist/modern/visualBuilder/hooks/useCommentTextArea.d.ts +1 -0
  415. package/dist/modern/visualBuilder/hooks/useCommentTextArea.js +22 -5
  416. package/dist/modern/visualBuilder/hooks/useCommentTextArea.js.map +1 -1
  417. package/dist/modern/visualBuilder/index.cjs +16 -11
  418. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  419. package/dist/modern/visualBuilder/index.d.cts +1 -0
  420. package/dist/modern/visualBuilder/index.d.ts +1 -0
  421. package/dist/modern/visualBuilder/index.js +14 -5
  422. package/dist/modern/visualBuilder/index.js.map +1 -1
  423. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +90 -18
  424. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  425. package/dist/modern/visualBuilder/listeners/mouseClick.d.cts +4 -1
  426. package/dist/modern/visualBuilder/listeners/mouseClick.d.ts +4 -1
  427. package/dist/modern/visualBuilder/listeners/mouseClick.js +90 -18
  428. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  429. package/dist/modern/visualBuilder/listeners/mouseHover.cjs +3 -1
  430. package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  431. package/dist/modern/visualBuilder/listeners/mouseHover.js +3 -1
  432. package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
  433. package/dist/modern/visualBuilder/types/collab.types.cjs.map +1 -1
  434. package/dist/modern/visualBuilder/types/collab.types.d.cts +22 -1
  435. package/dist/modern/visualBuilder/types/collab.types.d.ts +22 -1
  436. package/dist/modern/visualBuilder/utils/collabUtils.cjs +108 -4
  437. package/dist/modern/visualBuilder/utils/collabUtils.cjs.map +1 -1
  438. package/dist/modern/visualBuilder/utils/collabUtils.d.cts +25 -1
  439. package/dist/modern/visualBuilder/utils/collabUtils.d.ts +25 -1
  440. package/dist/modern/visualBuilder/utils/collabUtils.js +103 -4
  441. package/dist/modern/visualBuilder/utils/collabUtils.js.map +1 -1
  442. package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs +94 -0
  443. package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
  444. package/dist/modern/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
  445. package/dist/modern/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
  446. package/dist/modern/visualBuilder/utils/enableInlineEditing.js +74 -0
  447. package/dist/modern/visualBuilder/utils/enableInlineEditing.js.map +1 -0
  448. package/dist/modern/visualBuilder/utils/getChildrenDirection.cjs +8 -0
  449. package/dist/modern/visualBuilder/utils/getChildrenDirection.cjs.map +1 -1
  450. package/dist/modern/visualBuilder/utils/getChildrenDirection.d.cts +3 -1
  451. package/dist/modern/visualBuilder/utils/getChildrenDirection.d.ts +3 -1
  452. package/dist/modern/visualBuilder/utils/getChildrenDirection.js +8 -0
  453. package/dist/modern/visualBuilder/utils/getChildrenDirection.js.map +1 -1
  454. package/dist/modern/visualBuilder/utils/handleFieldMouseDown.cjs +4 -1
  455. package/dist/modern/visualBuilder/utils/handleFieldMouseDown.cjs.map +1 -1
  456. package/dist/modern/visualBuilder/utils/handleFieldMouseDown.js +4 -1
  457. package/dist/modern/visualBuilder/utils/handleFieldMouseDown.js.map +1 -1
  458. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +23 -111
  459. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  460. package/dist/modern/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
  461. package/dist/modern/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
  462. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +21 -115
  463. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  464. package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
  465. package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
  466. package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
  467. package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
  468. package/dist/modern/visualBuilder/utils/handleInlineEditableField.js +58 -0
  469. package/dist/modern/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
  470. package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs +35 -0
  471. package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
  472. package/dist/modern/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
  473. package/dist/modern/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
  474. package/dist/modern/visualBuilder/utils/isFieldMultiple.js +12 -0
  475. package/dist/modern/visualBuilder/utils/isFieldMultiple.js.map +1 -0
  476. package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs +14 -18
  477. package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
  478. package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
  479. package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
  480. package/dist/modern/visualBuilder/utils/multipleElementAddButton.js +14 -18
  481. package/dist/modern/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
  482. package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
  483. package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
  484. package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
  485. package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
  486. package/dist/modern/visualBuilder/utils/pasteAsPlainText.js +21 -0
  487. package/dist/modern/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
  488. package/dist/modern/visualBuilder/utils/types/index.types.cjs.map +1 -1
  489. package/dist/modern/visualBuilder/utils/types/index.types.d.cts +6 -1
  490. package/dist/modern/visualBuilder/utils/types/index.types.d.ts +6 -1
  491. package/dist/modern/visualBuilder/utils/types/index.types.js.map +1 -1
  492. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +2 -1
  493. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  494. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +2 -1
  495. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +2 -1
  496. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +2 -1
  497. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  498. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs +10 -7
  499. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  500. package/dist/modern/visualBuilder/utils/updateFocussedState.js +10 -7
  501. package/dist/modern/visualBuilder/utils/updateFocussedState.js.map +1 -1
  502. package/dist/modern/visualBuilder/visualBuilder.style.cjs +27 -5
  503. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  504. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +6 -1
  505. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +6 -1
  506. package/dist/modern/visualBuilder/visualBuilder.style.js +27 -5
  507. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  508. package/package.json +4 -3
@@ -48,5 +48,29 @@ declare const sanitizeData: (dirty: any) => string;
48
48
  * @returns {Object} The comment body containing the sanitized message and mentioned users.
49
49
  */
50
50
  declare const getCommentBody: (state: ICommentState) => ICommentState;
51
+ declare function normalizePath(path: string): string;
52
+ declare function fixSvgXPath(xpath: string | null): string;
53
+ /**
54
+ * populate the position of the thread based on edges of the screen.
55
+ * @param position
56
+ * @param options
57
+ * @returns
58
+ */
59
+ declare function adjustPositionToViewport(position: {
60
+ top: number;
61
+ left: number;
62
+ }, options?: {
63
+ threadWidth?: number;
64
+ safeMargin?: number;
65
+ topSafeMargin?: number;
66
+ }): {
67
+ top: number;
68
+ left: number;
69
+ };
70
+ declare function formatDate(dateString: string): string;
71
+ /**
72
+ * Calculates and updates tooltip position based on available viewport space.
73
+ */
74
+ declare const positionTooltip: (tooltipRef: React.RefObject<HTMLDivElement>, targetRef: React.RefObject<HTMLDivElement>, position: "top" | "bottom" | "left" | "right", setActualPosition: (position: "top" | "bottom" | "left" | "right") => void) => void;
51
75
 
52
- export { filterOutInvalidMentions, getCommentBody, getMessageWithDisplayName, getThreadTitle, getUserName, sanitizeData, validateCommentAndMentions };
76
+ export { adjustPositionToViewport, filterOutInvalidMentions, fixSvgXPath, formatDate, getCommentBody, getMessageWithDisplayName, getThreadTitle, getUserName, normalizePath, positionTooltip, sanitizeData, validateCommentAndMentions };
@@ -4,6 +4,7 @@ import "../../chunk-5WRI5ZAA.js";
4
4
  import { maxMessageLength, mentionLimit } from "./constants.js";
5
5
  import { uniqBy } from "lodash-es";
6
6
  import DOMPurify from "dompurify";
7
+ import dayjs from "dayjs";
7
8
  var escapeRegExp = (string) => {
8
9
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
9
10
  };
@@ -33,11 +34,12 @@ var filterOutInvalidMentions = (message, toUsers) => {
33
34
  };
34
35
  var getMessageWithDisplayName = (comment, userState, profile) => {
35
36
  if (!comment) return void 0;
36
- let tempText = comment.message;
37
- comment?.toUsers?.forEach((user) => {
37
+ let tempText = sanitizeData(comment.message).replace(/<[^>]*>/g, "");
38
+ comment.toUsers?.forEach((user) => {
38
39
  const userPattern = new RegExp(`{{${user}}}`, "g");
39
40
  const userData = userState.userMap[user];
40
- const replacement = profile === "html" ? `<b class="collab-thread-comment--message">@${userData.display || getUserName(userData)}</b>` : `@${userData.display || getUserName(userData)}`;
41
+ const displayName = userData ? userData.display || getUserName(userData) : `unknown user`;
42
+ const replacement = profile === "html" ? `<b class="collab-thread-comment--message">@${displayName}</b>` : `@${displayName}`;
41
43
  tempText = tempText.replace(userPattern, replacement);
42
44
  });
43
45
  return tempText;
@@ -46,7 +48,7 @@ var sanitizeData = (dirty) => {
46
48
  return DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
47
49
  };
48
50
  var getCommentBody = (state) => {
49
- let finalMessage = state.message.replace(/[^\S\r\n]+/g, " ").replace(/ *\n */g, "\n").trim();
51
+ let finalMessage = sanitizeData(state.message).replace(/[^\S\r\n]+/g, " ").replace(/ *\n */g, "\n").replace(/<[^>]*>/g, "").trim();
50
52
  const comment = {
51
53
  message: finalMessage,
52
54
  toUsers: [],
@@ -65,12 +67,109 @@ var getCommentBody = (state) => {
65
67
  comment.message = finalMessage;
66
68
  return comment;
67
69
  };
70
+ function normalizePath(path) {
71
+ if (path === "/") return path;
72
+ return path.endsWith("/") ? path.slice(0, -1) : path;
73
+ }
74
+ function fixSvgXPath(xpath) {
75
+ if (!xpath) return "";
76
+ return xpath.replace(/\/svg/g, "/*[name()='svg']");
77
+ }
78
+ function adjustPositionToViewport(position, options = {}) {
79
+ const { top, left } = position;
80
+ const viewportWidth = window.innerWidth;
81
+ const safeMargin = options.safeMargin ?? 16;
82
+ const topSafeMargin = options.topSafeMargin ?? 42;
83
+ const threadWidth = options.threadWidth ?? 16;
84
+ let adjustedLeft = left;
85
+ let adjustedTop = top;
86
+ if (adjustedLeft + threadWidth > viewportWidth - safeMargin) {
87
+ adjustedLeft = viewportWidth - safeMargin - threadWidth;
88
+ }
89
+ if (adjustedTop - window.scrollY < topSafeMargin) {
90
+ adjustedTop = window.scrollY + topSafeMargin;
91
+ }
92
+ return { top: adjustedTop, left: adjustedLeft };
93
+ }
94
+ function formatDate(dateString) {
95
+ if (!dateString) return "";
96
+ return dayjs(dateString).format("MMM DD, YYYY, hh:mm A");
97
+ }
98
+ var positionTooltip = (tooltipRef, targetRef, position, setActualPosition) => {
99
+ if (!tooltipRef.current || !targetRef.current) return;
100
+ const targetRect = targetRef.current.getBoundingClientRect();
101
+ const tooltipRect = tooltipRef.current.getBoundingClientRect();
102
+ const margin = 8;
103
+ const positions = {
104
+ bottom: {
105
+ top: targetRect.bottom + margin,
106
+ left: targetRect.left + (targetRect.width - tooltipRect.width) / 2
107
+ },
108
+ top: {
109
+ top: targetRect.top - tooltipRect.height - margin,
110
+ left: targetRect.left + (targetRect.width - tooltipRect.width) / 2
111
+ },
112
+ left: {
113
+ top: targetRect.top + (targetRect.height - tooltipRect.height) / 2,
114
+ left: targetRect.left - tooltipRect.width - margin
115
+ },
116
+ right: {
117
+ top: targetRect.top + (targetRect.height - tooltipRect.height) / 2,
118
+ left: targetRect.right + margin
119
+ }
120
+ };
121
+ let bestPosition = position;
122
+ let coords = positions[position];
123
+ const viewportWidth = window.innerWidth;
124
+ const viewportHeight = window.innerHeight;
125
+ const wouldBeOutsideViewport = {
126
+ bottom: coords.top + tooltipRect.height > viewportHeight,
127
+ top: coords.top < 0,
128
+ left: coords.left < 0,
129
+ right: coords.left + tooltipRect.width > viewportWidth
130
+ };
131
+ const horizontalOutOfBounds = coords.left < 0 || coords.left + tooltipRect.width > viewportWidth;
132
+ if (wouldBeOutsideViewport[position] || horizontalOutOfBounds) {
133
+ const positionPriority = ["bottom", "top", "right", "left"];
134
+ positionPriority.splice(positionPriority.indexOf(position), 1);
135
+ positionPriority.push(position);
136
+ for (const pos of positionPriority) {
137
+ const testCoords = positions[pos];
138
+ const isVisible = testCoords.top >= 0 && testCoords.top + tooltipRect.height <= viewportHeight && testCoords.left >= 0 && testCoords.left + tooltipRect.width <= viewportWidth;
139
+ if (isVisible) {
140
+ bestPosition = pos;
141
+ coords = testCoords;
142
+ break;
143
+ }
144
+ }
145
+ }
146
+ if (coords.left < 0) {
147
+ coords.left = margin;
148
+ } else if (coords.left + tooltipRect.width > viewportWidth) {
149
+ coords.left = viewportWidth - tooltipRect.width - margin;
150
+ }
151
+ if (coords.top < 0) {
152
+ coords.top = margin;
153
+ } else if (coords.top + tooltipRect.height > viewportHeight) {
154
+ coords.top = viewportHeight - tooltipRect.height - margin;
155
+ }
156
+ setActualPosition(bestPosition);
157
+ Object.assign(tooltipRef.current.style, {
158
+ top: `${coords.top}px`,
159
+ left: `${coords.left}px`
160
+ });
161
+ };
68
162
  export {
163
+ adjustPositionToViewport,
69
164
  filterOutInvalidMentions,
165
+ fixSvgXPath,
166
+ formatDate,
70
167
  getCommentBody,
71
168
  getMessageWithDisplayName,
72
169
  getThreadTitle,
73
170
  getUserName,
171
+ normalizePath,
172
+ positionTooltip,
74
173
  sanitizeData,
75
174
  validateCommentAndMentions
76
175
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/collabUtils.ts"],"sourcesContent":["import {\n ICommentState,\n IMentionedList,\n IMentionItem,\n IMessageDTO,\n IUserDTO,\n IUserState,\n} from \"../types/collab.types\";\nimport { maxMessageLength, mentionLimit } from \"./constants\";\nimport { uniqBy } from \"lodash-es\";\nimport DOMPurify from \"dompurify\";\n\nconst escapeRegExp = (string: string): string => {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Generates the title for the thread based on the number of comments.\n * @param {number} commentCount - The number of comments.\n * @returns {string} The title for the thread.\n */\nexport const getThreadTitle = (commentCount: number): string => {\n if (commentCount === 0) return \"Add New Comment\";\n return commentCount === 1 ? \"1 Comment\" : `${commentCount} Comments`;\n};\n\n/**\n * returns the available email.\n * @param {IUserDTO} user - The user object.\n * @returns {string} The user's email.\n */\nexport const getUserName = (user: IUserDTO): string => {\n return user.firstName && user.lastName\n ? `${user.firstName} ${user.lastName}`\n : user.firstName || user.lastName || user.email;\n};\n\n/**\n * Validates the comment length and the number of mentions.\n * @param {string} comment - The comment message.\n * @param {IMentionedList} toUsers - The list of mentioned users.\n * @returns {string} The error message if validation fails, otherwise an empty string.\n */\nexport const validateCommentAndMentions = (\n comment: string,\n toUsers: IMentionedList\n): string => {\n if (comment.length > maxMessageLength) {\n return `Limit exceeded. You can have a maximum length of ${maxMessageLength} characters.`;\n }\n if (toUsers.length > mentionLimit) {\n return `Limit exceeded. You can tag a maximum of ${mentionLimit} users.`;\n }\n return \"\";\n};\n\n/**\n * Removes mentions that no longer exist in the message.\n * @param {string} message - The comment message.\n * @param {IMentionedList} toUsers - The list of mentioned users.\n * @returns {Object} The updated lists of mentioned users.\n */\nexport const filterOutInvalidMentions = (\n message: string,\n toUsers: IMentionedList\n) => {\n const to_users_temp = toUsers.filter((user) =>\n message.includes(user.display)\n );\n\n return {\n toUsers: uniqBy(to_users_temp, \"id\"),\n };\n};\n\n/**\n * Replaces mention placeholders with display names in the comment message.\n * @param {IMessageDTO | undefined} comment - The comment object.\n * @param {IUserState} userState - The user state containing user and role maps.\n * @param {\"text\" | \"html\"} profile - The format for the output message, either plain text or HTML.\n * @returns {string | undefined} The formatted message or undefined if the comment is not provided.\n */\nexport const getMessageWithDisplayName = (\n comment: IMessageDTO | undefined | null,\n userState: IUserState,\n profile: \"text\" | \"html\"\n): string | undefined => {\n if (!comment) return undefined;\n\n let tempText = comment.message;\n\n comment?.toUsers?.forEach((user) => {\n const userPattern = new RegExp(`{{${user}}}`, \"g\");\n const userData = userState.userMap[user];\n const replacement =\n profile === \"html\"\n ? `<b class=\"collab-thread-comment--message\">@${userData.display || getUserName(userData)}</b>`\n : `@${userData.display || getUserName(userData)}`;\n tempText = tempText.replace(userPattern, replacement);\n });\n\n return tempText;\n};\n\n/**\n * Sanitizes HTML content to prevent XSS attacks.\n * @param {any} dirty - The unsanitized HTML content.\n * @returns {string} The sanitized HTML content.\n */\nexport const sanitizeData = (dirty: any): string => {\n return DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });\n};\n\n/**\n * Constructs the comment body with mentions replaced by their unique identifiers.\n * @param {ICommentState} state - The state containing the comment and mentions.\n * @returns {Object} The comment body containing the sanitized message and mentioned users.\n */\nexport const getCommentBody = (state: ICommentState): ICommentState => {\n let finalMessage = state.message\n .replace(/[^\\S\\r\\n]+/g, \" \")\n .replace(/ *\\n */g, \"\\n\")\n .trim();\n\n const comment = {\n message: finalMessage,\n toUsers: [],\n images: [],\n createdBy: state.createdBy,\n author: state.author,\n };\n\n const updateMentionToUID = (\n entity: IMentionItem,\n result: Array<string>\n ) => {\n const displayName = entity.display;\n\n const escapedDisplayName = escapeRegExp(`@${displayName}`);\n const regexUser = new RegExp(escapedDisplayName, \"g\");\n finalMessage = finalMessage.replace(regexUser, `{{${entity.id}}}`);\n result.push(entity.id);\n };\n\n state.toUsers?.forEach((user) => updateMentionToUID(user, comment.toUsers));\n\n comment.message = finalMessage;\n return comment;\n};\n"],"mappings":";;;AAQA,SAAS,kBAAkB,oBAAoB;AAC/C,SAAS,cAAc;AACvB,OAAO,eAAe;AAEtB,IAAM,eAAe,CAAC,WAA2B;AAC7C,SAAO,OAAO,QAAQ,uBAAuB,MAAM;AACvD;AAOO,IAAM,iBAAiB,CAAC,iBAAiC;AAC5D,MAAI,iBAAiB,EAAG,QAAO;AAC/B,SAAO,iBAAiB,IAAI,cAAc,GAAG,YAAY;AAC7D;AAOO,IAAM,cAAc,CAAC,SAA2B;AACnD,SAAO,KAAK,aAAa,KAAK,WACxB,GAAG,KAAK,SAAS,IAAI,KAAK,QAAQ,KAClC,KAAK,aAAa,KAAK,YAAY,KAAK;AAClD;AAQO,IAAM,6BAA6B,CACtC,SACA,YACS;AACT,MAAI,QAAQ,SAAS,kBAAkB;AACnC,WAAO,oDAAoD,gBAAgB;AAAA,EAC/E;AACA,MAAI,QAAQ,SAAS,cAAc;AAC/B,WAAO,4CAA4C,YAAY;AAAA,EACnE;AACA,SAAO;AACX;AAQO,IAAM,2BAA2B,CACpC,SACA,YACC;AACD,QAAM,gBAAgB,QAAQ;AAAA,IAAO,CAAC,SAClC,QAAQ,SAAS,KAAK,OAAO;AAAA,EACjC;AAEA,SAAO;AAAA,IACH,SAAS,OAAO,eAAe,IAAI;AAAA,EACvC;AACJ;AASO,IAAM,4BAA4B,CACrC,SACA,WACA,YACqB;AACrB,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,WAAW,QAAQ;AAEvB,WAAS,SAAS,QAAQ,CAAC,SAAS;AAChC,UAAM,cAAc,IAAI,OAAO,KAAK,IAAI,MAAM,GAAG;AACjD,UAAM,WAAW,UAAU,QAAQ,IAAI;AACvC,UAAM,cACF,YAAY,SACN,8CAA8C,SAAS,WAAW,YAAY,QAAQ,CAAC,SACvF,IAAI,SAAS,WAAW,YAAY,QAAQ,CAAC;AACvD,eAAW,SAAS,QAAQ,aAAa,WAAW;AAAA,EACxD,CAAC;AAED,SAAO;AACX;AAOO,IAAM,eAAe,CAAC,UAAuB;AAChD,SAAO,UAAU,SAAS,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,EAAE,CAAC;AACrE;AAOO,IAAM,iBAAiB,CAAC,UAAwC;AACnE,MAAI,eAAe,MAAM,QACpB,QAAQ,eAAe,GAAG,EAC1B,QAAQ,WAAW,IAAI,EACvB,KAAK;AAEV,QAAM,UAAU;AAAA,IACZ,SAAS;AAAA,IACT,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,EAClB;AAEA,QAAM,qBAAqB,CACvB,QACA,WACC;AACD,UAAM,cAAc,OAAO;AAE3B,UAAM,qBAAqB,aAAa,IAAI,WAAW,EAAE;AACzD,UAAM,YAAY,IAAI,OAAO,oBAAoB,GAAG;AACpD,mBAAe,aAAa,QAAQ,WAAW,KAAK,OAAO,EAAE,IAAI;AACjE,WAAO,KAAK,OAAO,EAAE;AAAA,EACzB;AAEA,QAAM,SAAS,QAAQ,CAAC,SAAS,mBAAmB,MAAM,QAAQ,OAAO,CAAC;AAE1E,UAAQ,UAAU;AAClB,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/collabUtils.ts"],"sourcesContent":["import {\n ICommentState,\n IMentionedList,\n IMentionItem,\n IMessageDTO,\n IUserDTO,\n IUserState,\n} from \"../types/collab.types\";\nimport { maxMessageLength, mentionLimit } from \"./constants\";\nimport { uniqBy } from \"lodash-es\";\nimport DOMPurify from \"dompurify\";\nimport dayjs from \"dayjs\";\n\nconst escapeRegExp = (string: string): string => {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Generates the title for the thread based on the number of comments.\n * @param {number} commentCount - The number of comments.\n * @returns {string} The title for the thread.\n */\nexport const getThreadTitle = (commentCount: number): string => {\n if (commentCount === 0) return \"Add New Comment\";\n return commentCount === 1 ? \"1 Comment\" : `${commentCount} Comments`;\n};\n\n/**\n * returns the available email.\n * @param {IUserDTO} user - The user object.\n * @returns {string} The user's email.\n */\nexport const getUserName = (user: IUserDTO): string => {\n return user.firstName && user.lastName\n ? `${user.firstName} ${user.lastName}`\n : user.firstName || user.lastName || user.email;\n};\n\n/**\n * Validates the comment length and the number of mentions.\n * @param {string} comment - The comment message.\n * @param {IMentionedList} toUsers - The list of mentioned users.\n * @returns {string} The error message if validation fails, otherwise an empty string.\n */\nexport const validateCommentAndMentions = (\n comment: string,\n toUsers: IMentionedList\n): string => {\n if (comment.length > maxMessageLength) {\n return `Limit exceeded. You can have a maximum length of ${maxMessageLength} characters.`;\n }\n if (toUsers.length > mentionLimit) {\n return `Limit exceeded. You can tag a maximum of ${mentionLimit} users.`;\n }\n return \"\";\n};\n\n/**\n * Removes mentions that no longer exist in the message.\n * @param {string} message - The comment message.\n * @param {IMentionedList} toUsers - The list of mentioned users.\n * @returns {Object} The updated lists of mentioned users.\n */\nexport const filterOutInvalidMentions = (\n message: string,\n toUsers: IMentionedList\n) => {\n const to_users_temp = toUsers.filter((user) =>\n message.includes(user.display)\n );\n\n return {\n toUsers: uniqBy(to_users_temp, \"id\"),\n };\n};\n\n/**\n * Replaces mention placeholders with display names in the comment message.\n * @param {IMessageDTO | undefined} comment - The comment object.\n * @param {IUserState} userState - The user state containing user and role maps.\n * @param {\"text\" | \"html\"} profile - The format for the output message, either plain text or HTML.\n * @returns {string | undefined} The formatted message or undefined if the comment is not provided.\n */\nexport const getMessageWithDisplayName = (\n comment: IMessageDTO | undefined | null,\n userState: IUserState,\n profile: \"text\" | \"html\"\n): string | undefined => {\n if (!comment) return undefined;\n\n let tempText = sanitizeData(comment.message).replace(/<[^>]*>/g, \"\");\n\n comment.toUsers?.forEach((user) => {\n const userPattern = new RegExp(`{{${user}}}`, \"g\");\n const userData = userState.userMap[user];\n const displayName = userData\n ? userData.display || getUserName(userData)\n : `unknown user`;\n\n const replacement =\n profile === \"html\"\n ? `<b class=\"collab-thread-comment--message\">@${displayName}</b>`\n : `@${displayName}`;\n tempText = tempText.replace(userPattern, replacement);\n });\n\n return tempText;\n};\n\n/**\n * Sanitizes HTML content to prevent XSS attacks.\n * @param {any} dirty - The unsanitized HTML content.\n * @returns {string} The sanitized HTML content.\n */\nexport const sanitizeData = (dirty: any): string => {\n return DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });\n};\n\n/**\n * Constructs the comment body with mentions replaced by their unique identifiers.\n * @param {ICommentState} state - The state containing the comment and mentions.\n * @returns {Object} The comment body containing the sanitized message and mentioned users.\n */\nexport const getCommentBody = (state: ICommentState): ICommentState => {\n let finalMessage = sanitizeData(state.message)\n .replace(/[^\\S\\r\\n]+/g, \" \")\n .replace(/ *\\n */g, \"\\n\")\n .replace(/<[^>]*>/g, \"\")\n .trim();\n\n const comment = {\n message: finalMessage,\n toUsers: [],\n images: [],\n createdBy: state.createdBy,\n author: state.author,\n };\n\n const updateMentionToUID = (\n entity: IMentionItem,\n result: Array<string>\n ) => {\n const displayName = entity.display;\n\n const escapedDisplayName = escapeRegExp(`@${displayName}`);\n const regexUser = new RegExp(escapedDisplayName, \"g\");\n finalMessage = finalMessage.replace(regexUser, `{{${entity.id}}}`);\n result.push(entity.id);\n };\n\n state.toUsers?.forEach((user) => updateMentionToUID(user, comment.toUsers));\n\n comment.message = finalMessage;\n return comment;\n};\n\nexport function normalizePath(path: string): string {\n if (path === \"/\") return path;\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n}\n\nexport function fixSvgXPath(xpath: string | null): string {\n if (!xpath) return \"\";\n return xpath.replace(/\\/svg/g, \"/*[name()='svg']\");\n}\n\n/**\n * populate the position of the thread based on edges of the screen.\n * @param position\n * @param options\n * @returns\n */\nexport function adjustPositionToViewport(\n position: { top: number; left: number },\n options: {\n threadWidth?: number;\n safeMargin?: number;\n topSafeMargin?: number;\n } = {}\n): { top: number; left: number } {\n const { top, left } = position;\n const viewportWidth = window.innerWidth;\n const safeMargin = options.safeMargin ?? 16;\n const topSafeMargin = options.topSafeMargin ?? 42;\n const threadWidth = options.threadWidth ?? 16;\n\n let adjustedLeft = left;\n let adjustedTop = top;\n\n // Adjust position if too close to right edge\n if (adjustedLeft + threadWidth > viewportWidth - safeMargin) {\n adjustedLeft = viewportWidth - safeMargin - threadWidth;\n }\n\n // Adjust position if too close to top edge\n if (adjustedTop - window.scrollY < topSafeMargin) {\n adjustedTop = window.scrollY + topSafeMargin;\n }\n\n return { top: adjustedTop, left: adjustedLeft };\n}\n\nexport function formatDate(dateString: string): string {\n if (!dateString) return \"\";\n return dayjs(dateString).format(\"MMM DD, YYYY, hh:mm A\");\n}\n\ninterface PositionCoords {\n top: number;\n left: number;\n}\n\ninterface Positions {\n bottom: PositionCoords;\n top: PositionCoords;\n left: PositionCoords;\n right: PositionCoords;\n}\n\n/**\n * Calculates and updates tooltip position based on available viewport space.\n */\nexport const positionTooltip = (\n tooltipRef: React.RefObject<HTMLDivElement>,\n targetRef: React.RefObject<HTMLDivElement>,\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n setActualPosition: (position: \"top\" | \"bottom\" | \"left\" | \"right\") => void\n) => {\n if (!tooltipRef.current || !targetRef.current) return;\n\n const targetRect = targetRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const margin = 8;\n\n const positions: Positions = {\n bottom: {\n top: targetRect.bottom + margin,\n left: targetRect.left + (targetRect.width - tooltipRect.width) / 2,\n },\n top: {\n top: targetRect.top - tooltipRect.height - margin,\n left: targetRect.left + (targetRect.width - tooltipRect.width) / 2,\n },\n left: {\n top: targetRect.top + (targetRect.height - tooltipRect.height) / 2,\n left: targetRect.left - tooltipRect.width - margin,\n },\n right: {\n top: targetRect.top + (targetRect.height - tooltipRect.height) / 2,\n left: targetRect.right + margin,\n },\n };\n\n let bestPosition = position;\n let coords = positions[position];\n\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const wouldBeOutsideViewport = {\n bottom: coords.top + tooltipRect.height > viewportHeight,\n top: coords.top < 0,\n left: coords.left < 0,\n right: coords.left + tooltipRect.width > viewportWidth,\n };\n\n const horizontalOutOfBounds =\n coords.left < 0 || coords.left + tooltipRect.width > viewportWidth;\n\n if (wouldBeOutsideViewport[position] || horizontalOutOfBounds) {\n const positionPriority = [\"bottom\", \"top\", \"right\", \"left\"];\n\n positionPriority.splice(positionPriority.indexOf(position), 1);\n positionPriority.push(position);\n\n for (const pos of positionPriority) {\n const testCoords = positions[pos as keyof Positions];\n\n const isVisible =\n testCoords.top >= 0 &&\n testCoords.top + tooltipRect.height <= viewportHeight &&\n testCoords.left >= 0 &&\n testCoords.left + tooltipRect.width <= viewportWidth;\n\n if (isVisible) {\n bestPosition = pos as \"top\" | \"bottom\" | \"left\" | \"right\";\n coords = testCoords;\n break;\n }\n }\n }\n\n if (coords.left < 0) {\n coords.left = margin;\n } else if (coords.left + tooltipRect.width > viewportWidth) {\n coords.left = viewportWidth - tooltipRect.width - margin;\n }\n\n if (coords.top < 0) {\n coords.top = margin;\n } else if (coords.top + tooltipRect.height > viewportHeight) {\n coords.top = viewportHeight - tooltipRect.height - margin;\n }\n\n setActualPosition(bestPosition);\n\n Object.assign(tooltipRef.current.style, {\n top: `${coords.top}px`,\n left: `${coords.left}px`,\n });\n};\n"],"mappings":";;;AAQA,SAAS,kBAAkB,oBAAoB;AAC/C,SAAS,cAAc;AACvB,OAAO,eAAe;AACtB,OAAO,WAAW;AAElB,IAAM,eAAe,CAAC,WAA2B;AAC7C,SAAO,OAAO,QAAQ,uBAAuB,MAAM;AACvD;AAOO,IAAM,iBAAiB,CAAC,iBAAiC;AAC5D,MAAI,iBAAiB,EAAG,QAAO;AAC/B,SAAO,iBAAiB,IAAI,cAAc,GAAG,YAAY;AAC7D;AAOO,IAAM,cAAc,CAAC,SAA2B;AACnD,SAAO,KAAK,aAAa,KAAK,WACxB,GAAG,KAAK,SAAS,IAAI,KAAK,QAAQ,KAClC,KAAK,aAAa,KAAK,YAAY,KAAK;AAClD;AAQO,IAAM,6BAA6B,CACtC,SACA,YACS;AACT,MAAI,QAAQ,SAAS,kBAAkB;AACnC,WAAO,oDAAoD,gBAAgB;AAAA,EAC/E;AACA,MAAI,QAAQ,SAAS,cAAc;AAC/B,WAAO,4CAA4C,YAAY;AAAA,EACnE;AACA,SAAO;AACX;AAQO,IAAM,2BAA2B,CACpC,SACA,YACC;AACD,QAAM,gBAAgB,QAAQ;AAAA,IAAO,CAAC,SAClC,QAAQ,SAAS,KAAK,OAAO;AAAA,EACjC;AAEA,SAAO;AAAA,IACH,SAAS,OAAO,eAAe,IAAI;AAAA,EACvC;AACJ;AASO,IAAM,4BAA4B,CACrC,SACA,WACA,YACqB;AACrB,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,WAAW,aAAa,QAAQ,OAAO,EAAE,QAAQ,YAAY,EAAE;AAEnE,UAAQ,SAAS,QAAQ,CAAC,SAAS;AAC/B,UAAM,cAAc,IAAI,OAAO,KAAK,IAAI,MAAM,GAAG;AACjD,UAAM,WAAW,UAAU,QAAQ,IAAI;AACvC,UAAM,cAAc,WACd,SAAS,WAAW,YAAY,QAAQ,IACxC;AAEN,UAAM,cACF,YAAY,SACN,8CAA8C,WAAW,SACzD,IAAI,WAAW;AACzB,eAAW,SAAS,QAAQ,aAAa,WAAW;AAAA,EACxD,CAAC;AAED,SAAO;AACX;AAOO,IAAM,eAAe,CAAC,UAAuB;AAChD,SAAO,UAAU,SAAS,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,EAAE,CAAC;AACrE;AAOO,IAAM,iBAAiB,CAAC,UAAwC;AACnE,MAAI,eAAe,aAAa,MAAM,OAAO,EACxC,QAAQ,eAAe,GAAG,EAC1B,QAAQ,WAAW,IAAI,EACvB,QAAQ,YAAY,EAAE,EACtB,KAAK;AAEV,QAAM,UAAU;AAAA,IACZ,SAAS;AAAA,IACT,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,EAClB;AAEA,QAAM,qBAAqB,CACvB,QACA,WACC;AACD,UAAM,cAAc,OAAO;AAE3B,UAAM,qBAAqB,aAAa,IAAI,WAAW,EAAE;AACzD,UAAM,YAAY,IAAI,OAAO,oBAAoB,GAAG;AACpD,mBAAe,aAAa,QAAQ,WAAW,KAAK,OAAO,EAAE,IAAI;AACjE,WAAO,KAAK,OAAO,EAAE;AAAA,EACzB;AAEA,QAAM,SAAS,QAAQ,CAAC,SAAS,mBAAmB,MAAM,QAAQ,OAAO,CAAC;AAE1E,UAAQ,UAAU;AAClB,SAAO;AACX;AAEO,SAAS,cAAc,MAAsB;AAChD,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AACpD;AAEO,SAAS,YAAY,OAA8B;AACtD,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,QAAQ,UAAU,kBAAkB;AACrD;AAQO,SAAS,yBACZ,UACA,UAII,CAAC,GACwB;AAC7B,QAAM,EAAE,KAAK,KAAK,IAAI;AACtB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,cAAc,QAAQ,eAAe;AAE3C,MAAI,eAAe;AACnB,MAAI,cAAc;AAGlB,MAAI,eAAe,cAAc,gBAAgB,YAAY;AACzD,mBAAe,gBAAgB,aAAa;AAAA,EAChD;AAGA,MAAI,cAAc,OAAO,UAAU,eAAe;AAC9C,kBAAc,OAAO,UAAU;AAAA,EACnC;AAEA,SAAO,EAAE,KAAK,aAAa,MAAM,aAAa;AAClD;AAEO,SAAS,WAAW,YAA4B;AACnD,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO,MAAM,UAAU,EAAE,OAAO,uBAAuB;AAC3D;AAiBO,IAAM,kBAAkB,CAC3B,YACA,WACA,UACA,sBACC;AACD,MAAI,CAAC,WAAW,WAAW,CAAC,UAAU,QAAS;AAE/C,QAAM,aAAa,UAAU,QAAQ,sBAAsB;AAC3D,QAAM,cAAc,WAAW,QAAQ,sBAAsB;AAC7D,QAAM,SAAS;AAEf,QAAM,YAAuB;AAAA,IACzB,QAAQ;AAAA,MACJ,KAAK,WAAW,SAAS;AAAA,MACzB,MAAM,WAAW,QAAQ,WAAW,QAAQ,YAAY,SAAS;AAAA,IACrE;AAAA,IACA,KAAK;AAAA,MACD,KAAK,WAAW,MAAM,YAAY,SAAS;AAAA,MAC3C,MAAM,WAAW,QAAQ,WAAW,QAAQ,YAAY,SAAS;AAAA,IACrE;AAAA,IACA,MAAM;AAAA,MACF,KAAK,WAAW,OAAO,WAAW,SAAS,YAAY,UAAU;AAAA,MACjE,MAAM,WAAW,OAAO,YAAY,QAAQ;AAAA,IAChD;AAAA,IACA,OAAO;AAAA,MACH,KAAK,WAAW,OAAO,WAAW,SAAS,YAAY,UAAU;AAAA,MACjE,MAAM,WAAW,QAAQ;AAAA,IAC7B;AAAA,EACJ;AAEA,MAAI,eAAe;AACnB,MAAI,SAAS,UAAU,QAAQ;AAE/B,QAAM,gBAAgB,OAAO;AAC7B,QAAM,iBAAiB,OAAO;AAE9B,QAAM,yBAAyB;AAAA,IAC3B,QAAQ,OAAO,MAAM,YAAY,SAAS;AAAA,IAC1C,KAAK,OAAO,MAAM;AAAA,IAClB,MAAM,OAAO,OAAO;AAAA,IACpB,OAAO,OAAO,OAAO,YAAY,QAAQ;AAAA,EAC7C;AAEA,QAAM,wBACF,OAAO,OAAO,KAAK,OAAO,OAAO,YAAY,QAAQ;AAEzD,MAAI,uBAAuB,QAAQ,KAAK,uBAAuB;AAC3D,UAAM,mBAAmB,CAAC,UAAU,OAAO,SAAS,MAAM;AAE1D,qBAAiB,OAAO,iBAAiB,QAAQ,QAAQ,GAAG,CAAC;AAC7D,qBAAiB,KAAK,QAAQ;AAE9B,eAAW,OAAO,kBAAkB;AAChC,YAAM,aAAa,UAAU,GAAsB;AAEnD,YAAM,YACF,WAAW,OAAO,KAClB,WAAW,MAAM,YAAY,UAAU,kBACvC,WAAW,QAAQ,KACnB,WAAW,OAAO,YAAY,SAAS;AAE3C,UAAI,WAAW;AACX,uBAAe;AACf,iBAAS;AACT;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,OAAO,OAAO,GAAG;AACjB,WAAO,OAAO;AAAA,EAClB,WAAW,OAAO,OAAO,YAAY,QAAQ,eAAe;AACxD,WAAO,OAAO,gBAAgB,YAAY,QAAQ;AAAA,EACtD;AAEA,MAAI,OAAO,MAAM,GAAG;AAChB,WAAO,MAAM;AAAA,EACjB,WAAW,OAAO,MAAM,YAAY,SAAS,gBAAgB;AACzD,WAAO,MAAM,iBAAiB,YAAY,SAAS;AAAA,EACvD;AAEA,oBAAkB,YAAY;AAE9B,SAAO,OAAO,WAAW,QAAQ,OAAO;AAAA,IACpC,KAAK,GAAG,OAAO,GAAG;AAAA,IAClB,MAAM,GAAG,OAAO,IAAI;AAAA,EACxB,CAAC;AACL;","names":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/visualBuilder/utils/enableInlineEditing.ts
21
+ var enableInlineEditing_exports = {};
22
+ __export(enableInlineEditing_exports, {
23
+ enableInlineEditing: () => enableInlineEditing
24
+ });
25
+ module.exports = __toCommonJS(enableInlineEditing_exports);
26
+ var import_lodash_es = require("lodash-es");
27
+ var import__ = require("../index.cjs");
28
+ var import_generatePseudoEditableField = require("../generators/generatePseudoEditableField.cjs");
29
+ var import_constants = require("./constants.cjs");
30
+ var import_getMultilinePlaintext = require("./getMultilinePlaintext.cjs");
31
+ var import_handleFieldMouseDown = require("./handleFieldMouseDown.cjs");
32
+ var import_types = require("./types/index.types.cjs");
33
+ var import_updateFocussedState = require("./updateFocussedState.cjs");
34
+ var import_pasteAsPlainText = require("./pasteAsPlainText.cjs");
35
+ function enableInlineEditing({
36
+ expectedFieldData,
37
+ editableElement,
38
+ fieldType,
39
+ elements
40
+ }) {
41
+ const { visualBuilderContainer, resizeObserver } = elements;
42
+ let actualEditableField = editableElement;
43
+ import__.VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue = actualEditableField?.innerText;
44
+ const elementComputedDisplay = window.getComputedStyle(actualEditableField).display;
45
+ let textContent = editableElement.innerText || editableElement.textContent || "";
46
+ if (fieldType === import_types.FieldDataType.MULTILINE) {
47
+ textContent = (0, import_getMultilinePlaintext.getMultilinePlaintext)(actualEditableField);
48
+ actualEditableField.addEventListener("paste", import_pasteAsPlainText.pasteAsPlainText);
49
+ }
50
+ const expectedTextContent = expectedFieldData;
51
+ if (expectedTextContent && textContent !== expectedTextContent || (0, import_generatePseudoEditableField.isEllipsisActive)(editableElement)) {
52
+ const pseudoEditableField = (0, import_generatePseudoEditableField.generatePseudoEditableElement)(
53
+ { editableElement },
54
+ { textContent: expectedFieldData }
55
+ );
56
+ editableElement.style.visibility = "hidden";
57
+ pseudoEditableField.setAttribute(
58
+ import_constants.VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
59
+ fieldType
60
+ );
61
+ visualBuilderContainer.appendChild(pseudoEditableField);
62
+ actualEditableField = pseudoEditableField;
63
+ if (fieldType === import_types.FieldDataType.MULTILINE)
64
+ actualEditableField.addEventListener("paste", import_pasteAsPlainText.pasteAsPlainText);
65
+ elements.resizeObserver.observe(pseudoEditableField);
66
+ } else if (elementComputedDisplay === "inline") {
67
+ const onInlineElementInput = (0, import_lodash_es.throttle)(() => {
68
+ const overlayWrapper = visualBuilderContainer.querySelector(
69
+ ".visual-builder__overlay__wrapper"
70
+ );
71
+ const focusedToolbar = visualBuilderContainer.querySelector(
72
+ ".visual-builder__focused-toolbar"
73
+ );
74
+ (0, import_updateFocussedState.updateFocussedState)({
75
+ editableElement: actualEditableField,
76
+ visualBuilderContainer,
77
+ overlayWrapper,
78
+ focusedToolbar,
79
+ resizeObserver
80
+ });
81
+ }, 200);
82
+ actualEditableField.addEventListener("input", onInlineElementInput);
83
+ }
84
+ actualEditableField.setAttribute("contenteditable", "true");
85
+ actualEditableField.addEventListener("input", import_handleFieldMouseDown.handleFieldInput);
86
+ actualEditableField.addEventListener("keydown", import_handleFieldMouseDown.handleFieldKeyDown);
87
+ actualEditableField.focus();
88
+ return;
89
+ }
90
+ // Annotate the CommonJS export names for ESM import in node:
91
+ 0 && (module.exports = {
92
+ enableInlineEditing
93
+ });
94
+ //# sourceMappingURL=enableInlineEditing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/enableInlineEditing.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { VisualBuilder } from \"../index\";\nimport {\n isEllipsisActive,\n generatePseudoEditableElement,\n} from \"../generators/generatePseudoEditableField\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { getMultilinePlaintext } from \"./getMultilinePlaintext\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { updateFocussedState } from \"./updateFocussedState\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\nexport function enableInlineEditing({\n expectedFieldData,\n editableElement,\n fieldType,\n elements,\n}: {\n expectedFieldData: any;\n editableElement: HTMLElement;\n fieldType: FieldDataType;\n elements: VisualBuilderEditContext;\n}) {\n const { visualBuilderContainer, resizeObserver } = elements;\n let actualEditableField = editableElement as HTMLElement;\n\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue =\n actualEditableField?.innerText;\n\n const elementComputedDisplay =\n window.getComputedStyle(actualEditableField).display;\n\n let textContent =\n (editableElement as HTMLElement).innerText ||\n editableElement.textContent ||\n \"\";\n\n if (fieldType === FieldDataType.MULTILINE) {\n textContent = getMultilinePlaintext(actualEditableField);\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n }\n const expectedTextContent = expectedFieldData;\n if (\n (expectedTextContent && textContent !== expectedTextContent) ||\n isEllipsisActive(editableElement as HTMLElement)\n ) {\n // TODO: Testing will be done in the E2E.\n const pseudoEditableField = generatePseudoEditableElement(\n { editableElement: editableElement as HTMLElement },\n { textContent: expectedFieldData }\n );\n\n (editableElement as HTMLElement).style.visibility = \"hidden\";\n\n // set field type attribute to the pseudo editable field\n // ensures proper keydown handling similar to the actual editable field\n pseudoEditableField.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n visualBuilderContainer.appendChild(pseudoEditableField);\n actualEditableField = pseudoEditableField;\n\n if (fieldType === FieldDataType.MULTILINE)\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n\n // we will unobserve this in hideOverlay\n elements.resizeObserver.observe(pseudoEditableField);\n } else if (elementComputedDisplay === \"inline\") {\n // if the editable field is inline\n const onInlineElementInput = throttle(() => {\n const overlayWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__overlay__wrapper\"\n ) as HTMLDivElement;\n const focusedToolbar = visualBuilderContainer.querySelector(\n \".visual-builder__focused-toolbar\"\n ) as HTMLDivElement;\n updateFocussedState({\n editableElement: actualEditableField,\n visualBuilderContainer,\n overlayWrapper,\n focusedToolbar,\n resizeObserver,\n });\n }, 200);\n actualEditableField.addEventListener(\"input\", onInlineElementInput);\n }\n\n actualEditableField.setAttribute(\"contenteditable\", \"true\");\n actualEditableField.addEventListener(\"input\", handleFieldInput);\n actualEditableField.addEventListener(\"keydown\", handleFieldKeyDown);\n // focus on the contenteditable element to start accepting input\n actualEditableField.focus();\n\n return;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AACzB,eAA8B;AAC9B,yCAGO;AACP,uBAAwD;AACxD,mCAAsC;AACtC,kCAAqD;AACrD,mBAAwD;AACxD,iCAAoC;AACpC,8BAAiC;AAE1B,SAAS,oBAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKG;AACC,QAAM,EAAE,wBAAwB,eAAe,IAAI;AACnD,MAAI,sBAAsB;AAE1B,yBAAc,yBAAyB,MAAM,kBACzC,qBAAqB;AAEzB,QAAM,yBACF,OAAO,iBAAiB,mBAAmB,EAAE;AAEjD,MAAI,cACC,gBAAgC,aACjC,gBAAgB,eAChB;AAEJ,MAAI,cAAc,2BAAc,WAAW;AACvC,sBAAc,oDAAsB,mBAAmB;AACvD,wBAAoB,iBAAiB,SAAS,wCAAgB;AAAA,EAClE;AACA,QAAM,sBAAsB;AAC5B,MACK,uBAAuB,gBAAgB,2BACxC,qDAAiB,eAA8B,GACjD;AAEE,UAAM,0BAAsB;AAAA,MACxB,EAAE,gBAAgD;AAAA,MAClD,EAAE,aAAa,kBAAkB;AAAA,IACrC;AAEA,IAAC,gBAAgC,MAAM,aAAa;AAIpD,wBAAoB;AAAA,MAChB;AAAA,MACA;AAAA,IACJ;AACA,2BAAuB,YAAY,mBAAmB;AACtD,0BAAsB;AAEtB,QAAI,cAAc,2BAAc;AAC5B,0BAAoB,iBAAiB,SAAS,wCAAgB;AAGlE,aAAS,eAAe,QAAQ,mBAAmB;AAAA,EACvD,WAAW,2BAA2B,UAAU;AAE5C,UAAM,2BAAuB,2BAAS,MAAM;AACxC,YAAM,iBAAiB,uBAAuB;AAAA,QAC1C;AAAA,MACJ;AACA,YAAM,iBAAiB,uBAAuB;AAAA,QAC1C;AAAA,MACJ;AACA,0DAAoB;AAAA,QAChB,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,GAAG,GAAG;AACN,wBAAoB,iBAAiB,SAAS,oBAAoB;AAAA,EACtE;AAEA,sBAAoB,aAAa,mBAAmB,MAAM;AAC1D,sBAAoB,iBAAiB,SAAS,4CAAgB;AAC9D,sBAAoB,iBAAiB,WAAW,8CAAkB;AAElE,sBAAoB,MAAM;AAE1B;AACJ;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { FieldDataType, VisualBuilderEditContext } from './types/index.types.cjs';
2
+ import '../../cms/types/contentTypeSchema.types.cjs';
3
+
4
+ declare function enableInlineEditing({ expectedFieldData, editableElement, fieldType, elements, }: {
5
+ expectedFieldData: any;
6
+ editableElement: HTMLElement;
7
+ fieldType: FieldDataType;
8
+ elements: VisualBuilderEditContext;
9
+ }): void;
10
+
11
+ export { enableInlineEditing };
@@ -0,0 +1,11 @@
1
+ import { FieldDataType, VisualBuilderEditContext } from './types/index.types.js';
2
+ import '../../cms/types/contentTypeSchema.types.js';
3
+
4
+ declare function enableInlineEditing({ expectedFieldData, editableElement, fieldType, elements, }: {
5
+ expectedFieldData: any;
6
+ editableElement: HTMLElement;
7
+ fieldType: FieldDataType;
8
+ elements: VisualBuilderEditContext;
9
+ }): void;
10
+
11
+ export { enableInlineEditing };
@@ -0,0 +1,74 @@
1
+ import "../../chunk-5WRI5ZAA.js";
2
+
3
+ // src/visualBuilder/utils/enableInlineEditing.ts
4
+ import { throttle } from "lodash-es";
5
+ import { VisualBuilder } from "../index.js";
6
+ import {
7
+ isEllipsisActive,
8
+ generatePseudoEditableElement
9
+ } from "../generators/generatePseudoEditableField.js";
10
+ import { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from "./constants.js";
11
+ import { getMultilinePlaintext } from "./getMultilinePlaintext.js";
12
+ import { handleFieldInput, handleFieldKeyDown } from "./handleFieldMouseDown.js";
13
+ import { FieldDataType } from "./types/index.types.js";
14
+ import { updateFocussedState } from "./updateFocussedState.js";
15
+ import { pasteAsPlainText } from "./pasteAsPlainText.js";
16
+ function enableInlineEditing({
17
+ expectedFieldData,
18
+ editableElement,
19
+ fieldType,
20
+ elements
21
+ }) {
22
+ const { visualBuilderContainer, resizeObserver } = elements;
23
+ let actualEditableField = editableElement;
24
+ VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue = actualEditableField?.innerText;
25
+ const elementComputedDisplay = window.getComputedStyle(actualEditableField).display;
26
+ let textContent = editableElement.innerText || editableElement.textContent || "";
27
+ if (fieldType === FieldDataType.MULTILINE) {
28
+ textContent = getMultilinePlaintext(actualEditableField);
29
+ actualEditableField.addEventListener("paste", pasteAsPlainText);
30
+ }
31
+ const expectedTextContent = expectedFieldData;
32
+ if (expectedTextContent && textContent !== expectedTextContent || isEllipsisActive(editableElement)) {
33
+ const pseudoEditableField = generatePseudoEditableElement(
34
+ { editableElement },
35
+ { textContent: expectedFieldData }
36
+ );
37
+ editableElement.style.visibility = "hidden";
38
+ pseudoEditableField.setAttribute(
39
+ VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
40
+ fieldType
41
+ );
42
+ visualBuilderContainer.appendChild(pseudoEditableField);
43
+ actualEditableField = pseudoEditableField;
44
+ if (fieldType === FieldDataType.MULTILINE)
45
+ actualEditableField.addEventListener("paste", pasteAsPlainText);
46
+ elements.resizeObserver.observe(pseudoEditableField);
47
+ } else if (elementComputedDisplay === "inline") {
48
+ const onInlineElementInput = throttle(() => {
49
+ const overlayWrapper = visualBuilderContainer.querySelector(
50
+ ".visual-builder__overlay__wrapper"
51
+ );
52
+ const focusedToolbar = visualBuilderContainer.querySelector(
53
+ ".visual-builder__focused-toolbar"
54
+ );
55
+ updateFocussedState({
56
+ editableElement: actualEditableField,
57
+ visualBuilderContainer,
58
+ overlayWrapper,
59
+ focusedToolbar,
60
+ resizeObserver
61
+ });
62
+ }, 200);
63
+ actualEditableField.addEventListener("input", onInlineElementInput);
64
+ }
65
+ actualEditableField.setAttribute("contenteditable", "true");
66
+ actualEditableField.addEventListener("input", handleFieldInput);
67
+ actualEditableField.addEventListener("keydown", handleFieldKeyDown);
68
+ actualEditableField.focus();
69
+ return;
70
+ }
71
+ export {
72
+ enableInlineEditing
73
+ };
74
+ //# sourceMappingURL=enableInlineEditing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/enableInlineEditing.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { VisualBuilder } from \"../index\";\nimport {\n isEllipsisActive,\n generatePseudoEditableElement,\n} from \"../generators/generatePseudoEditableField\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { getMultilinePlaintext } from \"./getMultilinePlaintext\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { updateFocussedState } from \"./updateFocussedState\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\nexport function enableInlineEditing({\n expectedFieldData,\n editableElement,\n fieldType,\n elements,\n}: {\n expectedFieldData: any;\n editableElement: HTMLElement;\n fieldType: FieldDataType;\n elements: VisualBuilderEditContext;\n}) {\n const { visualBuilderContainer, resizeObserver } = elements;\n let actualEditableField = editableElement as HTMLElement;\n\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue =\n actualEditableField?.innerText;\n\n const elementComputedDisplay =\n window.getComputedStyle(actualEditableField).display;\n\n let textContent =\n (editableElement as HTMLElement).innerText ||\n editableElement.textContent ||\n \"\";\n\n if (fieldType === FieldDataType.MULTILINE) {\n textContent = getMultilinePlaintext(actualEditableField);\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n }\n const expectedTextContent = expectedFieldData;\n if (\n (expectedTextContent && textContent !== expectedTextContent) ||\n isEllipsisActive(editableElement as HTMLElement)\n ) {\n // TODO: Testing will be done in the E2E.\n const pseudoEditableField = generatePseudoEditableElement(\n { editableElement: editableElement as HTMLElement },\n { textContent: expectedFieldData }\n );\n\n (editableElement as HTMLElement).style.visibility = \"hidden\";\n\n // set field type attribute to the pseudo editable field\n // ensures proper keydown handling similar to the actual editable field\n pseudoEditableField.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n visualBuilderContainer.appendChild(pseudoEditableField);\n actualEditableField = pseudoEditableField;\n\n if (fieldType === FieldDataType.MULTILINE)\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n\n // we will unobserve this in hideOverlay\n elements.resizeObserver.observe(pseudoEditableField);\n } else if (elementComputedDisplay === \"inline\") {\n // if the editable field is inline\n const onInlineElementInput = throttle(() => {\n const overlayWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__overlay__wrapper\"\n ) as HTMLDivElement;\n const focusedToolbar = visualBuilderContainer.querySelector(\n \".visual-builder__focused-toolbar\"\n ) as HTMLDivElement;\n updateFocussedState({\n editableElement: actualEditableField,\n visualBuilderContainer,\n overlayWrapper,\n focusedToolbar,\n resizeObserver,\n });\n }, 200);\n actualEditableField.addEventListener(\"input\", onInlineElementInput);\n }\n\n actualEditableField.setAttribute(\"contenteditable\", \"true\");\n actualEditableField.addEventListener(\"input\", handleFieldInput);\n actualEditableField.addEventListener(\"keydown\", handleFieldKeyDown);\n // focus on the contenteditable element to start accepting input\n actualEditableField.focus();\n\n return;\n}\n"],"mappings":";;;AAAA,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,+CAA+C;AACxD,SAAS,6BAA6B;AACtC,SAAS,kBAAkB,0BAA0B;AACrD,SAAS,qBAA+C;AACxD,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AAE1B,SAAS,oBAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKG;AACC,QAAM,EAAE,wBAAwB,eAAe,IAAI;AACnD,MAAI,sBAAsB;AAE1B,gBAAc,yBAAyB,MAAM,kBACzC,qBAAqB;AAEzB,QAAM,yBACF,OAAO,iBAAiB,mBAAmB,EAAE;AAEjD,MAAI,cACC,gBAAgC,aACjC,gBAAgB,eAChB;AAEJ,MAAI,cAAc,cAAc,WAAW;AACvC,kBAAc,sBAAsB,mBAAmB;AACvD,wBAAoB,iBAAiB,SAAS,gBAAgB;AAAA,EAClE;AACA,QAAM,sBAAsB;AAC5B,MACK,uBAAuB,gBAAgB,uBACxC,iBAAiB,eAA8B,GACjD;AAEE,UAAM,sBAAsB;AAAA,MACxB,EAAE,gBAAgD;AAAA,MAClD,EAAE,aAAa,kBAAkB;AAAA,IACrC;AAEA,IAAC,gBAAgC,MAAM,aAAa;AAIpD,wBAAoB;AAAA,MAChB;AAAA,MACA;AAAA,IACJ;AACA,2BAAuB,YAAY,mBAAmB;AACtD,0BAAsB;AAEtB,QAAI,cAAc,cAAc;AAC5B,0BAAoB,iBAAiB,SAAS,gBAAgB;AAGlE,aAAS,eAAe,QAAQ,mBAAmB;AAAA,EACvD,WAAW,2BAA2B,UAAU;AAE5C,UAAM,uBAAuB,SAAS,MAAM;AACxC,YAAM,iBAAiB,uBAAuB;AAAA,QAC1C;AAAA,MACJ;AACA,YAAM,iBAAiB,uBAAuB;AAAA,QAC1C;AAAA,MACJ;AACA,0BAAoB;AAAA,QAChB,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL,GAAG,GAAG;AACN,wBAAoB,iBAAiB,SAAS,oBAAoB;AAAA,EACtE;AAEA,sBAAoB,aAAa,mBAAmB,MAAM;AAC1D,sBAAoB,iBAAiB,SAAS,gBAAgB;AAC9D,sBAAoB,iBAAiB,WAAW,kBAAkB;AAElE,sBAAoB,MAAM;AAE1B;AACJ;","names":[]}
@@ -34,6 +34,7 @@ __export(getChildrenDirection_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(getChildrenDirection_exports);
36
36
  var import_getChildElements = __toESM(require("./getChildElements.cjs"), 1);
37
+ var validPositions = ["vertical", "horizontal", "none"];
37
38
  function getChildrenDirection(editableElement, parentCslpValue) {
38
39
  if (!editableElement) {
39
40
  return "none";
@@ -44,6 +45,13 @@ function getChildrenDirection(editableElement, parentCslpValue) {
44
45
  if (!parentElement) {
45
46
  return "none";
46
47
  }
48
+ const directionFromParentElement = parentElement.getAttribute("data-add-direction");
49
+ const isValidParentDirection = validPositions.includes(
50
+ directionFromParentElement
51
+ );
52
+ if (directionFromParentElement && isValidParentDirection) {
53
+ return directionFromParentElement;
54
+ }
47
55
  const [firstChildElement, secondChildElement, removeClone] = (0, import_getChildElements.default)(parentElement, parentCslpValue);
48
56
  if (!firstChildElement) return "none";
49
57
  const firstChildBounds = firstChildElement.getBoundingClientRect();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getChildrenDirection.ts"],"sourcesContent":["import getChildElements from \"./getChildElements\";\n\nexport default function getChildrenDirection(\n editableElement: Element,\n parentCslpValue: string\n): \"none\" | \"horizontal\" | \"vertical\" {\n if (!editableElement) {\n return \"none\";\n }\n\n const parentElement = editableElement.closest(\n `[data-cslp=\"${parentCslpValue}\"]`\n );\n\n if (!parentElement) {\n return \"none\";\n }\n\n const [firstChildElement, secondChildElement, removeClone] =\n getChildElements(parentElement, parentCslpValue);\n\n if (!firstChildElement) return \"none\";\n\n // get horizontal and vertical position differences\n const firstChildBounds = firstChildElement.getBoundingClientRect();\n const secondChildBounds = secondChildElement.getBoundingClientRect();\n\n const deltaX = Math.abs(firstChildBounds.left - secondChildBounds.left);\n const deltaY = Math.abs(firstChildBounds.top - secondChildBounds.top);\n\n const dir = deltaX > deltaY ? \"horizontal\" : \"vertical\";\n\n // remove the clone that was created in case there was only one child\n removeClone();\n\n return dir;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA6B;AAEd,SAAR,qBACH,iBACA,iBACkC;AAClC,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAEA,QAAM,gBAAgB,gBAAgB;AAAA,IAClC,eAAe,eAAe;AAAA,EAClC;AAEA,MAAI,CAAC,eAAe;AAChB,WAAO;AAAA,EACX;AAEA,QAAM,CAAC,mBAAmB,oBAAoB,WAAW,QACrD,wBAAAA,SAAiB,eAAe,eAAe;AAEnD,MAAI,CAAC,kBAAmB,QAAO;AAG/B,QAAM,mBAAmB,kBAAkB,sBAAsB;AACjE,QAAM,oBAAoB,mBAAmB,sBAAsB;AAEnE,QAAM,SAAS,KAAK,IAAI,iBAAiB,OAAO,kBAAkB,IAAI;AACtE,QAAM,SAAS,KAAK,IAAI,iBAAiB,MAAM,kBAAkB,GAAG;AAEpE,QAAM,MAAM,SAAS,SAAS,eAAe;AAG7C,cAAY;AAEZ,SAAO;AACX;","names":["getChildElements"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getChildrenDirection.ts"],"sourcesContent":["import getChildElements from \"./getChildElements\";\n\n\nconst validPositions = [\"vertical\", \"horizontal\", \"none\"] as const;\ntype ValidPositions = typeof validPositions[number];\n\nexport default function getChildrenDirection(\n editableElement: Element,\n parentCslpValue: string\n): ValidPositions {\n if (!editableElement) {\n return \"none\";\n }\n\n const parentElement = editableElement.closest(\n `[data-cslp=\"${parentCslpValue}\"]`\n );\n\n if (!parentElement) {\n return \"none\";\n }\n\n const directionFromParentElement =\n parentElement.getAttribute(\"data-add-direction\");\n\n const isValidParentDirection = validPositions.includes(\n directionFromParentElement as ValidPositions\n );\n\n\n if (directionFromParentElement && isValidParentDirection) {\n return directionFromParentElement as ValidPositions;\n }\n const [firstChildElement, secondChildElement, removeClone] =\n getChildElements(parentElement, parentCslpValue);\n\n if (!firstChildElement) return \"none\";\n\n // get horizontal and vertical position differences\n const firstChildBounds = firstChildElement.getBoundingClientRect();\n const secondChildBounds = secondChildElement.getBoundingClientRect();\n\n const deltaX = Math.abs(firstChildBounds.left - secondChildBounds.left);\n const deltaY = Math.abs(firstChildBounds.top - secondChildBounds.top);\n\n const dir = deltaX > deltaY ? \"horizontal\" : \"vertical\";\n\n // remove the clone that was created in case there was only one child\n removeClone();\n\n return dir;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA6B;AAG7B,IAAM,iBAAiB,CAAC,YAAY,cAAc,MAAM;AAGzC,SAAR,qBACH,iBACA,iBACc;AACd,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAEA,QAAM,gBAAgB,gBAAgB;AAAA,IAClC,eAAe,eAAe;AAAA,EAClC;AAEA,MAAI,CAAC,eAAe;AAChB,WAAO;AAAA,EACX;AAEA,QAAM,6BACF,cAAc,aAAa,oBAAoB;AAEnD,QAAM,yBAAyB,eAAe;AAAA,IAC1C;AAAA,EACJ;AAGA,MAAI,8BAA8B,wBAAwB;AACtD,WAAO;AAAA,EACX;AACA,QAAM,CAAC,mBAAmB,oBAAoB,WAAW,QACrD,wBAAAA,SAAiB,eAAe,eAAe;AAEnD,MAAI,CAAC,kBAAmB,QAAO;AAG/B,QAAM,mBAAmB,kBAAkB,sBAAsB;AACjE,QAAM,oBAAoB,mBAAmB,sBAAsB;AAEnE,QAAM,SAAS,KAAK,IAAI,iBAAiB,OAAO,kBAAkB,IAAI;AACtE,QAAM,SAAS,KAAK,IAAI,iBAAiB,MAAM,kBAAkB,GAAG;AAEpE,QAAM,MAAM,SAAS,SAAS,eAAe;AAG7C,cAAY;AAEZ,SAAO;AACX;","names":["getChildElements"]}
@@ -1,3 +1,5 @@
1
- declare function getChildrenDirection(editableElement: Element, parentCslpValue: string): "none" | "horizontal" | "vertical";
1
+ declare const validPositions: readonly ["vertical", "horizontal", "none"];
2
+ type ValidPositions = typeof validPositions[number];
3
+ declare function getChildrenDirection(editableElement: Element, parentCslpValue: string): ValidPositions;
2
4
 
3
5
  export { getChildrenDirection as default };
@@ -1,3 +1,5 @@
1
- declare function getChildrenDirection(editableElement: Element, parentCslpValue: string): "none" | "horizontal" | "vertical";
1
+ declare const validPositions: readonly ["vertical", "horizontal", "none"];
2
+ type ValidPositions = typeof validPositions[number];
3
+ declare function getChildrenDirection(editableElement: Element, parentCslpValue: string): ValidPositions;
2
4
 
3
5
  export { getChildrenDirection as default };
@@ -2,6 +2,7 @@ import "../../chunk-5WRI5ZAA.js";
2
2
 
3
3
  // src/visualBuilder/utils/getChildrenDirection.ts
4
4
  import getChildElements from "./getChildElements.js";
5
+ var validPositions = ["vertical", "horizontal", "none"];
5
6
  function getChildrenDirection(editableElement, parentCslpValue) {
6
7
  if (!editableElement) {
7
8
  return "none";
@@ -12,6 +13,13 @@ function getChildrenDirection(editableElement, parentCslpValue) {
12
13
  if (!parentElement) {
13
14
  return "none";
14
15
  }
16
+ const directionFromParentElement = parentElement.getAttribute("data-add-direction");
17
+ const isValidParentDirection = validPositions.includes(
18
+ directionFromParentElement
19
+ );
20
+ if (directionFromParentElement && isValidParentDirection) {
21
+ return directionFromParentElement;
22
+ }
15
23
  const [firstChildElement, secondChildElement, removeClone] = getChildElements(parentElement, parentCslpValue);
16
24
  if (!firstChildElement) return "none";
17
25
  const firstChildBounds = firstChildElement.getBoundingClientRect();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getChildrenDirection.ts"],"sourcesContent":["import getChildElements from \"./getChildElements\";\n\nexport default function getChildrenDirection(\n editableElement: Element,\n parentCslpValue: string\n): \"none\" | \"horizontal\" | \"vertical\" {\n if (!editableElement) {\n return \"none\";\n }\n\n const parentElement = editableElement.closest(\n `[data-cslp=\"${parentCslpValue}\"]`\n );\n\n if (!parentElement) {\n return \"none\";\n }\n\n const [firstChildElement, secondChildElement, removeClone] =\n getChildElements(parentElement, parentCslpValue);\n\n if (!firstChildElement) return \"none\";\n\n // get horizontal and vertical position differences\n const firstChildBounds = firstChildElement.getBoundingClientRect();\n const secondChildBounds = secondChildElement.getBoundingClientRect();\n\n const deltaX = Math.abs(firstChildBounds.left - secondChildBounds.left);\n const deltaY = Math.abs(firstChildBounds.top - secondChildBounds.top);\n\n const dir = deltaX > deltaY ? \"horizontal\" : \"vertical\";\n\n // remove the clone that was created in case there was only one child\n removeClone();\n\n return dir;\n}\n"],"mappings":";;;AAAA,OAAO,sBAAsB;AAEd,SAAR,qBACH,iBACA,iBACkC;AAClC,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAEA,QAAM,gBAAgB,gBAAgB;AAAA,IAClC,eAAe,eAAe;AAAA,EAClC;AAEA,MAAI,CAAC,eAAe;AAChB,WAAO;AAAA,EACX;AAEA,QAAM,CAAC,mBAAmB,oBAAoB,WAAW,IACrD,iBAAiB,eAAe,eAAe;AAEnD,MAAI,CAAC,kBAAmB,QAAO;AAG/B,QAAM,mBAAmB,kBAAkB,sBAAsB;AACjE,QAAM,oBAAoB,mBAAmB,sBAAsB;AAEnE,QAAM,SAAS,KAAK,IAAI,iBAAiB,OAAO,kBAAkB,IAAI;AACtE,QAAM,SAAS,KAAK,IAAI,iBAAiB,MAAM,kBAAkB,GAAG;AAEpE,QAAM,MAAM,SAAS,SAAS,eAAe;AAG7C,cAAY;AAEZ,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getChildrenDirection.ts"],"sourcesContent":["import getChildElements from \"./getChildElements\";\n\n\nconst validPositions = [\"vertical\", \"horizontal\", \"none\"] as const;\ntype ValidPositions = typeof validPositions[number];\n\nexport default function getChildrenDirection(\n editableElement: Element,\n parentCslpValue: string\n): ValidPositions {\n if (!editableElement) {\n return \"none\";\n }\n\n const parentElement = editableElement.closest(\n `[data-cslp=\"${parentCslpValue}\"]`\n );\n\n if (!parentElement) {\n return \"none\";\n }\n\n const directionFromParentElement =\n parentElement.getAttribute(\"data-add-direction\");\n\n const isValidParentDirection = validPositions.includes(\n directionFromParentElement as ValidPositions\n );\n\n\n if (directionFromParentElement && isValidParentDirection) {\n return directionFromParentElement as ValidPositions;\n }\n const [firstChildElement, secondChildElement, removeClone] =\n getChildElements(parentElement, parentCslpValue);\n\n if (!firstChildElement) return \"none\";\n\n // get horizontal and vertical position differences\n const firstChildBounds = firstChildElement.getBoundingClientRect();\n const secondChildBounds = secondChildElement.getBoundingClientRect();\n\n const deltaX = Math.abs(firstChildBounds.left - secondChildBounds.left);\n const deltaY = Math.abs(firstChildBounds.top - secondChildBounds.top);\n\n const dir = deltaX > deltaY ? \"horizontal\" : \"vertical\";\n\n // remove the clone that was created in case there was only one child\n removeClone();\n\n return dir;\n}\n"],"mappings":";;;AAAA,OAAO,sBAAsB;AAG7B,IAAM,iBAAiB,CAAC,YAAY,cAAc,MAAM;AAGzC,SAAR,qBACH,iBACA,iBACc;AACd,MAAI,CAAC,iBAAiB;AAClB,WAAO;AAAA,EACX;AAEA,QAAM,gBAAgB,gBAAgB;AAAA,IAClC,eAAe,eAAe;AAAA,EAClC;AAEA,MAAI,CAAC,eAAe;AAChB,WAAO;AAAA,EACX;AAEA,QAAM,6BACF,cAAc,aAAa,oBAAoB;AAEnD,QAAM,yBAAyB,eAAe;AAAA,IAC1C;AAAA,EACJ;AAGA,MAAI,8BAA8B,wBAAwB;AACtD,WAAO;AAAA,EACX;AACA,QAAM,CAAC,mBAAmB,oBAAoB,WAAW,IACrD,iBAAiB,eAAe,eAAe;AAEnD,MAAI,CAAC,kBAAmB,QAAO;AAG/B,QAAM,mBAAmB,kBAAkB,sBAAsB;AACjE,QAAM,oBAAoB,mBAAmB,sBAAsB;AAEnE,QAAM,SAAS,KAAK,IAAI,iBAAiB,OAAO,kBAAkB,IAAI;AACtE,QAAM,SAAS,KAAK,IAAI,iBAAiB,MAAM,kBAAkB,GAAG;AAEpE,QAAM,MAAM,SAAS,SAAS,eAAe;AAG7C,cAAY;AAEZ,SAAO;AACX;","names":[]}
@@ -60,7 +60,9 @@ function handleFieldKeyDown(e) {
60
60
  const fieldType = targetElement.getAttribute(
61
61
  import_constants.VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
62
62
  );
63
- if (targetElement.tagName === "BUTTON") {
63
+ if (event.composedPath().some(
64
+ (element) => element instanceof Element && element.tagName === "BUTTON"
65
+ )) {
64
66
  handleKeyDownOnButton(event);
65
67
  }
66
68
  if (fieldType === import_types.FieldDataType.NUMBER) {
@@ -73,6 +75,7 @@ function handleKeyDownOnButton(e) {
73
75
  if (e.code === "Space" && e.target) {
74
76
  e.preventDefault();
75
77
  (0, import_insertSpaceAtCursor.insertSpaceAtCursor)(e.target);
78
+ throttledFieldSync();
76
79
  }
77
80
  }
78
81
  function handleSingleLineFieldKeyDown(e) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (targetElement.tagName === \"BUTTON\") {\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AACzB,6BAA+B;AAC/B,uBAIO;AACP,mBAA8B;AAC9B,yBAA+C;AAC/C,iCAAoC;AAE7B,SAAS,iBAAiB,GAAgB;AAC7C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AACA,MACI,MAAM,SAAS,WACf,+CAA8B,SAAS,SAA0B,GACnE;AACE,uBAAmB;AAAA,EACvB;AACJ;AACA,IAAM,yBAAqB,2BAAS,MAAM;AACtC,MAAI;AACA,UAAM,yBAAyB,SAAS;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,CAAC,uBAAwB;AAC7B,+CAAe;AAAA,MACX;AAAA,MACA,WAAW,kDAA+B;AAAA,IAC9C,CAAC;AAAA,EACL,SAAS,OAAO;AACZ,YAAQ,MAAM,+BAA+B,KAAK;AAAA,EACtD;AACJ,GAAG,GAAG;AAEC,SAAS,mBAAmB,GAAgB;AAC/C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AAEA,MAAI,cAAc,YAAY,UAAU;AACpC,0BAAsB,KAAK;AAAA,EAC/B;AACA,MAAI,cAAc,2BAAc,QAAQ;AACpC,8BAA0B,KAAK;AAAA,EACnC,WAAW,cAAc,2BAAc,YAAY;AAC/C,iCAA6B,KAAK;AAAA,EACtC;AACJ;AAKA,SAAS,sBAAsB,GAAkB;AAC7C,MAAI,EAAE,SAAS,WAAW,EAAE,QAAQ;AAChC,MAAE,eAAe;AACjB,wDAAoB,EAAE,MAAqB;AAAA,EAC/C;AACJ;AAEA,SAAS,6BAA6B,GAAkB;AACpD,MAAI,EAAE,SAAS,SAAS;AACpB,MAAE,eAAe;AAAA,EACrB;AACJ;AAEA,SAAS,0BAA0B,OAA4B;AAC3D,QAAM,gBAAgB,MAAM;AAE5B,QAAM,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MACI,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,SAAS,MAAM,IAAI,GACjC;AAEE;AAAA,EACJ;AAEA,MAAI,MAAM,KAAK,SAAS,OAAO,GAAG;AAC9B;AAAA,EACJ;AAEA,QAAM,8BAA8B,CAAC,KAAK,KAAK,KAAK,GAAG;AAEvD,MAAI,CAAC,4BAA4B,SAAS,MAAM,GAAG,GAAG;AAClD,UAAM,eAAe;AACrB;AAAA,EACJ;AAEA,QAAM,YAAY;AAAA,IACd,aAAa,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,eAAe;AAAA,IACjE,WAAW,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,aAAa;AAAA,EACjE;AAEA,QAAM,gBAAgB,cAAc,eAAe;AACnD,QAAM,mBAAmB,cAAc,MAAM,EAAE;AAC/C,mBAAiB;AAAA,IACb,UAAU;AAAA,IACV,UAAU,YAAY,UAAU;AAAA,IAChC,MAAM;AAAA,EACV;AACA,QAAM,eAAe,iBAAiB,KAAK,EAAE;AAE7C,MAAI,CAAC,mCAAkB,KAAK,YAAY,GAAG;AACvC,UAAM,eAAe;AAAA,EACzB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (\n event\n .composedPath()\n .some(\n (element) =>\n element instanceof Element && element.tagName === \"BUTTON\"\n )\n ) {\n // custom space handling when a button is involved\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented, finally syncs the field\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n throttledFieldSync();\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AACzB,6BAA+B;AAC/B,uBAIO;AACP,mBAA8B;AAC9B,yBAA+C;AAC/C,iCAAoC;AAE7B,SAAS,iBAAiB,GAAgB;AAC7C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AACA,MACI,MAAM,SAAS,WACf,+CAA8B,SAAS,SAA0B,GACnE;AACE,uBAAmB;AAAA,EACvB;AACJ;AACA,IAAM,yBAAqB,2BAAS,MAAM;AACtC,MAAI;AACA,UAAM,yBAAyB,SAAS;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,CAAC,uBAAwB;AAC7B,+CAAe;AAAA,MACX;AAAA,MACA,WAAW,kDAA+B;AAAA,IAC9C,CAAC;AAAA,EACL,SAAS,OAAO;AACZ,YAAQ,MAAM,+BAA+B,KAAK;AAAA,EACtD;AACJ,GAAG,GAAG;AAEC,SAAS,mBAAmB,GAAgB;AAC/C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AAEA,MACI,MACK,aAAa,EACb;AAAA,IACG,CAAC,YACG,mBAAmB,WAAW,QAAQ,YAAY;AAAA,EAC1D,GACN;AAEE,0BAAsB,KAAK;AAAA,EAC/B;AACA,MAAI,cAAc,2BAAc,QAAQ;AACpC,8BAA0B,KAAK;AAAA,EACnC,WAAW,cAAc,2BAAc,YAAY;AAC/C,iCAA6B,KAAK;AAAA,EACtC;AACJ;AAKA,SAAS,sBAAsB,GAAkB;AAC7C,MAAI,EAAE,SAAS,WAAW,EAAE,QAAQ;AAChC,MAAE,eAAe;AACjB,wDAAoB,EAAE,MAAqB;AAC3C,uBAAmB;AAAA,EACvB;AACJ;AAEA,SAAS,6BAA6B,GAAkB;AACpD,MAAI,EAAE,SAAS,SAAS;AACpB,MAAE,eAAe;AAAA,EACrB;AACJ;AAEA,SAAS,0BAA0B,OAA4B;AAC3D,QAAM,gBAAgB,MAAM;AAE5B,QAAM,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MACI,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,SAAS,MAAM,IAAI,GACjC;AAEE;AAAA,EACJ;AAEA,MAAI,MAAM,KAAK,SAAS,OAAO,GAAG;AAC9B;AAAA,EACJ;AAEA,QAAM,8BAA8B,CAAC,KAAK,KAAK,KAAK,GAAG;AAEvD,MAAI,CAAC,4BAA4B,SAAS,MAAM,GAAG,GAAG;AAClD,UAAM,eAAe;AACrB;AAAA,EACJ;AAEA,QAAM,YAAY;AAAA,IACd,aAAa,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,eAAe;AAAA,IACjE,WAAW,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,aAAa;AAAA,EACjE;AAEA,QAAM,gBAAgB,cAAc,eAAe;AACnD,QAAM,mBAAmB,cAAc,MAAM,EAAE;AAC/C,mBAAiB;AAAA,IACb,UAAU;AAAA,IACV,UAAU,YAAY,UAAU;AAAA,IAChC,MAAM;AAAA,EACV;AACA,QAAM,eAAe,iBAAiB,KAAK,EAAE;AAE7C,MAAI,CAAC,mCAAkB,KAAK,YAAY,GAAG;AACvC,UAAM,eAAe;AAAA,EACzB;AACJ;","names":[]}
@@ -41,7 +41,9 @@ function handleFieldKeyDown(e) {
41
41
  const fieldType = targetElement.getAttribute(
42
42
  VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
43
43
  );
44
- if (targetElement.tagName === "BUTTON") {
44
+ if (event.composedPath().some(
45
+ (element) => element instanceof Element && element.tagName === "BUTTON"
46
+ )) {
45
47
  handleKeyDownOnButton(event);
46
48
  }
47
49
  if (fieldType === FieldDataType.NUMBER) {
@@ -54,6 +56,7 @@ function handleKeyDownOnButton(e) {
54
56
  if (e.code === "Space" && e.target) {
55
57
  e.preventDefault();
56
58
  insertSpaceAtCursor(e.target);
59
+ throttledFieldSync();
57
60
  }
58
61
  }
59
62
  function handleSingleLineFieldKeyDown(e) {