@contentstack/live-preview-utils 3.2.5 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/light-sdk.cjs +1 -1
  3. package/dist/legacy/light-sdk.js +1 -1
  4. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  5. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  6. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  7. package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  8. package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
  9. package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
  10. package/dist/legacy/utils/addLivePreviewQueryTags.cjs +7 -1
  11. package/dist/legacy/utils/addLivePreviewQueryTags.cjs.map +1 -1
  12. package/dist/legacy/utils/addLivePreviewQueryTags.js +7 -1
  13. package/dist/legacy/utils/addLivePreviewQueryTags.js.map +1 -1
  14. package/dist/legacy/utils/index.cjs +8 -4
  15. package/dist/legacy/utils/index.cjs.map +1 -1
  16. package/dist/legacy/utils/index.js +8 -4
  17. package/dist/legacy/utils/index.js.map +1 -1
  18. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs +186 -0
  19. package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  20. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  21. package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  22. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js +153 -0
  23. package/dist/legacy/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  24. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs +125 -0
  25. package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  26. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  27. package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  28. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js +92 -0
  29. package/dist/legacy/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  30. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +181 -115
  31. package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  32. package/dist/legacy/visualBuilder/components/FieldToolbar.js +182 -116
  33. package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
  34. package/dist/legacy/visualBuilder/components/Tooltip.cjs +167 -0
  35. package/dist/legacy/visualBuilder/components/Tooltip.cjs.map +1 -0
  36. package/dist/legacy/visualBuilder/components/Tooltip.d.cts +26 -0
  37. package/dist/legacy/visualBuilder/components/Tooltip.d.ts +26 -0
  38. package/dist/legacy/visualBuilder/components/Tooltip.js +140 -0
  39. package/dist/legacy/visualBuilder/components/Tooltip.js.map +1 -0
  40. package/dist/legacy/visualBuilder/components/emptyBlock.cjs +26 -5
  41. package/dist/legacy/visualBuilder/components/emptyBlock.cjs.map +1 -1
  42. package/dist/legacy/visualBuilder/components/emptyBlock.js +26 -5
  43. package/dist/legacy/visualBuilder/components/emptyBlock.js.map +1 -1
  44. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +115 -15
  45. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  46. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +117 -17
  47. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  48. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  49. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  50. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  51. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  52. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  53. package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  54. package/dist/legacy/visualBuilder/components/icons/index.cjs +63 -0
  55. package/dist/legacy/visualBuilder/components/icons/index.cjs.map +1 -1
  56. package/dist/legacy/visualBuilder/components/icons/index.d.cts +4 -1
  57. package/dist/legacy/visualBuilder/components/icons/index.d.ts +4 -1
  58. package/dist/legacy/visualBuilder/components/icons/index.js +50 -0
  59. package/dist/legacy/visualBuilder/components/icons/index.js.map +1 -1
  60. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -0
  61. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  62. package/dist/legacy/visualBuilder/generators/generateOverlay.js +1 -0
  63. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  64. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +44 -10
  65. package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +11 -4
  67. package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +11 -4
  68. package/dist/legacy/visualBuilder/generators/generateToolbar.js +42 -9
  69. package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
  70. package/dist/legacy/visualBuilder/index.cjs +17 -3
  71. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  72. package/dist/legacy/visualBuilder/index.d.cts +2 -0
  73. package/dist/legacy/visualBuilder/index.d.ts +2 -0
  74. package/dist/legacy/visualBuilder/index.js +17 -3
  75. package/dist/legacy/visualBuilder/index.js.map +1 -1
  76. package/dist/legacy/visualBuilder/listeners/index.cjs +3 -1
  77. package/dist/legacy/visualBuilder/listeners/index.cjs.map +1 -1
  78. package/dist/legacy/visualBuilder/listeners/index.js +3 -1
  79. package/dist/legacy/visualBuilder/listeners/index.js.map +1 -1
  80. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -3
  81. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  82. package/dist/legacy/visualBuilder/listeners/mouseClick.d.cts +4 -1
  83. package/dist/legacy/visualBuilder/listeners/mouseClick.d.ts +4 -1
  84. package/dist/legacy/visualBuilder/listeners/mouseClick.js +5 -2
  85. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  86. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +186 -133
  87. package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  88. package/dist/legacy/visualBuilder/listeners/mouseHover.d.cts +5 -3
  89. package/dist/legacy/visualBuilder/listeners/mouseHover.d.ts +5 -3
  90. package/dist/legacy/visualBuilder/listeners/mouseHover.js +185 -133
  91. package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -23
  93. package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -13
  95. package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  96. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  97. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  98. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  99. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  100. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +5 -0
  101. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  102. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +183 -3
  103. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  104. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +25 -0
  105. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +25 -0
  106. package/dist/legacy/visualBuilder/visualBuilder.style.js +183 -3
  107. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  108. package/dist/modern/light-sdk.cjs +1 -1
  109. package/dist/modern/light-sdk.js +1 -1
  110. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
  111. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  112. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
  113. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  114. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
  115. package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
  116. package/dist/modern/utils/addLivePreviewQueryTags.cjs +7 -1
  117. package/dist/modern/utils/addLivePreviewQueryTags.cjs.map +1 -1
  118. package/dist/modern/utils/addLivePreviewQueryTags.js +7 -1
  119. package/dist/modern/utils/addLivePreviewQueryTags.js.map +1 -1
  120. package/dist/modern/utils/index.cjs +8 -4
  121. package/dist/modern/utils/index.cjs.map +1 -1
  122. package/dist/modern/utils/index.js +8 -4
  123. package/dist/modern/utils/index.js.map +1 -1
  124. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs +185 -0
  125. package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
  126. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
  127. package/dist/modern/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
  128. package/dist/modern/visualBuilder/components/FieldLocationAppList.js +152 -0
  129. package/dist/modern/visualBuilder/components/FieldLocationAppList.js.map +1 -0
  130. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs +123 -0
  131. package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
  132. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
  133. package/dist/modern/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
  134. package/dist/modern/visualBuilder/components/FieldLocationIcon.js +90 -0
  135. package/dist/modern/visualBuilder/components/FieldLocationIcon.js.map +1 -0
  136. package/dist/modern/visualBuilder/components/FieldToolbar.cjs +180 -115
  137. package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
  138. package/dist/modern/visualBuilder/components/FieldToolbar.js +181 -116
  139. package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
  140. package/dist/modern/visualBuilder/components/Tooltip.cjs +167 -0
  141. package/dist/modern/visualBuilder/components/Tooltip.cjs.map +1 -0
  142. package/dist/modern/visualBuilder/components/Tooltip.d.cts +26 -0
  143. package/dist/modern/visualBuilder/components/Tooltip.d.ts +26 -0
  144. package/dist/modern/visualBuilder/components/Tooltip.js +140 -0
  145. package/dist/modern/visualBuilder/components/Tooltip.js.map +1 -0
  146. package/dist/modern/visualBuilder/components/emptyBlock.cjs +26 -5
  147. package/dist/modern/visualBuilder/components/emptyBlock.cjs.map +1 -1
  148. package/dist/modern/visualBuilder/components/emptyBlock.js +26 -5
  149. package/dist/modern/visualBuilder/components/emptyBlock.js.map +1 -1
  150. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +113 -15
  151. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  152. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +115 -17
  153. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  154. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
  155. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
  156. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
  157. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
  158. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
  159. package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
  160. package/dist/modern/visualBuilder/components/icons/index.cjs +63 -0
  161. package/dist/modern/visualBuilder/components/icons/index.cjs.map +1 -1
  162. package/dist/modern/visualBuilder/components/icons/index.d.cts +4 -1
  163. package/dist/modern/visualBuilder/components/icons/index.d.ts +4 -1
  164. package/dist/modern/visualBuilder/components/icons/index.js +50 -0
  165. package/dist/modern/visualBuilder/components/icons/index.js.map +1 -1
  166. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -0
  167. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  168. package/dist/modern/visualBuilder/generators/generateOverlay.js +1 -0
  169. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  170. package/dist/modern/visualBuilder/generators/generateToolbar.cjs +43 -10
  171. package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
  172. package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +11 -4
  173. package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +11 -4
  174. package/dist/modern/visualBuilder/generators/generateToolbar.js +41 -9
  175. package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
  176. package/dist/modern/visualBuilder/index.cjs +16 -2
  177. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  178. package/dist/modern/visualBuilder/index.d.cts +2 -0
  179. package/dist/modern/visualBuilder/index.d.ts +2 -0
  180. package/dist/modern/visualBuilder/index.js +16 -2
  181. package/dist/modern/visualBuilder/index.js.map +1 -1
  182. package/dist/modern/visualBuilder/listeners/index.cjs +3 -1
  183. package/dist/modern/visualBuilder/listeners/index.cjs.map +1 -1
  184. package/dist/modern/visualBuilder/listeners/index.js +3 -1
  185. package/dist/modern/visualBuilder/listeners/index.js.map +1 -1
  186. package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -3
  187. package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  188. package/dist/modern/visualBuilder/listeners/mouseClick.d.cts +4 -1
  189. package/dist/modern/visualBuilder/listeners/mouseClick.d.ts +4 -1
  190. package/dist/modern/visualBuilder/listeners/mouseClick.js +5 -2
  191. package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
  192. package/dist/modern/visualBuilder/listeners/mouseHover.cjs +186 -133
  193. package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
  194. package/dist/modern/visualBuilder/listeners/mouseHover.d.cts +5 -3
  195. package/dist/modern/visualBuilder/listeners/mouseHover.d.ts +5 -3
  196. package/dist/modern/visualBuilder/listeners/mouseHover.js +185 -133
  197. package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
  198. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -22
  199. package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
  200. package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -12
  201. package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
  202. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +5 -0
  203. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  204. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
  205. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
  206. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +5 -0
  207. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  208. package/dist/modern/visualBuilder/visualBuilder.style.cjs +183 -3
  209. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  210. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +25 -0
  211. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +25 -0
  212. package/dist/modern/visualBuilder/visualBuilder.style.js +183 -3
  213. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  214. package/package.json +2 -1
