astro-tractstack 2.2.1 → 2.2.3
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/package.json +1 -1
- package/templates/src/components/codehooks/BunnyVideoSetup.tsx +0 -1
- package/templates/src/components/codehooks/FeaturedArticleSetup.tsx +0 -1
- package/templates/src/components/codehooks/ListContentSetup.tsx +0 -1
- package/templates/src/components/codehooks/ProductCardSetup.tsx +0 -1
- package/templates/src/components/codehooks/ProductGridSetup.tsx +0 -1
- package/templates/src/components/compositor/Compositor.tsx +0 -1
- package/templates/src/components/compositor/Node.tsx +157 -133
- package/templates/src/components/compositor/nodes/tagElements/NodeBasicTag.tsx +2 -4
- package/templates/src/components/edit/Header.tsx +2 -6
- package/templates/src/components/edit/context/ContextPaneConfig_slug.tsx +1 -1
- package/templates/src/components/edit/context/ContextPaneConfig_title.tsx +0 -1
- package/templates/src/components/edit/pane/AddPanePanel_break.tsx +1 -0
- package/templates/src/components/edit/pane/AddPanePanel_new.tsx +8 -12
- package/templates/src/components/edit/pane/AddPanePanel_reuse.tsx +9 -6
- package/templates/src/components/edit/pane/AiRestylePaneModal.tsx +7 -69
- package/templates/src/components/edit/pane/ConfigPanePanel.tsx +2 -2
- package/templates/src/components/edit/pane/PanePanel_impression.tsx +0 -4
- package/templates/src/components/edit/pane/PanePanel_path.tsx +0 -1
- package/templates/src/components/edit/pane/PanePanel_title.tsx +1 -2
- package/templates/src/components/edit/pane/RestylePaneModal.tsx +1 -4
- package/templates/src/components/edit/pane/steps/AiCreativeDesignStep.tsx +0 -3
- package/templates/src/components/edit/pane/steps/AiRefineDesignStep.tsx +2 -2
- package/templates/src/components/edit/pane/steps/AiStandardDesignStep.tsx +173 -80
- package/templates/src/components/edit/pane/steps/CreativeInjectStep.tsx +0 -5
- package/templates/src/components/edit/pane/steps/DesignLibraryStep.tsx +2 -1
- package/templates/src/components/edit/panels/StyleBreakPanel.tsx +1 -4
- package/templates/src/components/edit/panels/StyleCodeHookPanel.tsx +0 -1
- package/templates/src/components/edit/panels/StyleElementPanel.tsx +1 -1
- package/templates/src/components/edit/panels/StyleElementPanel_remove.tsx +1 -4
- package/templates/src/components/edit/panels/StyleElementPanel_update.tsx +3 -3
- package/templates/src/components/edit/panels/StyleImagePanel.tsx +3 -3
- package/templates/src/components/edit/panels/StyleImagePanel_remove.tsx +1 -4
- package/templates/src/components/edit/panels/StyleImagePanel_update.tsx +3 -4
- package/templates/src/components/edit/panels/StyleLiElementPanel_remove.tsx +1 -4
- package/templates/src/components/edit/panels/StyleLiElementPanel_update.tsx +3 -3
- package/templates/src/components/edit/panels/StyleLinkPanel.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLinkPanel_config.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLinkPanel_remove.tsx +1 -1
- package/templates/src/components/edit/panels/StyleLinkPanel_update.tsx +1 -1
- package/templates/src/components/edit/panels/StyleParentPanel.tsx +0 -7
- package/templates/src/components/edit/panels/StyleParentPanel_deleteLayer.tsx +0 -2
- package/templates/src/components/edit/panels/StyleParentPanel_remove.tsx +0 -2
- package/templates/src/components/edit/panels/StyleParentPanel_update.tsx +0 -2
- package/templates/src/components/edit/panels/StyleWidgetPanel_config.tsx +0 -3
- package/templates/src/components/edit/panels/StyleWidgetPanel_remove.tsx +1 -4
- package/templates/src/components/edit/panels/StyleWidgetPanel_update.tsx +3 -4
- package/templates/src/components/edit/panels/StyleWordCarouselPanel.tsx +0 -2
- package/templates/src/components/edit/state/StylesMemory.tsx +3 -9
- package/templates/src/components/edit/storyfragment/StoryFragmentConfigPanel.tsx +0 -1
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_menu.tsx +0 -2
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_og.tsx +0 -2
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_slug.tsx +0 -1
- package/templates/src/components/edit/storyfragment/StoryFragmentPanel_title.tsx +0 -1
- package/templates/src/components/fields/ArtpackImage.tsx +0 -7
- package/templates/src/components/fields/BackgroundImage.tsx +0 -14
- package/templates/src/components/fields/BackgroundImageWrapper.tsx +0 -5
- package/templates/src/components/fields/ImageUpload.tsx +0 -3
- package/templates/src/pages/[...slug]/edit.astro +0 -1
- package/templates/src/pages/sandbox.astro +0 -1
- package/templates/src/stores/nodes.ts +278 -312
- package/templates/src/stores/nodesHistory.ts +59 -24
- package/templates/src/utils/api/setupHelpers.ts +1 -1
- package/templates/src/utils/compositor/aiPaneParser.ts +57 -0
- package/templates/src/utils/compositor/designLibraryHelper.ts +1 -3
- package/templates/src/utils/compositor/htmlAst.ts +109 -2
- package/templates/src/utils/compositor/nodesHelper.ts +1 -9
- package/templates/src/utils/compositor/savePipeline.ts +1 -4
|
@@ -115,7 +115,7 @@ const StyleLiElementUpdatePanel = ({
|
|
|
115
115
|
break;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
ctx.modifyNodes([{ ...targetNode
|
|
118
|
+
ctx.modifyNodes([{ ...targetNode }]);
|
|
119
119
|
} else {
|
|
120
120
|
const markdownNode = cloneDeep(
|
|
121
121
|
allNodes.get(parentNode.id)
|
|
@@ -150,7 +150,7 @@ const StyleLiElementUpdatePanel = ({
|
|
|
150
150
|
break;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
ctx.modifyNodes([{ ...markdownNode
|
|
153
|
+
ctx.modifyNodes([{ ...markdownNode }]);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
setPendingUpdate(null);
|
|
@@ -240,7 +240,7 @@ const StyleLiElementUpdatePanel = ({
|
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
-
ctx.modifyNodes([{ ...targetNode
|
|
243
|
+
ctx.modifyNodes([{ ...targetNode }]);
|
|
244
244
|
setIsOverridden(checked);
|
|
245
245
|
},
|
|
246
246
|
[node, className, parentNode, childId, isContainer]
|
|
@@ -256,7 +256,7 @@ const StyleLinkPanel = ({ node }: BasePanelProps) => {
|
|
|
256
256
|
callbackPayload: linkNode.buttonPayload?.callbackPayload || '',
|
|
257
257
|
};
|
|
258
258
|
|
|
259
|
-
ctx.modifyNodes([{ ...linkNode
|
|
259
|
+
ctx.modifyNodes([{ ...linkNode }]);
|
|
260
260
|
|
|
261
261
|
settingsPanelStore.set({
|
|
262
262
|
action: 'style-link',
|
|
@@ -109,7 +109,7 @@ const StyleLinkConfigPanel = ({ node }: StyleLinkConfigPanelProps) => {
|
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
ctx.modifyNodes([{ ...linkNode
|
|
112
|
+
ctx.modifyNodes([{ ...linkNode }]);
|
|
113
113
|
} catch (error) {
|
|
114
114
|
console.error('Error in updateNode:', error);
|
|
115
115
|
}
|
|
@@ -48,7 +48,7 @@ const StyleLinkRemovePanel = ({ node, className }: BasePanelProps) => {
|
|
|
48
48
|
delete linkNode.buttonPayload.buttonClasses[className];
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
ctx.modifyNodes([{ ...linkNode
|
|
51
|
+
ctx.modifyNodes([{ ...linkNode }]);
|
|
52
52
|
resetStore();
|
|
53
53
|
};
|
|
54
54
|
|
|
@@ -161,7 +161,6 @@ const StyleParentPanel = ({
|
|
|
161
161
|
{
|
|
162
162
|
...targetNode,
|
|
163
163
|
parentClasses: newParentClasses,
|
|
164
|
-
isChanged: true,
|
|
165
164
|
} as StyleableNode,
|
|
166
165
|
]);
|
|
167
166
|
|
|
@@ -195,9 +194,7 @@ const StyleParentPanel = ({
|
|
|
195
194
|
|
|
196
195
|
const updatedNode = cloneDeep(selectedTargetNode);
|
|
197
196
|
updatedNode.gridColumns[viewport] = count;
|
|
198
|
-
updatedNode.isChanged = true;
|
|
199
197
|
ctx.modifyNodes([updatedNode]);
|
|
200
|
-
ctx.notifyNode('root');
|
|
201
198
|
};
|
|
202
199
|
|
|
203
200
|
const handleClickDeleteLayer = () => {
|
|
@@ -226,9 +223,7 @@ const StyleParentPanel = ({
|
|
|
226
223
|
} else if (typeof updatedPaneNode.bgColour === 'string' && !color) {
|
|
227
224
|
delete updatedPaneNode.bgColour;
|
|
228
225
|
}
|
|
229
|
-
updatedPaneNode.isChanged = true;
|
|
230
226
|
ctx.modifyNodes([updatedPaneNode]);
|
|
231
|
-
ctx.notifyNode('root');
|
|
232
227
|
};
|
|
233
228
|
|
|
234
229
|
const handleVisibilityChange = (
|
|
@@ -239,9 +234,7 @@ const StyleParentPanel = ({
|
|
|
239
234
|
viewport.charAt(0).toUpperCase() + viewport.slice(1)
|
|
240
235
|
}` as VisibilityKey;
|
|
241
236
|
updatedNode[key] = !updatedNode[key];
|
|
242
|
-
updatedNode.isChanged = true;
|
|
243
237
|
ctx.modifyNodes([updatedNode]);
|
|
244
|
-
ctx.notifyNode('root');
|
|
245
238
|
};
|
|
246
239
|
|
|
247
240
|
const setView = (newView: PanelView) => {
|
|
@@ -67,7 +67,6 @@ const StyleParentDeleteLayerPanel = ({ node, layer }: ParentBasePanelProps) => {
|
|
|
67
67
|
const updatedNode = {
|
|
68
68
|
...nodeToUpdate,
|
|
69
69
|
parentClasses: [emptyLayer],
|
|
70
|
-
isChanged: true,
|
|
71
70
|
};
|
|
72
71
|
|
|
73
72
|
ctx.modifyNodes([updatedNode]);
|
|
@@ -84,7 +83,6 @@ const StyleParentDeleteLayerPanel = ({ node, layer }: ParentBasePanelProps) => {
|
|
|
84
83
|
const updatedNode = {
|
|
85
84
|
...nodeToUpdate,
|
|
86
85
|
parentClasses: newParentClasses,
|
|
87
|
-
isChanged: true,
|
|
88
86
|
};
|
|
89
87
|
|
|
90
88
|
ctx.modifyNodes([updatedNode]);
|
|
@@ -152,9 +152,7 @@ const StyleParentPanelUpdate = ({
|
|
|
152
152
|
|
|
153
153
|
classesTarget[viewport][className] = value;
|
|
154
154
|
|
|
155
|
-
updatedNode.isChanged = true;
|
|
156
155
|
ctx.modifyNodes([updatedNode]);
|
|
157
|
-
ctx.notifyNode('root');
|
|
158
156
|
}
|
|
159
157
|
},
|
|
160
158
|
[styleableNode, layer, className, targetProperty, values, ctx]
|
|
@@ -77,9 +77,6 @@ function StyleWidgetConfigPanel({ node }: StyleWidgetConfigPanelProps) {
|
|
|
77
77
|
const paramsForCopy = stringParams.slice(0, widgetInfo.parameters.length);
|
|
78
78
|
newNode.copy = `${widgetType}(${paramsForCopy.join('|')})`;
|
|
79
79
|
|
|
80
|
-
// Mark the node as changed
|
|
81
|
-
newNode.isChanged = true;
|
|
82
|
-
|
|
83
80
|
// Update the node in the store
|
|
84
81
|
getCtx().modifyNodes([newNode]);
|
|
85
82
|
};
|
|
@@ -108,10 +108,7 @@ const StyleWidgetRemovePanel = ({
|
|
|
108
108
|
delete targetNode.overrideClasses;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
ctx.modifyNodes([
|
|
112
|
-
{ ...targetNode, isChanged: true },
|
|
113
|
-
{ ...deepParentClone, isChanged: true },
|
|
114
|
-
]);
|
|
111
|
+
ctx.modifyNodes([{ ...targetNode }, { ...deepParentClone }]);
|
|
115
112
|
resetStore();
|
|
116
113
|
};
|
|
117
114
|
|
|
@@ -12,7 +12,6 @@ import type {
|
|
|
12
12
|
BasePanelProps,
|
|
13
13
|
FlatNode,
|
|
14
14
|
MarkdownPaneFragmentNode,
|
|
15
|
-
GridLayoutNode,
|
|
16
15
|
} from '@/types/compositorTypes';
|
|
17
16
|
|
|
18
17
|
const StyleWidgetUpdatePanel = ({
|
|
@@ -119,7 +118,7 @@ const StyleWidgetUpdatePanel = ({
|
|
|
119
118
|
break;
|
|
120
119
|
}
|
|
121
120
|
|
|
122
|
-
ctx.modifyNodes([{ ...targetNode
|
|
121
|
+
ctx.modifyNodes([{ ...targetNode }]);
|
|
123
122
|
} else {
|
|
124
123
|
const markdownNode = cloneDeep(
|
|
125
124
|
allNodes.get(parentNode.id)
|
|
@@ -154,7 +153,7 @@ const StyleWidgetUpdatePanel = ({
|
|
|
154
153
|
break;
|
|
155
154
|
}
|
|
156
155
|
|
|
157
|
-
ctx.modifyNodes([{ ...markdownNode
|
|
156
|
+
ctx.modifyNodes([{ ...markdownNode }]);
|
|
158
157
|
}
|
|
159
158
|
|
|
160
159
|
setPendingUpdate(null);
|
|
@@ -236,7 +235,7 @@ const StyleWidgetUpdatePanel = ({
|
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
237
|
|
|
239
|
-
ctx.modifyNodes([{ ...targetNode
|
|
238
|
+
ctx.modifyNodes([{ ...targetNode }]);
|
|
240
239
|
setIsOverridden(checked);
|
|
241
240
|
},
|
|
242
241
|
[node, className, parentNode]
|
|
@@ -70,7 +70,6 @@ const StyleWordCarouselPanel = ({ node }: StyleWordCarouselPanelProps) => {
|
|
|
70
70
|
words: wordsArray,
|
|
71
71
|
speed: currentSpeed,
|
|
72
72
|
},
|
|
73
|
-
isChanged: true,
|
|
74
73
|
} as FlatNode,
|
|
75
74
|
]);
|
|
76
75
|
};
|
|
@@ -117,7 +116,6 @@ const StyleWordCarouselPanel = ({ node }: StyleWordCarouselPanelProps) => {
|
|
|
117
116
|
{
|
|
118
117
|
...currentNode,
|
|
119
118
|
wordCarouselPayload: undefined,
|
|
120
|
-
isChanged: true,
|
|
121
119
|
} as FlatNode,
|
|
122
120
|
]);
|
|
123
121
|
}
|
|
@@ -179,10 +179,7 @@ export const StylesMemory = ({ node, parentNode }: StylesMemoryProps) => {
|
|
|
179
179
|
if (typeof memoryState.bgColour === 'string') {
|
|
180
180
|
updatedParent.bgColour = memoryState.bgColour;
|
|
181
181
|
}
|
|
182
|
-
ctx.modifyNodes([
|
|
183
|
-
{ ...updatedNode, isChanged: true },
|
|
184
|
-
{ ...updatedParent, isChanged: true },
|
|
185
|
-
]);
|
|
182
|
+
ctx.modifyNodes([{ ...updatedNode }, { ...updatedParent }]);
|
|
186
183
|
break;
|
|
187
184
|
}
|
|
188
185
|
case 'button': {
|
|
@@ -198,7 +195,7 @@ export const StylesMemory = ({ node, parentNode }: StylesMemoryProps) => {
|
|
|
198
195
|
buttonHoverClasses: cloneDeep(buttonStyles.buttonHoverClasses),
|
|
199
196
|
};
|
|
200
197
|
|
|
201
|
-
ctx.modifyNodes([{ ...updatedNode
|
|
198
|
+
ctx.modifyNodes([{ ...updatedNode }]);
|
|
202
199
|
const currentSignal = settingsPanelStore.get();
|
|
203
200
|
if (currentSignal) {
|
|
204
201
|
settingsPanelStore.set({ ...currentSignal });
|
|
@@ -224,10 +221,7 @@ export const StylesMemory = ({ node, parentNode }: StylesMemoryProps) => {
|
|
|
224
221
|
updatedParent.defaultClasses[node.tagName] = cloneDeep(memoryStyles);
|
|
225
222
|
delete updatedNode.overrideClasses;
|
|
226
223
|
|
|
227
|
-
ctx.modifyNodes([
|
|
228
|
-
{ ...updatedParent, isChanged: true },
|
|
229
|
-
{ ...updatedNode, isChanged: true },
|
|
230
|
-
]);
|
|
224
|
+
ctx.modifyNodes([{ ...updatedParent }, { ...updatedNode }]);
|
|
231
225
|
const currentSignal = settingsPanelStore.get();
|
|
232
226
|
if (currentSignal) {
|
|
233
227
|
settingsPanelStore.set({ ...currentSignal });
|
|
@@ -125,7 +125,6 @@ const StoryFragmentMenuPanel = ({
|
|
|
125
125
|
const updatedNode = {
|
|
126
126
|
...cloneDeep(storyfragmentNode),
|
|
127
127
|
menuId: menuId,
|
|
128
|
-
isChanged: true,
|
|
129
128
|
};
|
|
130
129
|
ctx.modifyNodes([updatedNode]);
|
|
131
130
|
};
|
|
@@ -134,7 +133,6 @@ const StoryFragmentMenuPanel = ({
|
|
|
134
133
|
const updatedNode = {
|
|
135
134
|
...cloneDeep(storyfragmentNode),
|
|
136
135
|
menuId: null,
|
|
137
|
-
isChanged: true,
|
|
138
136
|
};
|
|
139
137
|
ctx.modifyNodes([updatedNode]);
|
|
140
138
|
setSelectedMenuId(null);
|
|
@@ -453,7 +453,6 @@ const StoryFragmentOpenGraphPanel = ({
|
|
|
453
453
|
...storyfragmentNode,
|
|
454
454
|
title: draftTitle,
|
|
455
455
|
...(newSlug ? { slug: newSlug } : {}),
|
|
456
|
-
isChanged: true,
|
|
457
456
|
});
|
|
458
457
|
ctx.modifyNodes([updatedNode]);
|
|
459
458
|
|
|
@@ -482,7 +481,6 @@ const StoryFragmentOpenGraphPanel = ({
|
|
|
482
481
|
const updatedNode = cloneDeep({
|
|
483
482
|
...currentNode,
|
|
484
483
|
changed: new Date(),
|
|
485
|
-
isChanged: true,
|
|
486
484
|
});
|
|
487
485
|
ctx.modifyNodes([updatedNode]);
|
|
488
486
|
}
|
|
@@ -149,11 +149,9 @@ const ArtpackImage = ({ paneId, onUpdate }: ArtpackImageProps) => {
|
|
|
149
149
|
objectFit,
|
|
150
150
|
position: artpackNode?.position || 'background',
|
|
151
151
|
size: artpackNode?.size || 'equal',
|
|
152
|
-
isChanged: true,
|
|
153
152
|
};
|
|
154
153
|
ctx.addNode(updatedArtNode);
|
|
155
154
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
156
|
-
updatedPaneNode.isChanged = true;
|
|
157
155
|
ctx.modifyNodes([updatedPaneNode]);
|
|
158
156
|
setArtpackNode(updatedArtNode);
|
|
159
157
|
setIsModalOpen(false);
|
|
@@ -172,7 +170,6 @@ const ArtpackImage = ({ paneId, onUpdate }: ArtpackImageProps) => {
|
|
|
172
170
|
if (!artpackNode) return;
|
|
173
171
|
ctx.deleteNode(artpackNode.id);
|
|
174
172
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
175
|
-
updatedPaneNode.isChanged = true;
|
|
176
173
|
ctx.modifyNodes([updatedPaneNode]);
|
|
177
174
|
setArtpackNode(null);
|
|
178
175
|
setSelectedCollection('');
|
|
@@ -188,9 +185,7 @@ const ArtpackImage = ({ paneId, onUpdate }: ArtpackImageProps) => {
|
|
|
188
185
|
if (artpackNode) {
|
|
189
186
|
const updatedArtNode = cloneDeep(artpackNode);
|
|
190
187
|
updatedArtNode.objectFit = newObjectFit;
|
|
191
|
-
updatedArtNode.isChanged = true;
|
|
192
188
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
193
|
-
updatedPaneNode.isChanged = true;
|
|
194
189
|
ctx.modifyNodes([updatedArtNode, updatedPaneNode]);
|
|
195
190
|
}
|
|
196
191
|
};
|
|
@@ -205,9 +200,7 @@ const ArtpackImage = ({ paneId, onUpdate }: ArtpackImageProps) => {
|
|
|
205
200
|
if (viewport === 'mobile') updatedArtNode.hiddenViewportMobile = hidden;
|
|
206
201
|
if (viewport === 'tablet') updatedArtNode.hiddenViewportTablet = hidden;
|
|
207
202
|
if (viewport === 'desktop') updatedArtNode.hiddenViewportDesktop = hidden;
|
|
208
|
-
updatedArtNode.isChanged = true;
|
|
209
203
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
210
|
-
updatedPaneNode.isChanged = true;
|
|
211
204
|
ctx.modifyNodes([updatedArtNode, updatedPaneNode]);
|
|
212
205
|
}
|
|
213
206
|
};
|
|
@@ -159,11 +159,9 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
159
159
|
objectFit,
|
|
160
160
|
position: bgImageNode?.position || 'background',
|
|
161
161
|
size: bgImageNode?.size || 'equal',
|
|
162
|
-
isChanged: true,
|
|
163
162
|
};
|
|
164
163
|
ctx.addNode(updatedBgNode);
|
|
165
164
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
166
|
-
updatedPaneNode.isChanged = true;
|
|
167
165
|
ctx.modifyNodes([updatedPaneNode]);
|
|
168
166
|
setBgImageNode(updatedBgNode);
|
|
169
167
|
setLocalAltDescription(updatedBgNode.alt || '');
|
|
@@ -175,7 +173,6 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
175
173
|
});
|
|
176
174
|
}
|
|
177
175
|
onUpdate();
|
|
178
|
-
ctx.notifyNode('root');
|
|
179
176
|
};
|
|
180
177
|
|
|
181
178
|
const handleFileChange = async (event: ChangeEvent<HTMLInputElement>) => {
|
|
@@ -217,16 +214,13 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
217
214
|
objectFit,
|
|
218
215
|
position: bgImageNode?.position || 'background',
|
|
219
216
|
size: bgImageNode?.size || 'equal',
|
|
220
|
-
isChanged: true,
|
|
221
217
|
};
|
|
222
218
|
ctx.addNode(updatedBgNode);
|
|
223
219
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
224
|
-
updatedPaneNode.isChanged = true;
|
|
225
220
|
ctx.modifyNodes([updatedPaneNode]);
|
|
226
221
|
setBgImageNode(updatedBgNode);
|
|
227
222
|
setLocalAltDescription(defaultAlt);
|
|
228
223
|
onUpdate();
|
|
229
|
-
ctx.notifyNode('root');
|
|
230
224
|
} catch (err) {
|
|
231
225
|
setImageError('Failed to process image');
|
|
232
226
|
console.error('[BackgroundImage] Error:', err);
|
|
@@ -239,21 +233,17 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
239
233
|
if (!bgImageNode) return;
|
|
240
234
|
ctx.deleteNode(bgImageNode.id);
|
|
241
235
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
242
|
-
updatedPaneNode.isChanged = true;
|
|
243
236
|
ctx.modifyNodes([updatedPaneNode]);
|
|
244
237
|
setBgImageNode(null);
|
|
245
238
|
setLocalAltDescription('');
|
|
246
239
|
onUpdate();
|
|
247
|
-
ctx.notifyNode('root');
|
|
248
240
|
};
|
|
249
241
|
|
|
250
242
|
const handleAltDescriptionBlur = () => {
|
|
251
243
|
if (bgImageNode && localAltDescription !== bgImageNode.alt) {
|
|
252
244
|
const updatedBgNode = cloneDeep(bgImageNode);
|
|
253
245
|
updatedBgNode.alt = localAltDescription;
|
|
254
|
-
updatedBgNode.isChanged = true;
|
|
255
246
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
256
|
-
updatedPaneNode.isChanged = true;
|
|
257
247
|
ctx.modifyNodes([updatedBgNode, updatedPaneNode]);
|
|
258
248
|
}
|
|
259
249
|
};
|
|
@@ -265,9 +255,7 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
265
255
|
if (bgImageNode) {
|
|
266
256
|
const updatedBgNode = cloneDeep(bgImageNode);
|
|
267
257
|
updatedBgNode.objectFit = newObjectFit;
|
|
268
|
-
updatedBgNode.isChanged = true;
|
|
269
258
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
270
|
-
updatedPaneNode.isChanged = true;
|
|
271
259
|
ctx.modifyNodes([updatedBgNode, updatedPaneNode]);
|
|
272
260
|
}
|
|
273
261
|
};
|
|
@@ -282,9 +270,7 @@ const BackgroundImage = ({ paneId, onUpdate }: BackgroundImageProps) => {
|
|
|
282
270
|
if (viewport === 'mobile') updatedBgNode.hiddenViewportMobile = hidden;
|
|
283
271
|
if (viewport === 'tablet') updatedBgNode.hiddenViewportTablet = hidden;
|
|
284
272
|
if (viewport === 'desktop') updatedBgNode.hiddenViewportDesktop = hidden;
|
|
285
|
-
updatedBgNode.isChanged = true;
|
|
286
273
|
const updatedPaneNode = cloneDeep(paneNode);
|
|
287
|
-
updatedPaneNode.isChanged = true;
|
|
288
274
|
ctx.modifyNodes([updatedBgNode, updatedPaneNode]);
|
|
289
275
|
}
|
|
290
276
|
};
|
|
@@ -86,7 +86,6 @@ const BackgroundImageWrapper = ({
|
|
|
86
86
|
if (color) updatedPaneNode.bgColour = color;
|
|
87
87
|
else if (typeof updatedPaneNode.bgColour === `string` && !color)
|
|
88
88
|
delete updatedPaneNode.bgColour;
|
|
89
|
-
updatedPaneNode.isChanged = true;
|
|
90
89
|
ctx.modifyNodes([updatedPaneNode]);
|
|
91
90
|
};
|
|
92
91
|
|
|
@@ -96,9 +95,7 @@ const BackgroundImageWrapper = ({
|
|
|
96
95
|
if (!bgNode) return;
|
|
97
96
|
const updatedBgNode = cloneDeep(bgNode);
|
|
98
97
|
updatedBgNode.position = newPosition;
|
|
99
|
-
updatedBgNode.isChanged = true;
|
|
100
98
|
const updatedPaneNode = cloneDeep(allNodes.get(paneId) as PaneNode);
|
|
101
|
-
updatedPaneNode.isChanged = true;
|
|
102
99
|
ctx.modifyNodes([updatedBgNode, updatedPaneNode]);
|
|
103
100
|
onUpdate();
|
|
104
101
|
};
|
|
@@ -107,9 +104,7 @@ const BackgroundImageWrapper = ({
|
|
|
107
104
|
if (!bgNode) return;
|
|
108
105
|
const updatedBgNode = cloneDeep(bgNode);
|
|
109
106
|
updatedBgNode.size = newSize;
|
|
110
|
-
updatedBgNode.isChanged = true;
|
|
111
107
|
const updatedPaneNode = cloneDeep(allNodes.get(paneId) as PaneNode);
|
|
112
|
-
updatedPaneNode.isChanged = true;
|
|
113
108
|
ctx.modifyNodes([updatedBgNode, updatedPaneNode]);
|
|
114
109
|
onUpdate();
|
|
115
110
|
};
|
|
@@ -158,7 +158,6 @@ export const ImageUpload = ({
|
|
|
158
158
|
if (selected.srcSet) updatedNode.srcSet = selected.srcSet;
|
|
159
159
|
updatedNode.alt = selected.altDescription || missingAlt;
|
|
160
160
|
delete updatedNode.base64Data; // Remove base64Data for existing files
|
|
161
|
-
updatedNode.isChanged = true;
|
|
162
161
|
ctx.modifyNodes([updatedNode]);
|
|
163
162
|
}
|
|
164
163
|
}
|
|
@@ -206,7 +205,6 @@ export const ImageUpload = ({
|
|
|
206
205
|
((updatedNode.fileId = ulid()), (updatedNode.src = base64)); // Set src to base64 for immediate display
|
|
207
206
|
updatedNode.base64Data = base64;
|
|
208
207
|
updatedNode.alt = defaultAlt;
|
|
209
|
-
updatedNode.isChanged = true;
|
|
210
208
|
ctx.modifyNodes([updatedNode]);
|
|
211
209
|
}
|
|
212
210
|
} catch (err) {
|
|
@@ -226,7 +224,6 @@ export const ImageUpload = ({
|
|
|
226
224
|
updatedNode.src = '/static.jpg';
|
|
227
225
|
updatedNode.alt =
|
|
228
226
|
"This is a placeholder for an image that hasn't yet been uploaded";
|
|
229
|
-
updatedNode.isChanged = true;
|
|
230
227
|
ctx.modifyNodes([updatedNode]);
|
|
231
228
|
}
|
|
232
229
|
setCurrentImage('/static.jpg');
|