@parhelia/core 0.1.12881 → 0.1.12882

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 (307) hide show
  1. package/dist/components/ui/card.d.ts +1 -3
  2. package/dist/components/ui/card.js +2 -2
  3. package/dist/components/ui/card.js.map +1 -1
  4. package/dist/components/ui/context-menu.js +2 -2
  5. package/dist/config/config.js +7 -8
  6. package/dist/config/config.js.map +1 -1
  7. package/dist/config/types.d.ts +7 -0
  8. package/dist/config/types.js.map +1 -1
  9. package/dist/editor/FieldActionsOverlay.d.ts +1 -0
  10. package/dist/editor/FieldActionsOverlay.js +45 -1
  11. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  12. package/dist/editor/FieldListField.d.ts +1 -1
  13. package/dist/editor/FieldListField.js +18 -20
  14. package/dist/editor/FieldListField.js.map +1 -1
  15. package/dist/editor/ImageEditor.d.ts +1 -6
  16. package/dist/editor/ImageEditor.js +3 -19
  17. package/dist/editor/ImageEditor.js.map +1 -1
  18. package/dist/editor/PictureEditor.d.ts +1 -2
  19. package/dist/editor/PictureEditor.js +14 -5
  20. package/dist/editor/PictureEditor.js.map +1 -1
  21. package/dist/editor/ai/Agents.js +2 -2
  22. package/dist/editor/ai/Agents.js.map +1 -1
  23. package/dist/editor/ai/GuidanceOverlay.js +11 -1
  24. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  25. package/dist/editor/ai/InlineAiDialog.js +11 -22
  26. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  27. package/dist/editor/ai/InlineAiTrigger.js +57 -17
  28. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  29. package/dist/editor/ai/dialogs/capturePageDom.js +36 -66
  30. package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -1
  31. package/dist/editor/ai/dialogs/capturePageScreenshot.js +162 -281
  32. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
  33. package/dist/editor/ai/terminal/agentSessionState.d.ts +0 -3
  34. package/dist/editor/ai/terminal/agentSessionState.js +1 -3
  35. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  36. package/dist/editor/ai/terminal/agentStartRequest.d.ts +1 -2
  37. package/dist/editor/ai/terminal/agentStartRequest.js +1 -2
  38. package/dist/editor/ai/terminal/agentStartRequest.js.map +1 -1
  39. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +1 -1
  40. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  41. package/dist/editor/ai/terminal/components/AgentDocumentList.d.ts +0 -7
  42. package/dist/editor/ai/terminal/components/AgentDocumentList.js +13 -55
  43. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  44. package/dist/editor/ai/terminal/components/AgentFullPromptControls.d.ts +1 -3
  45. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +14 -22
  46. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
  47. package/dist/editor/ai/terminal/components/AgentModeSelector.js +4 -4
  48. package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
  49. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +4 -4
  50. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  51. package/dist/editor/ai/terminal/components/AgentPromptComposer.js +1 -1
  52. package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
  53. package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +1 -2
  54. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +11 -8
  55. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  56. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +4 -1
  57. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +14 -31
  58. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  59. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
  60. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
  61. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +1 -2
  62. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +4 -2
  63. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
  64. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
  65. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  66. package/dist/editor/ai/terminal/components/AgentTerminalView.js +2 -13
  67. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  68. package/dist/editor/ai/terminal/components/AiResponseMessage.js +14 -16
  69. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  70. package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -22
  71. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  72. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +26 -37
  73. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
  74. package/dist/editor/ai/terminal/components/UserMessage.d.ts +1 -2
  75. package/dist/editor/ai/terminal/components/UserMessage.js +8 -144
  76. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  77. package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js +1 -1
  78. package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js.map +1 -1
  79. package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +0 -1
  80. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -3
  81. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +3 -9
  82. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  83. package/dist/editor/ai/terminal/useAgentTerminalController.js +0 -7
  84. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  85. package/dist/editor/ai/terminal/useAgentTerminalUiState.js +1 -1
  86. package/dist/editor/ai/terminal/useAgentTerminalUiState.js.map +1 -1
  87. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js +1 -3
  88. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js.map +1 -1
  89. package/dist/editor/ai/useInlineAiPosition.d.ts +1 -1
  90. package/dist/editor/ai/useInlineAiPosition.js +52 -22
  91. package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
  92. package/dist/editor/ai-image-editor/AiImageResultOverlay.js +62 -30
  93. package/dist/editor/ai-image-editor/AiImageResultOverlay.js.map +1 -1
  94. package/dist/editor/client/EditorShell.d.ts +1 -5
  95. package/dist/editor/client/EditorShell.js +136 -285
  96. package/dist/editor/client/EditorShell.js.map +1 -1
  97. package/dist/editor/client/editContext.d.ts +5 -33
  98. package/dist/editor/client/editContext.js.map +1 -1
  99. package/dist/editor/client/hooks/useSocketMessageHandler.js +17 -14
  100. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  101. package/dist/editor/client/itemsRepository.d.ts +0 -2
  102. package/dist/editor/client/itemsRepository.js +8 -15
  103. package/dist/editor/client/itemsRepository.js.map +1 -1
  104. package/dist/editor/client/operations.d.ts +1 -1
  105. package/dist/editor/client/operations.js +17 -41
  106. package/dist/editor/client/operations.js.map +1 -1
  107. package/dist/editor/client/pageModelBuilder.js +7 -24
  108. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  109. package/dist/editor/commands/handlers/uiActionHandlers.js +5 -1
  110. package/dist/editor/commands/handlers/uiActionHandlers.js.map +1 -1
  111. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +5 -0
  112. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
  113. package/dist/editor/editor-warnings/ItemLocked.js +6 -3
  114. package/dist/editor/editor-warnings/ItemLocked.js.map +1 -1
  115. package/dist/editor/field-types/MultiLineText.js +3 -10
  116. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  117. package/dist/editor/field-types/RawEditor.js +1 -8
  118. package/dist/editor/field-types/RawEditor.js.map +1 -1
  119. package/dist/editor/field-types/RichTextEditorComponent.js +45 -156
  120. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  121. package/dist/editor/field-types/SingleLineText.js +3 -10
  122. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  123. package/dist/editor/field-types/richtext/components/ReactSlate.js +2 -8
  124. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  125. package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +2 -1
  126. package/dist/editor/field-types/richtext/contextMenuFactory.js +303 -100
  127. package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
  128. package/dist/editor/field-types/richtext/types.d.ts +0 -2
  129. package/dist/editor/field-types/richtext/types.js.map +1 -1
  130. package/dist/editor/media-selector/MediaFolderBrowser.d.ts +2 -1
  131. package/dist/editor/media-selector/MediaFolderBrowser.js +19 -9
  132. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  133. package/dist/editor/media-selector/TreeSelector.js +30 -24
  134. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  135. package/dist/editor/media-selector/UploadZone.d.ts +2 -1
  136. package/dist/editor/media-selector/UploadZone.js +21 -9
  137. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  138. package/dist/editor/menubar/PageSelector.js +2 -8
  139. package/dist/editor/menubar/PageSelector.js.map +1 -1
  140. package/dist/editor/menubar/VersionPreviewCard.js +249 -4
  141. package/dist/editor/menubar/VersionPreviewCard.js.map +1 -1
  142. package/dist/editor/menubar/toolbar-sections/EditControls.js +2 -2
  143. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  144. package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +10 -0
  145. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +462 -63
  146. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  147. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
  148. package/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +2 -5
  149. package/dist/editor/page-editor-chrome/CommentHighlightings.js +215 -340
  150. package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
  151. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.d.ts +1 -5
  152. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js +4 -11
  153. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
  154. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +13 -21
  155. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  156. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +29 -23
  157. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
  158. package/dist/editor/page-editor-chrome/FrameMenu.js +19 -110
  159. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  160. package/dist/editor/page-editor-chrome/InlineEditor.d.ts +7 -0
  161. package/dist/editor/page-editor-chrome/InlineEditor.js +1719 -0
  162. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -0
  163. package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +2 -3
  164. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +45 -148
  165. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  166. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +0 -2
  167. package/dist/editor/page-editor-chrome/PageEditorChrome.js +21 -25
  168. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  169. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +128 -163
  170. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  171. package/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +1 -1
  172. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +3 -6
  173. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  174. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +2 -1
  175. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +146 -83
  176. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  177. package/dist/editor/page-editor-chrome/SuggestionHighlightings.d.ts +2 -5
  178. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +63 -144
  179. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  180. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +2 -1
  181. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +30 -101
  182. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  183. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +1 -10
  184. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +122 -105
  185. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  186. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +4 -11
  187. package/dist/editor/page-editor-chrome/overlay/geometry.js +36 -139
  188. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  189. package/dist/editor/page-editor-chrome/overlay/iframeAccess.d.ts +2 -0
  190. package/dist/editor/page-editor-chrome/overlay/iframeAccess.js +21 -0
  191. package/dist/editor/page-editor-chrome/overlay/iframeAccess.js.map +1 -0
  192. package/dist/editor/page-editor-chrome/useInlineAICompletion.d.ts +7 -0
  193. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +758 -0
  194. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -0
  195. package/dist/editor/page-viewer/EditorForm.js +1 -17
  196. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  197. package/dist/editor/page-viewer/MiniMap.d.ts +2 -2
  198. package/dist/editor/page-viewer/MiniMap.js +364 -176
  199. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  200. package/dist/editor/page-viewer/PageViewer.js +13 -40
  201. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  202. package/dist/editor/page-viewer/PageViewerFrame.d.ts +5 -0
  203. package/dist/editor/page-viewer/PageViewerFrame.js +1509 -1527
  204. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  205. package/dist/editor/page-viewer/pageModelSkeletonBuilder.d.ts +3 -0
  206. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +796 -0
  207. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -0
  208. package/dist/editor/page-viewer/pageViewContext.d.ts +0 -32
  209. package/dist/editor/page-viewer/pageViewContext.js +6 -37
  210. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  211. package/dist/editor/reviews/Comment.d.ts +1 -2
  212. package/dist/editor/reviews/Comment.js +4 -9
  213. package/dist/editor/reviews/Comment.js.map +1 -1
  214. package/dist/editor/reviews/CommentEditor.js +1 -1
  215. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  216. package/dist/editor/reviews/CommentPopover.js +9 -68
  217. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  218. package/dist/editor/reviews/CommentView.js +4 -24
  219. package/dist/editor/reviews/CommentView.js.map +1 -1
  220. package/dist/editor/reviews/Comments.d.ts +2 -0
  221. package/dist/editor/reviews/Comments.js +30 -29
  222. package/dist/editor/reviews/Comments.js.map +1 -1
  223. package/dist/editor/reviews/FeedbackCard.d.ts +2 -4
  224. package/dist/editor/reviews/FeedbackCard.js +5 -5
  225. package/dist/editor/reviews/FeedbackCard.js.map +1 -1
  226. package/dist/editor/reviews/SuggestedEdit.js +6 -4
  227. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  228. package/dist/editor/reviews/SuggestionDisplayPopover.js +2 -3
  229. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  230. package/dist/editor/reviews/commentAi.js +27 -96
  231. package/dist/editor/reviews/commentAi.js.map +1 -1
  232. package/dist/editor/reviews/feedbackSelection.js +4 -32
  233. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  234. package/dist/editor/services/agentService.d.ts +0 -15
  235. package/dist/editor/services/agentService.js +1 -11
  236. package/dist/editor/services/agentService.js.map +1 -1
  237. package/dist/editor/services/contentService.d.ts +1 -0
  238. package/dist/editor/services/contentService.js.map +1 -1
  239. package/dist/editor/services/reviewsService.d.ts +2 -2
  240. package/dist/editor/services/reviewsService.js.map +1 -1
  241. package/dist/editor/settings/SettingsView.js +2 -2
  242. package/dist/editor/settings/SettingsView.js.map +1 -1
  243. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
  244. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  245. package/dist/editor/settings/panels/ProvidersPanel.js +3 -2
  246. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  247. package/dist/editor/sidebar/MorePanelsButton.js +1 -1
  248. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  249. package/dist/editor/sidebar/Workbox.js +1 -1
  250. package/dist/editor/sidebar/Workbox.js.map +1 -1
  251. package/dist/editor/ui/IconSelectorDialog.js +1 -1
  252. package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
  253. package/dist/editor/ui/SimpleIconButton.d.ts +2 -2
  254. package/dist/editor/ui/SimpleIconButton.js +1 -1
  255. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  256. package/dist/editor/utils.d.ts +17 -1
  257. package/dist/editor/utils.js +143 -0
  258. package/dist/editor/utils.js.map +1 -1
  259. package/dist/editor/version-diff/versionDiffTargets.d.ts +8 -3
  260. package/dist/editor/version-diff/versionDiffTargets.js +94 -37
  261. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  262. package/dist/editor/views/MediaFolderEditView.js +1 -1
  263. package/dist/editor/views/MediaFolderEditView.js.map +1 -1
  264. package/dist/revision.d.ts +2 -2
  265. package/dist/revision.js +2 -2
  266. package/dist/splash-screen/DialogWrappers.js +2 -2
  267. package/dist/splash-screen/DialogWrappers.js.map +1 -1
  268. package/dist/splash-screen/ModernSplashScreen.js +3 -11
  269. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  270. package/dist/splash-screen/NewPage.js +5 -7
  271. package/dist/splash-screen/NewPage.js.map +1 -1
  272. package/dist/splash-screen/OpenPage.js +3 -5
  273. package/dist/splash-screen/OpenPage.js.map +1 -1
  274. package/dist/splash-screen/RecentPages.js +3 -3
  275. package/dist/splash-screen/RecentPages.js.map +1 -1
  276. package/package.json +1 -2
  277. package/styles.css +0 -49
  278. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
  279. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
  280. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
  281. package/dist/editor/bridge/BridgeClient.d.ts +0 -80
  282. package/dist/editor/bridge/BridgeClient.js +0 -417
  283. package/dist/editor/bridge/BridgeClient.js.map +0 -1
  284. package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +0 -13
  285. package/dist/editor/field-types/useFormFieldCaretPresence.js +0 -92
  286. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +0 -1
  287. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +0 -6
  288. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +0 -123
  289. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +0 -1
  290. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +0 -26
  291. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +0 -222
  292. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +0 -1
  293. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +0 -20
  294. package/dist/editor/page-viewer/bridgeFieldPatch.js +0 -33
  295. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +0 -1
  296. package/dist/editor/reviews/commentTransientSelection.d.ts +0 -23
  297. package/dist/editor/reviews/commentTransientSelection.js +0 -7
  298. package/dist/editor/reviews/commentTransientSelection.js.map +0 -1
  299. package/dist/editor/reviews/feedbackOrdering.d.ts +0 -5
  300. package/dist/editor/reviews/feedbackOrdering.js +0 -27
  301. package/dist/editor/reviews/feedbackOrdering.js.map +0 -1
  302. package/dist/editor/reviews/suggestedEditState.d.ts +0 -12
  303. package/dist/editor/reviews/suggestedEditState.js +0 -90
  304. package/dist/editor/reviews/suggestedEditState.js.map +0 -1
  305. package/dist/editor/reviews/suggestionDisplayValue.d.ts +0 -43
  306. package/dist/editor/reviews/suggestionDisplayValue.js +0 -93
  307. package/dist/editor/reviews/suggestionDisplayValue.js.map +0 -1
