@contentstack/live-preview-utils 4.2.1 → 4.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 (238) hide show
  1. package/README.md +96 -30
  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 +3 -1
  23. package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
  24. package/dist/legacy/livePreview/editButton/editButton.js +4 -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 +112 -28
  41. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  42. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +114 -30
  43. package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  44. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +3 -2
  45. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  46. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +3 -2
  47. package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  48. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
  49. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
  50. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
  51. package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
  52. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +1 -1
  53. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
  54. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js +2 -2
  55. package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
  56. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
  57. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
  58. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js +2 -2
  59. package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
  60. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
  61. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
  62. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js +2 -1
  63. package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
  64. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -1
  65. package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  66. package/dist/legacy/visualBuilder/generators/generateOverlay.js +2 -2
  67. package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
  68. package/dist/legacy/visualBuilder/generators/generateThread.d.cts +1 -1
  69. package/dist/legacy/visualBuilder/generators/generateThread.d.ts +1 -1
  70. package/dist/legacy/visualBuilder/index.cjs +1 -1
  71. package/dist/legacy/visualBuilder/index.cjs.map +1 -1
  72. package/dist/legacy/visualBuilder/index.js +2 -2
  73. package/dist/legacy/visualBuilder/index.js.map +1 -1
  74. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +14 -10
  75. package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
  76. package/dist/legacy/visualBuilder/listeners/mouseClick.js +14 -10
  77. package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
  78. package/dist/legacy/visualBuilder/utils/collabUtils.d.cts +1 -1
  79. package/dist/legacy/visualBuilder/utils/collabUtils.d.ts +1 -1
  80. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs +3 -3
  81. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
  82. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js +4 -4
  83. package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
  84. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs +1 -1
  85. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs.map +1 -1
  86. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js +2 -2
  87. package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js.map +1 -1
  88. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +2 -2
  89. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
  90. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +3 -3
  91. package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
  92. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.cjs +4 -0
  93. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.cjs.map +1 -1
  94. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.d.cts +8 -1
  95. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.d.ts +8 -1
  96. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.js +4 -0
  97. package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.js.map +1 -1
  98. package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs +41 -6
  99. package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
  100. package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.cts +9 -1
  101. package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.ts +9 -1
  102. package/dist/legacy/visualBuilder/utils/isFieldDisabled.js +41 -6
  103. package/dist/legacy/visualBuilder/utils/isFieldDisabled.js.map +1 -1
  104. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  105. package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  106. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
  107. package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
  108. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +1 -0
  109. package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  110. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs +1 -1
  111. package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  112. package/dist/legacy/visualBuilder/utils/updateFocussedState.js +2 -2
  113. package/dist/legacy/visualBuilder/utils/updateFocussedState.js.map +1 -1
  114. package/dist/legacy/visualBuilder/visualBuilder.style.cjs +30 -0
  115. package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
  116. package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +5 -0
  117. package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +5 -0
  118. package/dist/legacy/visualBuilder/visualBuilder.style.js +30 -0
  119. package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
  120. package/dist/modern/configManager/config.default.cjs +4 -2
  121. package/dist/modern/configManager/config.default.cjs.map +1 -1
  122. package/dist/modern/configManager/config.default.d.cts +1 -1
  123. package/dist/modern/configManager/config.default.d.ts +1 -1
  124. package/dist/modern/configManager/config.default.js +4 -2
  125. package/dist/modern/configManager/config.default.js.map +1 -1
  126. package/dist/modern/configManager/handleUserConfig.cjs +4 -0
  127. package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
  128. package/dist/modern/configManager/handleUserConfig.js +4 -0
  129. package/dist/modern/configManager/handleUserConfig.js.map +1 -1
  130. package/dist/modern/cslp/cslpdata.cjs +28 -3
  131. package/dist/modern/cslp/cslpdata.cjs.map +1 -1
  132. package/dist/modern/cslp/cslpdata.d.cts +27 -1
  133. package/dist/modern/cslp/cslpdata.d.ts +27 -1
  134. package/dist/modern/cslp/cslpdata.js +26 -2
  135. package/dist/modern/cslp/cslpdata.js.map +1 -1
  136. package/dist/modern/cslp/index.d.cts +1 -1
  137. package/dist/modern/cslp/index.d.ts +1 -1
  138. package/dist/modern/light-sdk.cjs +1 -1
  139. package/dist/modern/light-sdk.js +1 -1
  140. package/dist/modern/livePreview/editButton/editButton.cjs +3 -1
  141. package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
  142. package/dist/modern/livePreview/editButton/editButton.js +4 -2
  143. package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
  144. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +11 -6
  145. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
  146. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +11 -6
  147. package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
  148. package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
  149. package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
  150. package/dist/modern/timeline/compare/compare.cjs +3 -1
  151. package/dist/modern/timeline/compare/compare.cjs.map +1 -1
  152. package/dist/modern/timeline/compare/compare.js +3 -1
  153. package/dist/modern/timeline/compare/compare.js.map +1 -1
  154. package/dist/modern/types/types.cjs.map +1 -1
  155. package/dist/modern/types/types.d.cts +2 -0
  156. package/dist/modern/types/types.d.ts +2 -0
  157. package/dist/modern/types/types.js.map +1 -1
  158. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +111 -28
  159. package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
  160. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +113 -30
  161. package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
  162. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +3 -2
  163. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
  164. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +3 -2
  165. package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
  166. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
  167. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
  168. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
  169. package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
  170. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +1 -1
  171. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
  172. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js +2 -2
  173. package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
  174. package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
  175. package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
  176. package/dist/modern/visualBuilder/generators/generateEmptyBlock.js +2 -2
  177. package/dist/modern/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
  178. package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
  179. package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
  180. package/dist/modern/visualBuilder/generators/generateHighlightedComment.js +2 -1
  181. package/dist/modern/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
  182. package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -1
  183. package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
  184. package/dist/modern/visualBuilder/generators/generateOverlay.js +2 -2
  185. package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
  186. package/dist/modern/visualBuilder/generators/generateThread.d.cts +1 -1
  187. package/dist/modern/visualBuilder/generators/generateThread.d.ts +1 -1
  188. package/dist/modern/visualBuilder/index.cjs +1 -1
  189. package/dist/modern/visualBuilder/index.cjs.map +1 -1
  190. package/dist/modern/visualBuilder/index.js +2 -2
  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/getWorkflowStageDetails.cjs +4 -0
  211. package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.cjs.map +1 -1
  212. package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.d.cts +8 -1
  213. package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.d.ts +8 -1
  214. package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.js +4 -0
  215. package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.js.map +1 -1
  216. package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs +40 -6
  217. package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
  218. package/dist/modern/visualBuilder/utils/isFieldDisabled.d.cts +9 -1
  219. package/dist/modern/visualBuilder/utils/isFieldDisabled.d.ts +9 -1
  220. package/dist/modern/visualBuilder/utils/isFieldDisabled.js +40 -6
  221. package/dist/modern/visualBuilder/utils/isFieldDisabled.js.map +1 -1
  222. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +1 -0
  223. package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
  224. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
  225. package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
  226. package/dist/modern/visualBuilder/utils/types/postMessage.types.js +1 -0
  227. package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
  228. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs +1 -1
  229. package/dist/modern/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
  230. package/dist/modern/visualBuilder/utils/updateFocussedState.js +2 -2
  231. package/dist/modern/visualBuilder/utils/updateFocussedState.js.map +1 -1
  232. package/dist/modern/visualBuilder/visualBuilder.style.cjs +30 -0
  233. package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
  234. package/dist/modern/visualBuilder/visualBuilder.style.d.cts +5 -0
  235. package/dist/modern/visualBuilder/visualBuilder.style.d.ts +5 -0
  236. package/dist/modern/visualBuilder/visualBuilder.style.js +30 -0
  237. package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
  238. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
