@contentstack/live-preview-utils 3.2.5 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/light-sdk.cjs +1 -1
  3. package/dist/legacy/light-sdk.js +1 -1
  4. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  5. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  6. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  7. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  8. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
  9. package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
  10. package/dist/legacy/utils/addLivePreviewQueryTags.cjs +7 -1
  11. package/dist/legacy/utils/addLivePreviewQueryTags.cjs.map +1 -1
  12. package/dist/legacy/utils/addLivePreviewQueryTags.js +7 -1
  13. package/dist/legacy/utils/addLivePreviewQueryTags.js.map +1 -1
  14. package/dist/legacy/utils/index.cjs +8 -4
  15. package/dist/legacy/utils/index.cjs.map +1 -1
  16. package/dist/legacy/utils/index.js +8 -4
  17. package/dist/legacy/utils/index.js.map +1 -1
  18. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs +186 -0
  19. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  20. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  21. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  22. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js +153 -0
  23. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  24. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs +125 -0
  25. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  26. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  27. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  28. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js +92 -0
  29. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  30. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +181 -115
  31. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  32. package/dist/legacy/visualBuilder/components/FieldToolbar.js +182 -116
  33. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  34. package/dist/legacy/visualBuilder/components/Tooltip.cjs +167 -0
  35. package/dist/legacy/visualBuilder/components/Tooltip.cjs.map +1 -0
  36. package/dist/legacy/visualBuilder/components/Tooltip.d.cts +26 -0
  37. package/dist/legacy/visualBuilder/components/Tooltip.d.ts +26 -0
  38. package/dist/legacy/visualBuilder/components/Tooltip.js +140 -0
  39. package/dist/legacy/visualBuilder/components/Tooltip.js.map +1 -0
  40. package/dist/legacy/visualBuilder/components/emptyBlock.cjs +26 -5
  41. package/dist/legacy/visualBuilder/components/emptyBlock.cjs.map +1 -1
  42. package/dist/legacy/visualBuilder/components/emptyBlock.js +26 -5
  43. package/dist/legacy/visualBuilder/components/emptyBlock.js.map +1 -1
  44. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +115 -15
  45. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  46. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +117 -17
  47. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  48. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  49. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  50. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  51. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  52. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  53. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  54. package/dist/legacy/visualBuilder/components/icons/index.cjs +63 -0
  55. package/dist/legacy/visualBuilder/components/icons/index.cjs.map +1 -1
  56. package/dist/legacy/visualBuilder/components/icons/index.d.cts +4 -1
  57. package/dist/legacy/visualBuilder/components/icons/index.d.ts +4 -1
  58. package/dist/legacy/visualBuilder/components/icons/index.js +50 -0
  59. package/dist/legacy/visualBuilder/components/icons/index.js.map +1 -1
  60. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -0
  61. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  62. package/dist/legacy/visualBuilder/generators/generateOverlay.js +1 -0
  63. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  64. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +44 -10
  65. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +11 -4
  67. package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +11 -4
  68. package/dist/legacy/visualBuilder/generators/generateToolbar.js +42 -9
  69. package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
  70. package/dist/legacy/visualBuilder/index.cjs +17 -3
  71. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  72. package/dist/legacy/visualBuilder/index.d.cts +2 -0
  73. package/dist/legacy/visualBuilder/index.d.ts +2 -0
  74. package/dist/legacy/visualBuilder/index.js +17 -3
  75. package/dist/legacy/visualBuilder/index.js.map +1 -1
  76. package/dist/legacy/visualBuilder/listeners/index.cjs +3 -1
  77. package/dist/legacy/visualBuilder/listeners/index.cjs.map +1 -1
  78. package/dist/legacy/visualBuilder/listeners/index.js +3 -1
  79. package/dist/legacy/visualBuilder/listeners/index.js.map +1 -1
  80. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -3
  81. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  82. package/dist/legacy/visualBuilder/listeners/mouseClick.d.cts +4 -1
  83. package/dist/legacy/visualBuilder/listeners/mouseClick.d.ts +4 -1
  84. package/dist/legacy/visualBuilder/listeners/mouseClick.js +5 -2
  85. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  86. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +186 -133
  87. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/listeners/mouseHover.d.cts +5 -3
  89. package/dist/legacy/visualBuilder/listeners/mouseHover.d.ts +5 -3
  90. package/dist/legacy/visualBuilder/listeners/mouseHover.js +185 -133
  91. package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -23
  93. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -13
  95. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  96. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  97. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  98. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  99. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  100. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +5 -0
  101. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  102. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +183 -3
  103. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  104. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +25 -0
  105. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +25 -0
  106. package/dist/legacy/visualBuilder/visualBuilder.style.js +183 -3
  107. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  108. package/dist/modern/light-sdk.cjs +1 -1
  109. package/dist/modern/light-sdk.js +1 -1
  110. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  111. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  112. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  113. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  114. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
  115. package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
  116. package/dist/modern/utils/addLivePreviewQueryTags.cjs +7 -1
  117. package/dist/modern/utils/addLivePreviewQueryTags.cjs.map +1 -1
  118. package/dist/modern/utils/addLivePreviewQueryTags.js +7 -1
  119. package/dist/modern/utils/addLivePreviewQueryTags.js.map +1 -1
  120. package/dist/modern/utils/index.cjs +8 -4
  121. package/dist/modern/utils/index.cjs.map +1 -1
  122. package/dist/modern/utils/index.js +8 -4
  123. package/dist/modern/utils/index.js.map +1 -1
  124. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs +185 -0
  125. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  126. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  127. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  128. package/dist/modern/visualBuilder/components/FieldLocationAppList.js +152 -0
  129. package/dist/modern/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  130. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs +123 -0
  131. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  132. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  133. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  134. package/dist/modern/visualBuilder/components/FieldLocationIcon.js +90 -0
  135. package/dist/modern/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  136. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +180 -115
  137. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  138. package/dist/modern/visualBuilder/components/FieldToolbar.js +181 -116
  139. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  140. package/dist/modern/visualBuilder/components/Tooltip.cjs +167 -0
  141. package/dist/modern/visualBuilder/components/Tooltip.cjs.map +1 -0
  142. package/dist/modern/visualBuilder/components/Tooltip.d.cts +26 -0
  143. package/dist/modern/visualBuilder/components/Tooltip.d.ts +26 -0
  144. package/dist/modern/visualBuilder/components/Tooltip.js +140 -0
  145. package/dist/modern/visualBuilder/components/Tooltip.js.map +1 -0
  146. package/dist/modern/visualBuilder/components/emptyBlock.cjs +26 -5
  147. package/dist/modern/visualBuilder/components/emptyBlock.cjs.map +1 -1
  148. package/dist/modern/visualBuilder/components/emptyBlock.js +26 -5
  149. package/dist/modern/visualBuilder/components/emptyBlock.js.map +1 -1
  150. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +113 -15
  151. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  152. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +115 -17
  153. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  154. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  155. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  156. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  157. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  158. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  159. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  160. package/dist/modern/visualBuilder/components/icons/index.cjs +63 -0
  161. package/dist/modern/visualBuilder/components/icons/index.cjs.map +1 -1
  162. package/dist/modern/visualBuilder/components/icons/index.d.cts +4 -1
  163. package/dist/modern/visualBuilder/components/icons/index.d.ts +4 -1
  164. package/dist/modern/visualBuilder/components/icons/index.js +50 -0
  165. package/dist/modern/visualBuilder/components/icons/index.js.map +1 -1
  166. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -0
  167. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  168. package/dist/modern/visualBuilder/generators/generateOverlay.js +1 -0
  169. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  170. package/dist/modern/visualBuilder/generators/generateToolbar.cjs +43 -10
  171. package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  172. package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +11 -4
  173. package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +11 -4
  174. package/dist/modern/visualBuilder/generators/generateToolbar.js +41 -9
  175. package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
  176. package/dist/modern/visualBuilder/index.cjs +16 -2
  177. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  178. package/dist/modern/visualBuilder/index.d.cts +2 -0
  179. package/dist/modern/visualBuilder/index.d.ts +2 -0
  180. package/dist/modern/visualBuilder/index.js +16 -2
  181. package/dist/modern/visualBuilder/index.js.map +1 -1
  182. package/dist/modern/visualBuilder/listeners/index.cjs +3 -1
  183. package/dist/modern/visualBuilder/listeners/index.cjs.map +1 -1
  184. package/dist/modern/visualBuilder/listeners/index.js +3 -1
  185. package/dist/modern/visualBuilder/listeners/index.js.map +1 -1
  186. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -3
  187. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  188. package/dist/modern/visualBuilder/listeners/mouseClick.d.cts +4 -1
  189. package/dist/modern/visualBuilder/listeners/mouseClick.d.ts +4 -1
  190. package/dist/modern/visualBuilder/listeners/mouseClick.js +5 -2
  191. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  192. package/dist/modern/visualBuilder/listeners/mouseHover.cjs +186 -133
  193. package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  194. package/dist/modern/visualBuilder/listeners/mouseHover.d.cts +5 -3
  195. package/dist/modern/visualBuilder/listeners/mouseHover.d.ts +5 -3
  196. package/dist/modern/visualBuilder/listeners/mouseHover.js +185 -133
  197. package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
  198. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -22
  199. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  200. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -12
  201. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  202. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  203. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  204. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  205. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  206. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +5 -0
  207. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  208. package/dist/modern/visualBuilder/visualBuilder.style.cjs +183 -3
  209. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  210. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +25 -0
  211. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +25 -0
  212. package/dist/modern/visualBuilder/visualBuilder.style.js +183 -3
  213. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  214. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  import "../../chunk-5WRI5ZAA.js";
