@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.
Files changed (106) hide show
  1. package/dist/components/ui/card.js +1 -1
  2. package/dist/components/ui/card.js.map +1 -1
  3. package/dist/components/ui/input.js +1 -1
  4. package/dist/components/ui/popover.d.ts +3 -1
  5. package/dist/components/ui/popover.js +1 -1
  6. package/dist/components/ui/popover.js.map +1 -1
  7. package/dist/components/ui/select.js +5 -3
  8. package/dist/components/ui/select.js.map +1 -1
  9. package/dist/config/config.js +1 -9
  10. package/dist/config/config.js.map +1 -1
  11. package/dist/editor/Editor.js +1 -1
  12. package/dist/editor/Editor.js.map +1 -1
  13. package/dist/editor/FieldList.js +1 -1
  14. package/dist/editor/FieldList.js.map +1 -1
  15. package/dist/editor/FieldListField.js +9 -3
  16. package/dist/editor/FieldListField.js.map +1 -1
  17. package/dist/editor/ItemInfo.js +1 -1
  18. package/dist/editor/ItemInfo.js.map +1 -1
  19. package/dist/editor/LinkEditorDialog.js +6 -6
  20. package/dist/editor/LinkEditorDialog.js.map +1 -1
  21. package/dist/editor/ai/AgentTerminal.js +32 -3
  22. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  23. package/dist/editor/ai/AiResponseMessage.js +2 -2
  24. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  25. package/dist/editor/client/itemsRepository.js +2 -2
  26. package/dist/editor/client/itemsRepository.js.map +1 -1
  27. package/dist/editor/control-center/setup-steps/AiSetupStep.js +251 -7
  28. package/dist/editor/control-center/setup-steps/AiSetupStep.js.map +1 -1
  29. package/dist/editor/field-types/DateFieldEditor.js +1 -1
  30. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  31. package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
  32. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
  33. package/dist/editor/field-types/DropLinkEditor.js +1 -1
  34. package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
  35. package/dist/editor/field-types/DropListEditor.js +1 -1
  36. package/dist/editor/field-types/DropListEditor.js.map +1 -1
  37. package/dist/editor/field-types/InternalLinkFieldEditor.js +1 -1
  38. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  39. package/dist/editor/field-types/LinkFieldEditor.js +2 -1
  40. package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
  41. package/dist/editor/field-types/TreeListEditor.js +75 -70
  42. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  43. package/dist/editor/menubar/PageSelector.js +2 -1
  44. package/dist/editor/menubar/PageSelector.js.map +1 -1
  45. package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
  46. package/dist/editor/page-editor-chrome/InlineEditor.js +8 -0
  47. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  48. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +8 -0
  49. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  50. package/dist/editor/page-viewer/DeviceToolbar.js +2 -1
  51. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  52. package/dist/editor/page-viewer/EditorForm.js +1 -5
  53. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  54. package/dist/editor/page-viewer/PageViewerFrame.js +17 -0
  55. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  56. package/dist/editor/pageModel.d.ts +1 -0
  57. package/dist/editor/services/aiService.d.ts +1 -0
  58. package/dist/editor/services/aiService.js.map +1 -1
  59. package/dist/editor/ui/Splitter.d.ts +1 -0
  60. package/dist/editor/ui/Splitter.js +9 -4
  61. package/dist/editor/ui/Splitter.js.map +1 -1
  62. package/dist/page-wizard/steps/ComponentTypesSelector.js +1 -1
  63. package/dist/page-wizard/steps/ComponentTypesSelector.js.map +1 -1
  64. package/dist/page-wizard/steps/ContentStep.js +81 -69
  65. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  66. package/dist/page-wizard/utils/dataAccessor.js +11 -5
  67. package/dist/page-wizard/utils/dataAccessor.js.map +1 -1
  68. package/dist/revision.d.ts +2 -2
  69. package/dist/revision.js +2 -2
  70. package/dist/styles.css +12 -3
  71. package/package.json +1 -1
  72. package/src/components/ui/card.tsx +1 -1
  73. package/src/components/ui/input.tsx +1 -1
  74. package/src/components/ui/popover.tsx +22 -15
  75. package/src/components/ui/select.tsx +44 -29
  76. package/src/config/config.tsx +0 -12
  77. package/src/editor/Editor.tsx +1 -1
  78. package/src/editor/FieldList.tsx +4 -1
  79. package/src/editor/FieldListField.tsx +10 -4
  80. package/src/editor/ItemInfo.tsx +1 -1
  81. package/src/editor/LinkEditorDialog.tsx +25 -19
  82. package/src/editor/ai/AgentTerminal.tsx +58 -28
  83. package/src/editor/ai/AiResponseMessage.tsx +4 -4
  84. package/src/editor/client/itemsRepository.ts +2 -3
  85. package/src/editor/control-center/setup-steps/AiSetupStep.tsx +362 -40
  86. package/src/editor/field-types/DateFieldEditor.tsx +2 -1
  87. package/src/editor/field-types/DateTimeFieldEditor.tsx +1 -1
  88. package/src/editor/field-types/DropLinkEditor.tsx +8 -6
  89. package/src/editor/field-types/DropListEditor.tsx +11 -9
  90. package/src/editor/field-types/InternalLinkFieldEditor.tsx +1 -1
  91. package/src/editor/field-types/LinkFieldEditor.tsx +2 -1
  92. package/src/editor/field-types/TreeListEditor.tsx +178 -178
  93. package/src/editor/menubar/PageSelector.tsx +3 -3
  94. package/src/editor/page-editor-chrome/FrameMenu.tsx +1 -1
  95. package/src/editor/page-editor-chrome/InlineEditor.tsx +10 -0
  96. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +11 -0
  97. package/src/editor/page-viewer/DeviceToolbar.tsx +9 -2
  98. package/src/editor/page-viewer/EditorForm.tsx +1 -6
  99. package/src/editor/page-viewer/PageViewerFrame.tsx +28 -0
  100. package/src/editor/pageModel.ts +1 -0
  101. package/src/editor/services/aiService.ts +2 -0
  102. package/src/editor/ui/Splitter.tsx +26 -2
  103. package/src/page-wizard/steps/ComponentTypesSelector.tsx +1 -1
  104. package/src/page-wizard/steps/ContentStep.tsx +129 -106
  105. package/src/page-wizard/utils/dataAccessor.ts +13 -5
  106. 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 gap-1 p-2">
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="border-l border-gray-200 p-3">
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
- <label className="mt-2 text-xs">Window</label>
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-sm"
180
+ className="text-xs"
178
181
  />