@@ -0,0 +1,796 @@
1
+ import { extractItemIdFromItemUri, getNextNonChromeMarkerElement, getPreviousNonChromeMarkerElement, isChromeMarkerElement, isSitecoreCodeMarkerElement, } from "../utils";
2
+ const excludedComponentTypes = new Set(["StickyNote"]);
3
+ const zeroGuid = "00000000-0000-0000-0000-000000000000";
4
+ function normalizeSitecoreId(id) {
5
+ if (!id)
6
+ return "";
7
+ return id.replace(/[{}]/g, "").toLowerCase();
8
+ }
9
+ function normalizeSitecoreGuid(id) {
10
+ const normalized = normalizeSitecoreId(id);
11
+ if (/^[0-9a-f]{32}$/i.test(normalized)) {
12
+ return `${normalized.substring(0, 8)}-${normalized.substring(8, 12)}-${normalized.substring(12, 16)}-${normalized.substring(16, 20)}-${normalized.substring(20, 32)}`;
13
+ }
14
+ return normalized;
15
+ }
16
+ function normalizeHeadlessPlaceholderKey(id) {
17
+ const key = id ?? "";
18
+ const separatorIndex = key.lastIndexOf("_");
19
+ if (separatorIndex <= 0) {
20
+ return key;
21
+ }
22
+ const suffix = normalizeSitecoreGuid(key.substring(separatorIndex + 1));
23
+ // Root Content SDK placeholders are emitted as "placeholder_0000...".
24
+ // Keep nested placeholders intact because the rendering uid suffix tells
25
+ // Parhelia which component owns the placeholder.
26
+ return suffix === zeroGuid ? key.substring(0, separatorIndex) : key;
27
+ }
28
+ const codeMarkerDataCache = new WeakMap();
29
+ function readSitecoreCodeMarkerData(element) {
30
+ if (!isSitecoreCodeMarkerElement(element)) {
31
+ return undefined;
32
+ }
33
+ if (codeMarkerDataCache.has(element)) {
34
+ return codeMarkerDataCache.get(element) ?? undefined;
35
+ }
36
+ const raw = element.textContent;
37
+ if (!raw) {
38
+ codeMarkerDataCache.set(element, null);
39
+ return undefined;
40
+ }
41
+ try {
42
+ const parsed = JSON.parse(raw);
43
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
44
+ const data = parsed;
45
+ codeMarkerDataCache.set(element, data);
46
+ return data;
47
+ }
48
+ }
49
+ catch {
50
+ // Native Sitecore chrome can be malformed or stripped; marker attributes
51
+ // are still enough for basic start/end matching.
52
+ }
53
+ codeMarkerDataCache.set(element, null);
54
+ return undefined;
55
+ }
56
+ function readRecord(value) {
57
+ return value && typeof value === "object" && !Array.isArray(value)
58
+ ? value
59
+ : undefined;
60
+ }
61
+ function readString(value) {
62
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
63
+ }
64
+ function readNumber(value) {
65
+ if (typeof value === "number" && Number.isFinite(value))
66
+ return value;
67
+ if (typeof value === "string") {
68
+ const parsed = parseInt(value, 10);
69
+ return Number.isFinite(parsed) ? parsed : undefined;
70
+ }
71
+ return undefined;
72
+ }
73
+ function firstString(record, keys) {
74
+ if (!record)
75
+ return undefined;
76
+ for (const key of keys) {
77
+ const value = readString(record[key]);
78
+ if (value)
79
+ return value;
80
+ }
81
+ return undefined;
82
+ }
83
+ function firstRecord(record, keys) {
84
+ if (!record)
85
+ return undefined;
86
+ for (const key of keys) {
87
+ const value = readRecord(record[key]);
88
+ if (value)
89
+ return value;
90
+ }
91
+ return undefined;
92
+ }
93
+ function isExplicitFalse(value) {
94
+ return (value === false ||
95
+ (typeof value === "string" && value.toLowerCase() === "false"));
96
+ }
97
+ function readEditableValue(data) {
98
+ if (!data)
99
+ return undefined;
100
+ const custom = firstRecord(data, ["custom", "customData", "Custom"]);
101
+ const candidateValues = [
102
+ data.editable,
103
+ data.isEditable,
104
+ data.canEdit,
105
+ custom?.editable,
106
+ custom?.isEditable,
107
+ custom?.canEdit,
108
+ ];
109
+ return candidateValues.some(isExplicitFalse) ? "false" : undefined;
110
+ }
111
+ function readDomComponentName(element) {
112
+ if (!element)
113
+ return undefined;
114
+ return (readString(element.getAttribute("data-component")) ||
115
+ readString(element.getAttribute("data-component-name")));
116
+ }
117
+ function setAttributeIfMissing(element, name, value) {
118
+ if (value === undefined || value === null || value === "")
119
+ return;
120
+ if (!element.hasAttribute(name)) {
121
+ element.setAttribute(name, String(value));
122
+ }
123
+ }
124
+ function readMarkerItemData(data, keys) {
125
+ if (!data)
126
+ return undefined;
127
+ const item = firstRecord(data, keys);
128
+ const rawId = firstString(item, ["id", "itemId", "ID"]) ||
129
+ firstString(data, [
130
+ "contextItemId",
131
+ "contextItem",
132
+ "datasourceId",
133
+ "datasource",
134
+ "dataSourceId",
135
+ "dataSource",
136
+ "itemId",
137
+ ]);
138
+ const uri = firstString(item, ["uri", "itemUri", "url"]) ||
139
+ firstString(data, ["contextItemUri", "datasourceUri", "dataSourceUri"]);
140
+ const idFromUri = uri ? extractItemIdFromItemUri(uri) : undefined;
141
+ const id = normalizeSitecoreGuid(rawId || idFromUri);
142
+ const language = firstString(item, ["language", "lang", "languageCode"]) ||
143
+ readQueryValue(uri, ["lang", "language", "sc_lang"]);
144
+ const version = readNumber(item?.version) ||
145
+ readNumber(item?.ver) ||
146
+ readNumber(readQueryValue(uri, ["ver", "version", "sc_version"]));
147
+ if (!id && !language && version === undefined) {
148
+ return undefined;
149
+ }
150
+ return { id, language, version };
151
+ }
152
+ function readQueryValue(uri, keys) {
153
+ if (!uri)
154
+ return undefined;
155
+ const queryStart = uri.indexOf("?");
156
+ if (queryStart < 0)
157
+ return undefined;
158
+ const params = new URLSearchParams(uri.substring(queryStart + 1));
159
+ for (const key of keys) {
160
+ const value = params.get(key);
161
+ if (value)
162
+ return value;
163
+ }
164
+ return undefined;
165
+ }
166
+ function readSitecoreFieldMarkerData(element, markerData) {
167
+ if (!isSitecoreCodeMarkerElement(element) ||
168
+ element.getAttribute("chrometype") !== "field" ||
169
+ element.getAttribute("kind") !== "open") {
170
+ return undefined;
171
+ }
172
+ const data = markerData ?? readSitecoreCodeMarkerData(element);
173
+ if (!data) {
174
+ return undefined;
175
+ }
176
+ const datasource = readMarkerItemData(data, [
177
+ "datasource",
178
+ "dataSource",
179
+ "contextItem",
180
+ ]);
181
+ const field = firstRecord(data, ["field", "fieldData"]);
182
+ const fieldId = normalizeSitecoreGuid(firstString(data, ["fieldId", "fieldID", "field"]) ||
183
+ firstString(field, ["id", "itemId", "fieldId", "fieldID"]));
184
+ return {
185
+ datasource,
186
+ fieldId: fieldId || undefined,
187
+ };
188
+ }
189
+ function normalizeSitecoreCodeMarkerAttributes(element, markerData) {
190
+ if (!isSitecoreCodeMarkerElement(element))
191
+ return;
192
+ element.setAttribute("hidden", "");
193
+ element.setAttribute("aria-hidden", "true");
194
+ if (element instanceof HTMLElement) {
195
+ element.style.display = "none";
196
+ }
197
+ const chromeType = element.getAttribute("chrometype");
198
+ const kind = element.getAttribute("kind");
199
+ const markerId = normalizeSitecoreGuid(element.getAttribute("id") ||
200
+ firstString(markerData, ["id", "uid", "uniqueId", "uniqueID"]));
201
+ if (chromeType === "rendering") {
202
+ normalizeRenderingCodeMarker(element, kind, markerId, markerData);
203
+ }
204
+ else if (chromeType === "placeholder") {
205
+ normalizePlaceholderCodeMarker(element, kind, markerId, markerData);
206
+ }
207
+ else if (chromeType === "field") {
208
+ normalizeFieldCodeMarker(element, markerData);
209
+ }
210
+ }
211
+ function normalizeRenderingCodeMarker(element, kind, markerId, markerData) {
212
+ if (!markerId)
213
+ return;
214
+ if (kind === "open") {
215
+ const rendering = firstRecord(markerData, ["rendering", "renderingItem"]);
216
+ const item = readMarkerItemData(markerData, [
217
+ "contextItem",
218
+ "datasource",
219
+ "dataSource",
220
+ "dataSourceItem",
221
+ "item",
222
+ ]);
223
+ const typeId = normalizeSitecoreGuid(firstString(markerData, [
224
+ "renderingId",
225
+ "renderingID",
226
+ "renderingItemId",
227
+ "renderingItemID",
228
+ "typeId",
229
+ ]) || firstString(rendering, ["id", "itemId", "renderingId"]));
230
+ const displayName = firstString(markerData, ["displayName", "name", "renderingName"]) ||
231
+ firstString(rendering, ["displayName", "name"]);
232
+ setAttributeIfMissing(element, "data-component-start", markerId);
233
+ setAttributeIfMissing(element, "data-type", displayName);
234
+ setAttributeIfMissing(element, "data-typeid", typeId);
235
+ setAttributeIfMissing(element, "data-itemid", item?.id);
236
+ setAttributeIfMissing(element, "data-language", item?.language);
237
+ setAttributeIfMissing(element, "data-version", item?.version);
238
+ setAttributeIfMissing(element, "data-editable", readEditableValue(markerData));
239
+ return;
240
+ }
241
+ if (kind === "close") {
242
+ setAttributeIfMissing(element, "data-component-end", markerId);
243
+ }
244
+ }
245
+ function normalizePlaceholderCodeMarker(element, kind, markerId, markerData) {
246
+ const placeholderKey = normalizeHeadlessPlaceholderKey(markerId);
247
+ if (!placeholderKey)
248
+ return;
249
+ if (kind === "open") {
250
+ const displayName = firstString(markerData, [
251
+ "displayName",
252
+ "description",
253
+ "name",
254
+ ]);
255
+ setAttributeIfMissing(element, "data-placeholder-start", placeholderKey);
256
+ setAttributeIfMissing(element, "data-description", displayName);
257
+ setAttributeIfMissing(element, "data-editable", readEditableValue(markerData));
258
+ return;
259
+ }
260
+ if (kind === "close") {
261
+ setAttributeIfMissing(element, "data-placeholder-end", placeholderKey);
262
+ }
263
+ }
264
+ function normalizeFieldCodeMarker(element, markerData) {
265
+ const fieldData = readSitecoreFieldMarkerData(element, markerData);
266
+ if (!fieldData?.fieldId)
267
+ return;
268
+ // Field code markers identify ownership for the page skeleton, but the hidden
269
+ // marker itself must not become the editable field element.
270
+ }
271
+ export function buildPageModelSkeleton(iframeDocument, editContextRef, pageViewContextRef) {
272
+ const pageItemDescriptor = pageViewContextRef.current?.pageItemDescriptor;
273
+ if (!iframeDocument || !editContextRef.current || !pageViewContextRef.current)
274
+ return;
275
+ // Function to ensure IDs are in UUID format
276
+ const ensureUUIDFormat = (id) => {
277
+ // If it's already in UUID format (with or without curly braces), return it
278
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)) {
279
+ return id;
280
+ }
281
+ // If it's in curly braces format, remove them
282
+ if (/^\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}$/i.test(id)) {
283
+ return id.replace(/[{}]/g, "");
284
+ }
285
+ // If it's a GUID without hyphens, add them
286
+ if (/^[0-9a-f]{32}$/i.test(id)) {
287
+ return `${id.substring(0, 8)}-${id.substring(8, 12)}-${id.substring(12, 16)}-${id.substring(16, 20)}-${id.substring(20, 32)}`;
288
+ }
289
+ // If it's a shorter ID, pad it to make it a valid UUID
290
+ if (id.length < 32) {
291
+ const paddedId = id.padEnd(32, "0");
292
+ return `${paddedId.substring(0, 8)}-${paddedId.substring(8, 12)}-${paddedId.substring(12, 16)}-${paddedId.substring(16, 20)}-${paddedId.substring(20, 32)}`;
293
+ }
294
+ // For any other format, return as is
295
+ return id;
296
+ };
297
+ if (!pageItemDescriptor)
298
+ return;
299
+ const pageItem = {
300
+ ...pageItemDescriptor,
301
+ renderedFieldIds: [],
302
+ };
303
+ const treeWalker = iframeDocument.createTreeWalker(iframeDocument.documentElement, // Root node to start traversal
304
+ NodeFilter.SHOW_ELEMENT, // Only show element nodes
305
+ null);
306
+ const root = {
307
+ placeholders: [],
308
+ id: "page",
309
+ type: "Page",
310
+ typeId: "",
311
+ name: "Page",
312
+ items: [pageItem],
313
+ datasourceItem: pageItem,
314
+ renderedDictionaryKeys: [],
315
+ editorFields: {},
316
+ };
317
+ let currentComponent = root;
318
+ let currentPlaceholder;
319
+ const resolveComponentFirstElement = (componentStartId, element) => {
320
+ if (!isChromeMarkerElement(element)) {
321
+ return element;
322
+ }
323
+ const previousElement = getPreviousNonChromeMarkerElement(element);
324
+ const nextElement = element.nextElementSibling;
325
+ const nextIsMatchingEndMarker = !!nextElement &&
326
+ getComponentEndId(nextElement, componentStartId) === componentStartId;
327
+ // Some Sitecore markers are emitted after the rendered component body, with
328
+ // the matching end marker immediately after the start marker.
329
+ if (nextIsMatchingEndMarker && previousElement) {
330
+ return previousElement;
331
+ }
332
+ return getNextNonChromeMarkerElement(element) ?? previousElement ?? element;
333
+ };
334
+ const moveContainedComponentsToPlaceholder = (sourcePlaceholder, targetPlaceholder, containerElement, currentComponentId) => {
335
+ if (!sourcePlaceholder || sourcePlaceholder === targetPlaceholder) {
336
+ return;
337
+ }
338
+ const containedComponents = sourcePlaceholder.components.filter((component) => {
339
+ if (component.id === currentComponentId) {
340
+ return false;
341
+ }
342
+ return (!!component.firstDOMElement &&
343
+ containerElement.contains(component.firstDOMElement));
344
+ });
345
+ if (containedComponents.length === 0) {
346
+ return;
347
+ }
348
+ sourcePlaceholder.components = sourcePlaceholder.components.filter((component) => !containedComponents.includes(component));
349
+ for (const component of containedComponents) {
350
+ component.parentPlaceholder = targetPlaceholder;
351
+ targetPlaceholder.components.push(component);
352
+ }
353
+ };
354
+ const normalizeExplicitPlaceholderKey = (placeholderKey) => {
355
+ if (!placeholderKey) {
356
+ return placeholderKey;
357
+ }
358
+ const parts = placeholderKey.split("/").filter(Boolean);
359
+ return parts.at(-1) ?? placeholderKey;
360
+ };
361
+ const ensurePlaceholder = (parentComponent, placeholderKey, element) => {
362
+ let placeholder = parentComponent.placeholders.find((x) => x.key === placeholderKey);
363
+ if (!placeholder) {
364
+ placeholder = {
365
+ key: placeholderKey,
366
+ name: placeholderKey.indexOf(parentComponent.id + "_") === 0
367
+ ? placeholderKey.substring(parentComponent.id.length + 1)
368
+ : placeholderKey,
369
+ description: element.getAttribute("data-description") || "",
370
+ components: [],
371
+ parentComponent,
372
+ editable: element.getAttribute("data-editable") !== "false",
373
+ };
374
+ parentComponent.placeholders.push(placeholder);
375
+ }
376
+ return placeholder;
377
+ };
378
+ const placeholderKeysMatch = (left, right) => left === right ||
379
+ normalizeExplicitPlaceholderKey(left) ===
380
+ normalizeExplicitPlaceholderKey(right);
381
+ const findPlaceholderByKey = (component, placeholderKey) => {
382
+ for (const placeholder of component.placeholders) {
383
+ if (placeholderKeysMatch(placeholder.key, placeholderKey)) {
384
+ return placeholder;
385
+ }
386
+ for (const child of placeholder.components) {
387
+ const nested = findPlaceholderByKey(child, placeholderKey);
388
+ if (nested) {
389
+ return nested;
390
+ }
391
+ }
392
+ }
393
+ return undefined;
394
+ };
395
+ const closePlaceholder = (placeholderEndId) => {
396
+ const closingPlaceholder = currentPlaceholder &&
397
+ placeholderKeysMatch(currentPlaceholder.key, placeholderEndId)
398
+ ? currentPlaceholder
399
+ : findPlaceholderByKey(root, placeholderEndId);
400
+ if (!closingPlaceholder) {
401
+ return false;
402
+ }
403
+ currentComponent = closingPlaceholder.parentComponent;
404
+ if (currentPlaceholder === closingPlaceholder) {
405
+ currentPlaceholder = undefined;
406
+ }
407
+ return true;
408
+ };
409
+ const resolveComponentLastElement = (componentEndId, element, component) => {
410
+ const previousElement = getPreviousNonChromeMarkerElement(element);
411
+ if (previousElement &&
412
+ getComponentStartId(previousElement) === componentEndId &&
413
+ component.firstDOMElement) {
414
+ return component.firstDOMElement;
415
+ }
416
+ return previousElement ?? element;
417
+ };
418
+ const startComponent = (componentStartId, element, dataSourceItemId) => {
419
+ if (!currentPlaceholder) {
420
+ if (!currentComponent) {
421
+ console.error("Component start without parent component:", componentStartId);
422
+ return;
423
+ }
424
+ const explicitPlaceholderKey = element.getAttribute("data-placeholderkey");
425
+ if (explicitPlaceholderKey) {
426
+ currentPlaceholder = ensurePlaceholder(currentComponent, normalizeExplicitPlaceholderKey(explicitPlaceholderKey), element);
427
+ }
428
+ else {
429
+ currentPlaceholder = currentComponent.placeholders.find((x) => x.key === "implicit_" + currentComponent?.datasourceItem?.id);
430
+ if (!currentPlaceholder) {
431
+ currentPlaceholder = {
432
+ key: "implicit_" + currentComponent?.datasourceItem?.id,
433
+ name: "Implicit placeholder: " + currentComponent?.datasourceItem?.id,
434
+ description: "",
435
+ components: [],
436
+ parentComponent: currentComponent,
437
+ editable: element.getAttribute("data-editable") !== "false",
438
+ };
439
+ if (!currentComponent) {
440
+ console.error("Component start without placeholder or parent component");
441
+ }
442
+ else {
443
+ currentComponent.placeholders.push(currentPlaceholder);
444
+ }
445
+ }
446
+ }
447
+ }
448
+ if (currentPlaceholder) {
449
+ const language = element.getAttribute("data-language") || pageItem.language;
450
+ const version = element.hasAttribute("data-version")
451
+ ? parseInt(element.getAttribute("data-version"))
452
+ : pageItem.version;
453
+ const itemId = dataSourceItemId || element.getAttribute("data-itemid");
454
+ const datasourceItem = itemId
455
+ ? {
456
+ id: itemId,
457
+ language,
458
+ version,
459
+ renderedFieldIds: [],
460
+ }
461
+ : undefined;
462
+ const layoutId = element.getAttribute("data-layoutid");
463
+ const parametersTemplateId = element.getAttribute("data-parameters-template-id");
464
+ const parameters = element.getAttribute("data-parameters");
465
+ const isSharedDatasource = element.getAttribute("data-shared-datasource") === "true";
466
+ const hasPersonalization = element.getAttribute("data-has-personalization") === "true";
467
+ // Store the parent component before we potentially change currentComponent
468
+ const parentComponent = currentPlaceholder.parentComponent;
469
+ const parentPlaceholder = currentPlaceholder;
470
+ const componentFirstElement = resolveComponentFirstElement(componentStartId, element);
471
+ const componentType = element.getAttribute("data-type") ||
472
+ readDomComponentName(componentFirstElement) ||
473
+ "";
474
+ setAttributeIfMissing(element, "data-type", componentType);
475
+ if (excludedComponentTypes.has(componentType)) {
476
+ element.setAttribute("data-skip-component", "true");
477
+ return undefined;
478
+ }
479
+ if (componentFirstElement instanceof HTMLElement &&
480
+ !componentFirstElement.hasAttribute("data-component-id")) {
481
+ componentFirstElement.setAttribute("data-component-id", componentStartId);
482
+ }
483
+ currentComponent = currentPlaceholder.components.find((x) => x.id === componentStartId);
484
+ // Check if we should skip this component because it has the same datasource as the parent
485
+ if (datasourceItem &&
486
+ datasourceItem.id === parentComponent?.datasourceItem?.id) {
487
+ element.setAttribute("data-skip-component", "true");
488
+ return undefined;
489
+ }
490
+ if (!currentComponent) {
491
+ currentComponent = {
492
+ id: componentStartId,
493
+ name: "",
494
+ type: componentType,
495
+ typeId: element.getAttribute("data-typeid") || "",
496
+ parametersTemplateId: parametersTemplateId || undefined,
497
+ parameters: parameters || undefined,
498
+ items: datasourceItem ? [datasourceItem] : [],
499
+ placeholders: [],
500
+ parentPlaceholder: currentPlaceholder,
501
+ renderedDictionaryKeys: [],
502
+ datasourceItem,
503
+ layoutId: layoutId || undefined,
504
+ isShared: isSharedDatasource,
505
+ hasPersonalization,
506
+ isSharedLayout: element.getAttribute("data-shared-rendering") === "true",
507
+ editorFields: {},
508
+ firstDOMElement: componentFirstElement,
509
+ editable: element.getAttribute("data-editable") !== "false",
510
+ };
511
+ if (currentComponent) {
512
+ currentPlaceholder.components.push(currentComponent);
513
+ }
514
+ }
515
+ else {
516
+ currentComponent.isShared = isSharedDatasource;
517
+ currentComponent.hasPersonalization =
518
+ hasPersonalization || currentComponent.hasPersonalization;
519
+ currentComponent.layoutId = layoutId || currentComponent.layoutId;
520
+ currentComponent.parametersTemplateId =
521
+ parametersTemplateId || currentComponent.parametersTemplateId;
522
+ currentComponent.parameters = parameters || currentComponent.parameters;
523
+ currentComponent.isSharedLayout =
524
+ element.getAttribute("data-shared-rendering") === "true" ||
525
+ currentComponent.isSharedLayout;
526
+ }
527
+ // Check if the new component should have an implicit placeholder
528
+ const hasImplicitPlaceholder = element.getAttribute("data-has-implicit-placeholder") === "true";
529
+ if (hasImplicitPlaceholder && currentComponent) {
530
+ // Add an implicit placeholder to the newly created component
531
+ const implicitPlaceholder = {
532
+ key: "implicit_" + currentComponent.datasourceItem?.id,
533
+ name: "Implicit placeholder: " + currentComponent.datasourceItem?.id,
534
+ description: "",
535
+ components: [],
536
+ parentComponent: currentComponent,
537
+ editable: element.getAttribute("data-editable") !== "false",
538
+ };
539
+ currentComponent.placeholders.push(implicitPlaceholder);
540
+ moveContainedComponentsToPlaceholder(parentPlaceholder, implicitPlaceholder, componentFirstElement, currentComponent.id);
541
+ currentPlaceholder = implicitPlaceholder;
542
+ }
543
+ else {
544
+ currentPlaceholder = undefined;
545
+ }
546
+ return currentComponent;
547
+ }
548
+ };
549
+ const endComponent = (componentEndId) => {
550
+ if (!currentComponent || currentComponent.id !== componentEndId) {
551
+ console.error("Component end does not match start", currentComponent, componentEndId);
552
+ // Placeholder closed implicitly
553
+ if (currentPlaceholder?.parentComponent.id === componentEndId) {
554
+ currentComponent = currentPlaceholder.parentComponent;
555
+ currentPlaceholder = undefined;
556
+ }
557
+ }
558
+ currentPlaceholder = currentComponent?.parentPlaceholder;
559
+ if (currentPlaceholder?.key.startsWith("implicit_")) {
560
+ currentComponent = currentPlaceholder.parentComponent;
561
+ }
562
+ else
563
+ currentComponent = undefined;
564
+ };
565
+ const componentStack = [];
566
+ const getComponentStartId = (element) => {
567
+ const normalizedId = element.getAttribute("data-component-start");
568
+ if (normalizedId)
569
+ return normalizedId;
570
+ if (isSitecoreCodeMarkerElement(element) &&
571
+ element.getAttribute("chrometype") === "rendering" &&
572
+ element.getAttribute("kind") === "open") {
573
+ return normalizeSitecoreGuid(element.getAttribute("id"));
574
+ }
575
+ return null;
576
+ };
577
+ const getComponentEndId = (element, fallback) => {
578
+ const normalizedId = element.getAttribute("data-component-end");
579
+ if (normalizedId)
580
+ return normalizedId;
581
+ if (isSitecoreCodeMarkerElement(element) &&
582
+ element.getAttribute("chrometype") === "rendering" &&
583
+ element.getAttribute("kind") === "close") {
584
+ return normalizeSitecoreGuid(element.getAttribute("id")) || fallback || null;
585
+ }
586
+ return null;
587
+ };
588
+ const getPlaceholderStartId = (element) => {
589
+ const normalizedId = element.getAttribute("data-placeholder-start");
590
+ if (normalizedId)
591
+ return normalizedId;
592
+ if (isSitecoreCodeMarkerElement(element) &&
593
+ element.getAttribute("chrometype") === "placeholder" &&
594
+ element.getAttribute("kind") === "open") {
595
+ return normalizeHeadlessPlaceholderKey(normalizeSitecoreGuid(element.getAttribute("id")));
596
+ }
597
+ return null;
598
+ };
599
+ const getPlaceholderEndId = (element, fallback) => {
600
+ const normalizedId = element.getAttribute("data-placeholder-end");
601
+ if (normalizedId)
602
+ return normalizedId;
603
+ if (isSitecoreCodeMarkerElement(element) &&
604
+ element.getAttribute("chrometype") === "placeholder" &&
605
+ element.getAttribute("kind") === "close") {
606
+ return (normalizeHeadlessPlaceholderKey(normalizeSitecoreGuid(element.getAttribute("id"))) ||
607
+ fallback ||
608
+ null);
609
+ }
610
+ return null;
611
+ };
612
+ while (treeWalker.nextNode()) {
613
+ const node = treeWalker.currentNode;
614
+ if (node.nodeType !== Node.ELEMENT_NODE)
615
+ continue;
616
+ const element = node;
617
+ const sitecoreCodeMarkerData = readSitecoreCodeMarkerData(element);
618
+ normalizeSitecoreCodeMarkerAttributes(element, sitecoreCodeMarkerData);
619
+ if (componentStack.length > 0) {
620
+ const component = componentStack[componentStack.length - 1];
621
+ //if element is not a descendant of the component's firstDOMElement, the component from the stack
622
+ if (component && !component.element.contains(element)) {
623
+ componentStack.pop();
624
+ endComponent(component.component.id);
625
+ }
626
+ }
627
+ const sitecoreFieldMarkerData = readSitecoreFieldMarkerData(element, sitecoreCodeMarkerData);
628
+ if (currentComponent && sitecoreFieldMarkerData?.fieldId) {
629
+ const fieldId = ensureUUIDFormat(normalizeSitecoreId(sitecoreFieldMarkerData.fieldId));
630
+ const datasource = sitecoreFieldMarkerData.datasource;
631
+ const itemId = normalizeSitecoreId(datasource?.id);
632
+ const language = datasource?.language ||
633
+ currentComponent.datasourceItem?.language ||
634
+ pageItem.language;
635
+ const version = datasource?.version ||
636
+ currentComponent.datasourceItem?.version ||
637
+ pageItem.version;
638
+ if (itemId) {
639
+ let renderedItem = itemId === currentComponent.datasourceItem?.id
640
+ ? currentComponent.datasourceItem
641
+ : currentComponent.items.find((x) => x.id === itemId &&
642
+ x.language === language &&
643
+ x.version === version);
644
+ if (!renderedItem) {
645
+ renderedItem = {
646
+ id: itemId,
647
+ language,
648
+ version,
649
+ renderedFieldIds: [],
650
+ };
651
+ currentComponent.items.push(renderedItem);
652
+ }
653
+ if (!currentComponent.datasourceItem) {
654
+ currentComponent.datasourceItem = renderedItem;
655
+ }
656
+ if (renderedItem.renderedFieldIds.indexOf(fieldId) === -1) {
657
+ renderedItem.renderedFieldIds.push(fieldId);
658
+ }
659
+ }
660
+ }
661
+ else if (currentComponent && element.getAttribute("chrometype") === "field") {
662
+ const id = element.getAttribute("id");
663
+ if (id) {
664
+ //fld_C866BEE59CE340F18529EF72E1EC34A7_427EC0BD3BF245B9880FBDB0054E7925_en_1_f3327de03c4c4fb39dae57c139e6202d_913_edit
665
+ const idComponents = id.split("_");
666
+ if (idComponents.length > 2) {
667
+ let fieldId = idComponents[2]?.toLocaleLowerCase();
668
+ if (!fieldId)
669
+ continue;
670
+ fieldId = ensureUUIDFormat(fieldId);
671
+ let itemId = idComponents[1]?.toLocaleLowerCase();
672
+ if (!itemId)
673
+ continue;
674
+ itemId = ensureUUIDFormat(itemId);
675
+ let renderedItem = itemId == currentComponent.datasourceItem?.id
676
+ ? currentComponent.datasourceItem
677
+ : currentComponent.items.find((x) => x.id === itemId);
678
+ if (!renderedItem) {
679
+ renderedItem = {
680
+ id: itemId,
681
+ language: currentComponent.datasourceItem?.language || "",
682
+ version: currentComponent.datasourceItem?.version || 0,
683
+ renderedFieldIds: [],
684
+ };
685
+ currentComponent.items.push(renderedItem);
686
+ }
687
+ if (renderedItem &&
688
+ renderedItem.renderedFieldIds.indexOf(fieldId) === -1) {
689
+ renderedItem.renderedFieldIds.push(fieldId);
690
+ }
691
+ }
692
+ }
693
+ }
694
+ if (currentComponent && element.hasAttribute("data-fieldid")) {
695
+ const fieldId = element.getAttribute("data-fieldid");
696
+ const formattedFieldId = ensureUUIDFormat(fieldId);
697
+ const language = element.getAttribute("data-language") ||
698
+ currentComponent.datasourceItem?.language ||
699
+ pageItem.language;
700
+ const version = element.hasAttribute("data-version")
701
+ ? parseInt(element.getAttribute("data-version"))
702
+ : currentComponent.datasourceItem?.version || pageItem.version;
703
+ const itemId = element.getAttribute("data-itemid") ||
704
+ currentComponent.datasourceItem?.id;
705
+ if (!itemId)
706
+ continue;
707
+ let renderedItem = currentComponent.items.find((x) => x.id === itemId && x.language === language && x.version === version);
708
+ if (!renderedItem) {
709
+ renderedItem = {
710
+ id: itemId,
711
+ language,
712
+ version,
713
+ renderedFieldIds: [],
714
+ };
715
+ currentComponent.items.push(renderedItem);
716
+ }
717
+ if (renderedItem.renderedFieldIds.indexOf(formattedFieldId) === -1) {
718
+ renderedItem.renderedFieldIds.push(formattedFieldId);
719
+ }
720
+ }
721
+ if (element.tagName == "DIV" && element.hasAttribute("sc_item")) {
722
+ const componentId = extractItemIdFromItemUri(element.getAttribute("sc_item"));
723
+ if (componentId && componentId != currentComponent?.datasourceItem?.id) {
724
+ const component = startComponent(componentId, element, componentId);
725
+ if (component) {
726
+ component.lastDOMElement = component.firstDOMElement;
727
+ componentStack.push({ component, element });
728
+ }
729
+ }
730
+ }
731
+ if (isChromeMarkerElement(element)) {
732
+ const placeholderStartId = getPlaceholderStartId(element);
733
+ const placeholderEndId = getPlaceholderEndId(element, currentPlaceholder?.key);
734
+ const componentStartId = getComponentStartId(element);
735
+ const componentEndId = getComponentEndId(element, currentComponent?.id);
736
+ const dictionaryKeyStart = element.getAttribute("data-dictionary-key-start");
737
+ const editorGroup = element.getAttribute("data-editor-group");
738
+ if (currentComponent && editorGroup) {
739
+ let group = currentComponent.editorFields[editorGroup];
740
+ if (!group) {
741
+ group = {
742
+ addFields: [],
743
+ removeFields: [],
744
+ };
745
+ currentComponent.editorFields[editorGroup] = group;
746
+ }
747
+ const addFields = element.getAttribute("data-add-fields")?.split(",");
748
+ const removeFields = element
749
+ .getAttribute("data-remove-fields")
750
+ ?.split(",");
751
+ group.addFields = [...group.addFields, ...(addFields || [])];
752
+ group.removeFields = [...group.removeFields, ...(removeFields || [])];
753
+ }
754
+ if (dictionaryKeyStart) {
755
+ if (!currentComponent) {
756
+ console.error("Dictionary key without component:", dictionaryKeyStart);
757
+ }
758
+ else {
759
+ currentComponent.renderedDictionaryKeys.push(dictionaryKeyStart);
760
+ }
761
+ }
762
+ if (placeholderStartId) {
763
+ if (!currentComponent) {
764
+ if (!currentPlaceholder) {
765
+ currentPlaceholder = ensurePlaceholder(root, placeholderStartId, element);
766
+ }
767
+ }
768
+ else {
769
+ currentPlaceholder = ensurePlaceholder(currentComponent, placeholderStartId, element);
770
+ currentComponent = undefined;
771
+ }
772
+ }
773
+ if (placeholderEndId) {
774
+ if (!closePlaceholder(placeholderEndId)) {
775
+ console.debug("Placeholder end without matching start", placeholderEndId);
776
+ }
777
+ }
778
+ if (componentStartId) {
779
+ startComponent(componentStartId, element);
780
+ }
781
+ if (componentEndId) {
782
+ if (currentComponent) {
783
+ currentComponent.lastDOMElement = resolveComponentLastElement(componentEndId, element, currentComponent);
784
+ endComponent(componentEndId);
785
+ }
786
+ }
787
+ }
788
+ }
789
+ const page = {
790
+ rootComponent: root,
791
+ item: pageItem,
792
+ editRevision: editContextRef.current?.revision ?? "",
793
+ };
794
+ pageViewContextRef.current?.setPageSkeleton(page);
795
+ }
796
+ //# sourceMappingURL=pageModelSkeletonBuilder.js.map