@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.
- package/dist/config/config.js +1 -1
- package/dist/config/config.js.map +1 -1
- package/dist/editor/EditorWarnings.js +1 -1
- package/dist/editor/EditorWarnings.js.map +1 -1
- package/dist/editor/FieldList.js +1 -1
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +3 -3
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/Titlebar.js +1 -1
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/client/EditorClient.js +71 -31
- package/dist/editor/client/EditorClient.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +9 -3
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/operations.d.ts +5 -1
- package/dist/editor/client/operations.js +97 -3
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/component-designer/ComponentDesigner.js +1 -1
- package/dist/editor/component-designer/ComponentDesigner.js.map +1 -1
- package/dist/editor/menubar/LanguageSelector.js +3 -3
- package/dist/editor/menubar/LanguageSelector.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +1 -1
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/PageViewerControls.js +12 -7
- package/dist/editor/menubar/PageViewerControls.js.map +1 -1
- package/dist/editor/menubar/Separator.js +1 -1
- package/dist/editor/menubar/VersionSelector.js +1 -1
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.d.ts +2 -2
- package/dist/editor/page-editor-chrome/FrameMenu.js +21 -15
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenus.d.ts +2 -2
- package/dist/editor/page-editor-chrome/FrameMenus.js +2 -2
- package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.d.ts +2 -2
- package/dist/editor/page-editor-chrome/InlineEditor.js +175 -17
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +2 -2
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +2 -2
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.d.ts +2 -1
- package/dist/editor/page-viewer/EditorForm.js +9 -8
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +2 -2
- package/dist/editor/page-viewer/MiniMap.js +2 -2
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.d.ts +2 -2
- package/dist/editor/page-viewer/PageViewer.js +3 -3
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +2 -2
- package/dist/editor/page-viewer/PageViewerFrame.js +12 -12
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/reviews/Comments.d.ts +2 -0
- package/dist/editor/reviews/Comments.js +26 -9
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/DiffView.d.ts +17 -0
- package/dist/editor/reviews/DiffView.js +57 -0
- package/dist/editor/reviews/DiffView.js.map +1 -0
- package/dist/editor/reviews/SuggestedEdit.d.ts +4 -0
- package/dist/editor/reviews/SuggestedEdit.js +180 -0
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -0
- package/dist/editor/services/suggestedEditsService.d.ts +17 -0
- package/dist/editor/services/suggestedEditsService.js +26 -0
- package/dist/editor/services/suggestedEditsService.js.map +1 -0
- package/dist/editor/ui/PerfectTree.js +3 -3
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/SimpleIconButton.js +3 -1
- package/dist/editor/ui/SimpleIconButton.js.map +1 -1
- package/dist/editor/views/CompareView.js +4 -13
- package/dist/editor/views/CompareView.js.map +1 -1
- package/dist/editor/views/EditView.js +2 -2
- package/dist/editor/views/EditView.js.map +1 -1
- package/dist/editor/views/SingleEditView.d.ts +2 -2
- package/dist/editor/views/SingleEditView.js +2 -2
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/lib/safelist.js +1 -1
- package/dist/lib/safelist.js.map +1 -1
- package/dist/page-wizard/steps/BuildPageStep.js +2 -2
- package/dist/page-wizard/steps/BuildPageStep.js.map +1 -1
- package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +2 -2
- package/dist/page-wizard/steps/CreatePageAndLayoutStep.js.map +1 -1
- package/dist/styles.css +36 -2
- package/dist/types.d.ts +18 -0
- package/package.json +4 -1
- package/src/config/config.tsx +2 -2
- package/src/editor/EditorWarnings.tsx +2 -2
- package/src/editor/FieldList.tsx +6 -6
- package/src/editor/FieldListFieldWithFallbacks.tsx +9 -9
- package/src/editor/Titlebar.tsx +4 -4
- package/src/editor/client/EditorClient.tsx +83 -51
- package/src/editor/client/editContext.ts +12 -3
- package/src/editor/client/operations.ts +146 -9
- package/src/editor/component-designer/ComponentDesigner.tsx +1 -1
- package/src/editor/menubar/LanguageSelector.tsx +6 -6
- package/src/editor/menubar/PageSelector.tsx +11 -11
- package/src/editor/menubar/PageViewerControls.tsx +49 -23
- package/src/editor/menubar/Separator.tsx +2 -2
- package/src/editor/menubar/VersionSelector.tsx +1 -1
- package/src/editor/page-editor-chrome/FrameMenu.tsx +18 -17
- package/src/editor/page-editor-chrome/FrameMenus.tsx +6 -6
- package/src/editor/page-editor-chrome/InlineEditor.tsx +233 -22
- package/src/editor/page-editor-chrome/PageEditorChrome.tsx +11 -14
- package/src/editor/page-viewer/EditorForm.tsx +15 -9
- package/src/editor/page-viewer/MiniMap.tsx +4 -4
- package/src/editor/page-viewer/PageViewer.tsx +6 -6
- package/src/editor/page-viewer/PageViewerFrame.tsx +19 -13
- package/src/editor/reviews/Comments.tsx +56 -15
- package/src/editor/reviews/DiffView.tsx +109 -0
- package/src/editor/reviews/SuggestedEdit.tsx +316 -0
- package/src/editor/services/suggestedEditsService.ts +39 -0
- package/src/editor/ui/PerfectTree.tsx +5 -5
- package/src/editor/ui/SimpleIconButton.tsx +5 -3
- package/src/editor/views/CompareView.tsx +13 -24
- package/src/editor/views/EditView.tsx +2 -2
- package/src/editor/views/SingleEditView.tsx +3 -3
- package/src/lib/safelist.tsx +2 -0
- package/src/page-wizard/steps/BuildPageStep.tsx +18 -25
- package/src/page-wizard/steps/CreatePageAndLayoutStep.tsx +16 -18
- 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
|
|
181
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
|
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
|
-
|
|
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
|
+
}
|