2
2
 
3
3
  // src/visualBuilder/listeners/mouseHover.ts
4
- import { throttle } from "lodash-es";
4
+ import { debounce, throttle } from "lodash-es";
5
5
  import { getCsDataOfElement } from "../utils/getCsDataOfElement.js";
6
6
  import { removeAddInstanceButtons } from "../utils/multipleElementAddButton.js";
7
7
  import { generateCustomCursor } from "../generators/generateCustomCursor.js";
@@ -15,6 +15,7 @@ import { VB_EmptyBlockParentClass } from "../../index.js";
15
15
  import Config from "../../configManager/configManager.js";
16
16
  import { isCollabThread } from "../generators/generateThread.js";
17
17
  import { getEntryPermissionsCached } from "../utils/getEntryPermissionsCached.js";
18
+ import { appendFieldPathDropdown } from "../generators/generateToolbar.js";
18
19
  var config = Config.get();
19
20
  function resetCustomCursor(customCursor) {
20
21
  if (customCursor) {
@@ -39,10 +40,41 @@ function handleCursorPosition(event, customCursor) {
39
40
  customCursor.style.top = `${mouseY}px`;
40
41
  }
41
42
  }
42
- function addOutline(editableElement, isFieldDisabled2) {
43
+ function addOutline(params) {
44
+ if (!params) {
45
+ return;
46
+ }
47
+ const { editableElement, eventDetails, content_type_uid, fieldPath, fieldMetadata, fieldDisabled } = params;
43
48
  if (!editableElement) return;
44
- addHoverOutline(editableElement, isFieldDisabled2);
49
+ addHoverOutline(editableElement, fieldDisabled);
50
+ FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
51
+ (fieldSchema) => {
52
+ let entryAcl;
53
+ if (!fieldSchema) return;
54
+ getEntryPermissionsCached({
55
+ entryUid: fieldMetadata.entry_uid,
56
+ contentTypeUid: fieldMetadata.content_type_uid,
57
+ locale: fieldMetadata.locale
58
+ }).then((data) => {
59
+ entryAcl = data;
60
+ }).catch((error) => {
61
+ console.error(
62
+ "[Visual Builder] Error retrieving entry permissions:",
63
+ error
64
+ );
65
+ }).finally(() => {
66
+ const { isDisabled: fieldDisabled2 } = isFieldDisabled(
67
+ fieldSchema,
68
+ eventDetails,
69
+ entryAcl
70
+ );
71
+ addHoverOutline(editableElement, fieldDisabled2);
72
+ });
73
+ }
74
+ );
45
75
  }
76
+ var debouncedAddOutline = debounce(addOutline, 50, { trailing: true });
77
+ var showOutline = (params) => debouncedAddOutline(params);
46
78
  function hideDefaultCursor() {
47
79
  if (document?.body && !document.body.classList.contains(
48
80
  visualBuilderStyles()["visual-builder__default-cursor--disabled"]
@@ -83,6 +115,16 @@ function showCustomCursor(customCursor) {
83
115
  return;
84
116
  customCursor?.classList.add("visible");
85
117
  }
118
+ var debouncedRenderHoverToolbar = debounce(async (params) => {
119
+ const eventDetails = getCsDataOfElement(params.event);
120
+ if (!eventDetails || !params.overlayWrapper || !params.visualBuilderContainer || !params.focusedToolbar) {
121
+ return;
122
+ }
123
+ appendFieldPathDropdown(eventDetails, params.focusedToolbar, {
124
+ isHover: true
125
+ });
126
+ }, 50, { trailing: true });
127
+ var showHoverToolbar = async (params) => await debouncedRenderHoverToolbar(params);
86
128
  function isOverlay(target) {
87
129
  return target.classList.contains("visual-builder__overlay");
88
130
  }
@@ -91,151 +133,161 @@ function isContentEditable(target) {
91
133
  return target.getAttribute("contenteditable") === "true";
92
134
  return false;
93
135
  }
94
- async function handleMouseHover(params) {
95
- throttle(async (params2) => {
96
- const eventDetails = getCsDataOfElement(params2.event);
97
- const eventTarget = params2.event.target;
98
- if (config?.collab.enable && config?.collab.pauseFeedback) {
99
- hideCustomCursor(params2.customCursor);
136
+ function isFieldPathDropdown(target) {
137
+ return target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper") || target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper__current-field");
138
+ }
139
+ function isFieldPathParent(target) {
140
+ return target.classList.contains("visual-builder__focused-toolbar__field-label-wrapper__parent-field");
141
+ }
142
+ var throttledMouseHover = throttle(async (params) => {
143
+ const eventDetails = getCsDataOfElement(params.event);
144
+ const eventTarget = params.event.target;
145
+ if (config?.collab.enable && config?.collab.pauseFeedback) {
146
+ hideCustomCursor(params.customCursor);
147
+ return;
148
+ }
149
+ if (!eventDetails) {
150
+ if (eventTarget && (isOverlay(eventTarget) || isContentEditable(eventTarget) || isCollabThread(eventTarget))) {
151
+ handleCursorPosition(params.event, params.customCursor);
152
+ hideCustomCursor(params.customCursor);
100
153
  return;
101
154
  }
102
- if (!eventDetails) {
103
- if (eventTarget && (isOverlay(eventTarget) || isContentEditable(eventTarget) || isCollabThread(eventTarget))) {
104
- handleCursorPosition(params2.event, params2.customCursor);
105
- hideCustomCursor(params2.customCursor);
106
- return;
107
- }
108
- if (!config?.collab.enable) {
109
- resetCustomCursor(params2.customCursor);
110
- }
111
- removeAddInstanceButtons({
112
- eventTarget: params2.event.target,
113
- visualBuilderContainer: params2.visualBuilderContainer,
114
- overlayWrapper: params2.overlayWrapper
155
+ if (eventTarget && (isFieldPathDropdown(eventTarget) || isFieldPathParent(eventTarget))) {
156
+ params.customCursor && hideCustomCursor(params.customCursor);
157
+ showOutline();
158
+ showHoverToolbar({
159
+ event: params.event,
160
+ overlayWrapper: params.overlayWrapper,
161
+ visualBuilderContainer: params.visualBuilderContainer,
162
+ previousSelectedEditableDOM: VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM,
163
+ focusedToolbar: params.focusedToolbar,
164
+ resizeObserver: params.resizeObserver
115
165
  });
116
- handleCursorPosition(params2.event, params2.customCursor);
117
- if (config?.collab.enable && config?.collab.isFeedbackMode) {
118
- showCustomCursor(params2.customCursor);
119
- collabCustomCursor(params2.customCursor);
166
+ }
167
+ if (!config?.collab.enable) {
168
+ resetCustomCursor(params.customCursor);
169
+ }
170
+ removeAddInstanceButtons({
171
+ eventTarget: params.event.target,
172
+ visualBuilderContainer: params.visualBuilderContainer,
173
+ overlayWrapper: params.overlayWrapper
174
+ });
175
+ handleCursorPosition(params.event, params.customCursor);
176
+ if (config?.collab.enable && config?.collab.isFeedbackMode) {
177
+ showCustomCursor(params.customCursor);
178
+ collabCustomCursor(params.customCursor);
179
+ }
180
+ return;
181
+ }
182
+ const { editableElement, fieldMetadata } = eventDetails;
183
+ const { content_type_uid, fieldPath } = fieldMetadata;
184
+ if (VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM && VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(
185
+ editableElement
186
+ )) {
187
+ hideCustomCursor(params.customCursor);
188
+ return;
189
+ }
190
+ if (params.customCursor) {
191
+ const elementUnderCursor = document.elementFromPoint(
192
+ params.event.clientX,
193
+ params.event.clientY
194
+ );
195
+ if (elementUnderCursor) {
196
+ if (elementUnderCursor.nodeName === "A" || elementUnderCursor.nodeName === "BUTTON") {
197
+ elementUnderCursor.classList.add(
198
+ visualBuilderStyles()["visual-builder__no-cursor-style"]
199
+ );
120
200
  }
121
- return;
122
201
  }
123
- const { editableElement, fieldMetadata } = eventDetails;
124
- const { content_type_uid, fieldPath } = fieldMetadata;
125
- if (VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM && VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(
126
- editableElement
127
- )) {
128
- hideCustomCursor(params2.customCursor);
202
+ if (config?.collab.enable && config?.collab.isFeedbackMode) {
203
+ collabCustomCursor(params.customCursor);
204
+ handleCursorPosition(params.event, params.customCursor);
205
+ showCustomCursor(params.customCursor);
129
206
  return;
207
+ } else if (config?.collab.enable && !config?.collab.isFeedbackMode) {
208
+ hideCustomCursor(params.customCursor);
209
+ return;
210
+ }
211
+ if (VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM !== editableElement) {
212
+ resetCustomCursor(params.customCursor);
213
+ removeAddInstanceButtons({
214
+ eventTarget: params.event.target,
215
+ visualBuilderContainer: params.visualBuilderContainer,
216
+ overlayWrapper: params.overlayWrapper
217
+ });
130
218
  }
131
- if (params2.customCursor) {
132
- const elementUnderCursor = document.elementFromPoint(
133
- params2.event.clientX,
134
- params2.event.clientY
135
- );
136
- if (elementUnderCursor) {
137
- if (elementUnderCursor.nodeName === "A" || elementUnderCursor.nodeName === "BUTTON") {
138
- elementUnderCursor.classList.add(
139
- visualBuilderStyles()["visual-builder__no-cursor-style"]
219
+ if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {
220
+ generateCustomCursor({
221
+ fieldType: "loading",
222
+ customCursor: params.customCursor
223
+ });
224
+ }
225
+ FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
226
+ (fieldSchema) => {
227
+ if (!fieldSchema) return;
228
+ let entryAcl;
229
+ getEntryPermissionsCached({
230
+ entryUid: fieldMetadata.entry_uid,
231
+ contentTypeUid: fieldMetadata.content_type_uid,
232
+ locale: fieldMetadata.locale
233
+ }).then((data) => {
234
+ entryAcl = data;
235
+ }).catch((error) => {
236
+ console.error(
237
+ "[Visual Builder] Error retrieving entry permissions:",
238
+ error
140
239
  );
141
- }
142
- }
143
- if (config?.collab.enable && config?.collab.isFeedbackMode) {
144
- collabCustomCursor(params2.customCursor);
145
- handleCursorPosition(params2.event, params2.customCursor);
146
- showCustomCursor(params2.customCursor);
147
- return;
148
- } else if (config?.collab.enable && !config?.collab.isFeedbackMode) {
149
- hideCustomCursor(params2.customCursor);
150
- return;
151
- }
152
- if (VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM !== editableElement) {
153
- resetCustomCursor(params2.customCursor);
154
- removeAddInstanceButtons({
155
- eventTarget: params2.event.target,
156
- visualBuilderContainer: params2.visualBuilderContainer,
157
- overlayWrapper: params2.overlayWrapper
158
- });
159
- }
160
- if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {
161
- generateCustomCursor({
162
- fieldType: "loading",
163
- customCursor: params2.customCursor
240
+ }).finally(() => {
241
+ if (!params.customCursor) return;
242
+ const { isDisabled: fieldDisabled } = isFieldDisabled(
243
+ fieldSchema,
244
+ eventDetails,
245
+ entryAcl
246
+ );
247
+ const fieldType = getFieldType(fieldSchema);
248
+ generateCustomCursor({
249
+ fieldType,
250
+ customCursor: params.customCursor,
251
+ fieldDisabled
252
+ });
164
253
  });
165
254
  }
166
- FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
167
- (fieldSchema) => {
168
- if (!fieldSchema) return;
169
- let entryAcl;
170
- getEntryPermissionsCached({
171
- entryUid: fieldMetadata.entry_uid,
172
- contentTypeUid: fieldMetadata.content_type_uid,
173
- locale: fieldMetadata.locale
174
- }).then((data) => {
175
- entryAcl = data;
176
- }).catch((error) => {
177
- console.error(
178
- "[Visual Builder] Error retrieving entry permissions:",
179
- error
180
- );
181
- }).finally(() => {
182
- if (!params2.customCursor) return;
183
- const { isDisabled: fieldDisabled } = isFieldDisabled(
184
- fieldSchema,
185
- eventDetails,
186
- entryAcl
187
- );
188
- const fieldType = getFieldType(fieldSchema);
189
- generateCustomCursor({
190
- fieldType,
191
- customCursor: params2.customCursor,
192
- fieldDisabled
193
- });
194
- });
195
- }
196
- );
197
- handleCursorPosition(params2.event, params2.customCursor);
198
- showCustomCursor(params2.customCursor);
199
- }
200
- if (!editableElement.classList.contains(VB_EmptyBlockParentClass) && !editableElement.classList.contains("visual-builder__empty-block")) {
201
- addOutline(editableElement);
202
- FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(
203
- (fieldSchema) => {
204
- let entryAcl;
205
- if (!fieldSchema) return;
206
- getEntryPermissionsCached({
207
- entryUid: fieldMetadata.entry_uid,
208
- contentTypeUid: fieldMetadata.content_type_uid,
209
- locale: fieldMetadata.locale
210
- }).then((data) => {
211
- entryAcl = data;
212
- }).catch((error) => {
213
- console.error(
214
- "[Visual Builder] Error retrieving entry permissions:",
215
- error
216
- );
217
- }).finally(() => {
218
- const { isDisabled: fieldDisabled } = isFieldDisabled(
219
- fieldSchema,
220
- eventDetails,
221
- entryAcl
222
- );
223
- addOutline(editableElement, fieldDisabled);
224
- });
225
- }
226
- );
227
- }
228
- if (VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM === editableElement) {
229
- return;
255
+ );
256
+ handleCursorPosition(params.event, params.customCursor);
257
+ showCustomCursor(params.customCursor);
258
+ }
259
+ if (!editableElement.classList.contains(VB_EmptyBlockParentClass) && !editableElement.classList.contains("visual-builder__empty-block")) {
260
+ showOutline({
261
+ editableElement,
262
+ eventDetails,
263
+ content_type_uid,
264
+ fieldPath,
265
+ fieldMetadata
266
+ });
267
+ const isFocussed = VisualBuilder.VisualBuilderGlobalState.value.isFocussed;
268
+ if (!isFocussed) {
269
+ showHoverToolbar({
270
+ event: params.event,
271
+ overlayWrapper: params.overlayWrapper,
272
+ visualBuilderContainer: params.visualBuilderContainer,
273
+ previousSelectedEditableDOM: VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM,
274
+ focusedToolbar: params.focusedToolbar,
275
+ resizeObserver: params.resizeObserver
276
+ });
230
277
  }
231
- VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM = editableElement;
232
- }, 10)(params);
233
- }
278
+ }
279
+ if (VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM === editableElement) {
280
+ return;
281
+ }
282
+ VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM = editableElement;
283
+ }, 10);
284
+ var handleMouseHover = async (params) => await throttledMouseHover(params);
234
285
  var mouseHover_default = handleMouseHover;
235
286
  export {
236
287
  mouseHover_default as default,
237
288
  hideCustomCursor,
238
289
  hideHoverOutline,
239
- showCustomCursor
290
+ showCustomCursor,
291
+ showHoverToolbar
240
292
  };
241
293
  //# sourceMappingURL=mouseHover.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseHover.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { getCsDataOfElement } from \"../utils/getCsDataOfElement\";\nimport { removeAddInstanceButtons } from \"../utils/multipleElementAddButton\";\nimport { generateCustomCursor } from \"../generators/generateCustomCursor\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport { getFieldType } from \"../utils/getFieldType\";\n\nimport EventListenerHandlerParams from \"./types\";\nimport { VisualBuilder } from \"..\";\nimport { addHoverOutline } from \"../generators/generateHoverOutline\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport Config from \"../../configManager/configManager\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { EntryPermissions } from \"../utils/getEntryPermissions\";\n\nconst config = Config.get();\nexport interface HandleMouseHoverParams\n extends Pick<\n EventListenerHandlerParams,\n \"event\" | \"overlayWrapper\" | \"visualBuilderContainer\"\n > {\n customCursor: HTMLDivElement | null;\n}\n\nfunction resetCustomCursor(customCursor: HTMLDivElement | null): void {\n if (customCursor) {\n generateCustomCursor({\n fieldType: \"empty\",\n customCursor: customCursor,\n });\n }\n}\n\nfunction collabCustomCursor(customCursor: HTMLDivElement | null): void {\n if (!customCursor) return;\n\n generateCustomCursor({\n fieldType: \"discussion\",\n customCursor: customCursor,\n });\n}\n\nfunction handleCursorPosition(\n event: MouseEvent,\n customCursor: HTMLDivElement | null\n): void {\n if (customCursor) {\n const mouseY = event.clientY;\n const mouseX = event.clientX;\n\n customCursor.style.left = `${mouseX}px`;\n customCursor.style.top = `${mouseY}px`;\n }\n}\n\nfunction addOutline(editableElement: Element, isFieldDisabled?: boolean): void {\n if (!editableElement) return;\n\n addHoverOutline(editableElement as HTMLElement, isFieldDisabled);\n}\n\nfunction hideDefaultCursor(): void {\n if (\n document?.body &&\n !document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.add(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nfunction showDefaultCursor(): void {\n if (\n document?.body &&\n document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.remove(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nexport function hideHoverOutline(\n visualBuilderContainer: HTMLDivElement | null\n): void {\n if (!visualBuilderContainer) {\n return;\n }\n const hoverOutline = visualBuilderContainer.querySelector(\n \".visual-builder__hover-outline\"\n );\n if (!hoverOutline) {\n return;\n }\n hoverOutline.classList.add(\n visualBuilderStyles()[\"visual-builder__hover-outline--hidden\"]\n );\n}\n\nexport function hideCustomCursor(customCursor: HTMLDivElement | null): void {\n showDefaultCursor();\n customCursor?.classList.remove(\"visible\");\n}\n\nexport function showCustomCursor(customCursor: HTMLDivElement | null): void {\n hideDefaultCursor();\n if (\n config.collab.enable &&\n (!config.collab.isFeedbackMode || config.collab.pauseFeedback)\n )\n return;\n customCursor?.classList.add(\"visible\");\n}\n\nfunction isOverlay(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__overlay\");\n}\n\nfunction isContentEditable(target: HTMLElement): boolean {\n if (target.hasAttribute(\"contenteditable\"))\n return target.getAttribute(\"contenteditable\") === \"true\";\n return false;\n}\n\nasync function handleMouseHover(params: HandleMouseHoverParams): Promise<void> {\n throttle(async (params: HandleMouseHoverParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n const eventTarget = params.event.target as HTMLElement | null;\n\n if (config?.collab.enable && config?.collab.pauseFeedback) {\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!eventDetails) {\n if (\n eventTarget &&\n (isOverlay(eventTarget) ||\n isContentEditable(eventTarget) ||\n isCollabThread(eventTarget))\n ) {\n handleCursorPosition(params.event, params.customCursor);\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!config?.collab.enable) {\n resetCustomCursor(params.customCursor);\n }\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n handleCursorPosition(params.event, params.customCursor);\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n showCustomCursor(params.customCursor);\n collabCustomCursor(params.customCursor);\n }\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const { content_type_uid, fieldPath } = fieldMetadata;\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM &&\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(\n editableElement\n )\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (params.customCursor) {\n const elementUnderCursor = document.elementFromPoint(\n params.event.clientX,\n params.event.clientY\n );\n if (elementUnderCursor) {\n if (\n elementUnderCursor.nodeName === \"A\" ||\n elementUnderCursor.nodeName === \"BUTTON\"\n ) {\n elementUnderCursor.classList.add(\n visualBuilderStyles()[\"visual-builder__no-cursor-style\"]\n );\n }\n }\n\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n collabCustomCursor(params.customCursor);\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n return;\n } else if (\n config?.collab.enable &&\n !config?.collab.isFeedbackMode\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n resetCustomCursor(params.customCursor);\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n }\n\n if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {\n generateCustomCursor({\n fieldType: \"loading\",\n customCursor: params.customCursor,\n });\n }\n\n /**\n * We called it seperately inside the code block to ensure that\n * the code will not wait for the promise to resolve.\n * If we get a cache miss, we will send a message to the iframe\n * without blocking the code.\n */\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n if (!fieldSchema) return;\n\n let entryAcl: EntryPermissions | undefined;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n if (!params.customCursor) return;\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor: params.customCursor,\n fieldDisabled,\n });\n });\n }\n );\n\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n }\n\n if (\n !editableElement.classList.contains(VB_EmptyBlockParentClass) &&\n !editableElement.classList.contains(\"visual-builder__empty-block\")\n ) {\n addOutline(editableElement);\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n let entryAcl: EntryPermissions | undefined;\n if (!fieldSchema) return;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n addOutline(editableElement, fieldDisabled);\n });\n }\n );\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n }, 10)(params);\n}\n\nexport default handleMouseHover;\n"],"mappings":"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","names":["isFieldDisabled","params"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseHover.ts"],"sourcesContent":["import { debounce, throttle } from \"lodash-es\";\nimport { getCsDataOfElement } from \"../utils/getCsDataOfElement\";\nimport { removeAddInstanceButtons } from \"../utils/multipleElementAddButton\";\nimport { generateCustomCursor } from \"../generators/generateCustomCursor\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport { getFieldType } from \"../utils/getFieldType\";\n\nimport EventListenerHandlerParams from \"./types\";\nimport { VisualBuilder } from \"..\";\nimport { addHoverOutline } from \"../generators/generateHoverOutline\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport Config from \"../../configManager/configManager\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { EntryPermissions } from \"../utils/getEntryPermissions\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { HandleBuilderInteractionParams } from \"./mouseClick\";\nimport { appendFieldPathDropdown, removeFieldToolbar } from \"../generators/generateToolbar\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\n\nconst config = Config.get();\nexport interface HandleMouseHoverParams\n extends Pick<\n EventListenerHandlerParams,\n \"event\" | \"overlayWrapper\" | \"visualBuilderContainer\" | \"focusedToolbar\" | \"resizeObserver\"\n > {\n customCursor: HTMLDivElement | null;\n}\n\ninterface AddOutlineParams {\n editableElement: Element;\n eventDetails: VisualBuilderCslpEventDetails;\n content_type_uid: string;\n fieldPath: string;\n fieldDisabled?: boolean;\n fieldMetadata: CslpData;\n}\n\nfunction resetCustomCursor(customCursor: HTMLDivElement | null): void {\n if (customCursor) {\n generateCustomCursor({\n fieldType: \"empty\",\n customCursor: customCursor,\n });\n }\n}\n\nfunction collabCustomCursor(customCursor: HTMLDivElement | null): void {\n if (!customCursor) return;\n\n generateCustomCursor({\n fieldType: \"discussion\",\n customCursor: customCursor,\n });\n}\n\nfunction handleCursorPosition(\n event: MouseEvent,\n customCursor: HTMLDivElement | null\n): void {\n if (customCursor) {\n const mouseY = event.clientY;\n const mouseX = event.clientX;\n\n customCursor.style.left = `${mouseX}px`;\n customCursor.style.top = `${mouseY}px`;\n }\n}\n\nfunction addOutline(params?: AddOutlineParams): void {\n if(!params) {\n return;\n }\n const { editableElement, eventDetails, content_type_uid, fieldPath, fieldMetadata, fieldDisabled } = params;\n if (!editableElement) return;\n addHoverOutline(editableElement as HTMLElement, fieldDisabled);\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n let entryAcl: EntryPermissions | undefined;\n if (!fieldSchema) return;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n addHoverOutline(editableElement, fieldDisabled);\n });\n }\n );\n}\n\nconst debouncedAddOutline = debounce(addOutline, 50, { trailing: true });\nconst showOutline = (params?: AddOutlineParams): void => debouncedAddOutline(params);\n\nfunction hideDefaultCursor(): void {\n if (\n document?.body &&\n !document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.add(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nfunction showDefaultCursor(): void {\n if (\n document?.body &&\n document.body.classList.contains(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n )\n )\n document.body.classList.remove(\n visualBuilderStyles()[\"visual-builder__default-cursor--disabled\"]\n );\n}\n\nexport function hideHoverOutline(\n visualBuilderContainer: HTMLDivElement | null\n): void {\n if (!visualBuilderContainer) {\n return;\n }\n const hoverOutline = visualBuilderContainer.querySelector(\n \".visual-builder__hover-outline\"\n );\n if (!hoverOutline) {\n return;\n }\n hoverOutline.classList.add(\n visualBuilderStyles()[\"visual-builder__hover-outline--hidden\"]\n );\n}\n\nexport function hideCustomCursor(customCursor: HTMLDivElement | null): void {\n showDefaultCursor();\n customCursor?.classList.remove(\"visible\");\n}\n\nexport function showCustomCursor(customCursor: HTMLDivElement | null): void {\n hideDefaultCursor();\n if (\n config.collab.enable &&\n (!config.collab.isFeedbackMode || config.collab.pauseFeedback)\n )\n return;\n customCursor?.classList.add(\"visible\");\n}\n\nconst debouncedRenderHoverToolbar = debounce(async (params: HandleBuilderInteractionParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer ||\n !params.focusedToolbar\n ) {\n return;\n }\n\n appendFieldPathDropdown(eventDetails, params.focusedToolbar, {\n isHover: true\n });\n}, 50, { trailing: true });\n\nexport const showHoverToolbar = async (params: HandleBuilderInteractionParams) => await debouncedRenderHoverToolbar(params);\n\nfunction isOverlay(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__overlay\");\n}\n\nfunction isContentEditable(target: HTMLElement): boolean {\n if (target.hasAttribute(\"contenteditable\"))\n return target.getAttribute(\"contenteditable\") === \"true\";\n return false;\n}\n\nfunction isFieldPathDropdown(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper\") || target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper__current-field\");\n}\n\nfunction isFieldPathParent(target: HTMLElement): boolean {\n return target.classList.contains(\"visual-builder__focused-toolbar__field-label-wrapper__parent-field\");\n}\n\nconst throttledMouseHover = throttle(async (params: HandleMouseHoverParams) => {\n const eventDetails = getCsDataOfElement(params.event);\n const eventTarget = params.event.target as HTMLElement | null;\n\n if (config?.collab.enable && config?.collab.pauseFeedback) {\n hideCustomCursor(params.customCursor);\n return;\n }\n if (!eventDetails) {\n if (\n eventTarget &&\n (isOverlay(eventTarget) ||\n isContentEditable(eventTarget) ||\n isCollabThread(eventTarget))\n ) {\n handleCursorPosition(params.event, params.customCursor);\n hideCustomCursor(params.customCursor);\n return;\n }\n if(\n eventTarget &&\n (isFieldPathDropdown(eventTarget) || isFieldPathParent(eventTarget))\n ) {\n params.customCursor && hideCustomCursor(params.customCursor);\n showOutline();\n showHoverToolbar({\n event: params.event,\n overlayWrapper: params.overlayWrapper,\n visualBuilderContainer: params.visualBuilderContainer,\n previousSelectedEditableDOM:\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n if (!config?.collab.enable) {\n resetCustomCursor(params.customCursor);\n }\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n handleCursorPosition(params.event, params.customCursor);\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n showCustomCursor(params.customCursor);\n collabCustomCursor(params.customCursor);\n }\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const { content_type_uid, fieldPath } = fieldMetadata;\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM &&\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM.isSameNode(\n editableElement\n )\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (params.customCursor) {\n const elementUnderCursor = document.elementFromPoint(\n params.event.clientX,\n params.event.clientY\n );\n if (elementUnderCursor) {\n if (\n elementUnderCursor.nodeName === \"A\" ||\n elementUnderCursor.nodeName === \"BUTTON\"\n ) {\n elementUnderCursor.classList.add(\n visualBuilderStyles()[\"visual-builder__no-cursor-style\"]\n );\n }\n }\n\n if (config?.collab.enable && config?.collab.isFeedbackMode) {\n collabCustomCursor(params.customCursor);\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n return;\n } else if (\n config?.collab.enable &&\n !config?.collab.isFeedbackMode\n ) {\n hideCustomCursor(params.customCursor);\n return;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM !== editableElement\n ) {\n resetCustomCursor(params.customCursor);\n removeAddInstanceButtons({\n eventTarget: params.event.target,\n visualBuilderContainer: params.visualBuilderContainer,\n overlayWrapper: params.overlayWrapper,\n });\n }\n\n if (!FieldSchemaMap.hasFieldSchema(content_type_uid, fieldPath)) {\n generateCustomCursor({\n fieldType: \"loading\",\n customCursor: params.customCursor,\n });\n }\n\n /**\n * We called it seperately inside the code block to ensure that\n * the code will not wait for the promise to resolve.\n * If we get a cache miss, we will send a message to the iframe\n * without blocking the code.\n */\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath).then(\n (fieldSchema) => {\n if (!fieldSchema) return;\n\n let entryAcl: EntryPermissions | undefined;\n getEntryPermissionsCached({\n entryUid: fieldMetadata.entry_uid,\n contentTypeUid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n })\n .then((data) => {\n entryAcl = data;\n })\n .catch((error) => {\n console.error(\n \"[Visual Builder] Error retrieving entry permissions:\",\n error\n );\n })\n .finally(() => {\n if (!params.customCursor) return;\n const { isDisabled: fieldDisabled } =\n isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n const fieldType = getFieldType(fieldSchema);\n generateCustomCursor({\n fieldType,\n customCursor: params.customCursor,\n fieldDisabled,\n });\n });\n }\n );\n\n handleCursorPosition(params.event, params.customCursor);\n showCustomCursor(params.customCursor);\n }\n\n if (\n !editableElement.classList.contains(VB_EmptyBlockParentClass) &&\n !editableElement.classList.contains(\"visual-builder__empty-block\")\n ) {\n showOutline({\n editableElement,\n eventDetails,\n content_type_uid,\n fieldPath,\n fieldMetadata,\n });\n const isFocussed= VisualBuilder.VisualBuilderGlobalState.value.isFocussed;\n if(!isFocussed) {\n showHoverToolbar({\n event: params.event,\n overlayWrapper: params.overlayWrapper,\n visualBuilderContainer: params.visualBuilderContainer,\n previousSelectedEditableDOM:\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value\n .previousHoveredTargetDOM === editableElement\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM =\n editableElement;\n}, 10);\n\nconst handleMouseHover = async (params: HandleMouseHoverParams): Promise<void> => await throttledMouseHover(params);\n\nexport default handleMouseHover;\n"],"mappings":"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","names":["fieldDisabled"]}
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
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
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
 
30
20
  // src/visualBuilder/utils/handleIndividualFields.ts
@@ -42,12 +32,11 @@ var import_getFieldType = require("./getFieldType.cjs");
42
32
  var import_handleFieldMouseDown = require("./handleFieldMouseDown.cjs");
43
33
  var import_isFieldDisabled = require("./isFieldDisabled.cjs");
44
34
  var import_multipleElementAddButton = require("./multipleElementAddButton.cjs");
45
- var import_postMessage = require("./types/postMessage.types.cjs");
46
- var import_visualBuilderPostMessage = __toESM(require("./visualBuilderPostMessage.cjs"), 1);
47
35
  var import_isFieldMultiple = require("./isFieldMultiple.cjs");
48
36
  var import_handleInlineEditableField = require("./handleInlineEditableField.cjs");
49
37
  var import_pasteAsPlainText = require("./pasteAsPlainText.cjs");
50
38
  var import_getEntryPermissionsCached = require("./getEntryPermissionsCached.cjs");
39
+ var import_generateToolbar = require("../generators/generateToolbar.cjs");
51
40
  async function handleIndividualFields(eventDetails, elements) {
52
41
  const { fieldMetadata, editableElement } = eventDetails;
53
42
  const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
@@ -158,16 +147,7 @@ function cleanIndividualFieldResidual(elements) {
158
147
  }
159
148
  }
160
149
  if (focusedToolbar) {
161
- focusedToolbar.innerHTML = "";
162
- const toolbarEvents = [
163
- import_postMessage.VisualBuilderPostMessageEvents.DELETE_INSTANCE,
164
- import_postMessage.VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID
165
- ];
166
- toolbarEvents.forEach((event) => {
167
- if (import_visualBuilderPostMessage.default?.requestMessageHandlers?.has(event)) {
168
- import_visualBuilderPostMessage.default?.unregisterEvent?.(event);
169
- }
170
- });
150
+ (0, import_generateToolbar.removeFieldToolbar)(focusedToolbar);
171
151
  }
172
152
  }
173
153
  // Annotate the CommonJS export names for ESM import in node:
@@ -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 { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\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 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 entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\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 focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n"],"mappings":"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","names":["visualBuilderPostMessage"]}
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 { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\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 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 entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\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,uCAA0C;AAC1C,6BAAmC;AAOnC,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,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,WAAW,UAAM,4DAA0B;AAAA,IAC7C,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB;AAAA,EACJ,CAAC;AACD,QAAM,EAAE,YAAY,SAAS,QAAI;AAAA,IAC7B;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":[]}
@@ -12,12 +12,11 @@ import {
12
12
  handleAddButtonsForMultiple,
13
13
  removeAddInstanceButtons
14
14
  } from "./multipleElementAddButton.js";
15
- import { VisualBuilderPostMessageEvents } from "./types/postMessage.types.js";
16
- import visualBuilderPostMessage from "./visualBuilderPostMessage.js";
17
15
  import { isFieldMultiple } from "./isFieldMultiple.js";
18
16
  import { handleInlineEditableField } from "./handleInlineEditableField.js";
19
17
  import { pasteAsPlainText } from "./pasteAsPlainText.js";
20
18
  import { getEntryPermissionsCached } from "./getEntryPermissionsCached.js";
19
+ import { removeFieldToolbar } from "../generators/generateToolbar.js";
21
20
  async function handleIndividualFields(eventDetails, elements) {
22
21
  const { fieldMetadata, editableElement } = eventDetails;
23
22
  const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
@@ -128,16 +127,7 @@ function cleanIndividualFieldResidual(elements) {
128
127
  }
129
128
  }
130
129
  if (focusedToolbar) {
131
- focusedToolbar.innerHTML = "";
132
- const toolbarEvents = [
133
- VisualBuilderPostMessageEvents.DELETE_INSTANCE,
134
- VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID
135
- ];
136
- toolbarEvents.forEach((event) => {
137
- if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {
138
- visualBuilderPostMessage?.unregisterEvent?.(event);
139
- }
140
- });
130
+ removeFieldToolbar(focusedToolbar);
141
131
  }
142
132
  }
143
133
  export {
@@ -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 { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\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 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 entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\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 focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\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 { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\nimport { removeFieldToolbar } from \"../generators/generateToolbar\";\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 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 entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\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,SAAS,qBAAqB;AAE9B,SAAS,+CAA+C;AACxD,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB,0BAA0B;AACrD,SAAS,uBAAuB;AAChC;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,uBAAuB;AAChC,SAAS,iCAAiC;AAE1C,SAAS,wBAAwB;AACjC,SAAS,iCAAiC;AAC1C,SAAS,0BAA0B;AAOnC,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,EACJ,IAAI;AAEJ,QAAM,CAAC,aAAa,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,eAAe,eAAe,kBAAkB,SAAS;AAAA,IACzD;AAAA,MACI,EAAE,kBAAkB,WAAW,OAAO;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,YAAY,aAAa,WAAW;AAE1C,QAAM,WAAW,MAAM,0BAA0B;AAAA,IAC7C,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB;AAAA,EACJ,CAAC;AACD,QAAM,EAAE,YAAY,SAAS,IAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,kBAAgB;AAAA,IACZ;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,gBAAgB,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,4BAA0B;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,cAAc,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,gBAAgB;AACnE,0BAAsB,OAAO;AAC7B,QAAI,6BAA6B;AAC7B,MAAC,4BAA4C,MAAM;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,gBAAgB;AAChB,uBAAmB,cAAc;AAAA,EACrC;AACJ;","names":[]}