@contentstack/live-preview-utils 4.2.0 → 4.3.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 (226) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/configManager/config.default.cjs +4 -2
  3. package/dist/legacy/configManager/config.default.cjs.map +1 -1
  4. package/dist/legacy/configManager/config.default.d.cts +1 -1
  5. package/dist/legacy/configManager/config.default.d.ts +1 -1
  6. package/dist/legacy/configManager/config.default.js +4 -2
  7. package/dist/legacy/configManager/config.default.js.map +1 -1
  8. package/dist/legacy/configManager/handleUserConfig.cjs +4 -0
  9. package/dist/legacy/configManager/handleUserConfig.cjs.map +1 -1
  10. package/dist/legacy/configManager/handleUserConfig.js +4 -0
  11. package/dist/legacy/configManager/handleUserConfig.js.map +1 -1
  12. package/dist/legacy/cslp/cslpdata.cjs +28 -3
  13. package/dist/legacy/cslp/cslpdata.cjs.map +1 -1
  14. package/dist/legacy/cslp/cslpdata.d.cts +27 -1
  15. package/dist/legacy/cslp/cslpdata.d.ts +27 -1
  16. package/dist/legacy/cslp/cslpdata.js +26 -2
  17. package/dist/legacy/cslp/cslpdata.js.map +1 -1
  18. package/dist/legacy/cslp/index.d.cts +1 -1
  19. package/dist/legacy/cslp/index.d.ts +1 -1
  20. package/dist/legacy/light-sdk.cjs +1 -1
  21. package/dist/legacy/light-sdk.js +1 -1
  22. package/dist/legacy/livePreview/editButton/editButton.cjs +1 -1
  23. package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
  24. package/dist/legacy/livePreview/editButton/editButton.js +2 -2
  25. package/dist/legacy/livePreview/editButton/editButton.js.map +1 -1
  26. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +11 -6
  27. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  28. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +11 -6
  29. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  30. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
  31. package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
  32. package/dist/legacy/timeline/compare/compare.cjs +3 -1
  33. package/dist/legacy/timeline/compare/compare.cjs.map +1 -1
  34. package/dist/legacy/timeline/compare/compare.js +3 -1
  35. package/dist/legacy/timeline/compare/compare.js.map +1 -1
  36. package/dist/legacy/types/types.cjs.map +1 -1
  37. package/dist/legacy/types/types.d.cts +2 -0
  38. package/dist/legacy/types/types.d.ts +2 -0
  39. package/dist/legacy/types/types.js.map +1 -1
  40. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +1 -1
  41. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  42. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +2 -2
  43. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  44. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +19 -22
  45. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  46. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.d.cts +2 -1
  47. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.d.ts +2 -1
  48. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +18 -22
  49. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  50. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
  51. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
  52. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
  53. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
  54. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +63 -13
  55. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
  56. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.d.cts +12 -3
  57. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.d.ts +12 -3
  58. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js +60 -14
  59. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
  60. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
  61. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
  62. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js +2 -2
  63. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
  64. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
  65. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js +2 -1
  67. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
  68. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -1
  69. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  70. package/dist/legacy/visualBuilder/generators/generateOverlay.js +2 -2
  71. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  72. package/dist/legacy/visualBuilder/generators/generateThread.d.cts +1 -1
  73. package/dist/legacy/visualBuilder/generators/generateThread.d.ts +1 -1
  74. package/dist/legacy/visualBuilder/index.cjs +12 -2
  75. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  76. package/dist/legacy/visualBuilder/index.d.cts +2 -0
  77. package/dist/legacy/visualBuilder/index.d.ts +2 -0
  78. package/dist/legacy/visualBuilder/index.js +14 -4
  79. package/dist/legacy/visualBuilder/index.js.map +1 -1
  80. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +14 -10
  81. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  82. package/dist/legacy/visualBuilder/listeners/mouseClick.js +14 -10
  83. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  84. package/dist/legacy/visualBuilder/utils/collabUtils.d.cts +1 -1
  85. package/dist/legacy/visualBuilder/utils/collabUtils.d.ts +1 -1
  86. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs +3 -3
  87. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js +4 -4
  89. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
  90. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs +1 -1
  91. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js +2 -2
  93. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +2 -2
  95. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
  96. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +3 -3
  97. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
  98. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  99. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  100. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
  101. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
  102. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +1 -0
  103. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  104. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs +1 -1
  105. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  106. package/dist/legacy/visualBuilder/utils/updateFocussedState.js +2 -2
  107. package/dist/legacy/visualBuilder/utils/updateFocussedState.js.map +1 -1
  108. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +2 -1
  109. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  110. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +1 -0
  111. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +1 -0
  112. package/dist/legacy/visualBuilder/visualBuilder.style.js +2 -1
  113. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  114. package/dist/modern/configManager/config.default.cjs +4 -2
  115. package/dist/modern/configManager/config.default.cjs.map +1 -1
  116. package/dist/modern/configManager/config.default.d.cts +1 -1
  117. package/dist/modern/configManager/config.default.d.ts +1 -1
  118. package/dist/modern/configManager/config.default.js +4 -2
  119. package/dist/modern/configManager/config.default.js.map +1 -1
  120. package/dist/modern/configManager/handleUserConfig.cjs +4 -0
  121. package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
  122. package/dist/modern/configManager/handleUserConfig.js +4 -0
  123. package/dist/modern/configManager/handleUserConfig.js.map +1 -1
  124. package/dist/modern/cslp/cslpdata.cjs +28 -3
  125. package/dist/modern/cslp/cslpdata.cjs.map +1 -1
  126. package/dist/modern/cslp/cslpdata.d.cts +27 -1
  127. package/dist/modern/cslp/cslpdata.d.ts +27 -1
  128. package/dist/modern/cslp/cslpdata.js +26 -2
  129. package/dist/modern/cslp/cslpdata.js.map +1 -1
  130. package/dist/modern/cslp/index.d.cts +1 -1
  131. package/dist/modern/cslp/index.d.ts +1 -1
  132. package/dist/modern/light-sdk.cjs +1 -1
  133. package/dist/modern/light-sdk.js +1 -1
  134. package/dist/modern/livePreview/editButton/editButton.cjs +1 -1
  135. package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
  136. package/dist/modern/livePreview/editButton/editButton.js +2 -2
  137. package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
  138. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +11 -6
  139. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  140. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +11 -6
  141. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  142. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
  143. package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
  144. package/dist/modern/timeline/compare/compare.cjs +3 -1
  145. package/dist/modern/timeline/compare/compare.cjs.map +1 -1
  146. package/dist/modern/timeline/compare/compare.js +3 -1
  147. package/dist/modern/timeline/compare/compare.js.map +1 -1
  148. package/dist/modern/types/types.cjs.map +1 -1
  149. package/dist/modern/types/types.d.cts +2 -0
  150. package/dist/modern/types/types.d.ts +2 -0
  151. package/dist/modern/types/types.js.map +1 -1
  152. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +1 -1
  153. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  154. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +2 -2
  155. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  156. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +19 -22
  157. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  158. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.d.cts +2 -1
  159. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.d.ts +2 -1
  160. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +18 -22
  161. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  162. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
  163. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
  164. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
  165. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
  166. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +62 -13
  167. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
  168. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.d.cts +12 -3
  169. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.d.ts +12 -3
  170. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js +59 -14
  171. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
  172. package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
  173. package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
  174. package/dist/modern/visualBuilder/generators/generateEmptyBlock.js +2 -2
  175. package/dist/modern/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
  176. package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
  177. package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
  178. package/dist/modern/visualBuilder/generators/generateHighlightedComment.js +2 -1
  179. package/dist/modern/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
  180. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -1
  181. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  182. package/dist/modern/visualBuilder/generators/generateOverlay.js +2 -2
  183. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  184. package/dist/modern/visualBuilder/generators/generateThread.d.cts +1 -1
  185. package/dist/modern/visualBuilder/generators/generateThread.d.ts +1 -1
  186. package/dist/modern/visualBuilder/index.cjs +12 -2
  187. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  188. package/dist/modern/visualBuilder/index.d.cts +2 -0
  189. package/dist/modern/visualBuilder/index.d.ts +2 -0
  190. package/dist/modern/visualBuilder/index.js +14 -4
  191. package/dist/modern/visualBuilder/index.js.map +1 -1
  192. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +14 -10
  193. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  194. package/dist/modern/visualBuilder/listeners/mouseClick.js +14 -10
  195. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  196. package/dist/modern/visualBuilder/utils/collabUtils.d.cts +1 -1
  197. package/dist/modern/visualBuilder/utils/collabUtils.d.ts +1 -1
  198. package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs +3 -3
  199. package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
  200. package/dist/modern/visualBuilder/utils/getCsDataOfElement.js +4 -4
  201. package/dist/modern/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
  202. package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs +1 -1
  203. package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs.map +1 -1
  204. package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js +2 -2
  205. package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js.map +1 -1
  206. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +2 -2
  207. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
  208. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +3 -3
  209. package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
  210. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  211. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  212. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
  213. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
  214. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +1 -0
  215. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  216. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs +1 -1
  217. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  218. package/dist/modern/visualBuilder/utils/updateFocussedState.js +2 -2
  219. package/dist/modern/visualBuilder/utils/updateFocussedState.js.map +1 -1
  220. package/dist/modern/visualBuilder/visualBuilder.style.cjs +2 -1
  221. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  222. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +1 -0
  223. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +1 -0
  224. package/dist/modern/visualBuilder/visualBuilder.style.js +2 -1
  225. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  226. package/package.json +8 -8
@@ -31,10 +31,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var useVariantsPostMessageEvent_exports = {};
32
32
  __export(useVariantsPostMessageEvent_exports, {
33
33
  addVariantFieldClass: () => addVariantFieldClass,
34
+ debounceAddVariantFieldClass: () => debounceAddVariantFieldClass,
35
+ getHighlightVariantFieldsStatus: () => getHighlightVariantFieldsStatus,
34
36
  removeVariantFieldClass: () => removeVariantFieldClass,
35
37
  setAudienceMode: () => setAudienceMode,
38
+ setHighlightVariantFields: () => setHighlightVariantFields,
36
39
  setLocale: () => setLocale,
37
40
  setVariant: () => setVariant,
41
+ setVariantOrder: () => setVariantOrder,
38
42
  useVariantFieldsPostMessageEvent: () => useVariantFieldsPostMessageEvent
39
43
  });
40
44
  module.exports = __toCommonJS(useVariantsPostMessageEvent_exports);
@@ -43,6 +47,8 @@ var import_visualBuilder = require("../visualBuilder.style.cjs");
43
47
  var import_visualBuilderPostMessage = __toESM(require("../utils/visualBuilderPostMessage.cjs"), 1);
44
48
  var import_postMessage = require("../utils/types/postMessage.types.cjs");
45
49
  var import_fieldSchemaMap = require("../utils/fieldSchemaMap.cjs");
50
+ var import_useRecalculateVariantDataCSLPValues = require("./useRecalculateVariantDataCSLPValues.cjs");
51
+ var import_lodash_es = require("lodash-es");
46
52
  var import_cslpdata = require("../../cslp/cslpdata.cjs");
