@alpaca-editor/core 1.0.3815 → 1.0.3818

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 (119) hide show
  1. package/dist/config/config.js +1 -1
  2. package/dist/config/config.js.map +1 -1
  3. package/dist/editor/EditorWarnings.js +1 -1
  4. package/dist/editor/EditorWarnings.js.map +1 -1
  5. package/dist/editor/FieldList.js +1 -1
  6. package/dist/editor/FieldList.js.map +1 -1
  7. package/dist/editor/FieldListFieldWithFallbacks.js +3 -3
  8. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  9. package/dist/editor/Titlebar.js +1 -1
  10. package/dist/editor/Titlebar.js.map +1 -1
  11. package/dist/editor/client/EditorClient.js +71 -31
  12. package/dist/editor/client/EditorClient.js.map +1 -1
  13. package/dist/editor/client/editContext.d.ts +9 -3
  14. package/dist/editor/client/editContext.js.map +1 -1
  15. package/dist/editor/client/operations.d.ts +5 -1
  16. package/dist/editor/client/operations.js +97 -3
  17. package/dist/editor/client/operations.js.map +1 -1
  18. package/dist/editor/component-designer/ComponentDesigner.js +1 -1
  19. package/dist/editor/component-designer/ComponentDesigner.js.map +1 -1
  20. package/dist/editor/menubar/LanguageSelector.js +3 -3
  21. package/dist/editor/menubar/LanguageSelector.js.map +1 -1
  22. package/dist/editor/menubar/PageSelector.js +1 -1
  23. package/dist/editor/menubar/PageSelector.js.map +1 -1
  24. package/dist/editor/menubar/PageViewerControls.js +12 -7
  25. package/dist/editor/menubar/PageViewerControls.js.map +1 -1
  26. package/dist/editor/menubar/Separator.js +1 -1
  27. package/dist/editor/menubar/VersionSelector.js +1 -1
  28. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  29. package/dist/editor/page-editor-chrome/FrameMenu.d.ts +2 -2
  30. package/dist/editor/page-editor-chrome/FrameMenu.js +21 -15
  31. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  32. package/dist/editor/page-editor-chrome/FrameMenus.d.ts +2 -2
  33. package/dist/editor/page-editor-chrome/FrameMenus.js +2 -2
  34. package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
  35. package/dist/editor/page-editor-chrome/InlineEditor.d.ts +2 -2
  36. package/dist/editor/page-editor-chrome/InlineEditor.js +175 -17
  37. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  38. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +2 -2
  39. package/dist/editor/page-editor-chrome/PageEditorChrome.js +2 -2
  40. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  41. package/dist/editor/page-viewer/EditorForm.d.ts +2 -1
  42. package/dist/editor/page-viewer/EditorForm.js +9 -8
  43. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  44. package/dist/editor/page-viewer/MiniMap.d.ts +2 -2
  45. package/dist/editor/page-viewer/MiniMap.js +2 -2
  46. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  47. package/dist/editor/page-viewer/PageViewer.d.ts +2 -2
  48. package/dist/editor/page-viewer/PageViewer.js +3 -3
  49. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  50. package/dist/editor/page-viewer/PageViewerFrame.d.ts +2 -2
  51. package/dist/editor/page-viewer/PageViewerFrame.js +12 -12
  52. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  53. package/dist/editor/reviews/Comments.d.ts +2 -0
  54. package/dist/editor/reviews/Comments.js +26 -9
  55. package/dist/editor/reviews/Comments.js.map +1 -1
  56. package/dist/editor/reviews/DiffView.d.ts +17 -0
  57. package/dist/editor/reviews/DiffView.js +57 -0
  58. package/dist/editor/reviews/DiffView.js.map +1 -0
  59. package/dist/editor/reviews/SuggestedEdit.d.ts +4 -0
  60. package/dist/editor/reviews/SuggestedEdit.js +180 -0
  61. package/dist/editor/reviews/SuggestedEdit.js.map +1 -0
  62. package/dist/editor/services/suggestedEditsService.d.ts +17 -0
  63. package/dist/editor/services/suggestedEditsService.js +26 -0
  64. package/dist/editor/services/suggestedEditsService.js.map +1 -0
  65. package/dist/editor/ui/PerfectTree.js +3 -3
  66. package/dist/editor/ui/PerfectTree.js.map +1 -1
  67. package/dist/editor/ui/SimpleIconButton.js +3 -1
  68. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  69. package/dist/editor/views/CompareView.js +4 -13
  70. package/dist/editor/views/CompareView.js.map +1 -1
  71. package/dist/editor/views/EditView.js +2 -2
  72. package/dist/editor/views/EditView.js.map +1 -1
  73. package/dist/editor/views/SingleEditView.d.ts +2 -2
  74. package/dist/editor/views/SingleEditView.js +2 -2
  75. package/dist/editor/views/SingleEditView.js.map +1 -1
  76. package/dist/lib/safelist.js +1 -1
  77. package/dist/lib/safelist.js.map +1 -1
  78. package/dist/page-wizard/steps/BuildPageStep.js +2 -2
  79. package/dist/page-wizard/steps/BuildPageStep.js.map +1 -1
  80. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +2 -2
  81. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js.map +1 -1
  82. package/dist/styles.css +36 -2
  83. package/dist/types.d.ts +18 -0
  84. package/package.json +4 -1
  85. package/src/config/config.tsx +2 -2
  86. package/src/editor/EditorWarnings.tsx +2 -2
  87. package/src/editor/FieldList.tsx +6 -6
  88. package/src/editor/FieldListFieldWithFallbacks.tsx +9 -9
  89. package/src/editor/Titlebar.tsx +4 -4
  90. package/src/editor/client/EditorClient.tsx +83 -51
  91. package/src/editor/client/editContext.ts +12 -3
  92. package/src/editor/client/operations.ts +146 -9
  93. package/src/editor/component-designer/ComponentDesigner.tsx +1 -1
  94. package/src/editor/menubar/LanguageSelector.tsx +6 -6
  95. package/src/editor/menubar/PageSelector.tsx +11 -11
  96. package/src/editor/menubar/PageViewerControls.tsx +49 -23
  97. package/src/editor/menubar/Separator.tsx +2 -2
  98. package/src/editor/menubar/VersionSelector.tsx +1 -1
  99. package/src/editor/page-editor-chrome/FrameMenu.tsx +18 -17
  100. package/src/editor/page-editor-chrome/FrameMenus.tsx +6 -6
  101. package/src/editor/page-editor-chrome/InlineEditor.tsx +233 -22
  102. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +11 -14
  103. package/src/editor/page-viewer/EditorForm.tsx +15 -9
  104. package/src/editor/page-viewer/MiniMap.tsx +4 -4
  105. package/src/editor/page-viewer/PageViewer.tsx +6 -6
  106. package/src/editor/page-viewer/PageViewerFrame.tsx +19 -13
  107. package/src/editor/reviews/Comments.tsx +56 -15
  108. package/src/editor/reviews/DiffView.tsx +109 -0
  109. package/src/editor/reviews/SuggestedEdit.tsx +316 -0
  110. package/src/editor/services/suggestedEditsService.ts +39 -0
  111. package/src/editor/ui/PerfectTree.tsx +5 -5
  112. package/src/editor/ui/SimpleIconButton.tsx +5 -3
  113. package/src/editor/views/CompareView.tsx +13 -24
  114. package/src/editor/views/EditView.tsx +2 -2
  115. package/src/editor/views/SingleEditView.tsx +3 -3
  116. package/src/lib/safelist.tsx +2 -0
  117. package/src/page-wizard/steps/BuildPageStep.tsx +18 -25
  118. package/src/page-wizard/steps/CreatePageAndLayoutStep.tsx +16 -18
  119. package/src/types.ts +19 -0