@@ -48,24 +48,50 @@ var import_CslpError = require("./CslpError.cjs");
48
48
  var import_errorHandling = require("../utils/errorHandling.cjs");
49
49
  var import_postMessage = require("../utils/types/postMessage.types.cjs");
50
50
  var import_getEntryPermissionsCached = require("../utils/getEntryPermissionsCached.cjs");
51
+ var import_icons2 = require("./icons/index.cjs");
52
+ var import_Tooltip = require("./Tooltip.cjs");
51
53
  var import_jsx_runtime = require("preact/jsx-runtime");
52
54
  async function getFieldDisplayNames(fieldMetadata) {
53
55
  const result = await import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);
54
56
  return result;
55
57
  }
58
+ async function getContentTypeName(contentTypeUid) {
59
+ try {
60
+ const result = await import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {
61
+ content_type_uid: contentTypeUid
62
+ });
63
+ return result?.contentTypeName;
64
+ } catch (e) {
65
+ console.warn("[getFieldLabelWrapper] Error getting content type name", e);
66
+ return "";
67
+ }
68
+ }
69
+ async function getReferenceParentMap() {
70
+ try {
71
+ const result = await import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};
72
+ return result;
73
+ } catch (e) {
74
+ console.warn("[getFieldLabelWrapper] Error getting reference parent map", e);
75
+ return {};
76
+ }
77
+ }
56
78
  function FieldLabelWrapperComponent(props) {
57
79
  const { eventDetails } = props;
58
80
  const [currentField, setCurrentField] = (0, import_compat.useState)({
59
81
  text: "",
82
+ contentTypeName: "",
60
83
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretIcon, {}),
61
84
  prefixIcon: null,
62
85
  disabled: false,
63
- isVariant: false
86
+ isVariant: false,
87
+ isReference: false,
88
+ referenceFieldName: "",
89
+ parentContentTypeName: ""
64
90
  });
65
91
  const [displayNames, setDisplayNames] = (0, import_compat.useState)(
66
92
  {}
67
93
  );