47
53
  function isLowerOrderVariant(variant_uid, dataCslp, variantOrder) {
48
54
  if (!variantOrder || variantOrder.length === 0) {
@@ -56,16 +62,20 @@ function isLowerOrderVariant(variant_uid, dataCslp, variantOrder) {
56
62
  }
57
63
  return indexOfCslpVariant < indexOfCmsVariant;
58
64
  }
59
- function addVariantFieldClass(variant_uid, highlightVariantFields, variantOrder) {
65
+ function addVariantFieldClass(variant_uid) {
66
+ const variantOrder = import__.VisualBuilder.VisualBuilderGlobalState.value.variantOrder;
67
+ const highlightVariantFields = import__.VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields;
60
68
  const elements = document.querySelectorAll(`[data-cslp]`);
61
69
  elements.forEach((element) => {
62
70
  const dataCslp = element.getAttribute("data-cslp");
63
- if (!dataCslp) return;
71
+ if (!(0, import_cslpdata.isValidCslp)(dataCslp)) return;
64
72
  if (dataCslp?.includes(variant_uid)) {
65
- highlightVariantFields && element.classList.add(
66
- (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field"]
67
- );
68
73
  element.classList.add("visual-builder__variant-field");
74
+ if (highlightVariantFields) {
75
+ element.classList.add(
76
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field-outline"]
77
+ );
78
+ }
69
79
  } else if (!dataCslp.startsWith("v2:")) {
70
80
  element.classList.add("visual-builder__base-field");
71
81
  } else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {
@@ -75,14 +85,19 @@ function addVariantFieldClass(variant_uid, highlightVariantFields, variantOrder)
75
85
  }
76
86
  });
77
87
  }
88
+ var debounceAddVariantFieldClass = (0, import_lodash_es.debounce)(
89
+ addVariantFieldClass,
90
+ 1e3,
91
+ { trailing: true }
92
+ );
78
93
  function removeVariantFieldClass(onlyHighlighted = false) {
79
94
  if (onlyHighlighted) {
80
95
  const variantElements = document.querySelectorAll(
81
- `.${(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field"]}`
96
+ `.${(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field-outline"]}`
82
97
  );
83
98
  variantElements.forEach((element) => {
84
99
  element.classList.remove(
85
- (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field"]
100
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field-outline"]
86
101
  );
87
102
  });
88
103
  } else {
@@ -93,7 +108,7 @@ function removeVariantFieldClass(onlyHighlighted = false) {
93
108
  element.classList.remove(
94
109
  "visual-builder__disabled-variant-field",
95
110
  "visual-builder__variant-field",
96
- (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field"],
111
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__variant-field-outline"],
97
112
  "visual-builder__base-field",
98
113
  "visual-builder__lower-order-variant-field"
99
114
  );
@@ -109,12 +124,41 @@ function setVariant(uid) {
109
124
  function setLocale(locale) {
110
125
  import__.VisualBuilder.VisualBuilderGlobalState.value.locale = locale;
111
126
  }
112
- function useVariantFieldsPostMessageEvent() {
127
+ function setHighlightVariantFields(highlight) {
128
+ import__.VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields = highlight;
129
+ }
130
+ function setVariantOrder(variantOrder) {
131
+ import__.VisualBuilder.VisualBuilderGlobalState.value.variantOrder = variantOrder;
132
+ }
133
+ async function getHighlightVariantFieldsStatus() {
134
+ try {
135
+ const result = await import_visualBuilderPostMessage.default?.send(
136
+ import_postMessage.VisualBuilderPostMessageEvents.GET_HIGHLIGHT_VARIANT_FIELDS_STATUS
137
+ );
138
+ return result ?? {
139
+ highlightVariantFields: false
140
+ };
141
+ } catch (error) {
142
+ console.error("Failed to get highlight variant fields status:", error);
143
+ return {
144
+ highlightVariantFields: false
145
+ };
146
+ }
147
+ }
148
+ function useVariantFieldsPostMessageEvent({ isSSR }) {
113
149
  import_visualBuilderPostMessage.default?.on(
114
150
  import_postMessage.VisualBuilderPostMessageEvents.GET_VARIANT_ID,
115
151
  (event) => {
116
- setVariant(event.data.variant);
152
+ const selectedVariant = event.data.variant;
153
+ setVariant(selectedVariant);
117
154
  import_fieldSchemaMap.FieldSchemaMap.clear();
155
+ if (isSSR) {
156
+ if (selectedVariant) {
157
+ addVariantFieldClass(selectedVariant);
158
+ }
159
+ } else {
160
+ (0, import_useRecalculateVariantDataCSLPValues.updateVariantClasses)();
161
+ }
118
162
  }
119
163
  );
120
164
  import_visualBuilderPostMessage.default?.on(
@@ -132,17 +176,18 @@ function useVariantFieldsPostMessageEvent() {
132
176
  import_visualBuilderPostMessage.default?.on(
133
177
  import_postMessage.VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,
134
178
  (event) => {
179
+ setHighlightVariantFields(event.data.variant_data.highlightVariantFields);
180
+ setVariantOrder(event.data.variant_data.variantOrder || []);
135
181
  removeVariantFieldClass();
136
182
  addVariantFieldClass(
137
- event.data.variant_data.variant,
138
- event.data.variant_data.highlightVariantFields,
139
- event.data.variant_data.variantOrder
183
+ event.data.variant_data.variant
140
184
  );
141
185
  }
142
186
  );
143
187
  import_visualBuilderPostMessage.default?.on(
144
188
  import_postMessage.VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,
145
189
  (event) => {
190
+ setHighlightVariantFields(false);
146
191
  removeVariantFieldClass(event?.data?.onlyHighlighted);
147
192
  }
148
193
  );
@@ -150,10 +195,14 @@ function useVariantFieldsPostMessageEvent() {
150
195
  // Annotate the CommonJS export names for ESM import in node:
151
196
  0 && (module.exports = {
152
197
  addVariantFieldClass,
198
+ debounceAddVariantFieldClass,
199
+ getHighlightVariantFieldsStatus,
153
200
  removeVariantFieldClass,
154
201
  setAudienceMode,
202
+ setHighlightVariantFields,
155
203
  setLocale,
156
204
  setVariant,
205
+ setVariantOrder,
157
206
  useVariantFieldsPostMessageEvent
158
207
  });
159
208
  //# sourceMappingURL=useVariantsPostMessageEvent.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/eventManager/useVariantsPostMessageEvent.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\n\ninterface VariantFieldsEvent {\n data: {\n variant_data: {\n variant: string;\n highlightVariantFields: boolean;\n variantOrder: string[];\n };\n };\n}\ninterface RemoveVariantFieldsEvent {\n data: {\n onlyHighlighted?: boolean;\n };\n}\n\ninterface AudienceEvent {\n data: {\n audienceMode: boolean;\n };\n}\ninterface VariantEvent {\n data: {\n variant: string | null;\n };\n}\n\ninterface LocaleEvent {\n data: {\n locale: string;\n };\n}\n\nfunction isLowerOrderVariant(variant_uid: string, dataCslp: string, variantOrder: string[]): boolean {\n if(!variantOrder || variantOrder.length === 0) {\n return false;\n }\n const {variant: cslpVariant} = extractDetailsFromCslp(dataCslp);\n const indexOfCmsVariant = variantOrder.lastIndexOf(variant_uid);\n const indexOfCslpVariant = variantOrder.lastIndexOf(cslpVariant || \"\");\n if(indexOfCslpVariant < 0) {\n return false;\n }\n return indexOfCslpVariant < indexOfCmsVariant;\n}\n\nexport function addVariantFieldClass(\n variant_uid: string,\n highlightVariantFields: boolean,\n variantOrder: string[]\n): void {\n const elements = document.querySelectorAll(`[data-cslp]`);\n elements.forEach((element) => {\n const dataCslp = element.getAttribute(\"data-cslp\");\n if (!dataCslp) return;\n\n if (dataCslp?.includes(variant_uid)) {\n highlightVariantFields &&\n element.classList.add(\n visualBuilderStyles()[\"visual-builder__variant-field\"]\n );\n element.classList.add(\"visual-builder__variant-field\");\n } else if (!dataCslp.startsWith(\"v2:\")) {\n element.classList.add(\"visual-builder__base-field\");\n } \n else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {\n element.classList.add(\"visual-builder__variant-field\", \"visual-builder__lower-order-variant-field\");\n }\n else {\n element.classList.add(\"visual-builder__disabled-variant-field\");\n }\n });\n}\n\nexport function removeVariantFieldClass(\n onlyHighlighted: boolean = false\n): void {\n if (onlyHighlighted) {\n const variantElements = document.querySelectorAll(\n `.${visualBuilderStyles()[\"visual-builder__variant-field\"]}`\n );\n variantElements.forEach((element) => {\n element.classList.remove(\n visualBuilderStyles()[\"visual-builder__variant-field\"]\n );\n });\n } else {\n const variantAndBaseFieldElements = document.querySelectorAll(\n \".visual-builder__disabled-variant-field, .visual-builder__variant-field, .visual-builder__base-field, .visual-builder__lower-order-variant-field\" \n );\n variantAndBaseFieldElements.forEach((element) => {\n element.classList.remove(\n \"visual-builder__disabled-variant-field\",\n \"visual-builder__variant-field\",\n visualBuilderStyles()[\"visual-builder__variant-field\"],\n \"visual-builder__base-field\",\n \"visual-builder__lower-order-variant-field\"\n );\n });\n }\n}\n\nexport function setAudienceMode(mode: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode = mode;\n}\nexport function setVariant(uid: string | null): void {\n VisualBuilder.VisualBuilderGlobalState.value.variant = uid;\n}\nexport function setLocale(locale: string): void {\n VisualBuilder.VisualBuilderGlobalState.value.locale = locale;\n}\n\nexport function useVariantFieldsPostMessageEvent(): void {\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_VARIANT_ID,\n (event: VariantEvent) => {\n setVariant(event.data.variant);\n // clear field schema when variant is changed.\n // this is required as we cache field schema\n // which contain a key isUnlinkedVariant.\n // This key can change when variant is changed,\n // so clear the field schema cache\n FieldSchemaMap.clear();\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_LOCALE,\n (event: LocaleEvent) => {\n setLocale(event.data.locale);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SET_AUDIENCE_MODE,\n (event: AudienceEvent) => {\n setAudienceMode(event.data.audienceMode);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,\n (event: VariantFieldsEvent) => {\n removeVariantFieldClass();\n addVariantFieldClass(\n event.data.variant_data.variant,\n event.data.variant_data.highlightVariantFields,\n event.data.variant_data.variantOrder\n );\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,\n (event: RemoveVariantFieldsEvent) => {\n removeVariantFieldClass(event?.data?.onlyHighlighted);\n }\n );\n}\n"],"mappings":"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","names":["visualBuilderPostMessage"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/eventManager/useVariantsPostMessageEvent.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { updateVariantClasses } from \"./useRecalculateVariantDataCSLPValues\";\nimport { debounce } from \"lodash-es\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\n\ninterface VariantFieldsEvent {\n data: {\n variant_data: {\n variant: string;\n highlightVariantFields: boolean;\n variantOrder: string[];\n };\n };\n}\ninterface RemoveVariantFieldsEvent {\n data: {\n onlyHighlighted?: boolean;\n };\n}\n\ninterface AudienceEvent {\n data: {\n audienceMode: boolean;\n };\n}\ninterface VariantEvent {\n data: {\n variant: string | null;\n };\n}\n\ninterface LocaleEvent {\n data: {\n locale: string;\n };\n}\n\nfunction isLowerOrderVariant(variant_uid: string, dataCslp: string, variantOrder: string[]): boolean {\n if(!variantOrder || variantOrder.length === 0) {\n return false;\n }\n const {variant: cslpVariant} = extractDetailsFromCslp(dataCslp);\n const indexOfCmsVariant = variantOrder.lastIndexOf(variant_uid);\n const indexOfCslpVariant = variantOrder.lastIndexOf(cslpVariant || \"\");\n if(indexOfCslpVariant < 0) {\n return false;\n }\n return indexOfCslpVariant < indexOfCmsVariant;\n}\n\n\nexport function addVariantFieldClass(\n variant_uid: string\n): void {\n const variantOrder = VisualBuilder.VisualBuilderGlobalState.value.variantOrder;\n const highlightVariantFields = VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields;\n const elements = document.querySelectorAll(`[data-cslp]`);\n elements.forEach((element) => {\n const dataCslp = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(dataCslp)) return;\n\n if (dataCslp?.includes(variant_uid)) {\n element.classList.add(\"visual-builder__variant-field\");\n if (highlightVariantFields) {\n element.classList.add(\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"]\n );\n }\n } else if (!dataCslp.startsWith(\"v2:\")) {\n element.classList.add(\"visual-builder__base-field\");\n } \n else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {\n element.classList.add(\"visual-builder__variant-field\", \"visual-builder__lower-order-variant-field\");\n }\n else {\n element.classList.add(\"visual-builder__disabled-variant-field\");\n }\n });\n}\n\nexport const debounceAddVariantFieldClass = debounce(\n addVariantFieldClass,\n 1000,\n { trailing: true }\n) as (variant_uid: string) => void;\n\nexport function removeVariantFieldClass(\n onlyHighlighted: boolean = false\n): void {\n if (onlyHighlighted) {\n const variantElements = document.querySelectorAll(\n `.${visualBuilderStyles()[\"visual-builder__variant-field-outline\"]}`\n );\n variantElements.forEach((element) => {\n element.classList.remove(\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"]\n );\n });\n } else {\n const variantAndBaseFieldElements = document.querySelectorAll(\n \".visual-builder__disabled-variant-field, .visual-builder__variant-field, .visual-builder__base-field, .visual-builder__lower-order-variant-field\" \n );\n variantAndBaseFieldElements.forEach((element) => {\n element.classList.remove(\n \"visual-builder__disabled-variant-field\",\n \"visual-builder__variant-field\",\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"],\n \"visual-builder__base-field\",\n \"visual-builder__lower-order-variant-field\"\n );\n });\n }\n}\n\nexport function setAudienceMode(mode: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode = mode;\n}\nexport function setVariant(uid: string | null): void {\n VisualBuilder.VisualBuilderGlobalState.value.variant = uid;\n}\nexport function setLocale(locale: string): void {\n VisualBuilder.VisualBuilderGlobalState.value.locale = locale;\n}\nexport function setHighlightVariantFields(highlight: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields = highlight;\n}\nexport function setVariantOrder(variantOrder: string[]): void {\n VisualBuilder.VisualBuilderGlobalState.value.variantOrder = variantOrder;\n}\n\ninterface GetHighlightVariantFieldsStatusResponse {\n highlightVariantFields: boolean;\n}\nexport async function getHighlightVariantFieldsStatus(): Promise<GetHighlightVariantFieldsStatusResponse> {\n try {\n const result = await visualBuilderPostMessage?.send<GetHighlightVariantFieldsStatusResponse>(\n VisualBuilderPostMessageEvents.GET_HIGHLIGHT_VARIANT_FIELDS_STATUS\n ); \n return result ?? {\n highlightVariantFields: false,\n };\n } catch (error) {\n console.error(\"Failed to get highlight variant fields status:\", error);\n return {\n highlightVariantFields: false,\n };\n }\n}\n\nexport function useVariantFieldsPostMessageEvent({ isSSR }: { isSSR: boolean }): void {\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_VARIANT_ID,\n (event: VariantEvent) => {\n const selectedVariant = event.data.variant;\n setVariant(selectedVariant);\n // clear field schema when variant is changed.\n // this is required as we cache field schema\n // which contain a key isUnlinkedVariant.\n // This key can change when variant is changed,\n // so clear the field schema cache\n FieldSchemaMap.clear();\n if (isSSR) {\n if (selectedVariant) {\n addVariantFieldClass(selectedVariant);\n }\n } else {\n // recalculate and apply classes\n updateVariantClasses();\n }\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_LOCALE,\n (event: LocaleEvent) => {\n setLocale(event.data.locale);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SET_AUDIENCE_MODE,\n (event: AudienceEvent) => {\n setAudienceMode(event.data.audienceMode);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,\n (event: VariantFieldsEvent) => {\n setHighlightVariantFields(event.data.variant_data.highlightVariantFields);\n setVariantOrder(event.data.variant_data.variantOrder || []);\n removeVariantFieldClass();\n addVariantFieldClass(\n event.data.variant_data.variant\n );\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,\n (event: RemoveVariantFieldsEvent) => {\n setHighlightVariantFields(false);\n removeVariantFieldClass(event?.data?.onlyHighlighted);\n }\n );\n}\n"],"mappings":"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","names":["visualBuilderPostMessage"]}
@@ -1,8 +1,17 @@
1
- declare function addVariantFieldClass(variant_uid: string, highlightVariantFields: boolean, variantOrder: string[]): void;
1
+ declare function addVariantFieldClass(variant_uid: string): void;
2
+ declare const debounceAddVariantFieldClass: (variant_uid: string) => void;
2
3
  declare function removeVariantFieldClass(onlyHighlighted?: boolean): void;
3
4
  declare function setAudienceMode(mode: boolean): void;
4
5
  declare function setVariant(uid: string | null): void;
5
6
  declare function setLocale(locale: string): void;
6
- declare function useVariantFieldsPostMessageEvent(): void;
7
+ declare function setHighlightVariantFields(highlight: boolean): void;
8
+ declare function setVariantOrder(variantOrder: string[]): void;
9
+ interface GetHighlightVariantFieldsStatusResponse {
10
+ highlightVariantFields: boolean;
11
+ }
12
+ declare function getHighlightVariantFieldsStatus(): Promise<GetHighlightVariantFieldsStatusResponse>;
13
+ declare function useVariantFieldsPostMessageEvent({ isSSR }: {
14
+ isSSR: boolean;
15
+ }): void;
7
16
 
8
- export { addVariantFieldClass, removeVariantFieldClass, setAudienceMode, setLocale, setVariant, useVariantFieldsPostMessageEvent };
17
+ export { addVariantFieldClass, debounceAddVariantFieldClass, getHighlightVariantFieldsStatus, removeVariantFieldClass, setAudienceMode, setHighlightVariantFields, setLocale, setVariant, setVariantOrder, useVariantFieldsPostMessageEvent };
@@ -1,8 +1,17 @@
1
- declare function addVariantFieldClass(variant_uid: string, highlightVariantFields: boolean, variantOrder: string[]): void;
1
+ declare function addVariantFieldClass(variant_uid: string): void;
2
+ declare const debounceAddVariantFieldClass: (variant_uid: string) => void;
2
3
  declare function removeVariantFieldClass(onlyHighlighted?: boolean): void;
3
4
  declare function setAudienceMode(mode: boolean): void;
4
5
  declare function setVariant(uid: string | null): void;
5
6
  declare function setLocale(locale: string): void;
6
- declare function useVariantFieldsPostMessageEvent(): void;
7
+ declare function setHighlightVariantFields(highlight: boolean): void;
8
+ declare function setVariantOrder(variantOrder: string[]): void;
9
+ interface GetHighlightVariantFieldsStatusResponse {
10
+ highlightVariantFields: boolean;
11
+ }
12
+ declare function getHighlightVariantFieldsStatus(): Promise<GetHighlightVariantFieldsStatusResponse>;
13
+ declare function useVariantFieldsPostMessageEvent({ isSSR }: {
14
+ isSSR: boolean;
15
+ }): void;
7
16
 
8
- export { addVariantFieldClass, removeVariantFieldClass, setAudienceMode, setLocale, setVariant, useVariantFieldsPostMessageEvent };
17
+ export { addVariantFieldClass, debounceAddVariantFieldClass, getHighlightVariantFieldsStatus, removeVariantFieldClass, setAudienceMode, setHighlightVariantFields, setLocale, setVariant, setVariantOrder, useVariantFieldsPostMessageEvent };
@@ -6,7 +6,9 @@ import { visualBuilderStyles } from "../visualBuilder.style.js";
6
6
  import visualBuilderPostMessage from "../utils/visualBuilderPostMessage.js";
7
7
  import { VisualBuilderPostMessageEvents } from "../utils/types/postMessage.types.js";
8
8
  import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
9
- import { extractDetailsFromCslp } from "../../cslp/cslpdata.js";
9
+ import { updateVariantClasses } from "./useRecalculateVariantDataCSLPValues.js";
10
+ import { debounce } from "lodash-es";
11
+ import { extractDetailsFromCslp, isValidCslp } from "../../cslp/cslpdata.js";
10
12
  function isLowerOrderVariant(variant_uid, dataCslp, variantOrder) {
11
13
  if (!variantOrder || variantOrder.length === 0) {
12
14
  return false;
@@ -19,16 +21,20 @@ function isLowerOrderVariant(variant_uid, dataCslp, variantOrder) {
19
21
  }
20
22
  return indexOfCslpVariant < indexOfCmsVariant;
21
23
  }
22
- function addVariantFieldClass(variant_uid, highlightVariantFields, variantOrder) {
24
+ function addVariantFieldClass(variant_uid) {
25
+ const variantOrder = VisualBuilder.VisualBuilderGlobalState.value.variantOrder;
26
+ const highlightVariantFields = VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields;
23
27
  const elements = document.querySelectorAll(`[data-cslp]`);
24
28
  elements.forEach((element) => {
25
29
  const dataCslp = element.getAttribute("data-cslp");
26
- if (!dataCslp) return;
30
+ if (!isValidCslp(dataCslp)) return;
27
31
  if (dataCslp?.includes(variant_uid)) {
28
- highlightVariantFields && element.classList.add(
29
- visualBuilderStyles()["visual-builder__variant-field"]
30
- );
31
32
  element.classList.add("visual-builder__variant-field");
33
+ if (highlightVariantFields) {
34
+ element.classList.add(
35
+ visualBuilderStyles()["visual-builder__variant-field-outline"]
36
+ );
37
+ }
32
38
  } else if (!dataCslp.startsWith("v2:")) {
33
39
  element.classList.add("visual-builder__base-field");
34
40
  } else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {
@@ -38,14 +44,19 @@ function addVariantFieldClass(variant_uid, highlightVariantFields, variantOrder)
38
44
  }
39
45
  });
40
46
  }
47
+ var debounceAddVariantFieldClass = debounce(
48
+ addVariantFieldClass,
49
+ 1e3,
50
+ { trailing: true }
51
+ );
41
52
  function removeVariantFieldClass(onlyHighlighted = false) {
42
53
  if (onlyHighlighted) {
43
54
  const variantElements = document.querySelectorAll(
44
- `.${visualBuilderStyles()["visual-builder__variant-field"]}`
55
+ `.${visualBuilderStyles()["visual-builder__variant-field-outline"]}`
45
56
  );
46
57
  variantElements.forEach((element) => {
47
58
  element.classList.remove(
48
- visualBuilderStyles()["visual-builder__variant-field"]
59
+ visualBuilderStyles()["visual-builder__variant-field-outline"]
49
60
  );
50
61
  });
51
62
  } else {
@@ -56,7 +67,7 @@ function removeVariantFieldClass(onlyHighlighted = false) {
56
67
  element.classList.remove(
57
68
  "visual-builder__disabled-variant-field",
58
69
  "visual-builder__variant-field",
59
- visualBuilderStyles()["visual-builder__variant-field"],
70
+ visualBuilderStyles()["visual-builder__variant-field-outline"],
60
71
  "visual-builder__base-field",
61
72
  "visual-builder__lower-order-variant-field"
62
73
  );
@@ -72,12 +83,41 @@ function setVariant(uid) {
72
83
  function setLocale(locale) {
73
84
  VisualBuilder.VisualBuilderGlobalState.value.locale = locale;
74
85
  }
75
- function useVariantFieldsPostMessageEvent() {
86
+ function setHighlightVariantFields(highlight) {
87
+ VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields = highlight;
88
+ }
89
+ function setVariantOrder(variantOrder) {
90
+ VisualBuilder.VisualBuilderGlobalState.value.variantOrder = variantOrder;
91
+ }
92
+ async function getHighlightVariantFieldsStatus() {
93
+ try {
94
+ const result = await visualBuilderPostMessage?.send(
95
+ VisualBuilderPostMessageEvents.GET_HIGHLIGHT_VARIANT_FIELDS_STATUS
96
+ );
97
+ return result ?? {
98
+ highlightVariantFields: false
99
+ };
100
+ } catch (error) {
101
+ console.error("Failed to get highlight variant fields status:", error);
102
+ return {
103
+ highlightVariantFields: false
104
+ };
105
+ }
106
+ }
107
+ function useVariantFieldsPostMessageEvent({ isSSR }) {
76
108
  visualBuilderPostMessage?.on(
77
109
  VisualBuilderPostMessageEvents.GET_VARIANT_ID,
78
110
  (event) => {
79
- setVariant(event.data.variant);
111
+ const selectedVariant = event.data.variant;
112
+ setVariant(selectedVariant);
80
113
  FieldSchemaMap.clear();
114
+ if (isSSR) {
115
+ if (selectedVariant) {
116
+ addVariantFieldClass(selectedVariant);
117
+ }
118
+ } else {
119
+ updateVariantClasses();
120
+ }
81
121
  }
82
122
  );
83
123
  visualBuilderPostMessage?.on(
@@ -95,27 +135,32 @@ function useVariantFieldsPostMessageEvent() {
95
135
  visualBuilderPostMessage?.on(
96
136
  VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,
97
137
  (event) => {
138
+ setHighlightVariantFields(event.data.variant_data.highlightVariantFields);
139
+ setVariantOrder(event.data.variant_data.variantOrder || []);
98
140
  removeVariantFieldClass();
99
141
  addVariantFieldClass(
100
- event.data.variant_data.variant,
101
- event.data.variant_data.highlightVariantFields,
102
- event.data.variant_data.variantOrder
142
+ event.data.variant_data.variant
103
143
  );
104
144
  }
105
145
  );
106
146
  visualBuilderPostMessage?.on(
107
147
  VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,
108
148
  (event) => {
149
+ setHighlightVariantFields(false);
109
150
  removeVariantFieldClass(event?.data?.onlyHighlighted);
110
151
  }
111
152
  );
112
153
  }
113
154
  export {
114
155
  addVariantFieldClass,
156
+ debounceAddVariantFieldClass,
157
+ getHighlightVariantFieldsStatus,
115
158
  removeVariantFieldClass,
116
159
  setAudienceMode,
160
+ setHighlightVariantFields,
117
161
  setLocale,
118
162
  setVariant,
163
+ setVariantOrder,
119
164
  useVariantFieldsPostMessageEvent
120
165
  };
121
166
  //# sourceMappingURL=useVariantsPostMessageEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/eventManager/useVariantsPostMessageEvent.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\n\ninterface VariantFieldsEvent {\n data: {\n variant_data: {\n variant: string;\n highlightVariantFields: boolean;\n variantOrder: string[];\n };\n };\n}\ninterface RemoveVariantFieldsEvent {\n data: {\n onlyHighlighted?: boolean;\n };\n}\n\ninterface AudienceEvent {\n data: {\n audienceMode: boolean;\n };\n}\ninterface VariantEvent {\n data: {\n variant: string | null;\n };\n}\n\ninterface LocaleEvent {\n data: {\n locale: string;\n };\n}\n\nfunction isLowerOrderVariant(variant_uid: string, dataCslp: string, variantOrder: string[]): boolean {\n if(!variantOrder || variantOrder.length === 0) {\n return false;\n }\n const {variant: cslpVariant} = extractDetailsFromCslp(dataCslp);\n const indexOfCmsVariant = variantOrder.lastIndexOf(variant_uid);\n const indexOfCslpVariant = variantOrder.lastIndexOf(cslpVariant || \"\");\n if(indexOfCslpVariant < 0) {\n return false;\n }\n return indexOfCslpVariant < indexOfCmsVariant;\n}\n\nexport function addVariantFieldClass(\n variant_uid: string,\n highlightVariantFields: boolean,\n variantOrder: string[]\n): void {\n const elements = document.querySelectorAll(`[data-cslp]`);\n elements.forEach((element) => {\n const dataCslp = element.getAttribute(\"data-cslp\");\n if (!dataCslp) return;\n\n if (dataCslp?.includes(variant_uid)) {\n highlightVariantFields &&\n element.classList.add(\n visualBuilderStyles()[\"visual-builder__variant-field\"]\n );\n element.classList.add(\"visual-builder__variant-field\");\n } else if (!dataCslp.startsWith(\"v2:\")) {\n element.classList.add(\"visual-builder__base-field\");\n } \n else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {\n element.classList.add(\"visual-builder__variant-field\", \"visual-builder__lower-order-variant-field\");\n }\n else {\n element.classList.add(\"visual-builder__disabled-variant-field\");\n }\n });\n}\n\nexport function removeVariantFieldClass(\n onlyHighlighted: boolean = false\n): void {\n if (onlyHighlighted) {\n const variantElements = document.querySelectorAll(\n `.${visualBuilderStyles()[\"visual-builder__variant-field\"]}`\n );\n variantElements.forEach((element) => {\n element.classList.remove(\n visualBuilderStyles()[\"visual-builder__variant-field\"]\n );\n });\n } else {\n const variantAndBaseFieldElements = document.querySelectorAll(\n \".visual-builder__disabled-variant-field, .visual-builder__variant-field, .visual-builder__base-field, .visual-builder__lower-order-variant-field\" \n );\n variantAndBaseFieldElements.forEach((element) => {\n element.classList.remove(\n \"visual-builder__disabled-variant-field\",\n \"visual-builder__variant-field\",\n visualBuilderStyles()[\"visual-builder__variant-field\"],\n \"visual-builder__base-field\",\n \"visual-builder__lower-order-variant-field\"\n );\n });\n }\n}\n\nexport function setAudienceMode(mode: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode = mode;\n}\nexport function setVariant(uid: string | null): void {\n VisualBuilder.VisualBuilderGlobalState.value.variant = uid;\n}\nexport function setLocale(locale: string): void {\n VisualBuilder.VisualBuilderGlobalState.value.locale = locale;\n}\n\nexport function useVariantFieldsPostMessageEvent(): void {\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_VARIANT_ID,\n (event: VariantEvent) => {\n setVariant(event.data.variant);\n // clear field schema when variant is changed.\n // this is required as we cache field schema\n // which contain a key isUnlinkedVariant.\n // This key can change when variant is changed,\n // so clear the field schema cache\n FieldSchemaMap.clear();\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_LOCALE,\n (event: LocaleEvent) => {\n setLocale(event.data.locale);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SET_AUDIENCE_MODE,\n (event: AudienceEvent) => {\n setAudienceMode(event.data.audienceMode);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,\n (event: VariantFieldsEvent) => {\n removeVariantFieldClass();\n addVariantFieldClass(\n event.data.variant_data.variant,\n event.data.variant_data.highlightVariantFields,\n event.data.variant_data.variantOrder\n );\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,\n (event: RemoveVariantFieldsEvent) => {\n removeVariantFieldClass(event?.data?.onlyHighlighted);\n }\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/eventManager/useVariantsPostMessageEvent.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { updateVariantClasses } from \"./useRecalculateVariantDataCSLPValues\";\nimport { debounce } from \"lodash-es\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\n\ninterface VariantFieldsEvent {\n data: {\n variant_data: {\n variant: string;\n highlightVariantFields: boolean;\n variantOrder: string[];\n };\n };\n}\ninterface RemoveVariantFieldsEvent {\n data: {\n onlyHighlighted?: boolean;\n };\n}\n\ninterface AudienceEvent {\n data: {\n audienceMode: boolean;\n };\n}\ninterface VariantEvent {\n data: {\n variant: string | null;\n };\n}\n\ninterface LocaleEvent {\n data: {\n locale: string;\n };\n}\n\nfunction isLowerOrderVariant(variant_uid: string, dataCslp: string, variantOrder: string[]): boolean {\n if(!variantOrder || variantOrder.length === 0) {\n return false;\n }\n const {variant: cslpVariant} = extractDetailsFromCslp(dataCslp);\n const indexOfCmsVariant = variantOrder.lastIndexOf(variant_uid);\n const indexOfCslpVariant = variantOrder.lastIndexOf(cslpVariant || \"\");\n if(indexOfCslpVariant < 0) {\n return false;\n }\n return indexOfCslpVariant < indexOfCmsVariant;\n}\n\n\nexport function addVariantFieldClass(\n variant_uid: string\n): void {\n const variantOrder = VisualBuilder.VisualBuilderGlobalState.value.variantOrder;\n const highlightVariantFields = VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields;\n const elements = document.querySelectorAll(`[data-cslp]`);\n elements.forEach((element) => {\n const dataCslp = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(dataCslp)) return;\n\n if (dataCslp?.includes(variant_uid)) {\n element.classList.add(\"visual-builder__variant-field\");\n if (highlightVariantFields) {\n element.classList.add(\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"]\n );\n }\n } else if (!dataCslp.startsWith(\"v2:\")) {\n element.classList.add(\"visual-builder__base-field\");\n } \n else if (isLowerOrderVariant(variant_uid, dataCslp, variantOrder)) {\n element.classList.add(\"visual-builder__variant-field\", \"visual-builder__lower-order-variant-field\");\n }\n else {\n element.classList.add(\"visual-builder__disabled-variant-field\");\n }\n });\n}\n\nexport const debounceAddVariantFieldClass = debounce(\n addVariantFieldClass,\n 1000,\n { trailing: true }\n) as (variant_uid: string) => void;\n\nexport function removeVariantFieldClass(\n onlyHighlighted: boolean = false\n): void {\n if (onlyHighlighted) {\n const variantElements = document.querySelectorAll(\n `.${visualBuilderStyles()[\"visual-builder__variant-field-outline\"]}`\n );\n variantElements.forEach((element) => {\n element.classList.remove(\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"]\n );\n });\n } else {\n const variantAndBaseFieldElements = document.querySelectorAll(\n \".visual-builder__disabled-variant-field, .visual-builder__variant-field, .visual-builder__base-field, .visual-builder__lower-order-variant-field\" \n );\n variantAndBaseFieldElements.forEach((element) => {\n element.classList.remove(\n \"visual-builder__disabled-variant-field\",\n \"visual-builder__variant-field\",\n visualBuilderStyles()[\"visual-builder__variant-field-outline\"],\n \"visual-builder__base-field\",\n \"visual-builder__lower-order-variant-field\"\n );\n });\n }\n}\n\nexport function setAudienceMode(mode: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode = mode;\n}\nexport function setVariant(uid: string | null): void {\n VisualBuilder.VisualBuilderGlobalState.value.variant = uid;\n}\nexport function setLocale(locale: string): void {\n VisualBuilder.VisualBuilderGlobalState.value.locale = locale;\n}\nexport function setHighlightVariantFields(highlight: boolean): void {\n VisualBuilder.VisualBuilderGlobalState.value.highlightVariantFields = highlight;\n}\nexport function setVariantOrder(variantOrder: string[]): void {\n VisualBuilder.VisualBuilderGlobalState.value.variantOrder = variantOrder;\n}\n\ninterface GetHighlightVariantFieldsStatusResponse {\n highlightVariantFields: boolean;\n}\nexport async function getHighlightVariantFieldsStatus(): Promise<GetHighlightVariantFieldsStatusResponse> {\n try {\n const result = await visualBuilderPostMessage?.send<GetHighlightVariantFieldsStatusResponse>(\n VisualBuilderPostMessageEvents.GET_HIGHLIGHT_VARIANT_FIELDS_STATUS\n ); \n return result ?? {\n highlightVariantFields: false,\n };\n } catch (error) {\n console.error(\"Failed to get highlight variant fields status:\", error);\n return {\n highlightVariantFields: false,\n };\n }\n}\n\nexport function useVariantFieldsPostMessageEvent({ isSSR }: { isSSR: boolean }): void {\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_VARIANT_ID,\n (event: VariantEvent) => {\n const selectedVariant = event.data.variant;\n setVariant(selectedVariant);\n // clear field schema when variant is changed.\n // this is required as we cache field schema\n // which contain a key isUnlinkedVariant.\n // This key can change when variant is changed,\n // so clear the field schema cache\n FieldSchemaMap.clear();\n if (isSSR) {\n if (selectedVariant) {\n addVariantFieldClass(selectedVariant);\n }\n } else {\n // recalculate and apply classes\n updateVariantClasses();\n }\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.GET_LOCALE,\n (event: LocaleEvent) => {\n setLocale(event.data.locale);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SET_AUDIENCE_MODE,\n (event: AudienceEvent) => {\n setAudienceMode(event.data.audienceMode);\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.SHOW_VARIANT_FIELDS,\n (event: VariantFieldsEvent) => {\n setHighlightVariantFields(event.data.variant_data.highlightVariantFields);\n setVariantOrder(event.data.variant_data.variantOrder || []);\n removeVariantFieldClass();\n addVariantFieldClass(\n event.data.variant_data.variant\n );\n }\n );\n visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.REMOVE_VARIANT_FIELDS,\n (event: RemoveVariantFieldsEvent) => {\n setHighlightVariantFields(false);\n removeVariantFieldClass(event?.data?.onlyHighlighted);\n }\n );\n}\n"],"mappings":"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","names":[]}
@@ -32,7 +32,7 @@ var import_jsx_runtime = require("preact/jsx-runtime");
32
32
  async function generateEmptyBlocks(emptyBlockParents) {
33
33
  for (const emptyBlockParent of emptyBlockParents) {
34
34
  const cslpData = emptyBlockParent.getAttribute("data-cslp");
35
- if (!cslpData) {
35
+ if (!(0, import_cslp.isValidCslp)(cslpData)) {
36
36
  return;
37
37
  }
38
38
  const fieldMetadata = (0, import_cslp.extractDetailsFromCslp)(cslpData);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/generators/generateEmptyBlock.tsx"],"sourcesContent":["import { hydrate } from \"preact\";\nimport { EmptyBlock } from \"../components/emptyBlock\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\n\nexport async function generateEmptyBlocks(\n emptyBlockParents: Element[] | []\n): Promise<void> {\n for (const emptyBlockParent of emptyBlockParents) {\n const cslpData = emptyBlockParent.getAttribute(\"data-cslp\");\n if (!cslpData) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n \n if(!fieldSchema){\n return;\n }\n\n hydrate(\n <EmptyBlock\n details={{\n fieldSchema,\n fieldMetadata,\n }}\n />,\n emptyBlockParent\n );\n }\n}\n\nexport function removeEmptyBlocks(emptyBlockParents: Element[] | []): void {\n emptyBlockParents?.forEach((emptyBlockParent) => {\n const emptyBlock = emptyBlockParent.querySelector(\n \".visual-builder__empty-block\"\n );\n\n if (emptyBlock) {\n emptyBlock.remove();\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwB;AACxB,wBAA2B;AAC3B,kBAAuC;AACvC,4BAA+B;AAsBnB;AApBZ,eAAsB,oBAClB,mBACa;AACb,aAAW,oBAAoB,mBAAmB;AAC9C,UAAM,WAAW,iBAAiB,aAAa,WAAW;AAC1D,QAAI,CAAC,UAAU;AACX;AAAA,IACJ;AACA,UAAM,oBAAgB,oCAAuB,QAAQ;AAErD,UAAM,cAAc,MAAM,qCAAe;AAAA,MACrC,cAAc;AAAA,MACd,cAAc;AAAA,IAClB;AAEA,QAAG,CAAC,aAAY;AACZ;AAAA,IACJ;AAEA;AAAA,MACI;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,YACL;AAAA,YACA;AAAA,UACJ;AAAA;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,mBAAyC;AACvE,qBAAmB,QAAQ,CAAC,qBAAqB;AAC7C,UAAM,aAAa,iBAAiB;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI,YAAY;AACZ,iBAAW,OAAO;AAAA,IACtB;AAAA,EACJ,CAAC;AACL;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/generators/generateEmptyBlock.tsx"],"sourcesContent":["import { hydrate } from \"preact\";\nimport React from \"preact/compat\";\nimport { EmptyBlock } from \"../components/emptyBlock\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\n\nexport async function generateEmptyBlocks(\n emptyBlockParents: Element[] | []\n): Promise<void> {\n for (const emptyBlockParent of emptyBlockParents) {\n const cslpData = emptyBlockParent.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n \n if(!fieldSchema){\n return;\n }\n\n hydrate(\n <EmptyBlock\n details={{\n fieldSchema,\n fieldMetadata,\n }}\n />,\n emptyBlockParent\n );\n }\n}\n\nexport function removeEmptyBlocks(emptyBlockParents: Element[] | []): void {\n emptyBlockParents?.forEach((emptyBlockParent) => {\n const emptyBlock = emptyBlockParent.querySelector(\n \".visual-builder__empty-block\"\n );\n\n if (emptyBlock) {\n emptyBlock.remove();\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwB;AAExB,wBAA2B;AAC3B,kBAAoD;AACpD,4BAA+B;AAsBnB;AApBZ,eAAsB,oBAClB,mBACa;AACb,aAAW,oBAAoB,mBAAmB;AAC9C,UAAM,WAAW,iBAAiB,aAAa,WAAW;AAC1D,QAAI,KAAC,yBAAY,QAAQ,GAAG;AACxB;AAAA,IACJ;AACA,UAAM,oBAAgB,oCAAuB,QAAQ;AAErD,UAAM,cAAc,MAAM,qCAAe;AAAA,MACrC,cAAc;AAAA,MACd,cAAc;AAAA,IAClB;AAEA,QAAG,CAAC,aAAY;AACZ;AAAA,IACJ;AAEA;AAAA,MACI;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,YACL;AAAA,YACA;AAAA,UACJ;AAAA;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,mBAAyC;AACvE,qBAAmB,QAAQ,CAAC,qBAAqB;AAC7C,UAAM,aAAa,iBAAiB;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI,YAAY;AACZ,iBAAW,OAAO;AAAA,IACtB;AAAA,EACJ,CAAC;AACL;","names":[]}
@@ -3,13 +3,13 @@ import "../../chunk-5WRI5ZAA.js";
3
3
  // src/visualBuilder/generators/generateEmptyBlock.tsx
4
4
  import { hydrate } from "preact";
5
5
  import { EmptyBlock } from "../components/emptyBlock.js";
6
- import { extractDetailsFromCslp } from "../../cslp/index.js";
6
+ import { extractDetailsFromCslp, isValidCslp } from "../../cslp/index.js";
7
7
  import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
8
8
  import { jsx } from "preact/jsx-runtime";
9
9
  async function generateEmptyBlocks(emptyBlockParents) {
10
10
  for (const emptyBlockParent of emptyBlockParents) {
11
11
  const cslpData = emptyBlockParent.getAttribute("data-cslp");
12
- if (!cslpData) {
12
+ if (!isValidCslp(cslpData)) {
13
13
  return;
14
14
  }
15
15
  const fieldMetadata = extractDetailsFromCslp(cslpData);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/generators/generateEmptyBlock.tsx"],"sourcesContent":["import { hydrate } from \"preact\";\nimport { EmptyBlock } from \"../components/emptyBlock\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\n\nexport async function generateEmptyBlocks(\n emptyBlockParents: Element[] | []\n): Promise<void> {\n for (const emptyBlockParent of emptyBlockParents) {\n const cslpData = emptyBlockParent.getAttribute(\"data-cslp\");\n if (!cslpData) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n \n if(!fieldSchema){\n return;\n }\n\n hydrate(\n <EmptyBlock\n details={{\n fieldSchema,\n fieldMetadata,\n }}\n />,\n emptyBlockParent\n );\n }\n}\n\nexport function removeEmptyBlocks(emptyBlockParents: Element[] | []): void {\n emptyBlockParents?.forEach((emptyBlockParent) => {\n const emptyBlock = emptyBlockParent.querySelector(\n \".visual-builder__empty-block\"\n );\n\n if (emptyBlock) {\n emptyBlock.remove();\n }\n });\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAC3B,SAAS,8BAA8B;AACvC,SAAS,sBAAsB;AAsBnB;AApBZ,eAAsB,oBAClB,mBACa;AACb,aAAW,oBAAoB,mBAAmB;AAC9C,UAAM,WAAW,iBAAiB,aAAa,WAAW;AAC1D,QAAI,CAAC,UAAU;AACX;AAAA,IACJ;AACA,UAAM,gBAAgB,uBAAuB,QAAQ;AAErD,UAAM,cAAc,MAAM,eAAe;AAAA,MACrC,cAAc;AAAA,MACd,cAAc;AAAA,IAClB;AAEA,QAAG,CAAC,aAAY;AACZ;AAAA,IACJ;AAEA;AAAA,MACI;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,YACL;AAAA,YACA;AAAA,UACJ;AAAA;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,mBAAyC;AACvE,qBAAmB,QAAQ,CAAC,qBAAqB;AAC7C,UAAM,aAAa,iBAAiB;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI,YAAY;AACZ,iBAAW,OAAO;AAAA,IACtB;AAAA,EACJ,CAAC;AACL;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/generators/generateEmptyBlock.tsx"],"sourcesContent":["import { hydrate } from \"preact\";\nimport React from \"preact/compat\";\nimport { EmptyBlock } from \"../components/emptyBlock\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\n\nexport async function generateEmptyBlocks(\n emptyBlockParents: Element[] | []\n): Promise<void> {\n for (const emptyBlockParent of emptyBlockParents) {\n const cslpData = emptyBlockParent.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n fieldMetadata.content_type_uid,\n fieldMetadata.fieldPath\n );\n \n if(!fieldSchema){\n return;\n }\n\n hydrate(\n <EmptyBlock\n details={{\n fieldSchema,\n fieldMetadata,\n }}\n />,\n emptyBlockParent\n );\n }\n}\n\nexport function removeEmptyBlocks(emptyBlockParents: Element[] | []): void {\n emptyBlockParents?.forEach((emptyBlockParent) => {\n const emptyBlock = emptyBlockParent.querySelector(\n \".visual-builder__empty-block\"\n );\n\n if (emptyBlock) {\n emptyBlock.remove();\n }\n });\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AAExB,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB,mBAAmB;AACpD,SAAS,sBAAsB;AAsBnB;AApBZ,eAAsB,oBAClB,mBACa;AACb,aAAW,oBAAoB,mBAAmB;AAC9C,UAAM,WAAW,iBAAiB,aAAa,WAAW;AAC1D,QAAI,CAAC,YAAY,QAAQ,GAAG;AACxB;AAAA,IACJ;AACA,UAAM,gBAAgB,uBAAuB,QAAQ;AAErD,UAAM,cAAc,MAAM,eAAe;AAAA,MACrC,cAAc;AAAA,MACd,cAAc;AAAA,IAClB;AAEA,QAAG,CAAC,aAAY;AACZ;AAAA,IACJ;AAEA;AAAA,MACI;AAAA,QAAC;AAAA;AAAA,UACG,SAAS;AAAA,YACL;AAAA,YACA;AAAA,UACJ;AAAA;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,mBAAyC;AACvE,qBAAmB,QAAQ,CAAC,qBAAqB;AAC7C,UAAM,aAAa,iBAAiB;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI,YAAY;AACZ,iBAAW,OAAO;AAAA,IACtB;AAAA,EACJ,CAAC;AACL;","names":[]}
@@ -42,12 +42,13 @@ var import_preact = require("preact");
42
42
  var import_preact2 = require("preact");
43
43
  var import_HighlightedCommentIcon = __toESM(require("../components/HighlightedCommentIcon.cjs"), 1);
44
44
  var import_goober = require("goober");
45
+ var import_cslp = require("../../cslp/index.cjs");
45
46
  var highlighCommentOffset = 25;
46
47
  function highlightCommentIconOnCanvas(payload) {
47
48
  const uniquePaths = {};
48
49
  payload.forEach((data) => {
49
50
  const cslpValue = data?.fieldMetadata?.cslpValue;
50
- if (!cslpValue || uniquePaths[cslpValue]) {
51
+ if (!(0, import_cslp.isValidCslp)(cslpValue) || uniquePaths[cslpValue]) {
51
52
  return;
52
53
  }
53
54
  uniquePaths[cslpValue] = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/generators/generateHighlightedComment.tsx"],"sourcesContent":["import { h, VNode } from \"preact\"; // Explicitly import VNode from Preact\nimport { render } from \"preact\";\nimport HighlightedCommentIcon from \"../components/HighlightedCommentIcon\";\nimport { css } from \"goober\";\nimport React from \"preact/compat\";\nimport { IHighlightCommentData } from \"../eventManager/useHighlightCommentIcon\";\n\n/**\n * Inserts highlighted comment icons based on an array of paths.\n *\n * This function locates elements in the DOM based on the `fieldMetadata.cslpValue`,\n * and appends a comment icon near each matching element.\n *\n * @param payload - Array of comment data with field metadata, schema, absolutePath and discussion ID.\n */\nconst highlighCommentOffset = 25;\n\nexport function highlightCommentIconOnCanvas(\n payload: IHighlightCommentData[]\n): void {\n const uniquePaths: { [key: string]: boolean } = {}; // Using object for uniqueness\n\n payload.forEach((data) => {\n const cslpValue = data?.fieldMetadata?.cslpValue;\n\n // Check if the cslpValue is already in the Object\n if (!cslpValue || uniquePaths[cslpValue]) {\n return; // Skip if the value is not unique\n }\n\n uniquePaths[cslpValue] = true; // Mark it as processed\n\n const element = document.querySelector(`[data-cslp=\"${cslpValue}\"]`);\n if (element && element instanceof HTMLElement) {\n const { top, left } = element.getBoundingClientRect();\n\n const iconContainer = document.createElement(\"div\");\n iconContainer.setAttribute(\"field-path\", cslpValue);\n\n iconContainer.style.position = \"fixed\";\n iconContainer.style.top = `${top - highlighCommentOffset}px`;\n iconContainer.style.left = `${left - highlighCommentOffset}px`;\n iconContainer.style.zIndex = \"900\";\n iconContainer.style.cursor = \"pointer\";\n iconContainer.className = \"highlighted-comment collab-icon\";\n\n // Render the HighlightedCommentIcon using Preact's render method\n render(\n h(HighlightedCommentIcon, { data }), // Use h directly with Preact\n iconContainer\n );\n\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper =\n visualBuilderContainer.querySelector(\n \".visual-builder__highlighted-comment-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__highlighted-comment-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(iconContainer);\n }\n }\n });\n}\n\n/**\n * Update Highlighted comment position , whenever scroll or resize happen.\n */\n\nexport function updateHighlightedCommentIconPosition() {\n // Query all elements with the .highlighted-comment class\n const icons = document.querySelectorAll(\".highlighted-comment\");\n\n icons.forEach((icon) => {\n if (icon && icon instanceof HTMLElement) {\n // Get the field-path attribute from the icon container\n const path = icon.getAttribute(\"field-path\");\n if (path) {\n // Query the target element using the path\n const targetElement = document.querySelector(\n `[data-cslp=\"${path}\"]`\n );\n if (targetElement && targetElement instanceof HTMLElement) {\n // Get the target element's position relative to the viewport\n const { top, left } = targetElement.getBoundingClientRect();\n\n // Update the position of the icon container\n icon.style.top = `${top - highlighCommentOffset}px`; // Adjust based on the target element's top\n icon.style.left = `${left - highlighCommentOffset}px`; // Adjust based on the target element's left\n }\n }\n }\n });\n}\n\n/**\n * Removes the first highlighted comment icon based on an array of paths.\n *\n * @param pathsToRemove - Array of field-paths to remove.\n */\nexport function removeHighlightedCommentIcon(pathToRemove: string): void {\n // Loop through each path in the array\n const iconToRemove = document.querySelectorAll(\n `.highlighted-comment[field-path=\"${pathToRemove}\"]`\n );\n iconToRemove?.forEach((icon) => icon?.remove());\n}\n\nexport function removeAllHighlightedCommentIcons(): void {\n const icons = document.querySelectorAll(\".highlighted-comment\");\n icons?.forEach((icon) => icon?.remove());\n}\n\n// Define a hidden class in goober\nconst hiddenClass = css`\n display: none;\n`;\n\n/**\n * Toggle display style of a specific highlighted comment icon.\n *\n * @param path - The data-cslp attribute of the element whose corresponding highlighted comment icon should be toggled.\n * @param shouldShow - Boolean value to determine whether to show or hide the icon.\n * If true, the icon will be displayed. If false, the icon will be hidden.\n */\nexport function toggleHighlightedCommentIconDisplay(\n path: string,\n shouldShow: boolean\n): void {\n const icons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment[field-path=\"${path}\"]`\n );\n\n icons.forEach((icon) => {\n if (shouldShow) {\n icon.classList.remove(hiddenClass); // Show the element\n } else {\n icon.classList.add(hiddenClass); // Hide the element using goober's hidden class\n }\n });\n}\n\n/**\n * Show all .highlighted-comment icons that have the hiddenClass applied.\n */\nexport function showAllHiddenHighlightedCommentIcons(): void {\n // Query all elements that have both .highlighted-comment and hiddenClass\n const hiddenIcons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment.${hiddenClass}`\n );\n\n // Loop through each hidden icon and remove the hiddenClass\n hiddenIcons.forEach((icon) => {\n icon.classList.remove(hiddenClass); // Remove the hiddenClass to show the icon\n });\n}\n"],"mappings":"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","names":["import_preact","HighlightedCommentIcon"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/generators/generateHighlightedComment.tsx"],"sourcesContent":["import { h, VNode } from \"preact\"; // Explicitly import VNode from Preact\nimport { render } from \"preact\";\nimport HighlightedCommentIcon from \"../components/HighlightedCommentIcon\";\nimport { css } from \"goober\";\nimport React from \"preact/compat\";\nimport { IHighlightCommentData } from \"../eventManager/useHighlightCommentIcon\";\nimport { isValidCslp } from \"../../cslp\";\n\n/**\n * Inserts highlighted comment icons based on an array of paths.\n *\n * This function locates elements in the DOM based on the `fieldMetadata.cslpValue`,\n * and appends a comment icon near each matching element.\n *\n * @param payload - Array of comment data with field metadata, schema, absolutePath and discussion ID.\n */\nconst highlighCommentOffset = 25;\n\nexport function highlightCommentIconOnCanvas(\n payload: IHighlightCommentData[]\n): void {\n const uniquePaths: { [key: string]: boolean } = {}; // Using object for uniqueness\n\n payload.forEach((data) => {\n const cslpValue = data?.fieldMetadata?.cslpValue;\n\n // Check if the cslpValue is already in the Object\n if (!isValidCslp(cslpValue) || uniquePaths[cslpValue]) {\n return; // Skip if the value is not unique\n }\n\n uniquePaths[cslpValue] = true; // Mark it as processed\n\n const element = document.querySelector(`[data-cslp=\"${cslpValue}\"]`);\n if (element && element instanceof HTMLElement) {\n const { top, left } = element.getBoundingClientRect();\n\n const iconContainer = document.createElement(\"div\");\n iconContainer.setAttribute(\"field-path\", cslpValue);\n\n iconContainer.style.position = \"fixed\";\n iconContainer.style.top = `${top - highlighCommentOffset}px`;\n iconContainer.style.left = `${left - highlighCommentOffset}px`;\n iconContainer.style.zIndex = \"900\";\n iconContainer.style.cursor = \"pointer\";\n iconContainer.className = \"highlighted-comment collab-icon\";\n\n // Render the HighlightedCommentIcon using Preact's render method\n render(\n h(HighlightedCommentIcon, { data }), // Use h directly with Preact\n iconContainer\n );\n\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper =\n visualBuilderContainer.querySelector(\n \".visual-builder__highlighted-comment-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__highlighted-comment-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(iconContainer);\n }\n }\n });\n}\n\n/**\n * Update Highlighted comment position , whenever scroll or resize happen.\n */\n\nexport function updateHighlightedCommentIconPosition() {\n // Query all elements with the .highlighted-comment class\n const icons = document.querySelectorAll(\".highlighted-comment\");\n\n icons.forEach((icon) => {\n if (icon && icon instanceof HTMLElement) {\n // Get the field-path attribute from the icon container\n const path = icon.getAttribute(\"field-path\");\n if (path) {\n // Query the target element using the path\n const targetElement = document.querySelector(\n `[data-cslp=\"${path}\"]`\n );\n if (targetElement && targetElement instanceof HTMLElement) {\n // Get the target element's position relative to the viewport\n const { top, left } = targetElement.getBoundingClientRect();\n\n // Update the position of the icon container\n icon.style.top = `${top - highlighCommentOffset}px`; // Adjust based on the target element's top\n icon.style.left = `${left - highlighCommentOffset}px`; // Adjust based on the target element's left\n }\n }\n }\n });\n}\n\n/**\n * Removes the first highlighted comment icon based on an array of paths.\n *\n * @param pathsToRemove - Array of field-paths to remove.\n */\nexport function removeHighlightedCommentIcon(pathToRemove: string): void {\n // Loop through each path in the array\n const iconToRemove = document.querySelectorAll(\n `.highlighted-comment[field-path=\"${pathToRemove}\"]`\n );\n iconToRemove?.forEach((icon) => icon?.remove());\n}\n\nexport function removeAllHighlightedCommentIcons(): void {\n const icons = document.querySelectorAll(\".highlighted-comment\");\n icons?.forEach((icon) => icon?.remove());\n}\n\n// Define a hidden class in goober\nconst hiddenClass = css`\n display: none;\n`;\n\n/**\n * Toggle display style of a specific highlighted comment icon.\n *\n * @param path - The data-cslp attribute of the element whose corresponding highlighted comment icon should be toggled.\n * @param shouldShow - Boolean value to determine whether to show or hide the icon.\n * If true, the icon will be displayed. If false, the icon will be hidden.\n */\nexport function toggleHighlightedCommentIconDisplay(\n path: string,\n shouldShow: boolean\n): void {\n const icons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment[field-path=\"${path}\"]`\n );\n\n icons.forEach((icon) => {\n if (shouldShow) {\n icon.classList.remove(hiddenClass); // Show the element\n } else {\n icon.classList.add(hiddenClass); // Hide the element using goober's hidden class\n }\n });\n}\n\n/**\n * Show all .highlighted-comment icons that have the hiddenClass applied.\n */\nexport function showAllHiddenHighlightedCommentIcons(): void {\n // Query all elements that have both .highlighted-comment and hiddenClass\n const hiddenIcons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment.${hiddenClass}`\n );\n\n // Loop through each hidden icon and remove the hiddenClass\n hiddenIcons.forEach((icon) => {\n icon.classList.remove(hiddenClass); // Remove the hiddenClass to show the icon\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;AACzB,IAAAA,iBAAuB;AACvB,oCAAmC;AACnC,oBAAoB;AAGpB,kBAA4B;AAU5B,IAAM,wBAAwB;AAEvB,SAAS,6BACZ,SACI;AACJ,QAAM,cAA0C,CAAC;AAEjD,UAAQ,QAAQ,CAAC,SAAS;AACtB,UAAM,YAAY,MAAM,eAAe;AAGvC,QAAI,KAAC,yBAAY,SAAS,KAAK,YAAY,SAAS,GAAG;AACnD;AAAA,IACJ;AAEA,gBAAY,SAAS,IAAI;AAEzB,UAAM,UAAU,SAAS,cAAc,eAAe,SAAS,IAAI;AACnE,QAAI,WAAW,mBAAmB,aAAa;AAC3C,YAAM,EAAE,KAAK,KAAK,IAAI,QAAQ,sBAAsB;AAEpD,YAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,oBAAc,aAAa,cAAc,SAAS;AAElD,oBAAc,MAAM,WAAW;AAC/B,oBAAc,MAAM,MAAM,GAAG,MAAM,qBAAqB;AACxD,oBAAc,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAC1D,oBAAc,MAAM,SAAS;AAC7B,oBAAc,MAAM,SAAS;AAC7B,oBAAc,YAAY;AAG1B;AAAA,YACI,iBAAE,8BAAAC,SAAwB,EAAE,KAAK,CAAC;AAAA;AAAA,QAClC;AAAA,MACJ;AAEA,YAAM,yBAAyB,SAAS;AAAA,QACpC;AAAA,MACJ;AACA,UAAI,wBAAwB;AACxB,YAAI,0BACA,uBAAuB;AAAA,UACnB;AAAA,QACJ;AACJ,YAAI,CAAC,yBAAyB;AAC1B,oCAA0B,SAAS,cAAc,KAAK;AACtD,kCAAwB,YACpB;AACJ,iCAAuB,YAAY,uBAAuB;AAAA,QAC9D;AACA,gCAAwB,YAAY,aAAa;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAMO,SAAS,uCAAuC;AAEnD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAE9D,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,QAAQ,gBAAgB,aAAa;AAErC,YAAM,OAAO,KAAK,aAAa,YAAY;AAC3C,UAAI,MAAM;AAEN,cAAM,gBAAgB,SAAS;AAAA,UAC3B,eAAe,IAAI;AAAA,QACvB;AACA,YAAI,iBAAiB,yBAAyB,aAAa;AAEvD,gBAAM,EAAE,KAAK,KAAK,IAAI,cAAc,sBAAsB;AAG1D,eAAK,MAAM,MAAM,GAAG,MAAM,qBAAqB;AAC/C,eAAK,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAOO,SAAS,6BAA6B,cAA4B;AAErE,QAAM,eAAe,SAAS;AAAA,IAC1B,oCAAoC,YAAY;AAAA,EACpD;AACA,gBAAc,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAClD;AAEO,SAAS,mCAAyC;AACrD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAC9D,SAAO,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAC3C;AAGA,IAAM,cAAc;AAAA;AAAA;AAWb,SAAS,oCACZ,MACA,YACI;AACJ,QAAM,QAAQ,SAAS;AAAA,IACnB,oCAAoC,IAAI;AAAA,EAC5C;AAEA,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,YAAY;AACZ,WAAK,UAAU,OAAO,WAAW;AAAA,IACrC,OAAO;AACH,WAAK,UAAU,IAAI,WAAW;AAAA,IAClC;AAAA,EACJ,CAAC;AACL;AAKO,SAAS,uCAA6C;AAEzD,QAAM,cAAc,SAAS;AAAA,IACzB,wBAAwB,WAAW;AAAA,EACvC;AAGA,cAAY,QAAQ,CAAC,SAAS;AAC1B,SAAK,UAAU,OAAO,WAAW;AAAA,EACrC,CAAC;AACL;","names":["import_preact","HighlightedCommentIcon"]}
@@ -5,12 +5,13 @@ import { h } from "preact";
5
5
  import { render } from "preact";
6
6
  import HighlightedCommentIcon from "../components/HighlightedCommentIcon.js";
7
7
  import { css } from "goober";
8
+ import { isValidCslp } from "../../cslp/index.js";
8
9
  var highlighCommentOffset = 25;
9
10
  function highlightCommentIconOnCanvas(payload) {
10
11
  const uniquePaths = {};
11
12
  payload.forEach((data) => {
12
13
  const cslpValue = data?.fieldMetadata?.cslpValue;
13
- if (!cslpValue || uniquePaths[cslpValue]) {
14
+ if (!isValidCslp(cslpValue) || uniquePaths[cslpValue]) {
14
15
  return;
15
16
  }
16
17
  uniquePaths[cslpValue] = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/generators/generateHighlightedComment.tsx"],"sourcesContent":["import { h, VNode } from \"preact\"; // Explicitly import VNode from Preact\nimport { render } from \"preact\";\nimport HighlightedCommentIcon from \"../components/HighlightedCommentIcon\";\nimport { css } from \"goober\";\nimport React from \"preact/compat\";\nimport { IHighlightCommentData } from \"../eventManager/useHighlightCommentIcon\";\n\n/**\n * Inserts highlighted comment icons based on an array of paths.\n *\n * This function locates elements in the DOM based on the `fieldMetadata.cslpValue`,\n * and appends a comment icon near each matching element.\n *\n * @param payload - Array of comment data with field metadata, schema, absolutePath and discussion ID.\n */\nconst highlighCommentOffset = 25;\n\nexport function highlightCommentIconOnCanvas(\n payload: IHighlightCommentData[]\n): void {\n const uniquePaths: { [key: string]: boolean } = {}; // Using object for uniqueness\n\n payload.forEach((data) => {\n const cslpValue = data?.fieldMetadata?.cslpValue;\n\n // Check if the cslpValue is already in the Object\n if (!cslpValue || uniquePaths[cslpValue]) {\n return; // Skip if the value is not unique\n }\n\n uniquePaths[cslpValue] = true; // Mark it as processed\n\n const element = document.querySelector(`[data-cslp=\"${cslpValue}\"]`);\n if (element && element instanceof HTMLElement) {\n const { top, left } = element.getBoundingClientRect();\n\n const iconContainer = document.createElement(\"div\");\n iconContainer.setAttribute(\"field-path\", cslpValue);\n\n iconContainer.style.position = \"fixed\";\n iconContainer.style.top = `${top - highlighCommentOffset}px`;\n iconContainer.style.left = `${left - highlighCommentOffset}px`;\n iconContainer.style.zIndex = \"900\";\n iconContainer.style.cursor = \"pointer\";\n iconContainer.className = \"highlighted-comment collab-icon\";\n\n // Render the HighlightedCommentIcon using Preact's render method\n render(\n h(HighlightedCommentIcon, { data }), // Use h directly with Preact\n iconContainer\n );\n\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper =\n visualBuilderContainer.querySelector(\n \".visual-builder__highlighted-comment-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__highlighted-comment-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(iconContainer);\n }\n }\n });\n}\n\n/**\n * Update Highlighted comment position , whenever scroll or resize happen.\n */\n\nexport function updateHighlightedCommentIconPosition() {\n // Query all elements with the .highlighted-comment class\n const icons = document.querySelectorAll(\".highlighted-comment\");\n\n icons.forEach((icon) => {\n if (icon && icon instanceof HTMLElement) {\n // Get the field-path attribute from the icon container\n const path = icon.getAttribute(\"field-path\");\n if (path) {\n // Query the target element using the path\n const targetElement = document.querySelector(\n `[data-cslp=\"${path}\"]`\n );\n if (targetElement && targetElement instanceof HTMLElement) {\n // Get the target element's position relative to the viewport\n const { top, left } = targetElement.getBoundingClientRect();\n\n // Update the position of the icon container\n icon.style.top = `${top - highlighCommentOffset}px`; // Adjust based on the target element's top\n icon.style.left = `${left - highlighCommentOffset}px`; // Adjust based on the target element's left\n }\n }\n }\n });\n}\n\n/**\n * Removes the first highlighted comment icon based on an array of paths.\n *\n * @param pathsToRemove - Array of field-paths to remove.\n */\nexport function removeHighlightedCommentIcon(pathToRemove: string): void {\n // Loop through each path in the array\n const iconToRemove = document.querySelectorAll(\n `.highlighted-comment[field-path=\"${pathToRemove}\"]`\n );\n iconToRemove?.forEach((icon) => icon?.remove());\n}\n\nexport function removeAllHighlightedCommentIcons(): void {\n const icons = document.querySelectorAll(\".highlighted-comment\");\n icons?.forEach((icon) => icon?.remove());\n}\n\n// Define a hidden class in goober\nconst hiddenClass = css`\n display: none;\n`;\n\n/**\n * Toggle display style of a specific highlighted comment icon.\n *\n * @param path - The data-cslp attribute of the element whose corresponding highlighted comment icon should be toggled.\n * @param shouldShow - Boolean value to determine whether to show or hide the icon.\n * If true, the icon will be displayed. If false, the icon will be hidden.\n */\nexport function toggleHighlightedCommentIconDisplay(\n path: string,\n shouldShow: boolean\n): void {\n const icons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment[field-path=\"${path}\"]`\n );\n\n icons.forEach((icon) => {\n if (shouldShow) {\n icon.classList.remove(hiddenClass); // Show the element\n } else {\n icon.classList.add(hiddenClass); // Hide the element using goober's hidden class\n }\n });\n}\n\n/**\n * Show all .highlighted-comment icons that have the hiddenClass applied.\n */\nexport function showAllHiddenHighlightedCommentIcons(): void {\n // Query all elements that have both .highlighted-comment and hiddenClass\n const hiddenIcons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment.${hiddenClass}`\n );\n\n // Loop through each hidden icon and remove the hiddenClass\n hiddenIcons.forEach((icon) => {\n icon.classList.remove(hiddenClass); // Remove the hiddenClass to show the icon\n });\n}\n"],"mappings":";;;AAAA,SAAS,SAAgB;AACzB,SAAS,cAAc;AACvB,OAAO,4BAA4B;AACnC,SAAS,WAAW;AAYpB,IAAM,wBAAwB;AAEvB,SAAS,6BACZ,SACI;AACJ,QAAM,cAA0C,CAAC;AAEjD,UAAQ,QAAQ,CAAC,SAAS;AACtB,UAAM,YAAY,MAAM,eAAe;AAGvC,QAAI,CAAC,aAAa,YAAY,SAAS,GAAG;AACtC;AAAA,IACJ;AAEA,gBAAY,SAAS,IAAI;AAEzB,UAAM,UAAU,SAAS,cAAc,eAAe,SAAS,IAAI;AACnE,QAAI,WAAW,mBAAmB,aAAa;AAC3C,YAAM,EAAE,KAAK,KAAK,IAAI,QAAQ,sBAAsB;AAEpD,YAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,oBAAc,aAAa,cAAc,SAAS;AAElD,oBAAc,MAAM,WAAW;AAC/B,oBAAc,MAAM,MAAM,GAAG,MAAM,qBAAqB;AACxD,oBAAc,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAC1D,oBAAc,MAAM,SAAS;AAC7B,oBAAc,MAAM,SAAS;AAC7B,oBAAc,YAAY;AAG1B;AAAA,QACI,EAAE,wBAAwB,EAAE,KAAK,CAAC;AAAA;AAAA,QAClC;AAAA,MACJ;AAEA,YAAM,yBAAyB,SAAS;AAAA,QACpC;AAAA,MACJ;AACA,UAAI,wBAAwB;AACxB,YAAI,0BACA,uBAAuB;AAAA,UACnB;AAAA,QACJ;AACJ,YAAI,CAAC,yBAAyB;AAC1B,oCAA0B,SAAS,cAAc,KAAK;AACtD,kCAAwB,YACpB;AACJ,iCAAuB,YAAY,uBAAuB;AAAA,QAC9D;AACA,gCAAwB,YAAY,aAAa;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAMO,SAAS,uCAAuC;AAEnD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAE9D,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,QAAQ,gBAAgB,aAAa;AAErC,YAAM,OAAO,KAAK,aAAa,YAAY;AAC3C,UAAI,MAAM;AAEN,cAAM,gBAAgB,SAAS;AAAA,UAC3B,eAAe,IAAI;AAAA,QACvB;AACA,YAAI,iBAAiB,yBAAyB,aAAa;AAEvD,gBAAM,EAAE,KAAK,KAAK,IAAI,cAAc,sBAAsB;AAG1D,eAAK,MAAM,MAAM,GAAG,MAAM,qBAAqB;AAC/C,eAAK,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAOO,SAAS,6BAA6B,cAA4B;AAErE,QAAM,eAAe,SAAS;AAAA,IAC1B,oCAAoC,YAAY;AAAA,EACpD;AACA,gBAAc,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAClD;AAEO,SAAS,mCAAyC;AACrD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAC9D,SAAO,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAC3C;AAGA,IAAM,cAAc;AAAA;AAAA;AAWb,SAAS,oCACZ,MACA,YACI;AACJ,QAAM,QAAQ,SAAS;AAAA,IACnB,oCAAoC,IAAI;AAAA,EAC5C;AAEA,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,YAAY;AACZ,WAAK,UAAU,OAAO,WAAW;AAAA,IACrC,OAAO;AACH,WAAK,UAAU,IAAI,WAAW;AAAA,IAClC;AAAA,EACJ,CAAC;AACL;AAKO,SAAS,uCAA6C;AAEzD,QAAM,cAAc,SAAS;AAAA,IACzB,wBAAwB,WAAW;AAAA,EACvC;AAGA,cAAY,QAAQ,CAAC,SAAS;AAC1B,SAAK,UAAU,OAAO,WAAW;AAAA,EACrC,CAAC;AACL;","names":[]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/generators/generateHighlightedComment.tsx"],"sourcesContent":["import { h, VNode } from \"preact\"; // Explicitly import VNode from Preact\nimport { render } from \"preact\";\nimport HighlightedCommentIcon from \"../components/HighlightedCommentIcon\";\nimport { css } from \"goober\";\nimport React from \"preact/compat\";\nimport { IHighlightCommentData } from \"../eventManager/useHighlightCommentIcon\";\nimport { isValidCslp } from \"../../cslp\";\n\n/**\n * Inserts highlighted comment icons based on an array of paths.\n *\n * This function locates elements in the DOM based on the `fieldMetadata.cslpValue`,\n * and appends a comment icon near each matching element.\n *\n * @param payload - Array of comment data with field metadata, schema, absolutePath and discussion ID.\n */\nconst highlighCommentOffset = 25;\n\nexport function highlightCommentIconOnCanvas(\n payload: IHighlightCommentData[]\n): void {\n const uniquePaths: { [key: string]: boolean } = {}; // Using object for uniqueness\n\n payload.forEach((data) => {\n const cslpValue = data?.fieldMetadata?.cslpValue;\n\n // Check if the cslpValue is already in the Object\n if (!isValidCslp(cslpValue) || uniquePaths[cslpValue]) {\n return; // Skip if the value is not unique\n }\n\n uniquePaths[cslpValue] = true; // Mark it as processed\n\n const element = document.querySelector(`[data-cslp=\"${cslpValue}\"]`);\n if (element && element instanceof HTMLElement) {\n const { top, left } = element.getBoundingClientRect();\n\n const iconContainer = document.createElement(\"div\");\n iconContainer.setAttribute(\"field-path\", cslpValue);\n\n iconContainer.style.position = \"fixed\";\n iconContainer.style.top = `${top - highlighCommentOffset}px`;\n iconContainer.style.left = `${left - highlighCommentOffset}px`;\n iconContainer.style.zIndex = \"900\";\n iconContainer.style.cursor = \"pointer\";\n iconContainer.className = \"highlighted-comment collab-icon\";\n\n // Render the HighlightedCommentIcon using Preact's render method\n render(\n h(HighlightedCommentIcon, { data }), // Use h directly with Preact\n iconContainer\n );\n\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper =\n visualBuilderContainer.querySelector(\n \".visual-builder__highlighted-comment-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__highlighted-comment-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(iconContainer);\n }\n }\n });\n}\n\n/**\n * Update Highlighted comment position , whenever scroll or resize happen.\n */\n\nexport function updateHighlightedCommentIconPosition() {\n // Query all elements with the .highlighted-comment class\n const icons = document.querySelectorAll(\".highlighted-comment\");\n\n icons.forEach((icon) => {\n if (icon && icon instanceof HTMLElement) {\n // Get the field-path attribute from the icon container\n const path = icon.getAttribute(\"field-path\");\n if (path) {\n // Query the target element using the path\n const targetElement = document.querySelector(\n `[data-cslp=\"${path}\"]`\n );\n if (targetElement && targetElement instanceof HTMLElement) {\n // Get the target element's position relative to the viewport\n const { top, left } = targetElement.getBoundingClientRect();\n\n // Update the position of the icon container\n icon.style.top = `${top - highlighCommentOffset}px`; // Adjust based on the target element's top\n icon.style.left = `${left - highlighCommentOffset}px`; // Adjust based on the target element's left\n }\n }\n }\n });\n}\n\n/**\n * Removes the first highlighted comment icon based on an array of paths.\n *\n * @param pathsToRemove - Array of field-paths to remove.\n */\nexport function removeHighlightedCommentIcon(pathToRemove: string): void {\n // Loop through each path in the array\n const iconToRemove = document.querySelectorAll(\n `.highlighted-comment[field-path=\"${pathToRemove}\"]`\n );\n iconToRemove?.forEach((icon) => icon?.remove());\n}\n\nexport function removeAllHighlightedCommentIcons(): void {\n const icons = document.querySelectorAll(\".highlighted-comment\");\n icons?.forEach((icon) => icon?.remove());\n}\n\n// Define a hidden class in goober\nconst hiddenClass = css`\n display: none;\n`;\n\n/**\n * Toggle display style of a specific highlighted comment icon.\n *\n * @param path - The data-cslp attribute of the element whose corresponding highlighted comment icon should be toggled.\n * @param shouldShow - Boolean value to determine whether to show or hide the icon.\n * If true, the icon will be displayed. If false, the icon will be hidden.\n */\nexport function toggleHighlightedCommentIconDisplay(\n path: string,\n shouldShow: boolean\n): void {\n const icons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment[field-path=\"${path}\"]`\n );\n\n icons.forEach((icon) => {\n if (shouldShow) {\n icon.classList.remove(hiddenClass); // Show the element\n } else {\n icon.classList.add(hiddenClass); // Hide the element using goober's hidden class\n }\n });\n}\n\n/**\n * Show all .highlighted-comment icons that have the hiddenClass applied.\n */\nexport function showAllHiddenHighlightedCommentIcons(): void {\n // Query all elements that have both .highlighted-comment and hiddenClass\n const hiddenIcons = document.querySelectorAll<HTMLElement>(\n `.highlighted-comment.${hiddenClass}`\n );\n\n // Loop through each hidden icon and remove the hiddenClass\n hiddenIcons.forEach((icon) => {\n icon.classList.remove(hiddenClass); // Remove the hiddenClass to show the icon\n });\n}\n"],"mappings":";;;AAAA,SAAS,SAAgB;AACzB,SAAS,cAAc;AACvB,OAAO,4BAA4B;AACnC,SAAS,WAAW;AAGpB,SAAS,mBAAmB;AAU5B,IAAM,wBAAwB;AAEvB,SAAS,6BACZ,SACI;AACJ,QAAM,cAA0C,CAAC;AAEjD,UAAQ,QAAQ,CAAC,SAAS;AACtB,UAAM,YAAY,MAAM,eAAe;AAGvC,QAAI,CAAC,YAAY,SAAS,KAAK,YAAY,SAAS,GAAG;AACnD;AAAA,IACJ;AAEA,gBAAY,SAAS,IAAI;AAEzB,UAAM,UAAU,SAAS,cAAc,eAAe,SAAS,IAAI;AACnE,QAAI,WAAW,mBAAmB,aAAa;AAC3C,YAAM,EAAE,KAAK,KAAK,IAAI,QAAQ,sBAAsB;AAEpD,YAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,oBAAc,aAAa,cAAc,SAAS;AAElD,oBAAc,MAAM,WAAW;AAC/B,oBAAc,MAAM,MAAM,GAAG,MAAM,qBAAqB;AACxD,oBAAc,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAC1D,oBAAc,MAAM,SAAS;AAC7B,oBAAc,MAAM,SAAS;AAC7B,oBAAc,YAAY;AAG1B;AAAA,QACI,EAAE,wBAAwB,EAAE,KAAK,CAAC;AAAA;AAAA,QAClC;AAAA,MACJ;AAEA,YAAM,yBAAyB,SAAS;AAAA,QACpC;AAAA,MACJ;AACA,UAAI,wBAAwB;AACxB,YAAI,0BACA,uBAAuB;AAAA,UACnB;AAAA,QACJ;AACJ,YAAI,CAAC,yBAAyB;AAC1B,oCAA0B,SAAS,cAAc,KAAK;AACtD,kCAAwB,YACpB;AACJ,iCAAuB,YAAY,uBAAuB;AAAA,QAC9D;AACA,gCAAwB,YAAY,aAAa;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAMO,SAAS,uCAAuC;AAEnD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAE9D,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,QAAQ,gBAAgB,aAAa;AAErC,YAAM,OAAO,KAAK,aAAa,YAAY;AAC3C,UAAI,MAAM;AAEN,cAAM,gBAAgB,SAAS;AAAA,UAC3B,eAAe,IAAI;AAAA,QACvB;AACA,YAAI,iBAAiB,yBAAyB,aAAa;AAEvD,gBAAM,EAAE,KAAK,KAAK,IAAI,cAAc,sBAAsB;AAG1D,eAAK,MAAM,MAAM,GAAG,MAAM,qBAAqB;AAC/C,eAAK,MAAM,OAAO,GAAG,OAAO,qBAAqB;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAOO,SAAS,6BAA6B,cAA4B;AAErE,QAAM,eAAe,SAAS;AAAA,IAC1B,oCAAoC,YAAY;AAAA,EACpD;AACA,gBAAc,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAClD;AAEO,SAAS,mCAAyC;AACrD,QAAM,QAAQ,SAAS,iBAAiB,sBAAsB;AAC9D,SAAO,QAAQ,CAAC,SAAS,MAAM,OAAO,CAAC;AAC3C;AAGA,IAAM,cAAc;AAAA;AAAA;AAWb,SAAS,oCACZ,MACA,YACI;AACJ,QAAM,QAAQ,SAAS;AAAA,IACnB,oCAAoC,IAAI;AAAA,EAC5C;AAEA,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,YAAY;AACZ,WAAK,UAAU,OAAO,WAAW;AAAA,IACrC,OAAO;AACH,WAAK,UAAU,IAAI,WAAW;AAAA,IAClC;AAAA,EACJ,CAAC;AACL;AAKO,SAAS,uCAA6C;AAEzD,QAAM,cAAc,SAAS;AAAA,IACzB,wBAAwB,WAAW;AAAA,EACvC;AAGA,cAAY,QAAQ,CAAC,SAAS;AAC1B,SAAK,UAAU,OAAO,WAAW;AAAA,EACrC,CAAC;AACL;","names":[]}