@contentstack/live-preview-utils 3.2.5 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/light-sdk.cjs +1 -1
  3. package/dist/legacy/light-sdk.js +1 -1
  4. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  5. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  6. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  7. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  8. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
  9. package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
  10. package/dist/legacy/utils/addLivePreviewQueryTags.cjs +7 -1
  11. package/dist/legacy/utils/addLivePreviewQueryTags.cjs.map +1 -1
  12. package/dist/legacy/utils/addLivePreviewQueryTags.js +7 -1
  13. package/dist/legacy/utils/addLivePreviewQueryTags.js.map +1 -1
  14. package/dist/legacy/utils/index.cjs +8 -4
  15. package/dist/legacy/utils/index.cjs.map +1 -1
  16. package/dist/legacy/utils/index.js +8 -4
  17. package/dist/legacy/utils/index.js.map +1 -1
  18. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs +186 -0
  19. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  20. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  21. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  22. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js +153 -0
  23. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  24. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs +125 -0
  25. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  26. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  27. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  28. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js +92 -0
  29. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  30. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +181 -115
  31. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  32. package/dist/legacy/visualBuilder/components/FieldToolbar.js +182 -116
  33. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  34. package/dist/legacy/visualBuilder/components/Tooltip.cjs +167 -0
  35. package/dist/legacy/visualBuilder/components/Tooltip.cjs.map +1 -0
  36. package/dist/legacy/visualBuilder/components/Tooltip.d.cts +26 -0
  37. package/dist/legacy/visualBuilder/components/Tooltip.d.ts +26 -0
  38. package/dist/legacy/visualBuilder/components/Tooltip.js +140 -0
  39. package/dist/legacy/visualBuilder/components/Tooltip.js.map +1 -0
  40. package/dist/legacy/visualBuilder/components/emptyBlock.cjs +26 -5
  41. package/dist/legacy/visualBuilder/components/emptyBlock.cjs.map +1 -1
  42. package/dist/legacy/visualBuilder/components/emptyBlock.js +26 -5
  43. package/dist/legacy/visualBuilder/components/emptyBlock.js.map +1 -1
  44. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +115 -15
  45. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  46. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +117 -17
  47. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  48. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  49. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  50. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  51. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  52. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  53. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  54. package/dist/legacy/visualBuilder/components/icons/index.cjs +63 -0
  55. package/dist/legacy/visualBuilder/components/icons/index.cjs.map +1 -1
  56. package/dist/legacy/visualBuilder/components/icons/index.d.cts +4 -1
  57. package/dist/legacy/visualBuilder/components/icons/index.d.ts +4 -1
  58. package/dist/legacy/visualBuilder/components/icons/index.js +50 -0
  59. package/dist/legacy/visualBuilder/components/icons/index.js.map +1 -1
  60. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -0
  61. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  62. package/dist/legacy/visualBuilder/generators/generateOverlay.js +1 -0
  63. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  64. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +44 -10
  65. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +11 -4
  67. package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +11 -4
  68. package/dist/legacy/visualBuilder/generators/generateToolbar.js +42 -9
  69. package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
  70. package/dist/legacy/visualBuilder/index.cjs +17 -3
  71. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  72. package/dist/legacy/visualBuilder/index.d.cts +2 -0
  73. package/dist/legacy/visualBuilder/index.d.ts +2 -0
  74. package/dist/legacy/visualBuilder/index.js +17 -3
  75. package/dist/legacy/visualBuilder/index.js.map +1 -1
  76. package/dist/legacy/visualBuilder/listeners/index.cjs +3 -1
  77. package/dist/legacy/visualBuilder/listeners/index.cjs.map +1 -1
  78. package/dist/legacy/visualBuilder/listeners/index.js +3 -1
  79. package/dist/legacy/visualBuilder/listeners/index.js.map +1 -1
  80. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -3
  81. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  82. package/dist/legacy/visualBuilder/listeners/mouseClick.d.cts +4 -1
  83. package/dist/legacy/visualBuilder/listeners/mouseClick.d.ts +4 -1
  84. package/dist/legacy/visualBuilder/listeners/mouseClick.js +5 -2
  85. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  86. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +186 -133
  87. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/listeners/mouseHover.d.cts +5 -3
  89. package/dist/legacy/visualBuilder/listeners/mouseHover.d.ts +5 -3
  90. package/dist/legacy/visualBuilder/listeners/mouseHover.js +185 -133
  91. package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -23
  93. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -13
  95. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  96. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  97. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  98. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  99. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  100. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +5 -0
  101. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  102. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +183 -3
  103. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  104. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +25 -0
  105. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +25 -0
  106. package/dist/legacy/visualBuilder/visualBuilder.style.js +183 -3
  107. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  108. package/dist/modern/light-sdk.cjs +1 -1
  109. package/dist/modern/light-sdk.js +1 -1
  110. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  111. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  112. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  113. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  114. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
  115. package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
  116. package/dist/modern/utils/addLivePreviewQueryTags.cjs +7 -1
  117. package/dist/modern/utils/addLivePreviewQueryTags.cjs.map +1 -1
  118. package/dist/modern/utils/addLivePreviewQueryTags.js +7 -1
  119. package/dist/modern/utils/addLivePreviewQueryTags.js.map +1 -1
  120. package/dist/modern/utils/index.cjs +8 -4
  121. package/dist/modern/utils/index.cjs.map +1 -1
  122. package/dist/modern/utils/index.js +8 -4
  123. package/dist/modern/utils/index.js.map +1 -1
  124. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs +185 -0
  125. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  126. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  127. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  128. package/dist/modern/visualBuilder/components/FieldLocationAppList.js +152 -0
  129. package/dist/modern/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  130. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs +123 -0
  131. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  132. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  133. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  134. package/dist/modern/visualBuilder/components/FieldLocationIcon.js +90 -0
  135. package/dist/modern/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  136. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +180 -115
  137. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  138. package/dist/modern/visualBuilder/components/FieldToolbar.js +181 -116
  139. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  140. package/dist/modern/visualBuilder/components/Tooltip.cjs +167 -0
  141. package/dist/modern/visualBuilder/components/Tooltip.cjs.map +1 -0
  142. package/dist/modern/visualBuilder/components/Tooltip.d.cts +26 -0
  143. package/dist/modern/visualBuilder/components/Tooltip.d.ts +26 -0
  144. package/dist/modern/visualBuilder/components/Tooltip.js +140 -0
  145. package/dist/modern/visualBuilder/components/Tooltip.js.map +1 -0
  146. package/dist/modern/visualBuilder/components/emptyBlock.cjs +26 -5
  147. package/dist/modern/visualBuilder/components/emptyBlock.cjs.map +1 -1
  148. package/dist/modern/visualBuilder/components/emptyBlock.js +26 -5
  149. package/dist/modern/visualBuilder/components/emptyBlock.js.map +1 -1
  150. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +113 -15
  151. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  152. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +115 -17
  153. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  154. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  155. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  156. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  157. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  158. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  159. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  160. package/dist/modern/visualBuilder/components/icons/index.cjs +63 -0
  161. package/dist/modern/visualBuilder/components/icons/index.cjs.map +1 -1
  162. package/dist/modern/visualBuilder/components/icons/index.d.cts +4 -1
  163. package/dist/modern/visualBuilder/components/icons/index.d.ts +4 -1
  164. package/dist/modern/visualBuilder/components/icons/index.js +50 -0
  165. package/dist/modern/visualBuilder/components/icons/index.js.map +1 -1
  166. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -0
  167. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  168. package/dist/modern/visualBuilder/generators/generateOverlay.js +1 -0
  169. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  170. package/dist/modern/visualBuilder/generators/generateToolbar.cjs +43 -10
  171. package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  172. package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +11 -4
  173. package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +11 -4
  174. package/dist/modern/visualBuilder/generators/generateToolbar.js +41 -9
  175. package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
  176. package/dist/modern/visualBuilder/index.cjs +16 -2
  177. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  178. package/dist/modern/visualBuilder/index.d.cts +2 -0
  179. package/dist/modern/visualBuilder/index.d.ts +2 -0
  180. package/dist/modern/visualBuilder/index.js +16 -2
  181. package/dist/modern/visualBuilder/index.js.map +1 -1
  182. package/dist/modern/visualBuilder/listeners/index.cjs +3 -1
  183. package/dist/modern/visualBuilder/listeners/index.cjs.map +1 -1
  184. package/dist/modern/visualBuilder/listeners/index.js +3 -1
  185. package/dist/modern/visualBuilder/listeners/index.js.map +1 -1
  186. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -3
  187. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  188. package/dist/modern/visualBuilder/listeners/mouseClick.d.cts +4 -1
  189. package/dist/modern/visualBuilder/listeners/mouseClick.d.ts +4 -1
  190. package/dist/modern/visualBuilder/listeners/mouseClick.js +5 -2
  191. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  192. package/dist/modern/visualBuilder/listeners/mouseHover.cjs +186 -133
  193. package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  194. package/dist/modern/visualBuilder/listeners/mouseHover.d.cts +5 -3
  195. package/dist/modern/visualBuilder/listeners/mouseHover.d.ts +5 -3
  196. package/dist/modern/visualBuilder/listeners/mouseHover.js +185 -133
  197. package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
  198. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -22
  199. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  200. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -12
  201. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  202. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  203. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  204. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  205. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  206. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +5 -0
  207. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  208. package/dist/modern/visualBuilder/visualBuilder.style.cjs +183 -3
  209. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  210. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +25 -0
  211. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +25 -0
  212. package/dist/modern/visualBuilder/visualBuilder.style.js +183 -3
  213. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  214. package/package.json +2 -1