68
- const [displayNamesLoading, setDisplayNamesLoading] = (0, import_compat.useState)(true);
94
+ const [dataLoading, setDataLoading] = (0, import_compat.useState)(true);
69
95
  const [error, setError] = (0, import_compat.useState)(false);
70
96
  const [isDropdownOpen, setIsDropdownOpen] = (0, import_compat.useState)(false);
71
97
  function calculateTopOffset(index) {
@@ -75,7 +101,7 @@ function FieldLabelWrapperComponent(props) {
75
101
  }
76
102
  (0, import_compat.useEffect)(() => {
77
103
  const fetchData = async () => {
78
- setDisplayNamesLoading(true);
104
+ setDataLoading(true);
79
105
  const allPaths = (0, import_lodash_es.uniqBy)(
80
106
  [
81
107
  props.fieldMetadata,
@@ -85,13 +111,37 @@ function FieldLabelWrapperComponent(props) {
85
111
  ],
86
112
  "cslpValue"
87
113
  );
88
- const displayNames2 = await getFieldDisplayNames(allPaths);
89
- const fieldSchema = await import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(
90
- props.fieldMetadata.content_type_uid,
91
- props.fieldMetadata.fieldPath
92
- );
114
+ const [displayNames2, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([
115
+ getFieldDisplayNames(allPaths),
116
+ import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(
117
+ props.fieldMetadata.content_type_uid,
118
+ props.fieldMetadata.fieldPath
119
+ ),
120
+ getContentTypeName(
121
+ props.fieldMetadata.content_type_uid
122
+ ),
123
+ getReferenceParentMap()
124
+ ]);
125
+ const entryUid = props.fieldMetadata.entry_uid;
126
+ const referenceData = referenceParentMap[entryUid];
127
+ const isReference = !!referenceData;
128
+ let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : "";
129
+ let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : "";
130
+ if (isReference) {
131
+ const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
132
+ if (domAncestor) {
133
+ const domAncestorCslp = domAncestor.getAttribute("data-cslp");
134
+ const domAncestorDetails = (0, import_cslp.extractDetailsFromCslp)(domAncestorCslp);
135
+ const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
136
+ const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
137
+ if (domAncestorContentParent) {
138
+ referenceFieldName = domAncestorContentParent.referenceFieldName;
139
+ parentContentTypeName = domAncestorContentParent.contentTypeTitle;
140
+ }
141
+ }
142
+ }
93
143
  if ((0, import_errorHandling.hasPostMessageError)(displayNames2) || !fieldSchema) {
94
- setDisplayNamesLoading(false);
144
+ setDataLoading(false);
95
145
  setError(true);
96
146
  return;
97
147
  }
@@ -110,6 +160,7 @@ function FieldLabelWrapperComponent(props) {
110
160
  const isVariant = props.fieldMetadata.variant ? true : false;
111
161
  setCurrentField({
112
162
  text: currentFieldDisplayName,
163
+ contentTypeName: contentTypeName ?? "",
113
164
  icon: fieldDisabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
114
165
  "div",
115
166
  {
@@ -120,18 +171,25 @@ function FieldLabelWrapperComponent(props) {
120
171
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.InfoIcon, {})
121
172
  }
122
173
  ) : hasParentPaths ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}),
174
+ isReference,
123
175
  prefixIcon: (0, import_generateCustomCursor.getFieldIcon)(fieldSchema),
124
176
  disabled: fieldDisabled,
177
+ referenceFieldName,
178
+ parentContentTypeName,
125
179
  isVariant
126
180
  });
127
181
  if (displayNames2) {
128
182
  setDisplayNames(displayNames2);
129
183
  }
130
184
  if (Object.keys(displayNames2 || {})?.length === allPaths.length) {
131
- setDisplayNamesLoading(false);
185
+ setDataLoading(false);
132
186
  }
133
187
  };
134
- fetchData();
188
+ try {
189
+ fetchData();
190
+ } catch (e) {
191
+ console.warn("[getFieldLabelWrapper] Error fetching field label data", e);
192
+ }
135
193
  }, [props]);
136
194
  const onParentPathClick = (cslp) => {
137
195
  const parentElement = props.getParentEditableElement(cslp);
@@ -142,7 +200,7 @@ function FieldLabelWrapperComponent(props) {
142
200
  function getCurrentFieldIcon() {
143
201
  if (error) {
144
202
  return null;
145
- } else if (displayNamesLoading) {
203
+ } else if (dataLoading) {
146
204
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_loading.LoadingIcon, {});
147
205
  } else {
148
206
  return currentField.icon;
@@ -155,7 +213,7 @@ function FieldLabelWrapperComponent(props) {
155
213
  "visual-builder__focused-toolbar__field-label-container",
156
214
  (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__focused-toolbar__field-label-container"]
157
215
  ),
158
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
216
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tooltip.ToolbarTooltip, { data: { contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName }, disabled: !currentField.isReference || isDropdownOpen, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
159
217
  "div",
160
218
  {
161
219
  className: (0, import_classnames.default)(
@@ -174,6 +232,7 @@ function FieldLabelWrapperComponent(props) {
174
232
  ),
175
233
  onClick: () => setIsDropdownOpen((prev) => !prev),
176
234
  "data-testid": "visual-builder__focused-toolbar__field-label-wrapper",
235
+ "data-hovered-cslp": props.fieldMetadata.cslpValue,
177
236
  children: [
178
237
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
179
238
  "button",
@@ -186,8 +245,47 @@ function FieldLabelWrapperComponent(props) {
186
245
  (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__button-loader"],
187
246
  error && (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__button-error"]
188
247
  ),
189
- disabled: displayNamesLoading,
248
+ disabled: dataLoading,
190
249
  children: [
250
+ currentField.isReference && !dataLoading && !error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
251
+ "div",
252
+ {
253
+ className: (0, import_classnames.default)(
254
+ "visual-builder__reference-icon-container",
255
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__reference-icon-container"]
256
+ ),
257
+ children: [
258
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
259
+ "div",
260
+ {
261
+ className: (0, import_classnames.default)(
262
+ "visual-builder__field-icon",
263
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__field-icon"]
264
+ ),
265
+ dangerouslySetInnerHTML: {
266
+ __html: import_generateCustomCursor.FieldTypeIconsMap.reference
267
+ },
268
+ "data-testid": "visual-builder__field-icon-caret"
269
+ }
270
+ ),
271
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretRightIcon, {})
272
+ ]
273
+ }
274
+ ) : null,
275
+ currentField.contentTypeName && !dataLoading && !error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
276
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons2.ContentTypeIcon, {}),
277
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
278
+ "div",
279
+ {
280
+ className: (0, import_classnames.default)(
281
+ "visual-builder__focused-toolbar__text",
282
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__focused-toolbar__text"]
283
+ ),
284
+ "data-testid": "visual-builder__focused-toolbar__ct-name",
285
+ children: currentField.contentTypeName + " : "
286
+ }
287
+ )
288
+ ] }) : null,
191
289
  currentField.prefixIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
192
290
  "div",
193
291
  {
@@ -236,7 +334,7 @@ function FieldLabelWrapperComponent(props) {
236
334
  ))
237
335
  ]
238
336
  }
239
- )
337
+ ) })
240
338
  }
