@contentstack/live-preview-utils 4.4.2 → 4.4.4

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 (268) hide show
  1. package/README.md +4 -2
  2. package/dist/legacy/common/inIframe.cjs +9 -0
  3. package/dist/legacy/common/inIframe.cjs.map +1 -1
  4. package/dist/legacy/common/inIframe.d.cts +2 -1
  5. package/dist/legacy/common/inIframe.d.ts +2 -1
  6. package/dist/legacy/common/inIframe.js +8 -0
  7. package/dist/legacy/common/inIframe.js.map +1 -1
  8. package/dist/legacy/configManager/config.default.cjs +8 -1
  9. package/dist/legacy/configManager/config.default.cjs.map +1 -1
  10. package/dist/legacy/configManager/config.default.js +8 -1
  11. package/dist/legacy/configManager/config.default.js.map +1 -1
  12. package/dist/legacy/configManager/configManager.cjs +24 -5
  13. package/dist/legacy/configManager/configManager.cjs.map +1 -1
  14. package/dist/legacy/configManager/configManager.d.cts +11 -1
  15. package/dist/legacy/configManager/configManager.d.ts +11 -1
  16. package/dist/legacy/configManager/configManager.js +23 -5
  17. package/dist/legacy/configManager/configManager.js.map +1 -1
  18. package/dist/legacy/configManager/handleUserConfig.cjs +6 -3
  19. package/dist/legacy/configManager/handleUserConfig.cjs.map +1 -1
  20. package/dist/legacy/configManager/handleUserConfig.js +6 -3
  21. package/dist/legacy/configManager/handleUserConfig.js.map +1 -1
  22. package/dist/legacy/configManager/index.d.cts +1 -1
  23. package/dist/legacy/configManager/index.d.ts +1 -1
  24. package/dist/legacy/cslp/cslpdata.cjs +26 -12
  25. package/dist/legacy/cslp/cslpdata.cjs.map +1 -1
  26. package/dist/legacy/cslp/cslpdata.d.cts +0 -5
  27. package/dist/legacy/cslp/cslpdata.d.ts +0 -5
  28. package/dist/legacy/cslp/cslpdata.js +26 -12
  29. package/dist/legacy/cslp/cslpdata.js.map +1 -1
  30. package/dist/legacy/light-sdk.cjs +1 -1
  31. package/dist/legacy/light-sdk.js +1 -1
  32. package/dist/legacy/livePreview/editButton/editButton.cjs +20 -0
  33. package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
  34. package/dist/legacy/livePreview/editButton/editButton.d.cts +1 -0
  35. package/dist/legacy/livePreview/editButton/editButton.d.ts +1 -0
  36. package/dist/legacy/livePreview/editButton/editButton.js +20 -0
  37. package/dist/legacy/livePreview/editButton/editButton.js.map +1 -1
  38. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +13 -10
  39. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  40. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +15 -12
  41. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  42. package/dist/legacy/livePreview/live-preview.cjs +2 -0
  43. package/dist/legacy/livePreview/live-preview.cjs.map +1 -1
  44. package/dist/legacy/livePreview/live-preview.js +2 -0
  45. package/dist/legacy/livePreview/live-preview.js.map +1 -1
  46. package/dist/legacy/livePreview/onPageTraversal.cjs +1 -1
  47. package/dist/legacy/livePreview/onPageTraversal.cjs.map +1 -1
  48. package/dist/legacy/livePreview/onPageTraversal.js +1 -1
  49. package/dist/legacy/livePreview/onPageTraversal.js.map +1 -1
  50. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +37 -1
  51. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  52. package/dist/legacy/preview/contentstack-live-preview-HOC.d.cts +19 -0
  53. package/dist/legacy/preview/contentstack-live-preview-HOC.d.ts +19 -0
  54. package/dist/legacy/preview/contentstack-live-preview-HOC.js +39 -1
  55. package/dist/legacy/preview/contentstack-live-preview-HOC.js.map +1 -1
  56. package/dist/legacy/types/global.d.cjs +19 -0
  57. package/dist/legacy/types/global.d.cjs.map +1 -0
  58. package/dist/legacy/types/global.d.d.cts +8 -0
  59. package/dist/legacy/types/global.d.d.ts +8 -0
  60. package/dist/legacy/types/global.d.js +1 -0
  61. package/dist/legacy/types/global.d.js.map +1 -0
  62. package/dist/legacy/types/types.cjs.map +1 -1
  63. package/dist/legacy/types/types.d.cts +20 -1
  64. package/dist/legacy/types/types.d.ts +20 -1
  65. package/dist/legacy/types/types.js.map +1 -1
  66. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +32 -1
  67. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  68. package/dist/legacy/visualBuilder/components/FieldToolbar.js +32 -1
  69. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  70. package/dist/legacy/visualBuilder/eventManager/useCollab.cjs +8 -8
  71. package/dist/legacy/visualBuilder/eventManager/useCollab.cjs.map +1 -1
  72. package/dist/legacy/visualBuilder/eventManager/useCollab.js +8 -8
  73. package/dist/legacy/visualBuilder/eventManager/useCollab.js.map +1 -1
  74. package/dist/legacy/visualBuilder/index.cjs +8 -3
  75. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  76. package/dist/legacy/visualBuilder/index.js +8 -3
  77. package/dist/legacy/visualBuilder/index.js.map +1 -1
  78. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +26 -0
  79. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  80. package/dist/legacy/visualBuilder/listeners/mouseClick.js +26 -0
  81. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  82. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +29 -0
  83. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  84. package/dist/legacy/visualBuilder/listeners/mouseHover.js +29 -0
  85. package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
  86. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs +19 -1
  87. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.d.cts +8 -1
  89. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.d.ts +8 -1
  90. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js +9 -1
  91. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +8 -0
  93. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +8 -0
  95. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
  96. package/dist/legacy/{utils/handlePageTraversal.cjs → visualBuilder/utils/getWholeFieldElement.cjs} +15 -24
  97. package/dist/legacy/visualBuilder/utils/getWholeFieldElement.cjs.map +1 -0
  98. package/dist/legacy/visualBuilder/utils/getWholeFieldElement.d.cts +4 -0
  99. package/dist/legacy/visualBuilder/utils/getWholeFieldElement.d.ts +4 -0
  100. package/dist/legacy/visualBuilder/utils/getWholeFieldElement.js +14 -0
  101. package/dist/legacy/visualBuilder/utils/getWholeFieldElement.js.map +1 -0
  102. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -1
  103. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  104. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -1
  105. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  106. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.cjs +38 -0
  107. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.cjs.map +1 -0
  108. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.d.cts +7 -0
  109. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.d.ts +7 -0
  110. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.js +15 -0
  111. package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.js.map +1 -0
  112. package/dist/legacy/visualBuilder/utils/resolvePageContext.cjs +49 -0
  113. package/dist/legacy/visualBuilder/utils/resolvePageContext.cjs.map +1 -0
  114. package/dist/legacy/visualBuilder/utils/resolvePageContext.d.cts +6 -0
  115. package/dist/legacy/visualBuilder/utils/resolvePageContext.d.ts +6 -0
  116. package/dist/legacy/visualBuilder/utils/resolvePageContext.js +16 -0
  117. package/dist/legacy/visualBuilder/utils/resolvePageContext.js.map +1 -0
  118. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  119. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  120. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  121. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  122. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +1 -0
  123. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  124. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +12 -0
  125. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  126. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +1 -0
  127. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +1 -0
  128. package/dist/legacy/visualBuilder/visualBuilder.style.js +12 -0
  129. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  130. package/dist/modern/common/inIframe.cjs +9 -0
  131. package/dist/modern/common/inIframe.cjs.map +1 -1
  132. package/dist/modern/common/inIframe.d.cts +2 -1
  133. package/dist/modern/common/inIframe.d.ts +2 -1
  134. package/dist/modern/common/inIframe.js +8 -0
  135. package/dist/modern/common/inIframe.js.map +1 -1
  136. package/dist/modern/configManager/config.default.cjs +8 -1
  137. package/dist/modern/configManager/config.default.cjs.map +1 -1
  138. package/dist/modern/configManager/config.default.js +8 -1
  139. package/dist/modern/configManager/config.default.js.map +1 -1
  140. package/dist/modern/configManager/configManager.cjs +24 -5
  141. package/dist/modern/configManager/configManager.cjs.map +1 -1
  142. package/dist/modern/configManager/configManager.d.cts +11 -1
  143. package/dist/modern/configManager/configManager.d.ts +11 -1
  144. package/dist/modern/configManager/configManager.js +23 -5
  145. package/dist/modern/configManager/configManager.js.map +1 -1
  146. package/dist/modern/configManager/handleUserConfig.cjs +3 -0
  147. package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
  148. package/dist/modern/configManager/handleUserConfig.js +3 -0
  149. package/dist/modern/configManager/handleUserConfig.js.map +1 -1
  150. package/dist/modern/configManager/index.d.cts +1 -1
  151. package/dist/modern/configManager/index.d.ts +1 -1
  152. package/dist/modern/cslp/cslpdata.cjs +25 -12
  153. package/dist/modern/cslp/cslpdata.cjs.map +1 -1
  154. package/dist/modern/cslp/cslpdata.d.cts +0 -5
  155. package/dist/modern/cslp/cslpdata.d.ts +0 -5
  156. package/dist/modern/cslp/cslpdata.js +25 -12
  157. package/dist/modern/cslp/cslpdata.js.map +1 -1
  158. package/dist/modern/light-sdk.cjs +1 -1
  159. package/dist/modern/light-sdk.js +1 -1
  160. package/dist/modern/livePreview/editButton/editButton.cjs +19 -0
  161. package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
  162. package/dist/modern/livePreview/editButton/editButton.d.cts +1 -0
  163. package/dist/modern/livePreview/editButton/editButton.d.ts +1 -0
  164. package/dist/modern/livePreview/editButton/editButton.js +19 -0
  165. package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
  166. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +13 -10
  167. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  168. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +15 -12
  169. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  170. package/dist/modern/livePreview/live-preview.cjs +1 -0
  171. package/dist/modern/livePreview/live-preview.cjs.map +1 -1
  172. package/dist/modern/livePreview/live-preview.js +1 -0
  173. package/dist/modern/livePreview/live-preview.js.map +1 -1
  174. package/dist/modern/livePreview/onPageTraversal.cjs +1 -1
  175. package/dist/modern/livePreview/onPageTraversal.cjs.map +1 -1
  176. package/dist/modern/livePreview/onPageTraversal.js +1 -1
  177. package/dist/modern/livePreview/onPageTraversal.js.map +1 -1
  178. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +36 -1
  179. package/dist/modern/preview/contentstack-live-preview-HOC.cjs.map +1 -1
  180. package/dist/modern/preview/contentstack-live-preview-HOC.d.cts +19 -0
  181. package/dist/modern/preview/contentstack-live-preview-HOC.d.ts +19 -0
  182. package/dist/modern/preview/contentstack-live-preview-HOC.js +38 -1
  183. package/dist/modern/preview/contentstack-live-preview-HOC.js.map +1 -1
  184. package/dist/modern/types/global.d.cjs +19 -0
  185. package/dist/modern/types/global.d.cjs.map +1 -0
  186. package/dist/modern/types/global.d.d.cts +8 -0
  187. package/dist/modern/types/global.d.d.ts +8 -0
  188. package/dist/modern/types/global.d.js +1 -0
  189. package/dist/modern/types/global.d.js.map +1 -0
  190. package/dist/modern/types/types.cjs.map +1 -1
  191. package/dist/modern/types/types.d.cts +20 -1
  192. package/dist/modern/types/types.d.ts +20 -1
  193. package/dist/modern/types/types.js.map +1 -1
  194. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +32 -1
  195. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  196. package/dist/modern/visualBuilder/components/FieldToolbar.js +32 -1
  197. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  198. package/dist/modern/visualBuilder/eventManager/useCollab.cjs +5 -5
  199. package/dist/modern/visualBuilder/eventManager/useCollab.cjs.map +1 -1
  200. package/dist/modern/visualBuilder/eventManager/useCollab.js +5 -5
  201. package/dist/modern/visualBuilder/eventManager/useCollab.js.map +1 -1
  202. package/dist/modern/visualBuilder/index.cjs +8 -3
  203. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  204. package/dist/modern/visualBuilder/index.js +8 -3
  205. package/dist/modern/visualBuilder/index.js.map +1 -1
  206. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +26 -0
  207. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  208. package/dist/modern/visualBuilder/listeners/mouseClick.js +26 -0
  209. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  210. package/dist/modern/visualBuilder/listeners/mouseHover.cjs +29 -0
  211. package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  212. package/dist/modern/visualBuilder/listeners/mouseHover.js +29 -0
  213. package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
  214. package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs +19 -1
  215. package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
  216. package/dist/modern/visualBuilder/utils/getCsDataOfElement.d.cts +8 -1
  217. package/dist/modern/visualBuilder/utils/getCsDataOfElement.d.ts +8 -1
  218. package/dist/modern/visualBuilder/utils/getCsDataOfElement.js +9 -1
  219. package/dist/modern/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
  220. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +8 -0
  221. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
  222. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +8 -0
  223. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
  224. package/dist/modern/{utils/handlePageTraversal.cjs → visualBuilder/utils/getWholeFieldElement.cjs} +15 -24
  225. package/dist/modern/visualBuilder/utils/getWholeFieldElement.cjs.map +1 -0
  226. package/dist/modern/visualBuilder/utils/getWholeFieldElement.d.cts +4 -0
  227. package/dist/modern/visualBuilder/utils/getWholeFieldElement.d.ts +4 -0
  228. package/dist/modern/visualBuilder/utils/getWholeFieldElement.js +14 -0
  229. package/dist/modern/visualBuilder/utils/getWholeFieldElement.js.map +1 -0
  230. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -1
  231. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  232. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -1
  233. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  234. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.cjs +37 -0
  235. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.cjs.map +1 -0
  236. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.d.cts +7 -0
  237. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.d.ts +7 -0
  238. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.js +14 -0
  239. package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.js.map +1 -0
  240. package/dist/modern/visualBuilder/utils/resolvePageContext.cjs +48 -0
  241. package/dist/modern/visualBuilder/utils/resolvePageContext.cjs.map +1 -0
  242. package/dist/modern/visualBuilder/utils/resolvePageContext.d.cts +6 -0
  243. package/dist/modern/visualBuilder/utils/resolvePageContext.d.ts +6 -0
  244. package/dist/modern/visualBuilder/utils/resolvePageContext.js +15 -0
  245. package/dist/modern/visualBuilder/utils/resolvePageContext.js.map +1 -0
  246. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  247. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  248. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  249. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  250. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +1 -0
  251. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  252. package/dist/modern/visualBuilder/visualBuilder.style.cjs +12 -0
  253. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  254. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +1 -0
  255. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +1 -0
  256. package/dist/modern/visualBuilder/visualBuilder.style.js +12 -0
  257. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  258. package/package.json +1 -1
  259. package/dist/legacy/utils/handlePageTraversal.cjs.map +0 -1
  260. package/dist/legacy/utils/handlePageTraversal.d.cts +0 -3
  261. package/dist/legacy/utils/handlePageTraversal.d.ts +0 -3
  262. package/dist/legacy/utils/handlePageTraversal.js +0 -24
  263. package/dist/legacy/utils/handlePageTraversal.js.map +0 -1
  264. package/dist/modern/utils/handlePageTraversal.cjs.map +0 -1
  265. package/dist/modern/utils/handlePageTraversal.d.cts +0 -3
  266. package/dist/modern/utils/handlePageTraversal.d.ts +0 -3
  267. package/dist/modern/utils/handlePageTraversal.js +0 -24
  268. package/dist/modern/utils/handlePageTraversal.js.map +0 -1