@@ -8,8 +8,11 @@ type HandleBuilderInteractionParams = Omit<EventListenerHandlerParams, "eventDet
8
8
  type AddFocusedToolbarParams = Pick<EventListenerHandlerParams, "eventDetails" | "focusedToolbar"> & {
9
9
  hideOverlay: () => void;
10
10
  isVariant: boolean;
11
+ options?: {
12
+ isHover?: boolean;
13
+ };
11
14
  };
12
15
  declare function addFocusedToolbar(params: AddFocusedToolbarParams): void;
13
16
  declare function handleBuilderInteraction(params: HandleBuilderInteractionParams): Promise<void>;
14
17
 
15
- export { addFocusedToolbar, handleBuilderInteraction as default };
18
+ export { type HandleBuilderInteractionParams, addFocusedToolbar, handleBuilderInteraction as default, handleBuilderInteraction };
@@ -43,7 +43,8 @@ function addFocusedToolbar(params) {
43
43
  params.eventDetails,
44
44
  params.focusedToolbar,
45
45
  params.hideOverlay,
46
- params.isVariant
46
+ params.isVariant,
47
+ params.options
47
48
  );
48
49
  }
49
50
  async function handleBuilderInteraction(params) {
@@ -158,6 +159,7 @@ function isSameSelectedElement(previousSelectedElement, editableElement, params)
158
159
  return !!(previousSelectedElement && previousSelectedElement === editableElement && !params.reEvaluate);
159
160
  }
