@alpaca-editor/core 1.0.0 → 1.0.3764-editor-mono

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 (223) hide show
  1. package/dist/client-components/api.js +6 -0
  2. package/dist/client-components/index.js +36 -0
  3. package/dist/components/ActionButton.js +9 -0
  4. package/dist/components/Error.js +28 -0
  5. package/dist/config/config.js +654 -0
  6. package/dist/config/types.js +2 -0
  7. package/dist/editor/ComponentInfo.js +31 -0
  8. package/dist/editor/ConfirmationDialog.js +32 -0
  9. package/dist/editor/ContentTree.js +406 -0
  10. package/dist/editor/ContextMenu.js +117 -0
  11. package/dist/editor/Editor.js +55 -0
  12. package/dist/editor/EditorWarning.js +13 -0
  13. package/dist/editor/EditorWarnings.js +24 -0
  14. package/dist/editor/FieldEditorPopup.js +24 -0
  15. package/dist/editor/FieldHistory.js +40 -0
  16. package/dist/editor/FieldList.js +63 -0
  17. package/dist/editor/FieldListField.js +164 -0
  18. package/dist/editor/FieldListFieldWithFallbacks.js +114 -0
  19. package/dist/editor/FloatingToolbar.js +92 -0
  20. package/dist/editor/ImageEditor.js +55 -0
  21. package/dist/editor/InsertMenu.js +164 -0
  22. package/dist/editor/ItemInfo.js +30 -0
  23. package/dist/editor/LinkEditorDialog.js +89 -0
  24. package/dist/editor/MainLayout.js +46 -0
  25. package/dist/editor/NewEditorClient.js +9 -0
  26. package/dist/editor/PictureCropper.js +332 -0
  27. package/dist/editor/PictureEditor.js +104 -0
  28. package/dist/editor/PictureEditorDialog.js +194 -0
  29. package/dist/editor/ScrollingContentTree.js +30 -0
  30. package/dist/editor/Terminal.js +109 -0
  31. package/dist/editor/Titlebar.js +11 -0
  32. package/dist/editor/ai/AiPopup.js +25 -0
  33. package/dist/editor/ai/AiResponseMessage.js +24 -0
  34. package/dist/editor/ai/AiTerminal.js +241 -0
  35. package/dist/editor/ai/AiToolCall.js +18 -0
  36. package/dist/editor/ai/EditorAiTerminal.js +9 -0
  37. package/dist/editor/ai/editorAiContext.js +14 -0
  38. package/dist/editor/client/DialogContext.js +29 -0
  39. package/dist/editor/client/EditorClient.js +1336 -0
  40. package/dist/editor/client/GenericDialog.js +27 -0
  41. package/dist/editor/client/editContext.js +59 -0
  42. package/dist/editor/client/helpers.js +31 -0
  43. package/dist/editor/client/itemsRepository.js +255 -0
  44. package/dist/editor/client/operations.js +398 -0
  45. package/dist/editor/client/pageModelBuilder.js +129 -0
  46. package/dist/editor/commands/commands.js +2 -0
  47. package/dist/editor/commands/componentCommands.js +277 -0
  48. package/dist/editor/commands/createVersionCommand.js +26 -0
  49. package/dist/editor/commands/deleteVersionCommand.js +55 -0
  50. package/dist/editor/commands/itemCommands.js +134 -0
  51. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +94 -0
  52. package/dist/editor/commands/undo.js +32 -0
  53. package/dist/editor/component-designer/ComponentDesigner.js +58 -0
  54. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +9 -0
  55. package/dist/editor/component-designer/ComponentDesignerMenu.js +67 -0
  56. package/dist/editor/component-designer/ComponentEditor.js +59 -0
  57. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +16 -0
  58. package/dist/editor/component-designer/ComponentRenderingEditor.js +71 -0
  59. package/dist/editor/component-designer/ComponentsDropdown.js +22 -0
  60. package/dist/editor/component-designer/PlaceholdersEditor.js +70 -0
  61. package/dist/editor/component-designer/RenderingsDropdown.js +25 -0
  62. package/dist/editor/component-designer/TemplateEditor.js +144 -0
  63. package/dist/editor/component-designer/aiContext.js +18 -0
  64. package/dist/editor/componentTreeHelper.js +97 -0
  65. package/dist/editor/control-center/ControlCenterMenu.js +59 -0
  66. package/dist/editor/control-center/IndexOverview.js +27 -0
  67. package/dist/editor/control-center/IndexSettings.js +106 -0
  68. package/dist/editor/control-center/Status.js +7 -0
  69. package/dist/editor/editor-warnings/ItemLocked.js +40 -0
  70. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +16 -0
  71. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +16 -0
  72. package/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
  73. package/dist/editor/editor-warnings/ValidationErrors.js +27 -0
  74. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  75. package/dist/editor/field-types/CheckboxEditor.js +32 -0
  76. package/dist/editor/field-types/DropLinkEditor.js +51 -0
  77. package/dist/editor/field-types/DropListEditor.js +58 -0
  78. package/dist/editor/field-types/ImageFieldEditor.js +36 -0
  79. package/dist/editor/field-types/InternalLinkFieldEditor.js +64 -0
  80. package/dist/editor/field-types/LinkFieldEditor.js +58 -0
  81. package/dist/editor/field-types/MultiLineText.js +35 -0
  82. package/dist/editor/field-types/PictureFieldEditor.js +59 -0
  83. package/dist/editor/field-types/RawEditor.js +33 -0
  84. package/dist/editor/field-types/ReactQuill.js +366 -0
  85. package/dist/editor/field-types/RichTextEditor.js +46 -0
  86. package/dist/editor/field-types/RichTextEditorComponent.js +72 -0
  87. package/dist/editor/field-types/SingleLineText.js +92 -0
  88. package/dist/editor/field-types/TreeListEditor.js +137 -0
  89. package/dist/editor/fieldTypes.js +2 -0
  90. package/dist/editor/media-selector/AiImageSearch.js +110 -0
  91. package/dist/editor/media-selector/AiImageSearchPrompt.js +58 -0
  92. package/dist/editor/media-selector/MediaSelector.js +11 -0
  93. package/dist/editor/media-selector/Preview.js +9 -0
  94. package/dist/editor/media-selector/Thumbnails.js +11 -0
  95. package/dist/editor/media-selector/TreeSelector.js +171 -0
  96. package/dist/editor/media-selector/UploadZone.js +80 -0
  97. package/dist/editor/menubar/ActionsMenu.js +33 -0
  98. package/dist/editor/menubar/ActiveUsers.js +13 -0
  99. package/dist/editor/menubar/ApproveAndPublish.js +13 -0
  100. package/dist/editor/menubar/BrowseHistory.js +14 -0
  101. package/dist/editor/menubar/ItemLanguageVersion.js +36 -0
  102. package/dist/editor/menubar/LanguageSelector.js +33 -0
  103. package/dist/editor/menubar/Menu.js +65 -0
  104. package/dist/editor/menubar/NavButtons.js +43 -0
  105. package/dist/editor/menubar/PageSelector.js +50 -0
  106. package/dist/editor/menubar/PageViewerControls.js +37 -0
  107. package/dist/editor/menubar/Separator.js +8 -0
  108. package/dist/editor/menubar/SiteInfo.js +26 -0
  109. package/dist/editor/menubar/User.js +18 -0
  110. package/dist/editor/menubar/VersionSelector.js +49 -0
  111. package/dist/editor/page-editor-chrome/CommentHighlighting.js +214 -0
  112. package/dist/editor/page-editor-chrome/CommentHighlightings.js +17 -0
  113. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +27 -0
  114. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +15 -0
  115. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +27 -0
  116. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +15 -0
  117. package/dist/editor/page-editor-chrome/FrameMenu.js +178 -0
  118. package/dist/editor/page-editor-chrome/FrameMenus.js +24 -0
  119. package/dist/editor/page-editor-chrome/InlineEditor.js +101 -0
  120. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +35 -0
  121. package/dist/editor/page-editor-chrome/NoLayout.js +21 -0
  122. package/dist/editor/page-editor-chrome/PageEditorChrome.js +65 -0
  123. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +109 -0
  124. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +82 -0
  125. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +147 -0
  126. package/dist/editor/page-viewer/DeviceToolbar.js +21 -0
  127. package/dist/editor/page-viewer/EditorForm.js +130 -0
  128. package/dist/editor/page-viewer/MiniMap.js +257 -0
  129. package/dist/editor/page-viewer/PageViewer.js +64 -0
  130. package/dist/editor/page-viewer/PageViewerFrame.js +696 -0
  131. package/dist/editor/page-viewer/pageViewContext.js +117 -0
  132. package/dist/editor/pageModel.js +2 -0
  133. package/dist/editor/picture-shared.js +28 -0
  134. package/dist/editor/reviews/Comment.js +112 -0
  135. package/dist/editor/reviews/Comments.js +24 -0
  136. package/dist/editor/reviews/PreviewInfo.js +13 -0
  137. package/dist/editor/reviews/Reviews.js +165 -0
  138. package/dist/editor/reviews/reviewCommands.js +44 -0
  139. package/dist/editor/reviews/useReviews.js +48 -0
  140. package/dist/editor/services/aiService.js +99 -0
  141. package/dist/editor/services/componentDesignerService.js +79 -0
  142. package/dist/editor/services/contentService.js +104 -0
  143. package/dist/editor/services/editService.js +322 -0
  144. package/dist/editor/services/indexService.js +25 -0
  145. package/dist/editor/services/reviewsService.js +43 -0
  146. package/dist/editor/services/serviceHelper.js +67 -0
  147. package/dist/editor/services/systemService.js +7 -0
  148. package/dist/editor/services/translationService.js +15 -0
  149. package/dist/editor/services-server/api.js +119 -0
  150. package/dist/editor/services-server/graphQL.js +56 -0
  151. package/dist/editor/sidebar/ComponentPalette.js +55 -0
  152. package/dist/editor/sidebar/ComponentTree.js +362 -0
  153. package/dist/editor/sidebar/Debug.js +60 -0
  154. package/dist/editor/sidebar/DictionaryEditor.js +160 -0
  155. package/dist/editor/sidebar/EditHistory.js +74 -0
  156. package/dist/editor/sidebar/GraphQL.js +115 -0
  157. package/dist/editor/sidebar/Insert.js +24 -0
  158. package/dist/editor/sidebar/MainContentTree.js +52 -0
  159. package/dist/editor/sidebar/Performance.js +34 -0
  160. package/dist/editor/sidebar/Sessions.js +31 -0
  161. package/dist/editor/sidebar/Sidebar.js +15 -0
  162. package/dist/editor/sidebar/SidebarView.js +76 -0
  163. package/dist/editor/sidebar/Translations.js +160 -0
  164. package/dist/editor/sidebar/Validation.js +52 -0
  165. package/dist/editor/sidebar/ViewSelector.js +15 -0
  166. package/dist/editor/sidebar/Workbox.js +80 -0
  167. package/dist/editor/ui/CenteredMessage.js +7 -0
  168. package/dist/editor/ui/CopyToClipboardButton.js +17 -0
  169. package/dist/editor/ui/DialogButtons.js +7 -0
  170. package/dist/editor/ui/Icons.js +75 -0
  171. package/dist/editor/ui/ItemNameDialog.js +45 -0
  172. package/dist/editor/ui/ItemNameDialogNew.js +61 -0
  173. package/dist/editor/ui/ItemSearch.js +93 -0
  174. package/dist/editor/ui/PerfectTree.js +223 -0
  175. package/dist/editor/ui/Section.js +12 -0
  176. package/dist/editor/ui/SimpleIconButton.js +11 -0
  177. package/dist/editor/ui/SimpleMenu.js +9 -0
  178. package/dist/editor/ui/SimpleTable.js +11 -0
  179. package/dist/editor/ui/SimpleTabs.js +21 -0
  180. package/dist/editor/ui/SimpleToolbar.js +7 -0
  181. package/dist/editor/ui/Spinner.js +7 -0
  182. package/dist/editor/ui/Splitter.js +187 -0
  183. package/dist/editor/ui/StackedPanels.js +69 -0
  184. package/dist/editor/ui/Toolbar.js +7 -0
  185. package/dist/editor/utils/id-helper.js +7 -0
  186. package/dist/editor/utils/insertOptions.js +45 -0
  187. package/dist/editor/utils/itemutils.js +25 -0
  188. package/dist/editor/utils/useMemoDebug.js +20 -0
  189. package/dist/editor/utils.js +328 -0
  190. package/dist/editor/views/CompareView.js +147 -0
  191. package/dist/editor/views/EditView.js +17 -0
  192. package/dist/editor/views/ItemEditor.js +24 -0
  193. package/dist/editor/views/SingleEditView.js +25 -0
  194. package/dist/index.js +22 -0
  195. package/dist/page-wizard/PageWizard.js +62 -0
  196. package/dist/page-wizard/SelectWizard.js +43 -0
  197. package/dist/page-wizard/WizardSteps.js +71 -0
  198. package/dist/page-wizard/service.js +26 -0
  199. package/dist/page-wizard/startPageWizardCommand.js +23 -0
  200. package/dist/page-wizard/steps/BuildPageStep.js +138 -0
  201. package/dist/page-wizard/steps/CollectStep.js +124 -0
  202. package/dist/page-wizard/steps/ComponentTypesSelector.js +211 -0
  203. package/dist/page-wizard/steps/Components.js +94 -0
  204. package/dist/page-wizard/steps/CreatePage.js +142 -0
  205. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +230 -0
  206. package/dist/page-wizard/steps/EditButton.js +7 -0
  207. package/dist/page-wizard/steps/FieldEditor.js +30 -0
  208. package/dist/page-wizard/steps/Generate.js +11 -0
  209. package/dist/page-wizard/steps/ImagesStep.js +159 -0
  210. package/dist/page-wizard/steps/LayoutStep.js +120 -0
  211. package/dist/page-wizard/steps/SelectStep.js +150 -0
  212. package/dist/page-wizard/steps/schema.js +140 -0
  213. package/dist/page-wizard/steps/usePageCreator.js +194 -0
  214. package/dist/splash-screen/NewPage.js +131 -0
  215. package/dist/splash-screen/SectionHeadline.js +9 -0
  216. package/dist/splash-screen/SplashScreen.js +81 -0
  217. package/dist/tour/Tour.js +321 -0
  218. package/dist/tour/default-tour.js +231 -0
  219. package/dist/tour/preview-tour.js +93 -0
  220. package/dist/tsconfig.build.tsbuildinfo +1 -0
  221. package/dist/types.js +2 -0
  222. package/package.json +1 -1
  223. package/src/editor/sidebar/ComponentTree.tsx +512 -512
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MiniMap = MiniMap;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const editContext_1 = require("../client/editContext");
40
+ const PlaceholderDropZones_1 = require("../page-editor-chrome/PlaceholderDropZones");
41
+ const FieldEditedIndicators_1 = require("../page-editor-chrome/FieldEditedIndicators");
42
+ const CommentHighlightings_1 = require("../page-editor-chrome/CommentHighlightings");
43
+ function MiniMap({ deviceHeight, scroll, mainViewIframeRef, mode, pageViewContext, }) {
44
+ const editContext = (0, editContext_1.useEditContext)();
45
+ const [scale, setScale] = react_1.default.useState(1);
46
+ const minimapRef = (0, react_1.useRef)(null);
47
+ const scaleContainerRef = (0, react_1.useRef)(null);
48
+ const iframeRef = (0, react_1.useRef)(null);
49
+ const [minimapReady, setMinimapReady] = react_1.default.useState(false);
50
+ const [refreshScale, setRefreshScale] = react_1.default.useState(false);
51
+ const observerRef = (0, react_1.useRef)(null);
52
+ const editorIframeRef = mainViewIframeRef;
53
+ const minimapContainerRef = (0, react_1.useRef)(null);
54
+ if (!mainViewIframeRef.current)
55
+ return;
56
+ const scrollContainer = editorIframeRef.current?.contentWindow?.document.scrollingElement ||
57
+ editorIframeRef.current?.contentWindow?.document.body;
58
+ const calcAndUpdateScale = () => {
59
+ const viewport = pageViewContext.viewport;
60
+ const minimapHeight = minimapContainerRef.current?.clientHeight;
61
+ if (!viewport || !scrollContainer)
62
+ return;
63
+ const width = viewport.width;
64
+ const scaleX = (editContext?.configuration.outline.width || 100) / width;
65
+ const scaleY = Math.max(deviceHeight || 0, minimapHeight || viewport.height) /
66
+ scrollContainer.scrollHeight;
67
+ const newScale = Math.min(scaleX, scaleY, 1);
68
+ updateScale(newScale);
69
+ setScale(newScale);
70
+ return newScale;
71
+ };
72
+ // Prevent scale/width feedback loop by tracking previous values
73
+ const prevScaleRef = (0, react_1.useRef)(scale);
74
+ const prevWidthRef = (0, react_1.useRef)(0);
75
+ const miniMapWidth = (0, react_1.useMemo)(() => {
76
+ const currentWidth = Math.max(30, scale * (pageViewContext.viewport.width || 0));
77
+ // Only update if change is significant (>1px) to avoid minor oscillations
78
+ if (prevWidthRef.current < currentWidth ||
79
+ (Math.abs(currentWidth - prevWidthRef.current) > 1 &&
80
+ Math.abs(scale - prevScaleRef.current) > 0.01)) {
81
+ prevWidthRef.current = currentWidth;
82
+ prevScaleRef.current = scale;
83
+ return currentWidth;
84
+ }
85
+ return prevWidthRef.current;
86
+ }, [scale, scrollContainer?.clientWidth, pageViewContext.viewport]);
87
+ function updateCorrespondingNode(node) {
88
+ const path = [];
89
+ let current = node;
90
+ if (node?.tagName === "HTML")
91
+ return;
92
+ while (current &&
93
+ current !== current.ownerDocument?.documentElement &&
94
+ current.parentNode) {
95
+ const index = Array.prototype.indexOf.call(current.parentNode.childNodes, current);
96
+ path.unshift(index);
97
+ current = current.parentNode;
98
+ }
99
+ const minimapDoc = iframeRef.current?.contentDocument;
100
+ if (!minimapDoc)
101
+ return;
102
+ let correspondingNode = minimapDoc.documentElement;
103
+ let originalNode = mainViewIframeRef.current?.contentWindow?.document.documentElement;
104
+ for (const index of path) {
105
+ if (originalNode && correspondingNode) {
106
+ if (originalNode.childNodes.length !== correspondingNode.childNodes.length) {
107
+ correspondingNode.innerHTML = originalNode.innerHTML;
108
+ return;
109
+ }
110
+ }
111
+ if (originalNode) {
112
+ originalNode = originalNode.childNodes[index];
113
+ }
114
+ if (correspondingNode) {
115
+ correspondingNode = correspondingNode.childNodes[index];
116
+ }
117
+ }
118
+ if (correspondingNode && originalNode) {
119
+ if (originalNode.tagName === "HEAD")
120
+ correspondingNode.innerHTML = originalNode.innerHTML;
121
+ else {
122
+ correspondingNode.outerHTML = originalNode.outerHTML;
123
+ }
124
+ }
125
+ }
126
+ const handleLoad = () => {
127
+ if (!mainViewIframeRef?.current?.contentWindow?.document)
128
+ return;
129
+ mirrorIframeContent(editorIframeRef.current, iframeRef.current);
130
+ const observer = new MutationObserver((mutationsList) => {
131
+ const minimapDoc = iframeRef.current?.contentDocument;
132
+ if (!minimapDoc)
133
+ return;
134
+ // get distinct list of target nodes
135
+ const targetNodes = mutationsList
136
+ .filter((x) => x.type === "childList" && x.target.parentElement)
137
+ .map((m) => m.target)
138
+ .concat(mutationsList
139
+ .filter((x) => x.type === "characterData" ||
140
+ (x.type === "attributes" && x.target.parentElement))
141
+ .map((m) => m.target.parentElement));
142
+ const distinctTargetNodes = Array.from(new Set(targetNodes));
143
+ const nodesToRemove = new Set();
144
+ for (let i = 0; i < distinctTargetNodes.length; i++) {
145
+ for (let j = 0; j < distinctTargetNodes.length; j++) {
146
+ if (i !== j) {
147
+ if (distinctTargetNodes[i]?.contains(distinctTargetNodes[j])) {
148
+ nodesToRemove.add(distinctTargetNodes[j]);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ const filteredNodes = distinctTargetNodes.filter((node) => !nodesToRemove.has(node));
154
+ filteredNodes.forEach((targetNode) => {
155
+ updateCorrespondingNode(targetNode);
156
+ });
157
+ setRefreshScale((x) => !x);
158
+ });
159
+ observer.observe(mainViewIframeRef.current.contentWindow.document, {
160
+ childList: true, // observe direct children changes
161
+ subtree: true, // observe all descendants changes
162
+ characterData: true, // observe text changes
163
+ attributes: true, // observe attribute changes (like style or class)
164
+ });
165
+ setMinimapReady(true);
166
+ observerRef.current = observer;
167
+ };
168
+ (0, react_1.useEffect)(() => {
169
+ if (editorIframeRef?.current) {
170
+ editorIframeRef?.current.addEventListener("load", handleLoad);
171
+ }
172
+ handleLoad();
173
+ // Cleanup function
174
+ return () => {
175
+ editorIframeRef?.current?.removeEventListener("load", handleLoad);
176
+ };
177
+ }, [mainViewIframeRef.current, iframeRef.current]);
178
+ (0, react_1.useEffect)(() => {
179
+ calcAndUpdateScale();
180
+ }, [
181
+ refreshScale,
182
+ editorIframeRef,
183
+ //pageViewContext?.windowSize,
184
+ pageViewContext?.zoom,
185
+ pageViewContext.viewport,
186
+ pageViewContext.deviceHeight,
187
+ pageViewContext.deviceWidth,
188
+ ]);
189
+ if (!editContext) {
190
+ return null;
191
+ }
192
+ const scrollDocumentTo = (y) => {
193
+ if (!editorIframeRef?.current)
194
+ return;
195
+ if (!scrollContainer)
196
+ return;
197
+ scrollContainer.scrollTo({
198
+ top: y,
199
+ behavior: "smooth",
200
+ });
201
+ };
202
+ const scrollHeight = scrollContainer?.scrollHeight;
203
+ const scrollTop = scroll;
204
+ const viewport = pageViewContext.viewport;
205
+ function mirrorIframeContent(sourceIframe, targetIframe) {
206
+ if (sourceIframe.contentDocument && targetIframe.contentDocument) {
207
+ const sourceHtml = sourceIframe.contentDocument.documentElement.innerHTML;
208
+ targetIframe.contentDocument.documentElement.innerHTML = sourceHtml;
209
+ targetIframe.contentDocument.documentElement.style.overflow = "hidden";
210
+ }
211
+ calcAndUpdateScale();
212
+ }
213
+ const updateScale = (scale) => {
214
+ if (!iframeRef.current || !scaleContainerRef.current)
215
+ return;
216
+ scaleContainerRef.current.style.transform = `scale(${scale})`;
217
+ scaleContainerRef.current.style.transformOrigin = "0 0";
218
+ iframeRef.current.style.width = `${scrollContainer?.clientWidth}px`;
219
+ iframeRef.current.style.height = `${scrollContainer?.scrollHeight}px`;
220
+ };
221
+ const handleClick = (e) => {
222
+ if (!scrollContainer)
223
+ return;
224
+ const iframeRect = iframeRef.current.getBoundingClientRect();
225
+ const absY = e.clientY - iframeRect.top;
226
+ const relY = (absY / iframeRect.height) * scrollContainer.scrollHeight;
227
+ e.stopPropagation();
228
+ scrollDocumentTo(relY - viewport.height / 2);
229
+ };
230
+ const handleScroll = (0, react_1.useCallback)((e) => {
231
+ if (!scrollContainer)
232
+ return;
233
+ scrollContainer.scrollBy({
234
+ behavior: "instant",
235
+ left: 0,
236
+ top: e.deltaY,
237
+ });
238
+ editorIframeRef.current?.contentWindow?.document.documentElement?.scrollBy({
239
+ behavior: "instant",
240
+ left: 0,
241
+ top: e.deltaY,
242
+ });
243
+ e.stopPropagation();
244
+ }, [editorIframeRef]);
245
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "bg-white z-50 relative overflow-hidden", ref: minimapContainerRef, style: {
246
+ height: "100%",
247
+ width: miniMapWidth + "px",
248
+ boxShadow: "5px 0 5px -5px #333",
249
+ }, children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute bg-opacity-50 overflow-hidden select-none inset-0", style: {
250
+ boxShadow: "rgb(200, 200, 200) -10px 1px 13px -10px",
251
+ }, children: (0, jsx_runtime_1.jsx)("div", { ref: minimapRef, onClickCapture: handleClick, onDragOverCapture: handleClick, onWheelCapture: handleScroll, className: "h-full w-full cursor-pointer", children: (0, jsx_runtime_1.jsx)("div", { ref: scaleContainerRef, children: (0, jsx_runtime_1.jsx)("iframe", { className: "pointer-events-none", ref: iframeRef, style: { visibility: minimapReady ? "visible" : "hidden" } }) }) }) }), scrollTop !== undefined &&
252
+ scrollHeight !== undefined &&
253
+ minimapReady && ((0, jsx_runtime_1.jsx)("div", { className: "absolute bg-opacity-60 hover:bg-opacity-65 bg-gray-300 w-full pointer-events-none", style: {
254
+ top: scrollTop * scale + "px",
255
+ height: viewport.height * scale + "px",
256
+ } })), mode === "edit" && ((0, jsx_runtime_1.jsx)(PlaceholderDropZones_1.PlaceholderDropZones, { scale: scale, iframe: iframeRef.current, size: "small" })), (0, jsx_runtime_1.jsx)(FieldEditedIndicators_1.FieldEditedIndicators, { scale: scale, pageViewContext: pageViewContext, scroll: scroll }), editContext.showComments && ((0, jsx_runtime_1.jsx)(CommentHighlightings_1.CommentHighlightings, { iframe: iframeRef.current, scale: scale }))] }));
257
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageViewer = PageViewer;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const allotment_1 = require("allotment");
6
+ const EditorForm_1 = require("./EditorForm");
7
+ const PageViewerFrame_1 = require("./PageViewerFrame");
8
+ const react_1 = require("react");
9
+ const react_2 = require("react");
10
+ const SimpleIconButton_1 = require("../ui/SimpleIconButton");
11
+ const editContext_1 = require("../client/editContext");
12
+ const use_debounce_1 = require("use-debounce");
13
+ function PageViewer({ pageViewContext, showFormEditor, mode, name, followEditsDefault, }) {
14
+ const panels = [];
15
+ const editContext = (0, editContext_1.useEditContext)();
16
+ const [followEdits, setFollowEdits] = (0, react_1.useState)(followEditsDefault);
17
+ const allotmentRef = (0, react_2.useRef)(null);
18
+ const [formEditorWidth, setFormEditorWidth] = (0, react_1.useState)(0);
19
+ if (!pageViewContext)
20
+ return null;
21
+ (0, react_1.useEffect)(() => {
22
+ const width = localStorage.getItem("editor.editFormWidth." + name)
23
+ ? parseInt(localStorage.getItem("editor.editFormWidth." + name))
24
+ : 300;
25
+ setFormEditorWidth(width);
26
+ resizePanels(width);
27
+ }, []);
28
+ const resizePanels = (0, use_debounce_1.useDebouncedCallback)((width) => {
29
+ if (!allotmentRef.current)
30
+ return;
31
+ const newsizes = [];
32
+ if (showFormEditor)
33
+ newsizes.push(width);
34
+ allotmentRef.current?.resize(newsizes);
35
+ }, 140);
36
+ (0, react_1.useEffect)(() => {
37
+ if (formEditorWidth > 0)
38
+ localStorage.setItem("editor.editFormWidth." + name, formEditorWidth.toString());
39
+ }, [formEditorWidth]);
40
+ (0, react_1.useEffect)(() => {
41
+ if (followEdits &&
42
+ editContext?.lastEditedFields &&
43
+ editContext.lastEditedFields.length > 0) {
44
+ const lastEdit = editContext.lastEditedFields[editContext.lastEditedFields.length - 1];
45
+ if (!lastEdit)
46
+ return;
47
+ editContext.select([lastEdit.item.id]);
48
+ const element = pageViewContext.editorIframeRef.current?.contentWindow?.document.querySelector(`[data-fieldid="${lastEdit.fieldId}"][data-itemid="${lastEdit.item.id}"][data-language="${lastEdit.item.language}"][data-version="${lastEdit.item.version}"]`);
49
+ if (element) {
50
+ element.scrollIntoView({ behavior: "smooth", block: "center" });
51
+ }
52
+ }
53
+ }, [editContext?.lastEditedFields]);
54
+ if (showFormEditor)
55
+ panels.push((0, jsx_runtime_1.jsxs)("div", { className: "h-full w-full flex flex-col", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-1", children: (0, jsx_runtime_1.jsx)(EditorForm_1.EditorForm, { pageViewContext: pageViewContext, readonly: mode !== "edit" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between gap-1 bg-gray-50 p-1 items-center", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-gray-500 p-1", children: editContext?.statusMessage }), (0, jsx_runtime_1.jsx)(SimpleIconButton_1.SimpleIconButton, { icon: "pi pi-step-forward", className: followEdits ? "bg-gray-200" : "", label: "Follow", onClick: () => setFollowEdits((f) => !f) })] })] }, "form"));
56
+ panels.push((0, jsx_runtime_1.jsx)(PageViewerFrame_1.PageViewerFrame, { mode: mode, pageViewContext: pageViewContext }, "frame"));
57
+ return ((0, jsx_runtime_1.jsx)(allotment_1.Allotment, { proportionalLayout: false, ref: allotmentRef, onChange: (newSizes) => {
58
+ if (!newSizes || newSizes.length === 0)
59
+ return;
60
+ if (showFormEditor && newSizes[0]) {
61
+ setFormEditorWidth(newSizes[0]);
62
+ }
63
+ }, children: panels }));
64
+ }