179
182
  {targetWindow === "custom" && (
180
- <div className="mt-2">
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-sm text-gray-700 select-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
- // Seed with current page/selection/focused field. If initialMetadata is provided (e.g., profile only), merge context in.
932
+ // Optionally seed with current page/selection/focused field based on profile setting
933
933
  const item = editContext?.currentItemDescriptor;
934
- const localCtx: AgentMetadata | null = item
935
- ? {
936
- additionalData: {
937
- context: {
938
- pages: [
939
- {
940
- id: item.id,
941
- language: item.language,
942
- version: item.version,
943
- name: editContext?.contentEditorItem?.name,
944
- },
945
- ],
946
- componentIds: editContext?.selection?.length
947
- ? editContext.selection
948
- : undefined,
949
- field:
950
- fieldsContext?.focusedField?.fieldId &&
951
- (fieldsContext.focusedField as any)?.item?.id
952
- ? {
953
- fieldId: fieldsContext.focusedField.fieldId,
954
- itemId: (fieldsContext.focusedField as any).item.id,
955
- name: (fieldsContext.focusedField as any).fieldName,
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-sm text-gray-700 select-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-sm font-medium text-gray-800">
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-sm text-gray-700"
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-xs text-gray-500">
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, getItem)),
645
+ changes.map((change) => isTemplateChange(change)),
647
646
  );
648
647
 
649
648
  // If any template changes are detected, clear the cache