@@ -54,20 +54,20 @@ export function BuildPageStep({
54
54
  console.log(
55
55
  "Building components",
56
56
  createdPageDescriptor,
57
- editContext?.page
57
+ editContext?.page,
58
58
  );
59
59
  // Recursively create components from page model
60
60
  if (pageModel.components && pageModel.components.length > 0) {
61
61
  await pageCreator.createComponentsRecursively(
62
62
  pageModel.components,
63
- "root"
63
+ "root",
64
64
  );
65
65
  }
66
66
  editContext?.requestRefresh();
67
67
  console.log(
68
68
  "Components built",
69
69
  createdPageDescriptor,
70
- editContext?.page
70
+ editContext?.page,
71
71
  );
72
72
  } finally {
73
73
  setIsBuilding(false);
@@ -108,13 +108,13 @@ export function BuildPageStep({
108
108
  editContext?.sessionId ?? "",
109
109
  [],
110
110
  false,
111
- editContext?.contentEditorItem?.language || "en"
111
+ editContext?.contentEditorItem?.language || "en",
112
112
  );
113
113
  if (
114
114
  children.find(
115
115
  (x) =>
116
116
  x.name.toLocaleLowerCase() ===
117
- pageModel.name.trim().toLocaleLowerCase()
117
+ pageModel.name.trim().toLocaleLowerCase(),
118
118
  )
119
119
  ) {
120
120
  valid = false;
@@ -132,7 +132,7 @@ export function BuildPageStep({
132
132
 
133
133
  const checkNameValidDebounced = useDebouncedCallback(
134
134
  async () => checkName(),
135
- 500
135
+ 500,
136
136
  );
137
137
 
138
138
  useEffect(() => {
@@ -148,7 +148,7 @@ export function BuildPageStep({
148
148
  const result = await editContext.operations.createItem(
149
149
  parentItem,
150
150
  wizard.templateId,
151
- pageModel.name
151
+ pageModel.name,
152
152
  );
153
153
  if (!result) return;
154
154
  editContext?.loadItem(result, { addToBrowseHistory: true });
@@ -167,7 +167,7 @@ export function BuildPageStep({
167
167
  const pageCreator = usePageCreator(
168
168
  createdPageDescriptor,
169
169
  wizard,
170
- (pageModel) => setData({ ...data, pageModel })
170
+ (pageModel) => setData({ ...data, pageModel }),
171
171
  );
172
172
 
173
173
  const settingsPanel: SplitterPanel = {
@@ -177,45 +177,38 @@ export function BuildPageStep({
177
177
  content: (
178
178
  <div className="pr-6">
179
179
  <div className="mb-4">
180
- <div className="text-sm font-medium mb-1">
181
- Target Parent Item
182
- </div>
183
- <div className="mb-4 text-xs break-after-all">
180
+ <div className="mb-1 text-sm font-medium">Target Parent Item</div>
181
+ <div className="mb-4 break-after-all text-xs">
184
182
  {fullParentItem?.path}
185
183
  </div>
186
184
  </div>
187
185
  <div className="mb-4">
188
- <label
189
- htmlFor="pageName"
190
- className="block text-sm font-medium mb-1"
191
- >
186
+ <label htmlFor="pageName" className="mb-1 block text-sm font-medium">
192
187
  Page Name
193
188
  </label>
194
189
  <input
195
190
  id="pageName"
196
191
  type="text"
197
- className="w-full p-2 border rounded text-sm"
192
+ className="w-full rounded border p-2 text-sm"
198
193
  value={pageModel.name}
199
194
  onChange={(e) => handleInputChange("name", e.target.value)}
200
195
  placeholder="Enter page name"
201
196
  />
202
197
  {validationMessage && (
203
- <div className="mt-2 text-sm text-red-500">
204
- {validationMessage}
205
- </div>
198
+ <div className="mt-2 text-sm text-red-500">{validationMessage}</div>
206
199
  )}
207
200
  </div>
208
201
 
209
202
  <div className="mb-4">
210
203
  <label
211
204
  htmlFor="metaDescription"
212
- className="block text-sm font-medium mb-1"
205
+ className="mb-1 block text-sm font-medium"
213
206
  >
214
207
  Meta Description
215
208
  </label>
216
209
  <textarea
217
210
  id="metaDescription"
218
- className="w-full p-2 border rounded min-h-[100px] text-sm"
211
+ className="min-h-[100px] w-full rounded border p-2 text-sm"
219
212
  value={pageModel.metaDescription}
220
213
  onChange={(e) =>
221
214
  handleInputChange("metaDescription", e.target.value)
@@ -225,7 +218,7 @@ export function BuildPageStep({
225
218
  </div>
226
219
  <ActionButton
227
220
  disabled={isBuilding || !!validationMessage}
228
- className="flex-1 w-full"
221
+ className="w-full flex-1"
229
222
  onClick={() => {
230
223
  createPage();
231
224
  }}
@@ -247,14 +240,14 @@ export function BuildPageStep({
247
240
  <div className={pageLoaded ? "h-full" : "h-0"}>
248
241
  <PageViewer
249
242
  name="single"
250
- mode={editContext?.previewMode ? "view" : "edit"}
243
+ compareView={false}
251
244
  showFormEditor={false}
252
245
  followEditsDefault={true}
253
246
  pageViewContext={editContext!.pageView}
254
247
  />
255
248
  </div>
256
249
  {isBuilding && !pageLoaded && (
257
- <div className="flex items-center justify-center h-full">
250
+ <div className="flex h-full items-center justify-center">
258
251
  <Generate title="Building page..." />
259
252
  </div>
260
253
  )}
@@ -58,7 +58,7 @@ export function CreatePageAndLayoutStep({
58
58
 
59
59
  await pageCreator.createComponentsRecursively(
60
60
  pageModel.components,
61
- "root"
61
+ "root",
62
62
  );
63
63
  setInternalState((prev: any) => ({
64
64
  ...prev,
@@ -139,7 +139,7 @@ export function CreatePageAndLayoutStep({
139
139
  // Filter the schema based on selected component types and placeholders
140
140
  const filteredSchema = convertPageSchemaToWizardComponents(
141
141
  schema,
142
- data.selectedComponentTypes
142
+ data.selectedComponentTypes,
143
143
  );
144
144
 
145
145
  const localAbortController = new AbortController();
@@ -155,11 +155,11 @@ export function CreatePageAndLayoutStep({
155
155
  Only use component types that are in the page schema.
156
156
 
157
157
  Component types: ${JSON.stringify(
158
- filteredSchema
158
+ filteredSchema,
159
159
  )} Root level component types ${filteredSchema
160
- .filter((c) => c.allowedOnRoot)
161
- .map((c) => c.type)
162
- .join(", ")}
160
+ .filter((c) => c.allowedOnRoot)
161
+ .map((c) => c.type)
162
+ .join(", ")}
163
163
  Tell the user your reasoning in the message field.
164
164
  Fill image ids into picture / image fields.
165
165
  The language of the page is ${pageItem.descriptor.language}.
@@ -185,7 +185,7 @@ export function CreatePageAndLayoutStep({
185
185
 
186
186
  setMessage(newLayout.message);
187
187
  } catch (parseError: unknown) {}
188
- }
188
+ },
189
189
  );
190
190
 
191
191
  const pageModel = JSON.parse(result.content);
@@ -217,7 +217,7 @@ export function CreatePageAndLayoutStep({
217
217
  })
218
218
  }
219
219
  placeholder="Example: Make it modern and minimalist. Focus on images. Include a hero section at the top."
220
- className="w-full px-3 py-2 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 h-48"
220
+ className="h-48 w-full rounded border border-gray-300 px-3 py-2 text-sm focus:ring-1 focus:ring-blue-500 focus:outline-none"
221
221
  />
222
222
  </div>
223
223
  );
@@ -278,12 +278,10 @@ export function CreatePageAndLayoutStep({
278
278
  {
279
279
  name: "layout",
280
280
  content: (
281
- <div
282
- className={classNames("px-6", pageLoaded ? "h-full" : "h-0")}
283
- >
281
+ <div className={classNames("px-6", pageLoaded ? "h-full" : "h-0")}>
284
282
  <PageViewer
285
283
  name="single"
286
- mode={editContext?.previewMode ? "view" : "edit"}
284
+ compareView={false}
287
285
  showFormEditor={false}
288
286
  followEditsDefault={true}
289
287
  pageViewContext={editContext!.pageView}
@@ -306,7 +304,7 @@ export function CreatePageAndLayoutStep({
306
304
  */
307
305
  const mergeLayout = (
308
306
  prev: WizardPageModel | null,
309
- newLayout: WizardPageModel
307
+ newLayout: WizardPageModel,
310
308
  ): WizardPageModel => {
311
309
  if (!prev) return newLayout;
312
310
 
@@ -322,7 +320,7 @@ const mergeLayout = (
322
320
  // Function to merge components recursively
323
321
  const mergeComponents = (
324
322
  existingComponents: any[],
325
- newComponents: any[]
323
+ newComponents: any[],
326
324
  ): any[] => {
327
325
  if (!newComponents?.length) return existingComponents;
328
326
 
@@ -331,7 +329,7 @@ const mergeLayout = (
331
329
  for (const newComp of newComponents) {
332
330
  // Try to find a matching component by type and name
333
331
  const existingIndex = result.findIndex(
334
- (comp) => comp.type === newComp.type && comp.name === newComp.name
332
+ (comp) => comp.type === newComp.type && comp.name === newComp.name,
335
333
  );
336
334
 
337
335
  if (existingIndex >= 0) {
@@ -342,7 +340,7 @@ const mergeLayout = (
342
340
  const mergedFields = [...(existing.fields || [])];
343
341
  for (const newField of newComp.fields || []) {
344
342
  const fieldIndex = mergedFields.findIndex(
345
- (f) => f.name === newField.name
343
+ (f) => f.name === newField.name,
346
344
  );
347
345
  if (fieldIndex >= 0) {
348
346
  mergedFields[fieldIndex].value = newField.value; // Update existing field
@@ -355,7 +353,7 @@ const mergeLayout = (
355
353
  // Recursive merge of children components
356
354
  const mergedChildren = mergeComponents(
357
355
  existing.children || [],
358
- newComp.children || []
356
+ newComp.children || [],
359
357
  );
360
358
 
361
359
  // Create updated component
@@ -377,7 +375,7 @@ const mergeLayout = (
377
375
  // Merge components recursively
378
376
  result.components = mergeComponents(
379
377
  result.components,
380
- newLayout.components || []
378
+ newLayout.components || [],
381
379
  );
382
380
 
383
381
  return result;
package/src/types.ts CHANGED
@@ -298,3 +298,22 @@ export type SystemStatusMessage = {
298
298
  export type SystemStatus = {
299
299
  messages: SystemStatusMessage[];
300
300
  };
301
+
302
+ export interface SuggestedEdit {
303
+ id: string;
304
+ mainItemId: string;
305
+ mainItemLanguage: string;
306
+ mainItemVersion: number;
307
+ itemId: string;
308
+ fieldId: string;
309
+ oldValue: string;
310
+ newValue: string;
311
+ author: string;
312
+ authorDisplayName?: string;
313
+ created: string;
314
+ status: string;
315
+ updatedBy: string;
316
+ updated: string;
317
+ comments?: string;
318
+ type: string;
319
+ }