1
+ {"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n enableLivePreviewOutsideIframe: boolean | undefined;\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n enableLivePreviewOutsideIframe: boolean | undefined; // default: undefined\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
@@ -78,6 +78,85 @@ async function getReferenceParentMap() {
78
78
  return {};
79
79
  }
80
80
  }
81
+ var TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX = 148;
82
+ function FieldLabelDisabledIcon(props) {
83
+ const {
84
+ reason,
85
+ workflowRequestUi,
86
+ usePlainDataTooltip,
87
+ onLinkVariant,
88
+ onRequestEditAccess
89
+ } = props;
90
+ const wrapRef = (0, import_compat.useRef)(null);
91
+ const [showTooltipBelow, setShowTooltipBelow] = (0, import_compat.useState)(false);
92
+ const updateTooltipPlacement = () => {
93
+ const el = wrapRef.current;
94
+ if (!el) return;
95
+ const { top } = el.getBoundingClientRect();
96
+ setShowTooltipBelow(top < TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX);
97
+ };
98
+ const customTooltipClass = (0, import_classnames.default)(
99
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip"],
100
+ showTooltipBelow && (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip--below"]
101
+ );
102
+ const workflowAccessTooltipClass = (0, import_classnames.default)(
103
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip"],
104
+ showTooltipBelow && (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip--below"],
105
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip--workflow-access"]
106
+ );
107
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
108
+ "div",
109
+ {
110
+ ref: wrapRef,
111
+ onMouseEnter: updateTooltipPlacement,
112
+ className: (0, import_classnames.default)(
113
+ (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__tooltip--persistent"],
114
+ showTooltipBelow && (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__tooltip--persistent--below"]
115
+ ),
116
+ "data-tooltip": usePlainDataTooltip ? reason : void 0,
117
+ children: [
118
+ reason?.includes(import_isFieldDisabled.DisableReason.CanLinkVariant) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: customTooltipClass, onClick: onLinkVariant, children: (() => {
119
+ const [before, after] = reason.split(
120
+ import_isFieldDisabled.DisableReason.UnderlinedAndClickableWord
121
+ );
122
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
123
+ before,
124
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { textDecoration: "underline" }, children: import_isFieldDisabled.DisableReason.UnderlinedAndClickableWord }),
125
+ after
126
+ ] });
127
+ })() }) : null,
128
+ workflowRequestUi === "request" && reason ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: workflowAccessTooltipClass, children: [
129
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: reason }),
130
+ " ",
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
132
+ "span",
133
+ {
134
+ role: "button",
135
+ tabIndex: 0,
136
+ style: {
137
+ textDecoration: "underline",
138
+ cursor: "pointer"
139
+ },
140
+ onClick: (e) => {
141
+ e.stopPropagation();
142
+ onRequestEditAccess();
143
+ },
144
+ onKeyDown: (e) => {
145
+ if (e.key === "Enter" || e.key === " ") {
146
+ e.preventDefault();
147
+ onRequestEditAccess();
148
+ }
149
+ },
150
+ children: "Request Edit Access"
151
+ }
152
+ )
153
+ ] }) : null,
154
+ workflowRequestUi === "pending" && reason ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: workflowAccessTooltipClass, children: reason }) : null,
155
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.InfoIcon, {})
156
+ ]
157
+ }
158
+ );
159
+ }
81
160
  function FieldLabelWrapperComponent(props) {
82
161
  const { eventDetails } = props;
83
162
  const [currentField, setCurrentField] = (0, import_compat.useState)({
@@ -134,7 +213,7 @@ function FieldLabelWrapperComponent(props) {
134
213
  const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
135
214
  if (domAncestor) {
136
215
  const domAncestorCslp = domAncestor.getAttribute("data-cslp");
137
- if (domAncestorCslp) {
216
+ if ((0, import_cslp.isValidCslp)(domAncestorCslp)) {
138
217
  const domAncestorDetails = (0, import_cslp.extractDetailsFromCslp)(domAncestorCslp);
139
218
  const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
140
219
  const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
@@ -157,13 +236,35 @@ function FieldLabelWrapperComponent(props) {
157
236
  variantUid: props.fieldMetadata.variant,
158
237
  fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex
159
238
  });
160
- const { isDisabled: fieldDisabled, reason } = (0, import_isFieldDisabled.isFieldDisabled)(
239
+ const {
240
+ isDisabled: fieldDisabled,
241
+ reason,
242
+ workflowRequestUi
243
+ } = (0, import_isFieldDisabled.isFieldDisabled)(
161
244
  fieldSchema,
162
245
  eventDetails,
163
246
  resolvedVariantPermissions,
164
247
  entryAcl,
165
248
  entryWorkflowStageDetails
166
249
  );
250
+ const handleRequestEditAccess = async () => {
251
+ try {
252
+ await import_visualBuilderPostMessage.default?.send(
253
+ import_postMessage.VisualBuilderPostMessageEvents.OPEN_REQUEST_EDIT_ACCESS,
254
+ {
255
+ entryUid: props.fieldMetadata.entry_uid,
256
+ contentTypeUid: props.fieldMetadata.content_type_uid,
257
+ locale: props.fieldMetadata.locale,
258
+ variantUid: props.fieldMetadata.variant
259
+ }
260
+ );
261
+ } catch (error2) {
262
+ console.error(
263
+ "Error opening request edit access flow:",
264
+ error2
265
+ );
266
+ }
267
+ };
167
268
  const handleLinkVariant = async () => {
168
269
  try {
169
270
  if (fieldSchema.field_metadata?.canLinkVariant) {
@@ -190,36 +291,18 @@ function FieldLabelWrapperComponent(props) {
190
291
  const currentFieldDisplayName = displayNames2?.[props.fieldMetadata.cslpValue] ?? fieldSchema.display_name;
191
292
  const hasParentPaths = !!props?.parentPaths?.length;
192
293
  const isVariant = props.fieldMetadata.variant ? true : false;
294
+ const usePlainDataTooltip = reason && !reason.includes(import_isFieldDisabled.DisableReason.CanLinkVariant) && workflowRequestUi == null;
193
295
  setCurrentField({
194
296
  text: currentFieldDisplayName,
195
297
  contentTypeName: contentTypeName ?? "",
196
- icon: fieldDisabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
197
- "div",
298
+ icon: fieldDisabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
299
+ FieldLabelDisabledIcon,
198
300
  {
199
- className: (0, import_classnames.default)(
200
- (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__tooltip--persistent"]
201
- ),
202
- "data-tooltip": !reason?.includes(import_isFieldDisabled.DisableReason.CanLinkVariant) ? reason : void 0,
203
- children: [
204
- reason.includes(import_isFieldDisabled.DisableReason.CanLinkVariant) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
205
- "div",
206
- {
207
- className: (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__custom-tooltip"],
208
- onClick: handleLinkVariant,
209
- children: (() => {
210
- const [before, after] = reason.split(
211
- import_isFieldDisabled.DisableReason.UnderlinedAndClickableWord
212
- );
213
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
214
- before,
215
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { textDecoration: "underline" }, children: import_isFieldDisabled.DisableReason.UnderlinedAndClickableWord }),
216
- after
217
- ] });
218
- })()
219
- }
220
- ),
221
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.InfoIcon, {})
222
- ]
301
+ reason,
302
+ ...workflowRequestUi != null ? { workflowRequestUi } : {},
303
+ usePlainDataTooltip: Boolean(usePlainDataTooltip),
304
+ onLinkVariant: handleLinkVariant,
305
+ onRequestEditAccess: handleRequestEditAccess
223
306
  }
224
307
  ) : hasParentPaths ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}),
225
308
  isReference,
@@ -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 { DisableReason, 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 { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\nimport { VariantIndicator } from \"./VariantIndicator\";\nimport { handleRevalidateFieldData } from \"../eventManager/useRevalidateFieldDataPostMessageEvent\";\nimport { RESULT_TYPES } from \"../utils/constants\";\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\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\n .filter((path) => path)\n .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 if (domAncestorCslp) {\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\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n variantUid: props.fieldMetadata.variant,\n fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails,\n );\n\n const handleLinkVariant = async () => {\n try {\n if (fieldSchema.field_metadata?.canLinkVariant) {\n const result = await visualBuilderPostMessage?.send<{\n type: typeof RESULT_TYPES.SUCCESS | typeof RESULT_TYPES.ERROR;\n message: string;\n }>(\n VisualBuilderPostMessageEvents.OPEN_LINK_VARIANT_MODAL,\n {\n contentTypeUid:\n props.fieldMetadata.content_type_uid,\n }\n );\n\n // If the modal was closed or linking failed, do nothing\n if (!result || result.type === RESULT_TYPES.ERROR) {\n return;\n }\n\n // If linking was successful and requires revalidation, revalidate\n if (result.type === RESULT_TYPES.SUCCESS) {\n await handleRevalidateFieldData();\n }\n }\n } catch (error) {\n console.error(\n \"Error in link variant modal flow:\",\n error\n );\n }\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?.includes(DisableReason.CanLinkVariant)\n ? reason\n : undefined}\n >\n {reason\n .includes(DisableReason.CanLinkVariant) && (\n <div\n className={visualBuilderStyles()[\"visual-builder__custom-tooltip\"]}\n onClick={handleLinkVariant}\n >\n {(() => {\n const [before, after] = reason.split(\n DisableReason.UnderlinedAndClickableWord\n );\n return (\n <>\n {before}\n <span style={{ textDecoration: \"underline\" }}>{DisableReason.UnderlinedAndClickableWord}</span>\n {after}\n </>\n );\n })()}\n </div>\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 {currentField.isVariant ? <VariantIndicator /> : null}\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 \"visual-builder__focused-toolbar--variant\":\n currentField.isVariant,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--variant\"\n ]]: currentField.isVariant,\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","error","classNames"]}
1
+ {"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useRef, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { DisableReason, 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 { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\nimport { VariantIndicator } from \"./VariantIndicator\";\nimport { handleRevalidateFieldData } from \"../eventManager/useRevalidateFieldDataPostMessageEvent\";\nimport { RESULT_TYPES } from \"../utils/constants\";\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\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\n/** Space needed above the icon for the default (above) tooltip before flipping below. */\nconst TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX = 148;\n\ninterface FieldLabelDisabledIconProps {\n reason: string;\n workflowRequestUi?: \"request\" | \"pending\";\n usePlainDataTooltip: boolean;\n onLinkVariant: () => void;\n onRequestEditAccess: () => void | Promise<void>;\n}\n\nfunction FieldLabelDisabledIcon(\n props: FieldLabelDisabledIconProps\n): JSX.Element {\n const {\n reason,\n workflowRequestUi,\n usePlainDataTooltip,\n onLinkVariant,\n onRequestEditAccess,\n } = props;\n const wrapRef = useRef<HTMLDivElement>(null);\n const [showTooltipBelow, setShowTooltipBelow] = useState(false);\n\n const updateTooltipPlacement = () => {\n const el = wrapRef.current;\n if (!el) return;\n const { top } = el.getBoundingClientRect();\n setShowTooltipBelow(top < TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX);\n };\n\n const customTooltipClass = classNames(\n visualBuilderStyles()[\"visual-builder__custom-tooltip\"],\n showTooltipBelow &&\n visualBuilderStyles()[\"visual-builder__custom-tooltip--below\"]\n );\n\n const workflowAccessTooltipClass = classNames(\n visualBuilderStyles()[\"visual-builder__custom-tooltip\"],\n showTooltipBelow &&\n visualBuilderStyles()[\"visual-builder__custom-tooltip--below\"],\n visualBuilderStyles()[\n \"visual-builder__custom-tooltip--workflow-access\"\n ]\n );\n\n return (\n <div\n ref={wrapRef}\n onMouseEnter={updateTooltipPlacement}\n className={classNames(\n visualBuilderStyles()[\"visual-builder__tooltip--persistent\"],\n showTooltipBelow &&\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent--below\"\n ]\n )}\n data-tooltip={usePlainDataTooltip ? reason : undefined}\n >\n {reason?.includes(DisableReason.CanLinkVariant) ? (\n <div className={customTooltipClass} onClick={onLinkVariant}>\n {(() => {\n const [before, after] = reason.split(\n DisableReason.UnderlinedAndClickableWord\n );\n return (\n <>\n {before}\n <span style={{ textDecoration: \"underline\" }}>\n {DisableReason.UnderlinedAndClickableWord}\n </span>\n {after}\n </>\n );\n })()}\n </div>\n ) : null}\n {workflowRequestUi === \"request\" && reason ? (\n <div className={workflowAccessTooltipClass}>\n <span>{reason}</span>{\" \"}\n <span\n role=\"button\"\n tabIndex={0}\n style={{\n textDecoration: \"underline\",\n cursor: \"pointer\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n onRequestEditAccess();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRequestEditAccess();\n }\n }}\n >\n Request Edit Access\n </span>\n </div>\n ) : null}\n {workflowRequestUi === \"pending\" && reason ? (\n <div className={workflowAccessTooltipClass}>{reason}</div>\n ) : null}\n <InfoIcon />\n </div>\n );\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\n .filter((path) => path)\n .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 if (isValidCslp(domAncestorCslp)) {\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\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n variantUid: props.fieldMetadata.variant,\n fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex,\n });\n const {\n isDisabled: fieldDisabled,\n reason,\n workflowRequestUi,\n } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails,\n );\n const handleRequestEditAccess = async () => {\n try {\n await visualBuilderPostMessage?.send(\n VisualBuilderPostMessageEvents.OPEN_REQUEST_EDIT_ACCESS,\n {\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid:\n props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n variantUid: props.fieldMetadata.variant,\n }\n );\n } catch (error) {\n console.error(\n \"Error opening request edit access flow:\",\n error\n );\n }\n };\n\n const handleLinkVariant = async () => {\n try {\n if (fieldSchema.field_metadata?.canLinkVariant) {\n const result = await visualBuilderPostMessage?.send<{\n type: typeof RESULT_TYPES.SUCCESS | typeof RESULT_TYPES.ERROR;\n message: string;\n }>(\n VisualBuilderPostMessageEvents.OPEN_LINK_VARIANT_MODAL,\n {\n contentTypeUid:\n props.fieldMetadata.content_type_uid,\n }\n );\n\n // If the modal was closed or linking failed, do nothing\n if (!result || result.type === RESULT_TYPES.ERROR) {\n return;\n }\n\n // If linking was successful and requires revalidation, revalidate\n if (result.type === RESULT_TYPES.SUCCESS) {\n await handleRevalidateFieldData();\n }\n }\n } catch (error) {\n console.error(\n \"Error in link variant modal flow:\",\n error\n );\n }\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 const usePlainDataTooltip =\n reason &&\n !reason.includes(DisableReason.CanLinkVariant) &&\n workflowRequestUi == null;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <FieldLabelDisabledIcon\n reason={reason}\n {...(workflowRequestUi != null\n ? { workflowRequestUi }\n : {})}\n usePlainDataTooltip={Boolean(usePlainDataTooltip)}\n onLinkVariant={handleLinkVariant}\n onRequestEditAccess={handleRequestEditAccess}\n />\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 {currentField.isVariant ? <VariantIndicator /> : null}\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 \"visual-builder__focused-toolbar--variant\":\n currentField.isVariant,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--variant\"\n ]]: currentField.isVariant,\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","classNames","displayNames","error"]}
@@ -2,8 +2,8 @@ import "../../chunk-5WRI5ZAA.js";
2
2
 
3
3
  // src/visualBuilder/components/fieldLabelWrapper.tsx
4
4
  import classNames from "classnames";
5
- import { useEffect, useState } from "preact/compat";
6
- import { extractDetailsFromCslp } from "../../cslp/index.js";
5
+ import { useEffect, useRef, useState } from "preact/compat";
6
+ import { extractDetailsFromCslp, isValidCslp } from "../../cslp/index.js";
7
7
  import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
8
8
  import { DisableReason, isFieldDisabled } from "../utils/isFieldDisabled.js";
9
9
  import visualBuilderPostMessage from "../utils/visualBuilderPostMessage.js";
@@ -46,6 +46,85 @@ async function getReferenceParentMap() {
46
46
  return {};
47
47
  }
48
48
  }
49
+ var TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX = 148;
50
+ function FieldLabelDisabledIcon(props) {
51
+ const {
52
+ reason,
53
+ workflowRequestUi,
54
+ usePlainDataTooltip,
55
+ onLinkVariant,
56
+ onRequestEditAccess
57
+ } = props;
58
+ const wrapRef = useRef(null);
59
+ const [showTooltipBelow, setShowTooltipBelow] = useState(false);
60
+ const updateTooltipPlacement = () => {
61
+ const el = wrapRef.current;
62
+ if (!el) return;
63
+ const { top } = el.getBoundingClientRect();
64
+ setShowTooltipBelow(top < TOOLTIP_VIEWPORT_TOP_CLEARANCE_PX);
65
+ };
66
+ const customTooltipClass = classNames(
67
+ visualBuilderStyles()["visual-builder__custom-tooltip"],
68
+ showTooltipBelow && visualBuilderStyles()["visual-builder__custom-tooltip--below"]
69
+ );
70
+ const workflowAccessTooltipClass = classNames(
71
+ visualBuilderStyles()["visual-builder__custom-tooltip"],
72
+ showTooltipBelow && visualBuilderStyles()["visual-builder__custom-tooltip--below"],
73
+ visualBuilderStyles()["visual-builder__custom-tooltip--workflow-access"]
74
+ );
75
+ return /* @__PURE__ */ jsxs(
76
+ "div",
77
+ {
78
+ ref: wrapRef,
79
+ onMouseEnter: updateTooltipPlacement,
80
+ className: classNames(
81
+ visualBuilderStyles()["visual-builder__tooltip--persistent"],
82
+ showTooltipBelow && visualBuilderStyles()["visual-builder__tooltip--persistent--below"]
83
+ ),
84
+ "data-tooltip": usePlainDataTooltip ? reason : void 0,
85
+ children: [
86
+ reason?.includes(DisableReason.CanLinkVariant) ? /* @__PURE__ */ jsx("div", { className: customTooltipClass, onClick: onLinkVariant, children: (() => {
87
+ const [before, after] = reason.split(
88
+ DisableReason.UnderlinedAndClickableWord
89
+ );
90
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
91
+ before,
92
+ /* @__PURE__ */ jsx("span", { style: { textDecoration: "underline" }, children: DisableReason.UnderlinedAndClickableWord }),
93
+ after
94
+ ] });
95
+ })() }) : null,
96
+ workflowRequestUi === "request" && reason ? /* @__PURE__ */ jsxs("div", { className: workflowAccessTooltipClass, children: [
97
+ /* @__PURE__ */ jsx("span", { children: reason }),
98
+ " ",
99
+ /* @__PURE__ */ jsx(
100
+ "span",
101
+ {
102
+ role: "button",
103
+ tabIndex: 0,
104
+ style: {
105
+ textDecoration: "underline",
106
+ cursor: "pointer"
107
+ },
108
+ onClick: (e) => {
109
+ e.stopPropagation();
110
+ onRequestEditAccess();
111
+ },
112
+ onKeyDown: (e) => {
113
+ if (e.key === "Enter" || e.key === " ") {
114
+ e.preventDefault();
115
+ onRequestEditAccess();
116
+ }
117
+ },
118
+ children: "Request Edit Access"
119
+ }
120
+ )
121
+ ] }) : null,
122
+ workflowRequestUi === "pending" && reason ? /* @__PURE__ */ jsx("div", { className: workflowAccessTooltipClass, children: reason }) : null,
123
+ /* @__PURE__ */ jsx(InfoIcon, {})
124
+ ]
125
+ }
126
+ );
127
+ }
49
128
  function FieldLabelWrapperComponent(props) {
50
129
  const { eventDetails } = props;
51
130
  const [currentField, setCurrentField] = useState({
@@ -102,7 +181,7 @@ function FieldLabelWrapperComponent(props) {
102
181
  const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
103
182
  if (domAncestor) {
104
183
  const domAncestorCslp = domAncestor.getAttribute("data-cslp");
105
- if (domAncestorCslp) {
184
+ if (isValidCslp(domAncestorCslp)) {
106
185
  const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);
107
186
  const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
108
187
  const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
@@ -125,13 +204,35 @@ function FieldLabelWrapperComponent(props) {
125
204
  variantUid: props.fieldMetadata.variant,
126
205
  fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex
127
206
  });
128
- const { isDisabled: fieldDisabled, reason } = isFieldDisabled(
207
+ const {
208
+ isDisabled: fieldDisabled,
209
+ reason,
210
+ workflowRequestUi
211
+ } = isFieldDisabled(
129
212
  fieldSchema,
130
213
  eventDetails,
131
214
  resolvedVariantPermissions,
132
215
  entryAcl,
133
216
  entryWorkflowStageDetails
134
217
  );
218
+ const handleRequestEditAccess = async () => {
219
+ try {
220
+ await visualBuilderPostMessage?.send(
221
+ VisualBuilderPostMessageEvents.OPEN_REQUEST_EDIT_ACCESS,
222
+ {
223
+ entryUid: props.fieldMetadata.entry_uid,
224
+ contentTypeUid: props.fieldMetadata.content_type_uid,
225
+ locale: props.fieldMetadata.locale,
226
+ variantUid: props.fieldMetadata.variant
227
+ }
228
+ );
229
+ } catch (error2) {
230
+ console.error(
231
+ "Error opening request edit access flow:",
232
+ error2
233
+ );
234
+ }
235
+ };
135
236
  const handleLinkVariant = async () => {
136
237
  try {
137
238
  if (fieldSchema.field_metadata?.canLinkVariant) {
@@ -158,36 +259,18 @@ function FieldLabelWrapperComponent(props) {
158
259
  const currentFieldDisplayName = displayNames2?.[props.fieldMetadata.cslpValue] ?? fieldSchema.display_name;
159
260
  const hasParentPaths = !!props?.parentPaths?.length;
160
261
  const isVariant = props.fieldMetadata.variant ? true : false;
262
+ const usePlainDataTooltip = reason && !reason.includes(DisableReason.CanLinkVariant) && workflowRequestUi == null;
161
263
  setCurrentField({
162
264
  text: currentFieldDisplayName,
163
265
  contentTypeName: contentTypeName ?? "",
164
- icon: fieldDisabled ? /* @__PURE__ */ jsxs(
165
- "div",
266
+ icon: fieldDisabled ? /* @__PURE__ */ jsx(
267
+ FieldLabelDisabledIcon,
166
268
  {
167
- className: classNames(
168
- visualBuilderStyles()["visual-builder__tooltip--persistent"]
169
- ),
170
- "data-tooltip": !reason?.includes(DisableReason.CanLinkVariant) ? reason : void 0,
171
- children: [
172
- reason.includes(DisableReason.CanLinkVariant) && /* @__PURE__ */ jsx(
173
- "div",
174
- {
175
- className: visualBuilderStyles()["visual-builder__custom-tooltip"],
176
- onClick: handleLinkVariant,
177
- children: (() => {
178
- const [before, after] = reason.split(
179
- DisableReason.UnderlinedAndClickableWord
180
- );
181
- return /* @__PURE__ */ jsxs(Fragment, { children: [
182
- before,
183
- /* @__PURE__ */ jsx("span", { style: { textDecoration: "underline" }, children: DisableReason.UnderlinedAndClickableWord }),
184
- after
185
- ] });
186
- })()
187
- }
188
- ),
189
- /* @__PURE__ */ jsx(InfoIcon, {})
190
- ]
269
+ reason,
270
+ ...workflowRequestUi != null ? { workflowRequestUi } : {},
271
+ usePlainDataTooltip: Boolean(usePlainDataTooltip),
272
+ onLinkVariant: handleLinkVariant,
273
+ onRequestEditAccess: handleRequestEditAccess
191
274
  }
192
275
  ) : hasParentPaths ? /* @__PURE__ */ jsx(CaretIcon, {}) : /* @__PURE__ */ jsx(Fragment, {}),
193
276
  isReference,