160
161
  function addOverlayAndToolbar(params, eventDetails, editableElement, isVariant) {
162
+ VisualBuilder.VisualBuilderGlobalState.value.isFocussed = true;
161
163
  addOverlay({
162
164
  overlayWrapper: params.overlayWrapper,
163
165
  resizeObserver: params.resizeObserver,
@@ -237,6 +239,7 @@ function observeEditableElementChanges(params, editableElement) {
237
239
  var mouseClick_default = handleBuilderInteraction;
238
240
  export {
239
241
  addFocusedToolbar,
240
- mouseClick_default as default
242
+ mouseClick_default as default,
243
+ handleBuilderInteraction
241
244
  };
242
245
  //# sourceMappingURL=mouseClick.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseClick.ts"],"sourcesContent":["import {\n cleanIndividualFieldResidual,\n handleIndividualFields,\n} from \"../utils/handleIndividualFields\";\n\nimport {\n getCsDataOfElement,\n getDOMEditStack,\n} from \"../utils/getCsDataOfElement\";\n\nimport { appendFocusedToolbar } from \"../generators/generateToolbar\";\n\nimport { addFocusOverlay, hideOverlay } from \"../generators/generateOverlay\";\n\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\n\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\n\nimport { VisualBuilder } from \"..\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport EventListenerHandlerParams from \"./types\";\nimport { toggleHighlightedCommentIconDisplay } from \"../generators/generateHighlightedComment\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport { getFieldVariantStatus } from \"../components/FieldRevert/FieldRevertComponent\";\nimport getXPath from \"get-xpath\";\nimport Config from \"../../configManager/configManager\";\nimport { generateThread } from \"../generators/generateThread\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { toggleCollabPopup } from \"../generators/generateThread\";\nimport { fixSvgXPath } from \"../utils/collabUtils\";\nimport { v4 as uuidV4 } from \"uuid\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\n\ntype HandleBuilderInteractionParams = Omit<\n EventListenerHandlerParams,\n \"eventDetails\" | \"customCursor\"\n> & { reEvaluate?: boolean };\n\ntype AddFocusOverlayParams = Pick<\n EventListenerHandlerParams,\n \"overlayWrapper\" | \"resizeObserver\"\n> & { editableElement: Element; isFieldDisabled?: boolean };\n\ntype AddFocusedToolbarParams = Pick<\n EventListenerHandlerParams,\n \"eventDetails\" | \"focusedToolbar\"\n> & { hideOverlay: () => void; isVariant: boolean };\n\nfunction addOverlay(params: AddFocusOverlayParams) {\n if (!params.overlayWrapper || !params.editableElement) return;\n\n addFocusOverlay(\n params.editableElement,\n params.overlayWrapper,\n params.isFieldDisabled\n );\n params.resizeObserver.observe(params.editableElement);\n}\n\nexport function addFocusedToolbar(params: AddFocusedToolbarParams): void {\n const { editableElement } = params.eventDetails;\n\n if (!editableElement || !params.focusedToolbar) return;\n\n appendFocusedToolbar(\n params.eventDetails,\n params.focusedToolbar,\n params.hideOverlay,\n params.isVariant\n );\n}\n\nasync function handleBuilderInteraction(\n params: HandleBuilderInteractionParams\n): Promise<void> {\n const eventTarget = params.event.target as HTMLElement | null;\n const isAnchorElement = eventTarget instanceof HTMLAnchorElement;\n const elementHasCslp =\n eventTarget &&\n (eventTarget.hasAttribute(\"data-cslp\") ||\n eventTarget.closest(\"[data-cslp]\"));\n\n // if multiple elements with the same cslp element are found,\n // assign a unique ID to each element which we can use to identify\n // them in updateFocussedState and other places where we\n // would have queried the element by data-cslp\n const duplicates = document.querySelectorAll(\n `[data-cslp=\"${eventTarget?.getAttribute(\"data-cslp\")}\"]`\n );\n if (duplicates.length > 1) {\n duplicates.forEach((ele) => {\n if (!ele.hasAttribute(\"data-cslp-unique-id\")) {\n const uniqueId = `cslp-${uuidV4()}`;\n ele.setAttribute(\"data-cslp-unique-id\", uniqueId);\n }\n });\n }\n\n // if the target element is a studio-ui element, return\n // this is currently used for the \"Edit in Studio\" button\n if (eventTarget?.getAttribute(\"data-studio-ui\") === \"true\") {\n return;\n }\n\n if (params.event.altKey) {\n if (isAnchorElement) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n return;\n }\n // prevent default behavior for anchor elements and elements with cslp attribute\n if (\n isAnchorElement ||\n (elementHasCslp && !eventTarget.closest(\".visual-builder__empty-block\"))\n ) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n const config = Config.get();\n\n if (config?.collab.enable === true) {\n if (config?.collab.pauseFeedback) return;\n const xpath = fixSvgXPath(getXPath(eventTarget));\n if (!eventTarget) return;\n\n const rect = eventTarget.getBoundingClientRect();\n const relativeX = (params.event.clientX - rect.left) / rect.width;\n const relativeY = (params.event.clientY - rect.top) / rect.height;\n\n if (!isCollabThread(eventTarget)) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n if (isCollabThread(eventTarget)) {\n Config.set(\"collab.isFeedbackMode\", false);\n } else if (config?.collab.isFeedbackMode) {\n generateThread(\n { xpath, relativeX, relativeY },\n {\n isNewThread: true,\n updateConfig: true,\n }\n );\n } else {\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n Config.set(\"collab.isFeedbackMode\", true);\n }\n return;\n }\n\n const eventDetails = getCsDataOfElement(params.event);\n\n // Send mouse click post message\n sendMouseClickPostMessage(eventDetails);\n\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer\n ) {\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const variantStatus = await getFieldVariantStatus(fieldMetadata);\n const isVariant = variantStatus\n ? Object.values(variantStatus).some((value) => value === true)\n : false;\n\n // Clean residuals if necessary\n cleanResidualsIfNeeded(params, editableElement);\n\n // Return if the selected element is an empty block\n if (isEmptyBlockElement(editableElement)) {\n return;\n }\n\n // when previous and current selected element is same, return.\n // this also avoids inserting psuedo-editable field (field data is\n // not equal to text content in DOM) when performing mouse\n // selections in the content editable\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n isSameSelectedElement(previousSelectedElement, editableElement, params)\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM =\n editableElement;\n\n // Add overlay and focused toolbar\n addOverlayAndToolbar(params, eventDetails, editableElement, isVariant);\n\n const { cslpValue } = fieldMetadata;\n\n toggleHighlightedCommentIconDisplay(cslpValue, false);\n\n // Handle field schema and individual fields\n await handleFieldSchemaAndIndividualFields(\n params,\n eventDetails,\n fieldMetadata,\n editableElement,\n previousSelectedElement\n );\n\n // Observe changes to the editable element\n observeEditableElementChanges(params, editableElement);\n}\n\nfunction sendMouseClickPostMessage(eventDetails: any) {\n visualBuilderPostMessage\n ?.send(VisualBuilderPostMessageEvents.MOUSE_CLICK, {\n cslpData: eventDetails?.cslpData,\n fieldMetadata: eventDetails?.fieldMetadata,\n })\n .catch((err) => {\n console.warn(\"Error while sending post message\", err);\n });\n}\nfunction cleanResidualsIfNeeded(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n (previousSelectedElement &&\n previousSelectedElement !== editableElement) ||\n params.reEvaluate\n ) {\n cleanIndividualFieldResidual({\n overlayWrapper: params.overlayWrapper!,\n visualBuilderContainer: params.visualBuilderContainer,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n}\nfunction isEmptyBlockElement(editableElement: Element): boolean {\n return (\n editableElement.classList.contains(VB_EmptyBlockParentClass) ||\n editableElement.classList.contains(\"visual-builder__empty-block\")\n );\n}\n\nfunction isSameSelectedElement(\n previousSelectedElement: Element | null,\n editableElement: Element,\n params: HandleBuilderInteractionParams\n): boolean {\n return !!(\n previousSelectedElement &&\n previousSelectedElement === editableElement &&\n !params.reEvaluate\n );\n}\n\nfunction addOverlayAndToolbar(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n editableElement: Element,\n isVariant: boolean\n) {\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n });\n\n addFocusedToolbar({\n eventDetails: eventDetails,\n focusedToolbar: params.focusedToolbar,\n hideOverlay: () => {\n hideOverlay({\n visualBuilderContainer: params.visualBuilderContainer,\n visualBuilderOverlayWrapper: params.overlayWrapper,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n },\n isVariant,\n });\n}\nasync function handleFieldSchemaAndIndividualFields(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n fieldMetadata: any,\n editableElement: Element,\n previousSelectedElement: Element | null\n) {\n const { content_type_uid, entry_uid, fieldPath, locale } = fieldMetadata;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n let entryAcl;\n try {\n entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n } catch (error) {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n return;\n }\n\n if (fieldSchema) {\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n if (isDisabled) {\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n isFieldDisabled: true,\n });\n }\n }\n\n visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.FOCUS_FIELD, {\n DOMEditStack: getDOMEditStack(editableElement),\n });\n\n await handleIndividualFields(eventDetails, {\n visualBuilderContainer: params.visualBuilderContainer!,\n resizeObserver: params.resizeObserver,\n lastEditedField: previousSelectedElement,\n });\n}\nfunction observeEditableElementChanges(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const focusElementObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-cslp\"\n ) {\n focusElementObserver?.disconnect();\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n null;\n handleBuilderInteraction({ ...params, reEvaluate: true });\n }\n });\n });\n\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n focusElementObserver;\n focusElementObserver.observe(editableElement, { attributes: true });\n}\n\nexport default handleBuilderInteraction;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseClick.ts"],"sourcesContent":["import {\n cleanIndividualFieldResidual,\n handleIndividualFields,\n} from \"../utils/handleIndividualFields\";\n\nimport {\n getCsDataOfElement,\n getDOMEditStack,\n} from \"../utils/getCsDataOfElement\";\n\nimport { appendFocusedToolbar } from \"../generators/generateToolbar\";\n\nimport { addFocusOverlay, hideOverlay } from \"../generators/generateOverlay\";\n\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\n\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\n\nimport { VisualBuilder } from \"..\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport EventListenerHandlerParams from \"./types\";\nimport { toggleHighlightedCommentIconDisplay } from \"../generators/generateHighlightedComment\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport { getFieldVariantStatus } from \"../components/FieldRevert/FieldRevertComponent\";\nimport getXPath from \"get-xpath\";\nimport Config from \"../../configManager/configManager\";\nimport { generateThread } from \"../generators/generateThread\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { toggleCollabPopup } from \"../generators/generateThread\";\nimport { fixSvgXPath } from \"../utils/collabUtils\";\nimport { v4 as uuidV4 } from \"uuid\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\n\nexport type HandleBuilderInteractionParams = Omit<\n EventListenerHandlerParams,\n \"eventDetails\" | \"customCursor\"\n> & { reEvaluate?: boolean };\n\ntype AddFocusOverlayParams = Pick<\n EventListenerHandlerParams,\n \"overlayWrapper\" | \"resizeObserver\"\n> & { editableElement: Element; isFieldDisabled?: boolean };\n\ntype AddFocusedToolbarParams = Pick<\n EventListenerHandlerParams,\n \"eventDetails\" | \"focusedToolbar\"\n> & { hideOverlay: () => void; isVariant: boolean, options?: { isHover?: boolean } };\n\nfunction addOverlay(params: AddFocusOverlayParams) {\n if (!params.overlayWrapper || !params.editableElement) return;\n\n addFocusOverlay(\n params.editableElement,\n params.overlayWrapper,\n params.isFieldDisabled\n );\n params.resizeObserver.observe(params.editableElement);\n}\n\nexport function addFocusedToolbar(params: AddFocusedToolbarParams): void {\n const { editableElement } = params.eventDetails;\n\n if (!editableElement || !params.focusedToolbar) return;\n\n appendFocusedToolbar(\n params.eventDetails,\n params.focusedToolbar,\n params.hideOverlay,\n params.isVariant,\n params.options\n );\n}\n\nexport async function handleBuilderInteraction(\n params: HandleBuilderInteractionParams\n): Promise<void> {\n const eventTarget = params.event.target as HTMLElement | null;\n const isAnchorElement = eventTarget instanceof HTMLAnchorElement;\n const elementHasCslp =\n eventTarget &&\n (eventTarget.hasAttribute(\"data-cslp\") ||\n eventTarget.closest(\"[data-cslp]\"));\n\n // if multiple elements with the same cslp element are found,\n // assign a unique ID to each element which we can use to identify\n // them in updateFocussedState and other places where we\n // would have queried the element by data-cslp\n const duplicates = document.querySelectorAll(\n `[data-cslp=\"${eventTarget?.getAttribute(\"data-cslp\")}\"]`\n );\n if (duplicates.length > 1) {\n duplicates.forEach((ele) => {\n if (!ele.hasAttribute(\"data-cslp-unique-id\")) {\n const uniqueId = `cslp-${uuidV4()}`;\n ele.setAttribute(\"data-cslp-unique-id\", uniqueId);\n }\n });\n }\n\n // if the target element is a studio-ui element, return\n // this is currently used for the \"Edit in Studio\" button\n if (eventTarget?.getAttribute(\"data-studio-ui\") === \"true\") {\n return;\n }\n\n if (params.event.altKey) {\n if (isAnchorElement) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n return;\n }\n // prevent default behavior for anchor elements and elements with cslp attribute\n if (\n isAnchorElement ||\n (elementHasCslp && !eventTarget.closest(\".visual-builder__empty-block\"))\n ) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n const config = Config.get();\n\n if (config?.collab.enable === true) {\n if (config?.collab.pauseFeedback) return;\n const xpath = fixSvgXPath(getXPath(eventTarget));\n if (!eventTarget) return;\n\n const rect = eventTarget.getBoundingClientRect();\n const relativeX = (params.event.clientX - rect.left) / rect.width;\n const relativeY = (params.event.clientY - rect.top) / rect.height;\n\n if (!isCollabThread(eventTarget)) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n if (isCollabThread(eventTarget)) {\n Config.set(\"collab.isFeedbackMode\", false);\n } else if (config?.collab.isFeedbackMode) {\n generateThread(\n { xpath, relativeX, relativeY },\n {\n isNewThread: true,\n updateConfig: true,\n }\n );\n } else {\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n Config.set(\"collab.isFeedbackMode\", true);\n }\n return;\n }\n\n const eventDetails = getCsDataOfElement(params.event);\n\n // Send mouse click post message\n sendMouseClickPostMessage(eventDetails);\n\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer\n ) {\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const variantStatus = await getFieldVariantStatus(fieldMetadata);\n const isVariant = variantStatus\n ? Object.values(variantStatus).some((value) => value === true)\n : false;\n\n // Clean residuals if necessary\n cleanResidualsIfNeeded(params, editableElement);\n\n // Return if the selected element is an empty block\n if (isEmptyBlockElement(editableElement)) {\n return;\n }\n\n // when previous and current selected element is same, return.\n // this also avoids inserting psuedo-editable field (field data is\n // not equal to text content in DOM) when performing mouse\n // selections in the content editable\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n isSameSelectedElement(previousSelectedElement, editableElement, params)\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM =\n editableElement;\n\n // Add overlay and focused toolbar\n addOverlayAndToolbar(params, eventDetails, editableElement, isVariant);\n\n const { cslpValue } = fieldMetadata;\n\n toggleHighlightedCommentIconDisplay(cslpValue, false);\n\n // Handle field schema and individual fields\n await handleFieldSchemaAndIndividualFields(\n params,\n eventDetails,\n fieldMetadata,\n editableElement,\n previousSelectedElement\n );\n\n // Observe changes to the editable element\n observeEditableElementChanges(params, editableElement);\n}\n\nfunction sendMouseClickPostMessage(eventDetails: any) {\n visualBuilderPostMessage\n ?.send(VisualBuilderPostMessageEvents.MOUSE_CLICK, {\n cslpData: eventDetails?.cslpData,\n fieldMetadata: eventDetails?.fieldMetadata,\n })\n .catch((err) => {\n console.warn(\"Error while sending post message\", err);\n });\n}\nfunction cleanResidualsIfNeeded(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n (previousSelectedElement &&\n previousSelectedElement !== editableElement) ||\n params.reEvaluate\n ) {\n cleanIndividualFieldResidual({\n overlayWrapper: params.overlayWrapper!,\n visualBuilderContainer: params.visualBuilderContainer,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n}\nfunction isEmptyBlockElement(editableElement: Element): boolean {\n return (\n editableElement.classList.contains(VB_EmptyBlockParentClass) ||\n editableElement.classList.contains(\"visual-builder__empty-block\")\n );\n}\n\nfunction isSameSelectedElement(\n previousSelectedElement: Element | null,\n editableElement: Element,\n params: HandleBuilderInteractionParams\n): boolean {\n return !!(\n previousSelectedElement &&\n previousSelectedElement === editableElement &&\n !params.reEvaluate\n );\n}\n\nfunction addOverlayAndToolbar(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n editableElement: Element,\n isVariant: boolean\n) {\n VisualBuilder.VisualBuilderGlobalState.value.isFocussed = true;\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n });\n\n addFocusedToolbar({\n eventDetails: eventDetails,\n focusedToolbar: params.focusedToolbar,\n hideOverlay: () => {\n hideOverlay({\n visualBuilderContainer: params.visualBuilderContainer,\n visualBuilderOverlayWrapper: params.overlayWrapper,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n },\n isVariant,\n });\n}\nasync function handleFieldSchemaAndIndividualFields(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n fieldMetadata: any,\n editableElement: Element,\n previousSelectedElement: Element | null\n) {\n const { content_type_uid, entry_uid, fieldPath, locale } = fieldMetadata;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n let entryAcl;\n try {\n entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n } catch (error) {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n return;\n }\n\n if (fieldSchema) {\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n if (isDisabled) {\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n isFieldDisabled: true,\n });\n }\n }\n\n visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.FOCUS_FIELD, {\n DOMEditStack: getDOMEditStack(editableElement),\n });\n\n await handleIndividualFields(eventDetails, {\n visualBuilderContainer: params.visualBuilderContainer!,\n resizeObserver: params.resizeObserver,\n lastEditedField: previousSelectedElement,\n });\n}\nfunction observeEditableElementChanges(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const focusElementObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-cslp\"\n ) {\n focusElementObserver?.disconnect();\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n null;\n handleBuilderInteraction({ ...params, reEvaluate: true });\n }\n });\n });\n\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n focusElementObserver;\n focusElementObserver.observe(editableElement, { attributes: true });\n}\n\nexport default handleBuilderInteraction;\n"],"mappings":"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","names":[]}
@@ -33,7 +33,8 @@ __export(mouseHover_exports, {
33
33
  default: () => mouseHover_default,
34
34
  hideCustomCursor: () => hideCustomCursor,
35
35
  hideHoverOutline: () => hideHoverOutline,
36
- showCustomCursor: () => showCustomCursor
36
+ showCustomCursor: () => showCustomCursor,
37
+ showHoverToolbar: () => showHoverToolbar
37
38
  });
38
39
  module.exports = __toCommonJS(mouseHover_exports);
39
40
  var import_lodash_es = require("lodash-es");
@@ -50,6 +51,7 @@ var import__2 = require("../../index.cjs");
50
51
  var import_configManager = __toESM(require("../../configManager/configManager.cjs"), 1);
51
52
  var import_generateThread = require("../generators/generateThread.cjs");
52
53
  var import_getEntryPermissionsCached = require("../utils/getEntryPermissionsCached.cjs");
54
+ var import_generateToolbar = require("../generators/generateToolbar.cjs");
53
55
  var config = import_configManager.default.get();
54
56
  function resetCustomCursor(customCursor) {
55
57
  if (customCursor) {
@@ -74,10 +76,41 @@ function handleCursorPosition(event, customCursor) {
74
76
  customCursor.style.top = `${mouseY}px`;
75
77
  }
76
78
  }
77
- function addOutline(editableElement, isFieldDisabled2) {
79
+ function addOutline(params) {
80
+ if (!params) {
81
+ return;
82
+ }
83
+ const { editableElement, eventDetails, content_type_uid, fieldPath, fieldMetadata, fieldDisabled } = params;
78
84
  if (!editableElement) return;
79
- (0, import_generateHoverOutline.addHoverOutline)(editableElement, isFieldDisabled2);
85
+ (0, import_generateHoverOutline.addHoverOutline)(editableElement, fieldDisabled);
86
+ import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
87
+ (fieldSchema) => {
88
+ let entryAcl;
89
+ if (!fieldSchema) return;
90
+ (0, import_getEntryPermissionsCached.getEntryPermissionsCached)({
91
+ entryUid: fieldMetadata.entry_uid,
92
+ contentTypeUid: fieldMetadata.content_type_uid,
93
+ locale: fieldMetadata.locale
94
+ }).then((data) => {
95
+ entryAcl = data;
96
+ }).catch((error) => {
97
+ console.error(
98
+ "[Visual Builder] Error retrieving entry permissions:",
99
+ error
100
+ );
101
+ }).finally(() => {
102
+ const { isDisabled: fieldDisabled2 } = (0, import_isFieldDisabled.isFieldDisabled)(
103
+ fieldSchema,
104
+ eventDetails,
105
+ entryAcl
106
+ );
107
+ (0, import_generateHoverOutline.addHoverOutline)(editableElement, fieldDisabled2);
108
+ });
109
+ }
110
+ );
80
111
  }
112
+ var debouncedAddOutline = (0, import_lodash_es.debounce)(addOutline, 50, { trailing: true });
113
+ var showOutline = (params) => debouncedAddOutline(params);
81
114
  function hideDefaultCursor() {
82
115
  if (document?.body && !document.body.classList.contains(
83
116
  (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__default-cursor--disabled"]
@@ -118,6 +151,16 @@ function showCustomCursor(customCursor) {
118
151
  return;
119
152
  customCursor?.classList.add("visible");
120
153
  }
154
+ var debouncedRenderHoverToolbar = (0, import_lodash_es.debounce)(async (params) => {
155
+ const eventDetails = (0, import_getCsDataOfElement.getCsDataOfElement)(params.event);
156
+ if (!eventDetails || !params.overlayWrapper || !params.visualBuilderContainer || !params.focusedToolbar) {
157
+ return;
158
+ }
159
+ (0, import_generateToolbar.appendFieldPathDropdown)(eventDetails, params.focusedToolbar, {
160
+ isHover: true
161
+ });
162
+ }, 50, { trailing: true });
163
+ var showHoverToolbar = async (params) => await debouncedRenderHoverToolbar(params);
121
164
  function isOverlay(target) {
122
165
  return target.classList.contains("visual-builder__overlay");
123
166
  }
@@ -126,151 +169,161 @@ function isContentEditable(target) {
126
169
  return target.getAttribute("contenteditable") === "true";
127
170
  return false;
128
171
  }
129
- async function handleMouseHover(params) {
130
- (0, import_lodash_es.throttle)(async (params2) => {
131
- const eventDetails = (0, import_getCsDataOfElement.getCsDataOfElement)(params2.event);
132
- const eventTarget = params2.event.target;
133
- if (config?.collab.enable && config?.collab.pauseFeedback) {
134
- hideCustomCursor(params2.customCursor);
172
+ function isFieldPathDropdown(target) {
173
+ return target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper") || target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper__current-field");
174
+ }
175
+ function isFieldPathParent(target) {
176
+ return target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper__parent-field");
177
+ }
178
+ var throttledMouseHover = (0, import_lodash_es.throttle)(async (params) => {
179
+ const eventDetails = (0, import_getCsDataOfElement.getCsDataOfElement)(params.event);
180
+ const eventTarget = params.event.target;
181
+ if (config?.collab.enable && config?.collab.pauseFeedback) {
182
+ hideCustomCursor(params.customCursor);
183
+ return;
184
+ }
185
+ if (!eventDetails) {
186
+ if (eventTarget && (isOverlay(eventTarget) || isContentEditable(eventTarget) || (0, import_generateThread.isCollabThread)(eventTarget))) {
187
+ handleCursorPosition(params.event, params.customCursor);
188
+ hideCustomCursor(params.customCursor);
135
189
  return;
136
190
  }
137
- if (!eventDetails) {
138
- if (eventTarget && (isOverlay(eventTarget) || isContentEditable(eventTarget) || (0, import_generateThread.isCollabThread)(eventTarget))) {
139
- handleCursorPosition(params2.event, params2.customCursor);
140
- hideCustomCursor(params2.customCursor);
141
- return;
142
- }
143
- if (!config?.collab.enable) {
144
- resetCustomCursor(params2.customCursor);
145
- }
146
- (0, import_multipleElementAddButton.removeAddInstanceButtons)({
147
- eventTarget: params2.event.target,
148
- visualBuilderContainer: params2.visualBuilderContainer,
149
- overlayWrapper: params2.overlayWrapper
191
+ if (eventTarget && (isFieldPathDropdown(eventTarget) || isFieldPathParent(eventTarget))) {
192
+ params.customCursor && hideCustomCursor(params.customCursor);
193
+ showOutline();
194
+ showHoverToolbar({
195
+ event: params.event,
196
+ overlayWrapper: params.overlayWrapper,
197
+ visualBuilderContainer: params.visualBuilderContainer,
198
+ previousSelectedEditableDOM: import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM,
199
+ focusedToolbar: params.focusedToolbar,
200
+ resizeObserver: params.resizeObserver
150
201
  });
151
- handleCursorPosition(params2.event, params2.customCursor);
152
- if (config?.collab.enable && config?.collab.isFeedbackMode) {
153
- showCustomCursor(params2.customCursor);
154
- collabCustomCursor(params2.customCursor);
202
+ }
203
+ if (!config?.collab.enable) {
204
+ resetCustomCursor(params.customCursor);
205
+ }
206
+ (0, import_multipleElementAddButton.removeAddInstanceButtons)({
207
+ eventTarget: params.event.target,
208
+ visualBuilderContainer: params.visualBuilderContainer,
209
+ overlayWrapper: params.overlayWrapper
210
+ });
211
+ handleCursorPosition(params.event, params.customCursor);
212
+ if (config?.collab.enable && config?.collab.isFeedbackMode) {
213
+ showCustomCursor(params.customCursor);
214
+ collabCustomCursor(params.customCursor);
215
+ }
216
+ return;
217
+ }
218
+ const { editableElement, fieldMetadata } = eventDetails;
219
+ const { content_type_uid, fieldPath } = fieldMetadata;
220
+ if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM && import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(
221
+ editableElement
222
+ )) {
223
+ hideCustomCursor(params.customCursor);
224
+ return;
225
+ }
226
+ if (params.customCursor) {
227
+ const elementUnderCursor = document.elementFromPoint(
228
+ params.event.clientX,
229
+ params.event.clientY
230
+ );
231
+ if (elementUnderCursor) {
232
+ if (elementUnderCursor.nodeName === "A" || elementUnderCursor.nodeName === "BUTTON") {
233
+ elementUnderCursor.classList.add(
234
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__no-cursor-style"]
235
+ );
155
236
  }
156
- return;
157
237
  }
158
- const { editableElement, fieldMetadata } = eventDetails;
159
- const { content_type_uid, fieldPath } = fieldMetadata;
160
- if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM && import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(
161
- editableElement
162
- )) {
163
- hideCustomCursor(params2.customCursor);
238
+ if (config?.collab.enable && config?.collab.isFeedbackMode) {
239
+ collabCustomCursor(params.customCursor);
240
+ handleCursorPosition(params.event, params.customCursor);
241
+ showCustomCursor(params.customCursor);
164
242
  return;
243
+ } else if (config?.collab.enable && !config?.collab.isFeedbackMode) {
244
+ hideCustomCursor(params.customCursor);
245
+ return;
246
+ }
247
+ if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM !== editableElement) {
248
+ resetCustomCursor(params.customCursor);
249
+ (0, import_multipleElementAddButton.removeAddInstanceButtons)({
250
+ eventTarget: params.event.target,
251
+ visualBuilderContainer: params.visualBuilderContainer,
252
+ overlayWrapper: params.overlayWrapper
253
+ });
165
254
  }
166
- if (params2.customCursor) {
167
- const elementUnderCursor = document.elementFromPoint(
168
- params2.event.clientX,
169
- params2.event.clientY
170
- );
171
- if (elementUnderCursor) {
172
- if (elementUnderCursor.nodeName === "A" || elementUnderCursor.nodeName === "BUTTON") {
173
- elementUnderCursor.classList.add(
174
- (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__no-cursor-style"]
255
+ if (!import_fieldSchemaMap.FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {
256
+ (0, import_generateCustomCursor.generateCustomCursor)({
257
+ fieldType: "loading",
258
+ customCursor: params.customCursor
259
+ });
260
+ }
261
+ import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
262
+ (fieldSchema) => {
263
+ if (!fieldSchema) return;
264
+ let entryAcl;
265
+ (0, import_getEntryPermissionsCached.getEntryPermissionsCached)({
266
+ entryUid: fieldMetadata.entry_uid,
267
+ contentTypeUid: fieldMetadata.content_type_uid,
268
+ locale: fieldMetadata.locale
269
+ }).then((data) => {
270
+ entryAcl = data;
271
+ }).catch((error) => {
272
+ console.error(
273
+ "[Visual Builder] Error retrieving entry permissions:",
274
+ error
175
275
  );
176
- }
177
- }
178
- if (config?.collab.enable && config?.collab.isFeedbackMode) {
179
- collabCustomCursor(params2.customCursor);
180
- handleCursorPosition(params2.event, params2.customCursor);
181
- showCustomCursor(params2.customCursor);
182
- return;
183
- } else if (config?.collab.enable && !config?.collab.isFeedbackMode) {
184
- hideCustomCursor(params2.customCursor);
185
- return;
186
- }
187
- if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM !== editableElement) {
188
- resetCustomCursor(params2.customCursor);
189
- (0, import_multipleElementAddButton.removeAddInstanceButtons)({
190
- eventTarget: params2.event.target,
191
- visualBuilderContainer: params2.visualBuilderContainer,
192
- overlayWrapper: params2.overlayWrapper
193
- });
194
- }
195
- if (!import_fieldSchemaMap.FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {
196
- (0, import_generateCustomCursor.generateCustomCursor)({
197
- fieldType: "loading",
198
- customCursor: params2.customCursor
276
+ }).finally(() => {
277
+ if (!params.customCursor) return;
278
+ const { isDisabled: fieldDisabled } = (0, import_isFieldDisabled.isFieldDisabled)(
279
+ fieldSchema,
280
+ eventDetails,
281
+ entryAcl
282
+ );
283
+ const fieldType = (0, import_getFieldType.getFieldType)(fieldSchema);
284
+ (0, import_generateCustomCursor.generateCustomCursor)({
285
+ fieldType,
286
+ customCursor: params.customCursor,
287
+ fieldDisabled
288
+ });
199
289
  });
200
290
  }
201
- import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
202
- (fieldSchema) => {
203
- if (!fieldSchema) return;
204
- let entryAcl;
205
- (0, import_getEntryPermissionsCached.getEntryPermissionsCached)({
206
- entryUid: fieldMetadata.entry_uid,
207
- contentTypeUid: fieldMetadata.content_type_uid,
208
- locale: fieldMetadata.locale
209
- }).then((data) => {
210
- entryAcl = data;
211
- }).catch((error) => {
212
- console.error(
213
- "[Visual Builder] Error retrieving entry permissions:",
214
- error
215
- );
216
- }).finally(() => {
217
- if (!params2.customCursor) return;
218
- const { isDisabled: fieldDisabled } = (0, import_isFieldDisabled.isFieldDisabled)(
219
- fieldSchema,
220
- eventDetails,
221
- entryAcl
222
- );
223
- const fieldType = (0, import_getFieldType.getFieldType)(fieldSchema);
224
- (0, import_generateCustomCursor.generateCustomCursor)({
225
- fieldType,
226
- customCursor: params2.customCursor,
227
- fieldDisabled
228
- });
229
- });
230
- }
231
- );
232
- handleCursorPosition(params2.event, params2.customCursor);
233
- showCustomCursor(params2.customCursor);
234
- }
235
- if (!editableElement.classList.contains(import__2.VB_EmptyBlockParentClass) && !editableElement.classList.contains("visual-builder__empty-block")) {
236
- addOutline(editableElement);
237
- import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
238
- (fieldSchema) => {
239
- let entryAcl;
240
- if (!fieldSchema) return;
241
- (0, import_getEntryPermissionsCached.getEntryPermissionsCached)({
242
- entryUid: fieldMetadata.entry_uid,
243
- contentTypeUid: fieldMetadata.content_type_uid,
244
- locale: fieldMetadata.locale
245
- }).then((data) => {
246
- entryAcl = data;
247
- }).catch((error) => {
248
- console.error(
249
- "[Visual Builder] Error retrieving entry permissions:",
250
- error
251
- );
252
- }).finally(() => {
253
- const { isDisabled: fieldDisabled } = (0, import_isFieldDisabled.isFieldDisabled)(
254
- fieldSchema,
255
- eventDetails,
256
- entryAcl
257
- );
258
- addOutline(editableElement, fieldDisabled);
259
- });
260
- }
261
- );
262
- }
263
- if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM === editableElement) {
264
- return;
291
+ );
292
+ handleCursorPosition(params.event, params.customCursor);
293
+ showCustomCursor(params.customCursor);
294
+ }
295
+ if (!editableElement.classList.contains(import__2.VB_EmptyBlockParentClass) && !editableElement.classList.contains("visual-builder__empty-block")) {
296
+ showOutline({
297
+ editableElement,
298
+ eventDetails,
299
+ content_type_uid,
300
+ fieldPath,
301
+ fieldMetadata
302
+ });
303
+ const isFocussed = import__.VisualBuilder.VisualBuilderGlobalState.value.isFocussed;
304
+ if (!isFocussed) {
305
+ showHoverToolbar({
306
+ event: params.event,
307
+ overlayWrapper: params.overlayWrapper,
308
+ visualBuilderContainer: params.visualBuilderContainer,
309
+ previousSelectedEditableDOM: import__.VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM,
310
+ focusedToolbar: params.focusedToolbar,
311
+ resizeObserver: params.resizeObserver
312
+ });
265
313
  }
266
- import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM = editableElement;
267
- }, 10)(params);
268
- }
314
+ }
315
+ if (import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM === editableElement) {
316
+ return;
317
+ }
318
+ import__.VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM = editableElement;
319
+ }, 10);
320
+ var handleMouseHover = async (params) => await throttledMouseHover(params);
269
321
  var mouseHover_default = handleMouseHover;
270
322
  // Annotate the CommonJS export names for ESM import in node:
271
323
  0 && (module.exports = {
272
324
  hideCustomCursor,
273
325
  hideHoverOutline,
274
- showCustomCursor
326
+ showCustomCursor,
327
+ showHoverToolbar
275
328
  });
276
329
  //# sourceMappingURL=mouseHover.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseHover.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { getCsDataOfElement } from \"../utils/getCsDataOfElement\";\nimport { removeAddInstanceButtons } from \"../utils/multipleElementAddButton\";\nimport { generateCustomCursor } from \"../generators/generateCustomCursor\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport { getFieldType } from \"../utils/getFieldType\";\n\nimport EventListenerHandlerParams from \"./types\";\nimport { VisualBuilder } from \"..\";\nimport { addHoverOutline } from \"../generators/generateHoverOutline\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport Config from \"../../configManager/configManager\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { EntryPermissions } from \"../utils/getEntryPermissions\";\n\nconst config = Config.get();\nexport interface HandleMouseHoverParams\n extends Pick<\n EventListenerHandlerParams,\n \"event\" | \"overlayWrapper\" | \"visualBuilderContainer\"\n > {\n customCursor: HTMLDivElement | null;\n}\n\nfunction resetCustomCursor(customCursor: HTMLDivElement | null): void {\n if (customCursor) {\n generateCustomCursor({\n fieldType: \"empty\",\n customCursor: customCursor,\n });\n }\n}\n\nfunction collabCustomCursor(customCursor: HTMLDivElement | null): void {\n if (!customCursor) return;\n\n generateCustomCursor({\n fieldType: \"discussion\",\n customCursor: customCursor,\n });\n}\n\nfunction handleCursorPosition(\n event: MouseEvent,\n customCursor: HTMLDivElement | null\n): void {\n if (customCursor) {\n const mouseY = event.clientY;\n const mouseX = event.clientX;\n\n customCursor.style.left = `${mouseX}px`;\n customCursor.style.top = `${mouseY}px`;\n }\n}\n\nfunction addOutline(editableElement: Element, isFieldDisabled?: boolean): void {\n if (!editableElement) return;\n\n addHoverOutline(editableElement as HTMLElement, isFieldDisabled);\n}\n\nfunction hideDefaultCursor(): void {\n if (\n document?.body &&\n !document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.add(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nfunction showDefaultCursor(): void {\n if (\n document?.body &&\n document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.remove(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nexport function hideHoverOutline(\n visualBuilderContainer: HTMLDivElement | null\n): void {\n if (!visualBuilderContainer) {\n return;\n }\n const hoverOutline = visualBuilderContainer.querySelector(\n \".visual-builder__hover-outline\"\n );\n if (!hoverOutline) {\n return;\n }\n hoverOutline.classList.add(\n visualBuilderStyles()[\"visual-builder__hover-outline--hidden\"]\n );\n}\n\nexport function hideCustomCursor(customCursor: HTMLDivElement | null): void {\n showDefaultCursor();\n customCursor?.classList.remove(\"visible\");\n}\n\nexport function showCustomCursor(customCursor: HTMLDivElement | null): void {\n hideDefaultCursor();\n if (\n config.collab.enable &&\n (!config.collab.isFeedbackMode || config.collab.pauseFeedback)\n )\n return;\n customCursor?.classList.add(\"visible\");\n}\n\nfunction isOverlay(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__overlay\");\n}\n\nfunction isContentEditable(target: HTMLElement): boolean {\n if (target.hasAttribute(\"contenteditable\"))\n return target.getAttribute(\"contenteditable\") === \"true\";\n return false;\n}\n\nasync function handleMouseHover(params: HandleMouseHoverParams): Promise<void> {\n throttle(async (params: HandleMouseHoverParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n const eventTarget = params.event.target as HTMLElement | null;\n\n if (config?.collab.enable && config?.collab.pauseFeedback) {\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!eventDetails) {\n if (\n eventTarget &&\n (isOverlay(eventTarget) ||\n isContentEditable(eventTarget) ||\n isCollabThread(eventTarget))\n ) {\n handleCursorPosition(params.event, params.customCursor);\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!config?.collab.enable) {\n resetCustomCursor(params.customCursor);\n }\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n handleCursorPosition(params.event, params.customCursor);\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n showCustomCursor(params.customCursor);\n collabCustomCursor(params.customCursor);\n }\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const { content_type_uid, fieldPath } = fieldMetadata;\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM &&\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(\n editableElement\n )\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (params.customCursor) {\n const elementUnderCursor = document.elementFromPoint(\n params.event.clientX,\n params.event.clientY\n );\n if (elementUnderCursor) {\n if (\n elementUnderCursor.nodeName === \"A\" ||\n elementUnderCursor.nodeName === \"BUTTON\"\n ) {\n elementUnderCursor.classList.add(\n visualBuilderStyles()[\"visual-builder__no-cursor-style\"]\n );\n }\n }\n\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n collabCustomCursor(params.customCursor);\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n return;\n } else if (\n config?.collab.enable &&\n !config?.collab.isFeedbackMode\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n resetCustomCursor(params.customCursor);\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n }\n\n if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {\n generateCustomCursor({\n fieldType: \"loading\",\n customCursor: params.customCursor,\n });\n }\n\n /**\n * We called it seperately inside the code block to ensure that\n * the code will not wait for the promise to resolve.\n * If we get a cache miss, we will send a message to the iframe\n * without blocking the code.\n */\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n if (!fieldSchema) return;\n\n let entryAcl: EntryPermissions | undefined;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n if (!params.customCursor) return;\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor: params.customCursor,\n fieldDisabled,\n });\n });\n }\n );\n\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n }\n\n if (\n !editableElement.classList.contains(VB_EmptyBlockParentClass) &&\n !editableElement.classList.contains(\"visual-builder__empty-block\")\n ) {\n addOutline(editableElement);\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n let entryAcl: EntryPermissions | undefined;\n if (!fieldSchema) return;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n addOutline(editableElement, fieldDisabled);\n });\n }\n );\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n }, 10)(params);\n}\n\nexport default handleMouseHover;\n"],"mappings":"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","names":["import__","Config","isFieldDisabled","params"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseHover.ts"],"sourcesContent":["import { debounce, throttle } from \"lodash-es\";\nimport { getCsDataOfElement } from \"../utils/getCsDataOfElement\";\nimport { removeAddInstanceButtons } from \"../utils/multipleElementAddButton\";\nimport { generateCustomCursor } from \"../generators/generateCustomCursor\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport { getFieldType } from \"../utils/getFieldType\";\n\nimport EventListenerHandlerParams from \"./types\";\nimport { VisualBuilder } from \"..\";\nimport { addHoverOutline } from \"../generators/generateHoverOutline\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport Config from \"../../configManager/configManager\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { EntryPermissions } from \"../utils/getEntryPermissions\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { HandleBuilderInteractionParams } from \"./mouseClick\";\nimport { appendFieldPathDropdown, removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\n\nconst config = Config.get();\nexport interface HandleMouseHoverParams\n extends Pick<\n EventListenerHandlerParams,\n \"event\" | \"overlayWrapper\" | \"visualBuilderContainer\" | \"focusedToolbar\" | \"resizeObserver\"\n > {\n customCursor: HTMLDivElement | null;\n}\n\ninterface AddOutlineParams {\n editableElement: Element;\n eventDetails: VisualBuilderCslpEventDetails;\n content_type_uid: string;\n fieldPath: string;\n fieldDisabled?: boolean;\n fieldMetadata: CslpData;\n}\n\nfunction resetCustomCursor(customCursor: HTMLDivElement | null): void {\n if (customCursor) {\n generateCustomCursor({\n fieldType: \"empty\",\n customCursor: customCursor,\n });\n }\n}\n\nfunction collabCustomCursor(customCursor: HTMLDivElement | null): void {\n if (!customCursor) return;\n\n generateCustomCursor({\n fieldType: \"discussion\",\n customCursor: customCursor,\n });\n}\n\nfunction handleCursorPosition(\n event: MouseEvent,\n customCursor: HTMLDivElement | null\n): void {\n if (customCursor) {\n const mouseY = event.clientY;\n const mouseX = event.clientX;\n\n customCursor.style.left = `${mouseX}px`;\n customCursor.style.top = `${mouseY}px`;\n }\n}\n\nfunction addOutline(params?: AddOutlineParams): void {\n if(!params) {\n return;\n }\n const { editableElement, eventDetails, content_type_uid, fieldPath, fieldMetadata, fieldDisabled } = params;\n if (!editableElement) return;\n addHoverOutline(editableElement as HTMLElement, fieldDisabled);\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n let entryAcl: EntryPermissions | undefined;\n if (!fieldSchema) return;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n addHoverOutline(editableElement, fieldDisabled);\n });\n }\n );\n}\n\nconst debouncedAddOutline = debounce(addOutline, 50, { trailing: true });\nconst showOutline = (params?: AddOutlineParams): void => debouncedAddOutline(params);\n\nfunction hideDefaultCursor(): void {\n if (\n document?.body &&\n !document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.add(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nfunction showDefaultCursor(): void {\n if (\n document?.body &&\n document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.remove(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nexport function hideHoverOutline(\n visualBuilderContainer: HTMLDivElement | null\n): void {\n if (!visualBuilderContainer) {\n return;\n }\n const hoverOutline = visualBuilderContainer.querySelector(\n \".visual-builder__hover-outline\"\n );\n if (!hoverOutline) {\n return;\n }\n hoverOutline.classList.add(\n visualBuilderStyles()[\"visual-builder__hover-outline--hidden\"]\n );\n}\n\nexport function hideCustomCursor(customCursor: HTMLDivElement | null): void {\n showDefaultCursor();\n customCursor?.classList.remove(\"visible\");\n}\n\nexport function showCustomCursor(customCursor: HTMLDivElement | null): void {\n hideDefaultCursor();\n if (\n config.collab.enable &&\n (!config.collab.isFeedbackMode || config.collab.pauseFeedback)\n )\n return;\n customCursor?.classList.add(\"visible\");\n}\n\nconst debouncedRenderHoverToolbar = debounce(async (params: HandleBuilderInteractionParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer ||\n !params.focusedToolbar\n ) {\n return;\n }\n\n appendFieldPathDropdown(eventDetails, params.focusedToolbar, {\n isHover: true\n });\n}, 50, { trailing: true });\n\nexport const showHoverToolbar = async (params: HandleBuilderInteractionParams) => await debouncedRenderHoverToolbar(params);\n\nfunction isOverlay(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__overlay\");\n}\n\nfunction isContentEditable(target: HTMLElement): boolean {\n if (target.hasAttribute(\"contenteditable\"))\n return target.getAttribute(\"contenteditable\") === \"true\";\n return false;\n}\n\nfunction isFieldPathDropdown(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper\") || target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper__current-field\");\n}\n\nfunction isFieldPathParent(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper__parent-field\");\n}\n\nconst throttledMouseHover = throttle(async (params: HandleMouseHoverParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n const eventTarget = params.event.target as HTMLElement | null;\n\n if (config?.collab.enable && config?.collab.pauseFeedback) {\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!eventDetails) {\n if (\n eventTarget &&\n (isOverlay(eventTarget) ||\n isContentEditable(eventTarget) ||\n isCollabThread(eventTarget))\n ) {\n handleCursorPosition(params.event, params.customCursor);\n hideCustomCursor(params.customCursor);\n return;\n }\n if(\n eventTarget &&\n (isFieldPathDropdown(eventTarget) || isFieldPathParent(eventTarget))\n ) {\n params.customCursor && hideCustomCursor(params.customCursor);\n showOutline();\n showHoverToolbar({\n event: params.event,\n overlayWrapper: params.overlayWrapper,\n visualBuilderContainer: params.visualBuilderContainer,\n previousSelectedEditableDOM:\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n if (!config?.collab.enable) {\n resetCustomCursor(params.customCursor);\n }\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n handleCursorPosition(params.event, params.customCursor);\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n showCustomCursor(params.customCursor);\n collabCustomCursor(params.customCursor);\n }\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const { content_type_uid, fieldPath } = fieldMetadata;\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM &&\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(\n editableElement\n )\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (params.customCursor) {\n const elementUnderCursor = document.elementFromPoint(\n params.event.clientX,\n params.event.clientY\n );\n if (elementUnderCursor) {\n if (\n elementUnderCursor.nodeName === \"A\" ||\n elementUnderCursor.nodeName === \"BUTTON\"\n ) {\n elementUnderCursor.classList.add(\n visualBuilderStyles()[\"visual-builder__no-cursor-style\"]\n );\n }\n }\n\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n collabCustomCursor(params.customCursor);\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n return;\n } else if (\n config?.collab.enable &&\n !config?.collab.isFeedbackMode\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n resetCustomCursor(params.customCursor);\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n }\n\n if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {\n generateCustomCursor({\n fieldType: \"loading\",\n customCursor: params.customCursor,\n });\n }\n\n /**\n * We called it seperately inside the code block to ensure that\n * the code will not wait for the promise to resolve.\n * If we get a cache miss, we will send a message to the iframe\n * without blocking the code.\n */\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n if (!fieldSchema) return;\n\n let entryAcl: EntryPermissions | undefined;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n if (!params.customCursor) return;\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor: params.customCursor,\n fieldDisabled,\n });\n });\n }\n );\n\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n }\n\n if (\n !editableElement.classList.contains(VB_EmptyBlockParentClass) &&\n !editableElement.classList.contains(\"visual-builder__empty-block\")\n ) {\n showOutline({\n editableElement,\n eventDetails,\n content_type_uid,\n fieldPath,\n fieldMetadata,\n });\n const isFocussed= VisualBuilder.VisualBuilderGlobalState.value.isFocussed;\n if(!isFocussed) {\n showHoverToolbar({\n event: params.event,\n overlayWrapper: params.overlayWrapper,\n visualBuilderContainer: params.visualBuilderContainer,\n previousSelectedEditableDOM:\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n}, 10);\n\nconst handleMouseHover = async (params: HandleMouseHoverParams): Promise<void> => await throttledMouseHover(params);\n\nexport default handleMouseHover;\n"],"mappings":"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","names":["import__","Config","fieldDisabled"]}
@@ -1,13 +1,15 @@
1
1
  import EventListenerHandlerParams from './types.cjs';
2
+ import { HandleBuilderInteractionParams } from './mouseClick.cjs';
2
3
  import '../types/visualBuilder.types.cjs';
3
4
  import '../../cslp/types/cslp.types.cjs';
4
5
 
5
- interface HandleMouseHoverParams extends Pick<EventListenerHandlerParams, "event" | "overlayWrapper" | "visualBuilderContainer"> {
6
+ interface HandleMouseHoverParams extends Pick<EventListenerHandlerParams, "event" | "overlayWrapper" | "visualBuilderContainer" | "focusedToolbar" | "resizeObserver"> {
6
7
  customCursor: HTMLDivElement | null;
7
8
  }
8
9
  declare function hideHoverOutline(visualBuilderContainer: HTMLDivElement | null): void;
9
10
  declare function hideCustomCursor(customCursor: HTMLDivElement | null): void;
10
11
  declare function showCustomCursor(customCursor: HTMLDivElement | null): void;
11
- declare function handleMouseHover(params: HandleMouseHoverParams): Promise<void>;
12
+ declare const showHoverToolbar: (params: HandleBuilderInteractionParams) => Promise<void | undefined>;
13
+ declare const handleMouseHover: (params: HandleMouseHoverParams) => Promise<void>;
12
14
 
13
- export { type HandleMouseHoverParams, handleMouseHover as default, hideCustomCursor, hideHoverOutline, showCustomCursor };
15
+ export { type HandleMouseHoverParams, handleMouseHover as default, hideCustomCursor, hideHoverOutline, showCustomCursor, showHoverToolbar };
@@ -1,13 +1,15 @@
1
1
  import EventListenerHandlerParams from './types.js';
2
+ import { HandleBuilderInteractionParams } from './mouseClick.js';
2
3
  import '../types/visualBuilder.types.js';
3
4
  import '../../cslp/types/cslp.types.js';
4
5
 
5
- interface HandleMouseHoverParams extends Pick<EventListenerHandlerParams, "event" | "overlayWrapper" | "visualBuilderContainer"> {
6
+ interface HandleMouseHoverParams extends Pick<EventListenerHandlerParams, "event" | "overlayWrapper" | "visualBuilderContainer" | "focusedToolbar" | "resizeObserver"> {
6
7
  customCursor: HTMLDivElement | null;
7
8
  }
8
9
  declare function hideHoverOutline(visualBuilderContainer: HTMLDivElement | null): void;
9
10
  declare function hideCustomCursor(customCursor: HTMLDivElement | null): void;
10
11
  declare function showCustomCursor(customCursor: HTMLDivElement | null): void;
11
- declare function handleMouseHover(params: HandleMouseHoverParams): Promise<void>;
12
+ declare const showHoverToolbar: (params: HandleBuilderInteractionParams) => Promise<void | undefined>;
13
+ declare const handleMouseHover: (params: HandleMouseHoverParams) => Promise<void>;
12
14
 
13
- export { type HandleMouseHoverParams, handleMouseHover as default, hideCustomCursor, hideHoverOutline, showCustomCursor };
15
+ export { type HandleMouseHoverParams, handleMouseHover as default, hideCustomCursor, hideHoverOutline, showCustomCursor, showHoverToolbar };