@alpaca-editor/core 1.0.4092 → 1.0.4094
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/components/ui/card.js +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/popover.d.ts +3 -1
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/select.js +5 -3
- package/dist/components/ui/select.js.map +1 -1
- package/dist/config/config.js +1 -9
- package/dist/config/config.js.map +1 -1
- package/dist/editor/Editor.js +1 -1
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FieldList.js +1 -1
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListField.js +9 -3
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/ItemInfo.js +1 -1
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +6 -6
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +32 -3
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +2 -2
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/client/itemsRepository.js +2 -2
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/control-center/setup-steps/AiSetupStep.js +251 -7
- package/dist/editor/control-center/setup-steps/AiSetupStep.js.map +1 -1
- package/dist/editor/field-types/DateFieldEditor.js +1 -1
- package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DropLinkEditor.js +1 -1
- package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
- package/dist/editor/field-types/DropListEditor.js +1 -1
- package/dist/editor/field-types/DropListEditor.js.map +1 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js +1 -1
- package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/LinkFieldEditor.js +2 -1
- package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.js +75 -70
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +2 -1
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
- package/dist/editor/page-editor-chrome/InlineEditor.js +8 -0
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +8 -0
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +2 -1
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +1 -5
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +17 -0
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/pageModel.d.ts +1 -0
- package/dist/editor/services/aiService.d.ts +1 -0
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +1 -0
- package/dist/editor/ui/Splitter.js +9 -4
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/page-wizard/steps/ComponentTypesSelector.js +1 -1
- package/dist/page-wizard/steps/ComponentTypesSelector.js.map +1 -1
- package/dist/page-wizard/steps/ContentStep.js +81 -69
- package/dist/page-wizard/steps/ContentStep.js.map +1 -1
- package/dist/page-wizard/utils/dataAccessor.js +11 -5
- package/dist/page-wizard/utils/dataAccessor.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/styles.css +12 -3
- package/package.json +1 -1
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/input.tsx +1 -1
- package/src/components/ui/popover.tsx +22 -15
- package/src/components/ui/select.tsx +44 -29
- package/src/config/config.tsx +0 -12
- package/src/editor/Editor.tsx +1 -1
- package/src/editor/FieldList.tsx +4 -1
- package/src/editor/FieldListField.tsx +10 -4
- package/src/editor/ItemInfo.tsx +1 -1
- package/src/editor/LinkEditorDialog.tsx +25 -19
- package/src/editor/ai/AgentTerminal.tsx +58 -28
- package/src/editor/ai/AiResponseMessage.tsx +4 -4
- package/src/editor/client/itemsRepository.ts +2 -3
- package/src/editor/control-center/setup-steps/AiSetupStep.tsx +362 -40
- package/src/editor/field-types/DateFieldEditor.tsx +2 -1
- package/src/editor/field-types/DateTimeFieldEditor.tsx +1 -1
- package/src/editor/field-types/DropLinkEditor.tsx +8 -6
- package/src/editor/field-types/DropListEditor.tsx +11 -9
- package/src/editor/field-types/InternalLinkFieldEditor.tsx +1 -1
- package/src/editor/field-types/LinkFieldEditor.tsx +2 -1
- package/src/editor/field-types/TreeListEditor.tsx +178 -178
- package/src/editor/menubar/PageSelector.tsx +3 -3
- package/src/editor/page-editor-chrome/FrameMenu.tsx +1 -1
- package/src/editor/page-editor-chrome/InlineEditor.tsx +10 -0
- package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +11 -0
- package/src/editor/page-viewer/DeviceToolbar.tsx +9 -2
- package/src/editor/page-viewer/EditorForm.tsx +1 -6
- package/src/editor/page-viewer/PageViewerFrame.tsx +28 -0
- package/src/editor/pageModel.ts +1 -0
- package/src/editor/services/aiService.ts +2 -0
- package/src/editor/ui/Splitter.tsx +26 -2
- package/src/page-wizard/steps/ComponentTypesSelector.tsx +1 -1
- package/src/page-wizard/steps/ContentStep.tsx +129 -106
- package/src/page-wizard/utils/dataAccessor.ts +13 -5
- package/src/revision.ts +2 -2
|
@@ -47,7 +47,7 @@ export function LinkEditorDialog({
|
|
|
47
47
|
|
|
48
48
|
useEffect(() => {
|
|
49
49
|
setUrl(linkValue.url);
|
|
50
|
-
setTargetWindow(linkValue.target);
|
|
50
|
+
setTargetWindow(linkValue.target ?? "");
|
|
51
51
|
|
|
52
52
|
if (linkValue.type == "external") setActiveTabIndex(1);
|
|
53
53
|
else setActiveTabIndex(0);
|
|
@@ -116,9 +116,8 @@ export function LinkEditorDialog({
|
|
|
116
116
|
id: "external",
|
|
117
117
|
label: "External",
|
|
118
118
|
content: (
|
|
119
|
-
<div className="flex-1">
|
|
120
|
-
|
|
121
|
-
<label className="mt-4 block text-sm">Url:</label>
|
|
119
|
+
<div className="flex flex-1 flex-col gap-2 p-2">
|
|
120
|
+
<label className="mt-4 block text-xs">Url</label>
|
|
122
121
|
<Input
|
|
123
122
|
value={url || ""}
|
|
124
123
|
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
@@ -147,18 +146,20 @@ export function LinkEditorDialog({
|
|
|
147
146
|
<DialogHeader>
|
|
148
147
|
<DialogTitle>Select link target</DialogTitle>
|
|
149
148
|
</DialogHeader>
|
|
150
|
-
<div className="flex h-full flex-col items-stretch
|
|
151
|
-
{linkValue && (
|
|
152
|
-
<SimpleTabs
|
|
153
|
-
tabs={tabs}
|
|
154
|
-
activeTab={activeTabIndex}
|
|
155
|
-
setActiveTab={setActiveTabIndex}
|
|
156
|
-
className="flex items-center justify-center border-b border-gray-200 pt-2 text-xs"
|
|
157
|
-
tabClassName="text-xs"
|
|
158
|
-
/>
|
|
159
|
-
)}
|
|
149
|
+
<div className="flex h-full flex-col items-stretch">
|
|
160
150
|
<div className="flex flex-1 gap-2 bg-gray-50">
|
|
161
|
-
<div className="
|
|
151
|
+
<div className="flex min-w-0 flex-1 flex-col">
|
|
152
|
+
{linkValue && (
|
|
153
|
+
<SimpleTabs
|
|
154
|
+
tabs={tabs}
|
|
155
|
+
activeTab={activeTabIndex}
|
|
156
|
+
setActiveTab={setActiveTabIndex}
|
|
157
|
+
className="flex items-center justify-center border-b border-gray-200 pt-2 text-xs"
|
|
158
|
+
tabClassName="text-xs"
|
|
159
|
+
/>
|
|
160
|
+
)}
|
|
161
|
+
</div>
|
|
162
|
+
<div className="flex h-full w-64 shrink-0 flex-col justify-center border-l border-gray-200 p-3">
|
|
162
163
|
<div className="flex flex-col gap-2">
|
|
163
164
|
<label className="text-xs">Query String</label>
|
|
164
165
|
<Input
|
|
@@ -168,22 +169,25 @@ export function LinkEditorDialog({
|
|
|
168
169
|
}
|
|
169
170
|
className="text-sm"
|
|
170
171
|
/>
|
|
171
|
-
|
|
172
|
+
</div>
|
|
173
|
+
<div className="mt-2 flex flex-col gap-2">
|
|
174
|
+
<label className="text-xs">Window</label>
|
|
172
175
|
<Select
|
|
173
176
|
value={targetWindow}
|
|
174
177
|
onValueChange={(v: string) => setTargetWindow(v)}
|
|
175
178
|
options={targetWindowOptions}
|
|
176
179
|
placeholder="Select window"
|
|
177
|
-
className="text-
|
|
180
|
+
className="text-xs"
|
|
178
181
|
/>
|
|
179
182
|
{targetWindow === "custom" && (
|
|
180
|
-
<div className="
|
|
183
|
+
<div className="flex flex-col gap-1">
|
|
181
184
|
<label className="block text-xs">Custom</label>
|
|
182
185
|
<Input
|
|
183
186
|
value={customTarget || ""}
|
|
184
187
|
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
185
188
|
setCustomTarget(e.target.value);
|
|
186
189
|
}}
|
|
190
|
+
placeholder="Enter window name"
|
|
187
191
|
className="text-sm"
|
|
188
192
|
/>
|
|
189
193
|
</div>
|
|
@@ -192,6 +196,9 @@ export function LinkEditorDialog({
|
|
|
192
196
|
</div>
|
|
193
197
|
</div>
|
|
194
198
|
<DialogButtons>
|
|
199
|
+
<Button variant="ghost" onClick={onCancel}>
|
|
200
|
+
Cancel
|
|
201
|
+
</Button>
|
|
195
202
|
<Button
|
|
196
203
|
onClick={() => {
|
|
197
204
|
const isExternal = activeTabIndex === 1;
|
|
@@ -207,7 +214,6 @@ export function LinkEditorDialog({
|
|
|
207
214
|
>
|
|
208
215
|
Ok
|
|
209
216
|
</Button>
|
|
210
|
-
<Button onClick={onCancel}>Cancel</Button>
|
|
211
217
|
</DialogButtons>
|
|
212
218
|
</div>
|
|
213
219
|
</DialogContent>
|
|
@@ -58,7 +58,7 @@ const UserMessage = ({ message }: { message: AgentChatMessage }) => {
|
|
|
58
58
|
</span>
|
|
59
59
|
)}
|
|
60
60
|
</div>
|
|
61
|
-
<div className="prose prose-sm max-w-none text-
|
|
61
|
+
<div className="prose prose-sm max-w-none text-xs text-gray-700 select-text">
|
|
62
62
|
{message.content}
|
|
63
63
|
</div>
|
|
64
64
|
</div>
|
|
@@ -929,36 +929,66 @@ export function AgentTerminal({
|
|
|
929
929
|
setIsLoading(false);
|
|
930
930
|
|
|
931
931
|
// Initialize local context for a brand-new agent (not yet persisted)
|
|
932
|
-
//
|
|
932
|
+
// Optionally seed with current page/selection/focused field based on profile setting
|
|
933
933
|
const item = editContext?.currentItemDescriptor;
|
|
934
|
-
const
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
934
|
+
const profileForSeeding: AiProfile | undefined = (() => {
|
|
935
|
+
try {
|
|
936
|
+
if (initialProfileIdFromMeta) {
|
|
937
|
+
const byId = (profiles || []).find(
|
|
938
|
+
(p) => p.id === initialProfileIdFromMeta,
|
|
939
|
+
);
|
|
940
|
+
if (byId) return byId;
|
|
941
|
+
}
|
|
942
|
+
if (initialProfileNameFromMeta) {
|
|
943
|
+
const byName = (profiles || []).find(
|
|
944
|
+
(p) => p.name === initialProfileNameFromMeta,
|
|
945
|
+
);
|
|
946
|
+
if (byName) return byName;
|
|
947
|
+
}
|
|
948
|
+
return (profiles || [])[0];
|
|
949
|
+
} catch {
|
|
950
|
+
return undefined;
|
|
951
|
+
}
|
|
952
|
+
})();
|
|
953
|
+
const shouldSeedContext = (() => {
|
|
954
|
+
try {
|
|
955
|
+
// Prefer profile flag if available; default to true when unspecified
|
|
956
|
+
return profileForSeeding?.includeEditorContextOnCreate !== undefined
|
|
957
|
+
? !!profileForSeeding.includeEditorContextOnCreate
|
|
958
|
+
: true;
|
|
959
|
+
} catch {
|
|
960
|
+
return true;
|
|
961
|
+
}
|
|
962
|
+
})();
|
|
963
|
+
const localCtx: AgentMetadata | null =
|
|
964
|
+
item && shouldSeedContext
|
|
965
|
+
? {
|
|
966
|
+
additionalData: {
|
|
967
|
+
context: {
|
|
968
|
+
pages: [
|
|
969
|
+
{
|
|
970
|
+
id: item.id,
|
|
971
|
+
language: item.language,
|
|
972
|
+
version: item.version,
|
|
973
|
+
name: editContext?.contentEditorItem?.name,
|
|
974
|
+
},
|
|
975
|
+
],
|
|
976
|
+
componentIds: editContext?.selection?.length
|
|
977
|
+
? editContext.selection
|
|
957
978
|
: undefined,
|
|
979
|
+
field:
|
|
980
|
+
fieldsContext?.focusedField?.fieldId &&
|
|
981
|
+
(fieldsContext.focusedField as any)?.item?.id
|
|
982
|
+
? {
|
|
983
|
+
fieldId: fieldsContext.focusedField.fieldId,
|
|
984
|
+
itemId: (fieldsContext.focusedField as any).item.id,
|
|
985
|
+
name: (fieldsContext.focusedField as any).fieldName,
|
|
986
|
+
}
|
|
987
|
+
: undefined,
|
|
988
|
+
},
|
|
958
989
|
},
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
: null;
|
|
990
|
+
}
|
|
991
|
+
: null;
|
|
962
992
|
|
|
963
993
|
let nextMetadata: AgentMetadata | null = null;
|
|
964
994
|
if (initialMetadata) {
|
|
@@ -486,7 +486,7 @@ export function AiResponseMessage({
|
|
|
486
486
|
return (
|
|
487
487
|
<div
|
|
488
488
|
key={"txt-" + idx}
|
|
489
|
-
className="prose prose-sm max-w-none text-
|
|
489
|
+
className="prose prose-sm max-w-none text-xs text-gray-700 select-text"
|
|
490
490
|
dangerouslySetInnerHTML={{ __html: html }}
|
|
491
491
|
/>
|
|
492
492
|
);
|
|
@@ -496,7 +496,7 @@ export function AiResponseMessage({
|
|
|
496
496
|
return (
|
|
497
497
|
<div key={"todo-" + idx} className="my-2">
|
|
498
498
|
{todo.title && (
|
|
499
|
-
<div className="mb-1 text-
|
|
499
|
+
<div className="mb-1 text-xs font-medium text-gray-800">
|
|
500
500
|
{todo.title}
|
|
501
501
|
</div>
|
|
502
502
|
)}
|
|
@@ -504,7 +504,7 @@ export function AiResponseMessage({
|
|
|
504
504
|
{todo.items.map((item, iIdx) => (
|
|
505
505
|
<label
|
|
506
506
|
key={(item.id || item.text || "todo") + "-" + iIdx}
|
|
507
|
-
className="flex items-start gap-2 text-
|
|
507
|
+
className="flex items-start gap-2 text-xs text-gray-700"
|
|
508
508
|
>
|
|
509
509
|
<Checkbox
|
|
510
510
|
checked={!!item.done}
|
|
@@ -521,7 +521,7 @@ export function AiResponseMessage({
|
|
|
521
521
|
{item.text}
|
|
522
522
|
</div>
|
|
523
523
|
{item.note && (
|
|
524
|
-
<div className="text-
|
|
524
|
+
<div className="text-gray-1 text-xs">
|
|
525
525
|
{item.note}
|
|
526
526
|
</div>
|
|
527
527
|
)}
|
|
@@ -69,8 +69,7 @@ const TEMPLATE_SECTION_TEMPLATE_ID = "E269FBB5-3750-427A-9149-7AA950B49301"; //
|
|
|
69
69
|
* Checks if an item change represents a template-related modification that should trigger cache clearing
|
|
70
70
|
*/
|
|
71
71
|
const isTemplateChange = async (
|
|
72
|
-
change: ItemChange
|
|
73
|
-
getItem: (descriptor: ItemDescriptor) => Promise<FullItem | undefined>,
|
|
72
|
+
change: ItemChange
|
|
74
73
|
): Promise<boolean> => {
|
|
75
74
|
try {
|
|
76
75
|
// Check if the item is under the /sitecore/templates path
|
|
@@ -643,7 +642,7 @@ export function useItemsRepository(
|
|
|
643
642
|
const wrappedCallback = async (changes: ItemChange[]) => {
|
|
644
643
|
// Check if any of the changes are template-related
|
|
645
644
|
const templateChanges = await Promise.all(
|
|
646
|
-
changes.map((change) => isTemplateChange(change
|
|
645
|
+
changes.map((change) => isTemplateChange(change)),
|
|
647
646
|
);
|
|
648
647
|
|
|
649
648
|
// If any template changes are detected, clear the cache
|