@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
@@ -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":["import__","import_generateThread","uuidV4","Config","getXPath","visualBuilderPostMessage"]}
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":["import__","import_generateThread","uuidV4","Config","getXPath","visualBuilderPostMessage"]}
@@ -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 };
@@ -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) {
@@ -159,6 +160,7 @@ function isSameSelectedElement(previousSelectedElement, editableElement, params)
159
160
  return !!(previousSelectedElement && previousSelectedElement === editableElement && !params.reEvaluate);
160
161
  }
161
162
  function addOverlayAndToolbar(params, eventDetails, editableElement, isVariant) {
163
+ VisualBuilder.VisualBuilderGlobalState.value.isFocussed = true;
162
164
  addOverlay({
163
165
  overlayWrapper: params.overlayWrapper,
164
166
  resizeObserver: params.resizeObserver,
@@ -239,6 +241,7 @@ function observeEditableElementChanges(params, editableElement) {
239
241
  var mouseClick_default = handleBuilderInteraction;
240
242
  export {
241
243
  addFocusedToolbar,
242
- mouseClick_default as default
244
+ mouseClick_default as default,
245
+ handleBuilderInteraction
243
246
  };
244
247
  //# 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 == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : config.collab.isFeedbackMode)) {
153
- showCustomCursor(params2.customCursor);
154
- collabCustomCursor(params2.customCursor);
202
+ }
203
+ if (!(config == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : config.collab.isFeedbackMode)) {
239
+ collabCustomCursor(params.customCursor);
240
+ handleCursorPosition(params.event, params.customCursor);
241
+ showCustomCursor(params.customCursor);
164
242
  return;
243
+ } else if ((config == null ? void 0 : config.collab.enable) && !(config == null ? void 0 : 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 == null ? void 0 : config.collab.enable) && (config == null ? void 0 : config.collab.isFeedbackMode)) {
179
- collabCustomCursor(params2.customCursor);
180
- handleCursorPosition(params2.event, params2.customCursor);
181
- showCustomCursor(params2.customCursor);
182
- return;
183
- } else if ((config == null ? void 0 : config.collab.enable) && !(config == null ? void 0 : 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