@@ -1 +1 @@
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 { HandleBuilderInteractionParams } from \"./mouseClick\";\nimport { appendFieldPathDropdown } from \"../generators/generateToolbar\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\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\nasync function addOutline(params?: AddOutlineParams): Promise<void> {\n if (!params) {\n return;\n }\n const {\n editableElement,\n eventDetails,\n content_type_uid,\n fieldPath,\n fieldMetadata,\n fieldDisabled,\n } = params;\n if (!editableElement) return;\n const isVariant = !!fieldMetadata.variant;\n addHoverOutline(editableElement as HTMLElement, fieldDisabled, isVariant);\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n if (!fieldSchema) return;\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n variantUid: fieldMetadata.variant,\n fieldPathWithIndex: fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n addHoverOutline(editableElement, fieldDisabled || isDisabled, isVariant);\n}\n\nconst debouncedAddOutline = debounce(addOutline, 50, { trailing: true });\nexport const cancelPendingAddOutline = () => debouncedAddOutline.cancel();\nconst showOutline = (params?: AddOutlineParams): Promise<void> | undefined => 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\nexport const cancelPendingHoverToolbar = () => debouncedRenderHoverToolbar.cancel();\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 if (params.customCursor) {\n hideCustomCursor(params.customCursor);\n }\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 (config?.collab.enable && !config?.collab.isFeedbackMode) {\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 // only re-generate cursor when moving onto a new element — avoids\n // firing fetchEntryPermissionsAndStageDetails on every 10ms tick\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n generateCursor({\n eventDetails,\n customCursor: params.customCursor,\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\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n}, 10);\n\nasync function generateCursor({\n eventDetails,\n customCursor,\n}: {\n eventDetails: VisualBuilderCslpEventDetails;\n customCursor: HTMLDivElement | null;\n}) {\n if (!customCursor) return;\n const { fieldMetadata } = eventDetails;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n if (!fieldSchema) {\n return;\n }\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n variantUid: fieldMetadata.variant,\n fieldPathWithIndex: fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled: fieldDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor,\n fieldDisabled,\n });\n}\n\nconst handleMouseHover = async (\n params: HandleMouseHoverParams\n): Promise<void> => await throttledMouseHover(params);\n\nexport const cancelPendingMouseHover = () => throttledMouseHover.cancel();\n\nexport default handleMouseHover;\n"],"mappings":"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","names":[]}
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 { HandleBuilderInteractionParams } from \"./mouseClick\";\nimport { appendFieldPathDropdown } from \"../generators/generateToolbar\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\nimport { isCustomFieldMultipleInstance } from \"../utils/isCustomFieldMultipleInstance\";\nimport { getParentCslp, getWholeFieldElement } from \"../utils/getWholeFieldElement\";\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\nasync function addOutline(params?: AddOutlineParams): Promise<void> {\n if (!params) {\n return;\n }\n const {\n editableElement,\n eventDetails,\n content_type_uid,\n fieldPath,\n fieldMetadata,\n fieldDisabled,\n } = params;\n if (!editableElement) return;\n const isVariant = !!fieldMetadata.variant;\n addHoverOutline(editableElement as HTMLElement, fieldDisabled, isVariant);\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n if (!fieldSchema) return;\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n variantUid: fieldMetadata.variant,\n fieldPathWithIndex: fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n addHoverOutline(editableElement, fieldDisabled || isDisabled, isVariant);\n}\n\nconst debouncedAddOutline = debounce(addOutline, 50, { trailing: true });\nexport const cancelPendingAddOutline = () => debouncedAddOutline.cancel();\nconst showOutline = (params?: AddOutlineParams): Promise<void> | undefined => 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\nexport const cancelPendingHoverToolbar = () => debouncedRenderHoverToolbar.cancel();\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 if (params.customCursor) {\n hideCustomCursor(params.customCursor);\n }\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 (FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {\n const fieldSchema = await FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath);\n if (fieldSchema && isCustomFieldMultipleInstance(fieldSchema, fieldMetadata)) {\n const parentCslp = getParentCslp(fieldMetadata.cslpValue);\n const wholeFieldElement = getWholeFieldElement(editableElement, parentCslp);\n if (wholeFieldElement) {\n wholeFieldElement.dispatchEvent(\n new MouseEvent(\"mousemove\", {\n bubbles: true,\n cancelable: true,\n clientX: params.event.clientX,\n clientY: params.event.clientY,\n })\n );\n } else {\n if (config.debug) {\n console.debug(\n \"[Visual Builder] Custom field multiple instance: whole-field parent not found in DOM for CSLP\",\n parentCslp\n );\n }\n resetCustomCursor(params.customCursor);\n handleCursorPosition(params.event, params.customCursor);\n }\n return;\n }\n }\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 (config?.collab.enable && !config?.collab.isFeedbackMode) {\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 // only re-generate cursor when moving onto a new element — avoids\n // firing fetchEntryPermissionsAndStageDetails on every 10ms tick\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n generateCursor({\n eventDetails,\n customCursor: params.customCursor,\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\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n}, 10);\n\nasync function generateCursor({\n eventDetails,\n customCursor,\n}: {\n eventDetails: VisualBuilderCslpEventDetails;\n customCursor: HTMLDivElement | null;\n}) {\n if (!customCursor) return;\n const { fieldMetadata } = eventDetails;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n if (!fieldSchema) {\n return;\n }\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n variantUid: fieldMetadata.variant,\n fieldPathWithIndex: fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled: fieldDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor,\n fieldDisabled,\n });\n}\n\nconst handleMouseHover = async (\n params: HandleMouseHoverParams\n): Promise<void> => await throttledMouseHover(params);\n\nexport const cancelPendingMouseHover = () => throttledMouseHover.cancel();\n\nexport default handleMouseHover;\n"],"mappings":"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","names":[]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/visualBuilder/utils/getCsDataOfElement.ts
@@ -26,12 +36,20 @@ __export(getCsDataOfElement_exports, {
26
36
  module.exports = __toCommonJS(getCsDataOfElement_exports);
27
37
  var import_cslpdata = require("../../cslp/cslpdata.cjs");
28
38
  var import_constants = require("./constants.cjs");
39
+ var import_configManager = __toESM(require("../../configManager/configManager.cjs"), 1);
29
40
  function getCsDataOfElement(event) {
30
41
  const targetElement = event.target;
31
42
  if (!targetElement) {
32
43
  return;
33
44
  }
34
- const editableElement = targetElement.closest("[data-cslp]");
45
+ let editableElement = targetElement.closest("[data-cslp]");
46
+ if (!editableElement && import_configManager.default.get().overlayPropagation.enable) {
47
+ const stack = document.elementsFromPoint(
48
+ event.clientX,
49
+ event.clientY
50
+ );
51
+ editableElement = stack.find((el) => el.hasAttribute("data-cslp")) ?? null;
52
+ }
35
53
  if (!editableElement) {
36
54
  return;
37
55
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAoD;AACpD,uBAAwC;AASjC,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,QAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,KAAC,6BAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,oBAAgB,wCAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AACtD,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,wCAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,wCAAuB;AACtD,QAAI,KAAC,6BAAY,IAAI,GAAG;AACpB,aAAO,KAAK,eAAe,QAAQ,IAAI,wCAAuB,GAAG;AACjE;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,WAAO,KAAK,eAAe,QAAQ,IAAI,wCAAuB,GAAG;AAAA,EACrE;AACA,SAAO,QAAQ,OAAO,2BAAW,EAAE,IAAI,CAAC,aAAS,wCAAuB,IAAI,CAAC;AACjF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\nimport Config from \"../../configManager/configManager\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n *\n * When `overlayPropagation.enable` is `true` and the target element has no\n * `data-cslp` ancestor, falls back to `document.elementsFromPoint()` so the\n * lookup can pierce sibling elements (e.g. empty CSS-grid spacer cells) that\n * visually overlap a `data-cslp` field but would otherwise intercept the\n * mouse event.\n *\n * @param event - The mouse event.\n * @returns The CSLP data of the resolved element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n let editableElement: Element | null =\n targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement && Config.get().overlayPropagation.enable) {\n const stack = document.elementsFromPoint(\n event.clientX,\n event.clientY\n );\n editableElement =\n stack.find((el) => el.hasAttribute(\"data-cslp\")) ?? null;\n }\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAoD;AACpD,uBAAwC;AACxC,2BAAmB;AAgBZ,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,MAAI,kBACA,cAAc,QAAQ,aAAa;AAEvC,MAAI,CAAC,mBAAmB,qBAAAA,QAAO,IAAI,EAAE,mBAAmB,QAAQ;AAC5D,UAAM,QAAQ,SAAS;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AACA,sBACI,MAAM,KAAK,CAAC,OAAO,GAAG,aAAa,WAAW,CAAC,KAAK;AAAA,EAC5D;AAEA,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,KAAC,6BAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,oBAAgB,wCAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AACtD,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,wCAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,wCAAuB;AACtD,QAAI,KAAC,6BAAY,IAAI,GAAG;AACpB,aAAO,KAAK,eAAe,QAAQ,IAAI,wCAAuB,GAAG;AACjE;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,WAAO,KAAK,eAAe,QAAQ,IAAI,wCAAuB,GAAG;AAAA,EACrE;AACA,SAAO,QAAQ,OAAO,2BAAW,EAAE,IAAI,CAAC,aAAS,wCAAuB,IAAI,CAAC;AACjF;","names":["Config"]}
@@ -4,8 +4,15 @@ import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.cjs'
4
4
  /**
5
5
  * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute
6
6
  * to the target element of a mouse event.
7
+ *
8
+ * When `overlayPropagation.enable` is `true` and the target element has no
9
+ * `data-cslp` ancestor, falls back to `document.elementsFromPoint()` so the
10
+ * lookup can pierce sibling elements (e.g. empty CSS-grid spacer cells) that
11
+ * visually overlap a `data-cslp` field but would otherwise intercept the
12
+ * mouse event.
13
+ *
7
14
  * @param event - The mouse event.
8
- * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,
15
+ * @returns The CSLP data of the resolved element with a `data-cslp` attribute,
9
16
  * along with metadata and schema information for the corresponding field.
10
17
  */
11
18
  declare function getCsDataOfElement(event: MouseEvent): VisualBuilderCslpEventDetails | undefined;
@@ -4,8 +4,15 @@ import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.js';
4
4
  /**
5
5
  * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute
6
6
  * to the target element of a mouse event.
7
+ *
8
+ * When `overlayPropagation.enable` is `true` and the target element has no
9
+ * `data-cslp` ancestor, falls back to `document.elementsFromPoint()` so the
10
+ * lookup can pierce sibling elements (e.g. empty CSS-grid spacer cells) that
11
+ * visually overlap a `data-cslp` field but would otherwise intercept the
12
+ * mouse event.
13
+ *
7
14
  * @param event - The mouse event.
8
- * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,
15
+ * @returns The CSLP data of the resolved element with a `data-cslp` attribute,
9
16
  * along with metadata and schema information for the corresponding field.
10
17
  */
11
18
  declare function getCsDataOfElement(event: MouseEvent): VisualBuilderCslpEventDetails | undefined;
@@ -3,12 +3,20 @@ import "../../chunk-5WRI5ZAA.js";
3
3
  // src/visualBuilder/utils/getCsDataOfElement.ts
4
4
  import { extractDetailsFromCslp, isValidCslp } from "../../cslp/cslpdata.js";
5
5
  import { DATA_CSLP_ATTR_SELECTOR } from "./constants.js";
6
+ import Config from "../../configManager/configManager.js";
6
7
  function getCsDataOfElement(event) {
7
8
  const targetElement = event.target;
8
9
  if (!targetElement) {
9
10
  return;
10
11
  }
11
- const editableElement = targetElement.closest("[data-cslp]");
12
+ let editableElement = targetElement.closest("[data-cslp]");
13
+ if (!editableElement && Config.get().overlayPropagation.enable) {
14
+ const stack = document.elementsFromPoint(
15
+ event.clientX,
16
+ event.clientY
17
+ );
18
+ editableElement = stack.find((el) => el.hasAttribute("data-cslp")) ?? null;
19
+ }
12
20
  if (!editableElement) {
13
21
  return;
14
22
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;AAEA,SAAS,wBAAwB,mBAAmB;AACpD,SAAS,+BAA+B;AASjC,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,QAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,CAAC,YAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,gBAAgB,uBAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AACtD,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,uBAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,uBAAuB;AACtD,QAAI,CAAC,YAAY,IAAI,GAAG;AACpB,aAAO,KAAK,eAAe,QAAQ,IAAI,uBAAuB,GAAG;AACjE;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,WAAO,KAAK,eAAe,QAAQ,IAAI,uBAAuB,GAAG;AAAA,EACrE;AACA,SAAO,QAAQ,OAAO,WAAW,EAAE,IAAI,CAAC,SAAS,uBAAuB,IAAI,CAAC;AACjF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\nimport Config from \"../../configManager/configManager\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n *\n * When `overlayPropagation.enable` is `true` and the target element has no\n * `data-cslp` ancestor, falls back to `document.elementsFromPoint()` so the\n * lookup can pierce sibling elements (e.g. empty CSS-grid spacer cells) that\n * visually overlap a `data-cslp` field but would otherwise intercept the\n * mouse event.\n *\n * @param event - The mouse event.\n * @returns The CSLP data of the resolved element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n let editableElement: Element | null =\n targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement && Config.get().overlayPropagation.enable) {\n const stack = document.elementsFromPoint(\n event.clientX,\n event.clientY\n );\n editableElement =\n stack.find((el) => el.hasAttribute(\"data-cslp\")) ?? null;\n }\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;AAEA,SAAS,wBAAwB,mBAAmB;AACpD,SAAS,+BAA+B;AACxC,OAAO,YAAY;AAgBZ,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,MAAI,kBACA,cAAc,QAAQ,aAAa;AAEvC,MAAI,CAAC,mBAAmB,OAAO,IAAI,EAAE,mBAAmB,QAAQ;AAC5D,UAAM,QAAQ,SAAS;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AACA,sBACI,MAAM,KAAK,CAAC,OAAO,GAAG,aAAa,WAAW,CAAC,KAAK;AAAA,EAC5D;AAEA,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,CAAC,YAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,gBAAgB,uBAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AACtD,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,uBAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,uBAAuB;AACtD,QAAI,CAAC,YAAY,IAAI,GAAG;AACpB,aAAO,KAAK,eAAe,QAAQ,IAAI,uBAAuB,GAAG;AACjE;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,WAAO,KAAK,eAAe,QAAQ,IAAI,uBAAuB,GAAG;AAAA,EACrE;AACA,SAAO,QAAQ,OAAO,WAAW,EAAE,IAAI,CAAC,SAAS,uBAAuB,IAAI,CAAC;AACjF;","names":[]}
@@ -35,6 +35,7 @@ __export(getVisualBuilderRedirectionUrl_exports, {
35
35
  module.exports = __toCommonJS(getVisualBuilderRedirectionUrl_exports);
36
36
  var import_configManager = __toESM(require("../../configManager/configManager.cjs"), 1);
37
37
  var import_cslp = require("../../cslp/index.cjs");
38
+ var import_resolvePageContext = require("./resolvePageContext.cjs");
38
39
  function getVisualBuilderRedirectionUrl() {
39
40
  const { stackDetails, clientUrlParams } = import_configManager.default.get();
40
41
  const { branch, apiKey, environment, locale } = stackDetails;
@@ -59,6 +60,13 @@ function getVisualBuilderRedirectionUrl() {
59
60
  if (localeToUse) {
60
61
  searchParams.set("locale", localeToUse);
61
62
  }
63
+ const { entryUid, contentTypeUid } = (0, import_resolvePageContext.resolvePageContext)();
64
+ if (entryUid) {
65
+ searchParams.set("entry_uid", entryUid);
66
+ }
67
+ if (contentTypeUid) {
68
+ searchParams.set("content_type_uid", contentTypeUid);
69
+ }
62
70
  const completeURL = new URL(
63
71
  `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,
64
72
  appUrl
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAmB;AACnB,kBAAoD;AAMrC,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,qBAAAA,QAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,YAAI,yBAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,QAAI,oCAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":["Config"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { resolvePageContext } from \"./resolvePageContext\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const { entryUid, contentTypeUid } = resolvePageContext();\n\n if (entryUid) {\n searchParams.set(\"entry_uid\", entryUid);\n }\n if (contentTypeUid) {\n searchParams.set(\"content_type_uid\", contentTypeUid);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAmB;AACnB,kBAAoD;AACpD,gCAAmC;AAMpB,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,qBAAAA,QAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,YAAI,yBAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,QAAI,oCAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,EAAE,UAAU,eAAe,QAAI,8CAAmB;AAExD,MAAI,UAAU;AACV,iBAAa,IAAI,aAAa,QAAQ;AAAA,EAC1C;AACA,MAAI,gBAAgB;AAChB,iBAAa,IAAI,oBAAoB,cAAc;AAAA,EACvD;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":["Config"]}
@@ -3,6 +3,7 @@ import "../../chunk-5WRI5ZAA.js";
3
3
  // src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts
4
4
  import Config from "../../configManager/configManager.js";
5
5
  import { extractDetailsFromCslp, isValidCslp } from "../../cslp/index.js";
6
+ import { resolvePageContext } from "./resolvePageContext.js";
6
7
  function getVisualBuilderRedirectionUrl() {
7
8
  const { stackDetails, clientUrlParams } = Config.get();
8
9
  const { branch, apiKey, environment, locale } = stackDetails;
@@ -27,6 +28,13 @@ function getVisualBuilderRedirectionUrl() {
27
28
  if (localeToUse) {
28
29
  searchParams.set("locale", localeToUse);
29
30
  }
31
+ const { entryUid, contentTypeUid } = resolvePageContext();
32
+ if (entryUid) {
33
+ searchParams.set("entry_uid", entryUid);
34
+ }
35
+ if (contentTypeUid) {
36
+ searchParams.set("content_type_uid", contentTypeUid);
37
+ }
30
38
  const completeURL = new URL(
31
39
  `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,
32
40
  appUrl
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;AAAA,OAAO,YAAY;AACnB,SAAS,wBAAwB,mBAAmB;AAMrC,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,OAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,QAAI,YAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,IAAI,uBAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { resolvePageContext } from \"./resolvePageContext\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const { entryUid, contentTypeUid } = resolvePageContext();\n\n if (entryUid) {\n searchParams.set(\"entry_uid\", entryUid);\n }\n if (contentTypeUid) {\n searchParams.set(\"content_type_uid\", contentTypeUid);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;AAAA,OAAO,YAAY;AACnB,SAAS,wBAAwB,mBAAmB;AACpD,SAAS,0BAA0B;AAMpB,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,OAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,QAAI,YAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,IAAI,uBAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,EAAE,UAAU,eAAe,IAAI,mBAAmB;AAExD,MAAI,UAAU;AACV,iBAAa,IAAI,aAAa,QAAQ;AAAA,EAC1C;AACA,MAAI,gBAAgB;AAChB,iBAAa,IAAI,oBAAoB,cAAc;AAAA,EACvD;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":[]}
@@ -17,31 +17,22 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/utils/handlePageTraversal.ts
21
- var handlePageTraversal_exports = {};
22
- __export(handlePageTraversal_exports, {
23
- handlePageTraversal: () => handlePageTraversal
20
+ // src/visualBuilder/utils/getWholeFieldElement.ts
21
+ var getWholeFieldElement_exports = {};
22
+ __export(getWholeFieldElement_exports, {
23
+ getParentCslp: () => getParentCslp,
24
+ getWholeFieldElement: () => getWholeFieldElement
24
25
  });
25
- module.exports = __toCommonJS(handlePageTraversal_exports);
26
- var handlePageTraversal = () => {
27
- window.addEventListener("unload", () => {
28
- const targetURL = document.activeElement.href;
29
- if (targetURL) {
30
- window.parent.postMessage(
31
- {
32
- from: "live-preview",
33
- type: "url-change",
34
- data: {
35
- targetURL
36
- }
37
- },
38
- "*"
39
- );
40
- }
41
- });
42
- };
26
+ module.exports = __toCommonJS(getWholeFieldElement_exports);
27
+ function getParentCslp(cslpValue) {
28
+ return cslpValue.split(".").slice(0, -1).join(".");
29
+ }
30
+ function getWholeFieldElement(instanceElement, parentCslp) {
31
+ return instanceElement.closest(`[data-cslp="${parentCslp}"]`);
32
+ }
43
33
  // Annotate the CommonJS export names for ESM import in node:
44
34
  0 && (module.exports = {
45
- handlePageTraversal
35
+ getParentCslp,
36
+ getWholeFieldElement
46
37
  });
47
- //# sourceMappingURL=handlePageTraversal.cjs.map
38
+ //# sourceMappingURL=getWholeFieldElement.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getWholeFieldElement.ts"],"sourcesContent":["// Strips the trailing index segment to derive the whole-field CSLP.\n// Works for both V1 (ct.entry.locale.field.0) and V2 (v2:ct.entry.locale.field.0) formats.\nexport function getParentCslp(cslpValue: string): string {\n return cslpValue.split(\".\").slice(0, -1).join(\".\");\n}\n\n// Finds the nearest ancestor whose data-cslp matches parentCslp via DOM traversal.\nexport function getWholeFieldElement(\n instanceElement: Element,\n parentCslp: string\n): Element | null {\n return instanceElement.closest(`[data-cslp=\"${parentCslp}\"]`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,cAAc,WAA2B;AACrD,SAAO,UAAU,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AACrD;AAGO,SAAS,qBACZ,iBACA,YACc;AACd,SAAO,gBAAgB,QAAQ,eAAe,UAAU,IAAI;AAChE;","names":[]}
@@ -0,0 +1,4 @@
1
+ declare function getParentCslp(cslpValue: string): string;
2
+ declare function getWholeFieldElement(instanceElement: Element, parentCslp: string): Element | null;
3
+
4
+ export { getParentCslp, getWholeFieldElement };
@@ -0,0 +1,4 @@
1
+ declare function getParentCslp(cslpValue: string): string;
2
+ declare function getWholeFieldElement(instanceElement: Element, parentCslp: string): Element | null;
3
+
4
+ export { getParentCslp, getWholeFieldElement };
@@ -0,0 +1,14 @@
1
+ import "../../chunk-5WRI5ZAA.js";
2
+
3
+ // src/visualBuilder/utils/getWholeFieldElement.ts
4
+ function getParentCslp(cslpValue) {
5
+ return cslpValue.split(".").slice(0, -1).join(".");
6
+ }
7
+ function getWholeFieldElement(instanceElement, parentCslp) {
8
+ return instanceElement.closest(`[data-cslp="${parentCslp}"]`);
9
+ }
10
+ export {
11
+ getParentCslp,
12
+ getWholeFieldElement
13
+ };
14
+ //# sourceMappingURL=getWholeFieldElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/getWholeFieldElement.ts"],"sourcesContent":["// Strips the trailing index segment to derive the whole-field CSLP.\n// Works for both V1 (ct.entry.locale.field.0) and V2 (v2:ct.entry.locale.field.0) formats.\nexport function getParentCslp(cslpValue: string): string {\n return cslpValue.split(\".\").slice(0, -1).join(\".\");\n}\n\n// Finds the nearest ancestor whose data-cslp matches parentCslp via DOM traversal.\nexport function getWholeFieldElement(\n instanceElement: Element,\n parentCslp: string\n): Element | null {\n return instanceElement.closest(`[data-cslp=\"${parentCslp}\"]`);\n}\n"],"mappings":";;;AAEO,SAAS,cAAc,WAA2B;AACrD,SAAO,UAAU,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AACrD;AAGO,SAAS,qBACZ,iBACA,YACc;AACd,SAAO,gBAAgB,QAAQ,eAAe,UAAU,IAAI;AAChE;","names":[]}
@@ -34,6 +34,7 @@ var import_isFieldDisabled = require("./isFieldDisabled.cjs");
34
34
  var import_multipleElementAddButton = require("./multipleElementAddButton.cjs");
35
35
  var import_isFieldMultiple = require("./isFieldMultiple.cjs");
36
36
  var import_handleInlineEditableField = require("./handleInlineEditableField.cjs");
37
+ var import_isCustomFieldMultipleInstance = require("./isCustomFieldMultipleInstance.cjs");
37
38
  var import_pasteAsPlainText = require("./pasteAsPlainText.cjs");
38
39
  var import_generateToolbar = require("../generators/generateToolbar.cjs");
39
40
  var import_fetchEntryPermissionsAndStageDetails = require("./fetchEntryPermissionsAndStageDetails.cjs");
@@ -75,7 +76,7 @@ async function handleIndividualFields(eventDetails, elements) {
75
76
  fieldType
76
77
  );
77
78
  if ((0, import_isFieldMultiple.isFieldMultiple)(fieldSchema)) {
78
- if (lastEditedField !== editableElement) {
79
+ if (!(0, import_isCustomFieldMultipleInstance.isCustomFieldMultipleInstance)(fieldSchema, fieldMetadata) && lastEditedField !== editableElement) {
79
80
  const addButtonLabel = fieldSchema.data_type === "blocks" ? (
80
81
  // ? `Add ${fieldSchema.display_name ?? "Modular Block"}`
81
82
  "Add Section"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { fetchEntryPermissionsAndStageDetails } from \"./fetchEntryPermissionsAndStageDetails\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n variant,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid: variant,\n fieldPathWithIndex,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n removeFieldToolbar(focusedToolbar);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAA8B;AAE9B,uBAAwD;AACxD,4BAA+B;AAC/B,0BAA6B;AAC7B,0BAA6B;AAC7B,kCAAqD;AACrD,6BAAgC;AAChC,sCAGO;AACP,6BAAgC;AAChC,uCAA0C;AAE1C,8BAAiC;AACjC,6BAAmC;AACnC,kDAAqD;AAOrD,eAAsB,uBAClB,cACA,UACa;AACb,QAAM,EAAE,eAAe,gBAAgB,IAAI;AAC3C,QAAM,EAAE,wBAAwB,iBAAiB,eAAe,IAC5D;AACJ,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,QAAM,CAAC,aAAa,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,qCAAe,eAAe,kBAAkB,SAAS;AAAA,QACzD;AAAA,MACI,EAAE,kBAAkB,WAAW,OAAO;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,gBAAY,kCAAa,WAAW;AAE1C,QAAM,EAAE,KAAK,UAAU,eAAe,2BAA2B,2BAA2B,IACxF,UAAM,kFAAqC;AAAA,IACvC,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACJ,CAAC;AACL,QAAM,EAAE,YAAY,SAAS,QAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,kBAAgB;AAAA,IACZ;AAAA,IACA;AAAA,EACJ;AAEA,UAAI,wCAAgB,WAAW,GAAG;AAC9B,QAAI,oBAAoB,iBAAiB;AACrC,YAAM,iBACF,YAAY,cAAc;AAAA;AAAA,QAEpB;AAAA,UACA;AAEV;AAAA,QACI;AAAA,QACA;AAAA,UACI,iBAAiB,aAAa;AAAA,UAC9B;AAAA,UACA;AAAA,QACJ;AAAA,QACA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,UAAU;AACV;AAAA,EACJ;AACA,kEAA0B;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,6BAA6B,UAKpC;AACL,QAAM,EAAE,gBAAgB,wBAAwB,eAAe,IAAI;AAEnE;AAAA,IACI;AAAA,MACI,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,EACJ;AAEA,QAAM,8BACF,uBAAc,yBAAyB,MAClC;AACT,MAAI,6BAA6B;AAC7B,gCAA4B;AAAA,MACxB;AAAA,IACJ;AACA,gCAA4B,gBAAgB,iBAAiB;AAC7D,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AACA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAEA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAGA,aAAS,eAAe,UAAU,2BAA2B;AAAA,EACjE;AAEA,QAAM,wBAAwB,wBAAwB;AAAA,IAClD;AAAA,EACJ;AACA,MAAI,uBAAuB;AACvB,aAAS,eAAe,UAAU,qBAAqB;AACvD,0BAAsB,oBAAoB,SAAS,wCAAgB;AACnE,0BAAsB,OAAO;AAC7B,QAAI,6BAA6B;AAC7B,MAAC,4BAA4C,MAAM;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,gBAAgB;AAChB,mDAAmB,cAAc;AAAA,EACrC;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { isCustomFieldMultipleInstance } from \"./isCustomFieldMultipleInstance\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { fetchEntryPermissionsAndStageDetails } from \"./fetchEntryPermissionsAndStageDetails\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n variant,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid: variant,\n fieldPathWithIndex,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (!isCustomFieldMultipleInstance(fieldSchema, fieldMetadata) && lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n removeFieldToolbar(focusedToolbar);\n }\n}\n"],"mappings":"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","names":[]}
@@ -14,6 +14,7 @@ import {
14
14
  } from "./multipleElementAddButton.js";
15
15
  import { isFieldMultiple } from "./isFieldMultiple.js";
16
16
  import { handleInlineEditableField } from "./handleInlineEditableField.js";
17
+ import { isCustomFieldMultipleInstance } from "./isCustomFieldMultipleInstance.js";
17
18
  import { pasteAsPlainText } from "./pasteAsPlainText.js";
18
19
  import { removeFieldToolbar } from "../generators/generateToolbar.js";
19
20
  import { fetchEntryPermissionsAndStageDetails } from "./fetchEntryPermissionsAndStageDetails.js";
@@ -55,7 +56,7 @@ async function handleIndividualFields(eventDetails, elements) {
55
56
  fieldType
56
57
  );
57
58
  if (isFieldMultiple(fieldSchema)) {
58
- if (lastEditedField !== editableElement) {
59
+ if (!isCustomFieldMultipleInstance(fieldSchema, fieldMetadata) && lastEditedField !== editableElement) {
59
60
  const addButtonLabel = fieldSchema.data_type === "blocks" ? (
60
61
  // ? `Add ${fieldSchema.display_name ?? "Modular Block"}`
61
62
  "Add Section"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { fetchEntryPermissionsAndStageDetails } from \"./fetchEntryPermissionsAndStageDetails\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n variant,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid: variant,\n fieldPathWithIndex,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n removeFieldToolbar(focusedToolbar);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { isCustomFieldMultipleInstance } from \"./isCustomFieldMultipleInstance\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { fetchEntryPermissionsAndStageDetails } from \"./fetchEntryPermissionsAndStageDetails\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n variant,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid: variant,\n fieldPathWithIndex,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (!isCustomFieldMultipleInstance(fieldSchema, fieldMetadata) && lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n removeFieldToolbar(focusedToolbar);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/visualBuilder/utils/isCustomFieldMultipleInstance.ts
21
+ var isCustomFieldMultipleInstance_exports = {};
22
+ __export(isCustomFieldMultipleInstance_exports, {
23
+ isCustomFieldMultipleInstance: () => isCustomFieldMultipleInstance
24
+ });
25
+ module.exports = __toCommonJS(isCustomFieldMultipleInstance_exports);
26
+ var import_types = require("./types/index.types.cjs");
27
+ var import_getFieldType = require("./getFieldType.cjs");
28
+ var import_isFieldMultiple = require("./isFieldMultiple.cjs");
29
+ function isCustomFieldMultipleInstance(fieldSchema, fieldMetadata) {
30
+ if (!fieldSchema || !fieldMetadata) return false;
31
+ return (0, import_getFieldType.getFieldType)(fieldSchema) === import_types.FieldDataType.CUSTOM_FIELD && (0, import_isFieldMultiple.isFieldMultiple)(fieldSchema) && fieldMetadata.fieldPathWithIndex !== fieldMetadata.instance?.fieldPathWithIndex && (fieldMetadata.multipleFieldMetadata?.index ?? -1) !== -1;
32
+ }
33
+ // Annotate the CommonJS export names for ESM import in node:
34
+ 0 && (module.exports = {
35
+ isCustomFieldMultipleInstance
36
+ });
37
+ //# sourceMappingURL=isCustomFieldMultipleInstance.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/visualBuilder/utils/isCustomFieldMultipleInstance.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { FieldDataType, ISchemaFieldMap } from \"./types/index.types\";\nimport { getFieldType } from \"./getFieldType\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\n\nexport function isCustomFieldMultipleInstance(\n fieldSchema: ISchemaFieldMap | null | undefined,\n fieldMetadata: CslpData | null | undefined\n): boolean {\n if (!fieldSchema || !fieldMetadata) return false;\n return (\n getFieldType(fieldSchema) === FieldDataType.CUSTOM_FIELD &&\n isFieldMultiple(fieldSchema) &&\n fieldMetadata.fieldPathWithIndex !== fieldMetadata.instance?.fieldPathWithIndex &&\n (fieldMetadata.multipleFieldMetadata?.index ?? -1) !== -1\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA+C;AAC/C,0BAA6B;AAC7B,6BAAgC;AAEzB,SAAS,8BACZ,aACA,eACO;AACP,MAAI,CAAC,eAAe,CAAC,cAAe,QAAO;AAC3C,aACI,kCAAa,WAAW,MAAM,2BAAc,oBAC5C,wCAAgB,WAAW,KAC3B,cAAc,uBAAuB,cAAc,UAAU,uBAC5D,cAAc,uBAAuB,SAAS,QAAQ;AAE/D;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { CslpData } from '../../cslp/types/cslp.types.cjs';
2
+ import { ISchemaFieldMap } from './types/index.types.cjs';
3
+ import '../../cms/types/contentTypeSchema.types.cjs';
4
+
5
+ declare function isCustomFieldMultipleInstance(fieldSchema: ISchemaFieldMap | null | undefined, fieldMetadata: CslpData | null | undefined): boolean;
6
+
7
+ export { isCustomFieldMultipleInstance };