241
339
  );
242
340
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [displayNamesLoading, setDisplayNamesLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDisplayNamesLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const displayNames = await getFieldDisplayNames(allPaths);\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n );\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDisplayNamesLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDisplayNamesLoading(false);\n }\n };\n\n fetchData();\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (displayNamesLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={displayNamesLoading}\n >\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["visualBuilderPostMessage","displayNames","classNames"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, CaretRightIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { FieldTypeIconsMap, getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\n\ninterface ReferenceParentMap {\n [entryUid: string]: {\n contentTypeUid: string;\n contentTypeTitle: string;\n referenceFieldName: string;\n }[]\n}\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\nasync function getContentTypeName(contentTypeUid: string) {\n try {\n const result = await visualBuilderPostMessage?.send<{\n contentTypeName: string;\n }>(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {\n content_type_uid: contentTypeUid,\n });\n return result?.contentTypeName;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting content type name\", e);\n return \"\";\n }\n}\n\nasync function getReferenceParentMap() {\n try {\n const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};\n return result;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting reference parent map\", e);\n return {};\n }\n \n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n contentTypeName: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n isReference: boolean;\n referenceFieldName: string;\n parentContentTypeName: string;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n contentTypeName: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n isReference: false,\n referenceFieldName: \"\",\n parentContentTypeName: \"\",\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [dataLoading, setDataLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDataLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const [displayNames, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([\n getFieldDisplayNames(allPaths),\n FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n ),\n getContentTypeName(\n props.fieldMetadata.content_type_uid\n ),\n getReferenceParentMap()\n ]);\n const entryUid = props.fieldMetadata.entry_uid;\n \n const referenceData = referenceParentMap[entryUid];\n const isReference = !!referenceData;\n\n let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : \"\";\n let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : \"\";\n\n if(isReference) {\n const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^=\"${props.fieldMetadata.content_type_uid}\"])`);\n if(domAncestor) {\n const domAncestorCslp = domAncestor.getAttribute(\"data-cslp\");\n const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp!);\n const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;\n const domAncestorContentParent = referenceData?.find(data => data.contentTypeUid === domAncestorContentTypeUid);\n if(domAncestorContentParent) {\n referenceFieldName = domAncestorContentParent.referenceFieldName;\n parentContentTypeName = domAncestorContentParent.contentTypeTitle;\n }\n }\n }\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n isReference,\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n referenceFieldName,\n parentContentTypeName,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDataLoading(false);\n }\n };\n\n try {\n fetchData();\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error fetching field label data\", e);\n }\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (dataLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <ToolbarTooltip data={{contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName}} disabled={!currentField.isReference || isDropdownOpen}>\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n data-hovered-cslp={props.fieldMetadata.cslpValue}\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={dataLoading}\n >\n {\n currentField.isReference && !dataLoading && !error ? \n <div \n className={classNames(\n \"visual-builder__reference-icon-container\",\n visualBuilderStyles()[\"visual-builder__reference-icon-container\"]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: FieldTypeIconsMap.reference,\n }}\n data-testid=\"visual-builder__field-icon-caret\"\n />\n <CaretRightIcon />\n </div> : null\n }\n {\n currentField.contentTypeName && !dataLoading && !error ?\n <>\n <ContentTypeIcon />\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__ct-name\"\n >\n {currentField.contentTypeName + \" : \"}\n </div>\n </> : null\n }\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </ToolbarTooltip>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["import_icons","visualBuilderPostMessage","displayNames","classNames"]}
@@ -7,33 +7,59 @@ import { extractDetailsFromCslp } from "../../cslp/index.js";
7
7
  import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
8
8
  import { isFieldDisabled } from "../utils/isFieldDisabled.js";
9
9
  import visualBuilderPostMessage from "../utils/visualBuilderPostMessage.js";
10
- import { CaretIcon, InfoIcon } from "./icons/index.js";
10
+ import { CaretIcon, CaretRightIcon, InfoIcon } from "./icons/index.js";
11
11
  import { LoadingIcon } from "./icons/loading.js";
12
- import { getFieldIcon } from "../generators/generateCustomCursor.js";
12
+ import { FieldTypeIconsMap, getFieldIcon } from "../generators/generateCustomCursor.js";
13
13
  import { uniqBy } from "lodash-es";
14
14
  import { visualBuilderStyles } from "../visualBuilder.style.js";
15
15
  import { CslpError } from "./CslpError.js";
16
16
  import { hasPostMessageError } from "../utils/errorHandling.js";
17
17
  import { VisualBuilderPostMessageEvents } from "../utils/types/postMessage.types.js";
18
18
  import { getEntryPermissionsCached } from "../utils/getEntryPermissionsCached.js";
19
+ import { ContentTypeIcon } from "./icons/index.js";
20
+ import { ToolbarTooltip } from "./Tooltip.js";
19
21
  import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
20
22
  async function getFieldDisplayNames(fieldMetadata) {
21
23
  const result = await visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);
22
24
  return result;
23
25
  }
26
+ async function getContentTypeName(contentTypeUid) {
27
+ try {
28
+ const result = await visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {
29
+ content_type_uid: contentTypeUid
30
+ });
31
+ return result?.contentTypeName;
32
+ } catch (e) {
33
+ console.warn("[getFieldLabelWrapper] Error getting content type name", e);
34
+ return "";
35
+ }
36
+ }
37
+ async function getReferenceParentMap() {
38
+ try {
39
+ const result = await visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};
40
+ return result;
41
+ } catch (e) {
42
+ console.warn("[getFieldLabelWrapper] Error getting reference parent map", e);
43
+ return {};
44
+ }
45
+ }
24
46
  function FieldLabelWrapperComponent(props) {
25
47
  const { eventDetails } = props;
26
48
  const [currentField, setCurrentField] = useState({
27
49
  text: "",
50
+ contentTypeName: "",
28
51
  icon: /* @__PURE__ */ jsx(CaretIcon, {}),
29
52
  prefixIcon: null,
30
53
  disabled: false,
31
- isVariant: false
54
+ isVariant: false,
55
+ isReference: false,
56
+ referenceFieldName: "",
57
+ parentContentTypeName: ""
32
58
  });
33
59
  const [displayNames, setDisplayNames] = useState(
34
60
  {}
35
61
  );
36
- const [displayNamesLoading, setDisplayNamesLoading] = useState(true);
62
+ const [dataLoading, setDataLoading] = useState(true);
37
63
  const [error, setError] = useState(false);
38
64
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
39
65
  function calculateTopOffset(index) {
@@ -43,7 +69,7 @@ function FieldLabelWrapperComponent(props) {
43
69
  }
44
70
  useEffect(() => {
45
71
  const fetchData = async () => {
46
- setDisplayNamesLoading(true);
72
+ setDataLoading(true);
47
73
  const allPaths = uniqBy(
48
74
  [
49
75
  props.fieldMetadata,
@@ -53,13 +79,37 @@ function FieldLabelWrapperComponent(props) {
53
79
  ],
54
80
  "cslpValue"
55
81
  );
56
- const displayNames2 = await getFieldDisplayNames(allPaths);
57
- const fieldSchema = await FieldSchemaMap.getFieldSchema(
58
- props.fieldMetadata.content_type_uid,
59
- props.fieldMetadata.fieldPath
60
- );
82
+ const [displayNames2, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([
83
+ getFieldDisplayNames(allPaths),
84
+ FieldSchemaMap.getFieldSchema(
85
+ props.fieldMetadata.content_type_uid,
86
+ props.fieldMetadata.fieldPath
87
+ ),
88
+ getContentTypeName(
89
+ props.fieldMetadata.content_type_uid
90
+ ),
91
+ getReferenceParentMap()
92
+ ]);
93
+ const entryUid = props.fieldMetadata.entry_uid;
94
+ const referenceData = referenceParentMap[entryUid];
95
+ const isReference = !!referenceData;
96
+ let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : "";
97
+ let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : "";
98
+ if (isReference) {
99
+ const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
100
+ if (domAncestor) {
101
+ const domAncestorCslp = domAncestor.getAttribute("data-cslp");
102
+ const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);
103
+ const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
104
+ const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
105
+ if (domAncestorContentParent) {
106
+ referenceFieldName = domAncestorContentParent.referenceFieldName;
107
+ parentContentTypeName = domAncestorContentParent.contentTypeTitle;
108
+ }
109
+ }
110
+ }
61
111
  if (hasPostMessageError(displayNames2) || !fieldSchema) {
62
- setDisplayNamesLoading(false);
112
+ setDataLoading(false);
63
113
  setError(true);
64
114
  return;
65
115
  }
@@ -78,6 +128,7 @@ function FieldLabelWrapperComponent(props) {
78
128
  const isVariant = props.fieldMetadata.variant ? true : false;
79
129
  setCurrentField({
80
130
  text: currentFieldDisplayName,
131
+ contentTypeName: contentTypeName ?? "",
81
132
  icon: fieldDisabled ? /* @__PURE__ */ jsx(
82
133
  "div",
83
134
  {
@@ -88,18 +139,25 @@ function FieldLabelWrapperComponent(props) {
88
139
  children: /* @__PURE__ */ jsx(InfoIcon, {})
89
140
  }
90
141
  ) : hasParentPaths ? /* @__PURE__ */ jsx(CaretIcon, {}) : /* @__PURE__ */ jsx(Fragment, {}),
142
+ isReference,
91
143
  prefixIcon: getFieldIcon(fieldSchema),
92
144
  disabled: fieldDisabled,
145
+ referenceFieldName,
146
+ parentContentTypeName,
93
147
  isVariant
94
148
  });
95
149
  if (displayNames2) {
96
150
  setDisplayNames(displayNames2);
97
151
  }
98
152
  if (Object.keys(displayNames2 || {})?.length === allPaths.length) {
99
- setDisplayNamesLoading(false);
153
+ setDataLoading(false);
100
154
  }
101
155
  };
102
- fetchData();
156
+ try {
157
+ fetchData();
158
+ } catch (e) {
159
+ console.warn("[getFieldLabelWrapper] Error fetching field label data", e);
160
+ }
103
161
  }, [props]);
104
162
  const onParentPathClick = (cslp) => {
105
163
  const parentElement = props.getParentEditableElement(cslp);
@@ -110,7 +168,7 @@ function FieldLabelWrapperComponent(props) {
110
168
  function getCurrentFieldIcon() {
111
169
  if (error) {
112
170
  return null;
113
- } else if (displayNamesLoading) {
171
+ } else if (dataLoading) {
114
172
  return /* @__PURE__ */ jsx(LoadingIcon, {});
115
173
  } else {
116
174
  return currentField.icon;
@@ -123,7 +181,7 @@ function FieldLabelWrapperComponent(props) {
123
181
  "visual-builder__focused-toolbar__field-label-container",
124
182
  visualBuilderStyles()["visual-builder__focused-toolbar__field-label-container"]
125
183
  ),
126
- children: /* @__PURE__ */ jsxs(
184
+ children: /* @__PURE__ */ jsx(ToolbarTooltip, { data: { contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName }, disabled: !currentField.isReference || isDropdownOpen, children: /* @__PURE__ */ jsxs(
127
185
  "div",
128
186
  {
129
187
  className: classNames(
@@ -142,6 +200,7 @@ function FieldLabelWrapperComponent(props) {
142
200
  ),
143
201
  onClick: () => setIsDropdownOpen((prev) => !prev),
144
202
  "data-testid": "visual-builder__focused-toolbar__field-label-wrapper",
203
+ "data-hovered-cslp": props.fieldMetadata.cslpValue,
145
204
  children: [
146
205
  /* @__PURE__ */ jsxs(
147
206
  "button",
@@ -154,8 +213,47 @@ function FieldLabelWrapperComponent(props) {
154
213
  visualBuilderStyles()["visual-builder__button-loader"],
155
214
  error && visualBuilderStyles()["visual-builder__button-error"]
156
215
  ),
157
- disabled: displayNamesLoading,
216
+ disabled: dataLoading,
158
217
  children: [
218
+ currentField.isReference && !dataLoading && !error ? /* @__PURE__ */ jsxs(
219
+ "div",
220
+ {
221
+ className: classNames(
222
+ "visual-builder__reference-icon-container",
223
+ visualBuilderStyles()["visual-builder__reference-icon-container"]
224
+ ),
225
+ children: [
226
+ /* @__PURE__ */ jsx(
227
+ "div",
228
+ {
229
+ className: classNames(
230
+ "visual-builder__field-icon",
231
+ visualBuilderStyles()["visual-builder__field-icon"]
232
+ ),
233
+ dangerouslySetInnerHTML: {
234
+ __html: FieldTypeIconsMap.reference
235
+ },
236
+ "data-testid": "visual-builder__field-icon-caret"
237
+ }
238
+ ),
239
+ /* @__PURE__ */ jsx(CaretRightIcon, {})
240
+ ]
241
+ }
242
+ ) : null,
243
+ currentField.contentTypeName && !dataLoading && !error ? /* @__PURE__ */ jsxs(Fragment, { children: [
244
+ /* @__PURE__ */ jsx(ContentTypeIcon, {}),
245
+ /* @__PURE__ */ jsx(
246
+ "div",
247
+ {
248
+ className: classNames(
249
+ "visual-builder__focused-toolbar__text",
250
+ visualBuilderStyles()["visual-builder__focused-toolbar__text"]
251
+ ),
252
+ "data-testid": "visual-builder__focused-toolbar__ct-name",
253
+ children: currentField.contentTypeName + " : "
254
+ }
255
+ )
256
+ ] }) : null,
159
257
  currentField.prefixIcon ? /* @__PURE__ */ jsx(
160
258
  "div",
161
259
  {
@@ -204,7 +302,7 @@ function FieldLabelWrapperComponent(props) {
204
302
  ))
205
303
  ]
206
304
  }
207
- )
305
+ ) })
208
306
  }
209
307
  );
210
308
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [displayNamesLoading, setDisplayNamesLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDisplayNamesLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const displayNames = await getFieldDisplayNames(allPaths);\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n );\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDisplayNamesLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDisplayNamesLoading(false);\n }\n };\n\n fetchData();\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (displayNamesLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={displayNamesLoading}\n >\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["displayNames"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, CaretRightIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { FieldTypeIconsMap, getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\n\ninterface ReferenceParentMap {\n [entryUid: string]: {\n contentTypeUid: string;\n contentTypeTitle: string;\n referenceFieldName: string;\n }[]\n}\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\nasync function getContentTypeName(contentTypeUid: string) {\n try {\n const result = await visualBuilderPostMessage?.send<{\n contentTypeName: string;\n }>(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {\n content_type_uid: contentTypeUid,\n });\n return result?.contentTypeName;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting content type name\", e);\n return \"\";\n }\n}\n\nasync function getReferenceParentMap() {\n try {\n const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};\n return result;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting reference parent map\", e);\n return {};\n }\n \n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n contentTypeName: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n isReference: boolean;\n referenceFieldName: string;\n parentContentTypeName: string;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n contentTypeName: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n isReference: false,\n referenceFieldName: \"\",\n parentContentTypeName: \"\",\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [dataLoading, setDataLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDataLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const [displayNames, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([\n getFieldDisplayNames(allPaths),\n FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n ),\n getContentTypeName(\n props.fieldMetadata.content_type_uid\n ),\n getReferenceParentMap()\n ]);\n const entryUid = props.fieldMetadata.entry_uid;\n \n const referenceData = referenceParentMap[entryUid];\n const isReference = !!referenceData;\n\n let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : \"\";\n let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : \"\";\n\n if(isReference) {\n const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^=\"${props.fieldMetadata.content_type_uid}\"])`);\n if(domAncestor) {\n const domAncestorCslp = domAncestor.getAttribute(\"data-cslp\");\n const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp!);\n const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;\n const domAncestorContentParent = referenceData?.find(data => data.contentTypeUid === domAncestorContentTypeUid);\n if(domAncestorContentParent) {\n referenceFieldName = domAncestorContentParent.referenceFieldName;\n parentContentTypeName = domAncestorContentParent.contentTypeTitle;\n }\n }\n }\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n isReference,\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n referenceFieldName,\n parentContentTypeName,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDataLoading(false);\n }\n };\n\n try {\n fetchData();\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error fetching field label data\", e);\n }\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (dataLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <ToolbarTooltip data={{contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName}} disabled={!currentField.isReference || isDropdownOpen}>\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n data-hovered-cslp={props.fieldMetadata.cslpValue}\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={dataLoading}\n >\n {\n currentField.isReference && !dataLoading && !error ? \n <div \n className={classNames(\n \"visual-builder__reference-icon-container\",\n visualBuilderStyles()[\"visual-builder__reference-icon-container\"]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: FieldTypeIconsMap.reference,\n }}\n data-testid=\"visual-builder__field-icon-caret\"\n />\n <CaretRightIcon />\n </div> : null\n }\n {\n currentField.contentTypeName && !dataLoading && !error ?\n <>\n <ContentTypeIcon />\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__ct-name\"\n >\n {currentField.contentTypeName + \" : \"}\n </div>\n </> : null\n }\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </ToolbarTooltip>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":";;;AAAA,OAAO,gBAAgB;AACvB,SAAgB,WAAW,gBAAgB;AAC3C,SAAS,8BAA8B;AAGvC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,OAAO,8BAA8B;AACrC,SAAS,WAAW,gBAAgB,gBAAgB;AACpD,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB,oBAAoB;AAChD,SAAS,cAAc;AACvB,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAC1B,SAAS,2BAA2B;AACpC,SAAS,sCAAsC;AAC/C,SAAS,iCAAiC;AAC1C,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAoEjB,SA4GM,UA5GN,KA8Mc,YA9Md;AA1Dd,eAAe,qBAAqB,eAA2B;AAC3D,QAAM,SAAS,MAAM,0BAA0B,KAE5C,+BAA+B,yBAAyB,aAAa;AACxE,SAAO;AACX;AAEA,eAAe,mBAAmB,gBAAwB;AACtD,MAAI;AACA,UAAM,SAAS,MAAM,0BAA0B,KAE5C,+BAA+B,uBAAuB;AAAA,MACrD,kBAAkB;AAAA,IACtB,CAAC;AACD,WAAO,QAAQ;AAAA,EACnB,SAAQ,GAAG;AACP,YAAQ,KAAK,0DAA0D,CAAC;AACxE,WAAO;AAAA,EACX;AACJ;AAEA,eAAe,wBAAwB;AACnC,MAAI;AACA,UAAM,SAAS,MAAM,0BAA0B,KAAyB,+BAA+B,eAAe,CAAC,CAAC,KAAK,CAAC;AAC9H,WAAO;AAAA,EACX,SAAQ,GAAG;AACP,YAAQ,KAAK,6DAA6D,CAAC;AAC3E,WAAO,CAAC;AAAA,EACZ;AAEJ;AAqBA,SAAS,2BACL,OACW;AACX,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB;AAAA,IAC5D,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,MAAM,oBAAC,aAAU;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,EAC3B,CAAC;AACD,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACpC,CAAC;AAAA,EACL;AACA,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAE1D,WAAS,mBAAmB,OAAe;AACvC,UAAM,SAAS;AACf,UAAM,UAAU,QAAQ,KAAK;AAC7B,WAAO,GAAG,MAAM;AAAA,EACpB;AAEA,YAAU,MAAM;AACZ,UAAM,YAAY,YAAY;AAC1B,qBAAe,IAAI;AACnB,YAAM,WAAW;AAAA,QACb;AAAA,UACI,MAAM;AAAA,UACN,GAAG,MAAM,YAAY,IAAI,CAAC,SAAS;AAC/B,mBAAO,uBAAuB,IAAI;AAAA,UACtC,CAAC;AAAA,QACL;AAAA,QACA;AAAA,MACJ;AACA,YAAM,CAACA,eAAc,aAAa,iBAAiB,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,QACvF,qBAAqB,QAAQ;AAAA,QAC7B,eAAe;AAAA,UACX,MAAM,cAAc;AAAA,UACpB,MAAM,cAAc;AAAA,QACxB;AAAA,QACA;AAAA,UACI,MAAM,cAAc;AAAA,QACxB;AAAA,QACA,sBAAsB;AAAA,MAC1B,CAAC;AACD,YAAM,WAAW,MAAM,cAAc;AAErC,YAAM,gBAAgB,mBAAmB,QAAQ;AACjD,YAAM,cAAc,CAAC,CAAC;AAEtB,UAAI,qBAAqB,gBAAgB,cAAc,CAAC,EAAE,qBAAqB;AAC/E,UAAI,wBAAwB,gBAAgB,cAAc,CAAC,EAAE,mBAAmB;AAEhF,UAAG,aAAa;AACZ,cAAM,cAAc,aAAa,gBAAgB,QAAQ,gCAAgC,MAAM,cAAc,gBAAgB,KAAK;AAClI,YAAG,aAAa;AACZ,gBAAM,kBAAkB,YAAY,aAAa,WAAW;AAC5D,gBAAM,qBAAqB,uBAAuB,eAAgB;AAClE,gBAAM,4BAA4B,mBAAmB;AACrD,gBAAM,2BAA2B,eAAe,KAAK,UAAQ,KAAK,mBAAmB,yBAAyB;AAC9G,cAAG,0BAA0B;AACzB,iCAAqB,yBAAyB;AAC9C,oCAAwB,yBAAyB;AAAA,UACrD;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,oBAAoBA,aAAY,KAAK,CAAC,aAAa;AACnD,uBAAe,KAAK;AACpB,iBAAS,IAAI;AAEb;AAAA,MACJ;AAEA,YAAM,mBAAmB,MAAM,0BAA0B;AAAA,QACrD,UAAU,MAAM,cAAc;AAAA,QAC9B,gBAAgB,MAAM,cAAc;AAAA,QACpC,QAAQ,MAAM,cAAc;AAAA,MAChC,CAAC;AACD,YAAM,EAAE,YAAY,eAAe,OAAO,IAAI;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAEA,YAAM,0BACFA,gBAAe,MAAM,cAAc,SAAS,KAC5C,YAAY;AAEhB,YAAM,iBAAiB,CAAC,CAAC,OAAO,aAAa;AAC7C,YAAM,YAAY,MAAM,cAAc,UAAU,OAAO;AAEvD,sBAAgB;AAAA,QACZ,MAAM;AAAA,QACN,iBAAiB,mBAAmB;AAAA,QACpC,MAAM,gBACF;AAAA,UAAC;AAAA;AAAA,YACG,WAAW;AAAA,cACP,oBAAoB,EAChB,qCACJ;AAAA,YACJ;AAAA,YACA,gBAAc;AAAA,YAEd,8BAAC,YAAS;AAAA;AAAA,QACd,IACA,iBACA,oBAAC,aAAU,IAEX,gCAAE;AAAA,QAEN;AAAA,QACA,YAAY,aAAa,WAAW;AAAA,QACpC,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,UAAIA,eAAc;AACd,wBAAgBA,aAAY;AAAA,MAChC;AACA,UAAI,OAAO,KAAKA,iBAAgB,CAAC,CAAC,GAAG,WAAW,SAAS,QAAQ;AAC7D,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI;AACA,gBAAU;AAAA,IACd,SAAQ,GAAG;AACP,cAAQ,KAAK,0DAA0D,CAAC;AAAA,IAC5E;AAAA,EACJ,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,oBAAoB,CAAC,SAAiB;AACxC,UAAM,gBAAgB,MAAM,yBAAyB,IAAI;AACzD,QAAI,eAAe;AAEf,oBAAc,MAAM;AAAA,IACxB;AAAA,EACJ;AAEA,WAAS,sBAAsB;AAC3B,QAAI,OAAO;AACP,aAAO;AAAA,IACX,WAAW,aAAa;AACpB,aAAO,oBAAC,eAAY;AAAA,IACxB,OAAO;AACH,aAAO,aAAa;AAAA,IACxB;AAAA,EACJ;AAEA,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAW;AAAA,QACP;AAAA,QACA,oBAAoB,EAChB,wDACJ;AAAA,MACJ;AAAA,MAEA,8BAAC,kBAAe,MAAM,EAAC,iBAAiB,aAAa,uBAAuB,oBAAoB,aAAa,mBAAkB,GAAG,UAAU,CAAC,aAAa,eAAe,gBACrK;AAAA,QAAC;AAAA;AAAA,UACG,WAAW;AAAA,YACP;AAAA,YACA,oBAAoB,EAChB,sDACJ;AAAA,YACA;AAAA,cACI,mDACI,aAAa;AAAA,YACrB;AAAA,YACA;AAAA,cACI,CAAC,oBAAoB,EACjB,iDACJ,CAAC,GAAG,aAAa;AAAA,YACrB;AAAA,YACA;AAAA,cACI,6BAA6B;AAAA,cAC7B,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,GAC/C;AAAA,YACR;AAAA,UACJ;AAAA,UACA,SAAS,MAAM,kBAAkB,CAAC,SAAS,CAAC,IAAI;AAAA,UAChD,eAAY;AAAA,UACZ,qBAAmB,MAAM,cAAc;AAAA,UAEvC;AAAA;AAAA,cAAC;AAAA;AAAA,gBACG,WAAW;AAAA,kBACP;AAAA,kBACA,oBAAoB,EAChB,qEACJ;AAAA,kBACA,oBAAoB,EAAE,wBAAwB;AAAA,kBAC9C,oBAAoB,EAChB,iCACJ;AAAA,kBACA,oBAAoB,EAAE,+BAA+B;AAAA,kBACrD,SACI,oBAAoB,EAChB,8BACJ;AAAA,gBACR;AAAA,gBACA,UAAU;AAAA,gBAGN;AAAA,+BAAa,eAAe,CAAC,eAAe,CAAC,QAC7C;AAAA,oBAAC;AAAA;AAAA,sBACD,WAAW;AAAA,wBACP;AAAA,wBACA,oBAAoB,EAAE,0CAA0C;AAAA,sBACpE;AAAA,sBAEI;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACG,WAAW;AAAA,8BACP;AAAA,8BACA,oBAAoB,EAChB,4BACJ;AAAA,4BACJ;AAAA,4BACA,yBAAyB;AAAA,8BACrB,QAAQ,kBAAkB;AAAA,4BAC9B;AAAA,4BACA,eAAY;AAAA;AAAA,wBAChB;AAAA,wBACA,oBAAC,kBAAe;AAAA;AAAA;AAAA,kBACpB,IAAS;AAAA,kBAGT,aAAa,mBAAmB,CAAC,eAAe,CAAC,QACjD,iCACI;AAAA,wCAAC,mBAAgB;AAAA,oBACjB;AAAA,sBAAC;AAAA;AAAA,wBACG,WAAW;AAAA,0BACP;AAAA,0BACA,oBAAoB,EAChB,uCACJ;AAAA,wBACJ;AAAA,wBACA,eAAY;AAAA,wBAEX,uBAAa,kBAAkB;AAAA;AAAA,oBACpC;AAAA,qBACJ,IAAM;AAAA,kBAET,aAAa,aACV;AAAA,oBAAC;AAAA;AAAA,sBACG,WAAW;AAAA,wBACP;AAAA,wBACA,oBAAoB,EAChB,4BACJ;AAAA,sBACJ;AAAA,sBACA,yBAAyB;AAAA,wBACrB,QAAQ,aAAa;AAAA,sBACzB;AAAA,sBACA,eAAY;AAAA;AAAA,kBAChB,IACA;AAAA,kBACH,aAAa,OACV;AAAA,oBAAC;AAAA;AAAA,sBACG,WAAW;AAAA,wBACP;AAAA,wBACA,oBAAoB,EAChB,uCACJ;AAAA,sBACJ;AAAA,sBACA,eAAY;AAAA,sBAEX,uBAAa;AAAA;AAAA,kBAClB,IACA;AAAA,kBACH,oBAAoB;AAAA,kBACpB,QAAQ,oBAAC,aAAU,IAAK;AAAA;AAAA;AAAA,YAC7B;AAAA,YACC,MAAM,YAAY,IAAI,CAAC,MAAM,UAC1B;AAAA,cAAC;AAAA;AAAA,gBAEG,WAAW;AAAA,kBACP;AAAA,kBACA,oBAAoB,EAChB,oEACJ;AAAA,kBACA,oBAAoB,EAAE,wBAAwB;AAAA,kBAC9C,oBAAoB,EAChB,mCACJ;AAAA,kBACA,oBAAoB,EAChB,uCACJ;AAAA,gBACJ;AAAA,gBACA,oBAAkB;AAAA,gBAClB,OAAO,EAAE,KAAK,mBAAmB,KAAK,EAAE;AAAA,gBACxC,SAAS,MAAM,kBAAkB,IAAI;AAAA,gBAEpC,uBAAa,IAAI;AAAA;AAAA,cAlBb;AAAA,YAmBT,CACH;AAAA;AAAA;AAAA,MACL,GACJ;AAAA;AAAA,EACJ;AAER;AAEA,IAAO,4BAAQ;","names":["displayNames"]}